Add Pico dashboard core state and alarm logic
This commit is contained in:
@@ -0,0 +1,44 @@
|
||||
from .alarm_definitions import (
|
||||
BATTERY_SOC_LOW,
|
||||
BATTERY_VOLTAGE_LOW,
|
||||
FRIDGE_ZONE_1_HIGH,
|
||||
FRIDGE_ZONE_2_HIGH,
|
||||
SENSOR_FAILURE,
|
||||
COMMUNICATION_LOST,
|
||||
DEFAULT_THRESHOLDS,
|
||||
)
|
||||
|
||||
|
||||
class AlarmManager:
|
||||
def __init__(self, thresholds=None):
|
||||
self.thresholds = dict(DEFAULT_THRESHOLDS)
|
||||
if thresholds:
|
||||
self.thresholds.update(thresholds)
|
||||
|
||||
def evaluate(self, state):
|
||||
alarms = []
|
||||
|
||||
soc = state.battery.get("soc")
|
||||
if soc is not None and soc < self.thresholds["battery_soc_low"]:
|
||||
alarms.append(BATTERY_SOC_LOW)
|
||||
|
||||
voltage = state.battery.get("voltage")
|
||||
if voltage is not None and voltage < self.thresholds["battery_voltage_low"]:
|
||||
alarms.append(BATTERY_VOLTAGE_LOW)
|
||||
|
||||
z1 = state.temps.get("fridge_zone_1")
|
||||
if z1 is not None and z1 > self.thresholds["fridge_temp_high"]:
|
||||
alarms.append(FRIDGE_ZONE_1_HIGH)
|
||||
|
||||
z2 = state.temps.get("fridge_zone_2")
|
||||
if z2 is not None and z2 > self.thresholds["fridge_temp_high"]:
|
||||
alarms.append(FRIDGE_ZONE_2_HIGH)
|
||||
|
||||
if not state.network.get("uart_connected", False):
|
||||
alarms.append(COMMUNICATION_LOST)
|
||||
|
||||
for sensor_name, online in state.sensor_health.items():
|
||||
if not online:
|
||||
alarms.append(f"{SENSOR_FAILURE}:{sensor_name}")
|
||||
|
||||
return alarms
|
||||
|
||||
Reference in New Issue
Block a user