diff --git a/src/config.yaml b/src/config.yaml index 6f81a73..5032013 100644 --- a/src/config.yaml +++ b/src/config.yaml @@ -1,6 +1,6 @@ name: "Volvo2Mqtt" description: "Volvo AAOS MQTT bridge" -version: "1.7.0" +version: "1.7.1" slug: "volvo2mqtt" init: false url: "https://github.com/Dielee/volvo2mqtt" diff --git a/src/const.py b/src/const.py index 0029f72..d95fa3f 100644 --- a/src/const.py +++ b/src/const.py @@ -1,6 +1,6 @@ from config import settings -VERSION = "v1.7.0" +VERSION = "v1.7.1" OAUTH_URL = "https://volvoid.eu.volvocars.com/as/token.oauth2" VEHICLES_URL = "https://api.volvocars.com/connected-vehicle/v1/vehicles" @@ -48,6 +48,7 @@ charging_connection_states = {"CONNECTION_STATUS_DISCONNECTED": "Disconnected", window_states = {"CLOSED": "OFF", "OPEN": "ON"} door_states = {"CLOSED": "OFF", "OPEN": "ON"} +engine_states = {"RUNNING": "ON", "STOPPED": "OFF"} icon_states = { "lock_status": {"UNLOCKED": "lock-open-alert", "LOCKED": "lock"}, @@ -55,7 +56,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"}, + "engine_state": {"ON": "engine-outline", "OFF": "engine-off-outline"}, "battery_charge_level": [ {"from": 100, "to": 100, "icon": "battery"}, {"from": 99, "to": 90, "icon": "battery-90"}, @@ -101,8 +102,8 @@ supported_entities = [ {"name": "Tire Front Right", "domain": "sensor", "id": "tyre_front_right", "icon": "car-tire-alert", "url": TYRE_STATE_URL}, {"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": "Engine State", "domain": "binary_sensor", "device_class": "running", "id": "engine_state", "icon": "engine", "url": ENGINE_STATE_URL}, + {"name": "Engine State", "domain": "binary_sensor", "device_class": "running", "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 91059e7..572c702 100644 --- a/src/volvo.py +++ b/src/volvo.py @@ -3,14 +3,14 @@ import requests import mqtt import util import time -from threading import Thread, currentThread +from threading import currentThread from datetime import datetime, timedelta from config import settings 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, ENGINE_DIAGNOSTICS_URL + STATISTICS_URL, ENGINE_DIAGNOSTICS_URL, engine_states session = requests.Session() session.headers = { @@ -194,7 +194,7 @@ def check_engine_status(vin): t = currentThread() while getattr(t, "do_run", True): engine_state = api_call(endpoint_url, "GET", vin, "engine_state", True) - if engine_state == "RUNNING": + if engine_state == "ON": mqtt.assumed_climate_state[vin] = "OFF" mqtt.update_car_data() break @@ -366,7 +366,7 @@ def parse_api_data(data, sensor_id=None): elif sensor_id == "tyre_rear_right": return data["rearRightTyrePressure"]["value"] if util.keys_exists(data, "rearRightTyrePressure") else None elif sensor_id == "engine_state": - return data["engineRunning"]["value"] if util.keys_exists(data, "engineRunning") else None + return engine_states[data["engineRunning"]["value"]] if util.keys_exists(data, "engineRunning") else None elif sensor_id == "fuel_level": if util.keys_exists(data, "fuelAmount"): fuel_amount = int(data["fuelAmount"]["value"])