diff --git a/src/config.yaml b/src/config.yaml index 93303d2..a842b83 100644 --- a/src/config.yaml +++ b/src/config.yaml @@ -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" diff --git a/src/const.py b/src/const.py index 64c66e5..79cc9f8 100644 --- a/src/const.py +++ b/src/const.py @@ -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" diff --git a/src/main.py b/src/main.py index 6330bc4..d3a6524 100644 --- a/src/main.py +++ b/src/main.py @@ -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() diff --git a/src/util.py b/src/util.py index ba7cc6d..32952da 100644 --- a/src/util.py +++ b/src/util.py @@ -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!") diff --git a/src/volvo.py b/src/volvo.py index e2b6c0f..92aae11 100644 --- a/src/volvo.py +++ b/src/volvo.py @@ -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: