From e01be43a8530eae7bf13b109220c88ff313eca2c Mon Sep 17 00:00:00 2001 From: dawys Date: Sun, 22 Mar 2026 10:12:56 +0100 Subject: [PATCH 1/5] also send the transaction ID to OCPP provider the transaction remains traceable even after the websocket performs a reconnect --- packages/control/ocpp.py | 2 ++ packages/control/optional.py | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/control/ocpp.py b/packages/control/ocpp.py index 71f46c0212..352357cffd 100644 --- a/packages/control/ocpp.py +++ b/packages/control/ocpp.py @@ -87,10 +87,12 @@ def transfer_values(self: OptionalProtocol, chargebox_id: str, fault_state: FaultState, connector_id: int, + transaction_id: int, imported: int) -> None: try: self._process_call(chargebox_id, fault_state, call.MeterValues( connector_id=connector_id, + transaction_id=transaction_id, meter_value=[{"timestamp": self._get_formatted_time(), "sampledValue": [ { diff --git a/packages/control/optional.py b/packages/control/optional.py index b65b161751..d679633224 100644 --- a/packages/control/optional.py +++ b/packages/control/optional.py @@ -284,6 +284,6 @@ def _transfer_meter_values(self): if cp.data.set.ocpp_transaction_id is not None: self.send_heart_beat(cp.data.config.ocpp_chargebox_id, cp.chargepoint_module.fault_state) self.transfer_values(cp.data.config.ocpp_chargebox_id, - cp.chargepoint_module.fault_state, cp.num, int(cp.data.get.imported)) + cp.chargepoint_module.fault_state, cp.num, cp.data.set.ocpp_transaction_id, int(cp.data.get.imported)) except Exception: log.exception("Fehler im OCPP-Optional-Modul") From 5d513c54b688ec5541cfffbc74668a92ba3ebef8 Mon Sep 17 00:00:00 2001 From: dawys Date: Sun, 22 Mar 2026 10:16:33 +0100 Subject: [PATCH 2/5] only start the connection to the OCPP provider when all variables are set check if the chargebox ID is set in the backend and if the rfid tag or the vehicle ID has been detected --- packages/control/chargepoint/chargepoint.py | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/packages/control/chargepoint/chargepoint.py b/packages/control/chargepoint/chargepoint.py index ac94d529e5..656e33960a 100644 --- a/packages/control/chargepoint/chargepoint.py +++ b/packages/control/chargepoint/chargepoint.py @@ -702,12 +702,18 @@ def update(self, ev_list: Dict[str, Ev]) -> None: # OCPP Start Transaction nach Anstecken if ((self.data.get.plug_state and self.data.set.plug_state_prev is False) or (self.data.set.ocpp_transaction_id is None and self.data.get.charge_state)): - self.data.set.ocpp_transaction_id = data.data.optional_data.start_transaction( - self.data.config.ocpp_chargebox_id, - self.chargepoint_module.fault_state, - self.num, - self.data.set.rfid or self.data.get.rfid or self.data.get.vehicle_id, - self.data.get.imported) + + # only start OCPP transaction if chargebox ID is not none + if (self.data.config.ocpp_chargebox_id is not None): + # only start OCPP transaction if rfid tag or vehicle ID is set + if (self.data.set.rfid or self.data.get.rfid or self.data.get.vehicle_id): + + self.data.set.ocpp_transaction_id = data.data.optional_data.start_transaction( + self.data.config.ocpp_chargebox_id, + self.chargepoint_module.fault_state, + self.num, + self.data.set.rfid or self.data.get.rfid or self.data.get.vehicle_id, + self.data.get.imported) if self.data.get.plug_state and self.data.set.plug_state_prev is False: self.data.control_parameter.timestamp_chargemode_changed = create_timestamp() # SoC nach Anstecken aktualisieren From 90fa2125193a4b748ad7be7045fce5c395815539 Mon Sep 17 00:00:00 2001 From: dawys Date: Mon, 23 Mar 2026 17:27:50 +0100 Subject: [PATCH 3/5] copilot changes --- packages/control/chargepoint/chargepoint.py | 8 +++----- packages/control/ocpp_test.py | 1 + 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/packages/control/chargepoint/chargepoint.py b/packages/control/chargepoint/chargepoint.py index 656e33960a..d4bd394900 100644 --- a/packages/control/chargepoint/chargepoint.py +++ b/packages/control/chargepoint/chargepoint.py @@ -702,12 +702,10 @@ def update(self, ev_list: Dict[str, Ev]) -> None: # OCPP Start Transaction nach Anstecken if ((self.data.get.plug_state and self.data.set.plug_state_prev is False) or (self.data.set.ocpp_transaction_id is None and self.data.get.charge_state)): - - # only start OCPP transaction if chargebox ID is not none - if (self.data.config.ocpp_chargebox_id is not None): - # only start OCPP transaction if rfid tag or vehicle ID is set + # Starte nur Transaction wenn auch die chargepoint ID im Backend gesetzt wurde + if self.data.config.ocpp_chargebox_id: + # Starte nur Transaction wenn bereits ein RFID Tag oder die Fahrzeug ID erkannt wurde if (self.data.set.rfid or self.data.get.rfid or self.data.get.vehicle_id): - self.data.set.ocpp_transaction_id = data.data.optional_data.start_transaction( self.data.config.ocpp_chargebox_id, self.chargepoint_module.fault_state, diff --git a/packages/control/ocpp_test.py b/packages/control/ocpp_test.py index cd2e93d8f6..662c81b44b 100644 --- a/packages/control/ocpp_test.py +++ b/packages/control/ocpp_test.py @@ -20,6 +20,7 @@ def mock_data() -> None: def test_start_transaction(mock_data, monkeypatch): cp = Chargepoint(1, None) cp.data.config.ocpp_chargebox_id = "cp1" + cp.data.set.rfid = "ABCDEF01234567" cp.data.get.plug_state = True cp.template = CpTemplate() cp.chargepoint_module = ChargepointModule(Mqtt()) From 9b1da817cbaa9dba655c523ea8ffb130a62a46e7 Mon Sep 17 00:00:00 2001 From: dawys Date: Fri, 3 Apr 2026 14:01:56 +0200 Subject: [PATCH 4/5] bugfix line too long error --- packages/control/optional.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/control/optional.py b/packages/control/optional.py index d679633224..c4df91d116 100644 --- a/packages/control/optional.py +++ b/packages/control/optional.py @@ -284,6 +284,9 @@ def _transfer_meter_values(self): if cp.data.set.ocpp_transaction_id is not None: self.send_heart_beat(cp.data.config.ocpp_chargebox_id, cp.chargepoint_module.fault_state) self.transfer_values(cp.data.config.ocpp_chargebox_id, - cp.chargepoint_module.fault_state, cp.num, cp.data.set.ocpp_transaction_id, int(cp.data.get.imported)) + cp.chargepoint_module.fault_state, + cp.num, + cp.data.set.ocpp_transaction_id, + int(cp.data.get.imported)) except Exception: log.exception("Fehler im OCPP-Optional-Modul") From b2d467bed9535c0c02bb9efb189135ec43aeed41 Mon Sep 17 00:00:00 2001 From: LKuemmel <76958050+LKuemmel@users.noreply.github.com> Date: Tue, 7 Apr 2026 11:25:43 +0200 Subject: [PATCH 5/5] fix pytest --- packages/control/ocpp_test.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/control/ocpp_test.py b/packages/control/ocpp_test.py index 662c81b44b..9e2c6d1d04 100644 --- a/packages/control/ocpp_test.py +++ b/packages/control/ocpp_test.py @@ -32,7 +32,7 @@ def test_start_transaction(mock_data, monkeypatch): cp.update([]) - assert start_transaction_mock.call_args == (("cp1", cp.chargepoint_module.fault_state, 1, None, 0),) + assert start_transaction_mock.call_args == (("cp1", cp.chargepoint_module.fault_state, 1, "ABCDEF01234567", 0),) def test_stop_transaction(mock_data, monkeypatch):