Add filter run time for deCONZ air purifiers (#123306)
* Add filter run time for deCONZ air purifiers * Add duration and second * Fix review comments * Update tests/components/deconz/snapshots/test_sensor.ambr --------- Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com>
This commit is contained in:
parent
9f469c08d1
commit
73f04e3ede
3 changed files with 105 additions and 0 deletions
|
@ -10,6 +10,7 @@ from typing import Generic, TypeVar
|
|||
from pydeconz.interfaces.sensors import SensorResources
|
||||
from pydeconz.models.event import EventType
|
||||
from pydeconz.models.sensor import SensorBase as PydeconzSensorBase
|
||||
from pydeconz.models.sensor.air_purifier import AirPurifier
|
||||
from pydeconz.models.sensor.air_quality import AirQuality
|
||||
from pydeconz.models.sensor.carbon_dioxide import CarbonDioxide
|
||||
from pydeconz.models.sensor.consumption import Consumption
|
||||
|
@ -47,6 +48,7 @@ from homeassistant.const import (
|
|||
UnitOfPower,
|
||||
UnitOfPressure,
|
||||
UnitOfTemperature,
|
||||
UnitOfTime,
|
||||
)
|
||||
from homeassistant.core import HomeAssistant, callback
|
||||
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||
|
@ -77,6 +79,7 @@ ATTR_EVENT_ID = "event_id"
|
|||
|
||||
T = TypeVar(
|
||||
"T",
|
||||
AirPurifier,
|
||||
AirQuality,
|
||||
CarbonDioxide,
|
||||
Consumption,
|
||||
|
@ -108,6 +111,19 @@ class DeconzSensorDescription(Generic[T], SensorEntityDescription):
|
|||
|
||||
|
||||
ENTITY_DESCRIPTIONS: tuple[DeconzSensorDescription, ...] = (
|
||||
DeconzSensorDescription[AirPurifier](
|
||||
key="air_purifier_filter_run_time",
|
||||
supported_fn=lambda device: True,
|
||||
update_key="filterruntime",
|
||||
name_suffix="Filter time",
|
||||
value_fn=lambda device: device.filter_run_time,
|
||||
instance_check=AirPurifier,
|
||||
device_class=SensorDeviceClass.DURATION,
|
||||
entity_category=EntityCategory.DIAGNOSTIC,
|
||||
native_unit_of_measurement=UnitOfTime.SECONDS,
|
||||
suggested_unit_of_measurement=UnitOfTime.DAYS,
|
||||
suggested_display_precision=1,
|
||||
),
|
||||
DeconzSensorDescription[AirQuality](
|
||||
key="air_quality",
|
||||
supported_fn=lambda device: device.supports_air_quality,
|
||||
|
|
|
@ -1537,6 +1537,60 @@
|
|||
'state': '90',
|
||||
})
|
||||
# ---
|
||||
# name: test_sensors[config_entry_options0-sensor_payload21-expected21][sensor.ikea_starkvind_filter_time-entry]
|
||||
EntityRegistryEntrySnapshot({
|
||||
'aliases': set({
|
||||
}),
|
||||
'area_id': None,
|
||||
'capabilities': None,
|
||||
'config_entry_id': <ANY>,
|
||||
'device_class': None,
|
||||
'device_id': <ANY>,
|
||||
'disabled_by': None,
|
||||
'domain': 'sensor',
|
||||
'entity_category': <EntityCategory.DIAGNOSTIC: 'diagnostic'>,
|
||||
'entity_id': 'sensor.ikea_starkvind_filter_time',
|
||||
'has_entity_name': False,
|
||||
'hidden_by': None,
|
||||
'icon': None,
|
||||
'id': <ANY>,
|
||||
'labels': set({
|
||||
}),
|
||||
'name': None,
|
||||
'options': dict({
|
||||
'sensor': dict({
|
||||
'suggested_display_precision': 1,
|
||||
}),
|
||||
'sensor.private': dict({
|
||||
'suggested_unit_of_measurement': <UnitOfTime.DAYS: 'd'>,
|
||||
}),
|
||||
}),
|
||||
'original_device_class': <SensorDeviceClass.DURATION: 'duration'>,
|
||||
'original_icon': None,
|
||||
'original_name': 'IKEA Starkvind Filter time',
|
||||
'platform': 'deconz',
|
||||
'previous_unique_id': None,
|
||||
'supported_features': 0,
|
||||
'translation_key': None,
|
||||
'unique_id': '0c:43:14:ff:fe:6c:20:12-01-fc7d-air_purifier_filter_run_time',
|
||||
'unit_of_measurement': <UnitOfTime.DAYS: 'd'>,
|
||||
})
|
||||
# ---
|
||||
# name: test_sensors[config_entry_options0-sensor_payload21-expected21][sensor.ikea_starkvind_filter_time-state]
|
||||
StateSnapshot({
|
||||
'attributes': ReadOnlyDict({
|
||||
'device_class': 'duration',
|
||||
'friendly_name': 'IKEA Starkvind Filter time',
|
||||
'unit_of_measurement': <UnitOfTime.DAYS: 'd'>,
|
||||
}),
|
||||
'context': <ANY>,
|
||||
'entity_id': 'sensor.ikea_starkvind_filter_time',
|
||||
'last_changed': <ANY>,
|
||||
'last_reported': <ANY>,
|
||||
'last_updated': <ANY>,
|
||||
'state': '0.849594907407407',
|
||||
})
|
||||
# ---
|
||||
# name: test_sensors[config_entry_options0-sensor_payload3-expected3][sensor.airquality_1_ch2o-entry]
|
||||
EntityRegistryEntrySnapshot({
|
||||
'aliases': set({
|
||||
|
|
|
@ -602,6 +602,41 @@ TEST_DATA = [
|
|||
"next_state": "80",
|
||||
},
|
||||
),
|
||||
( # Air purifier filter time sensor
|
||||
{
|
||||
"config": {
|
||||
"filterlifetime": 259200,
|
||||
"ledindication": True,
|
||||
"locked": False,
|
||||
"mode": "speed_1",
|
||||
"on": True,
|
||||
"reachable": True,
|
||||
},
|
||||
"ep": 1,
|
||||
"etag": "de26d19d9e91b2db3ded6ee7ab6b6a4b",
|
||||
"lastannounced": None,
|
||||
"lastseen": "2024-08-07T18:27Z",
|
||||
"manufacturername": "IKEA of Sweden",
|
||||
"modelid": "STARKVIND Air purifier",
|
||||
"name": "IKEA Starkvind",
|
||||
"productid": "E2007",
|
||||
"state": {
|
||||
"deviceruntime": 73405,
|
||||
"filterruntime": 73405,
|
||||
"lastupdated": "2024-08-07T18:27:52.543",
|
||||
"replacefilter": False,
|
||||
"speed": 20,
|
||||
},
|
||||
"swversion": "1.1.001",
|
||||
"type": "ZHAAirPurifier",
|
||||
"uniqueid": "0c:43:14:ff:fe:6c:20:12-01-fc7d",
|
||||
},
|
||||
{
|
||||
"entity_id": "sensor.ikea_starkvind_filter_time",
|
||||
"websocket_event": {"state": {"filterruntime": 100000}},
|
||||
"next_state": "1.15740740740741",
|
||||
},
|
||||
),
|
||||
]
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue