Compare commits

...
4 Commits
Author SHA1 Message Date
Linus Dietz 710ca2fcbc Bump version 2024-08-09 09:32:21 +02:00
Linus Dietz c1998f8938 Rework image function 2024-08-09 09:30:04 +02:00
Linus Dietz 693e0b0048 Fix typo 2024-08-09 08:26:22 +02:00
Linus Dietz f23f56e45e Take care of corrupted token files #220 2024-08-09 08:25:17 +02:00
5 changed files with 51 additions and 17 deletions
+6
View File
@@ -1,3 +1,9 @@
## v1.9.6
### 🐛 Bug Fixes:
- Fixed interior and exterior Images #219
- Take care of broken token files #220
## v1.9.5 ## v1.9.5
### 🚀 Features: ### 🚀 Features:
+1 -1
View File
@@ -1,6 +1,6 @@
name: "Volvo2Mqtt" name: "Volvo2Mqtt"
description: "Volvo AAOS MQTT bridge" description: "Volvo AAOS MQTT bridge"
version: "1.9.5" version: "1.9.6"
slug: "volvo2mqtt" slug: "volvo2mqtt"
init: false init: false
url: "https://github.com/Dielee/volvo2mqtt" url: "https://github.com/Dielee/volvo2mqtt"
+1 -1
View File
@@ -1,6 +1,6 @@
from config import settings from config import settings
VERSION = "v1.9.5" VERSION = "v1.9.6"
OAUTH_TOKEN_URL = "https://volvoid.eu.volvocars.com/as/token.oauth2" OAUTH_TOKEN_URL = "https://volvoid.eu.volvocars.com/as/token.oauth2"
OAUTH_AUTH_URL = "https://volvoid.eu.volvocars.com/as/authorization.oauth2" OAUTH_AUTH_URL = "https://volvoid.eu.volvocars.com/as/authorization.oauth2"
+30 -6
View File
@@ -5,6 +5,7 @@ import json
import volvo import volvo
import util import util
import os import os
import requests
from threading import Thread, Timer from threading import Thread, Timer
from datetime import datetime from datetime import datetime
from babel.dates import format_datetime from babel.dates import format_datetime
@@ -84,13 +85,14 @@ def send_car_images(vin, data, device):
if util.keys_exists(data, "images"): if util.keys_exists(data, "images"):
for entity in [{"name": "Exterior Image", "id": "exterior_image"}, for entity in [{"name": "Exterior Image", "id": "exterior_image"},
{"name": "Interior Image", "id": "interior_image"}]: {"name": "Interior Image", "id": "interior_image"}]:
url_topic = f"homeassistant/image/{vin}_{entity['id']}/image_url" image_topic = f"homeassistant/image/{vin}_{entity['id']}/image_topic"
config = { config = {
"name": entity["name"], "name": entity["name"],
"object_id": f"volvo_{vin}_{entity['id']}", "object_id": f"volvo_{vin}_{entity['id']}",
"schema": "state", "schema": "state",
"icon": "mdi:image-area", "icon": "mdi:image-area",
"url_topic": url_topic, "content_type": "image/png",
"image_topic": image_topic,
"device": device, "device": device,
"unique_id": f"volvoAAOS2mqtt_{vin}_{entity['id']}", "unique_id": f"volvoAAOS2mqtt_{vin}_{entity['id']}",
"availability_topic": availability_topic "availability_topic": availability_topic
@@ -102,17 +104,39 @@ def send_car_images(vin, data, device):
retain=True retain=True
) )
headers = {"User-Agent": "(Windows NT 10.0; Win64; x64)",
"sec-ch-ua-platform": "\"Windows\"", "sec-fetch-dest": "document", "Accept-Encoding": "gzip, deflate, br, zstd",
"sec-fetch-mode": "navigate", "sec-fetch-site": "none", "sec-fetch-user": "?1", "upgrade-insecure-requests": "1"}
# Post exterior image
if entity["id"] == "exterior_image": if entity["id"] == "exterior_image":
if not os.path.exists("exterior_image.png"):
response = requests.get(data["images"]["exteriorImageUrl"], headers=headers)
if response.status_code == 200:
with open("exterior_image.png", 'wb') as image:
image.write(response.content)
if os.path.exists("exterior_image.png"):
ext_image = open("exterior_image.png", mode="rb").read()
mqtt_client.publish( mqtt_client.publish(
url_topic, image_topic,
data["images"]["exteriorImageUrl"], ext_image,
retain=True retain=True
) )
if entity["id"] == "interior_image": if entity["id"] == "interior_image":
# Post interior Image
if not os.path.exists("interior_image.png"):
response = requests.get(data["images"]["internalImageUrl"], headers=headers)
if response.status_code == 200:
with open("interior_image.png", 'wb') as image:
image.write(response.content)
if os.path.exists("interior_image.png"):
int_image = open("interior_image.png", mode="rb").read()
mqtt_client.publish( mqtt_client.publish(
url_topic, image_topic,
data["images"]["internalImageUrl"], int_image,
retain=True retain=True
) )
+4
View File
@@ -40,9 +40,13 @@ def authorize(renew_tokenfile=False):
if os.path.isfile(token_path) and not renew_tokenfile: if os.path.isfile(token_path) and not renew_tokenfile:
logging.info("Using login from token file") logging.info("Using login from token file")
f = open(token_path) f = open(token_path)
try:
data = json.load(f) data = json.load(f)
refresh_token = data["refresh_token"] refresh_token = data["refresh_token"]
refresh_auth() refresh_auth()
except ValueError:
logging.warning("Detected corrupted token file, restarting auth process")
authorize(True)
else: else:
logging.info("Starting login with OTP") logging.info("Starting login with OTP")
auth_session = requests.session() auth_session = requests.session()