diff --git a/config/schema.sql b/config/schema.sql index f10ed2b..c6a7c52 100644 --- a/config/schema.sql +++ b/config/schema.sql @@ -86,6 +86,7 @@ INSERT OR IGNORE INTO config VALUES ('unit', 'C', 'select', 'Temperature Unit', INSERT OR IGNORE INTO config VALUES ('brewery_name', 'My Home Brewery', 'text', 'Your brewery name', NULL ); INSERT OR IGNORE INTO config VALUES ('buzzer', 16, 'select', 'Buzzer GPIO', '[16,17,18,19,20]'); INSERT OR IGNORE INTO config VALUES ('buzzer_beep_level', 'HIGH', 'select', 'Buzzer Logic Beep Level', '["HIGH", "LOW"]'); +INSERT OR IGNORE INTO config VALUES ('buzzer_type', 'ACTIVE', 'select', 'Buzzer type', '["ACTIVE", "PASSIVE"]'); INSERT OR IGNORE INTO config VALUES ('setup', 'YES', 'select', 'Show the Setup dialog', '["YES","NO"]'); INSERT OR IGNORE INTO config VALUES ('brew_name', '', 'text', 'Brew Name', NULL); INSERT OR IGNORE INTO config VALUES ('donation_notification', 'YES', 'select', 'Disable Donation Notification', '["YES","NO"]'); diff --git a/modules/base_plugins/gpio_actor/__init__.py b/modules/base_plugins/gpio_actor/__init__.py index 820a55e..959b713 100644 --- a/modules/base_plugins/gpio_actor/__init__.py +++ b/modules/base_plugins/gpio_actor/__init__.py @@ -44,16 +44,16 @@ class GPIOPWM(ActorBase): def init(self): GPIO.setup(int(self.gpio), GPIO.OUT) GPIO.output(int(self.gpio), 0) + if self.frequency is None: + self.frequency = 0.5 # 2 sec + + self.p = GPIO.PWM(int(self.gpio), float(self.frequency)) def on(self, power=None): if power is not None: self.power = int(power) - - if self.frequency is None: - self.frequency = 0.5 # 2 sec - - self.p = GPIO.PWM(int(self.gpio), float(self.frequency)) + print "GPIO ON" self.p.start(int(self.power)) def set_power(self, power): diff --git a/modules/buzzer/__init__.py b/modules/buzzer/__init__.py index d0140a6..d083ad3 100644 --- a/modules/buzzer/__init__.py +++ b/modules/buzzer/__init__.py @@ -10,13 +10,16 @@ except Exception as e: class Buzzer(object): sound = ["H", 0.1, "L", 0.1, "H", 0.1, "L", 0.1, "H", 0.1, "L"] - def __init__(self, gpio, beep_level): + def __init__(self, gpio, buzzer_type, beep_level): try: cbpi.app.logger.info("INIT BUZZER NOW GPIO%s" % gpio) self.gpio = int(gpio) self.beep_level = beep_level + self.buzzer_type = buzzer_type GPIO.setmode(GPIO.BCM) GPIO.setup(self.gpio, GPIO.OUT) + if buzzer_type == "PASSIVE": + self.p = GPIO.PWM(int(gpio), 5000) self.state = True cbpi.app.logger.info("BUZZER SETUP OK") except Exception as e: @@ -29,19 +32,29 @@ class Buzzer(object): return def play(sound): + def output(level): + if self.buzzer_type == "PASSIVE" and level == GPIO.LOW: + self.p.stop() + elif self.buzzer_type == "PASSIVE": + self.p.start(50) + else: + GPIO.output(int(self.gpio), level) + try: for i in sound: if (isinstance(i, str)): if i == "H" and self.beep_level == "HIGH": - GPIO.output(int(self.gpio), GPIO.HIGH) + output(GPIO.HIGH) elif i == "H" and self.beep_level != "HIGH": - GPIO.output(int(self.gpio), GPIO.LOW) + output(GPIO.LOW) elif i == "L" and self.beep_level == "HIGH": - GPIO.output(int(self.gpio), GPIO.LOW) + output(GPIO.LOW) else: - GPIO.output(int(self.gpio), GPIO.HIGH) + output(GPIO.HIGH) else: time.sleep(i) + if self.buzzer_type == "PASSIVE": + self.p.stop() except Exception as e: pass @@ -51,7 +64,8 @@ class Buzzer(object): def init(cbpi): gpio = cbpi.get_config_parameter("buzzer", 16) beep_level = cbpi.get_config_parameter("buzzer_beep_level", "HIGH") + buzzer_type = cbpi.get_config_parameter("buzzer_type", "ACTIVE") - cbpi.buzzer = Buzzer(gpio, beep_level) + cbpi.buzzer = Buzzer(gpio, buzzer_type, beep_level) cbpi.beep() cbpi.app.logger.info("INIT OK") diff --git a/update/4_passive_buzzer.sql b/update/4_passive_buzzer.sql new file mode 100644 index 0000000..f42bfb5 --- /dev/null +++ b/update/4_passive_buzzer.sql @@ -0,0 +1 @@ +INSERT OR IGNORE INTO config VALUES ('buzzer_type', 'ACTIVE', 'select', 'Buzzer type', '["ACTIVE", "PASSIVE"]'); \ No newline at end of file