From 880b5f0ad1370b97eecbaddc1f6e9dfb2c5b7081 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sun, 13 Sep 2015 00:02:28 -0700 Subject: [PATCH] Add device_tracker.see service --- .../components/device_tracker/__init__.py | 26 +++++++++++++++++++ tests/components/device_tracker/test_init.py | 18 +++++++++++++ 2 files changed, 44 insertions(+) diff --git a/homeassistant/components/device_tracker/__init__.py b/homeassistant/components/device_tracker/__init__.py index 0727f70cd69..435b5fbf0f0 100644 --- a/homeassistant/components/device_tracker/__init__.py +++ b/homeassistant/components/device_tracker/__init__.py @@ -60,8 +60,15 @@ DEFAULT_SCAN_INTERVAL = 12 CONF_AWAY_HIDE = 'hide_if_away' DEFAULT_AWAY_HIDE = False +SERVICE_SEE = 'see' + ATTR_LATITUDE = 'latitude' ATTR_LONGITUDE = 'longitude' +ATTR_MAC = 'mac' +ATTR_DEV_ID = 'dev_id' +ATTR_HOST_NAME = 'host_name' +ATTR_LOCATION_NAME = 'location_name' +ATTR_GPS = 'gps' DISCOVERY_PLATFORMS = { discovery.SERVICE_NETGEAR: 'netgear', @@ -76,6 +83,16 @@ def is_on(hass, entity_id=None): return hass.states.is_state(entity, STATE_HOME) +def see(hass, mac=None, dev_id=None, host_name=None, location_name=None, + gps=None): + """ Call service to notify you see device. """ + data = {key: value for key, value in ( + (ATTR_MAC, mac), (ATTR_DEV_ID, dev_id), + (ATTR_HOST_NAME, host_name), (ATTR_LOCATION_NAME, location_name), + (ATTR_GPS, gps)) if value is not None} + hass.services.call(DOMAIN, SERVICE_SEE, data) + + def setup(hass, config): """ Setup device tracker """ yaml_path = hass.config.path(YAML_DEVICES) @@ -133,6 +150,15 @@ def setup(hass, config): tracker.setup_group() + def see_service(call): + """ Service to see a device. """ + args = {key: value for key, value in call.data.items() if key in ( + ATTR_MAC, ATTR_DEV_ID, ATTR_HOST_NAME, ATTR_LOCATION_NAME, + ATTR_GPS)} + tracker.see(**args) + + hass.services.register(DOMAIN, SERVICE_SEE, see_service) + return True diff --git a/tests/components/device_tracker/test_init.py b/tests/components/device_tracker/test_init.py index 2b7e18d8b3b..09143f6ead2 100644 --- a/tests/components/device_tracker/test_init.py +++ b/tests/components/device_tracker/test_init.py @@ -213,3 +213,21 @@ class TestComponentsDeviceTracker(unittest.TestCase): self.assertEqual(STATE_NOT_HOME, state.state) self.assertSequenceEqual((entity_id,), state.attributes.get(ATTR_ENTITY_ID)) + + @patch('homeassistant.components.device_tracker.DeviceTracker.see') + def test_see_service(self, mock_see): + self.assertTrue(device_tracker.setup(self.hass, {})) + mac = 'AB:CD:EF:GH' + dev_id = 'some_device' + host_name = 'example.com' + location_name = 'Work' + gps = [.3, .8] + + device_tracker.see(self.hass, mac, dev_id, host_name, location_name, + gps) + + self.hass.pool.block_till_done() + + mock_see.assert_called_once_with( + mac=mac, dev_id=dev_id, host_name=host_name, + location_name=location_name, gps=gps)