SolarEdge HybridWechselrichter mit Batterie steuern

…ich schon wieder.
Es hat sich gezeigt, dass diese Effekte nur im Bereich zwischen 100 und 700W Ladeleistung auftreten. Den Grund kenne ich immer noch nicht. Irgendeine Komponente vom WR liefert falsche Daten oder zu spät. Ich habe immer noch keine Ahnung warum.
Als Interims-Lösung habe ich den Laderegler weiter “kastriert” : Es werden nur Änderungen der Ladeleistung <100W direkt akzeptiert. Ansonsten wird der Wert aus der Average-Klasse gesetzt.
Mir ist klar, dass ich damit direkt gegen den PID-Regler arbeite, aber das Ergebnis spricht für diese Maßnahme. Die Regelung ist jetzt recht “smooth”.

Ein Umschalten der Beladung von -100W auf 300W und zurück innerhalb von 2 Sekunden kann nicht gesund für die Batterie sein.

Hallo Ralph,

Der Workaround funktioniert weiterhin gut. Bei dem Wetter ist es leider etwas schwierig zu testen - der Ertrag ändert sich einfach zu selten.
Anyway…ich habe beim Balancing-Controller ein DebugLog eingestellt. Somit sieht man was der Solver-Klasse übergeben wird.
Vielleicht hast Du ja auch mal Zeit und Lust das auszuprobieren. 4 Augen sehen bekanntlich mehr :wink:

Gruß
klinki

Hi Ralph,

Hast Du meine SolarEdge-Komponente eigentlich mittlerweile im Einsatz?
Über ein Feedback würde ich mich sehr freuen!

Ich würde schon ganz gerne bald einen PullRequest daraus erstellen.
Wenn aktuell nicht gerade ein Projekt das nächste jagen würde, hätte ich damit schon begonnen.

Gruß,
klinki

Hallo klinki,

ich fange gerade erst an mich mit open EMS zu beschäftigen um damit unser Haus entsprechend zu steuern. Bisher läuft bei mir EVCC und funktioniert mit 3 Wallboxen auch problemlos, aber ich möchte zusätzlich über flexible Strompreise von Tibber auch meinen Hausspeicher füllen und automatisiert unsere Daikin Klimaanlagen zum Heizen und Kühlen ansteuern. Der erste Schritt ist da natürlich erstmal meine SolarEdge Anlage richtig einzulesen und zu visualisieren. Modbusverbindung klappt schon, aber die Werte passen nicht. Ein bekanntes Problem wie ich hier gelesen habe. Daher würde ich natürlich sehr gerne von deiner tollen Arbeit profitieren, die ja scheinbar schon sehr gut funktioniert :slight_smile:

Kannst du schon abschätzen wann du den PullRequest stellst? Wird das zeitnah sein oder sollte ich besser erstmal händisch deinen Code bei mir rein kopieren? Da github und open EMS noch recht neu für mich ist, will ich jetzt ungern ganz viel Handarbeit machen (weil fehleranfälliger) wenn ich das in ein paar Tagen auch irgendwie “automatisiert” zur Verfügung hätte. Wenn das aber voraussichtlich länger als 2 Wochen noch dauert, dann wage ich vielleicht doch erstmal den manuellen Versuch :slight_smile:

Danke und viele Grüße,
Rico

Hi Rico und willkommen in der Community,

Aktuell habe ich noch ein sehr “ulkiges” Problem mit der ActivePower vom ESS. Kommt nur wirklich zum tragen, wenn eine zweite Erzeugungsanlage mitspielt.

Leider habe ich es auch immer noch nicht geschafft meinen Code vernünftig aufzuräumen und zu dokumentieren. OpenEMS ist (zu Recht) ziemlich streng was den Aufbau anbelangt. Mit dem PullRequest wird es also noch etwas dauern. Du kannst Dich aber gerne an meinem Repo bedienen. Dieses ist auch aktuell.

Ich unterstütze auch gerne bei der Inbetriebnahme!

Von Daikin habe ich bisher eine Anlage - in ein paar Wochen kommt die nächste. Bisher steuere ich erfolgreich über mein SmartHome (namentlich: fhem). Eine Anbindung an´s OpenEMS strebe ich aber ebenfalls an. Vielleicht können wir uns zusammentun?!
Es ist recht sympathisch, dass die Dinger auch ohne Cloud-Quatsch steuerbar sind…

Gruß,
klinki

Hallo Klinki,

ich konnte es tatsächlich nicht abwarten und habe gestern Abend dann doch schon angefangen mit deinem Code :smiley:

Und deine Hilfe müsste ich da tatsächlich jetzt schon in Anspruch nehmen… Ich habe folgendes konfiguriert:

  • Bridge Modbus/TCP
  • Controller Ess Balancing
  • Controller Ess Emergency Capacity Reserve
  • Meter SolarEdge
  • SolarEdge DC Charger
  • SolarEdge Hybrid Inverter

Ich bekomme leider folgende Fehlermeldung:

