Compare commits

...
9 Commits
Author SHA1 Message Date
Linus DietzandGitHub 00f9e30002 Update README.md 2023-06-20 13:00:45 +02:00
Linus Dietz 372370786a Add debug option 2023-06-20 12:58:08 +02:00
Linus DietzandGitHub 13ac9a9c2c Optimize locale README 2023-06-20 12:48:55 +02:00
Linus DietzandGitHub 3cd82f83a6 Add V60 T8 to working cars 2023-06-20 12:44:52 +02:00
Linus Dietz 05e4539062 Fix dockerfile 2023-06-20 12:27:28 +02:00
Linus Dietz 7e5d09681e cleanup repo 2023-06-20 12:18:46 +02:00
Linus DietzandGitHub 73ac466992 Move to Ko-Fi 2023-06-20 11:44:38 +02:00
Linus DietzandGitHub 38f747ffc3 Create repository.yaml 2023-06-20 11:23:20 +02:00
Linus Dietz d01174e213 Fix climate and lock commands for multiple cars 2023-06-20 11:20:38 +02:00
10 changed files with 18 additions and 17 deletions
+1 -1
View File
@@ -14,4 +14,4 @@ RUN pip install -r requirements.txt
COPY / . COPY / .
# command to run on container start # command to run on container start
CMD [ "python", "-u", "./main.py" ] CMD [ "python", "-u", "/volvoAAOS2mqtt/src/main.py" ]
+5 -3
View File
@@ -4,7 +4,8 @@ This component establishes a connection between the newer AAOS Volvo cars and Ho
Maybe this component works also with other Volvo cars. Please try out the native Volvo [integration](https://www.home-assistant.io/integrations/volvooncall/) before using this component! If the native component doesn't work for your car, try this mqtt bridge. Maybe this component works also with other Volvo cars. Please try out the native Volvo [integration](https://www.home-assistant.io/integrations/volvooncall/) before using this component! If the native component doesn't work for your car, try this mqtt bridge.
## Confirmed working with ## Confirmed working with
- Volvo XC40 BEV (2023) - Volvo XC40 BEV (2023)
- V60 T8 PHEV (2023)
Please let me know if your car works with this addon so I can expand the list! Please let me know if your car works with this addon so I can expand the list!
@@ -20,11 +21,12 @@ Here is what every option means:
| Name | Type | Default | Description | | Name | Type | Default | Description |
| -------------------- | :-------: | :----------: | --------------------------------------------------------------- | | -------------------- | :-------: | :----------: | --------------------------------------------------------------- |
| `updateInterval` | `int` | **required** | Update intervall in seconds. | | `updateInterval` | `int` | **required** | Update intervall in seconds. |
| `babelLocale` | `string` | **required** | Locale for date Format | | `babelLocale` | `string` | **required** | Select your country from this [list](https://www.ibm.com/docs/en/radfws/9.7?topic=overview-locales-code-pages-supported). "Locale name" is the column you need! |
| `mqtt` | `json` | **required** | Broker = Mqtt Broker IP / Username and Passwort are optional! | | `mqtt` | `json` | **required** | Broker = Mqtt Broker IP / Username and Passwort are optional! |
| `volvoData` | `json` | **required** | Username and password are REQUIRED. Car vin can be a single vin or a list of multiple vins like `["vin1", "vin2"]`. If no vin is provided, <b>ALL</b> of your vehicles will be used. Vccapi key is REQUIRED. Get your Vccapi key from [here](https://developer.volvocars.com/account/). | | `volvoData` | `json` | **required** | Username and password are REQUIRED. Car vin can be a single vin or a list of multiple vins like `["vin1", "vin2"]`. If no vin is provided, <b>ALL</b> of your vehicles will be used. Vccapi key is REQUIRED. Get your Vccapi key from [here](https://developer.volvocars.com/account/). |
| `TZ` | `string` | | Container timezone eg "Europe/Berlin" | | `TZ` | `string` | | Container timezone eg "Europe/Berlin" |
| `debug` | `string` | | Debug option (True/False) - optional! |
If you like my work: If you like my work:
<a href="https://www.buymeacoffee.com/dielee" target="_blank"><img src="https://www.buymeacoffee.com/assets/img/custom_images/orange_img.png" alt="Buy Me A Coffee" style="height: 41px !important;width: 174px !important;box-shadow: 0px 3px 2px 0px rgba(190, 190, 190, 0.5) !important;-webkit-box-shadow: 0px 3px 2px 0px rgba(190, 190, 190, 0.5) !important;" ></a> [![ko-fi](https://ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/U7U8MFXCF)
-8
View File
@@ -1,8 +0,0 @@
{
"name": "volvoaaos2mqtt",
"ports": {},
"env": {"TZ": "Europe/Amsterdam"},
"volumes": [
"/home/dockerhost/volvoAAOS2mqtt/settings.json:/volvoAAOS2mqtt/settings.json"
]
}
+3
View File
@@ -0,0 +1,3 @@
name: volvo2mqtt
url: https://github.com/Dielee/volvo2mqtt
maintainer: Linus Dietz (Dielee)
View File
+1 -1
View File
@@ -1,4 +1,4 @@
VERSION = "v1.0.6" VERSION = "v1.0.8"
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/v1/vehicles" VEHICLES_URL = "https://api.volvocars.com/connected-vehicle/v1/vehicles"
View File
+5 -4
View File
@@ -42,27 +42,28 @@ def on_disconnect(client, userdata, rc):
def on_message(client, userdata, msg): def on_message(client, userdata, msg):
if msg.topic in subscribed_topics: if msg.topic in subscribed_topics:
vin = msg.topic.split('/')[2].split('_')[0]
payload = msg.payload.decode("UTF-8") payload = msg.payload.decode("UTF-8")
if "climate_status" in msg.topic: if "climate_status" in msg.topic:
global assumed_climate_state global assumed_climate_state
if payload == "ON": if payload == "ON":
api_thread = threading.Thread(target=volvo.api_call, args=(CLIMATE_START_URL, "POST", )) api_thread = threading.Thread(target=volvo.api_call, args=(CLIMATE_START_URL, "POST", vin))
api_thread.start() api_thread.start()
assumed_climate_state = "ON" assumed_climate_state = "ON"
# Starting timer to disable climate after 30 mins # Starting timer to disable climate after 30 mins
threading.Timer(30 * 60, volvo.disable_climate).start() threading.Timer(30 * 60, volvo.disable_climate).start()
update_car_data() update_car_data()
elif payload == "OFF": elif payload == "OFF":
api_thread = threading.Thread(target=volvo.api_call, args=(CLIMATE_STOP_URL, "POST", )) api_thread = threading.Thread(target=volvo.api_call, args=(CLIMATE_STOP_URL, "POST", vin))
api_thread.start() api_thread.start()
assumed_climate_state = "OFF" assumed_climate_state = "OFF"
update_car_data() update_car_data()
elif "lock_status" in msg.topic: elif "lock_status" in msg.topic:
if payload == "LOCK": if payload == "LOCK":
volvo.api_call(CAR_LOCK_URL, "POST") volvo.api_call(CAR_LOCK_URL, "POST", vin)
update_car_data() update_car_data()
elif payload == "UNLOCK": elif payload == "UNLOCK":
volvo.api_call(CAR_UNLOCK_URL, "POST") volvo.api_call(CAR_UNLOCK_URL, "POST", vin)
update_car_data() update_car_data()
elif "update_data" in msg.topic: elif "update_data" in msg.topic:
if payload == "PRESS": if payload == "PRESS":
View File
+3
View File
@@ -139,6 +139,9 @@ def api_call(url, method, vin, sensor_id=None):
if response.status_code == 200: if response.status_code == 200:
data = response.json() data = response.json()
if "debug" in settings:
if settings["debug"]:
print(response.text)
else: else:
if url == CLIMATE_START_URL and response.status_code == 503: if url == CLIMATE_START_URL and response.status_code == 503:
print("Car in use, cannot start pre climatization") print("Car in use, cannot start pre climatization")