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 diff --git a/my_psacc.py b/my_psacc.py index 669defa..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, _): @@ -395,6 +398,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 +441,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: 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