2024-02-21T07:48:54,759 [_cycle ] INFO [ebuglog.ControllerDebugLogImpl] [ctrlDebugLog0] _componentManager[Defective:ctrlEmergencyCapacityReserve1[Unsatisfied reference for ess ((enabled=true))] ess1[Unsatisfied reference for timedata] charger1[Unsatisfied reference for ess] ctrlBalancing0[Unsatisfied reference for ess ((enabled=true))]|State:FAULT: A configured OpenEMS Component was not activated] _sum[State:Fault Grid:821 W Consumption:821 W] meter0[L:821 W] modbus1[CycleDelay:892 ms]
2024-02-21T07:48:55,768 [_cycle ] WARN [cket.WsData$SubscribedChannels] Unable to read value for Channel [charger1/ActualPower]
2024-02-21T07:48:55,768 [_cycle ] WARN [cket.WsData$SubscribedChannels] Unable to read value for Channel [ctrlEmergencyCapacityReserve1/_PropertyIsReserveSocEnabled]
2024-02-21T07:48:55,768 [_cycle ] WARN [cket.WsData$SubscribedChannels] Unable to read value for Channel [ctrlEmergencyCapacityReserve1/_PropertyReserveSoc]
2024-02-21T07:48:55,768 [_cycle ] WARN [cket.WsData$SubscribedChannels] Unable to read value for Channel [ess1/Capacity]
2024-02-21T07:48:55,768 [_cycle ] WARN [cket.WsData$SubscribedChannels] Unable to read value for Channel [ess1/DcDischargePower]
2024-02-21T07:48:55,768 [_cycle ] WARN [cket.WsData$SubscribedChannels] Unable to read value for Channel [ess1/Soc]

Hast du eine Idee woran das liegen könnte? Was ich noch Konfigurieren muss damit es läuft?

Übrigens habe ich auch eine zweite Erzeugeranlage (einen zweiten SolarEdge Wechselrichter). Den habe ich aber noch nicht angebunden. Das mache ich erst wenn der Rest läuft. Meine Logik im Haus läuft bisher über Gira Homeserver (KNX-Installation). Will mir aber auch mal Homey Pro genauer anschauen, da man hier verdammt viele Schnittstellen zu anderen Produkten bekommt. Eine meiner 5 Daikingeräte habe ich mit einer KNX-Schnittstelle ausgestattet, die anderen haben bisher nur das von Hause verbaute WLAN-Modul. So kann ich gut experimentieren wie ich es am einfachsten und kostengünstigsten ansteuern kann. Ich möchte bei mir nämlich auch alles lokal im Heimnetz steuern und nur von Außen zugreifen können. Nicht aber immer auf die Cloud angewiesen zu sein.

Viele Grüße,
Rico

Moin Rico,

Hast Du schon einen Timedata-Provider am Start? Ich selbst nehme InfluxDB v2.x.
Das Gridmeter scheint ja schon mal da zu sein - die anderen Geräte (WR und ESS) aber noch nicht.
Vielleicht als Hinweis: Mein SolarEdge-WR lässt nur eine Modbus-Verbindung zu. Bei mehreren simultanen streikt er…

Welche Meldungen bekommst Du denn beim Start von EMS? Das er die Geräte nicht findet, war sicher auch schon früher im Log sichtbar.

Gerade heute morgen habe ich noch die Geschichte mit ActivePower vom ESS gefixt. Der Code ist bis Mittag im Repo. Sieht aber schon mal ganz gut aus.
Ich war einigermaßen angepi**t als ich die Ursache gefunden hatte.

Jaaa…KNX…könnte ich nochmal neu bauen, würde ich das auch nehmen. Es gibt für die Daikins wohl auch Modbus-Adapter. Dazu habe ich aber keinen Preis und das Projekt aus Zeitgründen auch erstmal nach hinten verlagert. Müsste sonst das halbe Schlafzimmer aufreißen um Leitungen zu ziehen.

Gruß,
Klinki

Hallo Klinki,

verrückt… Ich habe natürlich noch kein Timedata-Provider gehabt (konnte mit dem Begriff gar nichts anfangen, aber bei genauerem hinsehen hätte ich das natürlich erkennen können :see_no_evil:)
Parallel wurde heute mein Solaredge Smartmeter ausgebaut und ich bekam meine Backupbox die den Zähler auch enthält. Scheint als wenn das Auslesen vom Zähler weiterhin funktioniert. Und dazu jetzt auch alles andere.

So sieht das jetzt aus:

2024-02-21T19:29:11,704 [_cycle ] INFO [ebuglog.ControllerDebugLogImpl] [ctrlDebugLog0] _sum[State:Ok Ess SoC:9 %|L:-93 W Grid:880 W Production:0 W Consumption:787 W] charger1[DC Power Scale:-2|DC Power:-105|DC DisCharge Power:0|DC PvProduction Power:0|Avg Power:0|Actual Power:0 W] ctrlBalancing0[Grid Power:880 W|ESS Power:-93 W|Calculated Power:787] ess1[SoC:9 %|L:-93 W|ChargeEnergy:1|DisChargeEnergy:2096361|DcDisChargePower:0|DcDisChargeEnergy:0|DcChargeEnergy:0;|ControlMode 1|ChargePolicy 1|DefaultMode 7|RemoteControlMode 65535
|ChargePowerWantedAvg 0|ChargePowerWantedOriginal 0|ChargePowerWanted 0 W
|ChargePower 5000|DischargePower 5000|CommandTimeout 60|On-Grid|Feed-In:] meter0[L:880 W] modbus1[CycleDelay:521 ms]

Interessant ist, dass da ein SoC von 9% steht, in der App sind es aber 10% (und das auch als Reserve eingestellt). Ich werde die Abweichung mal beobachten wenn der Speicher beladen wird.

Der Fix mit dem “ActivePower” bezieht sich darauf wenn man das Notstrom-Reservelimit ändert?

Mal schauen wie es morgen aussieht wenn die PV Anlage produziert :slight_smile:

Zum KNX: Hätte ich nicht damals neu gebaut und das auch noch in Holzständerweise wo man sehr einfach viele, viele Kabel verlegen kann, dann hätte ich das auch nicht gemacht. Aber so bin ich sehr froh drüber es zu haben :wink:

Gruß, Rico

aller Anfang ist schwer und für die kurze Zeit bist Du weit gekommen. Freut mich, dass es zu funktionieren scheint!

Das mit dem ActivePower: Dies ist quasi die Be-/Entladung über die AC-Seite. Eine AC-Beladung des Speichers hast Du z.B. wenn Du den Controller für eine feste Be- oder Entladung nutzt. Oder eben bei den kommenden Geschichten mit den zeitvariablen Tarifen.
Problem war, dass das (Modbus-)Register für die AC-Beladung seitens SolarEdge keine negativen Werte angenommen hat. Warum auch immer. Ist jedenfalls ein signed int. Wenn also AC-seitig geladen wird, wirkt es für das Grid-Meter wie ein Verbraucher. Der wird aber nicht in der Übersicht von OpenEMS angezeigt und erscheint als “Sonstiger”. Die Verbraucher-Seite in ihrer Summe ist sozusagen der letzte Wert in der Kette der berechnet wird.
Der Effekt war halt, dass, wenn sich der Speicher “einschwingt” und auch kurzzeitig AC-seitig beladen wird, der “Sonstige” Verbrauch ausgewiesen wurde. Außerdem funktioniert dann auch der Energie-Zähler für die AC-Beladung des ESS nicht. Umgekehrt gibt es für die ESS-Entladung, PV-Ertrag ein Register welches die Gesamtenergie enthält. In der App ist das dann die Gesamt-Produktion.

Man sollte meinen, dass die AC-seitige Beladung der Batterie ein Sonderfall ist. Stimmt auch - bis die variablen Tarife kommen. Oder man betreibt mit dem ESS eine Lastspitzenkappung. Dann braucht´s das auch.
Weiter wurden die Verbräuche auch nicht sauber ermittelt wenn noch ein zweiter Erzeuger am Start ist. Dabei ist mir das auch erst aufgefallen.

Ich hoffe, mich einigermaßen verständlich ausgedrückt zu haben. Die interne Verrechnung von Werten bei einem hybriden System ist leider manchmal ziemlich tricky. Da hatte der @stefan.feilmeier auch ein paar gute Posts zu geschrieben die Licht in´s Dunkle brachten.

Das mit der Abweichung beim SOC verstehe ich auch nicht so ganz. Die Werte kommen jedenfalls von SolarEdge und sind nicht berechnet.

Backupbox…dann hast Du wahrscheinlich auch mein Nachfolgemodell. Da bin ich etwas neidisch. Dafür brauchst Du ja auch den Controller für die Reserve. Das ActivePower-Problem hatte damit aber nix zu tun.

Bin mal gespannt wie es bei Dir weitergeht. Vielleicht können wir uns auch mal gemeinsam den Daikins widmen.

Gruß,
klinki

Danke :wink:

Bevor ich das Thema mit den zeitvariablen Tarifen beginne und mich mit dem “ESS Time-of-Use Tariff” Controller beschäftige, wollte ich erstmal schauen ob ich meinen Speicher zum “manuellen Laden” überreden kann. Bzw. überhaupt die Kommunikation mit diesem. Ich habe beim WR den Haken bei “Read-Only mode” raus genommen.

Und dann müsste ich doch im UI unter Speichersystem:

Eine Änderung an den Speicher schicken können, wenn ich den Regler hier verschiebe, richtig?

Das klappt leider nicht bei mir. Ich bekomme da nur sehr merkwürdige Meldungen im Log bei denen er den EmergencyCapacityReserve Controller 2x neu startet und dann irgendwie anfängt Werte zu schreiben, die immer um 100W reduziert werden bis er bei 0 angekommen ist.

