Add matter sensor platform (#83147)
parent
e7a06046a7
commit
9d96a021c7
|
@ -7,6 +7,7 @@ from homeassistant.const import Platform
|
||||||
|
|
||||||
from .binary_sensor import DEVICE_ENTITY as BINARY_SENSOR_DEVICE_ENTITY
|
from .binary_sensor import DEVICE_ENTITY as BINARY_SENSOR_DEVICE_ENTITY
|
||||||
from .light import DEVICE_ENTITY as LIGHT_DEVICE_ENTITY
|
from .light import DEVICE_ENTITY as LIGHT_DEVICE_ENTITY
|
||||||
|
from .sensor import DEVICE_ENTITY as SENSOR_DEVICE_ENTITY
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from matter_server.common.models.device_types import DeviceType
|
from matter_server.common.models.device_types import DeviceType
|
||||||
|
@ -23,4 +24,5 @@ DEVICE_PLATFORM: dict[
|
||||||
] = {
|
] = {
|
||||||
Platform.BINARY_SENSOR: BINARY_SENSOR_DEVICE_ENTITY,
|
Platform.BINARY_SENSOR: BINARY_SENSOR_DEVICE_ENTITY,
|
||||||
Platform.LIGHT: LIGHT_DEVICE_ENTITY,
|
Platform.LIGHT: LIGHT_DEVICE_ENTITY,
|
||||||
|
Platform.SENSOR: SENSOR_DEVICE_ENTITY,
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,167 @@
|
||||||
|
"""Matter sensors."""
|
||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
from collections.abc import Callable
|
||||||
|
from dataclasses import dataclass
|
||||||
|
from functools import partial
|
||||||
|
from typing import TYPE_CHECKING, Any
|
||||||
|
|
||||||
|
from chip.clusters import Objects as clusters
|
||||||
|
from chip.clusters.Types import Nullable, NullValue
|
||||||
|
from matter_server.common.models import device_types
|
||||||
|
from matter_server.common.models.device_type_instance import MatterDeviceTypeInstance
|
||||||
|
|
||||||
|
from homeassistant.components.sensor import (
|
||||||
|
SensorDeviceClass,
|
||||||
|
SensorEntity,
|
||||||
|
SensorEntityDescription,
|
||||||
|
SensorStateClass,
|
||||||
|
)
|
||||||
|
from homeassistant.config_entries import ConfigEntry
|
||||||
|
from homeassistant.const import (
|
||||||
|
LIGHT_LUX,
|
||||||
|
PERCENTAGE,
|
||||||
|
VOLUME_FLOW_RATE_CUBIC_METERS_PER_HOUR,
|
||||||
|
Platform,
|
||||||
|
UnitOfPressure,
|
||||||
|
UnitOfTemperature,
|
||||||
|
)
|
||||||
|
from homeassistant.core import HomeAssistant, callback
|
||||||
|
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||||
|
|
||||||
|
from .const import DOMAIN
|
||||||
|
from .entity import MatterEntity, MatterEntityDescriptionBaseClass
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
from .adapter import MatterAdapter
|
||||||
|
|
||||||
|
|
||||||
|
async def async_setup_entry(
|
||||||
|
hass: HomeAssistant,
|
||||||
|
config_entry: ConfigEntry,
|
||||||
|
async_add_entities: AddEntitiesCallback,
|
||||||
|
) -> None:
|
||||||
|
"""Set up Matter sensors from Config Entry."""
|
||||||
|
matter: MatterAdapter = hass.data[DOMAIN][config_entry.entry_id]
|
||||||
|
matter.register_platform_handler(Platform.SENSOR, async_add_entities)
|
||||||
|
|
||||||
|
|
||||||
|
class MatterSensor(MatterEntity, SensorEntity):
|
||||||
|
"""Representation of a Matter sensor."""
|
||||||
|
|
||||||
|
_attr_state_class = SensorStateClass.MEASUREMENT
|
||||||
|
entity_description: MatterSensorEntityDescription
|
||||||
|
|
||||||
|
@callback
|
||||||
|
def _update_from_device(self) -> None:
|
||||||
|
"""Update from device."""
|
||||||
|
measurement: Nullable | float | None
|
||||||
|
measurement = _get_attribute_value(
|
||||||
|
self._device_type_instance,
|
||||||
|
# We always subscribe to a single value
|
||||||
|
self.entity_description.subscribe_attributes[0],
|
||||||
|
)
|
||||||
|
|
||||||
|
if measurement is NullValue or measurement is None:
|
||||||
|
measurement = None
|
||||||
|
else:
|
||||||
|
measurement = self.entity_description.measurement_to_ha(measurement)
|
||||||
|
|
||||||
|
self._attr_native_value = measurement
|
||||||
|
|
||||||
|
|
||||||
|
def _get_attribute_value(
|
||||||
|
device_type_instance: MatterDeviceTypeInstance,
|
||||||
|
attribute: clusters.ClusterAttributeDescriptor,
|
||||||
|
) -> Any:
|
||||||
|
"""Return the value of an attribute."""
|
||||||
|
# Find the cluster for this attribute. We don't have a lookup table yet.
|
||||||
|
cluster_cls: clusters.Cluster = next(
|
||||||
|
cluster
|
||||||
|
for cluster in device_type_instance.device_type.clusters
|
||||||
|
if cluster.id == attribute.cluster_id
|
||||||
|
)
|
||||||
|
|
||||||
|
# Find the attribute descriptor so we know the instance variable to fetch
|
||||||
|
attribute_descriptor: clusters.ClusterObjectFieldDescriptor = next(
|
||||||
|
descriptor
|
||||||
|
for descriptor in cluster_cls.descriptor.Fields
|
||||||
|
if descriptor.Tag == attribute.attribute_id
|
||||||
|
)
|
||||||
|
|
||||||
|
cluster_data = device_type_instance.get_cluster(cluster_cls)
|
||||||
|
return getattr(cluster_data, attribute_descriptor.Label)
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class MatterSensorEntityDescriptionMixin:
|
||||||
|
"""Required fields for sensor device mapping."""
|
||||||
|
|
||||||
|
measurement_to_ha: Callable[[float], float]
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class MatterSensorEntityDescription(
|
||||||
|
SensorEntityDescription,
|
||||||
|
MatterEntityDescriptionBaseClass,
|
||||||
|
MatterSensorEntityDescriptionMixin,
|
||||||
|
):
|
||||||
|
"""Matter Sensor entity description."""
|
||||||
|
|
||||||
|
|
||||||
|
# You can't set default values on inherited data classes
|
||||||
|
MatterSensorEntityDescriptionFactory = partial(
|
||||||
|
MatterSensorEntityDescription, entity_cls=MatterSensor
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
DEVICE_ENTITY: dict[
|
||||||
|
type[device_types.DeviceType],
|
||||||
|
MatterEntityDescriptionBaseClass | list[MatterEntityDescriptionBaseClass],
|
||||||
|
] = {
|
||||||
|
device_types.TemperatureSensor: MatterSensorEntityDescriptionFactory(
|
||||||
|
key=device_types.TemperatureSensor,
|
||||||
|
name="Temperature",
|
||||||
|
measurement_to_ha=lambda x: x / 100,
|
||||||
|
subscribe_attributes=(
|
||||||
|
clusters.TemperatureMeasurement.Attributes.MeasuredValue,
|
||||||
|
),
|
||||||
|
native_unit_of_measurement=UnitOfTemperature.CELSIUS,
|
||||||
|
device_class=SensorDeviceClass.TEMPERATURE,
|
||||||
|
),
|
||||||
|
device_types.PressureSensor: MatterSensorEntityDescriptionFactory(
|
||||||
|
key=device_types.PressureSensor,
|
||||||
|
name="Pressure",
|
||||||
|
measurement_to_ha=lambda x: x / 10,
|
||||||
|
subscribe_attributes=(clusters.PressureMeasurement.Attributes.MeasuredValue,),
|
||||||
|
native_unit_of_measurement=UnitOfPressure.KPA,
|
||||||
|
device_class=SensorDeviceClass.PRESSURE,
|
||||||
|
),
|
||||||
|
device_types.FlowSensor: MatterSensorEntityDescriptionFactory(
|
||||||
|
key=device_types.FlowSensor,
|
||||||
|
name="Flow",
|
||||||
|
measurement_to_ha=lambda x: x / 10,
|
||||||
|
subscribe_attributes=(clusters.FlowMeasurement.Attributes.MeasuredValue,),
|
||||||
|
native_unit_of_measurement=VOLUME_FLOW_RATE_CUBIC_METERS_PER_HOUR,
|
||||||
|
),
|
||||||
|
device_types.HumiditySensor: MatterSensorEntityDescriptionFactory(
|
||||||
|
key=device_types.HumiditySensor,
|
||||||
|
name="Humidity",
|
||||||
|
measurement_to_ha=lambda x: x / 100,
|
||||||
|
subscribe_attributes=(
|
||||||
|
clusters.RelativeHumidityMeasurement.Attributes.MeasuredValue,
|
||||||
|
),
|
||||||
|
native_unit_of_measurement=PERCENTAGE,
|
||||||
|
device_class=SensorDeviceClass.HUMIDITY,
|
||||||
|
),
|
||||||
|
device_types.LightSensor: MatterSensorEntityDescriptionFactory(
|
||||||
|
key=device_types.LightSensor,
|
||||||
|
name="Light",
|
||||||
|
measurement_to_ha=lambda x: round(pow(10, ((x - 1) / 10000)), 1),
|
||||||
|
subscribe_attributes=(
|
||||||
|
clusters.IlluminanceMeasurement.Attributes.MeasuredValue,
|
||||||
|
),
|
||||||
|
native_unit_of_measurement=LIGHT_LUX,
|
||||||
|
device_class=SensorDeviceClass.ILLUMINANCE,
|
||||||
|
),
|
||||||
|
}
|
|
@ -4,6 +4,113 @@
|
||||||
"last_interview": "2022-11-29T21:23:48.485057",
|
"last_interview": "2022-11-29T21:23:48.485057",
|
||||||
"interview_version": 1,
|
"interview_version": 1,
|
||||||
"attributes": {
|
"attributes": {
|
||||||
|
"0/29/0": {
|
||||||
|
"node_id": 1,
|
||||||
|
"endpoint": 0,
|
||||||
|
"cluster_id": 29,
|
||||||
|
"cluster_type": "chip.clusters.Objects.Descriptor",
|
||||||
|
"cluster_name": "Descriptor",
|
||||||
|
"attribute_id": 0,
|
||||||
|
"attribute_type": "chip.clusters.Objects.Descriptor.Attributes.DeviceTypeList",
|
||||||
|
"attribute_name": "DeviceTypeList",
|
||||||
|
"value": [
|
||||||
|
{
|
||||||
|
"type": 22,
|
||||||
|
"revision": 1
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"0/29/1": {
|
||||||
|
"node_id": 1,
|
||||||
|
"endpoint": 0,
|
||||||
|
"cluster_id": 29,
|
||||||
|
"cluster_type": "chip.clusters.Objects.Descriptor",
|
||||||
|
"cluster_name": "Descriptor",
|
||||||
|
"attribute_id": 1,
|
||||||
|
"attribute_type": "chip.clusters.Objects.Descriptor.Attributes.ServerList",
|
||||||
|
"attribute_name": "ServerList",
|
||||||
|
"value": [
|
||||||
|
4, 29, 31, 40, 42, 43, 44, 48, 49, 50, 51, 52, 53, 54, 55, 59, 60, 62,
|
||||||
|
63, 64, 65
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"0/29/2": {
|
||||||
|
"node_id": 1,
|
||||||
|
"endpoint": 0,
|
||||||
|
"cluster_id": 29,
|
||||||
|
"cluster_type": "chip.clusters.Objects.Descriptor",
|
||||||
|
"cluster_name": "Descriptor",
|
||||||
|
"attribute_id": 2,
|
||||||
|
"attribute_type": "chip.clusters.Objects.Descriptor.Attributes.ClientList",
|
||||||
|
"attribute_name": "ClientList",
|
||||||
|
"value": [41]
|
||||||
|
},
|
||||||
|
"0/29/3": {
|
||||||
|
"node_id": 1,
|
||||||
|
"endpoint": 0,
|
||||||
|
"cluster_id": 29,
|
||||||
|
"cluster_type": "chip.clusters.Objects.Descriptor",
|
||||||
|
"cluster_name": "Descriptor",
|
||||||
|
"attribute_id": 3,
|
||||||
|
"attribute_type": "chip.clusters.Objects.Descriptor.Attributes.PartsList",
|
||||||
|
"attribute_name": "PartsList",
|
||||||
|
"value": [1]
|
||||||
|
},
|
||||||
|
"0/29/65532": {
|
||||||
|
"node_id": 1,
|
||||||
|
"endpoint": 0,
|
||||||
|
"cluster_id": 29,
|
||||||
|
"cluster_type": "chip.clusters.Objects.Descriptor",
|
||||||
|
"cluster_name": "Descriptor",
|
||||||
|
"attribute_id": 65532,
|
||||||
|
"attribute_type": "chip.clusters.Objects.Descriptor.Attributes.FeatureMap",
|
||||||
|
"attribute_name": "FeatureMap",
|
||||||
|
"value": 0
|
||||||
|
},
|
||||||
|
"0/29/65533": {
|
||||||
|
"node_id": 1,
|
||||||
|
"endpoint": 0,
|
||||||
|
"cluster_id": 29,
|
||||||
|
"cluster_type": "chip.clusters.Objects.Descriptor",
|
||||||
|
"cluster_name": "Descriptor",
|
||||||
|
"attribute_id": 65533,
|
||||||
|
"attribute_type": "chip.clusters.Objects.Descriptor.Attributes.ClusterRevision",
|
||||||
|
"attribute_name": "ClusterRevision",
|
||||||
|
"value": 1
|
||||||
|
},
|
||||||
|
"0/29/65528": {
|
||||||
|
"node_id": 1,
|
||||||
|
"endpoint": 0,
|
||||||
|
"cluster_id": 29,
|
||||||
|
"cluster_type": "chip.clusters.Objects.Descriptor",
|
||||||
|
"cluster_name": "Descriptor",
|
||||||
|
"attribute_id": 65528,
|
||||||
|
"attribute_type": "chip.clusters.Objects.Descriptor.Attributes.GeneratedCommandList",
|
||||||
|
"attribute_name": "GeneratedCommandList",
|
||||||
|
"value": []
|
||||||
|
},
|
||||||
|
"0/29/65529": {
|
||||||
|
"node_id": 1,
|
||||||
|
"endpoint": 0,
|
||||||
|
"cluster_id": 29,
|
||||||
|
"cluster_type": "chip.clusters.Objects.Descriptor",
|
||||||
|
"cluster_name": "Descriptor",
|
||||||
|
"attribute_id": 65529,
|
||||||
|
"attribute_type": "chip.clusters.Objects.Descriptor.Attributes.AcceptedCommandList",
|
||||||
|
"attribute_name": "AcceptedCommandList",
|
||||||
|
"value": []
|
||||||
|
},
|
||||||
|
"0/29/65531": {
|
||||||
|
"node_id": 1,
|
||||||
|
"endpoint": 0,
|
||||||
|
"cluster_id": 29,
|
||||||
|
"cluster_type": "chip.clusters.Objects.Descriptor",
|
||||||
|
"cluster_name": "Descriptor",
|
||||||
|
"attribute_id": 65531,
|
||||||
|
"attribute_type": "chip.clusters.Objects.Descriptor.Attributes.AttributeList",
|
||||||
|
"attribute_name": "AttributeList",
|
||||||
|
"value": [0, 1, 2, 3, 65528, 65529, 65531, 65532, 65533]
|
||||||
|
},
|
||||||
"0/40/0": {
|
"0/40/0": {
|
||||||
"node_id": 1,
|
"node_id": 1,
|
||||||
"endpoint": 0,
|
"endpoint": 0,
|
||||||
|
|
|
@ -4,6 +4,113 @@
|
||||||
"last_interview": "2022-11-29T21:23:48.485057",
|
"last_interview": "2022-11-29T21:23:48.485057",
|
||||||
"interview_version": 1,
|
"interview_version": 1,
|
||||||
"attributes": {
|
"attributes": {
|
||||||
|
"0/29/0": {
|
||||||
|
"node_id": 1,
|
||||||
|
"endpoint": 0,
|
||||||
|
"cluster_id": 29,
|
||||||
|
"cluster_type": "chip.clusters.Objects.Descriptor",
|
||||||
|
"cluster_name": "Descriptor",
|
||||||
|
"attribute_id": 0,
|
||||||
|
"attribute_type": "chip.clusters.Objects.Descriptor.Attributes.DeviceTypeList",
|
||||||
|
"attribute_name": "DeviceTypeList",
|
||||||
|
"value": [
|
||||||
|
{
|
||||||
|
"type": 22,
|
||||||
|
"revision": 1
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"0/29/1": {
|
||||||
|
"node_id": 1,
|
||||||
|
"endpoint": 0,
|
||||||
|
"cluster_id": 29,
|
||||||
|
"cluster_type": "chip.clusters.Objects.Descriptor",
|
||||||
|
"cluster_name": "Descriptor",
|
||||||
|
"attribute_id": 1,
|
||||||
|
"attribute_type": "chip.clusters.Objects.Descriptor.Attributes.ServerList",
|
||||||
|
"attribute_name": "ServerList",
|
||||||
|
"value": [
|
||||||
|
4, 29, 31, 40, 42, 43, 44, 48, 49, 50, 51, 52, 53, 54, 55, 59, 60, 62,
|
||||||
|
63, 64, 65
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"0/29/2": {
|
||||||
|
"node_id": 1,
|
||||||
|
"endpoint": 0,
|
||||||
|
"cluster_id": 29,
|
||||||
|
"cluster_type": "chip.clusters.Objects.Descriptor",
|
||||||
|
"cluster_name": "Descriptor",
|
||||||
|
"attribute_id": 2,
|
||||||
|
"attribute_type": "chip.clusters.Objects.Descriptor.Attributes.ClientList",
|
||||||
|
"attribute_name": "ClientList",
|
||||||
|
"value": [41]
|
||||||
|
},
|
||||||
|
"0/29/3": {
|
||||||
|
"node_id": 1,
|
||||||
|
"endpoint": 0,
|
||||||
|
"cluster_id": 29,
|
||||||
|
"cluster_type": "chip.clusters.Objects.Descriptor",
|
||||||
|
"cluster_name": "Descriptor",
|
||||||
|
"attribute_id": 3,
|
||||||
|
"attribute_type": "chip.clusters.Objects.Descriptor.Attributes.PartsList",
|
||||||
|
"attribute_name": "PartsList",
|
||||||
|
"value": [1]
|
||||||
|
},
|
||||||
|
"0/29/65532": {
|
||||||
|
"node_id": 1,
|
||||||
|
"endpoint": 0,
|
||||||
|
"cluster_id": 29,
|
||||||
|
"cluster_type": "chip.clusters.Objects.Descriptor",
|
||||||
|
"cluster_name": "Descriptor",
|
||||||
|
"attribute_id": 65532,
|
||||||
|
"attribute_type": "chip.clusters.Objects.Descriptor.Attributes.FeatureMap",
|
||||||
|
"attribute_name": "FeatureMap",
|
||||||
|
"value": 0
|
||||||
|
},
|
||||||
|
"0/29/65533": {
|
||||||
|
"node_id": 1,
|
||||||
|
"endpoint": 0,
|
||||||
|
"cluster_id": 29,
|
||||||
|
"cluster_type": "chip.clusters.Objects.Descriptor",
|
||||||
|
"cluster_name": "Descriptor",
|
||||||
|
"attribute_id": 65533,
|
||||||
|
"attribute_type": "chip.clusters.Objects.Descriptor.Attributes.ClusterRevision",
|
||||||
|
"attribute_name": "ClusterRevision",
|
||||||
|
"value": 1
|
||||||
|
},
|
||||||
|
"0/29/65528": {
|
||||||
|
"node_id": 1,
|
||||||
|
"endpoint": 0,
|
||||||
|
"cluster_id": 29,
|
||||||
|
"cluster_type": "chip.clusters.Objects.Descriptor",
|
||||||
|
"cluster_name": "Descriptor",
|
||||||
|
"attribute_id": 65528,
|
||||||
|
"attribute_type": "chip.clusters.Objects.Descriptor.Attributes.GeneratedCommandList",
|
||||||
|
"attribute_name": "GeneratedCommandList",
|
||||||
|
"value": []
|
||||||
|
},
|
||||||
|
"0/29/65529": {
|
||||||
|
"node_id": 1,
|
||||||
|
"endpoint": 0,
|
||||||
|
"cluster_id": 29,
|
||||||
|
"cluster_type": "chip.clusters.Objects.Descriptor",
|
||||||
|
"cluster_name": "Descriptor",
|
||||||
|
"attribute_id": 65529,
|
||||||
|
"attribute_type": "chip.clusters.Objects.Descriptor.Attributes.AcceptedCommandList",
|
||||||
|
"attribute_name": "AcceptedCommandList",
|
||||||
|
"value": []
|
||||||
|
},
|
||||||
|
"0/29/65531": {
|
||||||
|
"node_id": 1,
|
||||||
|
"endpoint": 0,
|
||||||
|
"cluster_id": 29,
|
||||||
|
"cluster_type": "chip.clusters.Objects.Descriptor",
|
||||||
|
"cluster_name": "Descriptor",
|
||||||
|
"attribute_id": 65531,
|
||||||
|
"attribute_type": "chip.clusters.Objects.Descriptor.Attributes.AttributeList",
|
||||||
|
"attribute_name": "AttributeList",
|
||||||
|
"value": [0, 1, 2, 3, 65528, 65529, 65531, 65532, 65533]
|
||||||
|
},
|
||||||
"0/40/0": {
|
"0/40/0": {
|
||||||
"node_id": 1,
|
"node_id": 1,
|
||||||
"endpoint": 0,
|
"endpoint": 0,
|
||||||
|
@ -404,7 +511,7 @@
|
||||||
},
|
},
|
||||||
"1/29/65531": {
|
"1/29/65531": {
|
||||||
"node_id": 1,
|
"node_id": 1,
|
||||||
"endpoint": 0,
|
"endpoint": 1,
|
||||||
"cluster_id": 29,
|
"cluster_id": 29,
|
||||||
"cluster_type": "chip.clusters.Objects.Descriptor",
|
"cluster_type": "chip.clusters.Objects.Descriptor",
|
||||||
"cluster_name": "Descriptor",
|
"cluster_name": "Descriptor",
|
||||||
|
@ -413,9 +520,9 @@
|
||||||
"attribute_name": "AttributeList",
|
"attribute_name": "AttributeList",
|
||||||
"value": [0, 1, 2, 3, 65528, 65529, 65531, 65532, 65533]
|
"value": [0, 1, 2, 3, 65528, 65529, 65531, 65532, 65533]
|
||||||
},
|
},
|
||||||
"0/1029/0": {
|
"1/1029/0": {
|
||||||
"node_id": 3,
|
"node_id": 1,
|
||||||
"endpoint": 0,
|
"endpoint": 1,
|
||||||
"cluster_id": 1029,
|
"cluster_id": 1029,
|
||||||
"cluster_type": "chip.clusters.Objects.RelativeHumidityMeasurement",
|
"cluster_type": "chip.clusters.Objects.RelativeHumidityMeasurement",
|
||||||
"cluster_name": "RelativeHumidityMeasurement",
|
"cluster_name": "RelativeHumidityMeasurement",
|
||||||
|
@ -424,9 +531,9 @@
|
||||||
"attribute_name": "MeasuredValue",
|
"attribute_name": "MeasuredValue",
|
||||||
"value": 0
|
"value": 0
|
||||||
},
|
},
|
||||||
"0/1029/1": {
|
"1/1029/1": {
|
||||||
"node_id": 3,
|
"node_id": 1,
|
||||||
"endpoint": 0,
|
"endpoint": 1,
|
||||||
"cluster_id": 1029,
|
"cluster_id": 1029,
|
||||||
"cluster_type": "chip.clusters.Objects.RelativeHumidityMeasurement",
|
"cluster_type": "chip.clusters.Objects.RelativeHumidityMeasurement",
|
||||||
"cluster_name": "RelativeHumidityMeasurement",
|
"cluster_name": "RelativeHumidityMeasurement",
|
||||||
|
@ -435,9 +542,9 @@
|
||||||
"attribute_name": "MinMeasuredValue",
|
"attribute_name": "MinMeasuredValue",
|
||||||
"value": 0
|
"value": 0
|
||||||
},
|
},
|
||||||
"0/1029/2": {
|
"1/1029/2": {
|
||||||
"node_id": 3,
|
"node_id": 1,
|
||||||
"endpoint": 0,
|
"endpoint": 1,
|
||||||
"cluster_id": 1029,
|
"cluster_id": 1029,
|
||||||
"cluster_type": "chip.clusters.Objects.RelativeHumidityMeasurement",
|
"cluster_type": "chip.clusters.Objects.RelativeHumidityMeasurement",
|
||||||
"cluster_name": "RelativeHumidityMeasurement",
|
"cluster_name": "RelativeHumidityMeasurement",
|
||||||
|
@ -446,9 +553,9 @@
|
||||||
"attribute_name": "MaxMeasuredValue",
|
"attribute_name": "MaxMeasuredValue",
|
||||||
"value": 10000
|
"value": 10000
|
||||||
},
|
},
|
||||||
"0/1029/65532": {
|
"1/1029/65532": {
|
||||||
"node_id": 3,
|
"node_id": 1,
|
||||||
"endpoint": 0,
|
"endpoint": 1,
|
||||||
"cluster_id": 1029,
|
"cluster_id": 1029,
|
||||||
"cluster_type": "chip.clusters.Objects.RelativeHumidityMeasurement",
|
"cluster_type": "chip.clusters.Objects.RelativeHumidityMeasurement",
|
||||||
"cluster_name": "RelativeHumidityMeasurement",
|
"cluster_name": "RelativeHumidityMeasurement",
|
||||||
|
@ -457,9 +564,9 @@
|
||||||
"attribute_name": "FeatureMap",
|
"attribute_name": "FeatureMap",
|
||||||
"value": 0
|
"value": 0
|
||||||
},
|
},
|
||||||
"0/1029/65533": {
|
"1/1029/65533": {
|
||||||
"node_id": 3,
|
"node_id": 1,
|
||||||
"endpoint": 0,
|
"endpoint": 1,
|
||||||
"cluster_id": 1029,
|
"cluster_id": 1029,
|
||||||
"cluster_type": "chip.clusters.Objects.RelativeHumidityMeasurement",
|
"cluster_type": "chip.clusters.Objects.RelativeHumidityMeasurement",
|
||||||
"cluster_name": "RelativeHumidityMeasurement",
|
"cluster_name": "RelativeHumidityMeasurement",
|
||||||
|
@ -468,9 +575,9 @@
|
||||||
"attribute_name": "ClusterRevision",
|
"attribute_name": "ClusterRevision",
|
||||||
"value": 3
|
"value": 3
|
||||||
},
|
},
|
||||||
"0/1029/65528": {
|
"1/1029/65528": {
|
||||||
"node_id": 3,
|
"node_id": 1,
|
||||||
"endpoint": 0,
|
"endpoint": 1,
|
||||||
"cluster_id": 1029,
|
"cluster_id": 1029,
|
||||||
"cluster_type": "chip.clusters.Objects.RelativeHumidityMeasurement",
|
"cluster_type": "chip.clusters.Objects.RelativeHumidityMeasurement",
|
||||||
"cluster_name": "RelativeHumidityMeasurement",
|
"cluster_name": "RelativeHumidityMeasurement",
|
||||||
|
@ -479,9 +586,9 @@
|
||||||
"attribute_name": "GeneratedCommandList",
|
"attribute_name": "GeneratedCommandList",
|
||||||
"value": []
|
"value": []
|
||||||
},
|
},
|
||||||
"0/1029/65529": {
|
"1/1029/65529": {
|
||||||
"node_id": 3,
|
"node_id": 1,
|
||||||
"endpoint": 0,
|
"endpoint": 1,
|
||||||
"cluster_id": 1029,
|
"cluster_id": 1029,
|
||||||
"cluster_type": "chip.clusters.Objects.RelativeHumidityMeasurement",
|
"cluster_type": "chip.clusters.Objects.RelativeHumidityMeasurement",
|
||||||
"cluster_name": "RelativeHumidityMeasurement",
|
"cluster_name": "RelativeHumidityMeasurement",
|
||||||
|
@ -490,9 +597,9 @@
|
||||||
"attribute_name": "AcceptedCommandList",
|
"attribute_name": "AcceptedCommandList",
|
||||||
"value": []
|
"value": []
|
||||||
},
|
},
|
||||||
"0/1029/65531": {
|
"1/1029/65531": {
|
||||||
"node_id": 3,
|
"node_id": 1,
|
||||||
"endpoint": 0,
|
"endpoint": 1,
|
||||||
"cluster_id": 1029,
|
"cluster_id": 1029,
|
||||||
"cluster_type": "chip.clusters.Objects.RelativeHumidityMeasurement",
|
"cluster_type": "chip.clusters.Objects.RelativeHumidityMeasurement",
|
||||||
"cluster_name": "RelativeHumidityMeasurement",
|
"cluster_name": "RelativeHumidityMeasurement",
|
||||||
|
|
|
@ -4,6 +4,113 @@
|
||||||
"last_interview": "2022-11-29T21:23:48.485057",
|
"last_interview": "2022-11-29T21:23:48.485057",
|
||||||
"interview_version": 1,
|
"interview_version": 1,
|
||||||
"attributes": {
|
"attributes": {
|
||||||
|
"0/29/0": {
|
||||||
|
"node_id": 1,
|
||||||
|
"endpoint": 0,
|
||||||
|
"cluster_id": 29,
|
||||||
|
"cluster_type": "chip.clusters.Objects.Descriptor",
|
||||||
|
"cluster_name": "Descriptor",
|
||||||
|
"attribute_id": 0,
|
||||||
|
"attribute_type": "chip.clusters.Objects.Descriptor.Attributes.DeviceTypeList",
|
||||||
|
"attribute_name": "DeviceTypeList",
|
||||||
|
"value": [
|
||||||
|
{
|
||||||
|
"type": 22,
|
||||||
|
"revision": 1
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"0/29/1": {
|
||||||
|
"node_id": 1,
|
||||||
|
"endpoint": 0,
|
||||||
|
"cluster_id": 29,
|
||||||
|
"cluster_type": "chip.clusters.Objects.Descriptor",
|
||||||
|
"cluster_name": "Descriptor",
|
||||||
|
"attribute_id": 1,
|
||||||
|
"attribute_type": "chip.clusters.Objects.Descriptor.Attributes.ServerList",
|
||||||
|
"attribute_name": "ServerList",
|
||||||
|
"value": [
|
||||||
|
4, 29, 31, 40, 42, 43, 44, 48, 49, 50, 51, 52, 53, 54, 55, 59, 60, 62,
|
||||||
|
63, 64, 65
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"0/29/2": {
|
||||||
|
"node_id": 1,
|
||||||
|
"endpoint": 0,
|
||||||
|
"cluster_id": 29,
|
||||||
|
"cluster_type": "chip.clusters.Objects.Descriptor",
|
||||||
|
"cluster_name": "Descriptor",
|
||||||
|
"attribute_id": 2,
|
||||||
|
"attribute_type": "chip.clusters.Objects.Descriptor.Attributes.ClientList",
|
||||||
|
"attribute_name": "ClientList",
|
||||||
|
"value": [41]
|
||||||
|
},
|
||||||
|
"0/29/3": {
|
||||||
|
"node_id": 1,
|
||||||
|
"endpoint": 0,
|
||||||
|
"cluster_id": 29,
|
||||||
|
"cluster_type": "chip.clusters.Objects.Descriptor",
|
||||||
|
"cluster_name": "Descriptor",
|
||||||
|
"attribute_id": 3,
|
||||||
|
"attribute_type": "chip.clusters.Objects.Descriptor.Attributes.PartsList",
|
||||||
|
"attribute_name": "PartsList",
|
||||||
|
"value": [1]
|
||||||
|
},
|
||||||
|
"0/29/65532": {
|
||||||
|
"node_id": 1,
|
||||||
|
"endpoint": 0,
|
||||||
|
"cluster_id": 29,
|
||||||
|
"cluster_type": "chip.clusters.Objects.Descriptor",
|
||||||
|
"cluster_name": "Descriptor",
|
||||||
|
"attribute_id": 65532,
|
||||||
|
"attribute_type": "chip.clusters.Objects.Descriptor.Attributes.FeatureMap",
|
||||||
|
"attribute_name": "FeatureMap",
|
||||||
|
"value": 0
|
||||||
|
},
|
||||||
|
"0/29/65533": {
|
||||||
|
"node_id": 1,
|
||||||
|
"endpoint": 0,
|
||||||
|
"cluster_id": 29,
|
||||||
|
"cluster_type": "chip.clusters.Objects.Descriptor",
|
||||||
|
"cluster_name": "Descriptor",
|
||||||
|
"attribute_id": 65533,
|
||||||
|
"attribute_type": "chip.clusters.Objects.Descriptor.Attributes.ClusterRevision",
|
||||||
|
"attribute_name": "ClusterRevision",
|
||||||
|
"value": 1
|
||||||
|
},
|
||||||
|
"0/29/65528": {
|
||||||
|
"node_id": 1,
|
||||||
|
"endpoint": 0,
|
||||||
|
"cluster_id": 29,
|
||||||
|
"cluster_type": "chip.clusters.Objects.Descriptor",
|
||||||
|
"cluster_name": "Descriptor",
|
||||||
|
"attribute_id": 65528,
|
||||||
|
"attribute_type": "chip.clusters.Objects.Descriptor.Attributes.GeneratedCommandList",
|
||||||
|
"attribute_name": "GeneratedCommandList",
|
||||||
|
"value": []
|
||||||
|
},
|
||||||
|
"0/29/65529": {
|
||||||
|
"node_id": 1,
|
||||||
|
"endpoint": 0,
|
||||||
|
"cluster_id": 29,
|
||||||
|
"cluster_type": "chip.clusters.Objects.Descriptor",
|
||||||
|
"cluster_name": "Descriptor",
|
||||||
|
"attribute_id": 65529,
|
||||||
|
"attribute_type": "chip.clusters.Objects.Descriptor.Attributes.AcceptedCommandList",
|
||||||
|
"attribute_name": "AcceptedCommandList",
|
||||||
|
"value": []
|
||||||
|
},
|
||||||
|
"0/29/65531": {
|
||||||
|
"node_id": 1,
|
||||||
|
"endpoint": 0,
|
||||||
|
"cluster_id": 29,
|
||||||
|
"cluster_type": "chip.clusters.Objects.Descriptor",
|
||||||
|
"cluster_name": "Descriptor",
|
||||||
|
"attribute_id": 65531,
|
||||||
|
"attribute_type": "chip.clusters.Objects.Descriptor.Attributes.AttributeList",
|
||||||
|
"attribute_name": "AttributeList",
|
||||||
|
"value": [0, 1, 2, 3, 65528, 65529, 65531, 65532, 65533]
|
||||||
|
},
|
||||||
"0/40/0": {
|
"0/40/0": {
|
||||||
"node_id": 1,
|
"node_id": 1,
|
||||||
"endpoint": 0,
|
"endpoint": 0,
|
||||||
|
|
|
@ -4,6 +4,113 @@
|
||||||
"last_interview": "2022-11-29T21:23:48.485057",
|
"last_interview": "2022-11-29T21:23:48.485057",
|
||||||
"interview_version": 1,
|
"interview_version": 1,
|
||||||
"attributes": {
|
"attributes": {
|
||||||
|
"0/29/0": {
|
||||||
|
"node_id": 1,
|
||||||
|
"endpoint": 0,
|
||||||
|
"cluster_id": 29,
|
||||||
|
"cluster_type": "chip.clusters.Objects.Descriptor",
|
||||||
|
"cluster_name": "Descriptor",
|
||||||
|
"attribute_id": 0,
|
||||||
|
"attribute_type": "chip.clusters.Objects.Descriptor.Attributes.DeviceTypeList",
|
||||||
|
"attribute_name": "DeviceTypeList",
|
||||||
|
"value": [
|
||||||
|
{
|
||||||
|
"type": 22,
|
||||||
|
"revision": 1
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"0/29/1": {
|
||||||
|
"node_id": 1,
|
||||||
|
"endpoint": 0,
|
||||||
|
"cluster_id": 29,
|
||||||
|
"cluster_type": "chip.clusters.Objects.Descriptor",
|
||||||
|
"cluster_name": "Descriptor",
|
||||||
|
"attribute_id": 1,
|
||||||
|
"attribute_type": "chip.clusters.Objects.Descriptor.Attributes.ServerList",
|
||||||
|
"attribute_name": "ServerList",
|
||||||
|
"value": [
|
||||||
|
4, 29, 31, 40, 42, 43, 44, 48, 49, 50, 51, 52, 53, 54, 55, 59, 60, 62,
|
||||||
|
63, 64, 65
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"0/29/2": {
|
||||||
|
"node_id": 1,
|
||||||
|
"endpoint": 0,
|
||||||
|
"cluster_id": 29,
|
||||||
|
"cluster_type": "chip.clusters.Objects.Descriptor",
|
||||||
|
"cluster_name": "Descriptor",
|
||||||
|
"attribute_id": 2,
|
||||||
|
"attribute_type": "chip.clusters.Objects.Descriptor.Attributes.ClientList",
|
||||||
|
"attribute_name": "ClientList",
|
||||||
|
"value": [41]
|
||||||
|
},
|
||||||
|
"0/29/3": {
|
||||||
|
"node_id": 1,
|
||||||
|
"endpoint": 0,
|
||||||
|
"cluster_id": 29,
|
||||||
|
"cluster_type": "chip.clusters.Objects.Descriptor",
|
||||||
|
"cluster_name": "Descriptor",
|
||||||
|
"attribute_id": 3,
|
||||||
|
"attribute_type": "chip.clusters.Objects.Descriptor.Attributes.PartsList",
|
||||||
|
"attribute_name": "PartsList",
|
||||||
|
"value": [1]
|
||||||
|
},
|
||||||
|
"0/29/65532": {
|
||||||
|
"node_id": 1,
|
||||||
|
"endpoint": 0,
|
||||||
|
"cluster_id": 29,
|
||||||
|
"cluster_type": "chip.clusters.Objects.Descriptor",
|
||||||
|
"cluster_name": "Descriptor",
|
||||||
|
"attribute_id": 65532,
|
||||||
|
"attribute_type": "chip.clusters.Objects.Descriptor.Attributes.FeatureMap",
|
||||||
|
"attribute_name": "FeatureMap",
|
||||||
|
"value": 0
|
||||||
|
},
|
||||||
|
"0/29/65533": {
|
||||||
|
"node_id": 1,
|
||||||
|
"endpoint": 0,
|
||||||
|
"cluster_id": 29,
|
||||||
|
"cluster_type": "chip.clusters.Objects.Descriptor",
|
||||||
|
"cluster_name": "Descriptor",
|
||||||
|
"attribute_id": 65533,
|
||||||
|
"attribute_type": "chip.clusters.Objects.Descriptor.Attributes.ClusterRevision",
|
||||||
|
"attribute_name": "ClusterRevision",
|
||||||
|
"value": 1
|
||||||
|
},
|
||||||
|
"0/29/65528": {
|
||||||
|
"node_id": 1,
|
||||||
|
"endpoint": 0,
|
||||||
|
"cluster_id": 29,
|
||||||
|
"cluster_type": "chip.clusters.Objects.Descriptor",
|
||||||
|
"cluster_name": "Descriptor",
|
||||||
|
"attribute_id": 65528,
|
||||||
|
"attribute_type": "chip.clusters.Objects.Descriptor.Attributes.GeneratedCommandList",
|
||||||
|
"attribute_name": "GeneratedCommandList",
|
||||||
|
"value": []
|
||||||
|
},
|
||||||
|
"0/29/65529": {
|
||||||
|
"node_id": 1,
|
||||||
|
"endpoint": 0,
|
||||||
|
"cluster_id": 29,
|
||||||
|
"cluster_type": "chip.clusters.Objects.Descriptor",
|
||||||
|
"cluster_name": "Descriptor",
|
||||||
|
"attribute_id": 65529,
|
||||||
|
"attribute_type": "chip.clusters.Objects.Descriptor.Attributes.AcceptedCommandList",
|
||||||
|
"attribute_name": "AcceptedCommandList",
|
||||||
|
"value": []
|
||||||
|
},
|
||||||
|
"0/29/65531": {
|
||||||
|
"node_id": 1,
|
||||||
|
"endpoint": 0,
|
||||||
|
"cluster_id": 29,
|
||||||
|
"cluster_type": "chip.clusters.Objects.Descriptor",
|
||||||
|
"cluster_name": "Descriptor",
|
||||||
|
"attribute_id": 65531,
|
||||||
|
"attribute_type": "chip.clusters.Objects.Descriptor.Attributes.AttributeList",
|
||||||
|
"attribute_name": "AttributeList",
|
||||||
|
"value": [0, 1, 2, 3, 65528, 65529, 65531, 65532, 65533]
|
||||||
|
},
|
||||||
"0/40/0": {
|
"0/40/0": {
|
||||||
"node_id": 1,
|
"node_id": 1,
|
||||||
"endpoint": 0,
|
"endpoint": 0,
|
||||||
|
|
|
@ -4,6 +4,113 @@
|
||||||
"last_interview": "2022-11-29T21:23:48.485057",
|
"last_interview": "2022-11-29T21:23:48.485057",
|
||||||
"interview_version": 1,
|
"interview_version": 1,
|
||||||
"attributes": {
|
"attributes": {
|
||||||
|
"0/29/0": {
|
||||||
|
"node_id": 1,
|
||||||
|
"endpoint": 0,
|
||||||
|
"cluster_id": 29,
|
||||||
|
"cluster_type": "chip.clusters.Objects.Descriptor",
|
||||||
|
"cluster_name": "Descriptor",
|
||||||
|
"attribute_id": 0,
|
||||||
|
"attribute_type": "chip.clusters.Objects.Descriptor.Attributes.DeviceTypeList",
|
||||||
|
"attribute_name": "DeviceTypeList",
|
||||||
|
"value": [
|
||||||
|
{
|
||||||
|
"type": 22,
|
||||||
|
"revision": 1
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"0/29/1": {
|
||||||
|
"node_id": 1,
|
||||||
|
"endpoint": 0,
|
||||||
|
"cluster_id": 29,
|
||||||
|
"cluster_type": "chip.clusters.Objects.Descriptor",
|
||||||
|
"cluster_name": "Descriptor",
|
||||||
|
"attribute_id": 1,
|
||||||
|
"attribute_type": "chip.clusters.Objects.Descriptor.Attributes.ServerList",
|
||||||
|
"attribute_name": "ServerList",
|
||||||
|
"value": [
|
||||||
|
4, 29, 31, 40, 42, 43, 44, 48, 49, 50, 51, 52, 53, 54, 55, 59, 60, 62,
|
||||||
|
63, 64, 65
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"0/29/2": {
|
||||||
|
"node_id": 1,
|
||||||
|
"endpoint": 0,
|
||||||
|
"cluster_id": 29,
|
||||||
|
"cluster_type": "chip.clusters.Objects.Descriptor",
|
||||||
|
"cluster_name": "Descriptor",
|
||||||
|
"attribute_id": 2,
|
||||||
|
"attribute_type": "chip.clusters.Objects.Descriptor.Attributes.ClientList",
|
||||||
|
"attribute_name": "ClientList",
|
||||||
|
"value": [41]
|
||||||
|
},
|
||||||
|
"0/29/3": {
|
||||||
|
"node_id": 1,
|
||||||
|
"endpoint": 0,
|
||||||
|
"cluster_id": 29,
|
||||||
|
"cluster_type": "chip.clusters.Objects.Descriptor",
|
||||||
|
"cluster_name": "Descriptor",
|
||||||
|
"attribute_id": 3,
|
||||||
|
"attribute_type": "chip.clusters.Objects.Descriptor.Attributes.PartsList",
|
||||||
|
"attribute_name": "PartsList",
|
||||||
|
"value": [1]
|
||||||
|
},
|
||||||
|
"0/29/65532": {
|
||||||
|
"node_id": 1,
|
||||||
|
"endpoint": 0,
|
||||||
|
"cluster_id": 29,
|
||||||
|
"cluster_type": "chip.clusters.Objects.Descriptor",
|
||||||
|
"cluster_name": "Descriptor",
|
||||||
|
"attribute_id": 65532,
|
||||||
|
"attribute_type": "chip.clusters.Objects.Descriptor.Attributes.FeatureMap",
|
||||||
|
"attribute_name": "FeatureMap",
|
||||||
|
"value": 0
|
||||||
|
},
|
||||||
|
"0/29/65533": {
|
||||||
|
"node_id": 1,
|
||||||
|
"endpoint": 0,
|
||||||
|
"cluster_id": 29,
|
||||||
|
"cluster_type": "chip.clusters.Objects.Descriptor",
|
||||||
|
"cluster_name": "Descriptor",
|
||||||
|
"attribute_id": 65533,
|
||||||
|
"attribute_type": "chip.clusters.Objects.Descriptor.Attributes.ClusterRevision",
|
||||||
|
"attribute_name": "ClusterRevision",
|
||||||
|
"value": 1
|
||||||
|
},
|
||||||
|
"0/29/65528": {
|
||||||
|
"node_id": 1,
|
||||||
|
"endpoint": 0,
|
||||||
|
"cluster_id": 29,
|
||||||
|
"cluster_type": "chip.clusters.Objects.Descriptor",
|
||||||
|
"cluster_name": "Descriptor",
|
||||||
|
"attribute_id": 65528,
|
||||||
|
"attribute_type": "chip.clusters.Objects.Descriptor.Attributes.GeneratedCommandList",
|
||||||
|
"attribute_name": "GeneratedCommandList",
|
||||||
|
"value": []
|
||||||
|
},
|
||||||
|
"0/29/65529": {
|
||||||
|
"node_id": 1,
|
||||||
|
"endpoint": 0,
|
||||||
|
"cluster_id": 29,
|
||||||
|
"cluster_type": "chip.clusters.Objects.Descriptor",
|
||||||
|
"cluster_name": "Descriptor",
|
||||||
|
"attribute_id": 65529,
|
||||||
|
"attribute_type": "chip.clusters.Objects.Descriptor.Attributes.AcceptedCommandList",
|
||||||
|
"attribute_name": "AcceptedCommandList",
|
||||||
|
"value": []
|
||||||
|
},
|
||||||
|
"0/29/65531": {
|
||||||
|
"node_id": 1,
|
||||||
|
"endpoint": 0,
|
||||||
|
"cluster_id": 29,
|
||||||
|
"cluster_type": "chip.clusters.Objects.Descriptor",
|
||||||
|
"cluster_name": "Descriptor",
|
||||||
|
"attribute_id": 65531,
|
||||||
|
"attribute_type": "chip.clusters.Objects.Descriptor.Attributes.AttributeList",
|
||||||
|
"attribute_name": "AttributeList",
|
||||||
|
"value": [0, 1, 2, 3, 65528, 65529, 65531, 65532, 65533]
|
||||||
|
},
|
||||||
"0/40/0": {
|
"0/40/0": {
|
||||||
"node_id": 1,
|
"node_id": 1,
|
||||||
"endpoint": 0,
|
"endpoint": 0,
|
||||||
|
|
|
@ -0,0 +1,169 @@
|
||||||
|
"""Test Matter sensors."""
|
||||||
|
from unittest.mock import MagicMock
|
||||||
|
|
||||||
|
from matter_server.common.models.node import MatterNode
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
from homeassistant.core import HomeAssistant
|
||||||
|
|
||||||
|
from .common import (
|
||||||
|
set_node_attribute,
|
||||||
|
setup_integration_with_node_fixture,
|
||||||
|
trigger_subscription_callback,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture(name="flow_sensor_node")
|
||||||
|
async def flow_sensor_node_fixture(
|
||||||
|
hass: HomeAssistant, matter_client: MagicMock
|
||||||
|
) -> MatterNode:
|
||||||
|
"""Fixture for a flow sensor node."""
|
||||||
|
return await setup_integration_with_node_fixture(hass, "flow-sensor", matter_client)
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture(name="humidity_sensor_node")
|
||||||
|
async def humidity_sensor_node_fixture(
|
||||||
|
hass: HomeAssistant, matter_client: MagicMock
|
||||||
|
) -> MatterNode:
|
||||||
|
"""Fixture for a humidity sensor node."""
|
||||||
|
return await setup_integration_with_node_fixture(
|
||||||
|
hass, "humidity-sensor", matter_client
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture(name="light_sensor_node")
|
||||||
|
async def light_sensor_node_fixture(
|
||||||
|
hass: HomeAssistant, matter_client: MagicMock
|
||||||
|
) -> MatterNode:
|
||||||
|
"""Fixture for a light sensor node."""
|
||||||
|
return await setup_integration_with_node_fixture(
|
||||||
|
hass, "light-sensor", matter_client
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture(name="pressure_sensor_node")
|
||||||
|
async def pressure_sensor_node_fixture(
|
||||||
|
hass: HomeAssistant, matter_client: MagicMock
|
||||||
|
) -> MatterNode:
|
||||||
|
"""Fixture for a pressure sensor node."""
|
||||||
|
return await setup_integration_with_node_fixture(
|
||||||
|
hass, "pressure-sensor", matter_client
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture(name="temperature_sensor_node")
|
||||||
|
async def temperature_sensor_node_fixture(
|
||||||
|
hass: HomeAssistant, matter_client: MagicMock
|
||||||
|
) -> MatterNode:
|
||||||
|
"""Fixture for a temperature sensor node."""
|
||||||
|
return await setup_integration_with_node_fixture(
|
||||||
|
hass, "temperature-sensor", matter_client
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
async def test_sensor_null_value(
|
||||||
|
hass: HomeAssistant,
|
||||||
|
matter_client: MagicMock,
|
||||||
|
flow_sensor_node: MatterNode,
|
||||||
|
) -> None:
|
||||||
|
"""Test flow sensor."""
|
||||||
|
state = hass.states.get("sensor.mock_flow_sensor_flow")
|
||||||
|
assert state
|
||||||
|
assert state.state == "0.0"
|
||||||
|
|
||||||
|
set_node_attribute(flow_sensor_node, 1, 1028, 0, None)
|
||||||
|
await trigger_subscription_callback(hass, matter_client)
|
||||||
|
|
||||||
|
state = hass.states.get("sensor.mock_flow_sensor_flow")
|
||||||
|
assert state
|
||||||
|
assert state.state == "unknown"
|
||||||
|
|
||||||
|
|
||||||
|
async def test_flow_sensor(
|
||||||
|
hass: HomeAssistant,
|
||||||
|
matter_client: MagicMock,
|
||||||
|
flow_sensor_node: MatterNode,
|
||||||
|
) -> None:
|
||||||
|
"""Test flow sensor."""
|
||||||
|
state = hass.states.get("sensor.mock_flow_sensor_flow")
|
||||||
|
assert state
|
||||||
|
assert state.state == "0.0"
|
||||||
|
|
||||||
|
set_node_attribute(flow_sensor_node, 1, 1028, 0, 20)
|
||||||
|
await trigger_subscription_callback(hass, matter_client)
|
||||||
|
|
||||||
|
state = hass.states.get("sensor.mock_flow_sensor_flow")
|
||||||
|
assert state
|
||||||
|
assert state.state == "2.0"
|
||||||
|
|
||||||
|
|
||||||
|
async def test_humidity_sensor(
|
||||||
|
hass: HomeAssistant,
|
||||||
|
matter_client: MagicMock,
|
||||||
|
humidity_sensor_node: MatterNode,
|
||||||
|
) -> None:
|
||||||
|
"""Test humidity sensor."""
|
||||||
|
state = hass.states.get("sensor.mock_humidity_sensor_humidity")
|
||||||
|
assert state
|
||||||
|
assert state.state == "0.0"
|
||||||
|
|
||||||
|
set_node_attribute(humidity_sensor_node, 1, 1029, 0, 4000)
|
||||||
|
await trigger_subscription_callback(hass, matter_client)
|
||||||
|
|
||||||
|
state = hass.states.get("sensor.mock_humidity_sensor_humidity")
|
||||||
|
assert state
|
||||||
|
assert state.state == "40.0"
|
||||||
|
|
||||||
|
|
||||||
|
async def test_light_sensor(
|
||||||
|
hass: HomeAssistant,
|
||||||
|
matter_client: MagicMock,
|
||||||
|
light_sensor_node: MatterNode,
|
||||||
|
) -> None:
|
||||||
|
"""Test light sensor."""
|
||||||
|
state = hass.states.get("sensor.mock_light_sensor_light")
|
||||||
|
assert state
|
||||||
|
assert state.state == "1.3"
|
||||||
|
|
||||||
|
set_node_attribute(light_sensor_node, 1, 1024, 0, 3000)
|
||||||
|
await trigger_subscription_callback(hass, matter_client)
|
||||||
|
|
||||||
|
state = hass.states.get("sensor.mock_light_sensor_light")
|
||||||
|
assert state
|
||||||
|
assert state.state == "2.0"
|
||||||
|
|
||||||
|
|
||||||
|
async def test_pressure_sensor(
|
||||||
|
hass: HomeAssistant,
|
||||||
|
matter_client: MagicMock,
|
||||||
|
pressure_sensor_node: MatterNode,
|
||||||
|
) -> None:
|
||||||
|
"""Test pressure sensor."""
|
||||||
|
state = hass.states.get("sensor.mock_pressure_sensor_pressure")
|
||||||
|
assert state
|
||||||
|
assert state.state == "0.0"
|
||||||
|
|
||||||
|
set_node_attribute(pressure_sensor_node, 1, 1027, 0, 1010)
|
||||||
|
await trigger_subscription_callback(hass, matter_client)
|
||||||
|
|
||||||
|
state = hass.states.get("sensor.mock_pressure_sensor_pressure")
|
||||||
|
assert state
|
||||||
|
assert state.state == "101.0"
|
||||||
|
|
||||||
|
|
||||||
|
async def test_temperature_sensor(
|
||||||
|
hass: HomeAssistant,
|
||||||
|
matter_client: MagicMock,
|
||||||
|
temperature_sensor_node: MatterNode,
|
||||||
|
) -> None:
|
||||||
|
"""Test temperature sensor."""
|
||||||
|
state = hass.states.get("sensor.mock_temperature_sensor_temperature")
|
||||||
|
assert state
|
||||||
|
assert state.state == "21.0"
|
||||||
|
|
||||||
|
set_node_attribute(temperature_sensor_node, 1, 1026, 0, 2500)
|
||||||
|
await trigger_subscription_callback(hass, matter_client)
|
||||||
|
|
||||||
|
state = hass.states.get("sensor.mock_temperature_sensor_temperature")
|
||||||
|
assert state
|
||||||
|
assert state.state == "25.0"
|
Loading…
Reference in New Issue