diff --git a/homeassistant/components/device_tracker/__init__.py b/homeassistant/components/device_tracker/__init__.py index d10afe92b2c..86190d28b76 100644 --- a/homeassistant/components/device_tracker/__init__.py +++ b/homeassistant/components/device_tracker/__init__.py @@ -35,8 +35,7 @@ import homeassistant.util.dt as dt_util from homeassistant.helpers.event import track_utc_time_change from homeassistant.const import ( - ATTR_ENTITY_PICTURE, DEVICE_DEFAULT_NAME, STATE_HOME, STATE_NOT_HOME, - STATE_UNKNOWN) + ATTR_ENTITY_PICTURE, DEVICE_DEFAULT_NAME, STATE_HOME, STATE_NOT_HOME) DOMAIN = "device_tracker" DEPENDENCIES = [] @@ -91,7 +90,7 @@ def setup(hass, config): track_new = util.convert(conf.get(CONF_TRACK_NEW), bool, DEFAULT_CONF_TRACK_NEW) - devices = load_config(yaml_path, hass, consider_home) + devices = load_config(yaml_path, hass, timedelta(seconds=consider_home)) tracker = DeviceTracker(hass, consider_home, track_new, devices) def setup_platform(p_type, p_config, disc_info=None): @@ -145,10 +144,15 @@ class DeviceTracker(object): self.track_new = track_new self.lock = threading.Lock() + entity_ids = [] for device in devices: if device.track: + entity_ids.append(device.entity_id) device.update_ha_state() + self.group = group.setup_group(hass, GROUP_NAME_ALL_DEVICES, + entity_ids, False) + # pylint: disable=too-many-arguments def see(self, mac=None, dev_id=None, host_name=None, location_name=None, gps=None): @@ -183,6 +187,8 @@ class DeviceTracker(object): if device.track: device.update_ha_state() + self.group.update_tracked_entity_ids( + list(self.group.tracking) + [device.entity_id]) update_config(self.hass.config.path(YAML_DEVICES), dev_id, device) def update_stale(self, now): @@ -204,7 +210,7 @@ class Device(Entity): # Track if the last update of this device was HOME last_update_home = False - _state = STATE_UNKNOWN + _state = STATE_NOT_HOME def __init__(self, hass, consider_home, track, dev_id, mac, name=None, picture=None, away_hide=False): diff --git a/tests/components/device_tracker/test_init.py b/tests/components/device_tracker/test_init.py index f71f01ca570..2b7e18d8b3b 100644 --- a/tests/components/device_tracker/test_init.py +++ b/tests/components/device_tracker/test_init.py @@ -14,8 +14,8 @@ from homeassistant.config import load_yaml_config_file from homeassistant.loader import get_component import homeassistant.util.dt as dt_util from homeassistant.const import ( - ATTR_ENTITY_PICTURE, ATTR_HIDDEN, STATE_HOME, STATE_NOT_HOME, - CONF_PLATFORM, ATTR_FRIENDLY_NAME) + ATTR_ENTITY_ID, ATTR_ENTITY_PICTURE, ATTR_FRIENDLY_NAME, ATTR_HIDDEN, + STATE_HOME, STATE_NOT_HOME, CONF_PLATFORM, ) import homeassistant.components.device_tracker as device_tracker from tests.common import ( @@ -193,3 +193,23 @@ class TestComponentsDeviceTracker(unittest.TestCase): self.assertTrue(self.hass.states.get(entity_id) .attributes.get(ATTR_HIDDEN)) + + def test_group_all_devices(self): + dev_id = 'test_entity' + entity_id = device_tracker.ENTITY_ID_FORMAT.format(dev_id) + device = device_tracker.Device( + self.hass, timedelta(seconds=180), True, dev_id, None, + away_hide=True) + device_tracker.update_config(self.yaml_devices, dev_id, device) + + scanner = get_component('device_tracker.test').SCANNER + scanner.reset() + + self.assertTrue(device_tracker.setup(self.hass, { + device_tracker.DOMAIN: {CONF_PLATFORM: 'test'}})) + + state = self.hass.states.get(device_tracker.ENTITY_ID_ALL_DEVICES) + self.assertIsNotNone(state) + self.assertEqual(STATE_NOT_HOME, state.state) + self.assertSequenceEqual((entity_id,), + state.attributes.get(ATTR_ENTITY_ID))