diff --git a/homeassistant/components/device_tracker/volvooncall.py b/homeassistant/components/device_tracker/volvooncall.py index 703fe32e538699..8f5cf5fff7a0cf 100644 --- a/homeassistant/components/device_tracker/volvooncall.py +++ b/homeassistant/components/device_tracker/volvooncall.py @@ -39,28 +39,46 @@ def setup_scanner(hass, config, see): """Validate the configuration and return a scanner.""" - username = config.get(CONF_USERNAME) - password = config.get(CONF_PASSWORD) + session = requests.Session() + session.headers.update(HEADERS) + session.auth = (config.get(CONF_USERNAME), + config.get(CONF_PASSWORD)) interval = max(MIN_TIME_BETWEEN_SCANS.seconds, config.get(CONF_SCAN_INTERVAL, DEFAULT_SCAN_INTERVAL)) - session = requests.Session() - session.headers.update(HEADERS) - session.auth = (username, password) - def query(ref, rel=SERVICE_URL): """Perform a query to the online service.""" url = urljoin(rel, ref) + _LOGGER.debug("Request for %s", url) + res = session.get(url, timeout=15) + res.raise_for_status() + _LOGGER.debug("Received %s", res.json()) + return res.json() + + def update(now): + """Update status from the online service.""" try: - _LOGGER.debug("Request for %s", url) - res = session.get(url) - res.raise_for_status() - _LOGGER.debug("Received %s", res.json()) - return res.json() - except requests.exceptions.RequestException: - _LOGGER.exception("Could not make query to %s", url) - raise + _LOGGER.debug("Updating") + status = query("status", vehicle_url) + position = query("position", vehicle_url) + see(dev_id=dev_id, + host_name=host_name, + gps=(position["position"]["latitude"], + position["position"]["longitude"]), + attributes=dict( + tank_volume=attributes["fuelTankVolume"], + washer_fluid=status["washerFluidLevel"], + brake_fluid=status["brakeFluid"], + service_warning=status["serviceWarningStatus"], + fuel=status["fuelAmount"], + odometer=status["odometer"], + range=status["distanceToEmpty"])) + except requests.exceptions.RequestException as error: + _LOGGER.error("Could not query server: %s", error) + finally: + track_point_in_utc_time(hass, update, + now + timedelta(seconds=interval)) try: _LOGGER.info('Logging in to service') @@ -73,33 +91,10 @@ def query(ref, rel=SERVICE_URL): host_name = "%s %s/%s" % (attributes["registrationNumber"], attributes["vehicleType"], attributes["modelYear"]) - except requests.exceptions.RequestException: + update(utcnow()) + return True + except requests.exceptions.RequestException as error: _LOGGER.error("Could not log in to service. " - "Please check configuration.") + "Please check configuration: " + "%s", error) return False - - def update(now): - """Update status from the online service.""" - _LOGGER.debug("Updating") - - status = query("status", vehicle_url) - position = query("position", vehicle_url) - - see(dev_id=dev_id, - host_name=host_name, - gps=(position["position"]["latitude"], - position["position"]["longitude"]), - attributes=dict( - tank_volume=attributes["fuelTankVolume"], - washer_fluid=status["washerFluidLevel"], - brake_fluid=status["brakeFluid"], - service_warning=status["serviceWarningStatus"], - fuel=status["fuelAmount"], - odometer=status["odometer"], - range=status["distanceToEmpty"])) - - track_point_in_utc_time(hass, update, - now + timedelta(seconds=interval)) - - update(utcnow()) - return True