From 1f6f9a1677ea2abbe7bc9913f4b5ee16a16c750e Mon Sep 17 00:00:00 2001 From: Adam Mills Date: Fri, 20 Jan 2017 02:30:47 -0500 Subject: [PATCH] Filter new entities from logbook (#5402) --- homeassistant/components/logbook.py | 4 +++ tests/components/test_logbook.py | 44 +++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+) diff --git a/homeassistant/components/logbook.py b/homeassistant/components/logbook.py index 94445935093..b69289db989 100644 --- a/homeassistant/components/logbook.py +++ b/homeassistant/components/logbook.py @@ -307,6 +307,10 @@ def _exclude_events(events, config): if event.event_type == EVENT_STATE_CHANGED: to_state = State.from_dict(event.data.get('new_state')) # Do not report on new entities + if event.data.get('old_state') is None: + continue + + # Do not report on entity removal if not to_state: continue diff --git a/tests/components/test_logbook.py b/tests/components/test_logbook.py index dcb675e00e5..047ca480f6f 100644 --- a/tests/components/test_logbook.py +++ b/tests/components/test_logbook.py @@ -117,6 +117,50 @@ class TestComponentLogbook(unittest.TestCase): self.assertEqual(0, len(entries)) + def test_exclude_new_entities(self): + """Test if events are excluded on first update.""" + entity_id = 'sensor.bla' + entity_id2 = 'sensor.blu' + pointA = dt_util.utcnow() + pointB = pointA + timedelta(minutes=logbook.GROUP_BY_MINUTES) + + eventA = self.create_state_changed_event(pointA, entity_id, 10) + eventB = self.create_state_changed_event(pointB, entity_id2, 20) + eventA.data['old_state'] = None + + events = logbook._exclude_events((ha.Event(EVENT_HOMEASSISTANT_STOP), + eventA, eventB), self.EMPTY_CONFIG) + entries = list(logbook.humanify(events)) + + self.assertEqual(2, len(entries)) + self.assert_entry( + entries[0], name='Home Assistant', message='stopped', + domain=ha.DOMAIN) + self.assert_entry( + entries[1], pointB, 'blu', domain='sensor', entity_id=entity_id2) + + def test_exclude_removed_entities(self): + """Test if events are excluded on last update.""" + entity_id = 'sensor.bla' + entity_id2 = 'sensor.blu' + pointA = dt_util.utcnow() + pointB = pointA + timedelta(minutes=logbook.GROUP_BY_MINUTES) + + eventA = self.create_state_changed_event(pointA, entity_id, 10) + eventB = self.create_state_changed_event(pointB, entity_id2, 20) + eventA.data['new_state'] = None + + events = logbook._exclude_events((ha.Event(EVENT_HOMEASSISTANT_STOP), + eventA, eventB), self.EMPTY_CONFIG) + entries = list(logbook.humanify(events)) + + self.assertEqual(2, len(entries)) + self.assert_entry( + entries[0], name='Home Assistant', message='stopped', + domain=ha.DOMAIN) + self.assert_entry( + entries[1], pointB, 'blu', domain='sensor', entity_id=entity_id2) + def test_exclude_events_hidden(self): """Test if events are excluded if entity is hidden.""" entity_id = 'sensor.bla'