NEWS
[HowTo] Huawei SUN2000 WR Modbus mit node-red (read + write)
-
Hallo @badsnoopy667 und alle anderen welche folgende Frage beantworten können.
Dank der guten Vorarbeit hier habe ich jetzt auch Node Red soweit, dass ich sinnvolle Daten aus meinem SUN2000-6KTL-M1 und auch aus dem Dongle in den ioBroker bekomme. Ich stehe allerdings völlig auf dem Schlauch, wenn es darum geht, die Daten so zu verarbeiten und zu speichern, dass ich später eine Historie habe, also z.B eine Anzeige der Solarproduktion, des Verbrauchs oder der Einspeisung der letzen Tage, Wochen, Monate ... Ich habe auf verschiedenen Grafana-Screenshots hier so etwas schon gesehen, allerdings fehlt mir einfach der Ansatz, es umzusetzen. Ich schreibe momentan bestimmte Werte mit dem SQL-Adapter weg und versuche dann Grafen mit FLOT zu bauen, komme da aber nicht wirklich weiter. Ich hoffe, es einigermaßen verständlich ausgedrückt zu haben und würde mich über jeden Ansatz freuen. Vielen Dank.
Gruß Andreas
@abrodeck
Ich speichere die Werte für Erzeugung, Verbrauch etc. mit dem History Adapter und nutze dann ebenfalls FLOT zur Darstellung. Den SQL-Adapter kenne ich nicht.
Die ganzen Werte wie Monatsertrag, Jahresertrag usw. habe ich nicht in iobroker umgesetzt, da gucke ich einfach in die FusionSolar App wenn ich das wissen will.
Das sollte sich aber auch irgendwie mit dem Sourcenanalytix Adapter umsetzen lassen. Aber mit dem stehe ich auf Kriegsfuß. Ich verstehe das Teil einfach nicht. ;) -
@joeysch said in [HowTo] Huawei SUN2000 WR Modbus mit node-red (read + write):
Kann es sein, das die IP-Adresse die in der Wlan-Fe angegeben ist bei dir von einem Gerät belegt ist und er dahin connected?
Nö, die in WLAN-FE eingetragene IP-Adresse existiert in meinem LAN nicht.
-
@joschipp said in [HowTo] Huawei SUN2000 WR Modbus mit node-red (read + write):
Ich hab für meine Anwendung eine schnelle Abfrage einiger Register benötigt, und die restlichen werden seltener benötigt. Das hab ich jetzt folgendermaßen realisiert (basierend auf Vorschlägen weiter oben - vielen Dank dafür):

Count 3 ist ein Zähler, der 3 Ausgänge durchtaktet, der 1. Ausgang triggert die Abfrage vom Meter.Active_Power, den Wert will ich häufig aktualisiert haben. Sobald die Daten empfangen wurden, geht die Meldung über den Link zurück an die Trigger - Funktion. Die triggert den Count 3, und der zählt weiter auf den 2. Ausgang und triggert die Abfrage vom Inverter.Active_Power (brauch ich auch häufig).
Der 3. Ausgang triggert dann einen Zähler mit 25 Ausgängen:

Hier wird die Abfrage der restlichen 25 Register, die ich nicht häufig brauche, getriggert.
Die Trigger Funktion hat auch noch eine Timeout - Überprüfung, wenn mal keine Antwort kommen sollte, dann wird nach 5 Sekunden getriggert.
Damit werden jetzt die beiden wichtigen Register alle 1-2 Sekunden aktualisiert und der Rest langsamer.
Mit dieser Lösung hab ich sicher gestellt, das eine Abfrage erst bzw. sofort nach dem Empfang der vorigen Abfrage erfolgt, somit hat man die max. Geschwindigkeit und keinen Datenverlust.PS: das Problem mit den fehlenden Datenpunkten und das manuelle Anlegen (siehe weiter oben) kann man sich sparen, wenn man in der Node-Red Instanz "Erstellung von Fremd-Objekten" zulässt

