From f277f2e676b7ad0765be4502262a6450fa850e7c Mon Sep 17 00:00:00 2001 From: ReneNulschDE Date: Mon, 12 Feb 2018 15:18:23 +0100 Subject: [PATCH 1/3] Add check for unsupported features --- .../components/binary_sensor/mercedesme.py | 11 +++--- .../components/device_tracker/mercedesme.py | 35 +++++++++---------- homeassistant/components/mercedesme.py | 2 ++ homeassistant/components/sensor/mercedesme.py | 9 +++-- 4 files changed, 32 insertions(+), 25 deletions(-) diff --git a/homeassistant/components/binary_sensor/mercedesme.py b/homeassistant/components/binary_sensor/mercedesme.py index a6c8da56ce86c..fa1e8768593b8 100644 --- a/homeassistant/components/binary_sensor/mercedesme.py +++ b/homeassistant/components/binary_sensor/mercedesme.py @@ -9,7 +9,7 @@ from homeassistant.components.binary_sensor import (BinarySensorDevice) from homeassistant.components.mercedesme import ( - DATA_MME, MercedesMeEntity, BINARY_SENSORS) + DATA_MME, FEATURE_NOT_AVAILABLE, MercedesMeEntity, BINARY_SENSORS) DEPENDENCIES = ['mercedesme'] @@ -27,9 +27,12 @@ def setup_platform(hass, config, add_devices, discovery_info=None): devices = [] for car in data.cars: for key, value in sorted(BINARY_SENSORS.items()): - devices.append(MercedesMEBinarySensor( - data, key, value[0], car["vin"], None)) - + if car['availabilities'].get(key, 'INVALID') == 'VALID': + devices.append(MercedesMEBinarySensor( + data, key, value[0], car["vin"], None)) + else: + _LOGGER.warning(FEATURE_NOT_AVAILABLE, key, car["license"]) + add_devices(devices, True) diff --git a/homeassistant/components/device_tracker/mercedesme.py b/homeassistant/components/device_tracker/mercedesme.py index 0aa2be962904c..05c5cd53bcd86 100644 --- a/homeassistant/components/device_tracker/mercedesme.py +++ b/homeassistant/components/device_tracker/mercedesme.py @@ -49,23 +49,22 @@ def __init__(self, hass, config, see, data): def update_info(self, now=None): """Update the device info.""" for device in self.data.cars: - _LOGGER.debug("Updating %s", device["vin"]) - location = self.data.get_location(device["vin"]) - if location is None: - return False - dev_id = device["vin"] - name = device["license"] - - lat = location['positionLat']['value'] - lon = location['positionLong']['value'] - attrs = { - 'trackr_id': dev_id, - 'id': dev_id, - 'name': name - } - self.see( - dev_id=dev_id, host_name=name, - gps=(lat, lon), attributes=attrs - ) + if device['services'].get('VEHICLE_FINDER', False): + location = self.data.get_location(device["vin"]) + if location is not None: + dev_id = device["vin"] + name = device["license"] + + lat = location['positionLat']['value'] + lon = location['positionLong']['value'] + attrs = { + 'trackr_id': dev_id, + 'id': dev_id, + 'name': name + } + self.see( + dev_id=dev_id, host_name=name, + gps=(lat, lon), attributes=attrs + ) return True diff --git a/homeassistant/components/mercedesme.py b/homeassistant/components/mercedesme.py index a228486e2c8b8..b809e46ec64f3 100644 --- a/homeassistant/components/mercedesme.py +++ b/homeassistant/components/mercedesme.py @@ -41,6 +41,8 @@ DATA_MME = 'mercedesme' DOMAIN = 'mercedesme' +FEATURE_NOT_AVAILABLE = "The feature %s is not available for your car %s" + NOTIFICATION_ID = 'mercedesme_integration_notification' NOTIFICATION_TITLE = 'Mercedes me integration setup' diff --git a/homeassistant/components/sensor/mercedesme.py b/homeassistant/components/sensor/mercedesme.py index bc368745e40d9..14e1ce4abb0f2 100644 --- a/homeassistant/components/sensor/mercedesme.py +++ b/homeassistant/components/sensor/mercedesme.py @@ -8,7 +8,7 @@ import datetime from homeassistant.components.mercedesme import ( - DATA_MME, MercedesMeEntity, SENSORS) + DATA_MME, FEATURE_NOT_AVAILABLE, MercedesMeEntity, SENSORS) DEPENDENCIES = ['mercedesme'] @@ -29,8 +29,11 @@ def setup_platform(hass, config, add_devices, discovery_info=None): devices = [] for car in data.cars: for key, value in sorted(SENSORS.items()): - devices.append( - MercedesMESensor(data, key, value[0], car["vin"], value[1])) + if car['availabilities'].get(key, 'INVALID') == 'VALID': + devices.append( + MercedesMESensor(data, key, value[0], car["vin"], value[1])) + else: + _LOGGER.warning(FEATURE_NOT_AVAILABLE, key, car["license"]) add_devices(devices, True) From 80449e20ffdc447f73cb68ad0f1a1866b5cfe377 Mon Sep 17 00:00:00 2001 From: ReneNulschDE Date: Mon, 12 Feb 2018 15:29:16 +0100 Subject: [PATCH 2/3] Lint fix --- homeassistant/components/binary_sensor/mercedesme.py | 2 +- homeassistant/components/sensor/mercedesme.py | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/binary_sensor/mercedesme.py b/homeassistant/components/binary_sensor/mercedesme.py index fa1e8768593b8..fcf2d7122e205 100644 --- a/homeassistant/components/binary_sensor/mercedesme.py +++ b/homeassistant/components/binary_sensor/mercedesme.py @@ -32,7 +32,7 @@ def setup_platform(hass, config, add_devices, discovery_info=None): data, key, value[0], car["vin"], None)) else: _LOGGER.warning(FEATURE_NOT_AVAILABLE, key, car["license"]) - + add_devices(devices, True) diff --git a/homeassistant/components/sensor/mercedesme.py b/homeassistant/components/sensor/mercedesme.py index 14e1ce4abb0f2..bb7212678a722 100644 --- a/homeassistant/components/sensor/mercedesme.py +++ b/homeassistant/components/sensor/mercedesme.py @@ -31,7 +31,8 @@ def setup_platform(hass, config, add_devices, discovery_info=None): for key, value in sorted(SENSORS.items()): if car['availabilities'].get(key, 'INVALID') == 'VALID': devices.append( - MercedesMESensor(data, key, value[0], car["vin"], value[1])) + MercedesMESensor( + data, key, value[0], car["vin"], value[1])) else: _LOGGER.warning(FEATURE_NOT_AVAILABLE, key, car["license"]) From 18e415f5da77f941c66cd700f6290757a76b5aac Mon Sep 17 00:00:00 2001 From: ReneNulschDE Date: Mon, 12 Feb 2018 20:37:01 +0100 Subject: [PATCH 3/3] change to guard clause --- .../components/device_tracker/mercedesme.py | 38 ++++++++++--------- 1 file changed, 21 insertions(+), 17 deletions(-) diff --git a/homeassistant/components/device_tracker/mercedesme.py b/homeassistant/components/device_tracker/mercedesme.py index 05c5cd53bcd86..dcc9e3ab2ec6f 100644 --- a/homeassistant/components/device_tracker/mercedesme.py +++ b/homeassistant/components/device_tracker/mercedesme.py @@ -49,22 +49,26 @@ def __init__(self, hass, config, see, data): def update_info(self, now=None): """Update the device info.""" for device in self.data.cars: - if device['services'].get('VEHICLE_FINDER', False): - location = self.data.get_location(device["vin"]) - if location is not None: - dev_id = device["vin"] - name = device["license"] - - lat = location['positionLat']['value'] - lon = location['positionLong']['value'] - attrs = { - 'trackr_id': dev_id, - 'id': dev_id, - 'name': name - } - self.see( - dev_id=dev_id, host_name=name, - gps=(lat, lon), attributes=attrs - ) + if not device['services'].get('VEHICLE_FINDER', False): + continue + + location = self.data.get_location(device["vin"]) + if location is None: + continue + + dev_id = device["vin"] + name = device["license"] + + lat = location['positionLat']['value'] + lon = location['positionLong']['value'] + attrs = { + 'trackr_id': dev_id, + 'id': dev_id, + 'name': name + } + self.see( + dev_id=dev_id, host_name=name, + gps=(lat, lon), attributes=attrs + ) return True