diff --git a/homeassistant/components/sensor/dsmr.py b/homeassistant/components/sensor/dsmr.py index 8a24793a15754a..6319a68b0c865f 100644 --- a/homeassistant/components/sensor/dsmr.py +++ b/homeassistant/components/sensor/dsmr.py @@ -351,7 +351,8 @@ async def async_update(self): # Recalculate the rate diff = current_reading - self._previous_reading timediff = timestamp - self._previous_timestamp - self._state = diff / timediff * 3600 + total_seconds = timediff.total_seconds() + self._state = round(float(diff) / total_seconds * 3600, 3) self._previous_reading = current_reading self._previous_timestamp = timestamp diff --git a/tests/components/sensor/test_dsmr.py b/tests/components/sensor/test_dsmr.py index 69e05df1d9297d..c2ea61e5bb4fa4 100644 --- a/tests/components/sensor/test_dsmr.py +++ b/tests/components/sensor/test_dsmr.py @@ -6,6 +6,7 @@ """ import asyncio +import datetime from decimal import Decimal from unittest.mock import Mock @@ -104,8 +105,8 @@ def test_derivative(): entity.telegram = { '1.0.0': MBusObject([ - {'value': 1551642213}, - {'value': 745.695, 'unit': 'm3'}, + {'value': datetime.datetime.fromtimestamp(1551642213)}, + {'value': Decimal(745.695), 'unit': 'm3'}, ]) } yield from entity.async_update() @@ -115,13 +116,13 @@ def test_derivative(): entity.telegram = { '1.0.0': MBusObject([ - {'value': 1551642543}, - {'value': 745.698, 'unit': 'm3'}, + {'value': datetime.datetime.fromtimestamp(1551642543)}, + {'value': Decimal(745.698), 'unit': 'm3'}, ]) } yield from entity.async_update() - assert abs(entity.state - 0.03272) < 0.00001, \ + assert abs(entity.state - 0.033) < 0.00001, \ 'state should be hourly usage calculated from first and second update' assert entity.unit_of_measurement == 'm3/h'