So realisiere ich eine dynamische Leistungsreduzierung meines SolarEdge PV-Wechselrichters v2

IM EINSATZ?

Dann schau dir UNSEREN LOXKURS an und profitiere von unserem Wissen!

Nachdem ich erst vor wenigen Tagen die extern gesteuerte Leistungsreduzierung meines SolarEdge Wechselrichters per GPIO-Pins hier vorgestellt hatte, konnte ich nun bereits die Ansteuerung per Modbus realisieren, welche im direkten Vergleich eine “punktgenaue” Drosselung in 1%-Schritten ermöglicht. Dadurch werden nun auch die GPIO-Pins am Inverter wieder frei, welche ich evtl. später für den extern getriggerten Wechsel des SolarEdge-Inverters in den Inselbetrieb im Kontext meiner Victron-ESS-Anlage benötige.

Wie die Integration per Modbus funktioniert, welche Register dazu angesprochen werden müssen und wie ich die Werte einfach per Loxone senden kann, um die gewünschte Leistungsreduzierung dynamisch zu setzen, ist Inhalt des nachfolgenden Blogpost.

Modbus 4thewin

Die SolarEdge-Inverter lassen sich per Netzwerkschnittstelle per Modbus ansprechen – primär, um Messwerte auszulesen. Sofern die Modbus-Option im Inverter softwareseitig per SetApp aktiviert wurde, lassen sich damit bspw. die aktuelle Produktion in kW oder auch die Leistung am Netzübergabepunkt (vorausgesetzt das SolarEdge-Smartmeter ist installiert) auslesen.

Kompatibel sollten alle neueren SolarEdge Wechselrichter sein, auch die kleineren Modelle und nicht nur so große Teile wie der SE30k…

Die nutzbaren Modbus-Register sind im Dokument Technical Note – SunSpec Logging in SolarEdge Inverters (externer Link) einsehbar.

Rainer hat mich in seinem Kommentar kürzlich darauf hingewiesen, dass es auch eine Steuerungsmöglichkeit über die Home Assistant HACS-Integration “Solaredge Modbus (GithubLink) gibt. Danke nochmal Rainer, das war ein super Tipp!

Auf Github ist glücklicherweise auf die betreffende SolarEdge-Doku namens Technical Note – Power Control Protocol for SolarEdge Inverters (externer Link) referenziert, welche Aufschluss über die nutzbaren Modbus-Register zwecks der gewünschten Leistungssteuerung gibt. Hier gibt es sogar noch eine neuere Version des Dokuments.

Informationen zur Leistungsdrosselung lassen sich dabei über die Funktion “Global dynamic power control” einsehen.

Steuerung des SolarEdge Wechselrichters über Modbus

Der Inverter lässt sich über verschiedene Parameter steuern. Am einfachsten ist es für meinen Anwendungsfall die gewünschte Maximalleistung in Prozent zu senden. Mein Inverter ist so konfiguriert, dass er maximal 30 kW ausgeben kann. Wenn ich das “Active Power Limit” dann bspw. auf 10% setze, gibt er nur noch maximal 3 kW aus.

Damit das klappt, muss man beim SolarEdge Wechselrichter erstmal einen “virtuellen Schalter” namens “AdvancedPwrControlEn” aktivieren, damit er über Modbus nachfolgende Steuerbefehle entgegennimmt. Dieser Wert muss auch nach jedem Neustart des Inverters gesetzt werden, genauso wie die gewünschte Leistungslimitierung. Am besten schickt man den ganzen Schlonz einfach zyklisch, dann ist dieses Thema auch vom Tisch.

Also erstmal zyklisch – bzw. zumindest nach einem Inverterneustart – den Wert “AdvancedPwrControlEn” aktivieren. Hierbei handelt es sich um das Modbus-Register F142 / 61762 (int32), welches auf “1” gestellt werden muss.

Die Maximalleistung wird dann über den Wert “Active Power Limit” gesetzt. Die gewünschte Maximalleistung in % wird über das Modbus-Register F001 / 61441 (uint16) übermittelt. Werte sind sinnvollerweise im Bereich 0-100 möglich.

Damit der neu übermittelte Wert auch greift, wartet der Inverter noch auf eine Transaktionsbestätigung. Diese wird über den Wert “Commit Power Control” gesendet, welche das Modbus-Register F100 / 61696 (int16) besitzt. Hier einfach eine 1 für ein “Execute commit” übertragen und fertig.

SE-Inverter-BefehlModbus-RegisterFormatGenutzte Werte
AdvancedPwrControlEn61762int321
Active Power Limit61441uint160-100
Commit Power Control61696uint161

Fast instant regelt der SolarEdge-Wechselrichter dann auch die gerade übermittelte Leistungsdrosselung.

