Sunny Island 8.0-11 reagiert nicht auf Steuerung von OpenEMS

Hallo. Ich schon wieder.

Nachdem jetzt die Komponenten so wie ichs möchte mal integriert sind. Hab ich mal die Steuerung für den Sunny Island aktiviert.Doch leider passiert dann genau gar nichts mehr.

Der Speicher geht von Ursprünglichen Betrieb (Eigenverbrauchsoptimierung über Energy Meter) einfach auf 0Watt und dort bleibt er auch.

Hab jetzt mal das Prebuild package installiert und folgende Komponenten Aktiviert.

  • Modbus Bridge für Sunny Island und Energy-Meter.
  • Ess Balancing Controller. Target 0W
  • Die vorkonfigurierten Controller des Packages

Im Debug log bekomme ich den Fehler:

Execute failed FC16WriteRegisters [ess0;unitid=3;ref=40149/0x9cd5;length=6;request=0000 0000 0000 0322 0000 0000] ModbusSlaveException: Illegal Data Value

Schalte ich allerdings den Sunny Island auf Read-Only und setze unter Channels den Datenpunkt “SetActivePower” händisch, reagiert der ESS wunderbar und lädt/entläd.

Hatte das schon mal wer und hat eventuell eine Idee für einen Lösungsansatz oder wie man drauf kommt wo der Fehler ist?

LG Daniel

Hallo, dann Teile ich mal einen Zwischenerfolg mit noch offenen Fragen:

Der SMA Sunny Island 8.0h-11 scheint gegenüber dem Sunny Island 8.0-13 einiges an Besonderheiten zu bieten um diesen steuerbar zu machen.

Die Probleme inkl. eventueller Lösungen:

  • Das Register Max_Apparent_Power gibt es beim 8.0-11 nicht:
    Ich hab da jetzt mal einen Fixen Wert übergeben der nicht ausgelesen wird.

  • Das Register Set Control mode, sollte nur einmal gestetzt werden.
    Da teste ich gerade ob einmaliges Setzen Reicht oder ob es da ein Timeout gibt, das ein erneutes Setzen verlangt.

  • Die Register Set_Active_Power und Set_Reactive_Power und deren Timing:
    Wenn man beide Register schreibt muss man mit der Core_Cycle Time schon mal auf ca 4sec sonst scheint der SI überfordert und reagiert nicht mehr auf Steuerbefehle.

Setzt man nur Set_Active_Power kommt man zumindest auf 1,5 Sekunden runter was zumindest für mich besser passt.

WICHTIG bei dem Schreiben ist aber

Set_Active und Set_Reactive_Power müssen im 3Phasenbetrieb durch 3 dividiert werden, da der SI bei Leistungsvorgaben diesen wert Pro Gerät als Basis nimmt und nicht fürs System.

Fragen zu meinen Problemen:

  • Könnte man in OpenEMS Modbus Register einmalig setzen und nicht wiederholt setzen, zb beim Aktivieren einer Komponente?

Oder Alternativ wäre eine Lösung denkbar wenn man ein Register alle als Bsp 1000sec setzt, nur hab ich keine Ahnung wie das in OpenEMS aussehen müsste.

  • Kann man, wenn man Modbus Register schreibt zwischen 2 Registern ein Timeout setzen zb 0,5sec damit der Abstand zwischen Reactiv und Activ Power nicht so gering ist?

Vielleicht hat ja jemand eine Idee dazu wie man die noch offenen Punkte angehen könnte

Wenn ich das sauber hin bekomme kann das gerne veröffentlicht werden.

@stefan.feilmeier eventuell müsste in OpenEMS die Komponente Sunny Island umbenannt werden in Sunny Island Hardware Version 12 und 13

MFG Daniel

Hallo @vision03,

danke für deine Arbeit und Analyse. Zu deinen Fragen:

Beim GoodWe machen wir das z. B. so. Die Helper-Methode liegt unter ChannelUtils: openems/io.openems.edge.goodwe/src/io/openems/edge/goodwe/batteryinverter/GoodWeBatteryInverterImpl.java at develop · OpenEMS/openems · GitHub

Nicht automatisch - aber das Schreiben der Register wird in der applyPower()-Methode gesteuert. Hier kann man leicht so eine Wartezeit einbauen: openems/io.openems.edge.ess.sma/src/io/openems/edge/sma/sunnyisland/EssSmaSunnyIslandImpl.java at develop · OpenEMS/openems · GitHub

Solche Versionsunterschiede gibt es natürlich öfters mal. Die beste Lösung ist, wenn OpenEMS die Version automatisch identifiziert. Beispiel GoodWe: openems/io.openems.edge.goodwe/src/io/openems/edge/goodwe/common/AbstractGoodWe.java at develop · OpenEMS/openems · GitHub

Alternativ könnte man ein ENUM in der Konfiguration angeben, um die Version auszuwählen. Nur im Notfall würde ich eine komplett neue Component anlegen.

Gruß,
Stefan