mirror of
https://github.com/Dielee/volvo2mqtt.git
synced 2026-07-22 02:13:01 +02:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d3d511477b | ||
|
|
75db5da324 | ||
|
|
fd4fc9e173 | ||
|
|
75013509f4 |
@@ -21,6 +21,7 @@ If you like my work:<br>
|
||||
[](https://ko-fi.com/U7U8MFXCF)
|
||||
|
||||
## Confirmed working with
|
||||
- EX30 BEV (2024)
|
||||
- XC40 BEV (2024)
|
||||
- XC40 BEV (2023)
|
||||
- XC40 BEV (2022)
|
||||
|
||||
@@ -1,3 +1,19 @@
|
||||
## v1.10.5
|
||||
### 🐛 Bug Fixes:
|
||||
|
||||
- Fix interior and exterior images if more than one car is in use
|
||||
|
||||
## v1.10.4
|
||||
### 🐛 Bug Fixes:
|
||||
|
||||
- re-fix bug if app needs to be re-authenticated with OTP while runtime
|
||||
|
||||
## v1.10.3
|
||||
### 🐛 Bug Fixes:
|
||||
|
||||
- Add more info logging for credential refresh process
|
||||
- Fix bug if app needs to be re-authenticated with OTP while runtime
|
||||
|
||||
## v1.10.2
|
||||
### 🐛 Bug Fixes:
|
||||
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
name: "Volvo2Mqtt"
|
||||
description: "Volvo AAOS MQTT bridge"
|
||||
version: "1.10.2"
|
||||
version: "1.10.5"
|
||||
slug: "volvo2mqtt"
|
||||
init: false
|
||||
url: "https://github.com/Dielee/volvo2mqtt"
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
from config import settings
|
||||
|
||||
VERSION = "v1.10.2"
|
||||
VERSION = "v1.10.5"
|
||||
|
||||
OAUTH_TOKEN_URL = "https://volvoid.eu.volvocars.com/as/token.oauth2"
|
||||
OAUTH_AUTH_URL = "https://volvoid.eu.volvocars.com/as/authorization.oauth2"
|
||||
|
||||
+16
-30
@@ -108,37 +108,23 @@ def send_car_images(vin, data, device):
|
||||
"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 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)
|
||||
# Post Images
|
||||
if not os.path.exists(f'{entity["id"]}_{vin}.png'):
|
||||
data_path = "exteriorImageUrl" if entity["id"] == "exterior_image" else "internalImageUrl"
|
||||
response = requests.get(data["images"][data_path], headers=headers)
|
||||
if response.status_code == 200:
|
||||
with open(f'{entity["id"]}_{vin}.png', 'wb') as image:
|
||||
image.write(response.content)
|
||||
else:
|
||||
logging.warning("Error getting car images: " + str(response.status_code) + " Message: " + response.text)
|
||||
|
||||
if os.path.exists("exterior_image.png"):
|
||||
ext_image = open("exterior_image.png", mode="rb").read()
|
||||
mqtt_client.publish(
|
||||
image_topic,
|
||||
ext_image,
|
||||
retain=True
|
||||
)
|
||||
|
||||
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(
|
||||
image_topic,
|
||||
int_image,
|
||||
retain=True
|
||||
)
|
||||
if os.path.exists(f'{entity["id"]}_{vin}.png'):
|
||||
ext_image = open(f'{entity["id"]}_{vin}.png', mode="rb").read()
|
||||
mqtt_client.publish(
|
||||
image_topic,
|
||||
ext_image,
|
||||
retain=True
|
||||
)
|
||||
|
||||
|
||||
def on_connect(client, userdata, flags, rc):
|
||||
|
||||
@@ -161,6 +161,7 @@ def send_otp(auth_session, data):
|
||||
raise Exception ("No OTP found, exting...")
|
||||
|
||||
auth = auth_session.post(next_url, data=json.dumps(body))
|
||||
mqtt.otp_code = None
|
||||
if auth.status_code == 200:
|
||||
return auth.json()
|
||||
else:
|
||||
@@ -198,6 +199,7 @@ def refresh_auth():
|
||||
token_expires_at = datetime.now(util.TZ) + timedelta(seconds=(data["expires_in"] - 30))
|
||||
refresh_token = data["refresh_token"]
|
||||
else:
|
||||
logging.warning("Refreshing credentials failed!: " + str(auth.status_code) + " Message: " + auth.text)
|
||||
authorize(renew_tokenfile=True)
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user