mfg
-
@kep42010
Hast du die ID in ALLEN Nodes geändert? Nur in der Haupteinstellung reicht nicht.was meinst du in jedem Notes? Man gibt die Id doch nur im Modbus Client an, oder?
-
was meinst du in jedem Notes? Man gibt die Id doch nur im Modbus Client an, oder?
@joogibaer
Nein, in jedem einzelnen modbus-node steht nochmal die ID drin. die muss überall passen, sonst läuft's nicht. Vielleicht erstmal einen Test-Flow machen der nur ein Register abfragt. Wenn der läuft, dann den ganzen Flow probieren. -
@joogibaer
Nein, in jedem einzelnen modbus-node steht nochmal die ID drin. die muss überall passen, sonst läuft's nicht. Vielleicht erstmal einen Test-Flow machen der nur ein Register abfragt. Wenn der läuft, dann den ganzen Flow probieren.Guten Morgen, danke jetzt ist alles Grün :)
-
Guten Morgen, danke jetzt ist alles Grün :)
Moin,
Auf meiner Fuison Solar App habe ich heute ca. 4,9KW erzeugt.
Im Modbusregister (32114) steht aber 3.9KW..
Da ich aber heute meinen Akku (10KW) von ca. 30% auf 80% Prozent geladen habe, klingen für mich die 5 KW realistischer.
Habe ich das falsche Modbusregister erwischt oder hat der 8KT andere Register?update: Lösung gefunden -- Der Wechselrichter hat wirklich nur 3,9 KW produziert .. jetzt frage ich woher die restlichen KWs hergekommen sind um auf 4,9 KW Tagesproduktion zu kommen -- Ich da die Batterie heute 5.5 KW geladen hat und bisher 4.5 KW enthält macht das eine Differenz von 1 KW - dann passt das.. heisst das wohl, das die Ladeleistung der Batterie nicht in der Tagesproduktion eingerechnet wird? -- verwirrendes Tool
-
Das Thema mit den Abfragen kannst du auch anders umschiffen.
Du kannst mehrere Register auf einmal abfragen (ich habe zB in 2 Abfragen alles drinnen - da ein recht großer Adressbereich für mich nicht so interessant ist):-
Register 32000-32116:

Die Abfrage triggert dann die zweite Abfrage

-
Register 37000-37125:

Die Daten laufen dann durch einen edit puffer-parser node, werden in einem join-node zusammengefügt und (in meinem Fall) auf einmal in eine InfluxDB geschrieben:

Nur als Anregung bzw. Idee, wenn man den Overhead der Register-Anfragen reduzieren möchte. ;-)
Gruß,
MatHi Mat,
das möchte ich auch versuchen, da auch bei mir mit dem ursprünglichen Flow reichlich Logeinträge entstehen:

