Add Pico buzzer abstraction
This commit is contained in:
@@ -0,0 +1,26 @@
|
|||||||
|
class Buzzer:
|
||||||
|
def __init__(self, pin=None):
|
||||||
|
self.pin = pin
|
||||||
|
self.enabled = False
|
||||||
|
self.pattern = None
|
||||||
|
|
||||||
|
def on(self):
|
||||||
|
self.enabled = True
|
||||||
|
if self.pin:
|
||||||
|
self.pin.value(1)
|
||||||
|
|
||||||
|
def off(self):
|
||||||
|
self.enabled = False
|
||||||
|
self.pattern = None
|
||||||
|
if self.pin:
|
||||||
|
self.pin.value(0)
|
||||||
|
|
||||||
|
def set_pattern(self, pattern):
|
||||||
|
self.pattern = pattern
|
||||||
|
self.enabled = pattern is not None
|
||||||
|
|
||||||
|
def update_from_alarm_view(self, alarm_view):
|
||||||
|
if alarm_view.should_buzz():
|
||||||
|
self.set_pattern("critical")
|
||||||
|
else:
|
||||||
|
self.off()
|
||||||
|
|||||||
@@ -628,3 +628,43 @@ def test_alarm_view_model_sensor_failure():
|
|||||||
assert alarm["severity"] == "warning"
|
assert alarm["severity"] == "warning"
|
||||||
assert alarm["title"] == "Sensor Failure"
|
assert alarm["title"] == "Sensor Failure"
|
||||||
assert alarm["detail"] == "Outside"
|
assert alarm["detail"] == "Outside"
|
||||||
|
|
||||||
|
|
||||||
|
class FakePin:
|
||||||
|
def __init__(self):
|
||||||
|
self.values = []
|
||||||
|
|
||||||
|
def value(self, value):
|
||||||
|
self.values.append(value)
|
||||||
|
|
||||||
|
|
||||||
|
def test_buzzer_on_off():
|
||||||
|
from hardware.buzzer import Buzzer
|
||||||
|
|
||||||
|
pin = FakePin()
|
||||||
|
buzzer = Buzzer(pin)
|
||||||
|
|
||||||
|
buzzer.on()
|
||||||
|
assert buzzer.enabled is True
|
||||||
|
assert pin.values[-1] == 1
|
||||||
|
|
||||||
|
buzzer.off()
|
||||||
|
assert buzzer.enabled is False
|
||||||
|
assert pin.values[-1] == 0
|
||||||
|
|
||||||
|
|
||||||
|
def test_buzzer_updates_from_alarm_view():
|
||||||
|
from hardware.buzzer import Buzzer
|
||||||
|
from ui.alarm_view_model import AlarmViewModel
|
||||||
|
|
||||||
|
buzzer = Buzzer()
|
||||||
|
|
||||||
|
buzzer.update_from_alarm_view(AlarmViewModel(["fridge_zone_1_high"]))
|
||||||
|
|
||||||
|
assert buzzer.enabled is True
|
||||||
|
assert buzzer.pattern == "critical"
|
||||||
|
|
||||||
|
buzzer.update_from_alarm_view(AlarmViewModel([]))
|
||||||
|
|
||||||
|
assert buzzer.enabled is False
|
||||||
|
assert buzzer.pattern is None
|
||||||
|
|||||||
Reference in New Issue
Block a user