2024-02-22T09:05:52,180 [_cycle ] INFO [enems.edge.ess.power.api.Power] [Channel [SetActivePowerLessOrEquals]] increasing requested [0 W] to minimum power [10000 W] for [ess1P]
2024-02-22T09:05:52,798 [d89bab7)] INFO [onent.AbstractOpenemsComponent] [ctrlEmergencyCapacityReserve1] Deactivate Controller.Ess.EmergencyCapacityReserve
2024-02-22T09:05:52,802 [d89bab7)] INFO [onent.AbstractOpenemsComponent] [ctrlEmergencyCapacityReserve1] Activate Controller.Ess.EmergencyCapacityReserve
2024-02-22T09:05:52,813 [d89bab7)] INFO [onent.AbstractOpenemsComponent] [ctrlEmergencyCapacityReserve1] Deactivate Controller.Ess.EmergencyCapacityReserve
2024-02-22T09:05:52,816 [d89bab7)] INFO [onent.AbstractOpenemsComponent] [ctrlEmergencyCapacityReserve1] Activate Controller.Ess.EmergencyCapacityReserve
2024-02-22T09:05:53,186 [_cycle ] INFO [ebuglog.ControllerDebugLogImpl] [ctrlDebugLog0] _sum[State:Ok Ess SoC:9 %|L:66 W Grid:11737 W Production:54 W Consumption:11803 W] charger1[DC Power Scale:-2|DC Power:67|DC DisCharge Power:0|DC PvProduction Power:67|Avg Power:59|Actual Power:54 W] ctrlBalancing0[Grid Power:11737 W|ESS Power:66 W|Calculated Power:11803] ess1[SoC:9 %|L:66 W|ChargeEnergy:114|DisChargeEnergy:2096401|DcDisChargePower:0|DcDisChargeEnergy:806|DcChargeEnergy:104;|ControlMode 4|ChargePolicy 1|DefaultMode 7|RemoteControlMode 4
|ChargePowerWantedAvg 10000|ChargePowerWantedOriginal 10000|ChargePowerWanted 10000 W
|ChargePower 0|DischargePower 10000|CommandTimeout 60|On-Grid|Feed-In:] meter0[L:11737 W] modbus1[CycleDelay:481 ms] timeOfUseTariff0[Price:0.2899 EUR/kWh]
2024-02-22T09:05:53,186 [_cycle ] INFO [temachine.AbstractStateMachine] [ctrlEmergencyCapacityReserve1] Changing StateMachine from [NO_LIMIT] to [ABOVE_RESERVE_SOC]
2024-02-22T09:05:54,201 [_cycle ] INFO [ebuglog.ControllerDebugLogImpl] [ctrlDebugLog0] _sum[State:Ok Ess SoC:9 %|L:66 W Grid:11737 W Production:67 W Consumption:11803 W] charger1[DC Power Scale:-2|DC Power:71|DC DisCharge Power:0|DC PvProduction Power:71|Avg Power:66|Actual Power:67 W] ctrlBalancing0[Grid Power:11737 W|ESS Power:66 W|Calculated Power:11803] ess1[SoC:9 %|L:66 W|ChargeEnergy:114|DisChargeEnergy:2096401|DcDisChargePower:0|DcDisChargeEnergy:806|DcChargeEnergy:104;|ControlMode 4|ChargePolicy 1|DefaultMode 7|RemoteControlMode 4
|ChargePowerWantedAvg 10000|ChargePowerWantedOriginal 10000|ChargePowerWanted 10000 W
|ChargePower 0|DischargePower 10000|CommandTimeout 60|On-Grid|Feed-In:] meter0[L:11737 W] modbus1[CycleDelay:481 ms] timeOfUseTariff0[Price:0.2899 EUR/kWh]
2024-02-22T09:05:54,201 [_cycle ] INFO [temachine.AbstractStateMachine] [ctrlEmergencyCapacityReserve1] Changing StateMachine from [ABOVE_RESERVE_SOC] to [AT_RESERVE_SOC]
2024-02-22T09:05:54,201 [_cycle ] INFO [enems.edge.ess.power.api.Power] [Channel [SetActivePowerLessOrEquals]] increasing requested [9900 W] to minimum power [10000 W] for [ess1P]
2024-02-22T09:05:55,201 [_cycle ] INFO [ebuglog.ControllerDebugLogImpl] [ctrlDebugLog0] _sum[State:Ok Ess SoC:9 %|L:70 W Grid:11772 W Production:71 W Consumption:11842 W] charger1[DC Power Scale:-2|DC Power:59|DC DisCharge Power:0|DC PvProduction Power:59|Avg Power:65|Actual Power:71 W] ctrlBalancing0[Grid Power:11772 W|ESS Power:70 W|Calculated Power:11842] ess1[SoC:9 %|L:70 W|ChargeEnergy:114|DisChargeEnergy:2096401|DcDisChargePower:0|DcDisChargeEnergy:806|DcChargeEnergy:104;|ControlMode 4|ChargePolicy 1|DefaultMode 7|RemoteControlMode 4
|ChargePowerWantedAvg 10000|ChargePowerWantedOriginal 10000|ChargePowerWanted 10000 W
|ChargePower 0|DischargePower 10000|CommandTimeout 60|On-Grid|Feed-In:] meter0[L:11772 W] modbus1[CycleDelay:481 ms] timeOfUseTariff0[Price:0.2899 EUR/kWh]
2024-02-22T09:05:55,202 [_cycle ] INFO [temachine.AbstractStateMachine] [ctrlEmergencyCapacityReserve1] Changing StateMachine from [AT_RESERVE_SOC] to [BELOW_RESERVE_SOC]
2024-02-22T09:05:55,202 [_cycle ] INFO [enems.edge.ess.power.api.Power] [Channel [SetActivePowerLessOrEquals]] increasing requested [9800 W] to minimum power [10000 W] for [ess1P]
2024-02-22T09:05:56,213 [_cycle ] INFO [ebuglog.ControllerDebugLogImpl] [ctrlDebugLog0] _sum[State:Ok Ess SoC:9 %|L:52 W Grid:11786 W Production:59 W Consumption:11838 W] charger1[DC Power Scale:-2|DC Power:45|DC DisCharge Power:0|DC PvProduction Power:45|Avg Power:55|Actual Power:59 W] ctrlBalancing0[Grid Power:11786 W|ESS Power:52 W|Calculated Power:11838] ess1[SoC:9 %|L:52 W|ChargeEnergy:114|DisChargeEnergy:2096401|DcDisChargePower:0|DcDisChargeEnergy:806|DcChargeEnergy:104;|ControlMode 4|ChargePolicy 1|DefaultMode 7|RemoteControlMode 4
|ChargePowerWantedAvg 10000|ChargePowerWantedOriginal 10000|ChargePowerWanted 10000 W
|ChargePower 0|DischargePower 10000|CommandTimeout 60|On-Grid|Feed-In:] meter0[L:11786 W] modbus1[CycleDelay:481 ms] timeOfUseTariff0[Price:0.2899 EUR/kWh]
2024-02-22T09:05:56,213 [_cycle ] INFO [temachine.AbstractStateMachine] [ctrlEmergencyCapacityReserve1] Changing StateMachine from [BELOW_RESERVE_SOC] to [FORCE_CHARGE]
2024-02-22T09:05:56,213 [_cycle ] INFO [enems.edge.ess.power.api.Power] [Channel [SetActivePowerLessOrEquals]] increasing requested [9300 W] to minimum power [10000 W] for [ess1P]
2024-02-22T09:05:57,216 [_cycle ] INFO [ebuglog.ControllerDebugLogImpl] [ctrlDebugLog0] _sum[State:Ok Ess SoC:9 %|L:44 W Grid:11777 W Production:45 W Consumption:11821 W] charger1[DC Power Scale:-2|DC Power:56|DC DisCharge Power:0|DC PvProduction Power:56|Avg Power:52|Actual Power:45 W] ctrlBalancing0[Grid Power:11777 W|ESS Power:44 W|Calculated Power:11821] ess1[SoC:9 %|L:44 W|ChargeEnergy:114|DisChargeEnergy:2096401|DcDisChargePower:0|DcDisChargeEnergy:806|DcChargeEnergy:104;|ControlMode 4|ChargePolicy 1|DefaultMode 7|RemoteControlMode 4
|ChargePowerWantedAvg 10000|ChargePowerWantedOriginal 10000|ChargePowerWanted 10000 W
|ChargePower 0|DischargePower 10000|CommandTimeout 60|On-Grid|Feed-In:] meter0[L:11777 W] modbus1[CycleDelay:481 ms] timeOfUseTariff0[Price:0.2899 EUR/kWh]
2024-02-22T09:05:57,217 [_cycle ] INFO [enems.edge.ess.power.api.Power] [Channel [SetActivePowerLessOrEquals]] increasing requested [9200 W] to minimum power [10000 W] for [ess1P]
2024-02-22T09:05:58,216 [_cycle ] INFO [ebuglog.ControllerDebugLogImpl] [ctrlDebugLog0] _sum[State:Ok Ess SoC:9 %|L:55 W Grid:11768 W Production:56 W Consumption:11823 W] charger1[DC Power Scale:-2|DC Power:45|DC DisCharge Power:0|DC PvProduction Power:45|Avg Power:49|Actual Power:56 W] ctrlBalancing0[Grid Power:11768 W|ESS Power:55 W|Calculated Power:11823] ess1[SoC:9 %|L:55 W|ChargeEnergy:114|DisChargeEnergy:2096401|DcDisChargePower:0|DcDisChargeEnergy:806|DcChargeEnergy:104;|ControlMode 4|ChargePolicy 1|DefaultMode 7|RemoteControlMode 4
|ChargePowerWantedAvg 10000|ChargePowerWantedOriginal 10000|ChargePowerWanted 10000 W
|ChargePower 0|DischargePower 10000|CommandTimeout 60|On-Grid|Feed-In:] meter0[L:11768 W] modbus1[CycleDelay:481 ms] timeOfUseTariff0[Price:0.2899 EUR/kWh]
2024-02-22T09:05:58,216 [_cycle ] INFO [enems.edge.ess.power.api.Power] [Channel [SetActivePowerLessOrEquals]] increasing requested [9100 W] to minimum power [10000 W] for [ess1P]
2024-02-22T09:05:59,229 [_cycle ] INFO [ebuglog.ControllerDebugLogImpl] [ctrlDebugLog0] _sum[State:Ok Ess SoC:9 %|L:45 W Grid:11768 W Production:45 W Consumption:11813 W] charger1[DC Power Scale:-2|DC Power:52|DC DisCharge Power:0|DC PvProduction Power:52|Avg Power:50|Actual Power:45 W] ctrlBalancing0[Grid Power:11768 W|ESS Power:45 W|Calculated Power:11813] ess1[SoC:9 %|L:45 W|ChargeEnergy:114|DisChargeEnergy:2096401|DcDisChargePower:0|DcDisChargeEnergy:806|DcChargeEnergy:104;|ControlMode 4|ChargePolicy 1|DefaultMode 7|RemoteControlMode 4
|ChargePowerWantedAvg 10000|ChargePowerWantedOriginal 10000|ChargePowerWanted 10000 W
|ChargePower 0|DischargePower 10000|CommandTimeout 60|On-Grid|Feed-In:] meter0[L:11768 W] modbus1[CycleDelay:487 ms] timeOfUseTariff0[Price:0.2899 EUR/kWh]
2024-02-22T09:05:59,230 [_cycle ] INFO [enems.edge.ess.power.api.Power] [Channel [SetActivePowerLessOrEquals]] increasing requested [9000 W] to minimum power [10000 W] for [ess1P]
2024-02-22T09:06:00,243 [_cycle ] INFO [ebuglog.ControllerDebugLogImpl] [ctrlDebugLog0] _sum[State:Ok Ess SoC:9 %|L:56 W Grid:12056 W Production:52 W Consumption:12112 W] charger1[DC Power Scale:-2|DC Power:57|DC DisCharge Power:0|DC PvProduction Power:57|Avg Power:52|Actual Power:52 W] ctrlBalancing0[Grid Power:12056 W|ESS Power:56 W|Calculated Power:12112] ess1[SoC:9 %|L:56 W|ChargeEnergy:114|DisChargeEnergy:2096401|DcDisChargePower:0|DcDisChargeEnergy:806|DcChargeEnergy:104;|ControlMode 4|ChargePolicy 1|DefaultMode 7|RemoteControlMode 4
|ChargePowerWantedAvg 10000|ChargePowerWantedOriginal 10000|ChargePowerWanted 10000 W
|ChargePower 0|DischargePower 10000|CommandTimeout 60|On-Grid|Feed-In:] meter0[L:12056 W] modbus1[CycleDelay:487 ms] timeOfUseTariff0[Price:0.2899 EUR/kWh]

