NEWS
[HowTo] Huawei SUN2000 WR Modbus mit node-red (read + write)
-
@stoffel67
Ich glaube du musst die drei NPM Packages noch in der Instanz hinzufügen. Habe ich im ersten Post beschrieben. -
@badsnoopy667
Die müßte ich doch drin haben
-
Ohh, im Dongle war ModBus-TCP nicht aktiviert…
Und schon gehts…allerdings sehr wenig Werte, oder ist das OK?Kann man die Daten der zwei MPP getrennt ausgeben?
-
Warum werden einige der Werte nicht angelegt/ausgegeben?
-
@stoffel67
Es sieht so aus, als wären die Nodes bei dir inaktiv. Doppklick darauf -> Register "Setup" -> ganz links unten von Disabled auf Enabled umstellen und neu deployen.Frage in die Runde:
Seit wenigen Tagen bekomme ich keinen Wert mehr aus den Registern 37015 (Battery - current day charge capacity) und 37017 (Battery - current day discharge capacity). Hat jeman ähnliches beobachtet? Früher bekam ich dort immer sauber die Werte...
Alle anderen Register geben die Werte wie gewohnt aus.
Dongle läuft auf FW Version V100R001C00SPC130
Inverter (SUN2000-6KTL-M1) läuft auf FW Version V100R001C00SPC150Lösung gefunden: Die Register 37015 & 37017 sind jene, mit denen die Werte der einzelnen Akku-Module ("Engery Storage Unit") ausgelesen werden. Scheinbar sind diese plötzlich maskiert (wenngleich ich kürzlich kein FW-Update vorgenommen hatte - aber evtl. war das auch ein forced update) und werden über den TCP-MODBUS nicht mehr ausgegeben.
In den JSONs weiter oben werden ebenfalls diese Register abgefragt (war dann OK, solange man nur einen Akku hatte - inzwischen wie gesagt nicht mehr zu gebrauchen).
Lösung: Auf jene Register ausweichen, welche die Werte aller Akkumodule zusammenfassen. Auf der HUAWEI-Seite habe ich gerade die vollständige MODBUS Interface Definition nicht gefunden, kann man aber hier nachschlagen (Version 04 vom 29.03.2022 - direkter Link). Die Abfrage über die dort angegebenen Register 37784 und 37786 funktioniert klaglos.LG,
Mat -
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ß,
Mat -
-
@madmat17
Das klingt spannend. Kannst du deinen Flow Mal Posten? Danke Dir! -
@madmat17 said in [HowTo] Huawei SUN2000 WR Modbus mit node-red (read + write):
Es sieht so aus, als wären die Nodes bei dir inaktiv. Doppklick darauf -> Register "Setup" -> ganz links unten von Disabled auf Enabled umstellen und neu deployen.
Danke für den Hinweis... das wars
-
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
-
Können die beiden Werte für Startup und Shutdown auch ausgelesen werden?
Ich hab es mit 32091 und 32093 versucht, ich bekomme aber z.B. permanent „512“ zuzrück? -
@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
-
@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. -
hast du hier den Grund gefunden? ich habe gerade das selbe "PRoblem" und noch keine Werte
-
@ts_482
Hallo,
kannst du mal schauen, ob du auch die Register 32091 und 32093 lesen kannst? -
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. -
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
-
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 -
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