Modbus: Anwendungsbeispiel

Die App erscheint auf den ersten Blick sehr technisch und kompliziert.
Mit einem Beispiel soll daher die Verwendung beschrieben werden.

Fronius Wechselrichter Gen24

Als Beispiel-Gerät wird ein Fronius-Wechselrichter verwendet. Dieses Gerät lässt sich sehr einfach mit einer REST-API auslesen. Allerdings sind damit nur lesende Zugriffe möglich.
Einstellungen können dagegen über die Modbus/TCP-Schnittstelle geändert werden.

Zur Einrichtung ist es notwendig. die Modbus-Schnittstelle in der Web-Oberfläche des Wechselrichters zu aktivieren. Verbinde dich mit dem WR über dessen IP-Adresse und navigiere über das Menü zu: Kommunikation/Modbus.

Aktiviere „Slave als Modbus TCP“
Zum Steuern kann „Wechselrichter-Steuerung über Modbus“ aktiviert werden.
Der Port ist mit 502 vorbelegt und kann so belassen werden.
Die Modbus-ID des Wechselrichters ist 1, die Modbus-ID des Zählers ist 200.
Für die Anbindung ist nur die ID des Wechselrichters notwendig.

Homey-Gerät

Füge das Gerät zu Homey hinzu und gib die Daten des Wechselrichters an.

Nun können die Flows erstellt werden. Dafür werden die Register benötigt. Diese müssen der Modbus-Referenz des Herstellers entnommen werden.

Register-Beispiele

Diese Register liefern allgemeine Daten.
Bei dem Wechselrichter muss allerdings jeweils der Registerwert um 1 vermindert werden. Das Register für den Gerätename ist 40020 mit einer Länge von 16 Byte.

Für die BYD-Batterie stehen weitere Register zur Verfügung, die teilweise beschreibbar sind (RW in Spalte 4).

Flows

Diese Flows zeigen die Verwendung für den lesenden Zugriff.

Da der Modbuszugang auf INT+SF gestellt ist, sind nur ganzzahlige Werte lesbar. Für die Werte gibt es jeweils Register mit einem Skalierungsfaktor. Der Faktor -2 definiert einen Faktor von 10-2. Der Prozentwert auf Basis des Faktors wird mit Hilfe eines kleinen HomeyScript berechnet.

Vor dem Schreiben sollten die Register gelesen und geprüft werden. In diesem Beispiel werden die maximale Lade- bzw. Entladerate gelesen. Der Wert hat einen Bereich von -10000 bis 10000 und entspricht -100% bis 100% der maximalen Leistung (angegeben in den Wechselrichtereinstellungen als Gesamtleistung beider DC-Stränge).

Zum Ändern der maximalen Entladerate wird das Register 40348 auf den Wert 2 gesetzt. Das Entspricht dem Binärwert 10 (=DISHCARGE).
Zusätzlich wird der Maximalwert in Register 40355 geschrieben. In diesem Fall wird das Register auf 400 gesetzt. Das entspricht 4% und in diesem Fall ~400W. Damit kann z.B. die Entladerate auf den durchschnittlichen Haushaltsverbrauch beschränkt werden, wenn das Fahrzeug mit voller Leistung aus dem Netz geladen wird.

Zum Zurücksetzen auf unbeschränke Lsde-/Entladerate werden die Register auf die Initialwerte gesetzt. Register 40348 wird auf 0 gesetzt (Bitmuster 00) und Register 40355 wird auf 10000 (100%) gesetzt.

Endladebegrenzung bei Wallbox-Nutzung

Im Falle der Wallboxnutzung ohne PV-Überschussmodus (Laden aus dem Netz) ist es ggf. sinnvoll, die Batterieentladung auf einen durchschnittlichen Wert zu senken, der dem Verbrauch des Haushalts entspricht (z.B. 500W).
Damit wird vermieden, dass die Batterie unnötig entladen wird, wenn sowieso aus dem Netz geladen wird.

Zuerst muss man den passenden Auslöser finden, z.B: Wallbox oder Fahrzeug beginnt das Laden. Danach kann der Lademodus geprüft werden (PV-Überschuss oder Standard/Netz). Wenn das Laden mit Bezug aus dem Netz beginnt, dann kann dieser Flow gestartet werden:

