mirror of
https://github.com/home-assistant/core.git
synced 2025-07-24 21:57:51 +00:00
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
@ -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,
|
||||||
|
@ -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({
|
||||||
|
@ -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",
|
||||||
|
},
|
||||||
|
),
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user