den Zwischenteil erspare ich dir mal und so sieht es am Ende aus:

2024-02-22T09:07:28,045 [_cycle ] INFO [enems.edge.ess.power.api.Power] [Channel [SetActivePowerLessOrEquals]] increasing requested [200 W] to minimum power [10000 W] for [ess1P]
2024-02-22T09:07:29,048 [_cycle ] INFO [ebuglog.ControllerDebugLogImpl] [ctrlDebugLog0] _sum[State:Ok Ess SoC:9 %|L:53 W Grid:11794 W Production:53 W Consumption:11847 W] charger1[DC Power Scale:-2|DC Power:52|DC DisCharge Power:0|DC PvProduction Power:52|Avg Power:51|Actual Power:53 W] ctrlBalancing0[Grid Power:11794 W|ESS Power:53 W|Calculated Power:11847] ess1[SoC:9 %|L:53 W|ChargeEnergy:114|DisChargeEnergy:2096402|DcDisChargePower:0|DcDisChargeEnergy:806|DcChargeEnergy:104;|ControlMode 4|ChargePolicy 1|DefaultMode 7|RemoteControlMode 4
|ChargePowerWantedAvg 10000|ChargePowerWantedOriginal 10000|ChargePowerWanted 10000 W
|ChargePower 0|DischargePower 10000|CommandTimeout 60|On-Grid|Feed-In:] meter0[L:11794 W] modbus1[CycleDelay:472 ms] timeOfUseTariff0[Price:0.2899 EUR/kWh]
2024-02-22T09:07:29,048 [_cycle ] INFO [enems.edge.ess.power.api.Power] [Channel [SetActivePowerLessOrEquals]] increasing requested [100 W] to minimum power [10000 W] for [ess1P]
2024-02-22T09:07:30,049 [_cycle ] INFO [ebuglog.ControllerDebugLogImpl] [ctrlDebugLog0] _sum[State:Ok Ess SoC:9 %|L:46 W Grid:11918 W Production:52 W Consumption:11964 W] charger1[DC Power Scale:-2|DC Power:65|DC DisCharge Power:0|DC PvProduction Power:65|Avg Power:57|Actual Power:52 W] ctrlBalancing0[Grid Power:11918 W|ESS Power:46 W|Calculated Power:11964] ess1[SoC:9 %|L:46 W|ChargeEnergy:114|DisChargeEnergy:2096402|DcDisChargePower:0|DcDisChargeEnergy:806|DcChargeEnergy:104;|ControlMode 4|ChargePolicy 1|DefaultMode 7|RemoteControlMode 4
|ChargePowerWantedAvg 10000|ChargePowerWantedOriginal 10000|ChargePowerWanted 10000 W
|ChargePower 0|DischargePower 10000|CommandTimeout 60|On-Grid|Feed-In:] meter0[L:11918 W] modbus1[CycleDelay:472 ms] timeOfUseTariff0[Price:0.2899 EUR/kWh]
2024-02-22T09:07:30,050 [_cycle ] INFO [enems.edge.ess.power.api.Power] [Channel [SetActivePowerLessOrEquals]] increasing requested [0 W] to minimum power [10000 W] for [ess1P]
2024-02-22T09:07:31,058 [_cycle ] INFO [ebuglog.ControllerDebugLogImpl] [ctrlDebugLog0] _sum[State:Ok Ess SoC:9 %|L:64 W Grid:11949 W Production:65 W Consumption:12013 W] charger1[DC Power Scale:-2|DC Power:65|DC DisCharge Power:0|DC PvProduction Power:65|Avg Power:62|Actual Power:65 W] ctrlBalancing0[Grid Power:11949 W|ESS Power:64 W|Calculated Power:12013] ess1[SoC:9 %|L:64 W|ChargeEnergy:114|DisChargeEnergy:2096402|DcDisChargePower:0|DcDisChargeEnergy:806|DcChargeEnergy:104;|ControlMode 4|ChargePolicy 1|DefaultMode 7|RemoteControlMode 4
|ChargePowerWantedAvg 10000|ChargePowerWantedOriginal 10000|ChargePowerWanted 10000 W
|ChargePower 0|DischargePower 10000|CommandTimeout 60|On-Grid|Feed-In:] meter0[L:11949 W] modbus1[CycleDelay:0 ms] timeOfUseTariff0[Price:0.2899 EUR/kWh]
2024-02-22T09:07:31,058 [_cycle ] INFO [enems.edge.ess.power.api.Power] [Channel [SetActivePowerLessOrEquals]] increasing requested [0 W] to minimum power [10000 W] for [ess1P]

