Optimize vcc api key change

This commit is contained in:
Linus Dietz
2023-08-18 09:40:48 +02:00
parent 3482a5f893
commit 7c87c71ac8
5 changed files with 38 additions and 31 deletions
+1 -1
View File
@@ -1,6 +1,6 @@
name: "Volvo2Mqtt"
description: "Volvo AAOS MQTT bridge"
version: "1.8.1"
version: "1.8.2"
slug: "volvo2mqtt"
init: false
url: "https://github.com/Dielee/volvo2mqtt"
+1 -1
View File
@@ -1,6 +1,6 @@
from config import settings
VERSION = "v1.8.1"
VERSION = "v1.8.2"
OAUTH_URL = "https://volvoid.eu.volvocars.com/as/token.oauth2"
VEHICLES_URL = "https://api.volvocars.com/connected-vehicle/v1/vehicles"
+2 -2
View File
@@ -6,11 +6,11 @@ from util import set_tz, setup_logging, set_mqtt_settings, validate_settings
if __name__ == '__main__':
setup_logging()
logging.info("Starting volvo2mqtt version " + VERSION)
validate_settings()
set_tz()
set_mqtt_settings()
setup_logging()
logging.info("Starting volvo2mqtt version " + VERSION)
connect()
authorize()
update_loop()
+8 -7
View File
@@ -139,11 +139,12 @@ def set_mqtt_settings():
def validate_settings():
setting_keys = settings.volvoData["vccapikey"]
if isinstance(setting_keys, list):
if len(setting_keys) > 3:
raise Exception("Settings invalid! Maximum allowed vccapikeys are three!")
if not os.environ.get("DEV_MODE"):
setting_keys = settings.volvoData["vccapikey"]
if isinstance(setting_keys, list):
if len(setting_keys) > 3:
raise Exception("Settings invalid! Maximum allowed vccapikeys are three!")
update_interval = settings["updateInterval"]
if update_interval < 60:
raise Exception("Settings invalid! Minimum allowed update interval is 60 seconds!")
update_interval = settings["updateInterval"]
if update_interval < 60:
raise Exception("Settings invalid! Minimum allowed update interval is 60 seconds!")
+26 -20
View File
@@ -119,28 +119,32 @@ def get_vehicles():
def get_vcc_api_keys(used_key=None):
setting_keys = settings.volvoData["vccapikey"]
if isinstance(setting_keys, str):
set_key_state(setting_keys)
elif isinstance(setting_keys, list):
for key in setting_keys:
set_key_state(key)
working_keys = None
logging.debug(str(vcc_api_keys))
working_keys = [key["key"] for key in vcc_api_keys if not key.get("extended") and key.get('key') != used_key]
if len(working_keys) < 1:
logging.warning("No working VCCAPIKEY found, waiting 10 minutes. Then trying again!")
mqtt.send_offline()
time.sleep(600)
get_vcc_api_keys(used_key=None)
return None
while not working_keys:
setting_keys = settings.volvoData["vccapikey"]
if isinstance(setting_keys, str):
set_key_state(setting_keys)
elif isinstance(setting_keys, list):
for key in setting_keys:
set_key_state(key)
mqtt.send_heartbeat()
session.headers.update({"vcc-api-key": working_keys[0]})
logging.info("Using VCCAPIKEY: " + working_keys[0])
for key_dict in vcc_api_keys:
if key_dict["key"] == working_keys[0]:
key_dict["in_use"] = True
logging.debug(str(vcc_api_keys))
working_keys = [key["key"] for key in vcc_api_keys if not key.get("extended") and key.get('key') != used_key]
if len(working_keys) < 1:
used_key = None
logging.warning("No working VCCAPIKEY found, waiting 10 minutes. Then trying again!")
mqtt.send_offline()
time.sleep(600)
else:
mqtt.send_heartbeat()
session.headers.update({"vcc-api-key": working_keys[0]})
logging.info("Using VCCAPIKEY: " + working_keys[0])
for key_dict in vcc_api_keys:
if key_dict["key"] == working_keys[0]:
key_dict["in_use"] = True
logging.debug(str(vcc_api_keys))
def set_key_state(key):
@@ -160,6 +164,8 @@ def set_key_state(key):
def check_vcc_api_key(test_key, extended_until=None):
if extended_until:
if extended_until >= datetime.now():
logging.warning("VCCAPIKEY " + test_key + " is extended and will be reusable at: "
+ format_datetime(extended_until, format="medium", locale=settings["babelLocale"]))
return True, extended_until
if datetime.now(util.TZ) >= token_expires_at: