From 6a3c5b093b10d76086a5de065edce42520fe8c1e Mon Sep 17 00:00:00 2001 From: Adam Garcia Date: Thu, 28 Jul 2016 20:40:25 -0700 Subject: [PATCH] Update to group component to properly handle zone changes in tracked devices (#2631) * pep8 fixes for group and test * update to pass linting * docstring fix. * reduced length of docstring on test. --- homeassistant/components/group.py | 5 +++-- tests/components/test_group.py | 16 +++++++++++++++- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/homeassistant/components/group.py b/homeassistant/components/group.py index 6c63f2955f6..4394ef515e1 100644 --- a/homeassistant/components/group.py +++ b/homeassistant/components/group.py @@ -304,8 +304,9 @@ class Group(Entity): if gr_on is None: return - if tr_state is None or (gr_state == gr_on and - tr_state.state == gr_off): + if tr_state is None or ((gr_state == gr_on and + tr_state.state == gr_off) or + tr_state.state not in (gr_on, gr_off)): if states is None: states = self._tracking_states diff --git a/tests/components/test_group.py b/tests/components/test_group.py index 5c23d6ca0cd..d815489ae21 100644 --- a/tests/components/test_group.py +++ b/tests/components/test_group.py @@ -5,7 +5,7 @@ import unittest from homeassistant.bootstrap import _setup_component from homeassistant.const import ( STATE_ON, STATE_OFF, STATE_HOME, STATE_UNKNOWN, ATTR_ICON, ATTR_HIDDEN, - ATTR_ASSUMED_STATE, ) + ATTR_ASSUMED_STATE, STATE_NOT_HOME, ) import homeassistant.components.group as group from tests.common import get_test_home_assistant @@ -294,3 +294,17 @@ class TestComponentsGroup(unittest.TestCase): state = self.hass.states.get(test_group.entity_id) self.assertIsNone(state.attributes.get(ATTR_ASSUMED_STATE)) + + def test_group_updated_after_device_tracker_zone_change(self): + """Test group state when device tracker in group changes zone.""" + self.hass.states.set('device_tracker.Adam', STATE_HOME) + self.hass.states.set('device_tracker.Eve', STATE_NOT_HOME) + self.hass.pool.block_till_done() + group.Group( + self.hass, 'peeps', + ['device_tracker.Adam', 'device_tracker.Eve']) + self.hass.states.set('device_tracker.Adam', 'cool_state_not_home') + self.hass.pool.block_till_done() + self.assertEqual(STATE_NOT_HOME, + self.hass.states.get( + group.ENTITY_ID_FORMAT.format('peeps')).state)