From 1998dfc231d981e8b50253ea0f7ec8f9730d5d9a Mon Sep 17 00:00:00 2001 From: Linus Dietz <45101649+Dielee@users.noreply.github.com> Date: Mon, 3 Jul 2023 07:26:18 +0200 Subject: [PATCH] Add engine state fallback endpoint // Dynamic icons for engine state --- src/const.py | 3 +++ src/volvo.py | 7 ++++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/const.py b/src/const.py index b7bb344..9ef3411 100644 --- a/src/const.py +++ b/src/const.py @@ -19,6 +19,7 @@ ENGINE_STATE_URL = "https://api.volvocars.com/connected-vehicle/v2/vehicles/{0}/ BATTERY_CHARGE_STATE_URL = "https://api.volvocars.com/connected-vehicle/v2/vehicles/{0}/battery-charge-level" FUEL_STATE_URL = "https://api.volvocars.com/connected-vehicle/v2/vehicles/{0}/fuel" STATISTICS_URL = "https://api.volvocars.com/connected-vehicle/v2/vehicles/{0}/statistics" +ENGINE_DIAGNOSTICS_URL = "https://api.volvocars.com/connected-vehicle/v2/vehicles/{0}/engine" units = { "en_GB": { @@ -54,6 +55,7 @@ icon_states = { "door_front_right": {"ON": "car-door", "OFF": "car-door-lock"}, "door_rear_left": {"ON": "car-door", "OFF": "car-door-lock"}, "door_rear_right": {"ON": "car-door", "OFF": "car-door-lock"}, + "engine_state": {"RUNNING": "engine-outline", "STOPPED": "engine-off-outline"}, "battery_charge_level": [ {"from": 100, "to": 100, "icon": "battery"}, {"from": 99, "to": 90, "icon": "battery-90"}, @@ -100,6 +102,7 @@ supported_entities = [ {"name": "Tire Rear Left", "domain": "sensor", "id": "tyre_rear_left", "icon": "car-tire-alert", "url": TYRE_STATE_URL}, {"name": "Tire Rear Right", "domain": "sensor", "id": "tyre_rear_right", "icon": "car-tire-alert", "url": TYRE_STATE_URL}, {"name": "Engine State", "domain": "sensor", "id": "engine_state", "icon": "engine", "url": ENGINE_STATE_URL}, + {"name": "Engine State", "domain": "sensor", "id": "engine_state", "icon": "engine", "url": ENGINE_DIAGNOSTICS_URL}, {"name": "Fuel Level", "domain": "sensor", "id": "fuel_level", "unit": "liters", "icon": "fuel", "url": FUEL_STATE_URL}, {"name": "Average Fuel Consumption", "domain": "sensor", "id": "average_fuel_consumption", "unit": "liters", "icon": "fuel", "url": STATISTICS_URL}, {"name": "Distance to Empty", "domain": "sensor", "id": "distance_to_empty", "unit": "km" if not units.get(settings["babelLocale"]) else units[settings["babelLocale"]]["distance_to_empty"]["unit"], "icon": "map-marker-distance", "url": STATISTICS_URL}, diff --git a/src/volvo.py b/src/volvo.py index 6ac187f..d739a39 100644 --- a/src/volvo.py +++ b/src/volvo.py @@ -10,7 +10,7 @@ from babel.dates import format_datetime from const import charging_system_states, charging_connection_states, door_states, window_states, \ OAUTH_URL, VEHICLES_URL, VEHICLE_DETAILS_URL, RECHARGE_STATE_URL, CLIMATE_START_URL, \ WINDOWS_STATE_URL, LOCK_STATE_URL, TYRE_STATE_URL, supported_entities, BATTERY_CHARGE_STATE_URL, \ - STATISTICS_URL, CLIMATE_STOP_URL + STATISTICS_URL, CLIMATE_STOP_URL, ENGINE_DIAGNOSTICS_URL session = requests.Session() session.headers = { @@ -150,6 +150,11 @@ def check_supported_endpoints(): # If battery charge level could be found in recharge-api, skip the second battery charge sensor continue + if entity["id"] == "engine_state" and entity["url"] == ENGINE_DIAGNOSTICS_URL \ + and any("engine_state" in d["id"] for d in supported_endpoints[vin]): + # If engine state could be found in engine state endpoint, skip the second engine running sensor + continue + if entity.get('url'): state = api_call(entity["url"], "GET", vin, entity["id"]) else: