From 63e9a5f2f3b9293b5153c1210ebc604c19792167 Mon Sep 17 00:00:00 2001 From: SeaSpotter Date: Mon, 27 Jul 2026 12:21:44 +0200 Subject: [PATCH 1/7] Add timestamp_last_cp_retry to control_parameter Added timestamp_last_cp_retry field to control parameters. --- packages/control/chargepoint/control_parameter.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/control/chargepoint/control_parameter.py b/packages/control/chargepoint/control_parameter.py index ee671f705b..dd0b1681e0 100644 --- a/packages/control/chargepoint/control_parameter.py +++ b/packages/control/chargepoint/control_parameter.py @@ -26,6 +26,8 @@ class ControlParameter: template_phases: int = field(default=None, metadata={"topic": "control_parameter/template_phases"}) timestamp_charge_start: Optional[float] = field( default=None, metadata={"topic": "control_parameter/timestamp_charge_start"}) + timestamp_last_cp_retry: Optional[float] = field( + default=None, metadata={"topic": "control_parameter/timestamp_last_cp_retry"}) timestamp_chargemode_changed: Optional[float] = field( default=None, metadata={"topic": "control_parameter/timestamp_chargemode_changed"}) timestamp_last_phase_switch: float = field( From e43b93a1706985327d858ae6f42f192c0a771ec6 Mon Sep 17 00:00:00 2001 From: SeaSpotter Date: Mon, 27 Jul 2026 12:22:38 +0200 Subject: [PATCH 2/7] Add control_pilot_interruption_retry_interval parameter --- packages/control/ev/ev_template.py | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/control/ev/ev_template.py b/packages/control/ev/ev_template.py index 6ce8d33ec0..f348a1d084 100644 --- a/packages/control/ev/ev_template.py +++ b/packages/control/ev/ev_template.py @@ -13,6 +13,7 @@ class EvTemplateData: prevent_charge_stop: bool = False control_pilot_interruption: bool = False control_pilot_interruption_duration: int = 4 + control_pilot_interruption_retry_interval: int = 0 average_consump: float = 17000 min_current: int = 6 max_current_single_phase: int = 16 From b2dc2c6f7e77224f5cad7a3519dbdcbc48fa899c Mon Sep 17 00:00:00 2001 From: SeaSpotter Date: Mon, 27 Jul 2026 12:24:50 +0200 Subject: [PATCH 3/7] Enhance control pilot interruption handling logic --- packages/control/chargepoint/chargepoint.py | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/packages/control/chargepoint/chargepoint.py b/packages/control/chargepoint/chargepoint.py index a3eaf78d22..f1e2e19429 100644 --- a/packages/control/chargepoint/chargepoint.py +++ b/packages/control/chargepoint/chargepoint.py @@ -284,15 +284,29 @@ def initiate_control_pilot_interruption(self): # Unterstützt der Ladepunkt die CP-Unterbrechung und benötigt das Auto eine CP-Unterbrechung? if charging_ev.ev_template.data.control_pilot_interruption: if self.data.config.control_pilot_interruption_hw: + cp = self.data.control_parameter + retry_interval = charging_ev.ev_template.data.control_pilot_interruption_retry_interval # Wird die Ladung gestartet? - if self.data.set.current_prev == 0 and self.data.set.current != 0: + started_now = self.data.set.current_prev == 0 and self.data.set.current != 0 + # Ladung angefordert, Auto lädt aber trotz gültigem Signal seit geraumer Zeit nicht. + stuck = ( + retry_interval > 0 and + self.data.set.current != 0 and + self.data.get.charge_state is False and + cp.timestamp_charge_start is not None and + check_timestamp(cp.timestamp_last_cp_retry or cp.timestamp_charge_start, + retry_interval) is False + ) + if started_now or stuck: # Die CP-Unterbrechung erfolgt in Threads, da diese länger als ein Zyklus dauert. if thread_handler(Thread( target=self.chargepoint_module.interrupt_cp, args=(charging_ev.ev_template.data.control_pilot_interruption_duration,), name=f"cp{self.chargepoint_module.config.id}")): - message = "Control-Pilot-Unterbrechung für " + str( - charging_ev.ev_template.data.control_pilot_interruption_duration) + "s." + cp.timestamp_last_cp_retry = create_timestamp() + reason = "Ladestart" if started_now else "Auto lädt trotz Freigabe nicht" + message = ("Control-Pilot-Unterbrechung (" + reason + ") für " + str( + charging_ev.ev_template.data.control_pilot_interruption_duration) + "s.") self.set_state_and_log(message) else: message = "CP-Unterbrechung nicht möglich, da der Ladepunkt keine CP-Unterbrechung unterstützt." From f552e7da706318a7bb2771e8004a4d2817c51536 Mon Sep 17 00:00:00 2001 From: SeaSpotter Date: Mon, 27 Jul 2026 12:43:58 +0200 Subject: [PATCH 4/7] flake8 --- packages/control/chargepoint/chargepoint.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/control/chargepoint/chargepoint.py b/packages/control/chargepoint/chargepoint.py index f1e2e19429..ef81e10ab7 100644 --- a/packages/control/chargepoint/chargepoint.py +++ b/packages/control/chargepoint/chargepoint.py @@ -305,8 +305,10 @@ def initiate_control_pilot_interruption(self): name=f"cp{self.chargepoint_module.config.id}")): cp.timestamp_last_cp_retry = create_timestamp() reason = "Ladestart" if started_now else "Auto lädt trotz Freigabe nicht" - message = ("Control-Pilot-Unterbrechung (" + reason + ") für " + str( - charging_ev.ev_template.data.control_pilot_interruption_duration) + "s.") + message = ( + "Control-Pilot-Unterbrechung (" + reason + ") für " + + str(charging_ev.ev_template.data.control_pilot_interruption_duration) + "s." + ) self.set_state_and_log(message) else: message = "CP-Unterbrechung nicht möglich, da der Ladepunkt keine CP-Unterbrechung unterstützt." From 432982368ee3e1ee65329b5551f2a31d8e4b0fe0 Mon Sep 17 00:00:00 2001 From: SeaSpotter Date: Mon, 27 Jul 2026 12:48:26 +0200 Subject: [PATCH 5/7] flake8 --- packages/control/chargepoint/chargepoint.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/control/chargepoint/chargepoint.py b/packages/control/chargepoint/chargepoint.py index ef81e10ab7..c0f1ce91fe 100644 --- a/packages/control/chargepoint/chargepoint.py +++ b/packages/control/chargepoint/chargepoint.py @@ -295,7 +295,7 @@ def initiate_control_pilot_interruption(self): self.data.get.charge_state is False and cp.timestamp_charge_start is not None and check_timestamp(cp.timestamp_last_cp_retry or cp.timestamp_charge_start, - retry_interval) is False + retry_interval) is False ) if started_now or stuck: # Die CP-Unterbrechung erfolgt in Threads, da diese länger als ein Zyklus dauert. From 34913850cf5484abaf4d5710e27b99bdc9f8ef0e Mon Sep 17 00:00:00 2001 From: SeaSpotter Date: Thu, 30 Jul 2026 15:53:31 +0200 Subject: [PATCH 6/7] Update datastore version to 137 and add upgrade method --- packages/helpermodules/update_config.py | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/packages/helpermodules/update_config.py b/packages/helpermodules/update_config.py index 214eac0240..1a6e2f5bdc 100644 --- a/packages/helpermodules/update_config.py +++ b/packages/helpermodules/update_config.py @@ -58,7 +58,7 @@ class UpdateConfig: - DATASTORE_VERSION = 136 + DATASTORE_VERSION = 137 valid_topic = [ "^openWB/bat/config/bat_control_activated$", @@ -125,6 +125,7 @@ class UpdateConfig: "^openWB/chargepoint/[0-9]+/control_parameter/timestamp_chargemode_changed$", "^openWB/chargepoint/[0-9]+/control_parameter/timestamp_last_phase_switch$", "^openWB/chargepoint/[0-9]+/control_parameter/timestamp_switch_on_off$", + "^openWB/chargepoint/[0-9]+/control_parameter/timestamp_last_cp_retry$", "^openWB/chargepoint/[0-9]+/get/charge_state$", "^openWB/chargepoint/[0-9]+/get/currents$", "^openWB/chargepoint/[0-9]+/get/current_branch$", @@ -3469,3 +3470,16 @@ def upgrade(topic: str, payload) -> Optional[dict]: return modified_topics self._loop_all_received_topics(upgrade) self._append_datastore_version(136) + + def upgrade_datastore_137(self) -> None: + def upgrade(topic: str, payload) -> Optional[dict]: + if re.search("openWB/vehicle/template/ev_template/[0-9]+$", topic) is not None: + payload = decode_payload(payload) + if "control_pilot_interruption_retry_interval" not in payload: + payload["control_pilot_interruption_retry_interval"] = \ + EvTemplateData().control_pilot_interruption_retry_interval + return {topic: payload} + self._loop_all_received_topics(upgrade) + self._append_datastore_version(137) + + From ab69a7aa62a45e3cdcb991ca8b07308d4a21d900 Mon Sep 17 00:00:00 2001 From: SeaSpotter Date: Thu, 30 Jul 2026 15:55:37 +0200 Subject: [PATCH 7/7] flake8 --- packages/helpermodules/update_config.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/helpermodules/update_config.py b/packages/helpermodules/update_config.py index 1a6e2f5bdc..48d2f72b1e 100644 --- a/packages/helpermodules/update_config.py +++ b/packages/helpermodules/update_config.py @@ -3470,7 +3470,7 @@ def upgrade(topic: str, payload) -> Optional[dict]: return modified_topics self._loop_all_received_topics(upgrade) self._append_datastore_version(136) - + def upgrade_datastore_137(self) -> None: def upgrade(topic: str, payload) -> Optional[dict]: if re.search("openWB/vehicle/template/ev_template/[0-9]+$", topic) is not None: @@ -3481,5 +3481,3 @@ def upgrade(topic: str, payload) -> Optional[dict]: return {topic: payload} self._loop_all_received_topics(upgrade) self._append_datastore_version(137) - -