Controller.Ess.EmergencyCapacityReserve tut nichts

Guten Morgen

Ich habe eine Instanz von Controller.Ess.EmergencyCapacityReserve mit meiner ESS verbunden und sehe auch den schönen Slider bei meiner ESS im UI.

Allerdings lässt der Controller die ESS fröhlich unter den ReserveSOC Werte fallen.
Vernutlich liegt das daran, dass ich nicht weiß, wem der Controller Bescheid sagen möchte, dass nicht mehr entladen werden soll.

Also auf welchem Kanal schickt EmergencyCapacityReserve Nachrichten, wenn der ReserveSOC unterschritten ist?

Und, zweite Frage, kommt es zu Konflikten in der Entlade-Steuerung, wenn ein zweiter Controller Controller.Symmetric.Balancing auf die ESS wirkt?

Vielen Dank
Sebastian

.

Guten Morgen Sebastian,

Wenn ich das recht verstehe, nutzt der Controller über die setActivePowerLessOrEquals-Methoden ebenfalls die applyPower-Methode welche in der Implemntierung zum ManagedEss vorhanden sein muss.
ich bin kein Experte…aber vermutlich wird man schlauer wenn man sich zum fraglichen Zeitpunkt mal die Logs anschaut und prüft ob die Constraints erfüllt wurden.

Die Frage welcher Controller “gewinnt” wenn mehrere auf das ESS einreden, finde ich ebenfalls sehr spannend und war kurz davor einen Thread zu eröffnen :wink:

Ich habe mir, zusätzlich zum Balancing-, jetzt noch den DelayCharge-Controller konfiguriert. Das ESS soll den SoC von 100% erst um 15 Uhr erreichen. Bisher lädt es bei 92% immer noch fröhlich mit maximalem Strom weiter…
Gruß,
klinki

Hallo Klinki & Sebastian,

entscheidend dafür wer “gewinnt” ist die Reihenfolge im Scheduler. Siehe diese Doku:

https://openems.github.io/openems.io/openems/latest/edge/architecture.html#_scheduler

grafik

Das Bild von dort zeigt, wie (vereinfacht) die mögliche Leistung des Speichers als Intervall von -50 bis +50 kW definiert ist. Gemäß der Reihenfolge im Scheduler können die Controller dann Constraints anlegen, um dieses Intervall einzuschränken. Im Beispiel sagt der “Limit Total Discharge” Controller, dass mit mindestens 5 kW beladen werden soll (SetActivePowerLessOrEquals -5000). Ein niedriger priorisierter BalancingController, möchte gerne mit 20 kW entladen - das ist aber nicht erlaubt, also “gewinnt” -5000. Würde der Balancing mit 10 kW beladen wollen, würde -10000 gewinnen.

Der Standard-All-Alphabetically-Scheduler sortiert nicht explizit konfigurierte Controller alphabetisch. Das hat den Nachteil, dass der ctrlBalancing0 meistens im Standard zu weit oben steht.

Gruß,
Stefan

Hallo klinki

Ich habe mir die Logik des Reserve Controller schon mal angeschaut und bin tatsäclich (mal wieder) kläglich gescheitert, dass auf Anhieb zu verstehen.

Und Hallo Stefan
Vielen Dank für die Erläuterung, das hilft mir sehr.

Viele Grüße
Sebastian

Moin,

Ich habe mal 3 controller in die Scheduler-Liste eingefügt und kann schon mal sagen:
Wenn der DelayCharge-Controller höher in der Liste steht, weist er den BalancingController in seine Grenzen. Sprich: Die Batterie wird langsamer geladen als der Balancing-Controller eigentlich “wollen” würde.

Den ReserveController habe ich auch mal eingefügt. Auf das Ergebnis werde ich bis morgen warten müssen. Schließlich muss das System ja auch etwas leisten: bei den Temperaturen hat so eine Wärmepumpe viel Hunger…

Bei den Controllern muss ich Dir recht geben: die Logik ist nicht einfach zu verstehen. Es hat gedauert bis ich den Pid-Regler im BalancingController gefunden habe und debuggen konnte.
Aber mit jedem Schritt erschließt sich mir mehr. Diese Power-Komponente im Ess ist wirklich eine clevere Lösung!
Wobei ich noch weit davon entfernt bin das “große Ganze” zu verstehen…
Diese Geschichte zum Beispiel hat mich Wochen und sehr viel Kaffee gekostet.

Ich schaue nachher mal in den Reserve-Controller

Danke euch für das Feedback und die Hilfe.

gruß
klinki

Guten Morgen klinki

Danke für die Rückmeldung. Ich werde das mal testen mit der Reihenfolge.
Da bin ich ja beruhigt, dass das nicht nur mir so geht, mit der Komplexität.

Ich bin gerade dabei meine ESS zur ModbusComonent aufzurüsten und Du hast die Reise ja offenbar schon hinter Dir :slight_smile:

Kann ich Dich per PM um ein oder zwei Tipps dazu bitten? Mir ist noch nicht ganz klar wie ich einen simulierten WR in OpenEMS aktiviere und mit dem sprechen kann.

VG, Sebastian

Moin Sebastian,

Der Reserve-Controller funktioniert. Hat brav bis an die 12% Marke entladen. Heute morgen auf 5% gesetzt und er entlädt weiter.
Nur über das UI funktioniert der “enable”-Schalter nicht. Man muss dafür in die Konfiguration des Controllers. Aber damit kann man leben.

Klar, kannst mich auch direkt anschreiben. Wenn es aber der Community nutzen kann, dann diskutieren wir lieber hier…Du entscheidest

Mit der Simulation habe ich bisher allerdings wenig gemacht. Viele Problematiken bezogen sich auch eher auf das was SolarEdge am SunSpec-Protokoll vorbei unternommen hat. Das geht zumeist nur am lebenden Objekt.

Hast Du denn schon ein GitHub-Konto?
Hier mein Fork mit Link auf meine Ess-Entwicklung für Solaredge

Gruß,
klinki

Hallo klinki

Ich habe mitlerweile erfolgreich von ModbusComponent abgeleitet und mittels des ModbusSlaveSimulator zumindest lesend getestet. Hat nur 6 Stunden gedauert und hinterher fragt man sich was so schwer daran war.:slight_smile:

Mein persönlichen Hürden waren:

fehlende setModbus()
fehlende ModbusComponent.channelIds
falsche super().activate Methode
Modbus Bridge nicht in Felix aktiviert :frowning_face:

Mit Github bin ich leider noch nicht sehr erfahren, ist aber auf meiner ToDo Liste.

PS:
Der Button für Code-Blöcke ist aus meinem Editor hier verschwunden.
Gibt’s dafür eine Erklärung?

Viele Grüße
Sebastian