From 1f0c52b5a72156b9a08028003c4e4920bdc811ac Mon Sep 17 00:00:00 2001 From: Linus Dietz <45101649+Dielee@users.noreply.github.com> Date: Tue, 21 Nov 2023 08:55:27 +0100 Subject: [PATCH] Add average energy consumption, distance to empty battery and washer fluid level sensor --- src/const.py | 7 +++++-- src/volvo.py | 12 +++++++++++- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/const.py b/src/const.py index 7330d73..eb07b25 100644 --- a/src/const.py +++ b/src/const.py @@ -110,13 +110,16 @@ supported_entities = [ {"name": "Engine State", "domain": "binary_sensor", "device_class": "running", "id": "engine_state", "icon": "engine", "url": ENGINE_STATE_URL}, {"name": "Fuel Level", "domain": "sensor", "id": "fuel_level", "unit": "liters", "icon": "fuel", "url": FUEL_BATTERY_STATE_URL, "state_class": "measurement"}, {"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, "state_class": "measurement"}, + {"name": "Average Energy Consumption", "domain": "sensor", "id": "average_energy_consumption", "unit": "kwh", "icon": "car-electric", "url": STATISTICS_URL}, + {"name": "Distance to Empty Tank", "domain": "sensor", "id": "distance_to_empty_tank", "unit": "km" if not units.get(settings["babelLocale"]) else units[settings["babelLocale"]]["distance_to_empty"]["unit"], "icon": "map-marker-distance", "url": STATISTICS_URL, "state_class": "measurement"}, + {"name": "Distance to Empty Battery", "domain": "sensor", "id": "distance_to_empty_battery", "unit": "km" if not units.get(settings["babelLocale"]) else units[settings["babelLocale"]]["distance_to_empty"]["unit"], "icon": "map-marker-distance", "url": STATISTICS_URL, "state_class": "measurement"}, {"name": "Average Speed", "domain": "sensor", "id": "average_speed", "unit": "km/h" if not units.get(settings["babelLocale"]) else units[settings["babelLocale"]]["average_speed"]["unit"], "icon": "speedometer", "url": STATISTICS_URL, "state_class": "measurement"}, {"name": "Hours to Service", "domain": "sensor", "id": "hours_to_service", "unit": "hour", "icon": "wrench-clock", "url": VEHICLE_DIAGNOSTICS_URL}, {"name": "Distance to Service", "domain": "sensor", "id": "km_to_service", "unit": "km" if not units.get(settings["babelLocale"]) else units[settings["babelLocale"]]["distance_to_service"]["unit"], "icon": "wrench-clock", "url": VEHICLE_DIAGNOSTICS_URL}, {"name": "Time to Service", "domain": "sensor", "id": "time_to_service", "icon": "wrench-clock", "url": VEHICLE_DIAGNOSTICS_URL}, {"name": "Service warning status", "domain": "sensor", "id": "service_warning_status", "icon": "alert-outline", "url": VEHICLE_DIAGNOSTICS_URL}, + {"name": "Washer Fluid Level warning", "domain": "sensor", "id": "washer_fluid_warning", "icon": "alert-outline", "url": VEHICLE_DIAGNOSTICS_URL}, {"name": "API Backend status", "domain": "sensor", "id": "api_backend_status", "icon": "alert"} ] -old_entity_ids = ["months_to_service", "service_warning_trigger"] +old_entity_ids = ["months_to_service", "service_warning_trigger", "distance_to_empty"] diff --git a/src/volvo.py b/src/volvo.py index 17762f9..bb6433c 100644 --- a/src/volvo.py +++ b/src/volvo.py @@ -557,12 +557,18 @@ def parse_api_data(data, sensor_id=None): "latitude": raw_data["coordinates"][1], "gps_accuracy": 1} return coordinates - elif sensor_id == "distance_to_empty": + elif sensor_id == "distance_to_empty_tank": if util.keys_exists(data, "distanceToEmptyTank"): distance_to_empty = int(data["distanceToEmptyTank"]["value"]) if distance_to_empty > 0: return util.convert_metric_values(data["distanceToEmptyTank"]["value"]) return None + elif sensor_id == "distance_to_empty_battery": + if util.keys_exists(data, "distanceToEmptyBattery"): + distance_to_empty = int(data["distanceToEmptyBattery"]["value"]) + if distance_to_empty > 0: + return util.convert_metric_values(data["distanceToEmptyBattery"]["value"]) + return None elif sensor_id == "hours_to_service": return data["engineHoursToService"]["value"] if util.keys_exists(data, "engineHoursToService") else None elif sensor_id == "km_to_service": @@ -578,5 +584,9 @@ def parse_api_data(data, sensor_id=None): return None elif sensor_id == "service_warning_status": return data["serviceWarning"]["value"] if util.keys_exists(data, "serviceWarning") else None + elif sensor_id == "average_energy_consumption": + return data["averageEnergyConsumption"]["value"] if util.keys_exists(data, "averageEnergyConsumption") else None + elif sensor_id == "washer_fluid_warning": + return data["washerFluidLevelWarning"]["value"] if util.keys_exists(data, "washerFluidLevelWarning") else None else: return None