From 82b41152f6902e761c6461782722539c9f82057f Mon Sep 17 00:00:00 2001 From: LKuemmel Date: Fri, 23 Oct 2026 12:42:28 +0200 Subject: [PATCH 1/2] remove obsolet prio settings --- packages/control/chargepoint/chargepoint_data.py | 1 - packages/control/ev/charge_template.py | 1 - packages/control/ev/ev.py | 2 +- packages/helpermodules/setdata.py | 2 -- packages/helpermodules/update_config_test.py | 13 +++++++------ 5 files changed, 8 insertions(+), 11 deletions(-) diff --git a/packages/control/chargepoint/chargepoint_data.py b/packages/control/chargepoint/chargepoint_data.py index 2b17b6e853..84c8f881b3 100644 --- a/packages/control/chargepoint/chargepoint_data.py +++ b/packages/control/chargepoint/chargepoint_data.py @@ -43,7 +43,6 @@ class ConnectedConfig: chargemode: Chargemode = Chargemode.STOP current_plan: Optional[int] = 0 ev_template: int = 0 - priority: bool = False time_charging_in_use: bool = False diff --git a/packages/control/ev/charge_template.py b/packages/control/ev/charge_template.py index db8bd9ba3e..9091a3b756 100644 --- a/packages/control/ev/charge_template.py +++ b/packages/control/ev/charge_template.py @@ -111,7 +111,6 @@ def chargemode_factory() -> Chargemode: class ChargeTemplateData: id: int = 0 name: str = "Lade-Profil" - prio: bool = False # OBSOLET seit 2.3.0 load_default: bool = False time_charging: TimeCharging = field(default_factory=time_charging_factory) chargemode: Chargemode = field(default_factory=chargemode_factory) diff --git a/packages/control/ev/ev.py b/packages/control/ev/ev.py index 7e24057424..584989f75f 100644 --- a/packages/control/ev/ev.py +++ b/packages/control/ev/ev.py @@ -1,7 +1,7 @@ """ EV-Logik ermittelt, den Ladestrom, den das EV gerne zur Verfügung hätte. -In den control Parametern wird sich der Lademodus, Submodus, Priorität, Phasen und Stromstärke gemerkt, +In den control Parametern werden Lademodus, Submodus, Phasen und Stromstärke gemerkt, mit denen das EV aktuell in der Regelung berücksichtigt wird. Bei der Ermittlung der benötigten Strom- stärke wird auch geprüft, ob sich an diesen Parametern etwas geändert hat. Falls ja, muss das EV in der Regelung neu priorisiert werden und eine neue Zuteilung des Stroms erhalten. diff --git a/packages/helpermodules/setdata.py b/packages/helpermodules/setdata.py index c0789e6887..803dd101f5 100644 --- a/packages/helpermodules/setdata.py +++ b/packages/helpermodules/setdata.py @@ -548,8 +548,6 @@ def process_control_parameter_topics(self, msg): self._validate_value(msg, str) elif "/control_parameter/limit" in msg.topic: self._validate_value(msg, "json") - elif "/control_parameter/prio" in msg.topic: - self._validate_value(msg, bool) elif "/control_parameter/current_plan" in msg.topic: self._validate_value(msg, int) elif ("/control_parameter/min_current" in msg.topic or diff --git a/packages/helpermodules/update_config_test.py b/packages/helpermodules/update_config_test.py index 9c48ff2735..da4aeec0f1 100644 --- a/packages/helpermodules/update_config_test.py +++ b/packages/helpermodules/update_config_test.py @@ -373,24 +373,25 @@ def test_upgrade_datastore_142_ev_chargemode_conversion(ev0_prio: bool, ev0_charge_template = ChargeTemplate() ev0_charge_template.data.id = 0 ev0_charge_template.data.chargemode.selected = ev0_chargemode - ev0_charge_template.data.prio = ev0_prio ev1_charge_template = ChargeTemplate() ev1_charge_template.data.id = 1 ev1_charge_template.data.chargemode.selected = ev1_chargemode - ev1_charge_template.data.prio = ev1_prio ev2_charge_template = ChargeTemplate() ev2_charge_template.data.id = 2 ev2_charge_template.data.chargemode.selected = ev2_chargemode - ev2_charge_template.data.prio = ev2_prio uc = UpdateConfig() uc.all_received_topics = { "openWB/vehicle/0/charge_template": 0, "openWB/vehicle/1/charge_template": 1, "openWB/vehicle/2/charge_template": 2, - "openWB/vehicle/template/charge_template/0": dataclass_utils.asdict(ev0_charge_template.data), - "openWB/vehicle/template/charge_template/1": dataclass_utils.asdict(ev1_charge_template.data), - "openWB/vehicle/template/charge_template/2": dataclass_utils.asdict(ev2_charge_template.data), + # Historische Payloads behalten das damalige Prioritätsfeld unabhängig vom aktuellen Datenmodell. + "openWB/vehicle/template/charge_template/0": { + **dataclass_utils.asdict(ev0_charge_template.data), "prio": ev0_prio}, + "openWB/vehicle/template/charge_template/1": { + **dataclass_utils.asdict(ev1_charge_template.data), "prio": ev1_prio}, + "openWB/vehicle/template/charge_template/2": { + **dataclass_utils.asdict(ev2_charge_template.data), "prio": ev2_prio}, "openWB/system/datastore_version": [131, 132], } From 123f5d421cd27881f84b2a8b0b31ca9984b4f76f Mon Sep 17 00:00:00 2001 From: LKuemmel Date: Mon, 26 Oct 2026 10:30:14 +0100 Subject: [PATCH 2/2] remove unused fields --- packages/helpermodules/update_config.py | 20 +++++++++++- packages/helpermodules/update_config_test.py | 34 +++++++++++++++++++- 2 files changed, 52 insertions(+), 2 deletions(-) diff --git a/packages/helpermodules/update_config.py b/packages/helpermodules/update_config.py index 3394623b07..aa2e69aa40 100644 --- a/packages/helpermodules/update_config.py +++ b/packages/helpermodules/update_config.py @@ -63,7 +63,7 @@ class UpdateConfig: - DATASTORE_VERSION = 154 + DATASTORE_VERSION = 155 FILE_OPERATION_VERSION = 0 @@ -4173,3 +4173,21 @@ def upgrade(topic: str, payload) -> Optional[dict]: self._loop_all_received_topics(upgrade) self._append_datastore_version(154) + + def upgrade_datastore_155(self) -> None: + """Veraltete Prioritätsfelder auch aus bereits migrierten Konfigurationen entfernen.""" + def upgrade(topic: str, payload) -> Optional[dict]: + if re.fullmatch(r"openWB/vehicle/template/charge_template/[0-9]+", topic): + field = "prio" + elif re.fullmatch(r"openWB/chargepoint/[0-9]+/get/connected_vehicle/config", topic): + field = "priority" + else: + return None + config = decode_payload(payload) + if field in config: + del config[field] + return {topic: config} + return None + + self._loop_all_received_topics(upgrade) + self._append_datastore_version(155) diff --git a/packages/helpermodules/update_config_test.py b/packages/helpermodules/update_config_test.py index da4aeec0f1..27a214b17a 100644 --- a/packages/helpermodules/update_config_test.py +++ b/packages/helpermodules/update_config_test.py @@ -401,7 +401,39 @@ def test_upgrade_datastore_142_ev_chargemode_conversion(ev0_prio: bool, # evaluation assert uc.all_received_topics["openWB/counter/get/loadmanagement_prios"] == expected assert uc.all_received_topics["openWB/system/datastore_version"] == [131, 132, 142] - assert mock_pub.pub.call_count == 2 # einmal publishen für Upgrade der Datastore-Version + assert mock_pub.pub.call_count == 2 # Rangfolge und Datastore-Version + + +def test_upgrade_datastore_155_removes_only_obsolete_template_prio(mock_pub: Mock): + uc = UpdateConfig() + priorities = [{"type": "vehicle", "id": 4}] + uc.all_received_topics = { + "openWB/vehicle/template/charge_template/0": b'{"prio": true, "name": "A"}', + "openWB/vehicle/template/charge_template/1": b'{"prio": false, "name": "B"}', + "openWB/vehicle/template/charge_template/2": {"name": "C"}, + "openWB/chargepoint/0/set/log": {"prio": True}, + "openWB/chargepoint/0/get/connected_vehicle/config": b'{"priority": true, "charge_template": 0}', + "openWB/chargepoint/1/get/connected_vehicle/config": b'{"priority": false, "charge_template": 1}', + "openWB/chargepoint/2/get/connected_vehicle/config": {"charge_template": 2}, + "openWB/counter/get/loadmanagement_prios": priorities, + "openWB/system/datastore_version": list(range(155)), + } + + uc.upgrade_datastore_155() + + for template_id, name in enumerate(("A", "B", "C")): + assert uc.all_received_topics[f"openWB/vehicle/template/charge_template/{template_id}"] == {"name": name} + assert uc.all_received_topics["openWB/chargepoint/0/set/log"] == {"prio": True} + for cp_id in range(3): + assert uc.all_received_topics[f"openWB/chargepoint/{cp_id}/get/connected_vehicle/config"] == { + "charge_template": cp_id} + assert uc.all_received_topics["openWB/counter/get/loadmanagement_prios"] == priorities + assert uc.all_received_topics["openWB/system/datastore_version"] == list(range(156)) + assert mock_pub.pub.call_count == 5 + + mock_pub.reset_mock() + uc.upgrade_datastore_155() + mock_pub.pub.assert_not_called() def test_upgrade_datastore_149_removes_not_controlled_consumers(mock_pub: Mock):