From b42a70d8a543854ff14ab8db9da738be1570c3c4 Mon Sep 17 00:00:00 2001 From: rleidner Date: Wed, 25 Mar 2026 16:40:49 +0100 Subject: [PATCH 1/3] handle empty carstate, fix mqtt module --- .../modules/common/configurable_vehicle.py | 43 ++++++++++--------- packages/modules/vehicles/mqtt/soc.py | 10 ++--- 2 files changed, 28 insertions(+), 25 deletions(-) diff --git a/packages/modules/common/configurable_vehicle.py b/packages/modules/common/configurable_vehicle.py index 1456f9cb36..1e40fa75f8 100644 --- a/packages/modules/common/configurable_vehicle.py +++ b/packages/modules/common/configurable_vehicle.py @@ -129,26 +129,29 @@ def _get_carstate_by_source(self, vehicle_update_data: VehicleUpdateData, source if source == SocSource.API: try: _carState = self.__component_updater(vehicle_update_data) - _odometer = _carState.odometer - _now = int(time.time()) - _diff = 0 - if _carState.soc_timestamp: - _diff = int(_now - _carState.soc_timestamp) - if _diff > self.general_config.request_interval_charging and\ - vehicle_update_data.plug_state and\ - vehicle_update_data.last_soc and\ - vehicle_update_data.last_soc_timestamp >= vehicle_update_data.plug_time and\ - vehicle_update_data.imported -\ - (self.calculated_soc_state.last_imported or vehicle_update_data.imported) > 0: - _age = int(self.general_config.request_interval_charging / 60) - _txt1 = "Ladestand und Reichweite sind berechnet, da der von der Online-Abfrage " - _txt1 = _txt1 + f"gelieferte Zeitstempel mehr als {_age} min alt ist." - self.fault_state.warning(f"{_txt1}") - self.fault_state.store_error() - _carState = calc_vehicle_data.calc_vehicle_data(vehicle_update_data, - self.calculated_soc_state.last_imported or - vehicle_update_data.imported) - _carState.odometer = _odometer + if type(_carState) is CarState: + _odometer = _carState.odometer + _now = int(time.time()) + _diff = 0 + if _carState.soc_timestamp: + _diff = int(_now - _carState.soc_timestamp) + if _diff > self.general_config.request_interval_charging and\ + vehicle_update_data.plug_state and\ + vehicle_update_data.last_soc and\ + vehicle_update_data.last_soc_timestamp >= vehicle_update_data.plug_time and\ + vehicle_update_data.imported -\ + (self.calculated_soc_state.last_imported or vehicle_update_data.imported) > 0: + _age = int(self.general_config.request_interval_charging / 60) + _txt1 = "Ladestand und Reichweite sind berechnet, da der von der Online-Abfrage " + _txt1 = _txt1 + f"gelieferte Zeitstempel mehr als {_age} min alt ist." + self.fault_state.warning(f"{_txt1}") + self.fault_state.store_error() + _carState = calc_vehicle_data.calc_vehicle_data(vehicle_update_data, + self.calculated_soc_state.last_imported or + vehicle_update_data.imported) + _carState.odometer = _odometer + else: + raise Exception("Für das Fahrzeug sind keine Daten verfügbar.") except Exception as e: if vehicle_update_data.plug_state and\ vehicle_update_data.last_soc and\ diff --git a/packages/modules/vehicles/mqtt/soc.py b/packages/modules/vehicles/mqtt/soc.py index fbfd56bb96..c4ee0e541a 100644 --- a/packages/modules/vehicles/mqtt/soc.py +++ b/packages/modules/vehicles/mqtt/soc.py @@ -32,11 +32,11 @@ def on_message(client, userdata, message): soc_timestamp=received_topics.get(f"{topic_prefix}soc_timestamp"), odometer=received_topics.get(f"{topic_prefix}odometer")) else: - configurable_vehicle.fault_state.warning( - f"Keine MQTT-Daten für Fahrzeug {vehicle_config.name} empfangen oder es werden " - "veraltete, abwärtskompatible Topics verwendet. Bitte die Doku in den " - "Einstellungen beachten.") - return None + _t = f"Keine MQTT-Daten für Fahrzeug {vehicle_config.name} empfangen oder es werden " + _t = _t + "veraltete, abwärtskompatible Topics verwendet. Bitte die Doku in den " + _t = _t + "Einstellungen beachten" + log.error(f"mqtt-nothing received: {_t}") + raise Exception(_t) configurable_vehicle = ConfigurableVehicle(vehicle_config=vehicle_config, component_updater=updater, vehicle=vehicle, From c61bc87679ba19f7723786f29fb0ba3e760f14bb Mon Sep 17 00:00:00 2001 From: rleidner Date: Fri, 27 Mar 2026 16:13:34 +0100 Subject: [PATCH 2/3] rollback changes in mqtt soc.py --- packages/modules/vehicles/mqtt/soc.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/modules/vehicles/mqtt/soc.py b/packages/modules/vehicles/mqtt/soc.py index c4ee0e541a..fbfd56bb96 100644 --- a/packages/modules/vehicles/mqtt/soc.py +++ b/packages/modules/vehicles/mqtt/soc.py @@ -32,11 +32,11 @@ def on_message(client, userdata, message): soc_timestamp=received_topics.get(f"{topic_prefix}soc_timestamp"), odometer=received_topics.get(f"{topic_prefix}odometer")) else: - _t = f"Keine MQTT-Daten für Fahrzeug {vehicle_config.name} empfangen oder es werden " - _t = _t + "veraltete, abwärtskompatible Topics verwendet. Bitte die Doku in den " - _t = _t + "Einstellungen beachten" - log.error(f"mqtt-nothing received: {_t}") - raise Exception(_t) + configurable_vehicle.fault_state.warning( + f"Keine MQTT-Daten für Fahrzeug {vehicle_config.name} empfangen oder es werden " + "veraltete, abwärtskompatible Topics verwendet. Bitte die Doku in den " + "Einstellungen beachten.") + return None configurable_vehicle = ConfigurableVehicle(vehicle_config=vehicle_config, component_updater=updater, vehicle=vehicle, From 61ba1ede8621371f24c3932ead54e12935809b62 Mon Sep 17 00:00:00 2001 From: rleidner Date: Fri, 27 Mar 2026 16:18:48 +0100 Subject: [PATCH 3/3] remove exception --- packages/modules/common/configurable_vehicle.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/modules/common/configurable_vehicle.py b/packages/modules/common/configurable_vehicle.py index 1e40fa75f8..d4bf8336f9 100644 --- a/packages/modules/common/configurable_vehicle.py +++ b/packages/modules/common/configurable_vehicle.py @@ -150,8 +150,6 @@ def _get_carstate_by_source(self, vehicle_update_data: VehicleUpdateData, source self.calculated_soc_state.last_imported or vehicle_update_data.imported) _carState.odometer = _odometer - else: - raise Exception("Für das Fahrzeug sind keine Daten verfügbar.") except Exception as e: if vehicle_update_data.plug_state and\ vehicle_update_data.last_soc and\