Skip to content

PV-Laden: bei ausreichend Überschuss direkt mehrphasig statt einphasig starten - #3899

Open
seaspotter wants to merge 1 commit into
openWB:masterfrom
seaspotter:fix-pv-phase-switch-start
Open

PV-Laden: bei ausreichend Überschuss direkt mehrphasig statt einphasig starten#3899
seaspotter wants to merge 1 commit into
openWB:masterfrom
seaspotter:fix-pv-phase-switch-start

Conversation

@seaspotter

@seaspotter seaspotter commented Sep 6, 2026

Copy link
Copy Markdown
Collaborator

Der Hilfetext zur Einstellung "Pufferzeit zwischen automat. Phasenumschaltungen"
verspricht explizit:

Ist ausreichend Überschuss vorhanden, wird beim Ladestart die
Umschaltverzögerung nicht abgewartet, sondern direkt mit mehrphasiger
Ladung begonnen.

Das funktioniert bisher nur zufällig zuverlässig, nicht durchgängig. Es gibt
dafür bereits eine Logik (switch_on_timer_expired() in counter.py, Meldung
"Der Überschuss ist ausreichend, um direkt mit {} Phasen zu laden."), die beim
Ablauf der Einschaltverzögerung den Überschuss prüft und korrekt direkt mit
maximaler Phasenzahl startet – das funktioniert für sich genommen.

Das Problem liegt an einer zweiten, unabhängigen Stelle: get_phases_by_selected_chargemode()
setzt beim Ladestart im Automatikmodus unconditional phases = 1, unabhängig
vom Überschuss und unabhängig davon, auf welcher Phasenzahl die Hardware
gerade tatsächlich steht. Stand die Hardware zufällig schon auf 1 Phase,
fällt das nicht auf – switch_on_timer_expired() schaltet dann sauber in
einem Schritt auf 3 Phasen hoch. Stand die Hardware aber noch auf 3 Phasen
(z. B. Restzustand vom vorherigen Ladevorgang), wird durch das erzwungene
phases = 1 unnötig auf 1 Phase heruntergeschaltet, bevor die
Überschussprüfung überhaupt zum Zug kommt. Diese Umschaltung setzt den
Zeitstempel für die Umschaltverzögerung zurück, wodurch anschließend die
volle Pufferzeit (Standard 7 Minuten) erneut abgewartet werden muss, bevor
wieder auf 3 Phasen hochgeschaltet wird – das ist der eigentliche Bug, und er
tritt nur bei dieser Vorbedingung auf.

Konkret beobachtet: Ladepunkt wurde gestartet, obwohl bereits ausreichend
PV-Überschuss vorhanden war. Es folgte dennoch eine unnötige Umschaltung
3→1 Phase und danach eine Statusmeldung "Umschaltung von 1 auf 3 Phasen in
7 Min. 41 Sek.", bevor tatsächlich mehrphasig geladen wurde.

Der Hilfetext zur Pufferzeit zwischen automatischen Phasenumschaltungen
verspricht das schon, es gab dafür aber keine Implementierung beim
Ladestart.
@seaspotter
seaspotter requested a review from LKuemmel September 6, 2026 10:31
@seaspotter

Copy link
Copy Markdown
Collaborator Author

Ergänzung: Warum es manchmal schon funktioniert und manchmal nicht

Kurz zur Einordnung: Es gibt bereits eine bestehende
Logik in switch_on_timer_expired() (counter.py), die beim Ablauf der
Einschaltverzögerung den Überschuss prüft und ggf. direkt mit maximaler
Phasenzahl startet (Meldung "Der Überschuss ist ausreichend, um direkt mit
{} Phasen zu laden."). Diese Logik ist unverändert und funktioniert für sich
genommen korrekt.

Das Problem liegt an einer zweiten, unabhängigen Stelle: get_phases_by_selected_chargemode()
setzt bei jedem Zyklus, in dem noch nicht geladen wird, im Automatikmodus
unconditional phases = 1 – unabhängig vom Überschuss und unabhängig davon,
auf welcher Phasenzahl die Hardware gerade tatsächlich steht.

  • Steht die Hardware zufällig bereits auf 1 Phase (z. B. weil der
    Ladepunkt vorher gesperrt war oder das letzte Fahrzeug schon einphasig
    geladen hat), passiert durch das erzwungene phases = 1 nichts
    Zusätzliches. switch_on_timer_expired() schaltet dann sauber in einem
    Schritt auf 3 Phasen hoch – das sieht dann korrekt aus, ist aber Zufall,
    kein Beweis, dass alles funktioniert.
  • Steht die Hardware noch auf 3 Phasen (z. B. Restzustand vom vorherigen
    Fahrzeug/Ladevorgang), erzwingt dieselbe Stelle unnötig eine Umschaltung
    3→1, bevor switch_on_timer_expired() überhaupt zum Zug kommt. Dabei
    wird timestamp_last_phase_switch neu gesetzt, wodurch anschließend die
    volle Pufferzeit (Standard 7 Minuten) erneut abgewartet werden muss, bevor
    wieder auf 3 Phasen hochgeschaltet wird – das ist der eigentliche Bug.

Das eine Problem tritt also nur bei einer bestimmten Vorbedingung (Hardware
steht noch auf 3 Phasen) auf, weshalb es sich in Logs unterschiedlich
darstellt.

Was diese PR wirklich behebt: get_phases_by_selected_chargemode() prüft
jetzt selbst den Überschuss (dieselbe Bedingung und Formel wie in
switch_on_timer_expired()), bevor es phases = 1 erzwingt. Ist genug
Überschuss vorhanden, wird direkt die maximale Phasenzahl gewählt – dadurch
entfällt die unnötige Zwischenumschaltung auf 1 Phase in jedem Fall, auch
wenn die Hardware noch auf 3 Phasen steht. counter.py bzw.
switch_on_timer_expired() selbst wurde nicht verändert.

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