From 3bf657284cf42f86008eaa2ff9a55a7ae2ab2d02 Mon Sep 17 00:00:00 2001 From: Alexei Chetroi Date: Fri, 17 Jan 2020 20:53:31 -0500 Subject: [PATCH] Refactor rounding for ZHA electrical measurement sensor (#30923) --- homeassistant/components/zha/sensor.py | 7 ++++--- tests/components/zha/test_sensor.py | 24 ++++++++++++++++++++++-- 2 files changed, 26 insertions(+), 5 deletions(-) diff --git a/homeassistant/components/zha/sensor.py b/homeassistant/components/zha/sensor.py index 5c51717b161..987fbf59baf 100644 --- a/homeassistant/components/zha/sensor.py +++ b/homeassistant/components/zha/sensor.py @@ -152,8 +152,6 @@ class Sensor(ZhaEntity): """Return the state of the entity.""" if self._state is None: return None - if isinstance(self._state, float): - return str(round(self._state, 2)) return self._state def async_set_state(self, state): @@ -231,7 +229,10 @@ class ElectricalMeasurement(Sensor): def formatter(self, value) -> int: """Return 'normalized' value.""" - return round(value * self._channel.multiplier / self._channel.divisor) + value = value * self._channel.multiplier / self._channel.divisor + if value < 100 and self._channel.divisor > 1: + return round(value, self._decimals) + return round(value) @STRICT_MATCH(channel_names=CHANNEL_MULTISTATE_INPUT) diff --git a/tests/components/zha/test_sensor.py b/tests/components/zha/test_sensor.py index 3e02542a4fb..4c913e10034 100644 --- a/tests/components/zha/test_sensor.py +++ b/tests/components/zha/test_sensor.py @@ -1,4 +1,6 @@ """Test zha sensor.""" +from unittest import mock + import pytest import zigpy.zcl.clusters.general as general import zigpy.zcl.clusters.homeautomation as homeautomation @@ -179,8 +181,26 @@ async def async_test_metering(hass, device_info): async def async_test_electrical_measurement(hass, device_info): """Test electrical measurement sensor.""" - await send_attribute_report(hass, device_info["cluster"], 1291, 100) - assert_state(hass, device_info, "100", "W") + with mock.patch( + ( + "homeassistant.components.zha.core.channels.homeautomation" + ".ElectricalMeasurementChannel.divisor" + ), + new_callable=mock.PropertyMock, + ) as divisor_mock: + divisor_mock.return_value = 1 + await send_attribute_report(hass, device_info["cluster"], 1291, 100) + assert_state(hass, device_info, "100", "W") + + await send_attribute_report(hass, device_info["cluster"], 1291, 99) + assert_state(hass, device_info, "99", "W") + + divisor_mock.return_value = 10 + await send_attribute_report(hass, device_info["cluster"], 1291, 1000) + assert_state(hass, device_info, "100", "W") + + await send_attribute_report(hass, device_info["cluster"], 1291, 99) + assert_state(hass, device_info, "9.9", "W") async def send_attribute_report(hass, cluster, attrid, value):