Allerdings komme ich mit dem Parsing nicht klar, vielleicht kannst Du da noch mal ein Beispiel oder Screencopy beisteuern. Du schreibst 'edit puffer-parser'. Ist das etwas anderes als der normale 'buffer-parser' den ich in der linken Spalte finde?
Viele Grüße
Heinrich -
-
Achtung: Verbindung mit Modbus Adapter klappt nicht, node-red klappt.
Hier eine Anleitung um den SUN2000 Wechselrichter incl. Batterie und Power Meter per node-red auszulesen und Werte zu schreiben:
1. Wechselrichter korrekt konfigurieren:
Im Wechselrichter muss die Konfiguration per Modbus (TCP) aktiviert sein. Das kann der Installateur direkt erledigen. Alternativ lädt man sich die SUN2000 App auf's Handy und verbindet sich damit über das WLAN des Wechselrichters (also davorstehend im Keller) mit dem WR und stellt das ein. (Unter Kommunikationseinstellungen glaube ich, die Menüs sind ziemlich unübersichtlich mMn.)
Zum Login in die App als Installateur braucht man ein Passwort: 00000a
Eventuell braucht man zum Verbinden auf das WLAN des Wechselrichters auch ein Passwort: Changeme2. Node-Red installieren und Flow importieren:
Man muss im ioBroker node-red installieren. Außerdem muss man in node-red noch drei zusätzliche NPM Module installieren (geht bei den Instanzeinstellungen):
• node-red-contrib-calc
• node-red-contrib-buffer-parser
• node-red-contrib-modbusHat man das erledigt, kann man diesen Flow importieren:
Huawei_SUN2000_node_red_flow_read_write_2023-11.txt
Achtung, weil das hier schon ein paar Mal zu Problemen geführt hat: Man muss die Client-ID in allen Modbus-Nodes korrekt eintragen. Bei mir steht da 2, weil mein Wechselrichter schonmal getauscht wurde. Das muss überall auf den richtigen Wert (meistens 1) geändert werden damit Daten kommen!
Nachdem man den Flow importiert hat muss man ganz rechts im Menü unter "Globale-Konfigurations-Nodes" beim modbus-client noch die IP Adresse vom Wechselrichter und wieder die richtige Client-ID (typischerweise 1) eintragen. (Port ist 502)3. Hinweise:
Dann sollte die Verbindung eigentlich schon funktionieren. Bei mir war dann noch das Problem, das node-red gemeckert hat, dass die Objekte in iobroker nicht existieren in die er schreiben will.
Um das zu fixen habe ich im Flow alle Output-Nodes (die graublauen Boxen rechts) einmal doppeltgeklickt und dort bei "Auto-create --> Create states if not exist" ausgewählt. Dann kann man noch die Einheit und den Typ festlegen und dann werden die States automatisch beim ersten Lesen angelegt. Hierfür ist es erforderlich, dass in den node-red Instanzeinstellungen noch der Hacken bei "Erstellung von Fremd-Objekten zulassen" aktiviert wird.
Zusätzlich habe ich noch den Wert "Readonly --> Object is writeable" gesetzt. K.a. ob das nötig ist, aber ich hatte den Eindruck, dass die Werte sonst nicht korrekt aktualisiert werden.Zum Nachlesen gibt es hier noch die Huawei SUN2000 Modbus Register Übersicht:
Solar Inverter Modbus Interface Definitions V5.pdf (Stand 2023)
Im Flow werden die wichtigsten Größen aber schon abgefragt.4. Modbus-Register schreiben:
Man kann auch Register schreiben! Damit kann man z.B. die Batterie-Entladung auf 0W setzen wenn das eAuto lädt. Damit entlädt sich die Batterie dann nicht unnötig, wenn man das Auto mit Netzstrom lädt im Winter oder Nachts.
Man kann auch TOU (Zeitgesteuertes Laden) aktivieren. Damit kann man wenn man Tibber oder Awattar nutzt zu den günstigen Stunden den Akku aufladen. Um die günstigsten Stunden auszulesen gibt es hier im Forum entsprechende Skripte.4.1 Zeitgesteuertes Laden korrekt konfigurieren und schreiben:
• AC-Laden muss auf 1 stehen (Register 47087). Kann auch mMn permanent auf 1 bleiben.
• Battery Working Mode (Register 47086) kann zwischen 2 (Maximaler Eigenverbrauch) und 5 (TOU, zeitgesteuert Laden) umgestellt werden.
• Man definiert dann in der Huawei FusionSolar App unter Geräte - Dongle - Parametereinstellungen (die 4 Punkte oben rechts) einfach eine Zeit von 0:00 bis 23:59 jeden Tag "laden" (also den ganzen Tag). Dafür muss die Batterie auf TOU (5) gestellt sein.
• Sobald man jetzt per Modbus das Register 47086 von 2 auf 5 umschaltet, fängt die Batterie aus dem Netz an zu laden.
• Maximaler Ladestrom kann über Register 47075 eingestellt werden.
• Stellt man den Working Mode wieder zurück auf 2, hört das Netzladen auf und die Batterie verhält sich wieder "normal".Die nötigen ioBroker Datenpunkte muss man noch anlegen. Also zB. Battery_Max_Charge_Power_SET oder Workingmode_Change.
5. Weiteres
5.1 Mehrere Wechselrichter abfragen
Es gibt noch weitere Möglichkeiten den Flow aufzubauen. Man kann mehrere Adressbereiche auf einmal abfragen, das ist ggf. etwas effizienter. Den Flow dazu habe ich aber nicht getestet:Außerdem enthält der Flow ein Beispiel für die Abfrage mehrerer Wechselrichter in Kaskade. Im Prinzip muss man nur die korrekten IDs pro Wechselrichter eintragen und nicht zu viele Register abfragen, sonst kommen keine Daten mehr. Damit lassen sich auch 3 Wechselrichter (oder ggf. sogar mehr) in einem Flow abfragen.
5.2 Aktuelle Firmware / Modbus Interface Definitions
Hier noch ein Link zu den aktuellen Firmware Versionen:
SUN2000 FirmwareVielen Dank an alle, die den Input geliefert haben!
Ich hoffe es hilf, wenn ich es hier einmal zusammengefasst habe.Hallo,
vielen vielen Dank für diesen sehr umfangreichen und praktikablen Beitrag!
Eine Frage jedoch:
Du verlinkst in deinem Eröffnungsbeitrag auf einen anderen Forenbeitrag in dem man an die PDF für die "Modbus Interface Definitions" kommt.Das verlinkte PDF scheint jedoch veraltet zu sein.
Jedenfalls nutzt du Register-Addressen, die dort nicht drin vorkommen (bsp. 37066, 37068, usw).
Hast du zufällig eine aktuelle Dokumentation zur Hand und könntest die hier einstellen?
Bei den anderen (älteren) Register klappt es dank deiner Anleitung super!!
Viele Grüße
Gerd
-
Hallo,
vielen vielen Dank für diesen sehr umfangreichen und praktikablen Beitrag!
Eine Frage jedoch:
Du verlinkst in deinem Eröffnungsbeitrag auf einen anderen Forenbeitrag in dem man an die PDF für die "Modbus Interface Definitions" kommt.Das verlinkte PDF scheint jedoch veraltet zu sein.
Jedenfalls nutzt du Register-Addressen, die dort nicht drin vorkommen (bsp. 37066, 37068, usw).
Hast du zufällig eine aktuelle Dokumentation zur Hand und könntest die hier einstellen?
Bei den anderen (älteren) Register klappt es dank deiner Anleitung super!!
Viele Grüße
Gerd
Modbus interface definitions V4.0
Danke für den Hinweis, habe oben auch die neue Version 4 verlinkt jetzt. -
@badsnoopy667 Hallo,
ich bekomme beim Importieren immer einen Fehler : SyntaxError: Unexpected token 'c', ..."ert": falsch, "... is not valid JSONan was kann das liegen, steh total auf dem Schlauch
-
@badsnoopy667 Hallo,
ich bekomme beim Importieren immer einen Fehler : SyntaxError: Unexpected token 'c', ..."ert": falsch, "... is not valid JSONan was kann das liegen, steh total auf dem Schlauch
@zizu29 Du meinst beim Importieren des Flows in node-red?
Kann mir nur vorstellen, dass Du nicht den ganzen Flow markiert hast ausversehen und da jetzt z.B. das Ende fehlt. Guck dir das mal an, eine andere Idee habe ich gerade nicht.Was mir gerade noch auffällt: Deine Error-Message enthält das Wort "falsch". Das taucht aber im gesamten Flow nicht auf. Nur das englische Wort "false". Kann es sein, dass dein Browser Englisch automatisch übersetzt? Dann wäre der Flow nämlich nicht zu gebrauchen. Lade den Flow mal runter und öffne ihn in einem Textdokument, nicht im Browser.
-
Hi Mat,
das möchte ich auch versuchen, da auch bei mir mit dem ursprünglichen Flow reichlich Logeinträge entstehen:

