From c6492d334e3afd7187dcda683b41eaf5faf9d2d2 Mon Sep 17 00:00:00 2001 From: Erik Date: Thu, 18 May 2017 10:30:05 +0200 Subject: [PATCH 1/3] Avoid sensor mixup. Fixes #7636. Also provide icon. Plus some smaller fixes. --- .../components/device_tracker/volvooncall.py | 19 +++++++------ homeassistant/components/volvooncall.py | 28 +++++++++++-------- 2 files changed, 27 insertions(+), 20 deletions(-) diff --git a/homeassistant/components/device_tracker/volvooncall.py b/homeassistant/components/device_tracker/volvooncall.py index df1c778dcb623..a6eed63a5739d 100644 --- a/homeassistant/components/device_tracker/volvooncall.py +++ b/homeassistant/components/device_tracker/volvooncall.py @@ -7,7 +7,10 @@ import logging from homeassistant.util import slugify -from homeassistant.components.volvooncall import DOMAIN +from homeassistant.helpers.dispatcher import ( + async_dispatcher_connect, async_dispatcher_send) +from homeassistant.components.volvooncall import ( + DATA_KEY, SIGNAL_VEHICLE_SEEN) _LOGGER = logging.getLogger(__name__) @@ -18,19 +21,19 @@ def setup_scanner(hass, config, see, discovery_info=None): return vin, _ = discovery_info - vehicle = hass.data[DOMAIN].vehicles[vin] - - host_name = vehicle.registration_number - dev_id = 'volvo_' + slugify(host_name) + vehicle = hass.data[DATA_KEY].vehicles[vin] def see_vehicle(vehicle): """Handle the reporting of the vehicle position.""" + host_name = vehicle.registration_number + dev_id = 'volvo_{}'.format(slugify(host_name)) see(dev_id=dev_id, host_name=host_name, gps=(vehicle.position['latitude'], - vehicle.position['longitude'])) + vehicle.position['longitude']), + icon='mdi:car') - hass.data[DOMAIN].entities[vin].append(see_vehicle) - see_vehicle(vehicle) + async_dispatcher_connect(hass, SIGNAL_VEHICLE_SEEN, see_vehicle) + async_dispatcher_send(hass, SIGNAL_VEHICLE_SEEN, vehicle) return True diff --git a/homeassistant/components/volvooncall.py b/homeassistant/components/volvooncall.py index a1c2469d3b98c..1bbd16916be4e 100644 --- a/homeassistant/components/volvooncall.py +++ b/homeassistant/components/volvooncall.py @@ -14,11 +14,14 @@ import homeassistant.helpers.config_validation as cv from homeassistant.helpers.entity import Entity from homeassistant.helpers.event import track_point_in_utc_time +from homeassistant.helpers.dispatcher import async_dispatcher_send from homeassistant.util.dt import utcnow import voluptuous as vol DOMAIN = 'volvooncall' +DATA_KEY = DOMAIN + REQUIREMENTS = ['volvooncall==0.3.3'] _LOGGER = logging.getLogger(__name__) @@ -28,12 +31,15 @@ DEFAULT_UPDATE_INTERVAL = timedelta(minutes=1) CONF_SERVICE_URL = 'service_url' +SIGNAL_VEHICLE_SEEN = '{}.vehicle_seen'.format(DOMAIN) + RESOURCES = {'position': ('device_tracker',), 'lock': ('lock', 'Lock'), 'heater': ('switch', 'Heater', 'mdi:radiator'), 'odometer': ('sensor', 'Odometer', 'mdi:speedometer', 'km'), - 'fuel_amount': ('sensor', 'Fuel', 'mdi:gas-station', 'L'), - 'fuel_amount_level': ('sensor', 'Fuel', 'mdi:water-percent', '%'), + 'fuel_amount': ('sensor', 'Fuel amount', 'mdi:gas-station', 'L'), + 'fuel_amount_level': ( + 'sensor', 'Fuel level', 'mdi:water-percent', '%'), 'distance_to_empty': ('sensor', 'Range', 'mdi:ruler', 'km'), 'washer_fluid_level': ('binary_sensor', 'Washer fluid'), 'brake_fluid': ('binary_sensor', 'Brake Fluid'), @@ -59,8 +65,7 @@ def setup(hass, config): """Set up the Volvo On Call component.""" - from volvooncall import DEFAULT_SERVICE_URL - from volvooncall import Connection + from volvooncall import Connection, DEFAULT_SERVICE_URL connection = Connection( config[DOMAIN].get(CONF_USERNAME), config[DOMAIN].get(CONF_PASSWORD), @@ -75,7 +80,7 @@ class state: # pylint:disable=invalid-name vehicles = {} names = config[DOMAIN].get(CONF_NAME) - hass.data[DOMAIN] = state + hass.data[DATA_KEY] = state def discover_vehicle(vehicle): """Load relevant platforms.""" @@ -93,10 +98,9 @@ def update_vehicle(vehicle): discover_vehicle(vehicle) for entity in state.entities[vehicle.vin]: - if isinstance(entity, Entity): - entity.schedule_update_ha_state() - else: - entity(vehicle) # device tracker + entity.schedule_update_ha_state() + + async_dispatcher_send(hass, SIGNAL_VEHICLE_SEEN, vehicle) def update(now): """Update status from the online service.""" @@ -128,7 +132,7 @@ def __init__(self, hass, vin, attribute): @property def _state(self): - return self._hass.data[DOMAIN] + return self._hass.data[DATA_KEY] @property def vehicle(self): @@ -149,7 +153,7 @@ def _entity_name(self): @property def name(self): """Return full name of the entity.""" - return '%s %s' % ( + return '{} {}'.format( self._vehicle_name, self._entity_name) @@ -166,6 +170,6 @@ def assumed_state(self): @property def device_state_attributes(self): """Return device specific state attributes.""" - return dict(model='%s/%s' % ( + return dict(model='{}/{}'.format( self.vehicle.vehicle_type, self.vehicle.model_year)) From 34267640f052e79be8da60187993b73284cae7f8 Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Fri, 16 Jun 2017 00:50:55 +0200 Subject: [PATCH 2/3] fix async p1 --- homeassistant/components/device_tracker/volvooncall.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/homeassistant/components/device_tracker/volvooncall.py b/homeassistant/components/device_tracker/volvooncall.py index a6eed63a5739d..9bd5727510ad3 100644 --- a/homeassistant/components/device_tracker/volvooncall.py +++ b/homeassistant/components/device_tracker/volvooncall.py @@ -8,7 +8,7 @@ from homeassistant.util import slugify from homeassistant.helpers.dispatcher import ( - async_dispatcher_connect, async_dispatcher_send) + dispatcher_connect, dispatcher_send) from homeassistant.components.volvooncall import ( DATA_KEY, SIGNAL_VEHICLE_SEEN) @@ -33,7 +33,7 @@ def see_vehicle(vehicle): vehicle.position['longitude']), icon='mdi:car') - async_dispatcher_connect(hass, SIGNAL_VEHICLE_SEEN, see_vehicle) - async_dispatcher_send(hass, SIGNAL_VEHICLE_SEEN, vehicle) + dispatcher_connect(hass, SIGNAL_VEHICLE_SEEN, see_vehicle) + dispatcher_send(hass, SIGNAL_VEHICLE_SEEN, vehicle) return True From 2e856e23db52fc35bcdfb01b41aee8faf9b2ec7b Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Fri, 16 Jun 2017 00:51:38 +0200 Subject: [PATCH 3/3] Create volvooncall.py --- homeassistant/components/volvooncall.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/volvooncall.py b/homeassistant/components/volvooncall.py index 1bbd16916be4e..5903bed1fc748 100644 --- a/homeassistant/components/volvooncall.py +++ b/homeassistant/components/volvooncall.py @@ -14,7 +14,7 @@ import homeassistant.helpers.config_validation as cv from homeassistant.helpers.entity import Entity from homeassistant.helpers.event import track_point_in_utc_time -from homeassistant.helpers.dispatcher import async_dispatcher_send +from homeassistant.helpers.dispatcher import dispatcher_send from homeassistant.util.dt import utcnow import voluptuous as vol @@ -100,7 +100,7 @@ def update_vehicle(vehicle): for entity in state.entities[vehicle.vin]: entity.schedule_update_ha_state() - async_dispatcher_send(hass, SIGNAL_VEHICLE_SEEN, vehicle) + dispatcher_send(hass, SIGNAL_VEHICLE_SEEN, vehicle) def update(now): """Update status from the online service."""