From a7e44b17b3900f555c43e786fec3f2d64ea40865 Mon Sep 17 00:00:00 2001 From: "zhijie.wang" Date: Mon, 23 Jun 2025 17:25:55 +0800 Subject: [PATCH 1/2] Add MatterMeterSensor class for enhanced Matter sensor representation --- homeassistant/components/matter/sensor.py | 41 +++++++++++++++++++++-- 1 file changed, 38 insertions(+), 3 deletions(-) diff --git a/homeassistant/components/matter/sensor.py b/homeassistant/components/matter/sensor.py index f744ec8885a82..4c872fd62c394 100644 --- a/homeassistant/components/matter/sensor.py +++ b/homeassistant/components/matter/sensor.py @@ -199,6 +199,39 @@ def _update_from_device(self) -> None: self._attr_native_value = value +class MatterMeterSensor(MatterEntity, SensorEntity): + """Representation of a Matter Meter sensor.""" + + entity_description: MatterSensorEntityDescription + + @callback + def _update_from_device(self) -> None: + """Update from device.""" + raw_value: Nullable | float | None + raw_value, value_convert = ( + self.get_matter_attribute_value(self._entity_info.primary_attribute), + self.entity_description.measurement_to_ha, + ) + if raw_value in (None, NullValue): + self._attr_native_value = None + return + if value_convert is not None: + self._attr_native_value = value_convert(raw_value) + return + multiplier, divisor = ( + self.get_matter_attribute_value(self._entity_info.attributes_to_watch[1]), + self.get_matter_attribute_value(self._entity_info.attributes_to_watch[2]), + ) + for value in (divisor, multiplier): + if value in (None, NullValue, 0): + self._attr_native_value = None + return + self._attr_native_value = round( + raw_value * multiplier / divisor, + self.entity_description.suggested_display_precision or 2, + ) + + class MatterDraftElectricalMeasurementSensor(MatterEntity, SensorEntity): """Representation of a Matter sensor for Matter 1.0 draft ElectricalMeasurement cluster.""" @@ -682,14 +715,16 @@ def _update_from_device(self) -> None: key="ThirdRealityEnergySensorWattAccumulated", device_class=SensorDeviceClass.ENERGY, entity_category=EntityCategory.DIAGNOSTIC, - native_unit_of_measurement=UnitOfEnergy.WATT_HOUR, + native_unit_of_measurement=UnitOfEnergy.KILO_WATT_HOUR, suggested_display_precision=3, state_class=SensorStateClass.TOTAL_INCREASING, - measurement_to_ha=lambda x: x / 1000, + measurement_to_ha=None, ), - entity_class=MatterSensor, + entity_class=MatterMeterSensor, required_attributes=( ThirdRealityMeteringCluster.Attributes.CurrentSummationDelivered, + ThirdRealityMeteringCluster.Attributes.Multiplier, + ThirdRealityMeteringCluster.Attributes.Divisor, ), absent_clusters=(clusters.ElectricalEnergyMeasurement,), ), From 218f52e7a4a9e56f46fffc65abc6764fc29ca41f Mon Sep 17 00:00:00 2001 From: 3reality-wangzhijie Date: Wed, 2 Jul 2025 08:25:08 +0800 Subject: [PATCH 2/2] Update homeassistant/components/matter/sensor.py MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Ludovic BOUÉ --- homeassistant/components/matter/sensor.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/homeassistant/components/matter/sensor.py b/homeassistant/components/matter/sensor.py index 4c872fd62c394..ac5ed3fc6d0d1 100644 --- a/homeassistant/components/matter/sensor.py +++ b/homeassistant/components/matter/sensor.py @@ -200,7 +200,7 @@ def _update_from_device(self) -> None: class MatterMeterSensor(MatterEntity, SensorEntity): - """Representation of a Matter Meter sensor.""" + """Representation of a Matter Meter sensor.""" entity_description: MatterSensorEntityDescription