From 5f59ea0300256576053ed6ae1b98c985004a444e Mon Sep 17 00:00:00 2001 From: LKuemmel Date: Wed, 15 Jul 2026 14:24:36 +0200 Subject: [PATCH 1/2] percentage: reset fault state if no component is configured --- packages/control/bat_all.py | 6 ++++++ .../measurement_logging/process_log.py | 13 +++++++------ 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/packages/control/bat_all.py b/packages/control/bat_all.py index 76713eab9b..423f15ca43 100644 --- a/packages/control/bat_all.py +++ b/packages/control/bat_all.py @@ -174,6 +174,12 @@ def calc_power_for_all_components(self): self.data.get.soc = 0 else: self.data.config.configured = False + # prevent stale values when no inverter modules are configured + self.data.get.power = 0 + self.data.get.exported = 0 + self.data.get.fault_state = 0 + self.data.get.fault_str = NO_ERROR + self.data.get.daily_exported = 0 except Exception: log.exception("Fehler im Bat-Modul") diff --git a/packages/helpermodules/measurement_logging/process_log.py b/packages/helpermodules/measurement_logging/process_log.py index bdab771624..43a8c87e53 100644 --- a/packages/helpermodules/measurement_logging/process_log.py +++ b/packages/helpermodules/measurement_logging/process_log.py @@ -418,17 +418,18 @@ def get_grid_counter(entry) -> Dict: try: message = "" grid_counter = get_grid_counter(entry) - if (safe_get_nested(entry, "bat", "all", "fault_state") == 2 or - safe_get_nested(entry, "cp", "all", "fault_state") == 2 or - safe_get_nested(entry, "pv", "all", "fault_state") == 2 or + # Wenn neben dem "all" Eintrag kein weiterer Eintrag existiert, dann gibt es keine Komponenten. + if ((safe_get_nested(entry, "bat", "all", "fault_state") == 2 and len(entry.get("bat", {})) > 2) or + (safe_get_nested(entry, "cp", "all", "fault_state") == 2 and len(entry.get("cp", {})) > 2) or + (safe_get_nested(entry, "pv", "all", "fault_state") == 2 and len(entry.get("pv", {})) > 2) or grid_counter.get("fault_state", None) == 2): entry["energy_source"] = {"grid": 1, "pv": 0, "bat": 0, "cp": 0} - if safe_get_nested(entry, "bat", "all", "fault_state") == 2: + if safe_get_nested(entry, "bat", "all", "fault_state") == 2 and len(entry.get("bat", {})) > 2: message += EOOR_STATE_MSG.format("mind. einer der Speicher") - if safe_get_nested(entry, "cp", "all", "fault_state") == 2: + if safe_get_nested(entry, "cp", "all", "fault_state") == 2 and len(entry.get("cp", {})) > 2: message += EOOR_STATE_MSG.format("mind. einer der Ladepunkte") - if safe_get_nested(entry, "pv", "all", "fault_state") == 2: + if safe_get_nested(entry, "pv", "all", "fault_state") == 2 and len(entry.get("pv", {})) > 2: message += EOOR_STATE_MSG.format("mind. einer der Wechselrichter") if grid_counter.get("fault_state", None) == 2: message += EOOR_STATE_MSG.format("der Zähler für das Netz") From ab7927251e281e5a8488469547feac63354e9687 Mon Sep 17 00:00:00 2001 From: LKuemmel Date: Wed, 15 Jul 2026 14:30:34 +0200 Subject: [PATCH 2/2] review --- packages/control/bat_all.py | 4 ++++ .../helpermodules/measurement_logging/process_log.py | 12 ++++++------ 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/packages/control/bat_all.py b/packages/control/bat_all.py index 423f15ca43..8b327d60c1 100644 --- a/packages/control/bat_all.py +++ b/packages/control/bat_all.py @@ -180,6 +180,10 @@ def calc_power_for_all_components(self): self.data.get.fault_state = 0 self.data.get.fault_str = NO_ERROR self.data.get.daily_exported = 0 + self.data.get.imported = 0 + self.data.get.daily_imported = 0 + self.data.get.soc = 0 + self.data.get.power_limit_controllable = False except Exception: log.exception("Fehler im Bat-Modul") diff --git a/packages/helpermodules/measurement_logging/process_log.py b/packages/helpermodules/measurement_logging/process_log.py index 43a8c87e53..24eab8feff 100644 --- a/packages/helpermodules/measurement_logging/process_log.py +++ b/packages/helpermodules/measurement_logging/process_log.py @@ -419,17 +419,17 @@ def get_grid_counter(entry) -> Dict: message = "" grid_counter = get_grid_counter(entry) # Wenn neben dem "all" Eintrag kein weiterer Eintrag existiert, dann gibt es keine Komponenten. - if ((safe_get_nested(entry, "bat", "all", "fault_state") == 2 and len(entry.get("bat", {})) > 2) or - (safe_get_nested(entry, "cp", "all", "fault_state") == 2 and len(entry.get("cp", {})) > 2) or - (safe_get_nested(entry, "pv", "all", "fault_state") == 2 and len(entry.get("pv", {})) > 2) or + if ((safe_get_nested(entry, "bat", "all", "fault_state") == 2 and len(entry.get("bat", {})) > 1) or + (safe_get_nested(entry, "cp", "all", "fault_state") == 2 and len(entry.get("cp", {})) > 1) or + (safe_get_nested(entry, "pv", "all", "fault_state") == 2 and len(entry.get("pv", {})) > 1) or grid_counter.get("fault_state", None) == 2): entry["energy_source"] = {"grid": 1, "pv": 0, "bat": 0, "cp": 0} - if safe_get_nested(entry, "bat", "all", "fault_state") == 2 and len(entry.get("bat", {})) > 2: + if safe_get_nested(entry, "bat", "all", "fault_state") == 2 and len(entry.get("bat", {})) > 1: message += EOOR_STATE_MSG.format("mind. einer der Speicher") - if safe_get_nested(entry, "cp", "all", "fault_state") == 2 and len(entry.get("cp", {})) > 2: + if safe_get_nested(entry, "cp", "all", "fault_state") == 2 and len(entry.get("cp", {})) > 1: message += EOOR_STATE_MSG.format("mind. einer der Ladepunkte") - if safe_get_nested(entry, "pv", "all", "fault_state") == 2 and len(entry.get("pv", {})) > 2: + if safe_get_nested(entry, "pv", "all", "fault_state") == 2 and len(entry.get("pv", {})) > 1: message += EOOR_STATE_MSG.format("mind. einer der Wechselrichter") if grid_counter.get("fault_state", None) == 2: message += EOOR_STATE_MSG.format("der Zähler für das Netz")