Add waterleak alert timestamp (#1162)

The T300 reports the timestamp of the last alarm, this exposes it to
consumers.
This commit is contained in:
Teemu R. 2024-10-18 13:18:12 +02:00 committed by GitHub
parent acd0202cab
commit 8a17752ae2
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 568 additions and 534 deletions

View File

@ -2,10 +2,11 @@
from __future__ import annotations from __future__ import annotations
from datetime import datetime
from enum import Enum from enum import Enum
from ...feature import Feature from ...feature import Feature
from ..smartmodule import SmartModule from ..smartmodule import Module, SmartModule
class WaterleakStatus(Enum): class WaterleakStatus(Enum):
@ -47,6 +48,18 @@ class WaterleakSensor(SmartModule):
type=Feature.Type.BinarySensor, type=Feature.Type.BinarySensor,
) )
) )
self._add_feature(
Feature(
self._device,
id="water_alert_timestamp",
name="Last alert timestamp",
container=self,
attribute_getter="alert_timestamp",
icon="mdi:alert",
category=Feature.Category.Info,
type=Feature.Type.Sensor,
)
)
def query(self) -> dict: def query(self) -> dict:
"""Query to execute during the update cycle.""" """Query to execute during the update cycle."""
@ -62,3 +75,14 @@ class WaterleakSensor(SmartModule):
def alert(self) -> bool: def alert(self) -> bool:
"""Return true if alarm is active.""" """Return true if alarm is active."""
return self._device.sys_info["in_alarm"] return self._device.sys_info["in_alarm"]
@property
def alert_timestamp(self) -> datetime | None:
"""Return timestamp of the last leak trigger."""
# The key is not always be there, maybe if it hasn't ever been triggered?
if "trigger_timestamp" not in self._device.sys_info:
return None
ts = self._device.sys_info["trigger_timestamp"]
tz = self._device.modules[Module.Time].timezone
return datetime.fromtimestamp(ts, tz=tz)

File diff suppressed because it is too large Load Diff

View File

@ -1,3 +1,4 @@
from datetime import datetime
from enum import Enum from enum import Enum
import pytest import pytest
@ -15,6 +16,8 @@ waterleak = parametrize(
("feature", "prop_name", "type"), ("feature", "prop_name", "type"),
[ [
("water_alert", "alert", int), ("water_alert", "alert", int),
# Can be converted to 'datetime | None' after py3.9 support is dropped
("water_alert_timestamp", "alert_timestamp", (datetime, type(None))),
("water_leak", "status", Enum), ("water_leak", "status", Enum),
], ],
) )