Ocpp protocol #3606
Replies: 5 comments 5 replies
|
Die Frage ist ja, ob das viele haben wollen. Denn das, was dem OCPP-Client in der openWB fehlt ist die Abgabe der Steuerung an den OCPP-Server. Sprich, die openWB wird dann nicht mehr überschuss laden oder bei billigen dynamischen Strompreisen. Sondern nur dann, wenn der OCPP-Server die Freigabe gibt. Und das macht der, wenn die richtige Ladekarte davor gehalten wird. Das trifft dann auch die anderen Ladenodi wie Zeit- oder Zielladen. |
|
Ich hänge mich hier mal dran, weil ich genau an dem Punkt unterwegs bin — aber bewusst ohne Abgabe der Steuerung. Mein Backend ist Monta. Ich will von dort nichts steuern lassen: Überschussladen, Zielladen, Lastmanagement bleiben komplett bei der openWB. Das Backend soll nur sehen, was passiert, und die Ladungen sauber abrechnen können. Dafür habe ich auf Basis von 2.1.9-Patch.2 lokal ein paar Dinge am OCPP-Client umgebaut: Dauerhafte Verbindung statt Verbindung pro Nachricht. Im Stock-Code (auch noch in 2.2.1) öffnet _process_call für jede OCPP-Nachricht eine neue Websocket-Verbindung, wartet 2 s auf die Antwort und schließt wieder. Backends mit verbindungsbasierter Online-Erkennung — Monta ist so eins — sehen die Box damit nur für ein paar Sekunden online, im Portal ist sie dauerhaft offline. Jetzt hält ein Hintergrund-Thread je Chargebox ID eine stehende Verbindung mit automatischem Reconnect. Nach jedem Verbindungsaufbau BootNotification, danach zyklisch Heartbeat im Intervall aus der BootNotification-Antwort (Default 300 s). Der bisherige 5-Minuten-Heartbeat aus optional.py entfällt dadurch. Nebeneffekt: Antworten kommen jetzt als typisierte Objekte statt roh aus ws.messages gefischt, Fehlerantworten des Backends werden überhaupt erst erkannt. Eingehende Nachrichten werden beantwortet — das ging vorher konstruktionsbedingt gar nicht, weil nie eine Verbindung offen stand. StatusNotification, die es im Stock-Code überhaupt nicht gibt (der Begriff kommt nirgends vor). Monta zeigte den Connector deshalb dauerhaft als Available und „Vehicle: Not Connected", selbst mitten in einer laufenden Ladung. Der Zustand wird jetzt aus cp.data abgeleitet (Available/Preparing/Charging/SuspendedEV/SuspendedEVSE/Faulted) und nur bei Änderung gesendet. MeterValues brauchbar gemacht: transactionId mitsenden (ohne die ordnet Monta den Zählerstand keiner Session zu und verwirft ihn), zusätzlich zum Zählerstand auch Leistung, Ströme und Spannungen je Phase, und das Ganze im 60-Sekunden-Takt statt alle 5 Minuten. Fehlende Werte werden übersprungen statt als 0 gesendet, negative Werte auf ungenutzten Phasen (Zählerrauschen) werden auf 0 begrenzt, sonst meckert Monta. SoC bleibt bewusst draußen. Das läuft bei mir und ist zusätzlich gegen einen lokales OCPP-1.6-Dienst getestet (Verbindungsaufbau, Reconnect nach Backend-Ausfall, Statusfolge über einen kompletten Ladevorgang, MeterValues). Der Scheduler der openWB wird nicht angefasst — kein Eingriff in main.py, keine zusätzlichen Threads, optional.py wird durch die Änderungen sogar kleiner. Wichtig zur Einordnung: Das ist alles kein „vollständiges OCPP" im Sinne von Steuerungshoheit beim Server, und ich hätte auch kein Interesse daran, das zu bauen. Es macht nur den vorhandenen Client so weit protokollkonform, dass ein Backend die Station dauerhaft online sieht, den Connector-Zustand kennt und einen echten Verbrauchsverlauf bekommt. Das dürfte der Teil sein, den man haben kann, ohne die Ladelogik der openWB anzufassen. Frage in die Runde: Besteht Interesse daran? Ich würde das gern in verdaubare PRs zerlegen — die stehende Verbindung samt Heartbeat wäre der erste, StatusNotification und die erweiterten MeterValues jeweils eigene. Aktuell habe ich aber den Eindruck, dass fremde PRs sehr stiefmütterlich behandelt werden. Wenn das also grundsätzlich nichts ist, spare ich mir den Aufwand und behalte es lokal. |
|
Ich bin sehr an dem OCPP-Patch interessiert; es wäre toll, wenn er
integriert würde.
Die Steuerungsfunktion benötige ich nicht ,der Ladevorgang an sich reicht
aus.
Eine Frage: Ist es möglich, dass ich Ihren Patch 2.1.9-Patch.2 selbst
installiere?
|
|
Mein openBW läuft auf einer virtuellen Maschine auf einem Synology NAS,
dort kann ich die Dateien ändern.
Kann ich Ihre ocpp.py und optional.py bekommen?
|
|
Wenn ich den github Link öffne, erhalte ich eine Fehlermeldung.
|
Uh oh!
There was an error while loading. Please reload this page.
Für die Verbindung mit einem OCPP-Backend in den Niederlanden ist eine vollständige Unterstützung des OCPP-Protokolls erforderlich.
Wäre es möglich, das openWB-OCPP-Protokoll zu erweitern?
All reactions