From 3f33fc6122d6a38aabcc80cb137e7ef3ae3284d7 Mon Sep 17 00:00:00 2001 From: Stefan Agner Date: Fri, 3 Jan 2020 11:54:19 +0100 Subject: [PATCH] convert to integer if rounding precision is zero (#30226) Convert values to integer if rounding precision is zero. With that a value which is an integer before filtering can be configured to stay integer when using precision = 0. This also aligns behavior of filters to how rounding behaves in tempaltes (homeassistant/helpers/template.py, function forgiving_round). --- homeassistant/components/filter/sensor.py | 3 ++- tests/components/filter/test_sensor.py | 7 +++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/homeassistant/components/filter/sensor.py b/homeassistant/components/filter/sensor.py index eeb0d32f51c..baa4f90af3f 100644 --- a/homeassistant/components/filter/sensor.py +++ b/homeassistant/components/filter/sensor.py @@ -324,7 +324,8 @@ class FilterState: def set_precision(self, precision): """Set precision of Number based states.""" if isinstance(self.state, Number): - self.state = round(float(self.state), precision) + value = round(float(self.state), precision) + self.state = int(value) if precision == 0 else value def __str__(self): """Return state as the string representation of FilterState.""" diff --git a/tests/components/filter/test_sensor.py b/tests/components/filter/test_sensor.py index 9ae4245ed70..d46fa4eab68 100644 --- a/tests/components/filter/test_sensor.py +++ b/tests/components/filter/test_sensor.py @@ -208,6 +208,13 @@ class TestFilterSensor(unittest.TestCase): filtered = filt.filter_state(state) assert 21 == filtered.state + def test_precision_zero(self): + """Test if precision of zero returns an integer.""" + filt = LowPassFilter(window_size=10, precision=0, entity=None, time_constant=10) + for state in self.values: + filtered = filt.filter_state(state) + assert isinstance(filtered.state, int) + def test_lowpass(self): """Test if lowpass filter works.""" filt = LowPassFilter(window_size=10, precision=2, entity=None, time_constant=10)