From 1545f75732545ec0db2ce7db910f38f289cc0c46 Mon Sep 17 00:00:00 2001 From: LKuemmel Date: Thu, 30 Oct 2025 14:56:30 +0100 Subject: [PATCH 1/7] temporary settings active: only update temporary settings for changed persistent templates --- packages/helpermodules/subdata.py | 34 +++++++++++++++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/packages/helpermodules/subdata.py b/packages/helpermodules/subdata.py index 8a8a34ea58..eb684a53ec 100644 --- a/packages/helpermodules/subdata.py +++ b/packages/helpermodules/subdata.py @@ -315,7 +315,19 @@ def process_vehicle_topic(self, client: mqtt.Client, var: Dict[str, ev.Ev], msg: Pub().pub("openWB/system/subdata_initialized", True) self.event_soc.set() else: + # temporäres ChargeTemplate aktualisieren, wenn dem Fahrzeug ein anderes Ladeprofil zugeordnet + # wird self.set_json_payload_class(var["ev"+index].data, msg) + if re.search("/vehicle/[0-9]+/charge_template$", msg.topic) is not None: + charge_template_id = int(decode_payload(msg.payload)) + if var["ev"+index].data.charge_template != charge_template_id: + ev_id = get_index(msg.topic) + for cp in self.cp_data.values(): + if ((cp.chargepoint.data.set.charging_ev != -1 and + cp.chargepoint.data.set.charging_ev == ev_id) or + cp.chargepoint.data.config.ev == ev_id): + cp.chargepoint.update_charge_template( + self.ev_charge_template_data[f"ct{charge_template_id}"]) except Exception: log.exception("Fehler im subdata-Modul") @@ -337,8 +349,26 @@ def process_vehicle_charge_template_topic(self, var: Dict[str, ChargeTemplate], var.pop("ct"+index) if "ct"+index not in var: var["ct"+index] = ChargeTemplate() - var["ct"+index].data = dataclass_from_dict(ChargeTemplateData, decode_payload(msg.payload)) - + new_charge_template = dataclass_from_dict(ChargeTemplateData, decode_payload(msg.payload)) + template_changed = new_charge_template != var["ct"+index].data + var["ct"+index].data = new_charge_template + if template_changed and self.general_data.data.temporary_charge_templates_active: + # Temporäres ChargeTemplate aktualisieren, wenn persistentes geändert wird + for vehicle in self.ev_data.values(): + if vehicle.data.charge_template == int(index): + for cp in self.cp_data.values(): + if ((cp.chargepoint.data.set.charging_ev != -1 and + cp.chargepoint.data.set.charging_ev == vehicle.num) or + cp.chargepoint.data.config.ev == vehicle.num): + # UI sendet immer alle Topics, auch nicht geänderte. Damit die temporären Topics + # nicht mehrfach gepbulished werden, muss das publishen der temporären Topics 1:1 + # erfolgen. + if re.search("/vehicle/template/charge_template/[0-9]+$", msg.topic) is not None: + if decode_payload(msg.payload) == "": + Pub().pub( + f"openWB/chargepoint/{cp.chargepoint.num}/set/charge_template", "") + else: + cp.chargepoint.update_charge_template(var["ct"+index]) except Exception: log.exception("Fehler im subdata-Modul") From 733ba1be9e3893a327069cbb057c7269625be6ee Mon Sep 17 00:00:00 2001 From: LKuemmel Date: Thu, 30 Oct 2025 15:00:13 +0100 Subject: [PATCH 2/7] fix --- packages/helpermodules/subdata.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/helpermodules/subdata.py b/packages/helpermodules/subdata.py index eb684a53ec..9fb49bdd31 100644 --- a/packages/helpermodules/subdata.py +++ b/packages/helpermodules/subdata.py @@ -357,8 +357,7 @@ def process_vehicle_charge_template_topic(self, var: Dict[str, ChargeTemplate], for vehicle in self.ev_data.values(): if vehicle.data.charge_template == int(index): for cp in self.cp_data.values(): - if ((cp.chargepoint.data.set.charging_ev != -1 and - cp.chargepoint.data.set.charging_ev == vehicle.num) or + if (cp.chargepoint.data.set.charging_ev == vehicle.num or cp.chargepoint.data.config.ev == vehicle.num): # UI sendet immer alle Topics, auch nicht geänderte. Damit die temporären Topics # nicht mehrfach gepbulished werden, muss das publishen der temporären Topics 1:1 From abe16cf2206d47c3cd2b2b331ad2a8f56e2a6698 Mon Sep 17 00:00:00 2001 From: LKuemmel Date: Thu, 30 Oct 2025 15:04:55 +0100 Subject: [PATCH 3/7] update config --- packages/helpermodules/update_config.py | 33 ++++++++++++++----------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/packages/helpermodules/update_config.py b/packages/helpermodules/update_config.py index 017af2dca8..b8e5ffdc11 100644 --- a/packages/helpermodules/update_config.py +++ b/packages/helpermodules/update_config.py @@ -57,7 +57,7 @@ class UpdateConfig: - DATASTORE_VERSION = 98 + DATASTORE_VERSION = 99 valid_topic = [ "^openWB/bat/config/bat_control_permitted$", @@ -2560,19 +2560,6 @@ def upgrade(topic: str, payload) -> Optional[dict]: self._loop_all_received_topics(upgrade) self.__update_topic("openWB/system/datastore_version", 96) - def upgrade_datastore_96(self) -> None: - version = decode_payload(self.all_received_topics.get("openWB/system/version", "2.1.9")).split("-")[0] - major, minor, feature = (int(x) for x in version.split(".")) - if (2, 1, 7) <= (major, minor, feature) <= (2, 1, 8): - self.__update_topic("openWB/general/temporary_charge_templates_active", True) - pub_system_message( - {}, - "Die temporären Ladeeinstellungen können ab jetzt benutzerdefiniert unter Einstellungen -> Allgemein" - " -> Darstellung & Bedienung angewendet werden.", - MessageType.INFO, - ) - self.__update_topic("openWB/system/datastore_version", 97) - def upgrade_datastore_97(self) -> None: def upgrade(topic: str, payload) -> None: if re.search("openWB/system/device/[0-9]+/config$", topic) is not None: @@ -2583,3 +2570,21 @@ def upgrade(topic: str, payload) -> None: Pub().pub(topic, payload) self._loop_all_received_topics(upgrade) self.__update_topic("openWB/system/datastore_version", 98) + + def upgrade_datastore_98(self) -> None: + version, version_suffix = decode_payload( + self.all_received_topics.get("openWB/system/version", "2.1.9")).split("-") + major, minor, feature = (int(x) for x in version.split(".")) + if version_suffix.split(".")[0] == "Patch": + patch = version_suffix.split(".")[1] + else: + patch = 0 + if (major, minor, feature) == (2, 1, 8) and patch <= 3: + self.__update_topic("openWB/general/temporary_charge_templates_active", True) + pub_system_message( + {}, + "Die temporären Ladeeinstellungen können ab jetzt benutzerdefiniert unter Einstellungen -> Allgemein" + " -> Darstellung & Bedienung angewendet werden.", + MessageType.INFO, + ) + self.__update_topic("openWB/system/datastore_version", 99) From c2ca992bf7734ae98dc2de8aa74f28722770c82d Mon Sep 17 00:00:00 2001 From: LKuemmel Date: Thu, 30 Oct 2025 15:20:43 +0100 Subject: [PATCH 4/7] fix --- packages/helpermodules/update_config.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/packages/helpermodules/update_config.py b/packages/helpermodules/update_config.py index b8e5ffdc11..fe4e7bced7 100644 --- a/packages/helpermodules/update_config.py +++ b/packages/helpermodules/update_config.py @@ -2572,10 +2572,15 @@ def upgrade(topic: str, payload) -> None: self.__update_topic("openWB/system/datastore_version", 98) def upgrade_datastore_98(self) -> None: - version, version_suffix = decode_payload( - self.all_received_topics.get("openWB/system/version", "2.1.9")).split("-") + version_str = decode_payload( + self.all_received_topics.get("openWB/system/version", "2.1.9")) + if '-' in version_str: + version, version_suffix = version.split('-', 1) + else: + version = version_str + version_suffix = None major, minor, feature = (int(x) for x in version.split(".")) - if version_suffix.split(".")[0] == "Patch": + if version_suffix is not None and version_suffix.split(".")[0] == "Patch": patch = version_suffix.split(".")[1] else: patch = 0 From 1048257f8d2b72c2fa92ebcf3af3033bced2a60b Mon Sep 17 00:00:00 2001 From: LKuemmel Date: Thu, 30 Oct 2025 15:28:15 +0100 Subject: [PATCH 5/7] fix --- packages/helpermodules/update_config.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/helpermodules/update_config.py b/packages/helpermodules/update_config.py index fe4e7bced7..07c123e616 100644 --- a/packages/helpermodules/update_config.py +++ b/packages/helpermodules/update_config.py @@ -2575,7 +2575,7 @@ def upgrade_datastore_98(self) -> None: version_str = decode_payload( self.all_received_topics.get("openWB/system/version", "2.1.9")) if '-' in version_str: - version, version_suffix = version.split('-', 1) + version, version_suffix = version_str.split('-', 1) else: version = version_str version_suffix = None From f6927073913c2fa1987f7014189e60315b869319 Mon Sep 17 00:00:00 2001 From: LKuemmel Date: Thu, 30 Oct 2025 15:34:15 +0100 Subject: [PATCH 6/7] fix --- packages/helpermodules/update_config.py | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/packages/helpermodules/update_config.py b/packages/helpermodules/update_config.py index 07c123e616..74bd16464b 100644 --- a/packages/helpermodules/update_config.py +++ b/packages/helpermodules/update_config.py @@ -2575,16 +2575,11 @@ def upgrade_datastore_98(self) -> None: version_str = decode_payload( self.all_received_topics.get("openWB/system/version", "2.1.9")) if '-' in version_str: - version, version_suffix = version_str.split('-', 1) + version = version_str.split('-', 1)[0] else: version = version_str - version_suffix = None major, minor, feature = (int(x) for x in version.split(".")) - if version_suffix is not None and version_suffix.split(".")[0] == "Patch": - patch = version_suffix.split(".")[1] - else: - patch = 0 - if (major, minor, feature) == (2, 1, 8) and patch <= 3: + if (major, minor, feature) == (2, 1, 8): self.__update_topic("openWB/general/temporary_charge_templates_active", True) pub_system_message( {}, From 015e464f8e82b35d2a30aa86a7e8322345f8ddbf Mon Sep 17 00:00:00 2001 From: LKuemmel Date: Thu, 30 Oct 2025 15:38:42 +0100 Subject: [PATCH 7/7] clean up --- packages/helpermodules/subdata.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/helpermodules/subdata.py b/packages/helpermodules/subdata.py index 9fb49bdd31..a9999f1728 100644 --- a/packages/helpermodules/subdata.py +++ b/packages/helpermodules/subdata.py @@ -323,8 +323,7 @@ def process_vehicle_topic(self, client: mqtt.Client, var: Dict[str, ev.Ev], msg: if var["ev"+index].data.charge_template != charge_template_id: ev_id = get_index(msg.topic) for cp in self.cp_data.values(): - if ((cp.chargepoint.data.set.charging_ev != -1 and - cp.chargepoint.data.set.charging_ev == ev_id) or + if (cp.chargepoint.data.set.charging_ev == ev_id or cp.chargepoint.data.config.ev == ev_id): cp.chargepoint.update_charge_template( self.ev_charge_template_data[f"ct{charge_template_id}"])