Allerdings komme ich mit dem Parsing nicht klar, vielleicht kannst Du da noch mal ein Beispiel oder Screencopy beisteuern. Du schreibst 'edit puffer-parser'. Ist das etwas anderes als der normale 'buffer-parser' den ich in der linken Spalte finde?
Viele Grüße
Heinrich@warp-it
Die Warnings bekommst du weg, indem du node-red-contrib-modbus updatest.Ich hab das auf der Kommandozeile gemacht:
mit npm outdated werden veraltete Packages anzeigezeigt,

mit npm update node-red-contrib-modbus erfolgt das Update.
Danach hatte ich keine Einträge mehr.
VG -
@warp-it
Die Warnings bekommst du weg, indem du node-red-contrib-modbus updatest.Ich hab das auf der Kommandozeile gemacht:
mit npm outdated werden veraltete Packages anzeigezeigt,

mit npm update node-red-contrib-modbus erfolgt das Update.
Danach hatte ich keine Einträge mehr.
VG@joschipp So macht ihr euch eure installation mit Sicherheit kaputt. Entweder aktualisiert ihr über den Palettenmanager oder wenn schon via npm dann im Node-Red Datenverzeichnis. So jedenfalls wird Eure komplette iobroker installation schief.
-
@joschipp So macht ihr euch eure installation mit Sicherheit kaputt. Entweder aktualisiert ihr über den Palettenmanager oder wenn schon via npm dann im Node-Red Datenverzeichnis. So jedenfalls wird Eure komplette iobroker installation schief.
@mickym said in [HowTo] Huawei SUN2000 WR Modbus mit node-red (read + write):
@joschipp So macht ihr euch eure installation mit Sicherheit kaputt. Entweder aktualisiert ihr über den Palettenmanager oder wenn schon via npm dann im Node-Red Datenverzeichnis. So jedenfalls wird Eure komplette iobroker installation schief.
@joschipp
Vielen Dank Euch beiden für die beiden Hinweise. Hab das Update über die Palettenverwaltung gemacht.Viele Grüße
Heinrich -
@joschipp So macht ihr euch eure installation mit Sicherheit kaputt. Entweder aktualisiert ihr über den Palettenmanager oder wenn schon via npm dann im Node-Red Datenverzeichnis. So jedenfalls wird Eure komplette iobroker installation schief.
@mickym
Ich kenn mich rund um npm nicht sonderlich gut aus, aber ich musste die 3 Packages (vor einem ioBroker Update) zu Fuß installieren, weil der Palettenmanager das nicht schaffte.Machte ich mit npm install node-red-contrib-modbus
Und das Update - wie oben gepostet.Wüsste nicht, was da jetzt schief ist - bzw. wie man das erkennt:

