monitor: update battery level notifications
This commit is contained in:
parent
4d5ec32eec
commit
ac84cda5bf
@ -63,7 +63,7 @@ _strings = {
|
|||||||
'chrg_evt_disconnected': 'AC line disconnected.',
|
'chrg_evt_disconnected': 'AC line disconnected.',
|
||||||
'chrg_evt_current_changed': 'AC charging current set to <b>%dA</b>.',
|
'chrg_evt_current_changed': 'AC charging current set to <b>%dA</b>.',
|
||||||
'chrg_evt_na_solar': 'AC line detected, but battery charging is unavailable due to active solar power line.',
|
'chrg_evt_na_solar': 'AC line detected, but battery charging is unavailable due to active solar power line.',
|
||||||
'battery_state_changed': 'Battery voltage state changed to <b>%s</b> (%0.1f V)'
|
'battery_level_changed': 'Battery level: <b>%s</b> (<b>%0.1f V</b> under <b>%d W</b> load)'
|
||||||
}
|
}
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
@ -395,18 +395,18 @@ def monitor_charging_event_handler(event: ChargingEvent, **kwargs) -> None:
|
|||||||
notify_all(_(f'chrg_evt_{key}', *args))
|
notify_all(_(f'chrg_evt_{key}', *args))
|
||||||
|
|
||||||
|
|
||||||
def monitor_battery_event_handler(state: BatteryState, v: float) -> None:
|
def monitor_battery_event_handler(state: BatteryState, v: float, load_watts: int) -> None:
|
||||||
if state == BatteryState.NORMAL:
|
if state == BatteryState.NORMAL:
|
||||||
label = 'normal'
|
label = '✅ Normal'
|
||||||
elif state == BatteryState.WARNING:
|
elif state == BatteryState.LOW:
|
||||||
label = 'warning'
|
label = '⚠️ Low'
|
||||||
elif state == BatteryState.CRITICAL:
|
elif state == BatteryState.CRITICAL:
|
||||||
label = 'critical'
|
label = '‼️ Critical'
|
||||||
else:
|
else:
|
||||||
logger.error('unknown battery state:', state)
|
logger.error('unknown battery state:', state)
|
||||||
return
|
return
|
||||||
|
|
||||||
notify_all(_('battery_state_changed', label, v))
|
notify_all(_('battery_level_changed', label, v, load_watts))
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
@ -28,7 +28,7 @@ class ChargingState(Enum):
|
|||||||
|
|
||||||
class BatteryState(Enum):
|
class BatteryState(Enum):
|
||||||
NORMAL = auto()
|
NORMAL = auto()
|
||||||
WARNING = auto()
|
LOW = auto()
|
||||||
CRITICAL = auto()
|
CRITICAL = auto()
|
||||||
|
|
||||||
|
|
||||||
@ -81,13 +81,14 @@ class InverterMonitor(Thread):
|
|||||||
ac = gs['grid_voltage']['value'] > 0 or gs['grid_freq']['value'] > 0
|
ac = gs['grid_voltage']['value'] > 0 or gs['grid_freq']['value'] > 0
|
||||||
solar = gs['pv1_input_power']['value'] > 0
|
solar = gs['pv1_input_power']['value'] > 0
|
||||||
v = float(gs['battery_voltage']['value'])
|
v = float(gs['battery_voltage']['value'])
|
||||||
|
load_watts = int(gs['ac_output_active_power']['value'])
|
||||||
|
|
||||||
_logger.debug(f'got status: ac={ac}, solar={solar}, v={v}')
|
_logger.debug(f'got status: ac={ac}, solar={solar}, v={v}')
|
||||||
|
|
||||||
self.ac_charging_program(ac, solar, v)
|
self.ac_charging_program(ac, solar, v)
|
||||||
|
|
||||||
if not ac:
|
if not ac:
|
||||||
self.low_voltage_program(v)
|
self.low_voltage_program(v, load_watts)
|
||||||
elif self.battery_state != BatteryState.NORMAL:
|
elif self.battery_state != BatteryState.NORMAL:
|
||||||
self.battery_state = BatteryState.NORMAL
|
self.battery_state = BatteryState.NORMAL
|
||||||
|
|
||||||
@ -181,17 +182,17 @@ class InverterMonitor(Thread):
|
|||||||
except InverterError as e:
|
except InverterError as e:
|
||||||
_logger.exception(e)
|
_logger.exception(e)
|
||||||
|
|
||||||
def low_voltage_program(self, v: float):
|
def low_voltage_program(self, v: float, load_watts: int):
|
||||||
if v < 45:
|
if v < 45:
|
||||||
state = BatteryState.CRITICAL
|
state = BatteryState.CRITICAL
|
||||||
elif v < 47:
|
elif v < 47:
|
||||||
state = BatteryState.WARNING
|
state = BatteryState.LOW
|
||||||
else:
|
else:
|
||||||
state = BatteryState.NORMAL
|
state = BatteryState.NORMAL
|
||||||
|
|
||||||
if state != self.battery_state:
|
if state != self.battery_state:
|
||||||
self.battery_state = state
|
self.battery_state = state
|
||||||
self.battery_event_handler(state, v=v)
|
self.battery_event_handler(state, v, load_watts)
|
||||||
|
|
||||||
def set_charging_event_handler(self, handler: Callable):
|
def set_charging_event_handler(self, handler: Callable):
|
||||||
self.charging_event_handler = handler
|
self.charging_event_handler = handler
|
||||||
|
Loading…
x
Reference in New Issue
Block a user