initialize queue before filtering (#13842)
This commit is contained in:
parent
20ababec3e
commit
ddd2003629
2 changed files with 14 additions and 3 deletions
|
@ -341,7 +341,7 @@ class OutlierFilter(Filter):
|
||||||
|
|
||||||
def _filter_state(self, new_state):
|
def _filter_state(self, new_state):
|
||||||
"""Implement the outlier filter."""
|
"""Implement the outlier filter."""
|
||||||
if (self.states and
|
if (len(self.states) == self.states.maxlen and
|
||||||
abs(new_state.state -
|
abs(new_state.state -
|
||||||
statistics.median([s.state for s in self.states])) >
|
statistics.median([s.state for s in self.states])) >
|
||||||
self._radius):
|
self._radius):
|
||||||
|
|
|
@ -95,11 +95,11 @@ class TestFilterSensor(unittest.TestCase):
|
||||||
self.hass.block_till_done()
|
self.hass.block_till_done()
|
||||||
|
|
||||||
state = self.hass.states.get('sensor.test')
|
state = self.hass.states.get('sensor.test')
|
||||||
self.assertEqual('19.25', state.state)
|
self.assertEqual('17.05', state.state)
|
||||||
|
|
||||||
def test_outlier(self):
|
def test_outlier(self):
|
||||||
"""Test if outlier filter works."""
|
"""Test if outlier filter works."""
|
||||||
filt = OutlierFilter(window_size=10,
|
filt = OutlierFilter(window_size=3,
|
||||||
precision=2,
|
precision=2,
|
||||||
entity=None,
|
entity=None,
|
||||||
radius=4.0)
|
radius=4.0)
|
||||||
|
@ -107,6 +107,17 @@ class TestFilterSensor(unittest.TestCase):
|
||||||
filtered = filt.filter_state(state)
|
filtered = filt.filter_state(state)
|
||||||
self.assertEqual(22, filtered.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):
|
def test_lowpass(self):
|
||||||
"""Test if lowpass filter works."""
|
"""Test if lowpass filter works."""
|
||||||
filt = LowPassFilter(window_size=10,
|
filt = LowPassFilter(window_size=10,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue