From b424fdfcc17d0194d993fc91178c027328e82b2c Mon Sep 17 00:00:00 2001 From: LKuemmel Date: Thu, 21 Aug 2025 15:47:01 +0200 Subject: [PATCH 1/3] fix corrupt plans --- packages/helpermodules/command.py | 23 +++---- packages/helpermodules/update_config.py | 92 ++++++++++++++++++++++++- 2 files changed, 100 insertions(+), 15 deletions(-) diff --git a/packages/helpermodules/command.py b/packages/helpermodules/command.py index d75438229f..1eadb9705a 100644 --- a/packages/helpermodules/command.py +++ b/packages/helpermodules/command.py @@ -81,20 +81,15 @@ def _get_max_ids(self) -> None: max_id = default for topic, payload in received_topics.items(): if re.search(topic_str, topic) is not None: - try: - if id_topic == "autolock_plan": - for plan in payload["autolock"]["plans"]: - max_id = max(plan["id"], max_id) - elif id_topic == "charge_template_scheduled_plan": - for plan in payload["chargemode"]["scheduled_charging"]["plans"]: - max_id = max(plan["id"], max_id) - elif id_topic == "charge_template_time_charging_plan": - for plan in payload["time_charging"]["plans"]: - max_id = max(plan["id"], max_id) - except KeyError: - # überspringe Profile, die keinen Eintrag für Pläne haben. - # Da gab es einen Bug beim Kopieren. - pass + if id_topic == "autolock_plan": + for plan in payload["autolock"]["plans"]: + max_id = max(plan["id"], max_id) + elif id_topic == "charge_template_scheduled_plan": + for plan in payload["chargemode"]["scheduled_charging"]["plans"]: + max_id = max(plan["id"], max_id) + elif id_topic == "charge_template_time_charging_plan": + for plan in payload["time_charging"]["plans"]: + max_id = max(plan["id"], max_id) setattr(self, f'max_id_{id_topic}', max_id) Pub().pub("openWB/set/command/max_id/"+id_topic, max_id) for id_topic, topic_str, default in self.MAX_IDS["topic"]: diff --git a/packages/helpermodules/update_config.py b/packages/helpermodules/update_config.py index b51e6dbf9c..b9b92e4e70 100644 --- a/packages/helpermodules/update_config.py +++ b/packages/helpermodules/update_config.py @@ -57,7 +57,7 @@ class UpdateConfig: - DATASTORE_VERSION = 93 + DATASTORE_VERSION = 94 valid_topic = [ "^openWB/bat/config/bat_control_permitted$", @@ -2425,3 +2425,93 @@ def upgrade(topic: str, payload) -> Optional[dict]: return {topic: payload} self._loop_all_received_topics(upgrade) self.__update_topic("openWB/system/datastore_version", 93) + + def upgrade_datastore_93(self) -> None: + # Pläne die keinen plans Key haben, id=None + max_id = -1 + none_id = False + for topic, payload in self.all_received_topics.items(): + if re.search("openWB/vehicle/template/charge_template/[0-9]+$", topic) is not None: + payload = decode_payload(payload) + try: + for plan in payload["chargemode"]["scheduled_charging"]["plans"]: + try: + max_id = max(plan["id"], max_id) + except TypeError: + if plan["id"] == None: + none_id = True + else: + raise TypeError(f"Plan {plan} hat keinen Key 'id' und ist kein NoneType.") + except KeyError: + payload["chargemode"]["scheduled_charging"].update({"plans": []}) + self.all_received_topics[topic] = json.dumps(payload, ensure_ascii=False).encode("utf-8") + Pub().pub(f"openWB/set/vehicle/template/charge_template/{get_index(topic)}", payload) + if none_id: + for topic, payload in self.all_received_topics.items(): + if re.search("openWB/vehicle/template/charge_template/[0-9]+$", topic) is not None: + payload = decode_payload(payload) + for plan in payload["chargemode"]["scheduled_charging"]["plans"]: + if plan["id"] == None: + plan["id"] = max_id + 1 + max_id += 1 + self.all_received_topics[topic] = json.dumps(payload, ensure_ascii=False).encode("utf-8") + Pub().pub(f"openWB/set/vehicle/template/charge_template/{get_index(topic)}", payload) + + max_id = -1 + none_id = False + for topic, payload in self.all_received_topics.items(): + if re.search("openWB/vehicle/template/charge_template/[0-9]+$", topic) is not None: + payload = decode_payload(payload) + try: + for plan in payload["time_charging"]["plans"]: + try: + max_id = max(plan["id"], max_id) + except TypeError: + if plan["id"] == None: + none_id = True + else: + raise TypeError(f"Plan {plan} hat keinen Key 'id' und ist kein NoneType.") + except KeyError: + payload["time_charging"].update({"plans": []}) + self.all_received_topics[topic] = json.dumps(payload, ensure_ascii=False).encode("utf-8") + Pub().pub(f"openWB/set/vehicle/template/charge_template/{get_index(topic)}", payload) + if none_id: + for topic, payload in self.all_received_topics.items(): + if re.search("openWB/vehicle/template/charge_template/[0-9]+$", topic) is not None: + payload = decode_payload(payload) + for plan in payload["time_charging"]["plans"]: + if plan["id"] == None: + plan["id"] = max_id + 1 + max_id += 1 + self.all_received_topics[topic] = json.dumps(payload, ensure_ascii=False).encode("utf-8") + Pub().pub(f"openWB/set/vehicle/template/charge_template/{get_index(topic)}", payload) + + max_id = -1 + none_id = False + for topic, payload in self.all_received_topics.items(): + if re.search("openWB/chargepoint/template/[0-9]+$", topic) is not None: + payload = decode_payload(payload) + try: + for plan in payload["autolock"]["plans"]: + try: + max_id = max(plan["id"], max_id) + except TypeError: + if plan["id"] == None: + none_id = True + else: + raise TypeError(f"Plan {plan} hat keinen Key 'id' und ist kein NoneType.") + except KeyError: + payload["autolock"].update({"plans": []}) + self.all_received_topics[topic] = json.dumps(payload, ensure_ascii=False).encode("utf-8") + Pub().pub(f"openWB/set/chargepoint/template/{get_index(topic)}", payload) + if none_id: + for topic, payload in self.all_received_topics.items(): + if re.search("openWB/chargepoint/template/[0-9]+$", topic) is not None: + payload = decode_payload(payload) + for plan in payload["autolock"]["plans"]: + if plan["id"] == None: + plan["id"] = max_id + 1 + max_id += 1 + self.all_received_topics[topic] = json.dumps(payload, ensure_ascii=False).encode("utf-8") + Pub().pub(f"openWB/set/chargepoint/template/{get_index(topic)}", payload) + # self.__update_topic("openWB/system/datastore_version", 94) From 20eb1e8002322005f3d77beb2192cc171b5f1df8 Mon Sep 17 00:00:00 2001 From: LKuemmel Date: Thu, 21 Aug 2025 15:47:57 +0200 Subject: [PATCH 2/3] uncomment --- 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 b9b92e4e70..0be543828b 100644 --- a/packages/helpermodules/update_config.py +++ b/packages/helpermodules/update_config.py @@ -2514,4 +2514,4 @@ def upgrade_datastore_93(self) -> None: max_id += 1 self.all_received_topics[topic] = json.dumps(payload, ensure_ascii=False).encode("utf-8") Pub().pub(f"openWB/set/chargepoint/template/{get_index(topic)}", payload) - # self.__update_topic("openWB/system/datastore_version", 94) + self.__update_topic("openWB/system/datastore_version", 94) From a844f35b6da8281893008885d16582928a5745a6 Mon Sep 17 00:00:00 2001 From: LKuemmel Date: Thu, 21 Aug 2025 15:51:42 +0200 Subject: [PATCH 3/3] flake8 --- packages/helpermodules/update_config.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/helpermodules/update_config.py b/packages/helpermodules/update_config.py index 0be543828b..f5ce2c377b 100644 --- a/packages/helpermodules/update_config.py +++ b/packages/helpermodules/update_config.py @@ -2438,7 +2438,7 @@ def upgrade_datastore_93(self) -> None: try: max_id = max(plan["id"], max_id) except TypeError: - if plan["id"] == None: + if plan["id"] is None: none_id = True else: raise TypeError(f"Plan {plan} hat keinen Key 'id' und ist kein NoneType.") @@ -2451,7 +2451,7 @@ def upgrade_datastore_93(self) -> None: if re.search("openWB/vehicle/template/charge_template/[0-9]+$", topic) is not None: payload = decode_payload(payload) for plan in payload["chargemode"]["scheduled_charging"]["plans"]: - if plan["id"] == None: + if plan["id"] is None: plan["id"] = max_id + 1 max_id += 1 self.all_received_topics[topic] = json.dumps(payload, ensure_ascii=False).encode("utf-8") @@ -2467,7 +2467,7 @@ def upgrade_datastore_93(self) -> None: try: max_id = max(plan["id"], max_id) except TypeError: - if plan["id"] == None: + if plan["id"] is None: none_id = True else: raise TypeError(f"Plan {plan} hat keinen Key 'id' und ist kein NoneType.") @@ -2480,7 +2480,7 @@ def upgrade_datastore_93(self) -> None: if re.search("openWB/vehicle/template/charge_template/[0-9]+$", topic) is not None: payload = decode_payload(payload) for plan in payload["time_charging"]["plans"]: - if plan["id"] == None: + if plan["id"] is None: plan["id"] = max_id + 1 max_id += 1 self.all_received_topics[topic] = json.dumps(payload, ensure_ascii=False).encode("utf-8") @@ -2496,7 +2496,7 @@ def upgrade_datastore_93(self) -> None: try: max_id = max(plan["id"], max_id) except TypeError: - if plan["id"] == None: + if plan["id"] is None: none_id = True else: raise TypeError(f"Plan {plan} hat keinen Key 'id' und ist kein NoneType.") @@ -2509,7 +2509,7 @@ def upgrade_datastore_93(self) -> None: if re.search("openWB/chargepoint/template/[0-9]+$", topic) is not None: payload = decode_payload(payload) for plan in payload["autolock"]["plans"]: - if plan["id"] == None: + if plan["id"] is None: plan["id"] = max_id + 1 max_id += 1 self.all_received_topics[topic] = json.dumps(payload, ensure_ascii=False).encode("utf-8")