From 04fab77a205acef8facf4079d44d160615720473 Mon Sep 17 00:00:00 2001 From: Florian Bezannier Date: Fri, 2 Jul 2021 16:13:45 +0200 Subject: [PATCH 1/4] handle Bad response from ABRP API --- web/abrp.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/web/abrp.py b/web/abrp.py index db63cc1..61d926b 100644 --- a/web/abrp.py +++ b/web/abrp.py @@ -1,5 +1,6 @@ import json from datetime import datetime +from json import JSONDecodeError import requests @@ -40,7 +41,11 @@ class Abrp: response = requests.request("POST", self.url, params=params, proxies=self.proxies, verify=self.proxies is None) logger.debug(response.text) - return response.json()["status"] == "ok" + try: + return response.json()["status"] == "ok" + except (JSONDecodeError, KeyError): + logger.error("Bad response from ABRP API: %s", response.text) + return False except (AttributeError, IndexError, ValueError): logger.exception("abrp:") return False From de34d80bbedbfef7b0a8cc651f1aaa0efb7865a5 Mon Sep 17 00:00:00 2001 From: Florian Bezannier Date: Sun, 4 Jul 2021 22:42:01 +0200 Subject: [PATCH 2/4] fix wakeup --- my_psacc.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/my_psacc.py b/my_psacc.py index 669defa..7c56111 100644 --- a/my_psacc.py +++ b/my_psacc.py @@ -395,6 +395,7 @@ class MyPSACC: logger.info("ask wakeup to %s", vin) msg = self.mqtt_request(vin, {"action": "state"}) logger.info(msg) + self.mqtt_client.publish(MQTT_REQ_TOPIC + self.__get_mqtt_customer_id() + "/VehCharge/state", msg) return True def lock_door(self, vin, lock: bool): @@ -437,7 +438,7 @@ class MyPSACC: f.write(config_str) self._config_hash = new_hash logger.info("save config change") -# disconnect + @staticmethod def load_config(name="config.json"): with open(name, "r") as f: From c4486f7ae75ae5a7429e3fdcae696a7ec89663aa Mon Sep 17 00:00:00 2001 From: Florian Bezannier Date: Mon, 5 Jul 2021 14:05:04 +0200 Subject: [PATCH 3/4] handle none timed_odometer --- libs/car_status.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/libs/car_status.py b/libs/car_status.py index 8d61c94..cd91316 100644 --- a/libs/car_status.py +++ b/libs/car_status.py @@ -1,5 +1,6 @@ from mylogger import logger -from psa_connectedcar import Position, Geometry, PositionProperties, Kinetic, Energy, EnergyCharging, Status +from psa_connectedcar import Position, Geometry, PositionProperties, Kinetic, Energy, EnergyCharging, Status, \ + VehicleOdometer # pylint: disable=too-many-arguments @@ -27,6 +28,9 @@ class CarStatus(Status): if len(self._energy) == 2 and self._energy[0].type != 'Electric': self._energy = self._energy[::-1] + if self.timed_odometer is None: + self.timed_odometer = VehicleOdometer() + def is_moving(self): try: return self.kinetic.moving From 883501be44537ae8b5f60414346f3926dd046077 Mon Sep 17 00:00:00 2001 From: Florian Bezannier Date: Mon, 5 Jul 2021 14:07:10 +0200 Subject: [PATCH 4/4] catch all error in __refresh_vehicle_info --- my_psacc.py | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/my_psacc.py b/my_psacc.py index 7c56111..be75157 100644 --- a/my_psacc.py +++ b/my_psacc.py @@ -163,12 +163,15 @@ class MyPSACC: def __refresh_vehicle_info(self): if self.info_refresh_rate is not None: while True: - sleep(self.info_refresh_rate) - logger.debug("refresh_vehicle_info") - for car in self.vehicles_list: - self.get_vehicle_info(car.vin) - for callback in self.info_callback: - callback() + try: + sleep(self.info_refresh_rate) + logger.debug("refresh_vehicle_info") + for car in self.vehicles_list: + self.get_vehicle_info(car.vin) + for callback in self.info_callback: + callback() + except: # pylint: disable=bare-except + logger.exception("refresh_vehicle_info: ") def start_refresh_thread(self): if self.refresh_thread is None: @@ -270,7 +273,7 @@ class MyPSACC: def __get_mqtt_customer_id(self): brand_code = self.customer_id[:2] - return MQTT_BRANDCODE[brand_code]+self.customer_id[2:] + return MQTT_BRANDCODE[brand_code] + self.customer_id[2:] # pylint: disable=unused-argument def __on_mqtt_connect(self, client, userdata, result_code, _):