-
@mickym
Ich kenn mich rund um npm nicht sonderlich gut aus, aber ich musste die 3 Packages (vor einem ioBroker Update) zu Fuß installieren, weil der Palettenmanager das nicht schaffte.Machte ich mit npm install node-red-contrib-modbus
Und das Update - wie oben gepostet.Wüsste nicht, was da jetzt schief ist - bzw. wie man das erkennt:

@joschipp Wie gesagt, wenn Du es im Node-Red Datenverzeichnis gemacht hast, dann ist alles gut. Dann gibt ja auch npm list einen sauberen Baum aus. Wenn Du es im iobroker Verzeichnis gemacht hast, dann hast diesen Baum auch nicht.
weil der Palettenmanager das nicht schaffte.
das sind erste Anzeichen, dass in der Installation was schief ist.
-
@joschipp Wie gesagt, wenn Du es im Node-Red Datenverzeichnis gemacht hast, dann ist alles gut. Dann gibt ja auch npm list einen sauberen Baum aus. Wenn Du es im iobroker Verzeichnis gemacht hast, dann hast diesen Baum auch nicht.
weil der Palettenmanager das nicht schaffte.
das sind erste Anzeichen, dass in der Installation was schief ist.
@mickym
Danke für den Hinweis bzw. Warnung, aber npm checkt offensichtlich, wo die Packages sind. Outdated zeigt auch aus dem c:\iobroker Verzeichnis heraus, welche node_modules veraltet sind - siehe Bild oben. Und das Update hab ich von dort aus gemacht.
Der Baum ist lt. list ok - soweit ich das erkennen kann:

VG -
@mickym
Danke für den Hinweis bzw. Warnung, aber npm checkt offensichtlich, wo die Packages sind. Outdated zeigt auch aus dem c:\iobroker Verzeichnis heraus, welche node_modules veraltet sind - siehe Bild oben. Und das Update hab ich von dort aus gemacht.
Der Baum ist lt. list ok - soweit ich das erkennen kann:

VG@joschipp Ok - ich will dich nicht zu irgendwas überreden. Aber im iobroker root - Verzeichnis sollten eigentlich sowieso nur iobroker module zu sehen sein. Wahrscheinlich hast du dann unter dem Baum ein Haufen extraneous Einträge.
Ich hab zwar mein iobroker auf dem Raspberry und nicht auf einem Windowssystem laufen - aber npm bzw. nodejs bleibt ja in der Regel nodejs. Wenn ich meinen Baum anschauen, dann schaut der halt relativ clean aus.
pi@mwhome:/opt/iobroker $ npm list iobroker.inst@3.0.0 /opt/iobroker ├── iobroker.admin@6.3.5 ├── iobroker.backitup@2.5.12 ├── iobroker.dwd@2.8.3 ├── iobroker.flot@1.11.0 ├── iobroker.info@1.9.19 ├── iobroker.javascript@7.0.3 (git+ssh://git@github.com/ioBroker/ioBroker.javascript.git#e142e623597a2f593faf9fe328797b453eb82ce2) ├── iobroker.js-controller@4.0.24 ├── iobroker.linux-control@1.1.3 ├── iobroker.mercedesme@0.1.1 (git+ssh://git@github.com/TA2k/ioBroker.mercedesme.git#982f60a77258877119465ee09fbd881677b93375) ├── iobroker.mqtt@4.0.7 ├── iobroker.node-red@4.0.0 (git+ssh://git@github.com/ioBroker/ioBroker.node-red.git#049d7bdddc747071fc7379551d4bd7a66d690c57) ├── iobroker.pi-hole@1.3.4 ├── iobroker.ping@1.5.3 ├── iobroker.simple-api@2.7.2 ├── iobroker.socketio@4.2.0 ├── iobroker.sourceanalytix@0.4.14 ├── iobroker.sql@2.2.0 ├── iobroker.tr-064@4.2.18 ├── iobroker.tuya@3.13.1 ├── iobroker.vis-hqwidgets@1.3.0 ├── iobroker.vis@1.4.15 ├── iobroker.web@4.3.0 └── iobroker.yahka@0.17.0 pi@mwhome:/opt/iobroker $Ich denke aber, dass diese Diskussion hier in dem Thread wahrscheinlich nichts zu suchen hat. Musst ggf. einen eigenen Thread aufmachen und halt ein Komplettbackup oder Image machen - bevor Du da was machst.
-
@joschipp Ok - ich will dich nicht zu irgendwas überreden. Aber im iobroker root - Verzeichnis sollten eigentlich sowieso nur iobroker module zu sehen sein. Wahrscheinlich hast du dann unter dem Baum ein Haufen extraneous Einträge.
Ich hab zwar mein iobroker auf dem Raspberry und nicht auf einem Windowssystem laufen - aber npm bzw. nodejs bleibt ja in der Regel nodejs. Wenn ich meinen Baum anschauen, dann schaut der halt relativ clean aus.
pi@mwhome:/opt/iobroker $ npm list iobroker.inst@3.0.0 /opt/iobroker ├── iobroker.admin@6.3.5 ├── iobroker.backitup@2.5.12 ├── iobroker.dwd@2.8.3 ├── iobroker.flot@1.11.0 ├── iobroker.info@1.9.19 ├── iobroker.javascript@7.0.3 (git+ssh://git@github.com/ioBroker/ioBroker.javascript.git#e142e623597a2f593faf9fe328797b453eb82ce2) ├── iobroker.js-controller@4.0.24 ├── iobroker.linux-control@1.1.3 ├── iobroker.mercedesme@0.1.1 (git+ssh://git@github.com/TA2k/ioBroker.mercedesme.git#982f60a77258877119465ee09fbd881677b93375) ├── iobroker.mqtt@4.0.7 ├── iobroker.node-red@4.0.0 (git+ssh://git@github.com/ioBroker/ioBroker.node-red.git#049d7bdddc747071fc7379551d4bd7a66d690c57) ├── iobroker.pi-hole@1.3.4 ├── iobroker.ping@1.5.3 ├── iobroker.simple-api@2.7.2 ├── iobroker.socketio@4.2.0 ├── iobroker.sourceanalytix@0.4.14 ├── iobroker.sql@2.2.0 ├── iobroker.tr-064@4.2.18 ├── iobroker.tuya@3.13.1 ├── iobroker.vis-hqwidgets@1.3.0 ├── iobroker.vis@1.4.15 ├── iobroker.web@4.3.0 └── iobroker.yahka@0.17.0 pi@mwhome:/opt/iobroker $Ich denke aber, dass diese Diskussion hier in dem Thread wahrscheinlich nichts zu suchen hat. Musst ggf. einen eigenen Thread aufmachen und halt ein Komplettbackup oder Image machen - bevor Du da was machst.
