diff --git a/homeassistant/components/device_tracker/__init__.py b/homeassistant/components/device_tracker/__init__.py index acf402a0c8a..7ef5b19487e 100644 --- a/homeassistant/components/device_tracker/__init__.py +++ b/homeassistant/components/device_tracker/__init__.py @@ -122,15 +122,10 @@ def async_setup(hass: HomeAssistantType, config: ConfigType): """Set up the device tracker.""" yaml_path = hass.config.path(YAML_DEVICES) - try: - conf = config.get(DOMAIN, []) - except vol.Invalid as ex: - async_log_exception(ex, DOMAIN, config, hass) - return False - else: - conf = conf[0] if conf else {} - consider_home = conf.get(CONF_CONSIDER_HOME, DEFAULT_CONSIDER_HOME) - track_new = conf.get(CONF_TRACK_NEW, DEFAULT_TRACK_NEW) + conf = config.get(DOMAIN, []) + conf = conf[0] if conf else {} + consider_home = conf.get(CONF_CONSIDER_HOME, DEFAULT_CONSIDER_HOME) + track_new = conf.get(CONF_TRACK_NEW, DEFAULT_TRACK_NEW) devices = yield from async_load_config(yaml_path, hass, consider_home) tracker = DeviceTracker(hass, consider_home, track_new, devices) @@ -246,18 +241,21 @@ class DeviceTracker(object): def see(self, mac: str=None, dev_id: str=None, host_name: str=None, location_name: str=None, gps: GPSType=None, gps_accuracy=None, battery: str=None, attributes: dict=None, - source_type: str=SOURCE_TYPE_GPS): + source_type: str=SOURCE_TYPE_GPS, picture: str=None, + icon: str=None): """Notify the device tracker that you see a device.""" self.hass.add_job( self.async_see(mac, dev_id, host_name, location_name, gps, - gps_accuracy, battery, attributes, source_type) + gps_accuracy, battery, attributes, source_type, + picture, icon) ) @asyncio.coroutine def async_see(self, mac: str=None, dev_id: str=None, host_name: str=None, location_name: str=None, gps: GPSType=None, gps_accuracy=None, battery: str=None, attributes: dict=None, - source_type: str=SOURCE_TYPE_GPS): + source_type: str=SOURCE_TYPE_GPS, picture: str=None, + icon: str=None): """Notify the device tracker that you see a device. This method is a coroutine. @@ -285,7 +283,8 @@ class DeviceTracker(object): dev_id = util.ensure_unique_string(dev_id, self.devices.keys()) device = Device( self.hass, self.consider_home, self.track_new, - dev_id, mac, (host_name or dev_id).replace('_', ' ')) + dev_id, mac, (host_name or dev_id).replace('_', ' '), + picture=picture, icon=icon) self.devices[dev_id] = device if mac is not None: self.mac_to_dev[mac] = device diff --git a/tests/components/device_tracker/test_init.py b/tests/components/device_tracker/test_init.py index cd4ea0f686f..968800ceafa 100644 --- a/tests/components/device_tracker/test_init.py +++ b/tests/components/device_tracker/test_init.py @@ -654,14 +654,25 @@ class TestComponentsDeviceTracker(unittest.TestCase): assert len(config) == 4 - @patch('homeassistant.components.device_tracker.async_log_exception') - def test_config_failure(self, mock_ex): + def test_config_failure(self): """Test that the device tracker see failures.""" with assert_setup_component(0, device_tracker.DOMAIN): setup_component(self.hass, device_tracker.DOMAIN, {device_tracker.DOMAIN: { device_tracker.CONF_CONSIDER_HOME: -1}}) + def test_picture_and_icon_on_see_discovery(self): + """Test that picture and icon are set in initial see.""" + tracker = device_tracker.DeviceTracker( + self.hass, timedelta(seconds=60), False, []) + tracker.see(dev_id=11, picture='pic_url', icon='mdi:icon') + self.hass.block_till_done() + config = device_tracker.load_config(self.yaml_devices, self.hass, + timedelta(seconds=0)) + assert len(config) == 1 + assert config[0].icon == 'mdi:icon' + assert config[0].entity_picture == 'pic_url' + @asyncio.coroutine def test_async_added_to_hass(hass): @@ -691,3 +702,15 @@ def test_async_added_to_hass(hass): for key, val in attr.items(): atr = state.attributes.get(key) assert atr == val, "{}={} expected: {}".format(key, atr, val) + + +@asyncio.coroutine +def test_bad_platform(hass): + """Test bad platform.""" + config = { + 'device_tracker': [{ + 'platform': 'bad_platform' + }] + } + with assert_setup_component(0, device_tracker.DOMAIN): + assert (yield from device_tracker.async_setup(hass, config))