Closed RoHa78 closed 4 months ago
@RoHa78 Der Wechselrichter nutzt ModBus und kann darüber eingebunden werden (Google einmal nach SUN2000 ModBus)
@RoHa78 Der Wechselrichter nutzt ModBus und kann darüber eingebunden werden (Google einmal nach SUN2000 ModBus)
Leider scheint der ModBus-Adaper vom IOBroker damit nicht zu funktionieren siehe https://forum.iobroker.net/topic/46048/huawei-sun2000-mit-modbus-adapter-in-iobroker-einbinden Und Scripting / NoteRed beherrsche ich leider nicht.
Wäre dennoch interessant ob das ein Problem/Fehler vom Modbus Adapter ist und mit einem zukünftigen Update gelöst werden könnte. Dazu müsste man aber mal mind (Debug)Logs, die Modbus Spec vom WR und die (Register)Einstellungen der Instanz liefern damit es sich ein Entwickler ansehen kann. Das ganze natürlich als Issue des Modbusadapters.
Edit: hier gibt es schon eines zu Huawei WR: https://github.com/ioBroker/ioBroker.modbus/issues/250
Hi zusammen, nur zur info, falls jemand statt Modbus lieber die Cloud nehmen will (oder in Kombi, zwecks Anreicherung mit zusätzlichen Infos), ich habe gerade einen veröffentlicht:
https://github.com/KornSW/ioBroker.fusionsolar
https://forum.iobroker.net/topic/59422/new-adapter-huawei-fusionsolar-api
bei interesse gerne mal testen ;-)
Grüße, Tobias PS: habs mit Modbus leider auch nicht hinbekommen - würde es allerdings auch bevorzugen!
Hallo zusammen, Ich habe mich recht ausführlich mit Modbus auseinander gesetzt. Und bin dabei einen Adapter zu schreiben, der die Interessanten Modbusregister in den ioBroker übernimmt. Aber ebend das Gerät an sich darstellt. Ist hier noch bedarf? Bzw. Bräuchte ich irgendeine Mitwirkung um die Geräte in den Adapter zu integrieren. Frage: Wir reden über Modbus TCP? Oder?
Grüße
@Icke-de Ja das ist korrekt, beim o.g. Wechselrichter handelt es sich um Modbus TCP. Der Befehlsatz sollte unter https://support.huawei.com/enterprise/en/fusionsolar/smartlogger-pid-21294677?category=configuration-commissioning&subcategory=configuration-guide downloadbar sein. Diverse Links zu diesem Wechselrichter (inkl. Akku) sind von mir im ersten Post vermerkt. Da ich softwaremäßig nicht allzugut bewandert bin kann ich diesbezüglich nur als Tester unterstützen. Eine Möglichkeit die ich aktuell nutze und ebenfalls auf Modbus TCP besteht ist das Projekt auf https://solaranzeige.de/phpBB3/viewtopic.php?t=170, ist aber standalone. IOBroker wäre mir jedoch deutlich sympatischer... Anbei ein "kleiner" Auszug aus der DB von Solaranzeige dieser Anlage:
Testen reicht mir da völlig aus. Wenn du Lust und Zeit hast. Die Modbusintegration bei meinem Adapter kann zum Testen über ein NodeJS Projekt laufen, Um erst einmal zu schauen, ob die Werte richtig ankommen. So habe ich das mit meinem SMA TP 8 zumindest gemacht, bevor ich das Ganze im ioBroker eingebunden habe. Kannst du bitte einen direkten Link auf die Modbusbeschreibung setzen ? Ich habe oben bei Huawai geschaut, weiß aber nicht genau welches Dokument genau gemeint ist.
Habe folgende direkte URL für die Beschreibung: https://support.huawei.com/enterprise/en/doc/EDOC1100050690?idPath=9452479%7C21439560%7C7921563%7C21102414%7C21294677 Sollte dann fogendes Dokument angezeigt werden, das dann runtergeladen werden kann: Hab auch mal angefangen in NodeRed das Ganze umzusetzen, funktioniert zwar, bin aber hier noch nicht sehr weit:
Ja, das habe ich auch gefunden. Was allerdings die Frage aufwirft willst du den Sun2000 oder den Smartlogger per Modus ansprechen? Das sind wenn ich das richtig geblickt habe, 2 verschiedene Geräte. Sorry, ich muss das für mich nur erst einmal rund haben. Zur Erklärung bei mir ist auch ein Smartmeter zusätzlich verbaut, was die Kommunikation zum SMA Portal (Sunny Portal) übernimmt, was grundsätzlich auch per Modbus abgefragt werden kann, habe aber den WR implementiert. Also spreche den direkt an. Bei Huawei gibt es in dem PDF (2.5) einen Verweis auf eine eigene Modbus Beschreibung für den Sun2000.
So wie ich das verstehe, sammelt der Wechselrichter die Daten vom Smartlogger. Dieser wiederum ist mit einem sog. SDongle mit dem Netzwerk verbunden. Über diese Schnittstelle können dann die Daten allesamt sowohl von Wechselrichter, Akku und Smartmeter abgefragt werden. Habe hierzu noch folgenden Link gefunden https://photomate.zendesk.com/hc/en-gb/article_attachments/8560845348253/SDongle_V100R001C00SPC133_Release_Documents.zip Hierin enthalten ist ein kompletter Dokumentensatz von diesem SDongle. Darin befindet sich auch das Dokument SDongleA V100R001C00 MODBUS Interface Definitions.pdf. Mit diesen Angaben sollte man dann über diesen SDongle die kompletten Daten abfragen können. Wenn ich die wenigen Adressen, die ich in NodeRed verwendet habe, mit denen vergleiche, die in o.g. Doku stehen, stimmen die miteinander überein, und das scheint ja zu funktionieren ;)
Ok, dein NodeRed Script (nennt man das Script?) wirft auch Daten aus? Du hast also eine valide Datenausgabe, mit der du dann die Adapterwerte prüfen kannst?
Dann bau ich das was du brauchst in den Adapter ein. 😉
Zur Erläuterung: der Adapter bzw. Die Modbus Integration ist nicht fix, kann also auch erweitert werden, nur nicht so wie im Modbusadapter, dass man einzelne Register selber hinzufügen kann, dass passiert alles in dem NodeJS Modul (also im Java Script). Ich wollte keinen Adapter parallel zum Modbus Adapter. Meine Idee galt es die Modbusgeräte wie oben gezeigt in eine Struktur zu bringen die das Gerät an sich wieder spiegelt. Der Typ ist in der Config einzustellen.
Super, das hört sich gut an. Habe mal die Daten zusammengestellt, die ich bisher über "www.Solaranzeige.de" geliefert bekomme. Huawei MEASUREMENTS.pdf
@RoHa78 : kennst du dich en bisschen mit NodeJS aus?
Bitte teste mal folgendes: (installierte NodeJS 18.16.0 LTS vorausgesetzt)
Clone dir bitte folgendes Repro mit: https://github.com/Icke-de/modbus_inverter.git
git clone https://github.com/Icke-de/modbus_inverter.git
Wechsle in das Verzeichnis: [dein Verzeichnis]\modbus_inverter
npm install
(Abhängigkeiten werden installiert)
Wechsle in das Unterverzeichnis "examples".
Öffne die Datei "test_modbusregister.ts" mit einem Editor deiner Wahl.
Passe folgende Werte entsprechend deiner Konfiguration an:
let ipAddress = ""; let modbusPort = 502; let unitId = 1;
(Achtung: ipAddress ist ein string
daher bitte in "", Port und unitId ist vom typ number
)
Datei speichern und in die Konsole wechseln: cmd
oder powershell
in einem Windows system
Gehe wieder in das Verzeichnis cd [dein Verzeichnis]\modbus_inverter\examples
führe ts-node test_modbusregister.ts
aus.
Ich habe das Modul in TypeSript umgesetzt bzw. Erweitert (ist eine Implementierung für SMA Devices gewesen, das habe ich als Grundlage verwendet) In meinem Jugendlichem Leichtsinn würde ich meinen die Ausgabe zeigt dir die Werte an, die in deinem Node Red Script vorhanden sind. Ich bin gespannt was passiert.
Bin gerade noch unterwegs, melde mich aber umgehend, wenn ich am testen bin.
Habe nun versucht, das Ganze zum Laufen zu bringen, leider nur mit mäßigem Erfolg:
Bereits bei npm install
sind etliche Fehler angezeigt worden (installierte NodeJS 18.16.0 sollte passen, siehe hierzu das angefügte LOG)
habe mich hier nicht beirren lassen und weiter gemacht.
Bei Punkt ts-node test_modbusregister.ts
hat er die ts-node nicht gefunden:
2023-06-04T17_15_27_422Z-debug-0.log
Hast Du eine Ahnung an was das liegen kann oder was ich hier falsch mache (mein IOBroker läuft auf einem Raspi, dort habe ich das Ganze auch getestet)?
Muss ich mir genauer anschauen. Wichtig ist, dass die DEV-dependencies mit installiert werden, da ts-Node ebenfalls ein Modul ist. Anderen falls könntest du ts-node auch separat installieren. npm install ts-node. Könnte aber auch sein, dass ich das bei mir (Windows) global mit -g installiert habe. Gleiches gilt für TypeScript. Das habe ich auch global installiert.
Moin,
ich habe gerade kurz das mit Node und npm auf einer leeren Ubuntu Maschine probiert.
Was ich dabei gemerkt habe, ist das anscheinend ts-node nicht mit installiert wurde. Das dann bitte noch , wenn du im root Verzeichnis ([dein Verzeichnis]\modbus_inverter) bist mit npm install ts-node
installieren.
Das sollte soweit funktionieren.
Alternativ kannst du schauen, mit tsc -v
ob TypeScript installiert ist. Dann im Verzeichnis Examples tsc test_modbusregister.ts
ausführen. Dadurch wird die .ts in eine .js konvertiert. die kannst du dann mit node test_modbusregister.js
starten.
Hallo @Icke-de, habe nun versucht ts-node w.o. zu installieren. Hat diesbezüglich keine Fehler angezeigt. Aufruf von tsc -v ist leider fehlgeschlagen. Hab das Gefühl, das da was verbogen ist ...
Dann fehlt da noch TypeScript. Ich würde allerdings nicht deinen ioBroker nehmen, nicht da was kaputt geht ;-). Theoretisch sollte das funktionieren, aber zum Testen habe ich meinen Windows Rechner genommen. Und aber auch eine VM mit Ubuntu. Ich würde schau mal, dass ich einen Rechner nehme wo noch nichts weiter mit Node gemacht wurde. Das muss funktionieren. NodeJS und NPM verhalten sich ja erst einmal nicht unterschiedlich. Die genaue Reihenfolge bzw. Befehle schicke ich dann.
Habe nun mittlerweile ein jungfräuliches Ubuntu 22.04 in einer VM. Wie soll ich weiter vorgehen?
OK, dann mal los:
apt update
apt upgrade
apt install nodejs
node -v (output: v18.7.0)
apt install npm
npm -v (output: 8.18.0)
git -v (output: git version 2.37.2)
cd /opt
git clone https://github.com/Icke-de/modbus_inverter.git
ls
(output: root@test-node:/opt# ls
modbus_inverter)cd modbus_inverter/
npm install
apt install ts-node
ts-node -v (output: v10.9.1)
cd examples
ls
(output: sunny_island6-0.ts sunny_tripower-8.ts test_modbusregster.ts)nano test_modbusregister.ts
(IP Adresse eintragen in die "") mit Strg-o (speichern) Strg-x (beenden)ts-node test_modbusregister.ts
Ich habe das bei mir mit ts-node sunny_tripower-8.ts
getestet, das kam dann raus.
root@test-node:/opt/modbus_inverter/examples# ts-node sunny_tripower-8.ts
Seriennummer wird ausgelesen!
3014711683
DeviceClass wird ausgelesen!
Solar-Wechselrichter
2840.236
46.462
0
0
OK (ok)
Achso wichtig ist vielleicht noch. Ich habe mit root gearbeitet. Daher brauchte ich sudo nicht immer vorschreiben. Möglicherweise musst du das machen. Bei dir funktioniert auch nur test_modbusregister.ts. Das sunny...ts Script ist natürlich auf meinen WR konfiguriert. Viel Erfolg.
Sorry, dass ich mich jetzt erst wieder melde.
Habe o.g. Schritte bis einschließlich Punkt 12 durchführen können, musste aber noch nodejs von Standardversion 12.22.9 auf die 18.7.0 updaten müssen. hat soweit ohne Fehler geklappt.
Bei der Installation von ts-node hat er dann gestreikt weil anscheinend irgendwelche Pakete kaputt waren. ein apt update
und apt upgrade
haben hier aber keine neuen Dateien installiert.
Ausgabe von apt install ts-node
Kann man das irgendwie beheben?
Weiß nicht so 100% ob das was hilft. Aber ein boot tut immer gut. Starte die Maschine einmal neu. Dann könntest du npm auf die latest version update. npm install -g npm@latest
(bei mir hat er allerdings auch erst nach einem reboot die aktuelle Version angezeigt. node -v
sollte dann 9.6.7 auswerfen. Schau mal ob du dann ts-node installieren kannst.
Ist schon komisch bei meinem Ubuntu wurde npm in 8.18.0 installiert, bei dir 8.15.0. Dabei ist 9.6.7 aktuell. Ich komme eigentlich aus der Windows Welt, Hab mich auch nicht wirklich mit den ganzen Paketmanager und Repertoires befasst.
(Was im übrigen bedeutet, dass ich mich noch damit befassen muss, wie man einen Adapter, wenn er funktional und fertig ist veröffentlicht, dass auch andere was davon haben ;-).)
Aber alles zu seiner Zeit :) Probiere das mal bitte
Hat leider nicht funktioniert, habe auch noch mal die Abhängigkeiten fixen lassen und sowohl nodejs als auch npm auf die aktuellsten stabilen Versionen aktualisiert, ts-node ließ sich dann leider immer noch nicht installieren. Werde morgen mal googlen oder vielleicht das Ganze mit einem Raspi ö.ä. aufsetzen. Melde mich wieder wenn ich da weitergekommen bin. Erstmal aber vielen Dank für Deine Unterstützung!
Mittlerweile bin ich etwas weiter, nachdem ich nun statt Ubuntu Debian in der VM habe (liegt auch näher am Raspbian ;)) Die Ganzen Pakete laufen soweit, ts-node "Hello world" läuft ebenfalls. IP vom Wechselrichter (DongleA) ist eingetragen, Parameter stimmen mit meinem funktionierenden NodeRed überein, sämtliche sonstigen Master sind deaktiviert.
Bei test_modbusregister.ts fehlt noch das "i" im Name. Da nach ca. 5min Wartezeit noch keine Reaktion erfolgt ist, hab ich das Script abgebrochen. Entweder es kommen keine Daten oder irgendwas mit der Initialisierung ist noch nicht ganz i.O.
Viele Grüße
Hi, Das mit dem I habe ich gesehen, dachte aber ich hab das oben in der Beschreibung falsch geschrieben und da auch korrigiert. Jetzt sehe ich das ich die Datei schon falsch benannt habe. Pass ich dann auch mal an. Eigentlich ist es so, das zumindest eine response kommt 'kann keine Verbindung aufbauen' und das dann in einer Schleife. Ich schau nachher nochmal drauf, ob ich da einen groben Fehler gemacht habe. Was ich damit sagen will ist, dass eigentlich eine Reaktion kommen muss. Gleiches würde passieren, wenn du sunny_tripower8.ts starten würdest, außer auf der IP 192.168.178.123 antwortet ein Gerät auf Port 502. ;-). Wie gesagt ich schau nochmal und Push ggf. noch was in das Repro. So Remote Support ist echt schwierig ;-). Aber das passt schon. Ich brauch ne einfachere Art Geräte zu testen. Welche IP hat dein Gerät? Ich hab für meine Test einen Modbus Slave eingesetzt, dann würde ich das gleich so einstellen. Achso die UnitID / SlaveID müsste ggf. angepasst werden.
Hallo, Unit-ID sollte passen, siehe Rückmeldung von NodeRed: "Client -> fsm connected after state init Get More About It By Logging TCP@192.168.178.26:502 default Unit-Id: 1" Was nimmst Du als Modbus Slave, ist das eine separate Hardware oder nur Software?
eine Software, EasyModbusTCP Server Simulator. Aber das Script sollte etwas ausgeben, Garnichts ist falsch. Wenn du beispielsweise die IP änderst kommt sowas hier.
PS C:\Work\node_projects\testHuawei\modbus_inverter\examples> ts-node .\test_modbusregister.ts Connect to: 192.168.178.90 Couldnt connect to 192.168.178.90:502 Couldnt connect to 192.168.178.90:502 Couldnt connect to 192.168.178.90:502 Couldnt connect to 192.168.178.90:502 PS C:\Work\node_projects\testHuawei\modbus_inverter\examples>
Ich hab das "Connect to:" hinzugefügt, ist eine Consolen Ausgabe in der Funktion die aufgerufen wird. Und das i im Dateinamen habe ich hinzugefügt ;-) bitte beachten.
Hab's nun nochmals getestet, Connection kommt zustande, jedoch nach längerer Wartezeit (3-4min) hab ich abgebrochen (Script ist 2x gestartet worden -> siehe Screenshot). Jetzt wäre interessant, ob überhaupt was kommt oder der Wechselrichter gar nicht reagiert.
Also Fehlermeldungen Wie Register wird nicht unterstützt oder ähnlich kommen wenn sie zutreffend sind. Was gibt dir denn dein NodeRed Script aus? der erste Register ist 30000 der Abgefragt wird.
Aktuell kommt, außer "Connect to..." keine weitere Meldung mehr. Anbei nun die Konfiguration in NodeRed (inkl. der Rückmeldung vom Wechselrichter -> siehe rechts Ausgabe debug 1)
Als Ergebnis nach der "Aufbereitung" sollte hier dann folgendes stehen:
Die Rückmeldewerte werden als short integer (2Byte) in einem 15er Array gespeichert. D.h. die Zahl im ersten Index 21333 oder Hex &x5355 entspricht als ASCII den ersten beiden Buchstaben der Modellbezeichnung, nämlich "SU" Hoffe dies hilft etwas weiter.
Ja das hilft weiter. Ich pass das mal an. Und gebe Bescheid. Ich glaube ich Weiß woran es liegt. Allerdings, das hat mich etwas gewundert ist der Datentyp in der Modbusbeschreibung "String". Ich mach da mal was und melde mich.
Nabend,
ich habe nochmal was hochgeladen. Ich weiß nicht recht, müsstest du einmal Testen. Ich habe folgendes gemacht. Erst einmal beschränkt auf 1 Abfrage. (Modell) Das habe ich dann mit dem Slave Server getestet.
Dazu habe ich die Werte einmal eingetragen, die dein NodeRed Script ausgibt.
In dem Bild siehst du, dass die Modbusregister um -1 verschoben sind. Ich kann gerade nicht sagen, ob das am Slave oder der Modbusintegration liegt. Bei meinem WR musste ich die exakten Register ansprechen. Jetzt ist es so eingestellt, dass das 1 Register was abgefragt wird 29999 ist. Wie gesagt es müsste eine Fehlermeldung kommen, wenn die Register nicht unterstützt werden, daher wundert mich das ein bisschen. Um Sicher zu gehen, dass hier vielleicht was anderes erwartet wird als gedacht.
(angepasst: in /lib/devices/huawei_SDongleA.ts) Falz du das wieder ändern möchtest nimm die "-1" hinter der 30000 wieder weg.
Das Ergebnis ist folgendes:
PS C:\Work\node_projects\testHuawei\modbus_inverter\examples> ts-node .\test_modbusregister.ts
Connect to: 127.0.0.1
Modell: SUN2000-8KTL-M101074300-00202
Der Datentyp ist mit string
auch richtig.
Wenn dein NodeRed Script einen "permanenten" Request auf den WR macht, schalte das bitte einmal ab.
Ich habe bei mir gemerkt, dass wenn ich die Modbusschnittstelle zu oft abfrage bzw. Das Intervall zu kurz ist, Das Modbus da streikt bzw. die Schnittstelle nicht antwortet.
Du kannst auch die Auskommentierung in der test_modbusregister.ts
verändern um z.B. die Modellnummer abzufragen. Damit eventuell mal irgendwas zurück kommt. (oder wie gesagt auch mal bewusst eine falsche IP eintragen, ob die entsprechende Fehlermeldung kommt) Würde mich wundern wenn nicht, das könnte ich dann nicht wirklich nachvollziehen.
Bin auch hier wieder gespannt ob das was bringt.
grüße und viel Erfolg ;-)
Hi, folgendes Ergebnis:
wird eine falsche IP angegeben wird eine Fehlermeldung angezeigt
roha78@debian-RoHa:/opt/modbus_inverter/examples$ ts-node test_modbusregister.ts
Connect to: 127.0.0.1
Couldnt connect to 127.0.0.1:502
Couldnt connect to 127.0.0.1:502
Couldnt connect to 127.0.0.1:502
^C
Werden "falsche" Register (bei richtiger IP) abgefragt (29999 oder 30000) hat dies keine Fehlermeldung zur Folge (nach wie vor keine Rückmeldung)
Ich habe deshalb mal alle Registerzugriffe auskommentiert, um zu sehen, ob das Script sich beendet, was es dann auch tat. Als nächstes habe ich die Registeradresse für die Modellbezeichnung wieder auf 30000 gesetzt. Zusätzlich habe ich mal spaßeshalber den Datentyp im huawei_SDongleA.ts von String auf int16 gesetzt. Dies hat dann folgendes Ergebnis geliefert: hier scheint es sich um den Integerwert der ersten beiden Buchstaben "SU" zu handeln Folgerung: Strings sind normalerweise eine eine Aneinanderkettung von Bytes (8Bit), die Werte im WR sind jedoch als 16Bit-Integer abgelegt. Möglicherweise gibt es dann hier eine Art "Überlauf" der Variable, wenn ich eine integer-Zahl in ein Byte einlesen möchte, d.h. man müsste erst die integer einlesen und danach die High- und Low-Byte getrennt in 2 Einzelne Stringzeichen umwandeln.
Na vielleicht sollten wir die Codierung von utf-8 auf utf-16 umstellen. Ich meine im Nodemodul die utf-8 Codierung bei String gesehen zu haben. In dem Fall müssten wir den Datentyp noch hinzufügen sodass utf-8 oder utf-16 ausgewählt werden kann. (Das ist jetzt so ins Blaue gesprochen ohne lange drüber nachgedacht zu haben) Heute habe ich keine Zeit mehr. Komme erst morgen dazu was zu verändern.
Kein Problem, das Ganze eilt ja nicht. Ich befürchte dass eine Umstellung von UTF-8 auf UTF-16 nichts bringen wird. In dem Integer Wert vom WR sind ja zwei ASCII kodiert, UTF-16 heißt ja in diesem Fall nur dass ich in einem 16Bit Wert noch weitere Sonderzeichen kodieren könnte, z.B. die Japanischen Schriftzeichen, heißt dass alles >8 Bit sind alternative Zeichensätze siehe https://www.fileformat.info/info/charset/UTF-16/list.htm Gibt es die Möglichkeit, dass ich den Ablauf des Scripts mit einem Breakpoint stoppen und mir den Rückgabewert von z.B. 'return await super.readModbusHR(30000, ModbusDatatype.int16, 15);' anzeigen lassen kann? Sollte doch nach meiner Interpretation ein Array von 0-14 sein, in dem sich somit 15 verschiedene Integerwerte befinden. Nun müsste man die 2 Bytes des Integer von jedem Index-Wert im Array in zwei einzelne Bytes trennen und diese nacheinander in einen String schreiben (jedes Byte entspricht dann dem ASCII Wert). Dieser String wird dann von der Funktion zurückgegeben. Möglicherweise existiert hier auch bereits eine fertige Funktion...
Du willst dir den Buffer ausgeben lassen? Schau doch mal in die lib/modbus_typings.ts
Was funktionieren würde, wenn du dir einen Pseudo Datentyp erstellst. Z.B. json. Anstelle eines return
fügst du ein console.log ein. So wird kein Wert zurückgegeben, aber eine Konsolenausgabe erzeugt.
Ausgabe aus dem Test:
PS C:\Work\node_projects\testHuawei\modbus_inverter\examples> ts-node .\test_modbusregister.ts Connect to: 127.0.0.1 { type: 'Buffer', data: [ 83, 85, 78, 50, 48, 48, 48, 45, 56, 75, 84, 76, 45, 77, 49, 0, 48, 49, 48, 55, 52, 51, 48, 48, 45, 48, 48, 50, 0, 0 ] }
Ich Push das mal ins Git. Dann kannst du dir anschauen, was ich meine. Das mit den Breakpoints geht eventuell im VisualStudio (Da verwende ich dies in Verbindung mit C#) bei VS Code allerdings habe ich mich damit noch nicht beschäftigt.) In den Datentypen kannst du schauen, was am Besten passt. Nimmst du das toJson() weg, wird der Buffer direkt ausgegeben. Das Json fand ich aber gar nicht so schlecht, Wenn man sich die ASCII Tabelle anschaut und die Werte die im JSON stehen. (Vorausgesetzt, dein WR gibt da auch was Sinnvolles aus)
Hallo, sorry hatte gestern leider keine Zeit... Habe nun aktuell nochmal mit der aktuellen Version getestet, leider ohne Erfolg. Was dabei auffällig ist, nachdem die Connection hergestellt wurde, blinkt der Cursor etwa 2-3 Sekunden, dann bleibt er schwarz, als ob sich das Ganze aufhängt, nur über CTRL+C komme ich wieder in die Konsole. Sämtliche andere Abfragequellen sind beim Versuch komplett deaktiviert, so dass diese nicht dazwischenfunken können. Hab das Ganze dann auch mal unter Android mit Modbus Monitor versucht auszulesen: dies scheint so zu funktionieren, aktuell habe ich leider keine Idee, wie wir hier weiterkommen können...
na liest du da die Inputregister oder die Holdingregister? Du könntest readModbusHR gegen readModbusIR tauschen, dann würdest du die Inputregister auslesen. Ansonsten würde ich mich damit nochmal genauer befassen und mich da belesen. Ein bisschen reizt mich das ja schon. Kannst du mir dein NodeRed Script irgendwie zukommen lassen? Geht das? Ich kenne zwar NodeRed wenn es komplexer wird muss man sich aber ganz schön anstrengen da durchzusehen.
@RoHa78 Wenn du den Flow mit ModBus öffnest: Oben Rechts auf das Hamburger Menü. Dort Export wählen. Aktueller Flow anklicken. Dann JSON Alles kopieren. Im GitHub Editor auf "addCode" oder den Text in eine Datei speichern und hier hochladen, falls es zu viele Zeichen sind.
Falls die Werte in der Konfigurationsnode wichtig sind:
Unter dem Hamburger Menü den Pfeil nach unten klicken Konfigurations-Node auswählen die Modbus Node suchen hier reichen als erstes ein Screenshot
@stilicrafter 👍 @RoHa78 : ich habe da nochmal was ins GIT gelegt. Von der Theorie her gibt er nur den Buffer aus. Da wird sonst nichts weiter gemacht. Alternativ könntest du auch nochmal auf uint16 umstellen (das hat zumindest funktioniert) dort sollte ebenfalls der Buffer auf der Konsole ausgegeben werden. Und ändere mal bitte die länge von 15 auf 8 (vorher) und lies das als string aus. Möglicher Weise fragen wir mit einer Länge von 15 zu viele Register ab und bekommen daher nichts richtiges raus. Ausgabe Länge 15 : Connect to: 127.0.0.1 <Buffer 53 55 4e 32 30 30 30 2d 38 4b 54 4c 2d 4d 31 00 30 31 30 37 34 33 30 30 2d 30 30 32 00 00> Ausgabe Länge 8 : Connect to: 127.0.0.1 <Buffer 53 55 4e 32 30 30 30 2d 38 4b 54 4c 2d 4d 31 00> das entspricht : SUN2000-8KTL-M1
Habe nun mal mit der aktuellen Version sämtliche Varianten ausprobiert (wie immer, sonstige Zugriffe auf den Wechselrichter-Modbus deaktiviert):
Hier wie gewünscht den NodeRed-Flow als Grafik (auf der Debugseite sieht man die korrekten Werte die ausgelesen werden):
als Export: [ { "id": "cae4a37bf579427a", "type": "tab", "label": "Huawei Wechselrichter", "disabled": false, "info": "", "env": [] }, { "id": "132209fe2c51adfa", "type": "inject", "z": "cae4a37bf579427a", "name": "24 Std. Intervall", "props": [ { "p": "payload" }, { "p": "topic", "vt": "str" } ], "repeat": "86400", "crontab": "", "once": true, "onceDelay": "60", "topic": "", "payload": "", "payloadType": "date", "x": 136.9999771118164, "y": 63.9999942779541, "wires": [ [ "fbb0aa0a6afb6470" ] ] }, { "id": "fbb0aa0a6afb6470", "type": "modbus-getter", "z": "cae4a37bf579427a", "name": "Modell [30000]", "showStatusActivities": false, "showErrors": false, "logIOActivities": false, "unitid": "1", "dataType": "HoldingRegister", "adr": "30000", "quantity": "15", "server": "70220ecd.1ca1e", "useIOFile": false, "ioFile": "", "useIOForPayload": false, "emptyMsgOnFail": false, "keepMsgProperties": false, "x": 186.9999771118164, "y": 123.9999942779541, "wires": [ [ "bf7c3f42dbbd3560", "b790e417b2cf36de" ], [ "4d9af070056bb1cd" ] ] }, { "id": "bf7c3f42dbbd3560", "type": "buffer-parser", "z": "cae4a37bf579427a", "name": "", "data": "payload", "dataType": "msg", "specification": "spec", "specificationType": "ui", "items": [ { "type": "string", "name": "Model", "offset": 0, "length": 15, "offsetbit": 0, "scale": "0.1", "mask": "" } ], "swap1": "", "swap2": "", "swap3": "", "swap1Type": "swap", "swap2Type": "swap", "swap3Type": "swap", "msgProperty": "payload", "msgPropertyType": "str", "resultType": "value", "resultTypeType": "output", "multipleResult": false, "fanOutMultipleResult": false, "setTopic": true, "outputs": 1, "x": 410, "y": 120, "wires": [ [ "174efb1a3c2f371c", "3105fd673238e831" ] ] }, { "id": "174efb1a3c2f371c", "type": "ioBroker out", "z": "cae4a37bf579427a", "name": "Model", "topic": "0_userdata.0.Huawei.Inverter.Model", "ack": "true", "autoCreate": "true", "stateName": "Huawei", "role": "name", "payloadType": "string", "readonly": "false", "stateUnit": "", "stateMin": "", "stateMax": "", "x": 590, "y": 120, "wires": [] }, { "id": "3105fd673238e831", "type": "debug", "z": "cae4a37bf579427a", "name": "Ausgabe1", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "true", "targetType": "full", "statusVal": "", "statusType": "auto", "x": 840, "y": 80, "wires": [] }, { "id": "4d9af070056bb1cd", "type": "modbus-getter", "z": "cae4a37bf579427a", "name": "Modell-ID [30070]", "showStatusActivities": false, "showErrors": false, "logIOActivities": false, "unitid": "1", "dataType": "HoldingRegister", "adr": "30070", "quantity": "1", "server": "70220ecd.1ca1e", "useIOFile": false, "ioFile": "", "useIOForPayload": false, "emptyMsgOnFail": false, "keepMsgProperties": false, "x": 196.9999771118164, "y": 183.9999942779541, "wires": [ [ "321d3e31928530ce" ], [ "65ef3c45d7cdd4fb" ] ] }, { "id": "321d3e31928530ce", "type": "buffer-parser", "z": "cae4a37bf579427a", "name": "", "data": "payload", "dataType": "msg", "specification": "spec", "specificationType": "ui", "items": [ { "type": "uint16be", "name": "Model ID", "offset": 0, "length": 1, "offsetbit": 0, "scale": "1", "mask": "" } ], "swap1": "", "swap2": "", "swap3": "", "swap1Type": "swap", "swap2Type": "swap", "swap3Type": "swap", "msgProperty": "payload", "msgPropertyType": "str", "resultType": "value", "resultTypeType": "output", "multipleResult": false, "fanOutMultipleResult": false, "setTopic": true, "outputs": 1, "x": 410, "y": 180, "wires": [ [ "80436b4096368fdf", "066bdf8c2867e6cb" ] ] }, { "id": "80436b4096368fdf", "type": "ioBroker out", "z": "cae4a37bf579427a", "name": "Model ID", "topic": "0_userdata.0.Huawei.Inverter.Model_ID", "ack": "true", "autoCreate": "true", "stateName": "Huawei", "role": "", "payloadType": "number", "readonly": "false", "stateUnit": "", "stateMin": "", "stateMax": "", "x": 600, "y": 180, "wires": [] }, { "id": "65ef3c45d7cdd4fb", "type": "modbus-getter", "z": "cae4a37bf579427a", "name": "Seriennummer [30015]", "showStatusActivities": false, "showErrors": false, "logIOActivities": false, "unitid": "1", "dataType": "HoldingRegister", "adr": "30015", "quantity": "19", "server": "70220ecd.1ca1e", "useIOFile": false, "ioFile": "", "useIOForPayload": false, "emptyMsgOnFail": false, "keepMsgProperties": false, "x": 206.9999771118164, "y": 243.9999942779541, "wires": [ [ "4fa6470a18221c51" ], [ "c133f76ca9b21187" ] ] }, { "id": "4fa6470a18221c51", "type": "buffer-parser", "z": "cae4a37bf579427a", "name": "", "data": "payload", "dataType": "msg", "specification": "spec", "specificationType": "ui", "items": [ { "type": "string", "name": "Seril", "offset": 0, "length": 19, "offsetbit": 0, "scale": "0.1", "mask": "" } ], "swap1": "", "swap2": "", "swap3": "", "swap1Type": "swap", "swap2Type": "swap", "swap3Type": "swap", "msgProperty": "payload", "msgPropertyType": "str", "resultType": "value", "resultTypeType": "output", "multipleResult": false, "fanOutMultipleResult": false, "setTopic": true, "outputs": 1, "x": 410, "y": 240, "wires": [ [ "3f0423191d1298d2", "cfc3220d699d7ca3" ] ] }, { "id": "c133f76ca9b21187", "type": "modbus-getter", "z": "cae4a37bf579427a", "name": "30055", "showStatusActivities": false, "showErrors": false, "logIOActivities": false, "unitid": "1", "dataType": "HoldingRegister", "adr": "30035", "quantity": "19", "server": "70220ecd.1ca1e", "useIOFile": false, "ioFile": "", "useIOForPayload": false, "emptyMsgOnFail": false, "keepMsgProperties": false, "x": 156.9999771118164, "y": 303.9999942779541, "wires": [ [ "6e893d31c298faa4" ], [] ] }, { "id": "6e893d31c298faa4", "type": "buffer-parser", "z": "cae4a37bf579427a", "name": "", "data": "payload", "dataType": "msg", "specification": "spec", "specificationType": "ui", "items": [ { "type": "string", "name": "Seril", "offset": 0, "length": 19, "offsetbit": 0, "scale": "0.1", "mask": "" } ], "swap1": "", "swap2": "", "swap3": "", "swap1Type": "swap", "swap2Type": "swap", "swap3Type": "swap", "msgProperty": "payload", "msgPropertyType": "str", "resultType": "value", "resultTypeType": "output", "multipleResult": false, "fanOutMultipleResult": false, "setTopic": true, "outputs": 1, "x": 396.9999771118164, "y": 303.9999942779541, "wires": [ [ "ee79d48046e51d3a" ] ] }, { "id": "066bdf8c2867e6cb", "type": "debug", "z": "cae4a37bf579427a", "name": "Ausgabe2", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "true", "targetType": "full", "statusVal": "", "statusType": "auto", "x": 840, "y": 140, "wires": [] }, { "id": "3f0423191d1298d2", "type": "ioBroker out", "z": "cae4a37bf579427a", "name": "SerialNumber", "topic": "0_userdata.0.Huawei.Inverter.SerialNumber", "ack": "true", "autoCreate": "true", "stateName": "Huawei", "role": "name", "payloadType": "string", "readonly": "false", "stateUnit": "", "stateMin": "", "stateMax": "", "x": 620, "y": 240, "wires": [] }, { "id": "b790e417b2cf36de", "type": "debug", "z": "cae4a37bf579427a", "name": "debug 1", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "payload", "targetType": "msg", "statusVal": "", "statusType": "auto", "x": 366.9999771118164, "y": 83.9999942779541, "wires": [] }, { "id": "cfc3220d699d7ca3", "type": "debug", "z": "cae4a37bf579427a", "name": "Ausgabe 3", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "payload", "targetType": "msg", "statusVal": "", "statusType": "auto", "x": 850, "y": 200, "wires": [] }, { "id": "ee79d48046e51d3a", "type": "debug", "z": "cae4a37bf579427a", "name": "Ausgabe 4", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "payload", "targetType": "msg", "statusVal": "", "statusType": "auto", "x": 850, "y": 260, "wires": [] }, { "id": "70220ecd.1ca1e", "type": "modbus-client", "name": "WLAN-FE", "clienttype": "tcp", "bufferCommands": true, "stateLogEnabled": true, "queueLogEnabled": true, "failureLogEnabled": true, "tcpHost": "192.168.178.26", "tcpPort": "502", "tcpType": "DEFAULT", "serialPort": "/dev/ttyUSB", "serialType": "RTU-BUFFERD", "serialBaudrate": "9600", "serialDatabits": "8", "serialStopbits": "1", "serialParity": "none", "serialConnectionDelay": "100", "serialAsciiResponseStartDelimiter": "", "unit_id": "1", "commandDelay": "1", "clientTimeout": "5000", "reconnectOnTimeout": false, "reconnectTimeout": "2000", "parallelUnitIdsAllowed": true } ]
und einen Screenshot des Modbus-Nodes beispielhaft am "Modell" Node
sowie die Konfiguration:
Nachdem ich nun auch endlich meinen Wechselrichter in Betrieb habe wollte ich mich zum Status des Adapters informieren, ob es hier noch weiter geht. Wenn ihr irgendwelche Tester / INFO's Hilfe etc. benötigt dann kann ich mich gerne versuchen. Java ist jetzt nicht das was ich am besten kann, aber ein paar Skripte hab ich schon mal im iobroker (Blockly) geschrieben. Gruß chrisko
Nach meiner Kentnis ist derzeit kein ADAPTER in Entwicklung da sich noch kein Dev dafür gefunden hat.
Der Inverter ist via Modbus ansprechbar.
Aktuell "pausiert" das Projekt. Icke-de hat hier mal begonnen eine Art Universal-Modbus Adapter zu machen, bei dem per Konfiguration das entsprechende Gerät angesprochen werden kann. Der Standard Modbus-Adapter im IOBroker funktioniert mit dem Huawei Wechselrichter offenbar nicht. Mit NodeRED bekommt man es zum Laufen, hatten jedoch wie man im Verlauf oben sehen kann, hier auch Probleme eine Antwort zum WR zu bekommen. Das Problem scheint hier, das etwas störrische Verhalten des WR zu sein. Solange hier das Kommunikationsproblem nicht gelöst ist, liegt das Ganze auf Eis. Vielleicht hilft es Icke-de hier weiter, wenn sich hier weitere Tester mit einklinken, die hier zur Lösung beitragen können.
Wenn es Probleme mit dem Modbus Adapter gibt wär ein issue dort angebracht - falls keines existiert.
Issue beim Modbus-Adapter in Verbindung mit dem Huawei WR gibt es, liegt glaube aber nicht am Adapter 🤔
Danke euch. Ich habe es mit NodeRed ans laufen gebracht. War kein großes Thema da ja schon gut beschrieben. War mir nur nicht sicher ob Ihr noch Tester braucht. Wäre ja für den nicht so versierten Anwender eine nette Erleichterung gewesen.
==> Also ich kann gerne unterstützen wenn es ums testen geht ...
Hallo zusammen, ich bin gerade in meinem Bauprojekt am Haus etwas eingespannt. Daher bin ich noch nicht wirklich dazu gekommen etwas neues zu testen. Der Ehrgeiz das bei euch zum laufen zu bekommen ist auf jeden Fall da ;-). Ich glaube aber das wird erst zum ende des Jahres wieder was, wenn man draußen nicht mehr so viel machen kann. Dann bin ich wieder dabei. Ich habe einen Ansatz gefunden, der gut aussieht. Den möchte ich mir dann genauer anschauen. Bin noch am Überlegen, wie ich das in einem Test aufbauen kann, sodass ich den Huawai Sun2000 Nachstellen kann, da bei meinen Tests erst einmal soweit alles funktioniert, der WR nur nicht so mitspielt. Aber wie gesagt, obwohl das Wetter zur Zeit auch doof ist, in der kälteren Jahreszeit geht es weiter. (von meiner Seite aus)
Grüße
What kind of device or service you would like to see an adapter for? Add name and company of the device, including links to the device and any additional informations[...] ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Photovoltaik Anlage inkl. Smart Power Sensor und Akkuspeicher von HUAWEI Wechselrichter SUN2000-(3KTL-10KTL)-M1 https://support.huawei.com/enterprise/de/fusionsolar/sun2000ma-pid-22755755 Akkuspeicher LUNA2000-(5-30)-S0 https://support.huawei.com/enterprise/de/fusionsolar/fusionsolardg-pid-23448309 Smart Power Sensor DTSU666-H https://support.huawei.com/enterprise/en/fusionsolar/sun2000l-pid-22027611?category=operation-maintenance ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Is an official API including documentation is available? If yes please add links and informations[...] ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Es handelt sich um eine ModBUS Schnittstelle https://support.huawei.com/enterprise/en/fusionsolar/smartlogger-pid-21294677?category=configuration-commissioning&subcategory=configuration-guide ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Are other libraries for an integration available? Ideally in JavaScript/npm, but also other programming languages are interesting, add Links please ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ https://library.loxone.com/detail/huawei-sun2000-inverter-with-smartdongle-modbus-tcp-332/overview ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Is this device already integrated in other Smart Home systems? Add Links please ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Home Assistant: https://github.com/Emilv2/huawei_solar https://community.home-assistant.io/t/integration-solar-inverter-huawei-2000l/132350/1300 As standalone: https://solaranzeige.de/phpBB3/viewtopic.php?t=170 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Is this device already integrated in homebridge? Might the ham adapter together with the homebridge plugin be sufficient? Please try it and add infos ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Hab hierzu leider nichts gefunden (Sorry no founds) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Additional context Add any other context or screenshots about the feature request here. If the topic was discussed in ioBroker forum please include the link too. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Diskussion im IOBroker-Forum https://forum.iobroker.net/topic/53005/huawei-sun2000-iobroker-via-js-script-funktioniert ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Vielen Dank!
After you created the issue vote for yourself in the first post of the issue using the "+1"/"Thumbs up" button