Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. ioBroker Allgemein
    4. Huawei Sun2000 & ioBroker via JS script funktioniert

    NEWS

    • Monatsrückblick - April 2025

    • Minor js-controller 7.0.7 Update in latest repo

    • Save The Date: ioBroker@Smart Living Forum Solingen, 14.06.

    Huawei Sun2000 & ioBroker via JS script funktioniert

    This topic has been deleted. Only users with topic management privileges can see it.
    • P
      ple @badsnoopy667 last edited by

      @badsnoopy667
      Das muss ich mir noch mal anschauen, denke ich teste erst mal solaranzeige, damit überhaupt ne Verbindung steht und dann mal den modbus Adapter.
      Mit dem bin ich auch gerade auf Kriegsfuß wegen meiner nibe s1155, input register gehen soweit, nur die Holding nicht, schreiben mal ab und zu, aber aktualisieren geht nicht.

      1 Reply Last reply Reply Quote 0
      • P
        pettyboo @Kachel last edited by

        @kachel Hallo, danke für das Script, funktioniert einwandfrei.
        Hättest Du vielleicht schon ein Beispiel zum Schreiben in Register. Würde es dringend brauchen, bin aber leider ziemlich ratlos, wie ich das realisieren könnte.

        Dank dir im Voraus.

        B 2 Replies Last reply Reply Quote 1
        • B
          badsnoopy667 @pettyboo last edited by badsnoopy667

          @pettyboo
          Deine Anfrage hätte zeitlich nicht besser kommen können. Wollte genau das Schreiben von Modbus Registern gerade googeln und wurde dann von der "roten 1" im Forum abgelenkt...
          Ich möchte gerne den State schreiben der die Batterie steuert. Meine Vorstellung: aWATTar Stromtarif nehmen und bei günstigen Preisen das eAuto vollballern. Dazu möchte ich aber gerne die (Haus-)Batterie auf "nicht entladen" stellen, sonst zieht er mir ja erst das Haus leer bevor er ans Netz geht.

          Hab mal ein bisschen was gelesen im Internet. Anscheinend gibt es Access Probleme, siehe folgender Threat im Huawei Forum:
          modbus-issues-with-sun2000-3-10ktl-m1-write-register-error-code-128

          B 1 Reply Last reply Reply Quote 0
          • B
            badsnoopy667 @badsnoopy667 last edited by badsnoopy667

            Ich hab ein bisschen mit Modbus rumgespielt:

            modbus_write.png

            Mit dem rot markierten Teil in meinem Modbus-TCP Flow versuche ich den Wert der ID "JSON_Test" in das Register 47082 zu schreiben. Das ist die %-Zahl ab der er aufhören soll die Batterie zu entladen. "JSON_Test" ist nur ein ungenutztes Objekt das ich gerade "übrig" hatte, also nicht am Namen stören.

            Aktuell bin ich soweit, dass ich keine Fehlermeldung bekomme, wenn ich den Wert von "JSON_Test" ändere. Und ich glaube er wird auch geschrieben. Denn: Ich lese dieses Modbus Register auch 1x pro Minute aus. Und da ließt er dann meinen in "JSON_Test" eingetragenen Wert aus!
            Aber: Die Batterie entlädt trotzdem weiter, obwohl der SOC kleiner ist als der eingegebene Wert. Es hat also keinen Effekt...
            Vielleicht hilft das ja schon jemandem weiter als Gedankenanstoß wie man es hinbekommen kann?

            Edit: Ich glaube das nichts passiert liegt daran, dass ich den "Gain" von 10 vergessen habe. D.h. wenn ich 30 (%) eingebe glaube ich das der Wechselrichter das al 3% interpretiert. Habe nämlich mal Register 47076 gelesen, das ist "Maximum Charging Power". Und da meldet er 1000 zurück für 100%.
            Wenn ich jetzt aber nicht 30 sondern 300 sende bekomme ich folgende Fehlermeldung zurück:

            node-red.0
            2022-04-06 23:17:20.985	error	6 Apr 23:17:20 - [error] [modbus-write:47082 (Bat Discharge cutof capacity SET)] Error: Modbus exception 4: Slave device failure (device reports internal error) at ModbusRTU._onReceive (/opt/iobroker/iobroker-data/node-red/node_modules/modbus-serial/index.js:371:21) at TcpPort.emit (events.js:400:28) at Socket.<anonymous> (/opt/iobroker/iobroker-data/node-red/node_modules/modbus-serial/ports/tcpport.js:92:20) at Socket.emit (events.js:400:28) at addChunk (internal/streams/readable.js:293:12) at readableAddChunk (internal/streams/readable.js:267:9) at Socket.Readable.push (internal/streams/readable.js:206:10) at TCP.onStreamRead (internal/stream_base_commons.js:188:23)
            

            Nochmal Edit:
            Ich habe rausgefunden, dass der Fehler nur kommt, wenn der geschriebene Wert größer ist als der aktuelle SOC der Batterie. Wenn ich 300 schreibe und die Batterie hat nur 22% kommt der Fehler. Schreibe ich z.B. 100 kommt kein Fehler und die 100 werden beim nächsten Register auslesen auch wieder angezeigt. Hab das Ding jetzt auf 10% gestellt und gehe jetzt schlafen... mal gucken ob er heute Nacht bei 10% aufhört die Batterie zu entladen. Ich werde berichten.
            Over and Out, Gute Nacht!

            Korrektur: Ich kann nur Werte zwischen 0 und 20 schreiben, denn das ist der Bereich der für die Batterie-Minimum-Ladung. Mehr als 20% geht nicht.

            Ich möchte gerne Register 47077 schreiben, denn das enhält den maximalen Entladestrom. Idee: Wenn eAuto lädt, dann max. Ladestrom auf 0 damit das Auto nicht die Batterie entlädt.
            Problem: Das ist ein Register mit der Länge 2, also 2x 16Bit Integer (U32). Ich habe rausgefunden, dass man daher das "dahingeschickte" formatieren muss, denn die iobroker Datenpunkte sind INT16. Ich muss das also in 2x INT16 aufteilen. Aber wie geht das? Hat da jemand eine Idee?

            Hier ist das beschrieben, aber ich werde da nicht schlau draus:
            https://stevesnoderedguide.com/modbus-writing-data

            Und hier noch der Auszug aus der Huawei Modbus Dokumentation:

            modbus_47077.png

            M 1 Reply Last reply Reply Quote 0
            • B
              badsnoopy667 @pettyboo last edited by

              @pettyboo
              Ich hab es jetzt hinbekommen Register zu schreiben! Ich kann jetzt die maximale Entladeleistung der Batterie auf 0 setzen wenn das eAuto lädt.
              Ich hab es mit node-red gemacht. Hier der Flow für das eine Register:

              flows.json

              Den Wert den man einstellen will, z.B. 400 Watt schreibt man in den SET Datenpunkt (vorher anlegen!). Das Hauptproblem ist, dass der Wert in zwei Register geschrieben werden muss. Also muss er aufgeteilt werden. Das macht der Funktions-Node im Flow. Einfach mal ausprobieren, ich glaub man kann nicht viel kaputt machen, falsche Werte nimmt der WR nicht an. (Ohne Garantie!)
              Hier nochmal die Modbus Interface Definitions V3, ohne die geht's nicht:
              https://forum.iobroker.net/assets/uploads/files/1624831109365-solar-inverter-modbus-interface-definitions-v3.0.pdf

              Viel Erfolg!

              P W 0 3 Replies Last reply Reply Quote 0
              • P
                pettyboo @badsnoopy667 last edited by

                @badsnoopy667
                Hallo. Hab jetzt auch auf node-red umgestellt, funktioniert in beiden Richtungen einwandfrei.
                Besten Dank für deine Hilfe.

                1 Reply Last reply Reply Quote 1
                • W
                  warp-it @badsnoopy667 last edited by

                  @badsnoopy667
                  Wahrscheinlich eine dumme Frage, aber worauf bezieht sich die Slave-IP-Adresse in der Funktion?

                  B 1 Reply Last reply Reply Quote -1
                  • B
                    badsnoopy667 @warp-it last edited by

                    @warp-it
                    Die Frage ist gar nicht so dumm... ich muss zugeben, ich kann es Dir gar nicht sagen. Die IP die bei mir eingetragen ist, entspricht gar nicht meinem IP-Range. Ich vermute, die IP wird in der Funktion gar nicht verwendet? Hatte das ja auch irgendwo aus dem Internet zusammenkopiert...
                    Funktioniert auch mit dieser komischen IP. Allerdings habe ich festgestellt, dass der Wert nicht immer übernommen wird. Muss den Wert mehrfach senden. Hat jemand eine Idee woran das liegen könnte? Habe das Gefühl der Wechselrichter kriegt nicht immer mit, dass er den Wert ändern soll.

                    W 2 Replies Last reply Reply Quote 0
                    • W
                      warp-it @badsnoopy667 last edited by

                      @badsnoopy667
                      Es kann sich ja eigentlich nur um die Adresse des 'absendenden' Iobrokers handeln, da die Adresse des Wechselrichters im 'Globalen Konfigurations Node' -> 'Modbus Client' definiert wird.

                      1 Reply Last reply Reply Quote 0
                      • W
                        warp-it @badsnoopy667 last edited by warp-it

                        @badsnoopy667 said in Huawei Sun2000 & ioBroker via JS script funktioniert:

                        @warp-it
                        Allerdings habe ich festgestellt, dass der Wert nicht immer übernommen wird. Muss den Wert mehrfach senden. Hat jemand eine Idee woran das liegen könnte? Habe das Gefühl der Wechselrichter kriegt nicht immer mit, dass er den Wert ändern soll.

                        Hast Du einmal versucht die lesenden Operationen anzuhalten, bevor Du an den Akku schreibst? Vielleicht auch noch ein paar Sekunden warten, falls noch was gebuffert ist. Spricht was dagegen, Schreiben und Lesen mit Pausen in einen gemeinsamen Flow zu nehmen?

                        1 Reply Last reply Reply Quote 0
                        • KornSW
                          KornSW last edited by

                          Hi zusammen,
                          nur zu 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

                          P 1 Reply Last reply Reply Quote 2
                          • P
                            ple @KornSW last edited by

                            @kornsw
                            uhi, das muss ich mal am Wochenende testen 🙂 Vielen Dank dafür schon mal im vorraus.
                            In Kombi wäre das schon richtig gut.
                            Gruß

                            1 Reply Last reply Reply Quote 0
                            • JohGre
                              JohGre last edited by

                              @KornSW Schaue ich mir gerne an, hab eben den API Zugang angefordert.
                              Danke schon mal für deine Mühe

                              JohGre 1 Reply Last reply Reply Quote 0
                              • JohGre
                                JohGre @JohGre last edited by

                                @KornSW Huawei hat mir zurückgeschrieben, dass den Open-API Account nur ein Installateur beantragen kann. Wie hat das bei dir funktioniert?

                                1 Reply Last reply Reply Quote 0
                                • M
                                  majawe last edited by majawe

                                  EDIT: Fehler gefunden...geht...

                                  Funktioniert das script noch? Bekomme folgenden fehler:
                                  Verwende einen Huawei Sun2000-8ktl-M1

                                  Als FW habe ich die versionen:
                                  Inverter: V100R001C00SPC148
                                  Dongle: V100R001C00SPC130
                                  MBUS: V100R001C00SPC330

                                  Screenshot 2022-12-11 120754.png

                                  M 1 Reply Last reply Reply Quote 0
                                  • M
                                    majawe @majawe last edited by

                                    Es hat leider nur 1 mal funktioniert (als die Ordner angelegt wurden), er liesst zwar die Daten aktuallisiert Sie aber nicht unter Objekte, jemand eine Idee?

                                    Screenshot 2022-12-11 133427.png

                                    S 1 Reply Last reply Reply Quote 0
                                    • S
                                      Skoltrinker @majawe last edited by

                                      @majawe
                                      Ich hatte das gleiche Problem. Hat anfangs problemlos funktioniert und dann mit einem Versionsupgrade (ich glaube vom js-adapter) ging es plötzlich nicht mehr. Ich habe dann den folgenden Code Teil auskommentiert und dann hat es wieder funktioniert. Warum und wieso erschließt sich mir aber nicht ganz.

                                      function forcesetState(objectname, value, options) {
                                          **//Problem mit existsState -> aus irgendeinem Grund funktioniert es nicht mehr. 
                                          //if(!existsState(objectname)) {
                                          //    createState(objectname, value, options);        
                                          //}
                                          //else {**
                                              setState(objectname, value);
                                          **//}**
                                      }  
                                      

                                      Ich habe auch den Verbindungsaufbau in eine function ausgelagert:

                                      function connectModBus() {
                                          console.log("Init connection to: " + ModBusHost +":" + ModBusPort);
                                          // set requests parameters
                                          client.setTimeout (10000);
                                          // try to connect
                                          client.connectTCP (ModBusHost, { port: ModBusPort })
                                              .then(function()
                                              {
                                                  console.log("Connected, wait for reading...");
                                              })
                                              .catch(function(e)
                                              {
                                                  console.log(e);
                                              });
                                      }
                                      

                                      Und dann eine provisorisch eine Prüfung hinzugefügt ob das Lesen der Daten erfolgreich war und ob die MODBUS Verbindung noch offen ist. Da ich immer wieder das Problem hatte, wenn die Verbindung verloren gegangen ist, dass dann keine Daten mehr gelesen werden konnten (da kein Wiederaufbau der Verbindung stattgefunden hat).

                                      setInterval(function() {
                                          if (!getDataSuccessful){
                                              if (!client.isOpen){
                                                  connectModBus();
                                              }
                                          } ...
                                      

                                      @majawe said in Huawei Sun2000 & ioBroker via JS script funktioniert:

                                      Es hat leider nur 1 mal funktioniert (als die Ordner angelegt wurden), er liesst zwar die Daten aktuallisiert Sie aber nicht unter Objekte, jemand eine Idee?

                                      Screenshot 2022-12-11 133427.png

                                      und n

                                      1 Reply Last reply Reply Quote 0
                                      • Z
                                        zoid1988 @Kachel last edited by zoid1988

                                        @kachel

                                        Danke für die Mühe, aber ich bekomme immer die Fehlermeldungen Cannot find module 'modbus-serial' und ModbusRTU is not a constructor

                                        Mit npm install modbus-serial hab ich vorher das Modus NPM Modul installiert.

                                        Könnt ihr mir hier kurz auf die Sprünge helfen bitte ?

                                        M 1 Reply Last reply Reply Quote 0
                                        • M
                                          majawe @zoid1988 last edited by

                                          @zoid1988 hast du es im Adapter hinzugefügt?
                                          Screenshot 2022-12-29 135310.png

                                          Z 1 Reply Last reply Reply Quote 0
                                          • Z
                                            zoid1988 @majawe last edited by

                                            @majawe

                                            Vielen Dank, wusste garnicht das man das machen kann ... Wieder etwas gelernt ...

                                            Das Script startet jetzt, aber ich bekomme leider keine Daten ausgelesen.

                                            Habe die Werte bei mir jetzt so angepasst (ich habe leider - noch - keinen Akku):

                                            client.connectTCP("10.168.1.111", { port: 502 });
                                            const ModBusIDs = [1];
                                            const PowerMeterID = 0;
                                            const BatteryUnits = [[0, 0]];

                                            Folgende Infos find ich im Log:

                                            30.12.2022, 11:33:51.829 [info ]: javascript.0 (1120689) script.js.PV: Triggering read of inverter 1 at address 35300 with length 40
                                            30.12.2022, 11:33:51.830 [warn ]: javascript.0 (1120689) script.js.PV: Error received reading address 35300 from id: 1 with error: undefined
                                            30.12.2022, 11:33:53.829 [info ]: javascript.0 (1120689) script.js.PV: Processing new data...
                                            30.12.2022, 11:33:53.832 [info ]: javascript.0 (1120689) script.js.PV: Processing done!
                                            30.12.2022, 11:33:53.833 [info ]: javascript.0 (1120689) script.js.PV: Triggering read of inverter 1 at address 30000 with length 81
                                            30.12.2022, 11:33:53.833 [warn ]: javascript.0 (1120689) script.js.PV: Error received reading address 30000 from id: 1 with error: undefined
                                            30.12.2022, 11:33:55.830 [info ]: javascript.0 (1120689) script.js.PV: Triggering read of inverter 1 at address 37100 with length 114
                                            30.12.2022, 11:33:55.830 [warn ]: javascript.0 (1120689) script.js.PV: Error received reading address 37100 from id: 1 with error: undefined
                                            30.12.2022, 11:33:57.830 [info ]: javascript.0 (1120689) script.js.PV: Triggering read of inverter 1 at address 32000 with length 116
                                            30.12.2022, 11:33:57.830 [warn ]: javascript.0 (1120689) script.js.PV: Error received reading address 32000 from id: 1 with error: undefined
                                            30.12.2022, 11:33:59.830 [info ]: javascript.0 (1120689) script.js.PV: Triggering read of inverter 1 at address 37000 with length 68
                                            30.12.2022, 11:33:59.831 [warn ]: javascript.0 (1120689) script.js.PV: Error received reading address 37000 from id: 1 with error: undefined
                                            30.12.2022, 11:34:01.830 [info ]: javascript.0 (1120689) script.js.PV: Triggering read of inverter 1 at address 37700 with length 100
                                            30.12.2022, 11:34:01.831 [warn ]: javascript.0 (1120689) script.js.PV: Error received reading address 37700 from id: 1 with error: undefined
                                            30.12.2022, 11:34:03.831 [info ]: javascript.0 (1120689) script.js.PV: Triggering read of inverter 1 at address 37800 with length 100
                                            30.12.2022, 11:34:03.831 [warn ]: javascript.0 (1120689) script.js.PV: Error received reading address 37800 from id: 1 with error: undefined
                                            30.12.2022, 11:34:05.831 [info ]: javascript.0 (1120689) script.js.PV: Triggering read of inverter 1 at address 38200 with length 100
                                            30.12.2022, 11:34:05.832 [warn ]: javascript.0 (1120689) script.js.PV: Error received reading address 38200 from id: 1 with error: undefined
                                            30.12.2022, 11:34:07.832 [info ]: javascript.0 (1120689) script.js.PV: Triggering read of inverter 1 at address 38300 with length 100
                                            30.12.2022, 11:34:07.833 [warn ]: javascript.0 (1120689) script.js.PV: Error received reading address 38300 from id: 1 with error: undefined
                                            30.12.2022, 11:34:08.028 [info ]: javascript.0 (1120689) Stop script script.js.PV

                                            Z oswibz 2 Replies Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate
                                            FAQ Cloud / IOT
                                            HowTo: Node.js-Update
                                            HowTo: Backup/Restore
                                            Downloads
                                            BLOG

                                            1.0k
                                            Online

                                            31.6k
                                            Users

                                            79.4k
                                            Topics

                                            1.3m
                                            Posts

                                            59
                                            471
                                            79617
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo