Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix Alfen OCPP Authorization Flow #16088

Closed
wants to merge 4 commits into from

Conversation

egnerfl
Copy link

@egnerfl egnerfl commented Sep 13, 2024

Hallo, erstmal Danke für all die Arbeit / Zeit die Ihr in evcc steckt. Ich habe selten solche gut maintainten Open Source Projekte gesehen 👍

Hier auch die Warnung bzw. der Hinweiss das ich wenig Erfahrung mit go habe und gerade deswegen äusserst Dankbar für jegliches Feedback / Änderungsvorschläge bin.

Jetzt zum eigentlichen PR

Ich habe versucht meine Alfen Wallbox über OCPP mit evcc zu verbinden und hatte hierbei einige Probleme die ich mit diesem PR beheben möchte.

1. ID Tag - OCPP Authorize (Enhancement)

Die Alfen Wallbox sendet leider nur den ID Tag beim Authorize request, hier gab es bereits ein Issue in dem besprochen wurde das man hierbei ja einfach den IdTag am Connector setzten könnte was zumindest im Fall von einem einzelnen Connector kein Problem darstellen sollte. Irgendwie scheint sich dieses Issue jedoch im Sand verlaufen zu haben bzw. wurde durch einen anderen PR geschlossen der aber an der Authorize function nichts veränderte.

Mein Gedanke war das es eigentlich kein Problem sein sollte für alle verfügbaren Connectors den idTag zu setzten. Hierdurch werden laufende Ladevorgänge nicht verändert.

Vermutlich ist mit dem check auf ChargePointStatusAvailable nicht jeder Randfall abgedeckt, hier wäre euer Feedback also sehr wichtig.
Alternativ könnte man auch einfach wie ursprünglich besprochen prüfen ob es nur einen Connector gibt und nur dann die ID setzten.

Zum Thema OCPP Auth hatte ich mich auch gefragt ob etwas gegen eine einfache "authorized_tags" Liste in der config sprechen würde? Ist nichts für diesen PR aber wenn das für euch gut klingt würde ich das implementieren.

2. Alfen - Plug and Charge (Bugfix)

Der Alfen PlugAndChargeIdentifier überschreibt immer den IdTag des Connectors.
In nicht eichrechtskonformen Alfen Wallboxen lässt sich "Plug and Charge" aktivieren, hierzu muss man in der Wallbox eine ID hinterlegen die dann anstelle der RFID Tag ID gesetzt wird. Das Problem an der aktuellen Implementierung in evcc hierbei ist das immer die PlugAndCharge ID verwendet wird auch wenn das Feature nicht aktiv ist.

Die sauberste Lösung hierzu wäre vermutlich den AuthorizationMethod zu checken der in der selben OCPP Response vorhanden ist, im RFID Tag Fall wird hier "RFID" gesetzt. Den Plug and Change Fall konnte ich leider nicht testen da ich eine Eichrechtskonforme Wallbox habe und dort seit einigen Firmware Versionen Plug and Change nichtmehr zur Verfügung steht.

Danke für eurer Feedback!

VG,
Florian

@egnerfl egnerfl marked this pull request as draft September 13, 2024 17:29
@andig andig added the enhancement New feature or request label Sep 14, 2024
@andig
Copy link
Member

andig commented Sep 14, 2024

Zum Thema OCPP Auth hatte ich mich auch gefragt ob etwas gegen eine einfache "authorized_tags" Liste in der config sprechen würde? Ist nichts für diesen PR aber wenn das für euch gut klingt würde ich das implementieren.

Mir wäre nicht klar, wofür? Die Authorisierung macht die WB, nicht evcc.

charger/ocpp/cp_setup.go Outdated Show resolved Hide resolved
@@ -21,6 +21,14 @@ func (cp *CP) Authorize(request *core.AuthorizeRequest) (*core.AuthorizeConfirma
},
}

