Support carbon dioxide and formaldehyde sensors in deCONZ (#117877)

* Add formaldehyde sensor
* Add carbon dioxide sensor
* Bump pydeconz to v116
pull/117382/head^2
Robert Svensson 2024-05-22 07:33:55 +02:00 committed by GitHub
parent f42b98336c
commit 5abf77662a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 113 additions and 3 deletions

View File

@ -8,7 +8,7 @@
"iot_class": "local_push",
"loggers": ["pydeconz"],
"quality_scale": "platinum",
"requirements": ["pydeconz==115"],
"requirements": ["pydeconz==116"],
"ssdp": [
{
"manufacturer": "Royal Philips Electronics",

View File

@ -11,8 +11,10 @@ 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_quality import AirQuality
from pydeconz.models.sensor.carbon_dioxide import CarbonDioxide
from pydeconz.models.sensor.consumption import Consumption
from pydeconz.models.sensor.daylight import DAYLIGHT_STATUS, Daylight
from pydeconz.models.sensor.formaldehyde import Formaldehyde
from pydeconz.models.sensor.generic_status import GenericStatus
from pydeconz.models.sensor.humidity import Humidity
from pydeconz.models.sensor.light_level import LightLevel
@ -76,8 +78,10 @@ ATTR_EVENT_ID = "event_id"
T = TypeVar(
"T",
AirQuality,
CarbonDioxide,
Consumption,
Daylight,
Formaldehyde,
GenericStatus,
Humidity,
LightLevel,
@ -155,6 +159,16 @@ ENTITY_DESCRIPTIONS: tuple[DeconzSensorDescription, ...] = (
state_class=SensorStateClass.MEASUREMENT,
native_unit_of_measurement=CONCENTRATION_MICROGRAMS_PER_CUBIC_METER,
),
DeconzSensorDescription[CarbonDioxide](
key="carbon_dioxide",
supported_fn=lambda device: True,
update_key="measured_value",
value_fn=lambda device: device.carbon_dioxide,
instance_check=CarbonDioxide,
device_class=SensorDeviceClass.CO2,
state_class=SensorStateClass.MEASUREMENT,
native_unit_of_measurement=CONCENTRATION_PARTS_PER_BILLION,
),
DeconzSensorDescription[Consumption](
key="consumption",
supported_fn=lambda device: device.consumption is not None,
@ -174,6 +188,16 @@ ENTITY_DESCRIPTIONS: tuple[DeconzSensorDescription, ...] = (
icon="mdi:white-balance-sunny",
entity_registry_enabled_default=False,
),
DeconzSensorDescription[Formaldehyde](
key="formaldehyde",
supported_fn=lambda device: True,
update_key="measured_value",
value_fn=lambda device: device.formaldehyde,
instance_check=Formaldehyde,
device_class=SensorDeviceClass.VOLATILE_ORGANIC_COMPOUNDS,
state_class=SensorStateClass.MEASUREMENT,
native_unit_of_measurement=CONCENTRATION_PARTS_PER_BILLION,
),
DeconzSensorDescription[GenericStatus](
key="status",
supported_fn=lambda device: device.status is not None,

View File

@ -1773,7 +1773,7 @@ pydaikin==2.11.1
pydanfossair==0.1.0
# homeassistant.components.deconz
pydeconz==115
pydeconz==116
# homeassistant.components.delijn
pydelijn==1.1.0

View File

@ -1390,7 +1390,7 @@ pycsspeechtts==1.0.8
pydaikin==2.11.1
# homeassistant.components.deconz
pydeconz==115
pydeconz==116
# homeassistant.components.dexcom
pydexcom==0.2.3

View File

@ -275,6 +275,49 @@ TEST_DATA = [
"next_state": "50",
},
),
( # Carbon dioxide sensor
{
"capabilities": {
"measured_value": {
"unit": "PPB",
}
},
"config": {
"on": True,
"reachable": True,
},
"etag": "dc3a3788ddd2a2d175ead376ea4d814c",
"lastannounced": None,
"lastseen": "2024-02-02T21:13Z",
"manufacturername": "_TZE200_dwcarsat",
"modelid": "TS0601",
"name": "CarbonDioxide 35",
"state": {
"lastupdated": "2024-02-02T21:14:37.745",
"measured_value": 370,
},
"type": "ZHACarbonDioxide",
"uniqueid": "xx:xx:xx:xx:xx:xx:xx:xx-01-040d",
},
{
"entity_count": 1,
"device_count": 3,
"entity_id": "sensor.carbondioxide_35",
"unique_id": "xx:xx:xx:xx:xx:xx:xx:xx-01-040d-carbon_dioxide",
"state": "370",
"entity_category": None,
"device_class": SensorDeviceClass.CO2,
"state_class": CONCENTRATION_PARTS_PER_BILLION,
"attributes": {
"device_class": "carbon_dioxide",
"friendly_name": "CarbonDioxide 35",
"state_class": SensorStateClass.MEASUREMENT,
"unit_of_measurement": CONCENTRATION_PARTS_PER_BILLION,
},
"websocket_event": {"state": {"measured_value": 500}},
"next_state": "500",
},
),
( # Consumption sensor
{
"config": {"on": True, "reachable": True},
@ -354,6 +397,49 @@ TEST_DATA = [
"next_state": "dusk",
},
),
( # Formaldehyde
{
"capabilities": {
"measured_value": {
"unit": "PPM",
}
},
"config": {
"on": True,
"reachable": True,
},
"etag": "bb01ac0313b6724e8c540a6eef7cc3cb",
"lastannounced": None,
"lastseen": "2024-02-02T21:13Z",
"manufacturername": "_TZE200_dwcarsat",
"modelid": "TS0601",
"name": "Formaldehyde 34",
"state": {
"lastupdated": "2024-02-02T21:14:46.810",
"measured_value": 1,
},
"type": "ZHAFormaldehyde",
"uniqueid": "xx:xx:xx:xx:xx:xx:xx:xx-01-042b",
},
{
"entity_count": 1,
"device_count": 3,
"entity_id": "sensor.formaldehyde_34",
"unique_id": "xx:xx:xx:xx:xx:xx:xx:xx-01-042b-formaldehyde",
"state": "1",
"entity_category": None,
"device_class": SensorDeviceClass.VOLATILE_ORGANIC_COMPOUNDS,
"state_class": SensorStateClass.MEASUREMENT,
"attributes": {
"device_class": "volatile_organic_compounds",
"friendly_name": "Formaldehyde 34",
"state_class": SensorStateClass.MEASUREMENT,
"unit_of_measurement": CONCENTRATION_PARTS_PER_BILLION,
},
"websocket_event": {"state": {"measured_value": 2}},
"next_state": "2",
},
),
( # Generic status sensor
{
"config": {