Die gesetzten Werte lassen sich übrigens auch wieder per die selben Modbus-Register auslesen, um den aktuellen Wert zu kontrollieren.

Es ist übrigens auch möglich verschiedene Leistungsdrosselungen “parallel” zu nutzen. Also neben der Modus-Variante auch die vor einigen Tagen gezeigte GPIO-Geschichte. Der Wechselrichter “hört” dann immer auf den kleinsten Wert – also auf die größte Drosselung.

Umsetzung der Modbus-Register und Steuerunglogik in Loxone

Hier mal die drei benötigen Modbus-Werte mit den korrekten Parametern in Loxone, um das Power-Limit zu setzen:

Und nier noch meine Loxone-Logik, um bei neuen Wunschwerten alles automatisch zu “tiggern”.

Hier musste ich “timiningtechnisch” etwas basteln, um keine Modbus-Übertragungsfehler zu erhalten. Wenn das jemand detaillierter sehen möchte, einfach einen Kommentar hinterlassen – dann kann ich das gerne auch mal in einem Video zeigen. Hier vorerst zumindest mal die Logik als Download:

Loxone Config SolarEdge Modbus Leistungssteuerung (536 Downloads )

Insgesamt bin ich super happy mit der Lösung. Einzig ist die Übertragungsrate der Modbus-Spezifikation echt lahm. Deshalb darf man Register nicht zu oft abfragen oder beschreiben, denn sonst laufen die Mitteilungen in einen Error. Aber mit dem in Loxone eingebauten Modbus-Monitor lässt sich das ganz gut analyisieren und die Timings sinnvoll anpassen, damit alle Nachrichten zuverlässig “durchflutschen”.

Tausend Dank am Ende auch nochmal an Matthias von haus-automatisierung.com, der sich die Zeit genommen hat, die Modbus-Spezifikationen mit mir durchzugehen. Ohne dich hätte ich viel länger gebraucht, um ans Ziel zu gelangen… Danke! 😘

14 Kommentare
    1. 😍 Echt mega, dass ich dich bei solchen Themen nerven kann. 😘

      War echt überrascht, dass alles direkt auf Anhieb lief. Das passiert eher selten. Zumal sich die genutzten Modbus-Register ja anscheinend außerhalb der gängigen Spezifikationen befinden, was den Wertebereich angeht…

      Und ja, die Sache mit dem Inselbetrieb ist technisch gesehen ultra spannend, aber insgesamt leider nicht so mega trivial. Aber ich “robbe” mich durch. Morgen gibts vielleicht bereits den ersten Inhalt dazu im Blog…

      Viele Grüße
      Jörg

  1. Hallo, ModBus und SolarEdge ist bei mir das Problem! Würde gerne meine bestehende Anlage mit einem ESS von Victron erweitern, um nicht mehrere Zähler in der Anlage zu betreiben die sich eventuell gegenseitig stören, kann man den ModBus Zähler als „ Zähler“ für das ESS verwenden? Ich habe einige Sachen im Netz gefunden mit dem ändern der ID des WR. Da ich keinen Zugang am WR habe muss ich das irgendwie meinen „ netten“ Solateur erklären das er das für mich einstellt. Ich hoffe du weist was ich meine, da du ja solch ein System am laufen hast.
    Mfg

    1. Klar geht das. Nur: wenn du einen Zähler durch mehr als ein Systm nutzen willst, dann geht das nicht mehr via Modbus-RTU, weil am seriellen Modbus nur ein Master möglich ist. Du brauchst somit einen kleinen Computer als TCP-auf-RTU-Gateway (geht zB mit Raspberry Pi und einem minimalen Python-Skript), und der Rest der Welt muss TCP mit dem Teil reden.

  2. Hallo Jörg, ich bekomme über die Solaredge Modbus Integration einfach keine Werte. Die Werte aktualisieren sich einfach nicht und bleiben beständig auf unbekannt. Laut Solaredge Status ist die Modbus Verbindung ok. Ich habe keine Ahnung was ich falsch mache, bzw. übersehe. Kannst du mir vielleicht bei der Einrichtung helfen? Ich habe bisher leider kein, für mich, dazu passendes Video finden können.
    Viele Grüße Svetlana

  3. Hallo Jörg,
    ich habe deinen Beitrag mit Interesse verfolgt, da ich auch versuche meine Leistungssteuerung und das Entladen der Batterie selbst zu kontrollieren.
    Die Beschreibung der Power Control Protocol habe ich gelesen und die relevanten Register gefunden. Leider scheitere ich daran die Register zu lesen/schreiben. Ich verwende ioBroker und der Wechselrichter ist mit Modbus TCP verbunden. Hast du einen Hinweis wie ich an die Adressen kommen zu kontrollieren der Leistungssteuerung? Wenn ich z.B. versuche das Register 0xF142 zu lesen, bekomme ich eine Fehlermeldung wegen ungültiger Adresse.

    Vielen Dank,
    Josef

    1. Hi Josef,
      die Datentypen sind je nach Register teilweise unterschiedlich und müssen entsprechend “matchen”. Hat mit den richtigen Settings laut Doku mit Loxone auf Anhieb geklappt… Musst hier wohl nochmal nachsteuern, damit das klappt. Würde grundsätzlich mal mit dem Auslesen von Werte beginnen und wenn das klappt dann erst mit dem Schreiben weitermachen.

      Viele Grüße und Erfolg
      Jörg

  4. Hallo Jörg,

    ich habe es geschafft die notwendigen Register mit dem ioBroker modbus-Adapter auszulesen. Wichtig dabei ist, dass die Adressen im ioBroker 1-basiert sind und nicht wie im Datenblatt angegeben 0-basiert. Weiterhin muss bei der Verwendung von Aliases im modbus-Adapter eine Offset von 40000 für das Holding-Register addiert werden. Zuletzt musste ich noch bei 32-bit Größen das Big-Endian-Word-Swap einstellen.

    Vielen Dank für deinen Hinweis.
    Mfg,
    Josef

    1. Hallo Josef
      Dank deiner Hinweise hab ich das (bislang zumindest lesend) schon mal hinbekommen – ich hab hier folgende Register genommen (bei aktiviertem Alias):
      101442 – Active Power Limit (unsigned 16bit BigEndian)
      101697 – Commit Power Control (unsigned 16bit BigEndian)
      101763 – Advanced Pwr Control En (Signed 32bit Big Endian Word Swap)
      ist das so richtig? als Werte krieg ich
      101442 – 100
      101697 – 0
      101763 – 0

    2. Hallo Bene,

      ja die Register stimmen. Für das Active Power limit kann ich es nicht direkt sagen weil ich das nicht benütze.
      Die gelesenen Werte machen für mich auch sinn.

      Mfg,
      Josef

  5. Hallo Jörg,
    ich verwende einen SolarEdge Inverter mit Batterie und dem Backup-Interface für die Notstromversorgung. Die Modbus-Kommunikation mit Loxone funktioniert problemlos. Leider habe ich bislang in keiner Dokumentation und keinem Blog herausgefunden, welches Register ich verwenden muss, um einen Notstrombetrieb zu detektieren. Für Lastabwurf etc. wäre das hilfreich. Gibt es da irgendeine Idee?
    Viele Grüße,
    Ralph

    1. Hi Ralph,
      da bin ich auch kein Profi, was die SolarEdge-Register angeht. Spontan würd ich mir ne externe Logik bauen, um den Leistungswert auf Netzseite zu überwachen. Wenn der – sagen wir – 15s am Stück bei 0W verharrt (also weder Bezug noch Einspeisung), würde ich davon ausgehen, dass das Netz weggefallen ist und sich die Anlage im Inselbetrieb befindet. Denn das System sollte es im Netzbetrieb aufgrund von Verbrauchsschwankungen nie lange schaffen diesen Wert komplett auf komplett 0 auszuregeln…

      Viele Grüße
      Jörg

  6. Hi Jörg, eine kleine und interessante INfo die vielleicht nicht bekannt ist … mit einer neuen Wechselrichter Firmware erlaubt Solgaredge nun mehr als eine Modbus Verbindung. Habe hier die Version 4.19.144 am laufen (durch Solaredge installiert – wohl noch nicht offiziell verfügbar) und ich kann zumindest schonmal lesend mit demn IO-Broker und ghleichzeitig der Open WB 2 zugreifen…. ich werde nun mal in den nächsten Tagen versuchen eine Automatik einzubauen, sodass beim Dirketladen der Speicher nicht leergesaugt wird … das Problem ghaben ja viele …! LG Jörg

    1. Hi Jörg,
      danke für deine Info!

      Von Frank (openWB) hab ich die Info auch schon bekommen, dass SolarEdge da etwas an der Modbus-Kommunikation dreht – und anscheinend auch Register-Adressen geändert wurden, was erstmal zu Problemen geführt haben soll. Entsprechend war eine Anpassung notwendig. Aber die Info ist definitiv neu, dass man nun mit mehreren externen “Instanzen” per Modbus verbinden kann – echt stark! Hoffe dann kann ich die Daten auch endlich mal zuverlässig im Sekundentakt abrufen, denn bisher kam es da hin und wieder zu Timeouts…

      Teile gerne auch deine weiteren Erfahrungswerte mit – interessiert mich sehr!

      Viele Grüße
      Jörg

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Das könnte dir auch gefallen