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:
Robert Svensson 2024-09-06 15:41:49 +02:00 committed by GitHub
parent 9f469c08d1
commit 73f04e3ede
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 105 additions and 0 deletions

View file

@ -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,

View file

@ -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({

View file

@ -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",
},
),
]