From a324a5ed5ae0e0d95f5695853cd0be2e218c5135 Mon Sep 17 00:00:00 2001 From: SharkEzz Date: Sat, 3 Sep 2022 19:53:17 +0200 Subject: [PATCH 1/4] fix: charging status not available from api even when charging status is available --- psa_car_controller/psacc/application/charging.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/psa_car_controller/psacc/application/charging.py b/psa_car_controller/psacc/application/charging.py index 291ada7..336d2ec 100644 --- a/psa_car_controller/psacc/application/charging.py +++ b/psa_car_controller/psacc/application/charging.py @@ -83,7 +83,7 @@ class Charging: try: last_charge = Database.get_last_charge(car.vin) charge_just_finished = last_charge.stop_at is None - except TypeError: + except (TypeError, AttributeError): logger.debug("battery table is probably empty :", exc_info=True) charge_just_finished = False if charge_just_finished: From bce6e5c3f5b6f17d5b86c067a238be187fec7362 Mon Sep 17 00:00:00 2001 From: SharkEzz Date: Sat, 3 Sep 2022 20:30:25 +0200 Subject: [PATCH 2/4] fix: use charging rate as a indicator for not updated api when charging --- psa_car_controller/psa/RemoteClient.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/psa_car_controller/psa/RemoteClient.py b/psa_car_controller/psa/RemoteClient.py index cb68554..83b0518 100644 --- a/psa_car_controller/psa/RemoteClient.py +++ b/psa_car_controller/psa/RemoteClient.py @@ -92,6 +92,10 @@ class RemoteClient: if charge_info is not None and charge_info.get('remaining_time', 0) != 0: try: car = self.vehicles_list.get_car_by_vin(vin=vin) + if car and car.status.get_energy('Electric').charging.status == INPROGRESS and charge_info.get('rate', 0) != 0: + # if the api report the car as charging and the charging rate is not 0, it means that the api is up to date + return + if car and car.status.get_energy('Electric').charging.status != INPROGRESS: # fix a psa server bug where charge beginning without status api being properly updated logger.warning("charge begin but API isn't updated") From e3399b432717eb6b7742dc4163492cf235f9571a Mon Sep 17 00:00:00 2001 From: SharkEzz Date: Sat, 3 Sep 2022 21:09:32 +0200 Subject: [PATCH 3/4] Fix --- psa_car_controller/psa/RemoteClient.py | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/psa_car_controller/psa/RemoteClient.py b/psa_car_controller/psa/RemoteClient.py index 83b0518..9efdb36 100644 --- a/psa_car_controller/psa/RemoteClient.py +++ b/psa_car_controller/psa/RemoteClient.py @@ -89,13 +89,9 @@ class RemoteClient: logger.exception("on_mqtt_message:") def _fix_not_updated_api(self, charge_info, vin): - if charge_info is not None and charge_info.get('remaining_time', 0) != 0: + if charge_info is not None and charge_info.get('remaining_time', 0) != 0 and charge_info.get('rate', 0) != 0: try: car = self.vehicles_list.get_car_by_vin(vin=vin) - if car and car.status.get_energy('Electric').charging.status == INPROGRESS and charge_info.get('rate', 0) != 0: - # if the api report the car as charging and the charging rate is not 0, it means that the api is up to date - return - if car and car.status.get_energy('Electric').charging.status != INPROGRESS: # fix a psa server bug where charge beginning without status api being properly updated logger.warning("charge begin but API isn't updated") From d288a9acc91cb06ab5f3570c8eb681ad11ddd9dd Mon Sep 17 00:00:00 2001 From: SharkEzz Date: Mon, 5 Sep 2022 21:37:30 +0200 Subject: [PATCH 4/4] Update psa_car_controller/psa/RemoteClient.py Co-authored-by: Florian BEZANNIER <48728684+flobz@users.noreply.github.com> --- psa_car_controller/psa/RemoteClient.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/psa_car_controller/psa/RemoteClient.py b/psa_car_controller/psa/RemoteClient.py index 9efdb36..bb6ab90 100644 --- a/psa_car_controller/psa/RemoteClient.py +++ b/psa_car_controller/psa/RemoteClient.py @@ -89,7 +89,7 @@ class RemoteClient: logger.exception("on_mqtt_message:") def _fix_not_updated_api(self, charge_info, vin): - if charge_info is not None and charge_info.get('remaining_time', 0) != 0 and charge_info.get('rate', 0) != 0: + if charge_info is not None and (charge_info.get('remaining_time', 0) != 0 or charge_info.get('rate', 0) != 0): try: car = self.vehicles_list.get_car_by_vin(vin=vin) if car and car.status.get_energy('Electric').charging.status != INPROGRESS: