forked from peter/volvo2mqtt
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ad691b6153 | ||
|
|
b6e423839a | ||
|
|
044e71d862 | ||
|
|
444579316b | ||
|
|
e9ae0037dc | ||
|
|
4ab08ab4df | ||
|
|
48cae3eee1 | ||
|
|
57a0451fda | ||
|
|
86fbb08dcb | ||
|
|
5e59c49608 | ||
|
|
5729bf06ba |
@@ -3,28 +3,29 @@ name: Bug report
|
||||
about: Create a report to help us improve
|
||||
title: ''
|
||||
labels: ''
|
||||
assignees: Dielee
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
**Describe the bug**
|
||||
A clear and concise description of what the bug is.
|
||||
|
||||
**To Reproduce**
|
||||
**To Reproduce**:<br>
|
||||
Steps to reproduce the behavior:
|
||||
1. Go to '...'
|
||||
2. Click on '....'
|
||||
3. Scroll down to '....'
|
||||
4. See error
|
||||
|
||||
**Expected behavior**
|
||||
**Expected behavior**:<br>
|
||||
A clear and concise description of what you expected to happen.
|
||||
|
||||
**Screenshots**
|
||||
**Screenshots**:<br>
|
||||
If applicable, add screenshots to help explain your problem.
|
||||
|
||||
**Version info**
|
||||
**Version info**:<br>
|
||||
The version you are using and the method you are using (Docker container/HA Addon/Cloned repo)
|
||||
|
||||
**Additional context**
|
||||
Add any other context about the problem here.
|
||||
**Logs**:<br>
|
||||
Enable the debug option and upload your logfile here. <br>
|
||||
<b>If you are using the HA Addon the log location is `\\<Your HA Host IP>\addons\volvo2mqtt\log\volvo2mqtt.log`
|
||||
|
||||
@@ -15,13 +15,16 @@ Maybe this component works also with other Volvo cars. Please try out the native
|
||||
|
||||
Home Assistant thread can be found [here](https://community.home-assistant.io/t/volvo2mqtt-connect-your-aaos-volvo/585699).
|
||||
|
||||
If you like my work:<br>
|
||||
[](https://ko-fi.com/U7U8MFXCF)
|
||||
|
||||
## Confirmed working with
|
||||
- XC40 BEV (2023)
|
||||
- XC40 BEV (2022)
|
||||
- XC40 PHEV (2021)
|
||||
- V60 T8 PHEV (2023)
|
||||
- C40 PHEV (2023)
|
||||
- C40 PHEV (2022)
|
||||
- C40 BEV (2023)
|
||||
- C40 BEV (2022)
|
||||
- XC90 T8 PHEV (2023)
|
||||
- XC60 PHEV (2023)
|
||||
- XC60 PHEV (2022)
|
||||
|
||||
@@ -0,0 +1,80 @@
|
||||
## v1.7.5
|
||||
### 🚀 Features:
|
||||
|
||||
- Added support for `LOCKING` and `UNLOCKING` state (Lock entity)
|
||||
|
||||
## v1.7.4
|
||||
### 🐛 Bug Fixes:
|
||||
|
||||
- Fixed undocumented charging connection state `CONNECTION_STATUS_FAULT` '#57
|
||||
|
||||
## v1.7.3
|
||||
### 🐛 Bug Fixes:
|
||||
|
||||
- Fixed API changes from Volvo #53
|
||||
|
||||
<b>ATTENTION: Volvo optimized their API. Maybe you have to set your odometer multiplier to 1.
|
||||
Also check all the other multipliers!</b>
|
||||
## v1.7.2
|
||||
### 🐛 Bug Fixes:
|
||||
|
||||
- Fixed "Engine State" can be "true" or "false", not "RUNNING" or "STOPPED" #47
|
||||
|
||||
## v1.7.1
|
||||
### 🚀 Features:
|
||||
|
||||
- Moved "Engine State" from "sensor" to the "binary_sensor" domain
|
||||
- Improved HA Add-On security level to 7
|
||||
|
||||
<b>NOTE: The old "sensor" entity will be not deleted automatically. If you want to clean up your mqtt device, just delete it and restart the volvo2mqtt addon.
|
||||
</b>
|
||||
|
||||
## v1.7.0
|
||||
### 🚀 Features:
|
||||
|
||||
- Added MQTT autodiscovery for HA Add-On users
|
||||
- Added "Engine State" fallback endpoint for some cars (BEVs)
|
||||
- Added dynamic icons for "Engine State"
|
||||
- Turn off the pre-climate switch if "Engine State" changes to "RUNNING"
|
||||
|
||||
<b>NOTE: The mqtt broker port is now a string. Just quote your port like this `port: "1883"`</b><br>
|
||||
<b>NOTE: If you want to switch to MQTT autodiscovery for the HA Add-On change your settings to: <br>
|
||||
</b>
|
||||
|
||||
## v1.6.5
|
||||
### 🐛 Bug Fixes:
|
||||
|
||||
- Fixed missing key in unit mappings for `en_US` and `en_GB` mapping
|
||||
|
||||
## v1.6.4
|
||||
### 🚀 Features:
|
||||
|
||||
- Added dynamic icons for lock, battery and window state #43
|
||||
|
||||
## v1.6.3
|
||||
### 🚀 Features:
|
||||
|
||||
- Moved data source for "Distance to empty" from extended api to connected api
|
||||
|
||||
## v1.6.2
|
||||
### 🚀 Features:
|
||||
|
||||
- Moved print statements to logger
|
||||
- Added more debug logging
|
||||
- The full HA Addon log can now be found at your addon smb share `\\<Your HA IP>\addons\volvo2mqtt\log\volvo2mqtt.log`
|
||||
|
||||
## v1.6.1
|
||||
### 🚀 Features:
|
||||
|
||||
- Added "Washer Fluid Level" and "Distance to Empty" sensors #37
|
||||
- Expanded climate control for better state sync with HA
|
||||
|
||||
### 🐛 Bug Fixes:
|
||||
|
||||
- Fixed wrong return values for not working endpoints
|
||||
- Fixed app crash on credential renewal timeout #39
|
||||
|
||||
## v1.6.0
|
||||
### 🚀 Features:
|
||||
|
||||
- Added conversion from metric to imperial system for `en_US` and `en_GB` locale
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
name: "Volvo2Mqtt"
|
||||
description: "Volvo AAOS MQTT bridge"
|
||||
version: "1.7.2"
|
||||
version: "1.7.5"
|
||||
slug: "volvo2mqtt"
|
||||
init: false
|
||||
url: "https://github.com/Dielee/volvo2mqtt"
|
||||
|
||||
+4
-3
@@ -1,6 +1,6 @@
|
||||
from config import settings
|
||||
|
||||
VERSION = "v1.7.2"
|
||||
VERSION = "v1.7.5"
|
||||
|
||||
OAUTH_URL = "https://volvoid.eu.volvocars.com/as/token.oauth2"
|
||||
VEHICLES_URL = "https://api.volvocars.com/connected-vehicle/v1/vehicles"
|
||||
@@ -44,14 +44,15 @@ charging_system_states = {"CHARGING_SYSTEM_CHARGING": "Charging", "CHARGING_SYST
|
||||
"CHARGING_SYSTEM_FAULT": "Fault", "CHARGING_SYSTEM_UNSPECIFIED": "Unspecified"}
|
||||
|
||||
charging_connection_states = {"CONNECTION_STATUS_DISCONNECTED": "Disconnected", "CONNECTION_STATUS_UNSPECIFIED": "Unspecified",
|
||||
"CONNECTION_STATUS_CONNECTED_DC": "Connected DC", "CONNECTION_STATUS_CONNECTED_AC": "Connected AC"}
|
||||
"CONNECTION_STATUS_CONNECTED_DC": "Connected DC", "CONNECTION_STATUS_CONNECTED_AC": "Connected AC",
|
||||
"CONNECTION_STATUS_FAULT": "Fault"}
|
||||
|
||||
window_states = {"CLOSED": "OFF", "OPEN": "ON"}
|
||||
door_states = {"CLOSED": "OFF", "OPEN": "ON"}
|
||||
engine_states = {"RUNNING": "ON", "STOPPED": "OFF", "true": "ON", "false": "OFF"}
|
||||
|
||||
icon_states = {
|
||||
"lock_status": {"UNLOCKED": "lock-open-alert", "LOCKED": "lock"},
|
||||
"lock_status": {"UNLOCKED": "lock-open-alert", "LOCKED": "lock", "UNLOCKING": "lock-reset", "LOCKING": "lock-reset"},
|
||||
"door_front_left": {"ON": "car-door", "OFF": "car-door-lock"},
|
||||
"door_front_right": {"ON": "car-door", "OFF": "car-door-lock"},
|
||||
"door_rear_left": {"ON": "car-door", "OFF": "car-door-lock"},
|
||||
|
||||
+12
-6
@@ -96,15 +96,21 @@ def on_message(client, userdata, msg):
|
||||
update_car_data()
|
||||
elif "lock_status" in msg.topic:
|
||||
if payload == "LOCK":
|
||||
volvo.api_call(CAR_LOCK_URL, "POST", vin)
|
||||
# Start the api call in another thread for HA performance
|
||||
Thread(target=volvo.api_call, args=(CAR_LOCK_URL, "POST", vin)).start()
|
||||
|
||||
# Force set unlocked state in HA because of slow api response
|
||||
update_car_data(True, {"entity_id": "lock_status", "vin": vin, "state": "LOCKED"})
|
||||
# Force set locking state
|
||||
update_car_data(False, {"entity_id": "lock_status", "vin": vin, "state": "LOCKING"})
|
||||
# Fetch API lock state until locking finished
|
||||
Thread(target=volvo.check_lock_status, args=(vin, "UNLOCKED")).start()
|
||||
elif payload == "UNLOCK":
|
||||
volvo.api_call(CAR_UNLOCK_URL, "POST", vin)
|
||||
# Start the api call in another thread for HA performance
|
||||
Thread(target=volvo.api_call, args=(CAR_UNLOCK_URL, "POST", vin)).start()
|
||||
|
||||
# Force set unlocked state in HA because of slow api response
|
||||
update_car_data(True, {"entity_id": "lock_status", "vin": vin, "state": "UNLOCKED"})
|
||||
# Force set unlocking state
|
||||
update_car_data(False, {"entity_id": "lock_status", "vin": vin, "state": "UNLOCKING"})
|
||||
# Fetch API lock state until unlocking finished
|
||||
Thread(target=volvo.check_lock_status, args=(vin, "LOCKED")).start()
|
||||
elif "update_data" in msg.topic:
|
||||
if payload == "PRESS":
|
||||
update_car_data(True)
|
||||
|
||||
+16
-2
@@ -179,6 +179,20 @@ def disable_climate(vin):
|
||||
mqtt.update_car_data()
|
||||
|
||||
|
||||
def check_lock_status(vin, old_state):
|
||||
max_runs = 10
|
||||
done_runs = 0
|
||||
lock_state = api_call(LOCK_STATE_URL, "GET", vin, "lock_status", True)
|
||||
while lock_state == old_state:
|
||||
done_runs = done_runs + 1
|
||||
if done_runs >= max_runs:
|
||||
break
|
||||
lock_state = api_call(LOCK_STATE_URL, "GET", vin, "lock_status", True)
|
||||
time.sleep(2)
|
||||
|
||||
mqtt.update_car_data()
|
||||
|
||||
|
||||
def check_engine_status(vin):
|
||||
endpoint_url = ""
|
||||
engine_state_supported = False
|
||||
@@ -369,7 +383,7 @@ def parse_api_data(data, sensor_id=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"])
|
||||
fuel_amount = float(data["fuelAmount"]["value"])
|
||||
if fuel_amount > 0:
|
||||
return fuel_amount
|
||||
return None
|
||||
@@ -388,7 +402,7 @@ def parse_api_data(data, sensor_id=None):
|
||||
return None
|
||||
elif sensor_id == "average_speed":
|
||||
if util.keys_exists(data, "averageSpeed"):
|
||||
average_speed = int(data["averageSpeed"]["value"])
|
||||
average_speed = float(data["averageSpeed"]["value"])
|
||||
if average_speed > 1:
|
||||
divider = 1
|
||||
if util.keys_exists(settings["volvoData"], "averageSpeedDivider"):
|
||||
|
||||
Reference in New Issue
Block a user