forked from peter/volvo2mqtt
Optimize vcc api key change
This commit is contained in:
+1
-1
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user