Funktioniert das bei dir? Oder hast du eine spontane Idee wo ich vielleicht noch was konfigurieren muss? Beim Speicher selbst ändert sich nix. Also in der SolarEdge App wird an der eingestellten Notstromreserve nichts geändert und auch eine kurzzeitige Ladung ist nicht erkennbar.

Meine Backupbox ist soweit ich weiß ein nagelneues Modell. Ich musste ein halbes Jahr warten, weil sie noch nicht auf dem Markt war.
Mit Controller für die Reserve meinst du den hier?

Wenn ich das System so halbwegs durchschaut habe, dann würde es mich sehr freuen wenn ich mich bei einer Daikin-Steuerung richtig einbringen könnte :slight_smile: Ich habe mal Informatik studiert (aber lange her) und arbeite eigentlich aktuell primär mit Datenbanken und weniger im echten programmieren. Aber so die Grundkonzepte sollte ich hoffentlich noch ganz gut verstehen :wink:

Viele Grüße, Rico

hm, Du bist also bei ca. 9%, Reserve soll 20% sein und hast aktuell einen Bezug von 12kW? Ist das so?
der Controller für die Reserve sorgt letzten Endes dafür, dass der Speicher nicht unter 20% entladen wird. Bei dem Bezug wird der nicht aktiv laden.

