openWB / core

GNU General Public License v3.0
53 stars 71 forks source link

RfC: Automatik-Modus bei PV-Laden mit SoC < min_soc #1275

Closed Space2Man closed 11 months ago

Space2Man commented 11 months ago

Hallo Zusammen,

es gibt ja im Forum einen Eintrag, dass mit der software 2 bei SoC < min_soc zwar mit maximalem Strom aber nur einer Phase geladen wird. Ich habe mir den Code mal angeschaut und frage mich, ob nicht folgende Änderung ausreichen würde, um beim Automatik-Modus auf 3 Phasen umzuschalten, wenn SoC < min_soc?

diff --git a/packages/control/ev.py b/packages/control/ev.py
index 1b0a10a33..6220df624 100644
--- a/packages/control/ev.py
+++ b/packages/control/ev.py
@@ -392,11 +392,12 @@ class Ev:
         # verbleibender EVU-Überschuss unter Berücksichtigung der Einspeisegrenze und Speicherleistung
         all_surplus = (-evu_counter.calc_surplus() - evu_counter.data.set.released_surplus +
                        evu_counter.data.set.reserved_surplus - feed_in_yield)
-        condition_1_to_3 = (((max(get_currents) > max_current and
+        condition_1_to_3 = ((pv_charging.min_soc != 0 and soc < pv_charging.min_soc) or
+                            ((max(get_currents) > max_current and
                             all_surplus > self.ev_template.data.min_current * max_phases_ev * 230
                             - get_power) or limit == LimitingValue.UNBALANCED_LOAD.value) and
                             phases_in_use == 1)
-        condition_3_to_1 = max(get_currents) < min_current and all_surplus <= 0 and phases_in_use > 1
+        condition_3_to_1 = (pv_charging.min_soc != 0 and soc >= pv_charging.min_soc) and max(get_currents) < min_current and all_surplus <= 0 and phases_in_use > 1
         if condition_1_to_3 or condition_3_to_1:
             return True, None
         else:

Allerdings ist das mein erster Berührungspunkt mit dem OpenWB Code ...

Schöne Grüße, Space

Space2Man commented 11 months ago

Ah, zu einfach gedacht :)

FAILED control/auto_phase_switch_test.py::test_auto_phase_switch[1to3, enough power, start timer] - NameError: name 'pv_charging' is not defined
FAILED control/auto_phase_switch_test.py::test_auto_phase_switch[1to3, not enough power, start timer] - NameError: name 'pv_charging' is not defined
FAILED control/auto_phase_switch_test.py::test_auto_phase_switch[1to3, enough power, timer not expired] - NameError: name 'pv_charging' is not defined
FAILED control/auto_phase_switch_test.py::test_auto_phase_switch[1to3, not enough power, timer not expired] - NameError: name 'pv_charging' is not defined
FAILED control/auto_phase_switch_test.py::test_auto_phase_switch[1to3, enough power, timer expired] - NameError: name 'pv_charging' is not defined
FAILED control/auto_phase_switch_test.py::test_auto_phase_switch[3to1, not enough power, start timer] - NameError: name 'pv_charging' is not defined
FAILED control/auto_phase_switch_test.py::test_auto_phase_switch[3to1, not enough power, timer not expired] - NameError: name 'pv_charging' is not defined
FAILED control/auto_phase_switch_test.py::test_auto_phase_switch[3to1, enough power, timer not expired] - NameError: name 'pv_charging' is not defined
FAILED control/auto_phase_switch_test.py::test_auto_phase_switch[3to1, not enough power, timer expired] - NameError: name 'pv_charging' is not defined

Edit: oder liegt es daran, dass ich in direkt control getestet habe:

PYTHONPATH=control python -m pytest control --log-cli-level=DEBUG

MartinRinas commented 11 months ago

Stell das doch gleich als PR ein, das hilf beim review und testen.

Space2Man commented 11 months ago

Ja, das mache ich, sobald ich verstanden habe, wo ich an der Stelle den aktuellen SoC und den min_soc her bekomme :)

Space2Man commented 11 months ago

Ok, scheinbar bekommt man den min_soc an der Stelle über self.charge_template.data.chargemode.pv_charging.min_soc ... dann schaue ich mir mal die Tests an ...

Space2Man commented 11 months ago

Ok, ich habe mal einen initialen PR erstellt:

1276

Allerdings fehlen noch dedizierte Tests, die überprüfen, ob wirklich auf 3 / mehrere Phasen gewechselt, wenn soc < min_soc.

ACHTUNG: ich konnte es auf meiner OpenWB nicht testen, da ich eine offizielle OpenWB habe und keinen Raspberry Pi >= 3.

Space2Man commented 11 months ago

PR ist offen, daher weitere Diskussion besser dort ...