Repository navigation
Control-Pilot-Unterbrechung: state_prev statt state prüfen - #4014
Merged
LKuemmel merged 5 commits intoOct 16, 2026
Merged
Conversation
initiate_control_pilot_interruption() schloss eine CP-Unterbrechung beim Ladestart aus, sobald control_parameter.state == WAIT_FOR_USING_PHASES war (openWB#3328) - gedacht, um nach einer echten Phasenumschaltung keine doppelte CP-Umschaltung auszulösen, da die Umschaltung selbst bereits CP umschaltet. WAIT_FOR_USING_PHASES wird aber unconditional auch direkt nach Ablauf der Einschaltverzögerung erreicht (counter.py, switch_on_timer_expired(), unabhängig von einer Phasenumschaltung) - bei Ladepunkten ohne Phasenumschalt-Hardware (auto_phase_switch_hw=False) damit bei jedem PV-Ladestart, siehe Discussion openWB#3908. Neues state_prev-Feld (analog zu current_prev/charge_state_prev/ plug_state_prev) erlaubt die Unterscheidung: nur wenn der vorherige Zyklus tatsächlich noch PERFORMING_PHASE_SWITCH war, hat die Umschaltung selbst gerade erst CP umgeschaltet.
…on-wait-for-phases
Contributor
There was a problem hiding this comment.
🟡 Changes recommended
Address the pending phase-switch race, state metadata handling, and production-path test coverage.
2 open findings
What changed in this PR
This PR fixes Control-Pilot interruption detection by tracking the previous chargepoint state.
Changes:
- Adds per-cycle
state_prevtracking. - Uses it to distinguish phase-switch completions from normal charging starts.
- Adds regression tests for startup scenarios.
| File | Summary |
|---|---|
packages/control/chargepoint/chargepoint.py |
Updates interruption logic using the previous state; pending phase switches still require handling to avoid concurrent operations. |
packages/control/chargepoint/chargepoint_test.py |
Adds interruption tests, but they do not fully exercise production state tracking or phase-switch ordering. |
packages/control/chargepoint/chargepoint_data.py |
Adds state_prev; its published metadata topic lacks corresponding topic handling. |
🧠 Review effort: Lite
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
Comment on lines
+293
to
+294
| started_now = (self.data.set.current_prev == 0 and self.data.set.current != 0 and | ||
| self.data.control_parameter.state != ChargepointState.WAIT_FOR_USING_PHASES) | ||
| self.data.set.state_prev != ChargepointState.PERFORMING_PHASE_SWITCH) |
Contributor
There was a problem hiding this comment.
Kannst Du hier bitte nachschauen?
Comment on lines
+94
to
+97
| cp.data.control_parameter.state = ChargepointState.WAIT_FOR_USING_PHASES | ||
| cp.data.set.state_prev = state_prev | ||
| cp.data.set.current_prev = 0 | ||
| cp.data.set.current = 6 |
…in setdata.py behandeln
…) with pending-phase-switch fix
LKuemmel
approved these changes
Oct 16, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.


Control-Pilot-Unterbrechung wird bei PV-Ladestart oft nicht mehr ausgelöst
initiate_control_pilot_interruption()schließt eine CP-Unterbrechung beim Ladestart aus, sobaldcontrol_parameter.state == WAIT_FOR_USING_PHASESist:Das wurde in #3328 eingeführt, um nach einer echten Phasenumschaltung keine zusätzliche CP-Unterbrechung mehr auszulösen - die Umschaltung selbst schaltet CP ja bereits um. Das Problem:
WAIT_FOR_USING_PHASESwird unabhängig davon auch direkt nach Ablauf der Einschaltverzögerung erreicht (Counter.switch_on_timer_expired()), lange bevor überhaupt feststeht, ob eine Phasenumschaltung nötig ist - dieses Verhalten existiert schon seit #847, deutlich länger als #3328.Bei Ladepunkten ohne Phasenumschalt-Hardware (
auto_phase_switch_hw=False) landet man bei jedem PV-Ladestart in diesem Zustand, ohne dass je eine Phasenumschaltung stattfindet - die CP-Unterbrechung war damit dauerhaft deaktiviert.Bestätigt anhand des Logs aus Discussion #3908 (comment) (lackylacky, EV "Soul",
max_phases=1, control_pilot_interruption=True, auto_phase_switch_hw=False):Keine einzige "Control-Pilot-Unterbrechung"-Meldung im gesamten Log.
Fix
Neues Feld
state_prev(analog zucurrent_prev/charge_state_prev/plug_state_prev), einmal pro Zyklus inremember_previous_values()gesetzt. Die Prüfung fragt jetzt "war der vorherige Zyklus tatsächlich nochPERFORMING_PHASE_SWITCH" statt "ist der aktuelle ZustandWAIT_FOR_USING_PHASES" - das unterscheidet die beiden Fälle korrekt, da sie unterschiedliche vorherige Zustände haben, obwohl beide im selben aktuellen Zustand landen.