Sonntag, 13. September 2020

Modbus Integration in Node-RED von SMA

[2021: Beitrag überaltert, Flows entfernt]

Da ich die Nibe Wärmepumpe von Zuhause und unterwegs aus über Node-RED bediene, habe ich zusätzlich noch einige Werte von meiner PV-Anlage in ein Tab integriert:



 

 

 

 

 

 

 

 

Hier eine Anleitung und der Flow:

Als erstes muss in den Wechselrichtern Modbus TCP aktiviert werden.

Bei WR ohne Webinterface muss man es über den Sunny Explorer machen.

Anschließend testet man ob der Modbus auch funktioniert:

kostenloses Testprogramm  / Anleitung von SMA

das hatte bei mir auf Anhieb mit beiden Wechselrichtern geklappt, am besten mit Register 30775 (dort seht ihr dann bei "+1" die Leistung).

 

Node RED

In der Palette muss "node-red-contrib-modbus" & "node-red-contrib-buffer-parser" installiert werden.

Hier mein Flow für meinen SB3000-TL21 und STP6.0-3AV-40:


Unter Hintergrundwissen findet man für alle möglichen SMA Wechselrichter die Register.

Viele Register sind gleich.

Wichtig: die Daten des Energy Meter (Home Manager 2.0) zieht sich der STP6.0 über Speedwire und nur deshalb kann ich sie über den STP6.0 per Modbus TCP abfragen! Der HM kann nicht per Modbus abgefragt werden, dafür aber anderweitig (siehe Blogeintrag). 

Im Webinterface vom STP6.0 muss ein Energymeter konfiguriert sein:







Wenn ihr z.B. zwei Wechselrichter ohne Webinterface und damit auch ohne Zugriff auf das Energy Meter habt, müsst ihr die Register die den Hausanschluss abfragen löschen (der Objektname in der Registerbschreibung beginnt mit "Metering.xxx").

Anzupassen sind: "Modbus Getter" --> "Server" -->  IP und Port anpassen.

Die alte Version (durchgestrichen) war technisch nicht korrekt, sie funktionierte zwar erstaunlich gut bis auf zwei Werte: Wenn die Blindleistung negativ wurde oder die Spannung über 655V stieg.

Warum ist das so?

Wir fragen 32 Bit Werte ab s.g. S32 oder U32.

Zitat aus der SMA Anleitung: Ein Modbus-Register ist 16 Bit breit. Für breitere Daten werden zusammenhängende ModbusRegister verwendet und als Datenblock betrachtet. Die Adresse des ersten Modbus-Registers in einem Datenblock ist die Startadresse des Datenblocks. Die Anzahl der zusammenhängenden Modbus-Register ergibt sich aus dem Datentyp und dem Offset zwischen den Registeradressen. 

Also S32 = Vorzeichenbehafteter Integer (32 Bit) 0x8000 0000 (NaN) und U32 = Vorzeichenloser Integer (32 Bit) 0xFFFF FFFF (NaN)

D.h. ein Register besteht aus zwei 8 Bit Werten (oder auch zwei x 1 Byte), Beispiel:





Bis ich das verstanden hatte, hat es etwas gedauert (es hat ja auch so funktioniert), noch mal Danke an die Helfer des Node-RED Forums, besonders Stephen McLaughlin.

Vorher habe ich nur einen 16 Bit Wert abgefragt (Quantity 1 und 3 im Beispiel)

Um ein Register korrekt abzufragen und wieder zusammen zu setzen braucht es in NodeRED den "Buffer Parser". 

Ich frage zusammenhängende Register der Reihe nach ab, bei zu vielen parallelen Abfragen stürzt der Modbusserver ab!

Im Buffer Parser kann ich die abzufragenden Werte über das Offset bestimmen, sowie den Datentyp (S32 oder U32) und ggf. den Faktor (am FIX_ zu erkennen).

 Ohne DC Spannung (nachts) schaltet der Hauptprozessor des WR ab:


 

 

 

 

 

Daher bitte nicht wundern, wenn nachts viele Werte auf 0x 8000 0000 - den s.g. NaN (not a number) springen, Dezimal =  -2147483648.

 

Da der SBS 2.5 immer noch keine Firmware für den BYD Speicher bekommen hat, ist er noch nicht integriert. Werde ich dann hoffentlich diesen Monat im Oktober noch nachholen.


3 Kommentare:

  1. Danke für die tolle Dokumentation :)

    AntwortenLöschen
  2. Damit habe ich es jetzt in Home Assistant geschafft die SMA STP-7000TL20- Leistungswerte Ost- und West-Seite separat zu übernehmen - und das nach nur 2 Tagen Noder Red "Erfahrung" :)

    Einfach SUPER !!!

    AntwortenLöschen
  3. Michael Oppermann28. Juni 2021 um 23:26

    Danke , danke !! :-) Jetzt hab ich es auch geschafft...puhh :-)
    Node Red auf RASPI und Dashboard auf nem alten iPad.
    AC und beide DC Strings (SO & SW) als Gauge sowie als 3Liniengrafik.
    Was aber partout nicht klappen will ist der Tagesertrag... immer 0 ����‍♂️
    Habe aber von den zur Verfügung gestellten Flows jede Menge lernen können ��
    Absolut TOP ����
    Danke

    AntwortenLöschen