Wird das Laden beendet, wird die Entladebegrenzung wieder zurückgesetzt, um normale Lastspitzen wieder über die Batterie abzudecken.

Ladebegrenzung zur Verzögerung der PV-Ladung

An sonnigen Tagen kann es sinnvoll sein, das Laden der Batterie über PV-Strom zu verzögern. Falls die Solaranlage in Spitzenzeiten mehr Leistung liefert als der Wechselrichter verarbeitet kann, bleibt ein Teil der möglichen PV-Produktion ungenutzt.

Durch paralleles Laden der Batterie kann der sonst vom Wechselrichter nicht genutzte Teil des Solar-Gleichstroms direkt in die Batterie überführt werden.

Dazu muss die Batterie über die Mittagszeit geladen werden. Dafür muss das Laden verzögert werden. Dazu wird der Ladestrom bei ausreichender Solar-Vorhersage morgens aus Null begrenzt. Über die Mittagszeit wird der Ladestrom erhöht – nicht zu viel, da die Batterie ggf. zu früh voll geladen ist.
Später wird die Ladebegrenzung aufgehoben, um die Batterie möglichst schnell zu laden, falls es im weiteren Tagesverlauf doch weniger Ertrag gibt als vorhergesagt.

Das Beispiel zeigt eine Steuerung nach Uhrzeig, bedingt durch die Solarvorhersage für den Tag bzw. die nächsten drei Stunden.

Die Flows zum setzen der Ladebegrenzung berücksichtigen hier auch eine ggf. vorhandene Entladebegrenzung (aktiviert über Register 40349).

Laden erzwingen

Es kann sinnvoll sein, das Laden der Batterie zu erzwingen.
Vor allem im Winter bei geringem Ertrag und bei dynamischem Stromtarif kann die Batterie in günstigen Tarifzeiten geladen werden, um die Energie in teuren Tarifzeiten zu nutzen.

Dazu kann der Mindest-Ladestand angehoben werden. Die Batterie wird dann auf diesen vorgebenen Prozentwert geladen.

Der Flow ermöglicht die Übergabe eines Wertes. Bei reiner Ausführung wird auf 99% angehoben.

Ist der Ladestand erreicht oder der Tarif wechselt, dann kann das Laden beendet werden. Dazu wird der Mindestladestand auf 0% herabgesetzt.
Sollte in der Fronius-App ein höherer Stand angegeben sein (z.B. 5%), dann wird dieser verwendet. Der höhere Wert gewinnt.

Dieser Flow ermöglicht die Angabe eines Parameters. Wird der Flow ohne Parameter ausgeführt, dann wird der Mindestwert in diesem Beispiel auf 5% gesetzt.


4 Antworten zu „Modbus: Anwendungsbeispiel“

  1. Andreas

    Hi im trying to copy your flows but im stuck already in the beginning. I cant find the right card. i have to choose register starting with 1 or 0. i have tried both but it timed out. I have connected correct to my fronius via ip and port. the settings on my gen24 is correct.

    1. The example is showing an older app version. The new version has additional fields in the flow cards.
      The „register, starting with“ option offers the possibility to define whether the number in the manufacturer documentation are starting at 0 or 1. 0 means, Modbus adresses are used (counted from 0). 1 means, Modbus registers are uses (counted from 1). You have to check the manufacturer manual for details.

      Fronius uses „register“ in the manual (you select „starting at #1) and the app converts the numbers to Modbus adsresses.

  2. Andreas

    I cant get the script to work, witch values do you use? is there any way to copy and paste?

    1. You have to use the Modbus reference from the manufacturer.
      For Fronius just download the right reference for your inverter:
      https://www.fronius.com/de/solarenergie/installateure-partner/technische-daten/alle-produkte/anlagen-monitoring/offene-schnittstellen/modbus-tcp

      You can ask also the community at https://community.homey.app/t/app-pro-modbus/104497

Bleibe auf dem Laufenden
Erhalte Informationen über neue Blog-Beiträge

Chat Icon