From 2017e45d7848f464220d4a4f30c66e9e3c662b86 Mon Sep 17 00:00:00 2001 From: Willem Burgers Date: Sun, 3 Mar 2019 23:42:52 +0100 Subject: [PATCH] fix derived rate, fixes #20097 (#21620) * fix derived rate, fixes #20097 * fix derived rate, fixes #20097 * Fix typo thnx @amelchio * Make the test more realistic Took values from my own smart meter for the test * Update test to ignore rounding issues --- homeassistant/components/sensor/dsmr.py | 3 ++- tests/components/sensor/test_dsmr.py | 12 ++++++------ 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/homeassistant/components/sensor/dsmr.py b/homeassistant/components/sensor/dsmr.py index 1bb7b44cab6..8a24793a157 100644 --- a/homeassistant/components/sensor/dsmr.py +++ b/homeassistant/components/sensor/dsmr.py @@ -350,7 +350,8 @@ class DerivativeDSMREntity(DSMREntity): else: # Recalculate the rate diff = current_reading - self._previous_reading - self._state = diff + timediff = timestamp - self._previous_timestamp + self._state = diff / timediff * 3600 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 dbf1e1fe7dd..69e05df1d92 100644 --- a/tests/components/sensor/test_dsmr.py +++ b/tests/components/sensor/test_dsmr.py @@ -104,8 +104,8 @@ def test_derivative(): entity.telegram = { '1.0.0': MBusObject([ - {'value': 1}, - {'value': 1, 'unit': 'm3'}, + {'value': 1551642213}, + {'value': 745.695, 'unit': 'm3'}, ]) } yield from entity.async_update() @@ -115,14 +115,14 @@ def test_derivative(): entity.telegram = { '1.0.0': MBusObject([ - {'value': 2}, - {'value': 2, 'unit': 'm3'}, + {'value': 1551642543}, + {'value': 745.698, 'unit': 'm3'}, ]) } yield from entity.async_update() - assert entity.state == 1, \ - 'state should be difference between first and second update' + assert abs(entity.state - 0.03272) < 0.00001, \ + 'state should be hourly usage calculated from first and second update' assert entity.unit_of_measurement == 'm3/h'