NEWS
[HowTo] Huawei SUN2000 WR Modbus mit node-red (read + write)
-
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.@badsnoopy667 Ich möchte gerne meinem Sun2000 WR einen Shelly Pro3EM als Smartmeter anschliessen, statt dem Huawei Smart Sensor DTSU666. Der Shelly ist bei mir schon montiert. Die Daten kann ich wunderbar per Node RED über Modbus an den WR schicken.
Gibt es da Erfahrungen?
-
@badsnoopy667 Ich möchte gerne meinem Sun2000 WR einen Shelly Pro3EM als Smartmeter anschliessen, statt dem Huawei Smart Sensor DTSU666. Der Shelly ist bei mir schon montiert. Die Daten kann ich wunderbar per Node RED über Modbus an den WR schicken.
Gibt es da Erfahrungen?
ich würde den Original Huawei DTSU nehmen oder lassen. Da dieser direkt mit dem WR per RS485 verbunden ist und schnell die Änderungen von Strombezüge dem WR mitteilt, damit dieser dann Strom aus der Batterie liefern kann.
-
ich würde den Original Huawei DTSU nehmen oder lassen. Da dieser direkt mit dem WR per RS485 verbunden ist und schnell die Änderungen von Strombezüge dem WR mitteilt, damit dieser dann Strom aus der Batterie liefern kann.
@0815_peter aber genau das wäre ja der Shelly auch...
-
@0815_peter aber genau das wäre ja der Shelly auch...
ja stimmt das schon
Aber der Shelly funkt per WLAN zum iobroker--> iobroker dann per WLAN oder LAN zum WR und das sollte alles im Sekunden Bereich laufen damit der WR immer den aktuellen Stand hat.
Ich sag immer nix geht über ein KabelIch würde es nicht machen, da mir die Fehlerquellen zu hoch werden wenn man noch eine Middleware dazwischen schaltet.
Die Frage ist ja auch hat der WR die Register im Mod-Bus wo du ihn sagst wieviel gerade eingespeist oder bezogen wird?Aber Versuch macht Klug.
Hast du schon versucht Register zuschreiben? Da musst du die Datenformate usw. einhalten. Ich habe es noch nicht mal geschafft die Batterie Cut OFF Werte dem WR zusenden, da man die Datenwerte richtig aufarbeiten muss.
-
Wenn man dem WR sagen kann, wie hoch die Einspeisung ist, wofür braucht man den Shelly? Ich weiß doch auch über den IR Lesekopf am Smartmeter, wie viel ich verbrauche oder einspeise.
Würde mich sehr interessieren, wie ich die Werte zum WR bekommen. -
Wenn man dem WR sagen kann, wie hoch die Einspeisung ist, wofür braucht man den Shelly? Ich weiß doch auch über den IR Lesekopf am Smartmeter, wie viel ich verbrauche oder einspeise.
Würde mich sehr interessieren, wie ich die Werte zum WR bekommen.@hant0r der WR empfängt die Werte über Modbus. Entweder Modus TCP (Dongle) oder über Modbus RTU 2 Draht Anschluss.
-
@approx3145 Dann muss ich mir das mal genauer ansehen. Wäre ja cool, wenn ich dem WR die Daten zur Verfügung stellen könnte. Hast du das schon gemacht?
Edit: Bzw. weiß du, welche Adresse das beim Modbus ist?
-
@approx3145 Dann muss ich mir das mal genauer ansehen. Wäre ja cool, wenn ich dem WR die Daten zur Verfügung stellen könnte. Hast du das schon gemacht?
Edit: Bzw. weiß du, welche Adresse das beim Modbus ist?
@approx3145
Habe jetzt nochmal weiter geschaut, aber ich finde nichts dazu, dass man dem WR die Werte in irgendeiner Form zukommen lassen kann. Sehr schade -
@approx3145
Habe jetzt nochmal weiter geschaut, aber ich finde nichts dazu, dass man dem WR die Werte in irgendeiner Form zukommen lassen kann. Sehr schaderein Packtisch --> wenn du im Fusion Solar Portal dir die Konfigurationen der Geräte anschaust, sind das alles Register die bearbeitet oder gelesen werden können.
-
@0815_peter
Ich habe im Fusion Solar Portal mir die Konfigurationen der Geräte angesehen. Allerdings finde ich da leider auch nichts, wo ich dem WR meine Daten zum Hausverbrauch / Netzeinspeisung übermitteln könnte. Stehe irgendwie auf dem Schlauch 😞 -
@0815_peter
Ich habe im Fusion Solar Portal mir die Konfigurationen der Geräte angesehen. Allerdings finde ich da leider auch nichts, wo ich dem WR meine Daten zum Hausverbrauch / Netzeinspeisung übermitteln könnte. Stehe irgendwie auf dem Schlauch 😞@hant0r
Wofür willst Du die Daten denn an den WR schicken? Du hast doch gesagt, Du hast keine Batterie. Dann muss der WR doch gar nicht wissen, ob Du gerade einspeist oder nicht. -
@homewolf said in [HowTo] Huawei SUN2000 WR Modbus mit node-red (read + write):
@badsnoopy667ja laufen beide auf 502... aber das ist doch auch richtig oder?
Hi @HomeWolf
ich hab auch den SCharger und versuch seit einiger Zeit verzweifelt zum einen an die Register zu kommen und zum anderen überhaupt eine Verbindung zur Wallbox herzustellen.
Wie hast du das gemacht?
Hast du eine Modbus-Connection zur Wallbox über die Dongle-IP oder über die Wallbox IP?
Welche Register nutzt zu für welchen Wert?Würd mich freuen, wenn du mich hier ein wenig aufschlaust :-)
Danke! -
@homewolf said in [HowTo] Huawei SUN2000 WR Modbus mit node-red (read + write):
@badsnoopy667ja laufen beide auf 502... aber das ist doch auch richtig oder?
Hi @HomeWolf
ich hab auch den SCharger und versuch seit einiger Zeit verzweifelt zum einen an die Register zu kommen und zum anderen überhaupt eine Verbindung zur Wallbox herzustellen.
Wie hast du das gemacht?
Hast du eine Modbus-Connection zur Wallbox über die Dongle-IP oder über die Wallbox IP?
Welche Register nutzt zu für welchen Wert?Würd mich freuen, wenn du mich hier ein wenig aufschlaust :-)
Danke! -
Hallo zusammen, ich bekomme soweit alle Daten heraus die ich brauche. Ich versuche aber seit Tagen die Tageswerte herein zu bekommen: Netzbezug / Netzeinspeisung.
Hat jemand eine Idee? Egal ob ich es über Node Red versuche oder über die Northbound Schnittstelle über das Fusion Solar Portal.
-
Hallo zusammen, ich bekomme soweit alle Daten heraus die ich brauche. Ich versuche aber seit Tagen die Tageswerte herein zu bekommen: Netzbezug / Netzeinspeisung.
Hat jemand eine Idee? Egal ob ich es über Node Red versuche oder über die Northbound Schnittstelle über das Fusion Solar Portal.
Ich habe noch

