From 90578967467e2b56191ac09fbf330af801e4ccda Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Thu, 15 Jun 2017 01:23:59 +0200 Subject: [PATCH] fix logic --- .../components/device_tracker/__init__.py | 29 +++++++++++++++---- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/homeassistant/components/device_tracker/__init__.py b/homeassistant/components/device_tracker/__init__.py index c425d6bea5c..81f3d021188 100644 --- a/homeassistant/components/device_tracker/__init__.py +++ b/homeassistant/components/device_tracker/__init__.py @@ -27,6 +27,7 @@ from homeassistant.helpers.event import async_track_time_interval from homeassistant.helpers.restore_state import async_get_last_state from homeassistant.helpers.typing import GPSType, ConfigType, HomeAssistantType import homeassistant.helpers.config_validation as cv +from homeassistant.loader import get_component import homeassistant.util as util from homeassistant.util.async import run_coroutine_threadsafe import homeassistant.util.dt as dt_util @@ -41,7 +42,7 @@ from homeassistant.const import ( _LOGGER = logging.getLogger(__name__) DOMAIN = 'device_tracker' -DEPENDENCIES = ['zone', 'group'] +DEPENDENCIES = ['zone'] GROUP_NAME_ALL_DEVICES = 'all devices' ENTITY_ID_ALL_DEVICES = group.ENTITY_ID_FORMAT.format('all_devices') @@ -180,6 +181,8 @@ def async_setup(hass: HomeAssistantType, config: ConfigType): if setup_tasks: yield from asyncio.wait(setup_tasks, loop=hass.loop) + tracker.async_setup_group() + @callback def async_device_tracker_discovered(service, info): """Handle the discovery of device tracker platforms.""" @@ -231,6 +234,7 @@ class DeviceTracker(object): self.mac_to_dev = {dev.mac: dev for dev in devices if dev.mac} self.consider_home = consider_home self.track_new = track_new + self.group = None self._is_updating = asyncio.Lock(loop=hass.loop) for dev in devices: @@ -299,10 +303,11 @@ class DeviceTracker(object): ATTR_HOST_NAME: device.host_name, }) - # update group - group.async_set_group( - self.hass, util.slugify(GROUP_NAME_ALL_DEVICES), visible=False, - name=GROUP_NAME_ALL_DEVICES, delta=[device.entity_id]) + # During init, we ignore the group + if self.group and self.track_new: + self.group.async_set_group( + self.hass, slugify(GROUP_NAME_ALL_DEVICES), visible=False, + name=GROUP_NAME_ALL_DEVICES, delta=[device.entity_id]) # lookup mac vendor string to be stored in config yield from device.set_vendor_for_mac() @@ -324,6 +329,20 @@ class DeviceTracker(object): update_config, self.hass.config.path(YAML_DEVICES), dev_id, device) + @callback + def async_setup_group(self): + """Initialize group for all tracked devices. + + This method must be run in the event loop. + """ + entity_ids = (dev.entity_id for dev in self.devices.values() + if dev.track) + + self.group = get_component('group') + self.group.async_set_group( + self.hass, slugify(GROUP_NAME_ALL_DEVICES), visible=False, + name=GROUP_NAME_ALL_DEVICES, entity_ids=entity_ids) + @callback def async_update_stale(self, now: dt_util.dt.datetime): """Update stale devices.