mirror of
https://github.com/Dielee/volvo2mqtt.git
synced 2026-08-13 11:19:52 +02:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a68faf8267 | ||
|
|
290a441f2b | ||
|
|
63f333a186 | ||
|
|
3d2285f59e | ||
|
|
e444b6a838 | ||
|
|
ce856d91c4 | ||
|
|
9c749001c9 |
@@ -32,11 +32,13 @@ If you like my work:<br>
|
|||||||
- XC60 PHEV (2024)
|
- XC60 PHEV (2024)
|
||||||
- XC60 PHEV (2023)
|
- XC60 PHEV (2023)
|
||||||
- XC60 PHEV (2022)
|
- XC60 PHEV (2022)
|
||||||
|
- XC60 B5 Mildhybrid (2023)
|
||||||
- XC90 PHEV T8 (2023)
|
- XC90 PHEV T8 (2023)
|
||||||
- XC90 PHEV T8 (2024)
|
- XC90 PHEV T8 (2024)
|
||||||
- XC90 B5 Mildhybrid (2024)
|
- XC90 B5 Mildhybrid (2024)
|
||||||
- V90 PHEV T8 (2019)*
|
- V90 PHEV T8 (2019)*
|
||||||
- V90 PHEV T6 (2024)
|
- V90 PHEV T6 (2024)
|
||||||
|
- V90 B5 Mildhybrid (2023)
|
||||||
|
|
||||||
*only partly working
|
*only partly working
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,18 @@
|
|||||||
|
## v1.8.27
|
||||||
|
### 🚀 Features:
|
||||||
|
|
||||||
|
- Add state cacheing for "diagnostics" endpoint
|
||||||
|
|
||||||
|
## v1.8.26
|
||||||
|
### 🚀 Features:
|
||||||
|
|
||||||
|
- Add option to disable updates #160 (Set the update interval to -1)
|
||||||
|
|
||||||
|
## v1.8.25
|
||||||
|
### 🚀 Features:
|
||||||
|
|
||||||
|
- Fix INTERNAL_SERVER_ERROR #165
|
||||||
|
|
||||||
## v1.8.24
|
## v1.8.24
|
||||||
### 🚀 Features:
|
### 🚀 Features:
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
name: "Volvo2Mqtt"
|
name: "Volvo2Mqtt"
|
||||||
description: "Volvo AAOS MQTT bridge"
|
description: "Volvo AAOS MQTT bridge"
|
||||||
version: "1.8.24"
|
version: "1.8.27"
|
||||||
slug: "volvo2mqtt"
|
slug: "volvo2mqtt"
|
||||||
init: false
|
init: false
|
||||||
url: "https://github.com/Dielee/volvo2mqtt"
|
url: "https://github.com/Dielee/volvo2mqtt"
|
||||||
|
|||||||
+2
-2
@@ -1,6 +1,6 @@
|
|||||||
from config import settings
|
from config import settings
|
||||||
|
|
||||||
VERSION = "v1.8.24"
|
VERSION = "v1.8.27"
|
||||||
|
|
||||||
OAUTH_URL = "https://volvoid.eu.volvocars.com/as/token.oauth2"
|
OAUTH_URL = "https://volvoid.eu.volvocars.com/as/token.oauth2"
|
||||||
VEHICLES_URL = "https://api.volvocars.com/connected-vehicle/v2/vehicles"
|
VEHICLES_URL = "https://api.volvocars.com/connected-vehicle/v2/vehicles"
|
||||||
@@ -132,7 +132,7 @@ supported_entities = [
|
|||||||
{"name": "Service warning status", "domain": "sensor", "id": "service_warning_status", "icon": "alert-outline", "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": "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"},
|
{"name": "API Backend status", "domain": "sensor", "id": "api_backend_status", "icon": "alert"},
|
||||||
{"name": "Update Interval", "domain": "number", "id": "update_interval", "unit": "seconds", "icon": "timer", "min": 60, "max": 600, "mode": "box"},
|
{"name": "Update Interval", "domain": "number", "id": "update_interval", "unit": "seconds", "icon": "timer", "min": -1, "max": 600, "mode": "box"},
|
||||||
{"name": "Warnings", "domain": "sensor", "id": "warnings", "icon": "alert", "url": WARNINGS_URL}
|
{"name": "Warnings", "domain": "sensor", "id": "warnings", "icon": "alert", "url": WARNINGS_URL}
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|||||||
+20
-7
@@ -115,7 +115,12 @@ def on_message(client, userdata, msg):
|
|||||||
if payload == "PRESS":
|
if payload == "PRESS":
|
||||||
update_car_data(True)
|
update_car_data(True)
|
||||||
elif "update_interval" in msg.topic:
|
elif "update_interval" in msg.topic:
|
||||||
settings.update({"updateInterval": int(payload)})
|
update_interval = int(payload)
|
||||||
|
if update_interval >= 60 or update_interval == -1:
|
||||||
|
settings.update({"updateInterval": int(update_interval)})
|
||||||
|
else:
|
||||||
|
logging.warning("Interval " + str(update_interval) + " seconds is to low. Doing nothing!")
|
||||||
|
update_car_data()
|
||||||
elif "schedule" in msg.topic:
|
elif "schedule" in msg.topic:
|
||||||
try:
|
try:
|
||||||
d = json.loads(payload)
|
d = json.loads(payload)
|
||||||
@@ -216,11 +221,15 @@ def start_climate(vin):
|
|||||||
def update_loop():
|
def update_loop():
|
||||||
create_ha_devices()
|
create_ha_devices()
|
||||||
while True:
|
while True:
|
||||||
logging.info("Sending mqtt update...")
|
if settings["updateInterval"] > 0:
|
||||||
send_heartbeat()
|
logging.info("Sending mqtt update...")
|
||||||
update_car_data()
|
send_heartbeat()
|
||||||
logging.info("Mqtt update done. Next run in " + str(settings["updateInterval"]) + " seconds.")
|
update_car_data()
|
||||||
time.sleep(settings["updateInterval"])
|
logging.info("Mqtt update done. Next run in " + str(settings["updateInterval"]) + " seconds.")
|
||||||
|
time.sleep(settings["updateInterval"])
|
||||||
|
else:
|
||||||
|
logging.info("Data update is disabled, doing nothing for 30 seconds")
|
||||||
|
time.sleep(30)
|
||||||
|
|
||||||
|
|
||||||
def update_car_data(force_update=False, overwrite={}):
|
def update_car_data(force_update=False, overwrite={}):
|
||||||
@@ -265,7 +274,11 @@ def update_car_data(force_update=False, overwrite={}):
|
|||||||
f"homeassistant/{entity['domain']}/{vin}_{entity['id']}/attributes",
|
f"homeassistant/{entity['domain']}/{vin}_{entity['id']}/attributes",
|
||||||
json.dumps(state)
|
json.dumps(state)
|
||||||
)
|
)
|
||||||
state = sum(value == "FAILURE" for value in state.values())
|
if state:
|
||||||
|
state = sum(value == "FAILURE" for value in state.values())
|
||||||
|
else:
|
||||||
|
state = 0
|
||||||
|
|
||||||
topic = f"homeassistant/{entity['domain']}/{vin}_{entity['id']}/state"
|
topic = f"homeassistant/{entity['domain']}/{vin}_{entity['id']}/state"
|
||||||
else:
|
else:
|
||||||
topic = f"homeassistant/{entity['domain']}/{vin}_{entity['id']}/state"
|
topic = f"homeassistant/{entity['domain']}/{vin}_{entity['id']}/state"
|
||||||
|
|||||||
+2
-2
@@ -12,7 +12,7 @@ from json import JSONDecodeError
|
|||||||
from const import charging_system_states, charging_connection_states, door_states, window_states, \
|
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, \
|
OAUTH_URL, VEHICLES_URL, VEHICLE_DETAILS_URL, RECHARGE_STATE_URL, CLIMATE_START_URL, \
|
||||||
WINDOWS_STATE_URL, LOCK_STATE_URL, TYRE_STATE_URL, supported_entities, FUEL_BATTERY_STATE_URL, \
|
WINDOWS_STATE_URL, LOCK_STATE_URL, TYRE_STATE_URL, supported_entities, FUEL_BATTERY_STATE_URL, \
|
||||||
STATISTICS_URL, ENGINE_DIAGNOSTICS_URL, API_BACKEND_STATUS, WARNINGS_URL, engine_states
|
STATISTICS_URL, ENGINE_DIAGNOSTICS_URL, VEHICLE_DIAGNOSTICS_URL, API_BACKEND_STATUS, WARNINGS_URL, engine_states
|
||||||
|
|
||||||
session = requests.Session()
|
session = requests.Session()
|
||||||
session.headers = {
|
session.headers = {
|
||||||
@@ -346,7 +346,7 @@ def api_call(url, method, vin, sensor_id=None, force_update=False, key_change=Fa
|
|||||||
refresh_auth()
|
refresh_auth()
|
||||||
|
|
||||||
if url in [RECHARGE_STATE_URL, WINDOWS_STATE_URL, LOCK_STATE_URL, TYRE_STATE_URL,
|
if url in [RECHARGE_STATE_URL, WINDOWS_STATE_URL, LOCK_STATE_URL, TYRE_STATE_URL,
|
||||||
STATISTICS_URL, ENGINE_DIAGNOSTICS_URL, FUEL_BATTERY_STATE_URL, WARNINGS_URL]:
|
STATISTICS_URL, ENGINE_DIAGNOSTICS_URL, VEHICLE_DIAGNOSTICS_URL, FUEL_BATTERY_STATE_URL, WARNINGS_URL]:
|
||||||
# Minimize API calls for endpoints with multiple values
|
# Minimize API calls for endpoints with multiple values
|
||||||
response = cached_request(url, method, vin, force_update, key_change)
|
response = cached_request(url, method, vin, force_update, key_change)
|
||||||
if response is None:
|
if response is None:
|
||||||
|
|||||||
Reference in New Issue
Block a user