NEWS
[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
@joschipp Hallo.
Zuerst mal danke für deine Arbeit.
Kannst du mir sagen, ob bei deinem flows auch die Batterien abgefragt werden?
Bin in Node-red kompletter Anfänger.
Hab zwar dein flows.json erfolgreich installiert aber da mir noch mein 10kW Speicher fehlt, der erst nächste Woche kommt,. von den Batterien keine Datenpunkte gefunden.
kannst du mir da weiter helfen, wird das erst abgefragt wenn die Batterien angeschlossen sind?
Danke im Voraus, Gruß Jürgen -
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 zusammen.
Vielen Dank für den Flow. Klappt wunderbar, nachdem ich herausfand, dass die "0" bei mir dir richtige ID ist und ein ander Port zu nehmen ist.
Was ich aber leider noch nicht ganz gefunden haben ist der aktuelle Hausverbrauch in den ganzen Registern. Die Register von denen ich an nahm sie seien der Hausverbrauch, liefern mir teilweise die selben Werte wie die Aktuelle PV Leistung.
Konkret würde ich diese Werte haben:- Aktuelle Gesamt Erzeugungsleistung der PV Anlage
- Aktuelle Leistung in den Akku bzw. Aus dem Akku
- Aktueller Verbrauch des Hauses
- aktueller Bezug aus dem Netz bzw. Einspeisung in das Netz
Vielleicht könnt ihr mir helfen welche Register das wirklich sind?
Gruß -
@Christof-Lewandowski
Ich frage drei größere Adressbereiche ab, das wird dann über einen Buffer-Parser ausgewertet und alle Werte in einzelne Datenpunkte geschrieben. Ich denke im Prinzip das was du suchst, anbei der Flow.
Zwischen den Abfragen habe ich aktuell eine Minute Verzögerung, das Abfrageintervall kann man sicher auch noch runtersetzen, läuft so aber bereits seit Wochen problemlos.@spexx hallo. Ich habe Deinen Flow importiert, IP angepasst und schon lief alles - eine deutliche Optimierung zum Opener dieses Threads …. SUPER!
Generelle Frage: woher hast Du den Input, den Du in dem Buffer Parser verwendet hast? Ich frage um sicher zu gehen, dass die von Dir verwendete Definition zu meinem HUIWAI SUN2000-6KTL-M1 passt.
Gruß
Andreas S. -
@spexx hallo. Ich habe Deinen Flow importiert, IP angepasst und schon lief alles - eine deutliche Optimierung zum Opener dieses Threads …. SUPER!
Generelle Frage: woher hast Du den Input, den Du in dem Buffer Parser verwendet hast? Ich frage um sicher zu gehen, dass die von Dir verwendete Definition zu meinem HUIWAI SUN2000-6KTL-M1 passt.
Gruß
Andreas S.Hi Community.
Es klappt vieles mit dem Flow, aber er startet nur für einen Durchgang, der Re-Trigger, also jede Minute auf ein Neues, will nicht. Habe verschiedene Flows aus diesem Threat ausprobiert und keiner will einfach weiterlaufen. MeinFlow.json.txt . Habe einen parallelen Flow, der brav jede Minute macht was er soll … Node-Red läuft. Hat jemand eine Idee?
Gruß
Andreas -
Habe seit gestern Probleme, meine Daten auszulesen!
Kennt wer diese Fehlermeldung?:
-
Leider funktioniert es doch nicht so wie erhofft. Wenn ich den Flow (egal welchen) starte, dann erhalte ich 1x Werte. Aus Verzweiflung habe ich Node Red aus meinem IOBroker entfernt und neu installiert und die Flows neu importiert …. Alles ohne Erfolg - die MODBUS Kommunikation zickt. Zwischenzeitlich habe ich ein paar Debug Informationen, Kann mir jemand etwas dazu sagen?


-
Leider funktioniert es doch nicht so wie erhofft. Wenn ich den Flow (egal welchen) starte, dann erhalte ich 1x Werte. Aus Verzweiflung habe ich Node Red aus meinem IOBroker entfernt und neu installiert und die Flows neu importiert …. Alles ohne Erfolg - die MODBUS Kommunikation zickt. Zwischenzeitlich habe ich ein paar Debug Informationen, Kann mir jemand etwas dazu sagen?


Hallo,
ich bekomme seit dem ich meine Wallbox installiert haben, folgende Fehlermeldung:
2023-07-31 16:03:34.176 warn 31 Jul 16:03:34 - [warn] [modbus-getter:32066] Modbus Failure On State sending Get More About It By Logging 31 Jul 16:03:34 - [warn] [modbus-getter:37101] Modbus Failure On State sending Get More About It By Logging 31 Jul 16:03:34 - [warn] [modbus-getter:30070] Modbus Failure On State sending Get More About It By Logging 31 Jul 16:03:34 - [warn] [modbus-getter:37765] Modbus Failure On State sending Get More About It By Logging node-red.0 2023-07-31 16:03:34.176 warn 31 Jul 16:03:34 - [warn] [modbus-getter:32080] Modbus Failure On State sending Get More About It By Loggingkann mir jemand helfen?
-
Hallo,
ich bekomme seit dem ich meine Wallbox installiert haben, folgende Fehlermeldung:
2023-07-31 16:03:34.176 warn 31 Jul 16:03:34 - [warn] [modbus-getter:32066] Modbus Failure On State sending Get More About It By Logging 31 Jul 16:03:34 - [warn] [modbus-getter:37101] Modbus Failure On State sending Get More About It By Logging 31 Jul 16:03:34 - [warn] [modbus-getter:30070] Modbus Failure On State sending Get More About It By Logging 31 Jul 16:03:34 - [warn] [modbus-getter:37765] Modbus Failure On State sending Get More About It By Logging node-red.0 2023-07-31 16:03:34.176 warn 31 Jul 16:03:34 - [warn] [modbus-getter:32080] Modbus Failure On State sending Get More About It By Loggingkann mir jemand helfen?
@homewolf
Läuft die Wallbox (welche isses denn?) auch auf ModBus? Vielleicht auf demselben Port? Dann könnte ich mir vorstellen, dass die sich blockieren. -
@homewolf
Läuft die Wallbox (welche isses denn?) auch auf ModBus? Vielleicht auf demselben Port? Dann könnte ich mir vorstellen, dass die sich blockieren.@badsnoopy667 ist die von Huawei 22 kw
-
Hallo,
vielen Dank für dieses Node-Red "Ready-to-use"-Paket. Ein wenig Anpassung und es läuft problemlos.
Nun versuche ich die gewonnenen Daten anzuzeigen und zu verstehen. Insbesondere möchte ich aus diesen Daten ein Dashboard aufbauen@ple
Ich würde sehr gerne dein Grafana-Dashboard nutzen. Was muss ich dafür tun?
Wenn ich das JSON importiere bleibt alles leer.

Wenn ich die Felder Editiere steht da nichts drin. Muss ich die Datenquelle vor dem Import bereits richtig anlegen? Wie muss die aussehen?
Gruß,
Christian -
@homewolf
Läuft die Wallbox (welche isses denn?) auch auf ModBus? Vielleicht auf demselben Port? Dann könnte ich mir vorstellen, dass die sich blockieren. -
Hallo zusammen.
Vielen Dank für den Flow. Klappt wunderbar, nachdem ich herausfand, dass die "0" bei mir dir richtige ID ist und ein ander Port zu nehmen ist.
Was ich aber leider noch nicht ganz gefunden haben ist der aktuelle Hausverbrauch in den ganzen Registern. Die Register von denen ich an nahm sie seien der Hausverbrauch, liefern mir teilweise die selben Werte wie die Aktuelle PV Leistung.
Konkret würde ich diese Werte haben:- Aktuelle Gesamt Erzeugungsleistung der PV Anlage
- Aktuelle Leistung in den Akku bzw. Aus dem Akku
- Aktueller Verbrauch des Hauses
- aktueller Bezug aus dem Netz bzw. Einspeisung in das Netz
Vielleicht könnt ihr mir helfen welche Register das wirklich sind?
Gruß@edde
Hallo alle miteinander!
Ich habe über Modbus aktuell meine Werte aus der Anlage ausgelesen und gebe diese in entsprechende Homematic-Systemvariablen aus.Da ich hier beim Vergleichen mit den Werten aus der Online-Fusionsolar-Anzeige teilweise nicht ganz erklärliche Differenzen bzw. Unterschiede feststellen musste: liege ich hier richtig oder habe ich hier noch Interpretationsfehler?
- aktueller PV-Ertrag (das was vom Dach kommt): 32064 Input Power
- PV-Gesamtertrag: 32106 Accumulated energy yield
- PV-Tagesertrag: 32114 Daily energy yield
- Akku-Ladestand: 37004 Energy storage
- Akku-Ladung des Tages: 37015 current day charge capacity
- Akku-Entladung des Tages: 37017 current day discharge capacity
- In/aus Netz: 37113 Active Power Meter
- Hauslast aktuell: 32080 Active Power Inverter - 37113 (in/aus Netz)
- Gesamtexport ins Netz: 37119 Positive active electricity
- Gesamteigenverbrauch PV: 32106 (PV-Gesamtertrag) abzüglich 37119 (Gesamtexport ins Netz)
- Gesamtverbrauch Strom: PV-Gesamtertrag + Gesamtexport ins Netz + 37121 Reverse active Power (Ges.import aus Netz)
Viele Grüße
-
Hi Leute ich hab bei mir Optimierer verbaut in beiden Strings. Ist es evtl. auch möglich davon Daten zu bekommen?
-
Kann jemand mit der Fehlermeldung was anfangen? Egal was ich umstelle. nichts hilft
State value to set for "0_userdata.0.Huawei.Inverter.Model" has to be stringified but received type "object"@homewolf sagte in [HowTo] Huawei SUN2000 WR Modbus mit node-red (read + write):
Kann jemand mit der Fehlermeldung was anfangen? Egal was ich umstelle. nichts hilft
State value to set for "0_userdata.0.Huawei.Inverter.Model" has to be stringified but received type "object"Dein Datenpunkt ist vom Typ String aber du empfängst Daten vom Typ Object.
Du kannst den Datentyp im Datenpunkt manuell auf object ändern, dann sollte der Fehler weg sein. -
@homewolf sagte in [HowTo] Huawei SUN2000 WR Modbus mit node-red (read + write):
Kann jemand mit der Fehlermeldung was anfangen? Egal was ich umstelle. nichts hilft
State value to set for "0_userdata.0.Huawei.Inverter.Model" has to be stringified but received type "object"Dein Datenpunkt ist vom Typ String aber du empfängst Daten vom Typ Object.
Du kannst den Datentyp im Datenpunkt manuell auf object ändern, dann sollte der Fehler weg sein.@atifan wo stell ich das ein ?
im Objekt steht folgendes
{ "common": { "read": false, "write": true, "desc": "Created by Node-Red", "role": "Text", "name": "Huawei", "type": "object" }, "native": {}, "type": "state", "_id": "0_userdata.0.Huawei.Inverter.Model", "from": "system.adapter.admin.0", "user": "system.user.admin", "ts": 1691774042770 -
Kann jemand mit der Fehlermeldung was anfangen? Egal was ich umstelle. nichts hilft
State value to set for "0_userdata.0.Huawei.Inverter.Model" has to be stringified but received type "object" -
@homewolf Ja Du musst das Objekt stringifizieren. Schalte einfach eine JSON Node davor. Mach den Datenpunkt entweder als String oder als JSON.
-
@mickym sorry aber ich bin ein absoluter Neuling auf dem Gebiet. Ich bekomm es leider nicht hin, kannst du mir ein Beispiel schicken ? So sieht es aktuell bei mir aus.

Momentan bekommst Du das als Ergebnis raus, also ein Array mit einem Element.

Ein Array kommt deshalb raus, weil Du es so in Deiner Ausgabe spezifiziert hast.
Also dem Element 0. Wenn Du aus dem Array nur den String als payload in die iobroker Out Node schreiben willst, dann extrahierst Du dieses Element mit einer Change NOde.
So schreibst Du nur das 1. Element (Index 0) in Deine iobroker Out Node. Nun ist es KEIN Objekt mehr sondern nur der String.

Wenn Du mehrere Ausgaben hast, weil Du mehr parsed und Du willst das Array oder Objekt in einen Datenbunkt schreiben dann machst Du eine JSON Node davor - dann wird Dein Array stringifiziert - also ein JSON String erzeugt.

So kannst Du Objekte in einen iobroker Datenpunkt schreiben, wenn Du ein komplexeres Objekt hast.
===========================================================================================
DIE EINFACHSTE LÖSUNG ist, wenn Du Dir einfach mehrfache Ergebnisse ausgeben lässt. Da Du nur EINES hast, brauchst Du dann gar KEINE Node mehr dazwischen. So kannst Du das Ergebnis direkt in die iobroker-Out Node schreiben.

Wenn Du Dir also mehrfache Ergebnisse ausgeben lässt, dann macht die Buffer Node Dir einzelne Nachrichten und in diesem Fall direkt den String.
Ich hoffe ich konnte nun KLARHEIT in die Funktionsweise der Parser Node und deren Ausgabe bringen.
Nur zur Info, wenn Du einzelne Nachrichten haben willst - Du aber mehrfache hast kannst Du auch das topic setzen und in das Nachrichtenobjekt mit aufnehmen lassen.

Nun könntest Du auch mehrere Ausgaben haben und diese mit EINER iobroker-Out Node in mehrere Datenpunkte schreiben.

Statt das topic nun Model und Bezeichnung zu nennen, könntest Du nun als Topic den Pfad zum Datenpunkt angeben. Wenn Du also in der iobroker-Out Node das topic weglässt, kann es auch aus dem Nachrichtenobjekt genommen werden:

Ich würde auch ReadOnly nehmen und value - dann werden die Datenpunkte auch erstellt, wenn Du es in der Adapterkonfiguration zulässt. So kannst Du quasi direkt aus der Buffer Parser Node mehrere Datenpunkte gleichzeitig beschreiben:
Wie Du siehst funktioniert das einwandfrei:

So ich glaube nun solltest Du genügend Anregung haben. ;) Zur besseren Übersichtlichkeit könnte man aber auch die Namen Model und Bezeichnung lassen und den Pfad zum Datenpunkt mit einer Change Node ergänzen. Aber hier gibt es einfach mehrere Wege die zum Ziel führen und sind dann auch Geschmackssache.
=========================================================================
Ich will Dich aber nicht verwirren - für Dein Problem - einfach die Parser Node wie anfangs beschrieben einfach umstellen:

Das topic brauchst Du dann nicht - da Du es ja in Deiner iobroker-Out Node eingegeben hast.
-
@jwedenig said in [HowTo] Huawei SUN2000 WR Modbus mit node-red (read + write):
Habe seit gestern Probleme, meine Daten auszulesen!
Kennt wer diese Fehlermeldung?:
Gibt es hierfür eine Lösung, ? habe gesehen, das bei mir auch einige Werte nicht mehr geschrieben werden seit längere Zeit....
Ab Register 32072 taucht das Problem auf? Wurde eventuell beim Update die Register geändert?


