From 59964a0b31e0de1cee21cce11fa5384750387f4e Mon Sep 17 00:00:00 2001 From: SeaSpotter Date: Mon, 17 Aug 2026 21:00:09 +0200 Subject: [PATCH 1/2] Implement minimum current checks for PV-only mode Added checks for minimum current release based on PV charging mode and available power. --- packages/control/algorithm/min_current.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/packages/control/algorithm/min_current.py b/packages/control/algorithm/min_current.py index 48ce9eba6a..15656bd457 100644 --- a/packages/control/algorithm/min_current.py +++ b/packages/control/algorithm/min_current.py @@ -25,6 +25,20 @@ def set_min_current(self) -> None: cp = preferenced_chargepoints[0] missing_currents, counts = common.get_min_current(cp) if max(missing_currents) > 0: + # NEU: Bei reinem PV-Laden zusätzlich gegen dieselbe Schwelle prüfen, die auch + # für das Abschalten genutzt wird (inkl. Speicher/min_bat_soc über calc_surplus()). + # So läuft der Mindeststrom nicht an, wenn er laut derselben Logik sofort + # wieder abgeschaltet werden müsste. + if mode_tuple in CONSIDERED_CHARGE_MODES_PV_ONLY: + power_in_use, threshold = counter.calc_switch_off(cp) + if power_in_use > threshold: + common.set_current_counterdiff(-(cp.data.set.current or 0), 0, cp) + cp.set_state_and_log( + "Mindeststrom kann nicht freigegeben werden, da laut Speicher- " + "und PV-Überschussberechnung keine ausreichende Leistung zur " + "Verfügung steht.") + preferenced_chargepoints.pop(0) + continue available_currents, limit = Loadmanagement().get_available_currents( missing_currents, counter, cp) if limit.limiting_value is not None: From 7bad858ddda2754245387ffac9a881b023b163d1 Mon Sep 17 00:00:00 2001 From: SeaSpotter Date: Mon, 17 Aug 2026 21:15:17 +0200 Subject: [PATCH 2/2] Refine comments on power checks in min_current.py Updated comments for clarity regarding power availability checks during charging. --- packages/control/algorithm/min_current.py | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/packages/control/algorithm/min_current.py b/packages/control/algorithm/min_current.py index 15656bd457..8337975a5b 100644 --- a/packages/control/algorithm/min_current.py +++ b/packages/control/algorithm/min_current.py @@ -25,18 +25,19 @@ def set_min_current(self) -> None: cp = preferenced_chargepoints[0] missing_currents, counts = common.get_min_current(cp) if max(missing_currents) > 0: - # NEU: Bei reinem PV-Laden zusätzlich gegen dieselbe Schwelle prüfen, die auch - # für das Abschalten genutzt wird (inkl. Speicher/min_bat_soc über calc_surplus()). - # So läuft der Mindeststrom nicht an, wenn er laut derselben Logik sofort - # wieder abgeschaltet werden müsste. - if mode_tuple in CONSIDERED_CHARGE_MODES_PV_ONLY: + # Nur beim (Neu-)Start prüfen, ob laut Speicher-/Überschussberechnung überhaupt + # Leistung vorhanden ist. Ein bereits laufender Ladevorgang wird weiterhin von + # switch_off_check_threshold() mit der korrekten Verzögerung behandelt - hier NICHT + # eingreifen, sonst wird die switch_off_delay-Hysterese umgangen (siehe Tests + # test_surplus[switch off delay for two of three charging] und test_phase_switch). + if (mode_tuple in CONSIDERED_CHARGE_MODES_PV_ONLY and + cp.data.get.charge_state is False): power_in_use, threshold = counter.calc_switch_off(cp) if power_in_use > threshold: common.set_current_counterdiff(-(cp.data.set.current or 0), 0, cp) cp.set_state_and_log( - "Mindeststrom kann nicht freigegeben werden, da laut Speicher- " - "und PV-Überschussberechnung keine ausreichende Leistung zur " - "Verfügung steht.") + "Mindeststrom kann nicht freigegeben werden, da laut Speicher- und " + "PV-Überschussberechnung keine ausreichende Leistung zur Verfügung steht.") preferenced_chargepoints.pop(0) continue available_currents, limit = Loadmanagement().get_available_currents(