Skip to content

CP nach Fehler/Abbruch bei Phasenumschaltung und CP-Unterbrechung immer wieder verbinden - #4037

Open
s0170071 wants to merge 1 commit into
openWB:masterfrom
s0170071:fix/cp-reconnect-on-exception
Open

s0170071 wants to merge 1 commit into
openWB:masterfrom
s0170071:fix/cp-reconnect-on-exception

Conversation

@s0170071

@s0170071 s0170071 commented Sep 30, 2026 •

Copy link
Copy Markdown
Contributor

Hintergrund

perform_phase_switch und perform_cp_interruption trennen CP (GPIO auf HIGH) und verbinden es am Ende der Methode wieder (GPIO.output(gpio_cp, GPIO.LOW)). Tritt dazwischen eine Ausnahme auf - zum Beispiel weil die EVSE laut SingleComponentUpdateContext(..., reraise=True) den Strom nicht auf 0 zurückmeldet (Ladung konnte nicht gestoppt werden), oder ein GPIO-Zugriff selbst fehlschlägt - wird dieser letzte Schritt übersprungen. CP bleibt dann dauerhaft getrennt, bis der Dienst neu gestartet wird, und das Fahrzeug erkennt den Ladepunkt nicht mehr.

Änderungen

  1. finally für die CP-Wiederverbindung: Der eigentliche Ablauf beider Methoden wandert in eine private Methode (_perform_phase_switch bzw. _perform_cp_interruption). Die Methode ruft diese in einem try auf und stellt in einem finally sicher, dass CP immer wieder auf LOW gesetzt wird - auch wenn eine Ausnahme durchgereicht wird.
  2. Einheitliches Muster für Pin-Ermittlung: Die GPIO-Pins werden jeweils einmal in der oeffentlichen Methode ermittelt und an die private Methode weitergereicht, statt sie in innerer und äusserer Methode getrennt zu ermitteln. Das hält beide Methoden im gleichen Muster und vermeidet, dass zwei unabhängige Pin-Ermittlungen unbemerkt auseinanderlaufen koennten.

Prüfung

  • python -m py_compile für die geänderte Datei erfolgreich
  • Kein GPIO-Hardwaretest durchgeführt

…binden

perform_phase_switch und perform_cp_interruption setzen den CP-Pin am Ende jeweils in einer eigenen Methode auf LOW. Wenn dazwischen eine Ausnahme auftritt (z.B. weil die EVSE den Strom nicht auf 0 zurueckmeldet, oder ein GPIO-Zugriff fehlschlaegt), wurde dieser letzte Schritt bisher uebersprungen und CP blieb dauerhaft getrennt (HIGH) - das Fahrzeug erkennt den Ladepunkt dann nicht mehr, bis der Dienst neu gestartet wird.

Aenderungen:
- Der eigentliche Ablauf wandert in eine private Methode (_perform_phase_switch / _perform_cp_interruption). Die oeffentliche Methode ruft diese in einem try auf und stellt in einem finally sicher, dass CP immer wieder auf LOW gesetzt wird, auch wenn eine Ausnahme durchgereicht wird.
- Die GPIO-Pins werden jeweils einmal in der oeffentlichen Methode ermittelt und an die private Methode weitergereicht, statt sie in innerer und aeusserer Methode getrennt zu ermitteln. Das haelt beide Methoden im gleichen Muster und vermeidet, dass zwei Pin-Ermittlungen unbemerkt auseinanderlaufen koennten.
@s0170071
s0170071 marked this pull request as ready for review September 30, 2026 06:40
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant