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.interfaces.sensors import SensorResources
from pydeconz.models.event import EventType from pydeconz.models.event import EventType
from pydeconz.models.sensor import SensorBase as PydeconzSensorBase 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.air_quality import AirQuality
from pydeconz.models.sensor.carbon_dioxide import CarbonDioxide from pydeconz.models.sensor.carbon_dioxide import CarbonDioxide
from pydeconz.models.sensor.consumption import Consumption from pydeconz.models.sensor.consumption import Consumption
@ -47,6 +48,7 @@ from homeassistant.const import (
UnitOfPower, UnitOfPower,
UnitOfPressure, UnitOfPressure,
UnitOfTemperature, UnitOfTemperature,
UnitOfTime,
) )
from homeassistant.core import HomeAssistant, callback from homeassistant.core import HomeAssistant, callback
from homeassistant.helpers.entity_platform import AddEntitiesCallback from homeassistant.helpers.entity_platform import AddEntitiesCallback
@ -77,6 +79,7 @@ ATTR_EVENT_ID = "event_id"
T = TypeVar( T = TypeVar(
"T", "T",
AirPurifier,
AirQuality, AirQuality,
CarbonDioxide, CarbonDioxide,
Consumption, Consumption,
@ -108,6 +111,19 @@ class DeconzSensorDescription(Generic[T], SensorEntityDescription):
ENTITY_DESCRIPTIONS: tuple[DeconzSensorDescription, ...] = ( 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]( DeconzSensorDescription[AirQuality](
key="air_quality", key="air_quality",
supported_fn=lambda device: device.supports_air_quality, supported_fn=lambda device: device.supports_air_quality,

View File

@ -1537,6 +1537,60 @@
'state': '90', '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] # name: test_sensors[config_entry_options0-sensor_payload3-expected3][sensor.airquality_1_ch2o-entry]
EntityRegistryEntrySnapshot({ EntityRegistryEntrySnapshot({
'aliases': set({ 'aliases': set({

View File

@ -602,6 +602,41 @@ TEST_DATA = [
"next_state": "80", "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",
},
),
] ]