Du kannst den Speicher über den “Controller Ess Fix Active Power” zu einer Be- oder Entladung zwingen. Dazu muss aber der Controller zur Eigenverbrauchs-Optimierung (Controller Ess Balancing) deaktiviert sein.

Gruß,
klinki

Ok, danke. Ich schau mir die Controller mal an.

Ja, Bezug von 12 kW passt. Ich musste gerade das Auto laden. Reserve laut SolarEdge-App liegt bei 10% und Speicher SoC ebenfalls (hier die merkwürdige Abweichung aber vielleicht sind das irgendwelche Rundungsfehler im Hintergrund von SolarEdge). Ich hatte versucht das Limit über openEMS auf 20% zu setzen, aber das kommt in der SolarEdge App leider nicht an.

Liebe Grüße,
Rico

die App ist mehr oder weniger “doof”. Kennt halt nur die Daten der SolarEdge-Geräte. Konfigurieren kann man dort, ohne Fachmann-Zugang, auch herzlich wenig.
Aber das ist bei anderen Herstellern nicht anders.

Daher ist die Darstellung in der App auch etwas befremdlich, wenn ein Nicht-SolarEdge-Erzeuger im System ist.

Ich kann über meine App übrigens keine Reserve einstellen. Daher kann ich Dir dazu nicht viel sagen.
Das Limit von 20% ist quasi in der Logik von OpenEMS hinterlegt. Es wird kein Modbus-Register Richtung SE geschrieben oder ähnliches.

Noch ein Hinweis: OpenEMS übernimmt die ESS-Steuerung durch das Setzen des “ControlMode” Registers. Ich habe eine Fallback-Funktion eingebaut, die den Speicher nach 120Sekunden (glaube ich) wieder in den Standard-Modus zurückschickt. Somit geht das ESS wieder in die Eigenverbrauchsoptimierung falls OpenEMS mal inaktiv sein sollte.
Das siehst Du aber im Code…

Ahh… Ok, jetzt verstehe ich das mit der Reserve in OpenEMS. Da ich das Limit bei mir in der App setzen kann (entweder habe ich da mehr Rechte oder es liegt an der neueren Backupbox) dachte ich, dass hier nur der Befehl an den Speicher geschickt wird. Aber er benutzt das nur für die interne Logik und übernimmt die gesamte Steuerung solange OpenEMS aktiv ist. So langsam verstehe ich den Aufbau besser. Ich danke dir sehr für deine Unterstützung. :slight_smile:

