Hallo zusammen,
ich habe eine openWB Series 2 (2.1.9-Patch.1) und eine openWB Pro (2.1.9-Patch.1), beide im Secondary Modus im Betrieb.
Ein Raspberry Pi 3 mit aktueller Software (2.1.9-Patch.1) fungiert als Primary.
Ich benutze die openWB Pro für das Laden meines Firmen-Fahrzeugs mit Abrechnung über OCCP.
Soweit funktioniert alles.
Manchmal kommt es vor, dass beim Abstecken des Fahrzeugs (Ladeende) keine korrekte TransactionId an dem Abrechnugs-Provider (e-mobilio) übermittelt wird.
Folgende Daten kommen dann beim Provider an:
Transaction ID: 0
Meter stop: 1494218 Wh
Reason: EVDisconnected
Accepted: Y
Das (Transaction ID: 0) kann der Provider dann nicht verarbeiten und verwirft die Transaktion.
Bei einer funktionierenden Transaktion übermittelt openWB eine korrekte Transaction ID.
Ich hab mir den Quellcode auf github angesehen. Die Transaction ID wird beim Einstecken / Start der Ladung vom Provider übermittelt und dann in mosquitto gespeichert. Anscheinend geht Sie aber dann verloren.
Danke für jede Hilfe
VG Hans
OCCP Transaction ID wird ab und zu als "0" übermittelt
Re: OCCP Transaction ID wird ab und zu als "0" übermittelt
Hallo zusammen,
was ich bisher heraus gefunden habe ist, dass die Transactions ID erfolgreich vom Provider beim Start übermittelt wird.
Danach wird Sie auch in das locale mosquitto geschrieben. Beim Aufruf der Methode ocpp_transfer_meter_values() steht dann cp.data.set.ocpp_transaction_id schon auf None und es werden keine Daten übermittelt.
Weiß jemand wie das sein kann?
VG Hans
was ich bisher heraus gefunden habe ist, dass die Transactions ID erfolgreich vom Provider beim Start übermittelt wird.
Danach wird Sie auch in das locale mosquitto geschrieben. Beim Aufruf der Methode ocpp_transfer_meter_values() steht dann cp.data.set.ocpp_transaction_id schon auf None und es werden keine Daten übermittelt.
Weiß jemand wie das sein kann?
VG Hans
Re: OCCP Transaction ID wird ab und zu als "0" übermittelt
Hallo zusammen,
so ich bin jetzt einige Schritte weiter gekommen und es ist anders, als zuvor gedacht.
Bei der Methode "start_transaction()" in ocpp.py wird der OCPP Prozess gestartet.
Falls in diesem Fall KEINE RFID-ID (id_tag) übermittelt wird gibt der Provider eine transaction_id mit dem Wert "0" zurück.
Leider wird das nicht ins Log ausgegeben oder an die Oberfläche weitergeleitet.
Jetzt kommt es bei mir vor das die RFID-ID (id_tag) an dieser Stelle None hat, obwohl der RFID Tag richtig erkannt wird und in Backend unter "Einstellungen/Identifikation" im Feld "Erkannt ID-Tags" ausgegeben wird.
Warum das so ist, kann ich nicht beurteilen, ich sehe nur das am Anfang auch im mosquitto der richtige Wert (openWB/set/chargepoint/4/rfid) der korrekte Wert drin steht.
Im openWB/get/chargepoint/4/rfid steht dagegen null drin.
Vielleicht ist das aber auch ein timing Sache und zum Zeitpunkt der "start_transaction()" Methode steht null drin.
In der Methode selbst werden verschiedene Herkünfte mit berücksichtigt.
VG Hans
so ich bin jetzt einige Schritte weiter gekommen und es ist anders, als zuvor gedacht.
Bei der Methode "start_transaction()" in ocpp.py wird der OCPP Prozess gestartet.
Falls in diesem Fall KEINE RFID-ID (id_tag) übermittelt wird gibt der Provider eine transaction_id mit dem Wert "0" zurück.
Leider wird das nicht ins Log ausgegeben oder an die Oberfläche weitergeleitet.
Jetzt kommt es bei mir vor das die RFID-ID (id_tag) an dieser Stelle None hat, obwohl der RFID Tag richtig erkannt wird und in Backend unter "Einstellungen/Identifikation" im Feld "Erkannt ID-Tags" ausgegeben wird.
Warum das so ist, kann ich nicht beurteilen, ich sehe nur das am Anfang auch im mosquitto der richtige Wert (openWB/set/chargepoint/4/rfid) der korrekte Wert drin steht.
Im openWB/get/chargepoint/4/rfid steht dagegen null drin.
Vielleicht ist das aber auch ein timing Sache und zum Zeitpunkt der "start_transaction()" Methode steht null drin.
In der Methode selbst werden verschiedene Herkünfte mit berücksichtigt.
Code: Alles auswählen
self.data.set.rfid or self.data.get.rfid or self.data.get.vehicle_idRe: OCCP Transaction ID wird ab und zu als "0" übermittelt
Hallo zusammen,
ich denke ich habe es herausgefunden.
1) Folgende Situation, ich stecke das Fahrzeug an meine openWB Pro an
2) Ich halte den RFID Schlüssel an die Fläche und der RFID Redder erkennt den Schlüssel.
3) Ich sehe im Backend unter "Einstellungen/Identifikation" im Feld "Erkannt ID-Tags" das der richtige Schlüssel ausgegeben wird
Im von mir eingebauten Logging (/var/www/html/openWB/packages/control/chargepoint/chargepoint.py) unter der Methode (update_ev(self, ev_list: Dict[str, Ev])) sehe ich folgendes Verhalten:
Dann kommt der Start von OCPP schon:
Später dann erst steht der Schlüssel im Log:
Es besteht also ein Timing Problem! Der Start von OCPP ist sehr oft vor dem Erkennen des RFID Schlüssels.
Meine Vorschläge dazu, mit der Bitte um Feedback von @openwb
1) Kann man in der chargepoint.py nicht vor Start der Websocket Verbindung über OCPP auf einen vorhandenen RFID Tag abfragen?
Konkret an dieser dieser Stelle:
Macht eine Verbindung zu einem OCPP Provider ohne RFID Tag Sinn?
Falls eine Verbindung zu einem OCPP Provider AUCH ohne RFID Tag Sinn macht, muss man auf mehr Zeit verstreichen lassen, damit sichergestellt wird das der RFID Tag sicher erkannt wird.
2) Folgende Verbesserung in der ocpp.py
Laut Doku von der OCPP Lib kann hier auch eine "transaction_id" übergeben werden. Ich habe es getestet und es funktioniert.
Hätte den Vorteil dass bei einem reconnect vom websocket die übertragenen Werte zuordbar bleiben.
Danke & Viele Grüße
Hans
ich denke ich habe es herausgefunden.
1) Folgende Situation, ich stecke das Fahrzeug an meine openWB Pro an
2) Ich halte den RFID Schlüssel an die Fläche und der RFID Redder erkennt den Schlüssel.
3) Ich sehe im Backend unter "Einstellungen/Identifikation" im Feld "Erkannt ID-Tags" das der richtige Schlüssel ausgegeben wird
Im von mir eingebauten Logging (/var/www/html/openWB/packages/control/chargepoint/chargepoint.py) unter der Methode (update_ev(self, ev_list: Dict[str, Ev])) sehe ich folgendes Verhalten:
Code: Alles auswählen
2026-03-21 09:41:32,961 - {control.chargepoint.chargepoint:651} - {WARNING:MainThread} - update, self.data.set.rfid: None, self.data.get.rfid None, self.data.get.vehicle_id: None, self.data.get.plug_state: False
2026-03-21 09:41:43,075 - {control.chargepoint.chargepoint:651} - {WARNING:MainThread} - update, self.data.set.rfid: None, self.data.get.rfid: None, self.data.get.vehicle_id: None, self.data.get.plug_state: True
Code: Alles auswählen
2026-03-21 09:41:45,277 - {control.ocpp:78} - {WARNING:MainThread} - Transaction ID: 3219371513 für Chargebox ID: XXXXXXXX mit Tag: None und Zählerstand: 1554233 erhalten.
Code: Alles auswählen
2026-03-21 09:41:53,166 - {control.chargepoint.chargepoint:651} - {WARNING:MainThread} - update, self.data.set.rfid: None, self.data.get.rfid: XXXXXXXXXXX, self.data.get.vehicle_id: None, self.data.get.plug_state: True
Meine Vorschläge dazu, mit der Bitte um Feedback von @openwb
1) Kann man in der chargepoint.py nicht vor Start der Websocket Verbindung über OCPP auf einen vorhandenen RFID Tag abfragen?
Konkret an dieser dieser Stelle:
Code: Alles auswählen
# 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)
Falls eine Verbindung zu einem OCPP Provider AUCH ohne RFID Tag Sinn macht, muss man auf mehr Zeit verstreichen lassen, damit sichergestellt wird das der RFID Tag sicher erkannt wird.
2) Folgende Verbesserung in der ocpp.py
Code: Alles auswählen
def transfer_values(self: OptionalProtocol,
chargebox_id: str,
fault_state: FaultState,
connector_id: int,
imported: int) -> None:
try:
self._process_call(chargebox_id, fault_state, call.MeterValues(
connector_id=connector_id,
meter_value=[{"timestamp": self._get_formatted_time(),
"sampledValue": [
{
"value": f'{int(imported)}',
"context": "Sample.Periodic",
"format": "Raw",
"measurand": "Energy.Active.Import.Register",
"unit": "Wh"
},
]}],
))
Hätte den Vorteil dass bei einem reconnect vom websocket die übertragenen Werte zuordbar bleiben.
Danke & Viele Grüße
Hans
-
seaspotter
- Beiträge: 625
- Registriert: Do Mär 03, 2022 8:09 pm
- Has thanked: 151 times
- Been thanked: 128 times
Re: OCCP Transaction ID wird ab und zu als "0" übermittelt
Mach doch einfach einen PR wenn du dich schon so intensiv damit beschäftigst. Dann kann er umfassend reviewed und ggf. gemerged werden.
15,36 kWp mit Sungrow SH10RT V112 (via LAN), 12,8 kWh Sungrow SBR128 und SMA STP6.0-3AV-40
2x OpenWB Series2 custom – 11 kW und 22kW
IDM Aero SLM Wärmepumpe
Renault Megane E-Tech EV60 - VW ID3 Pro S
2x OpenWB Series2 custom – 11 kW und 22kW
IDM Aero SLM Wärmepumpe
Renault Megane E-Tech EV60 - VW ID3 Pro S