// Set idTag for all connectors in available state
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Das fühlt sich komisch an. Wenn die WB das Tag bei der Initialisierung mit gibt- warum ist das hier notwendig?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Korrigier mich wenn ich falsch liege aber die Logik aus dem init / cp_setup läuft beim Start wenn der erste Kontakt mit der Wallbox aufgenommen wird. Hier werden die Einstellungen abgeglichen und z.B. die Plug and Charge ID übernommen (falls konfiguriert).

Der Auth / cp_core wird ausgeführt wenn eine RFID Karte an die Wallbox gehalten wird um eine neue Transaktion zu autorisieren. Hier können wir also den idTag für den bevorstehenden Ladevorgang abgreifen.

Die Art und Weisse wie man das am besten machen kann ohne den konkreten Connector zu kennen ist wohl die große Frage.

@egnerfl
Copy link
Author

egnerfl commented Sep 14, 2024

Zum Thema OCPP Auth hatte ich mich auch gefragt ob etwas gegen eine einfache "authorized_tags" Liste in der config sprechen würde? Ist nichts für diesen PR aber wenn das für euch gut klingt würde ich das implementieren.

Mir wäre nicht klar, wofür? Die Authorisierung macht die WB, nicht evcc.

Das stimmt wohl in den meisten Fällen allerdings kommt das im OCPP Fall (mit RFID Auth) sehr auf die Konfiguration der Wallbox an.

Bei meiner Alfen Wallbox sieht das ganze so aus.

  1. Fahrzeug wird angeschlossen
  2. Wallbox wartet auf RFID Karte
  3. Karte wird vorgehalten
  4. Wallbox stellt Auth Request an OCPP Server
  5. Server gibt OK
  6. Wallbox startet die Transaktion

Wenn ich nun die Autorisierung über die Lokale Whitelist auf der Wallbox handle bin ich mir nicht sicher ob der Auth Request immer noch an den OCPP Server gestellt wird oder ob dieser Schritt überprungen wird und direkt die Start Transaction Anfrage rausgeht. In dem Fall wird der idTag allerdings nicht an evcc geschickt.

Die Alternative ist das man die Wallbox zwingt die Auth Requests an den OCPP Server zu schicken, hier sollte es jetzt egal sein ob die Lokale Whitelist aktiv ist der OCPP Server sagt ja immer "ja" was die Lokale Whitelist überschreibt (use-case bei OCPP ist wohl Neuer Benutzer verwendet die Wallbox ist dem Server aber bekannt).
Damit kann jetzt aber ja jeder RFID Tag laden.

Wir brauchen also eine Kombination aus Lokaler Whitelist und Auth Request an den OCPP Server, falls das nicht Möglich ist müsste der Server also wissen ob der idTag laden darf oder nicht.

Hier die Screenshots aus den Wallbox Einstellungen.

Screenshot 2024-09-14 171421
Screenshot 2024-09-14 171514
Screenshot 2024-09-14 171757
Screenshot 2024-09-14 171816
Screenshot 2024-09-14 171847
image

@premultiply
Copy link
Member

In dem Fall wird der idTag allerdings nicht an evcc geschickt.

Das verwendete idTag wird IMMER mit StartTransaction ans CS gesendet.
Das vorherige Authorize ist irrelevant und wird von evcc immer mit Accepted beantwortet.

Die Entscheidung ob eine Karte tatsächlich zu einer Ladefreigabe durch evcc führen kann ist nicht von der Akzeptanz einer Karte oder eine Transaktion mit einem bestimmten idTag abhängig.

Wir arbeiten hier, wie bei allen anderen Boxen auch, mit Default-Mode "off" und einer Freigabe über den Default-Modus eines (erkannten) Fahrzeugs. Für die Fahrzeugerkennung kann ein RFID-Tag verwendet werden. Dies erfährt evcc eben über StartTransaction.
Eine OCPP-Transaktion ist bei evcc nicht gleichbedeutend dass es mit dem verwendeten idTag auch Strom gibt.

@egnerfl
Copy link
Author

egnerfl commented Sep 15, 2024

In dem Fall wird der idTag allerdings nicht an evcc geschickt.