Ich versuche jetzt als nächstes meinen 2. Wechselrichter einzubinden. Das ist ein “normaler” (also ohne Speicher). Da muss ich doch den “PV-Inverter SolarEdge” verwenden, richtig? Ich hatte da ein wenig mit rumgespielt und immer Java-Fehlermeldungen bekommen (ich hatte den code auch aus deinem Repo genommen - das unterscheidet sich ja vom globalen). Muss mir das aber am Wochenende nochmal in Ruhe anschauen. Durch mein rumspielen habe ich trotz wieder Löschen und mehrmals neu Starten von openEMS das Problem gehabt, dass er die ganze Zeit extrem gependelt ist zwischen Laden und beladen vom Speicher und hat dann immer bis zu 5kW aus dem Akku ins Netz gespeist und ein paar Sekunden später wieder 5kW aus dem Netz in den Akku geschoben… Hab jetzt erstmal alles beendet, den Hybrid-WR neu gestartet und jetzt läuft es wieder ohne openEMS. Hab heute aber leider keine Zeit mehr für weitere Tests. Hast du dieses “Pendeln” auch schon mal gehabt? Ist die Logik da vielleicht irgendwo zu langsam und steuert da immer zu extrem gegen?

ui…good question. Der PV-Inverter aus dem offiziellen Repo lief bei mir wie ein Sack Nüsse…
Es gab ein Skalierungs-Problem seitens der SunSpec-Umsetzung. M.W. hatte Stefan die gemacht - ohne aber SolarEdge explizit testen zu können. Problem war, dass nicht klar war, ob der Skalierungsfaktor oder der Wert zuerst kommt. Das habe ich in meiner Umsetzung komplett anders gelöst. Außerdem gibt es in meiner ESS-Steuerung noch einen fließenden Mittelwert um die Batterie nicht zu sehr zu stressen. An einem bewölkten Tag können die PV-Erträge innerhalb Sekunden schon mal um das eine oder andere kW nach oben oder unten springen.
Ich bin kein Akku-Experte, aber von -1kW auf 1kW zu springen kann nicht gesund sein. Ohne OpenEMS macht das System dies übrigens…

Am besten ignorierst Du den PV-Inverter aus meinem Repo. Ich hab´s nicht mehr vor Augen - aber es kann sein, dass ich den “kaputt gespielt” hatte. Bei hybriden Systemen gibt´s ja keinen Inverter, sondern DC-Charger und ESS.

Mein zweiter Erzeuger ist ein Balkonkraftwerk + (Zwei-Richtungs-)Stromzähler als Production-Meter konfiguriert.

Ich bin aber gerne behilflich. Evtl. kommen wir auch mal über ein WebMeeting zusammen - wenn Du willst.

Gruß,
Klinki

Vielleicht noch eine Bemerkung am Rande: Ich empfehle Dir von Anfang an ein flottes DB-System zu nutzen.
Ich hab InfluxDB 2 und mache die wirklich aufwändigen Auswertungen in Grafana. Die Historie von OpenEMS ist ja ganz hübsch, aber manchmal sind die Anforderungen dann doch andere als Erträge und Verbräuche zu saldieren: z.B. habe ich einen Vergleich zwischen aktuellem Anbieter und dem was ich bei Tibber bezahlen müsste - unter Einbeziehung des Börsenpreises.
Oder die Frage zu klären: Ist mein Speicher groß genug oder sollte ich aufrüsten?

Da Du ja aus der Datenbank-Ecke kommst, erzähle ich hier wohl nichts Neues

Gruß,
klinki

Gerne können wir mal ein WebMeeting machen. Irgendwas haut hier jetzt gar nicht hin. Der pendelt immer noch extrem hin und her. Hatte jetzt aber nur 5 Minuten Zeit das zu testen. Werde am Wochenende nochmal versuchen die Konfiguration komplett zurück zu setzen und neu anzulegen und dann nochmal beobachten ob das Pendeln von +/- 5kW Speicherladung bleibt und ggf. als suchen wo der “fließende Mittelwert” gesetzt wird. Da ich aber viel hin und her probiert habe, kann es sein dass jetzt im Code einfach irgendwas inkonsistent ist und teil von dir und teils aus dem globalen genommen wird.

Wirf mal einen Blick auf den PID-Regler der Power-Komponente. Der sollte sehr moderat eingestellt sein.
Findest Du unter “Weitere”

Ich nochmal…
Habe ein bisschen über Deine Konstellation nachgedacht. Wenn ich die Dokumentation recht verstehe, liegen die Adressen für das Slave-Device in einem anderen Adresskreis.
In meiner Brust schlagen drei Herzen:

  1. SunSpec: mit der Umsetzung hatte ich aus genannten Gründen Probleme mit Skalierungseffekten. Eine Überarbeitung der SunSpec-Geschichte hätte den Reiz deutlich allgemeingültiger zu sein. Hatte mir den Code mal angeschaut und mit Stefan kurz dazu geschrieben. Leider liegt das außerhalb meiner Gehaltklasse.
    Damit hättest Du aber die volle Übersicht in Deiner SE App.
  2. Einen zweiten WR erstellen. Vermutlich müsste dieser dann wieder unabhängig von System A laufen und Du könntest nicht alles in der SE App sehen.
  3. Vielleicht kann man aber auch die Anzahl der Slaves konfigurierbar machen und arbeitet dann intern mit einem Offset. Also Slave1: Masteradressen + Offset; Slave2 Slave1 + Offset usw.
    Wie das Ganze dann aber mit mehreren ESS funktionieren soll weiß ich nicht.

Soviel zum Brainstorming…was sagen die Profis?

Gruß,
klinki