diff --git a/homeassistant/components/sensor/filter.py b/homeassistant/components/sensor/filter.py index 27730a8f63e..5b28faf78ca 100644 --- a/homeassistant/components/sensor/filter.py +++ b/homeassistant/components/sensor/filter.py @@ -341,7 +341,7 @@ class OutlierFilter(Filter): def _filter_state(self, new_state): """Implement the outlier filter.""" - if (self.states and + if (len(self.states) == self.states.maxlen and abs(new_state.state - statistics.median([s.state for s in self.states])) > self._radius): diff --git a/tests/components/sensor/test_filter.py b/tests/components/sensor/test_filter.py index 8b8e7607b07..43432f3304c 100644 --- a/tests/components/sensor/test_filter.py +++ b/tests/components/sensor/test_filter.py @@ -95,11 +95,11 @@ class TestFilterSensor(unittest.TestCase): self.hass.block_till_done() state = self.hass.states.get('sensor.test') - self.assertEqual('19.25', state.state) + self.assertEqual('17.05', state.state) def test_outlier(self): """Test if outlier filter works.""" - filt = OutlierFilter(window_size=10, + filt = OutlierFilter(window_size=3, precision=2, entity=None, radius=4.0) @@ -107,6 +107,17 @@ class TestFilterSensor(unittest.TestCase): filtered = filt.filter_state(state) self.assertEqual(22, filtered.state) + def test_initial_outlier(self): + """Test issue #13363.""" + filt = OutlierFilter(window_size=3, + precision=2, + entity=None, + radius=4.0) + out = ha.State('sensor.test_monitored', 4000) + for state in [out]+self.values: + filtered = filt.filter_state(state) + self.assertEqual(22, filtered.state) + def test_lowpass(self): """Test if lowpass filter works.""" filt = LowPassFilter(window_size=10,