Das verwendete idTag wird IMMER mit StartTransaction ans CS gesendet. Das vorherige Authorize ist irrelevant und wird von evcc immer mit Accepted beantwortet.

Die Entscheidung ob eine Karte tatsächlich zu einer Ladefreigabe durch evcc führen kann ist nicht von der Akzeptanz einer Karte oder eine Transaktion mit einem bestimmten idTag abhängig.

Wir arbeiten hier, wie bei allen anderen Boxen auch, mit Default-Mode "off" und einer Freigabe über den Default-Modus eines (erkannten) Fahrzeugs. Für die Fahrzeugerkennung kann ein RFID-Tag verwendet werden. Dies erfährt evcc eben über StartTransaction. Eine OCPP-Transaktion ist bei evcc nicht gleichbedeutend dass es mit dem verwendeten idTag auch Strom gibt.

Alles klar, habe gerade noch mal etwas auf dem Parkplatz getestet und musste feststellen das meine Wallbox kein StartTransaction Request rausschickt weshalb die Logik auch nicht laufen konnte.

Der Auth Request wird gesendet und anschließend beginnt direkt der Ladevorgang, klingt also ganz nach Fehlkonfiguration.

Ich habe auch mal getestet was bei den aktuellen Wallbox Einstellungen passiert wenn ich einen neuen RFID Tag vorhalte und musste wie vermutet feststellen das er auf die Lokale Whitelist übernommen wurde was aber wenn ich dich richtig verstehe so gewollt ist? Heisst es kann zwar jeder fremde seine Karte vorhalten aber der Ladevorgang / die Autorisierung erfolgt erst über StartTransaction bzw. über die idTags die am vehicle konfiguriert sind?

Ich teste jetzt mal ob sich die OCPP Auth Requests komplett abschalten lassen und ob ich das Setting finde das für die StartTransaction Requests zuständig ist.

Update nach dem Testen

In den Online/Offline Settings der Wallbox (siehe Screenshot von oben) habe ich "Pre Authorize with local lists" ausgewählt, zuvor war "Wait for authorization by BackendOffice" aktiv. Eine andere Einstellung gibt es hier nicht.

Ergebnis war das nur noch für den unbekannten RFID Tag eine Anfrage an evcc gesendet wurde.

Unter Connectivity / Transaction data habe ich die Message attempts von 0 (factory default) auf 3 gestellt.

Ein StartTransaction Request ging leider trotzdem nicht an evcc.

Ansonsten habe ich keine Einstellungen gefunden die deaktiviert sind bzw. offensichtlich etwas mit den transactions zutun haben.

Habt ihr noch eine Idee? Anbei meine evcc.yaml + die Logs von Wallbox und evcc, hier sieht man ja auch das Konfigurationsobject das von der Wallbox an evcc geschickt wird. Eventuell sieht man hier welcher Key nicht passt?

https://gist.github.com/egnerfl/e80fa562abf19af28d9fcc83cfac6051

Die tatsächlichen RFID Tag IDs habe ich gegen DEBUG_TAG_UNKOWN und DEBUG_TAG_KOWN ausgetauscht.

Danke für eure Hilfe!

@premultiply
Copy link
Member

premultiply commented Sep 15, 2024

Es braucht weder eine "Local List" noch eine "White List" noch irgendwelche Einträge darin.
Die Box muss lokal nix über deine Karten wissen.

Einfach der OCPP-Standard-Flow für öffentliche Ladepunkte.

@egnerfl
Copy link
Author

egnerfl commented Sep 16, 2024

Alles klar, danke dir. Habe die Wallbox jetzt komplett auf Werkseinstellungen zurückgesetzt und nun gehen endlich startTransaction Requests raus und die Identifikation funktioniert.

Das Verhalten mit dem Auth Request macht so auch Sinn und die Plug and Charge Sonderlogik auch. Keine Ahnung was mit der Wallbox los war das sie sich so verhalten hat. Das Ding hat mich echt wahnsinnig gemacht.

@egnerfl egnerfl closed this Sep 16, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants