From baa8e53e66167a1fb0f9d090f28325454ad3d4ef Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Fri, 13 Jan 2017 12:29:20 +0100 Subject: [PATCH] Bugfix group reload (#5292) * Bugfix group / hit update * try to fix round 2 * Convert it to coro * Don't check statemachine, check unsub listener. --- homeassistant/components/group.py | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/homeassistant/components/group.py b/homeassistant/components/group.py index 0dfabdd8a35..25aa263d262 100644 --- a/homeassistant/components/group.py +++ b/homeassistant/components/group.py @@ -359,14 +359,16 @@ class Group(Entity): """Start tracking members.""" run_callback_threadsafe(self.hass.loop, self.async_start).result() + @callback def async_start(self): """Start tracking members. This method must be run in the event loop. """ - self._async_unsub_state_changed = async_track_state_change( - self.hass, self.tracking, self._state_changed_listener - ) + if self._async_unsub_state_changed is None: + self._async_unsub_state_changed = async_track_state_change( + self.hass, self.tracking, self._async_state_changed_listener + ) def stop(self): """Unregister the group from Home Assistant.""" @@ -392,20 +394,24 @@ class Group(Entity): This method must be run in the event loop. """ - yield from super().async_remove() - if self._async_unsub_state_changed: self._async_unsub_state_changed() self._async_unsub_state_changed = None - @callback - def _state_changed_listener(self, entity_id, old_state, new_state): + yield from super().async_remove() + + @asyncio.coroutine + def _async_state_changed_listener(self, entity_id, old_state, new_state): """Respond to a member state changing. This method must be run in the event loop. """ + # removed + if self._async_unsub_state_changed is None: + return + self._async_update_group_state(new_state) - self.hass.async_add_job(self.async_update_ha_state()) + yield from self.async_update_ha_state() @property def _tracking_states(self):