Wenn ich das richtig sehe ist das die kumulierte Netzeinspeisung. Wenn du die jeden Morgen speicherst und abends den Wert abziehst hast du schonmal den Tageswert für die Einspeisung
Und unter Inverter habe ich noch den Tagesertrag:

Wenn du das gegenrechnest müsstet du doch den Netzbezug haben, oder?
-
@bastian-rüggen
Freut mich das es klappt!
Die Efficiency habe ich deaktiviert, weil bei mir auch nur Mist ausgelesen wird. MMn müsste das die Effizienz vom Wechselrichter sein. Also das Verhältnis von Input Power (Solarleistung DC) zu Active Power (Erzeugung/Abgabe auf der AC Seite).
Ganz am Anfang kam da mal ein plausibler Wert, so um die 90-95%. Dann stand irgendwann nur noch [41.37] oder so da.@badsnoopy667 sagte in [HowTo] Huawei SUN2000 WR Modbus mit node-red (read + write):
@bastian-rüggen
Die Efficiency habe ich deaktiviert, weil bei mir auch nur Mist ausgelesen wird. MMn müsste das die Effizienz vom Wechselrichter sein. Also das Verhältnis von Input Power (Solarleistung DC) zu Active Power (Erzeugung/Abgabe auf der AC Seite).Du übersetzt Input Power mit Solarleistung DC, doch wie ist das mit den anderen englischen Angaben, wobei varc die Übersetzung von vara sein soll: varb sind die Register dazu. Ich frage diese Werte über ein Python script ab und habe so meine Zweifel ob ich die Herkunft der Daten richtig zuordne.
Dongleabfrage:
vara = ['total_input_power','grid_power','load_power','total_battery_power','total_active_power']
varb = ['37498','37502','37500','37504','37516']
varc = ['total_input_power','Input_Zaehler','load_power','total_battery_power','total_active_power']
Inverterabfrage:
vara = ['storage_current_day_discharge_capacity','storage_total_charge','storage_total_discharge','storage_current_day_charge_capacity',
'wechselrichter_power','solar_power','storage_charge_discharge_power','storage_state_of_capacity',
'phase_A_voltage','phase_B_voltage','phase_C_voltage',
'phase_A_current','phase_B_current','phase_C_current','daily_yield_energy',
'storage_unit_1_state_of_capacity','storage_unit_1_charge_discharge_power','storage_unit_2_state_of_capacity','storage_unit_2_charge_discharge_power']
varb =['37786','37780','37782','32086',
'32080','32064','37765','37760',
'32069','32070','32071',
'32072','32074','32076','32114',
'37004','37001','37738','37743']
varc = ['Batterie_Tag_entladen','Batterie_Total_in','Battereie_Total_aus','Batterie_Tageskapazitaet',
'wechselrichter_power','Solarleistung','Batterie_ein_aus','Batterstorage_state_of_capacity',
'Phase_A_Spannung','Phase_B_Spannung','Phase_C_Spannung',
'Phase_A_Strom','Phase_B_Strom','Phase_C_Strom','Tag_bezogen',
'Batterie_1_Kapazitaet','Batterie_1_Be-Entladung','Batterie_2_Kapazität','Batterie_2_Be-Entladung']
Michael -
Hat es eigentlich schon jemand geschafft die start und Ende uhrzeit im time of use betriebsmodus über modbus einzustellen? Laut Dokumentation ist es das register 47255 mit type bytes und quantity 43.
Ich beiße mir daran die Zähne aus und komme einfach nicht voran. Ich würde das gerne mit einem nodered flow machen.
Hintergrund ist, durch den stromanbieter tibber möchte ich in den Wintermonaten gezielt den Speicher zu den günstigen Zeiten laden. Die günstigsten Zeiten habe ich schon in iobroker als datenpunkte und werden täglich berechnet. Auch schon umgerechnet in Minuten.Bei mir hackt es wirklich nur noch daran, wie ich diese mit über modbus schreiben kann.
@doom-86 said in [HowTo] Huawei SUN2000 WR Modbus mit node-red (read + write):
Hat es eigentlich schon jemand geschafft die start und Ende uhrzeit im time of use betriebsmodus über modbus einzustellen? Laut Dokumentation ist es das register 47255 mit type bytes und quantity 43.
Ich beiße mir daran die Zähne aus und komme einfach nicht voran. Ich würde das gerne mit einem nodered flow machen.
Hintergrund ist, durch den stromanbieter tibber möchte ich in den Wintermonaten gezielt den Speicher zu den günstigen Zeiten laden. Die günstigsten Zeiten habe ich schon in iobroker als datenpunkte und werden täglich berechnet. Auch schon umgerechnet in Minuten.Bei mir hackt es wirklich nur noch daran, wie ich diese mit über modbus schreiben kann.
Hast du es mittlerweile geschafft? Wäre auch daran interessiert den Speicher zu günstigen Zeiten zu laden.
-
@doom-86 said in [HowTo] Huawei SUN2000 WR Modbus mit node-red (read + write):
Hat es eigentlich schon jemand geschafft die start und Ende uhrzeit im time of use betriebsmodus über modbus einzustellen? Laut Dokumentation ist es das register 47255 mit type bytes und quantity 43.
Ich beiße mir daran die Zähne aus und komme einfach nicht voran. Ich würde das gerne mit einem nodered flow machen.
Hintergrund ist, durch den stromanbieter tibber möchte ich in den Wintermonaten gezielt den Speicher zu den günstigen Zeiten laden. Die günstigsten Zeiten habe ich schon in iobroker als datenpunkte und werden täglich berechnet. Auch schon umgerechnet in Minuten.Bei mir hackt es wirklich nur noch daran, wie ich diese mit über modbus schreiben kann.
Hast du es mittlerweile geschafft? Wäre auch daran interessiert den Speicher zu günstigen Zeiten zu laden.
@christof-lewandowski hab das auch geplant und wär interessiert an einer Lösung.
-
@doom-86 said in [HowTo] Huawei SUN2000 WR Modbus mit node-red (read + write):
Hat es eigentlich schon jemand geschafft die start und Ende uhrzeit im time of use betriebsmodus über modbus einzustellen? Laut Dokumentation ist es das register 47255 mit type bytes und quantity 43.
Ich beiße mir daran die Zähne aus und komme einfach nicht voran. Ich würde das gerne mit einem nodered flow machen.
Hintergrund ist, durch den stromanbieter tibber möchte ich in den Wintermonaten gezielt den Speicher zu den günstigen Zeiten laden. Die günstigsten Zeiten habe ich schon in iobroker als datenpunkte und werden täglich berechnet. Auch schon umgerechnet in Minuten.Bei mir hackt es wirklich nur noch daran, wie ich diese mit über modbus schreiben kann.
Hast du es mittlerweile geschafft? Wäre auch daran interessiert den Speicher zu günstigen Zeiten zu laden.
@christof-lewandowski
Das würde mich auch immer noch brennend interessieren.
Ich bin mir gar nicht sicher, ob man wirklich Register 47255 schreiben muss. Das scheint das Register zu sein um dem Speicher konkrete Lade- und Entladezeiträume zu übertragen. Deshalb ist es auch 43 Zeichen lang.
Es gibt noch mehrere andere Register die sich alle mit Forced Charge / Discharge beschäftigen. Diese sind teilweise deutlich kürzer und damit (vermutlich) einfacher zu schreiben. Aber bisher habe ich es noch nicht hinbekommen.Es gibt eine Home Assistant Integration für den Huawei Wechselrichter. Diese scheint von den Screenshots bei GitHub her auch das Forced Charging zu unterstützen.
HA IntegrationIch habe schon bei GitHub einen Adapter-Request für iobroker gestellt. Ich hätte die Hoffnung, dass sich Teile der HA Integration nutzen lassen dafür?
-
@christof-lewandowski
Das würde mich auch immer noch brennend interessieren.
Ich bin mir gar nicht sicher, ob man wirklich Register 47255 schreiben muss. Das scheint das Register zu sein um dem Speicher konkrete Lade- und Entladezeiträume zu übertragen. Deshalb ist es auch 43 Zeichen lang.
Es gibt noch mehrere andere Register die sich alle mit Forced Charge / Discharge beschäftigen. Diese sind teilweise deutlich kürzer und damit (vermutlich) einfacher zu schreiben. Aber bisher habe ich es noch nicht hinbekommen.Es gibt eine Home Assistant Integration für den Huawei Wechselrichter. Diese scheint von den Screenshots bei GitHub her auch das Forced Charging zu unterstützen.
HA IntegrationIch habe schon bei GitHub einen Adapter-Request für iobroker gestellt. Ich hätte die Hoffnung, dass sich Teile der HA Integration nutzen lassen dafür?
@badsnoopy667 das im HA sieht gut aus. Mal schauen ob ich zum Test mal im ioBroker den Modbus Zugriff deaktiviere und über HA Teste.
