Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. ioBroker Allgemein
  4. Sungrow WR SGH10RT erfolgreich mit MODBUS eingebunden

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.7k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.2k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    3.2k

Sungrow WR SGH10RT erfolgreich mit MODBUS eingebunden

Geplant Angeheftet Gesperrt Verschoben ioBroker Allgemein
hardware sungrow sgh10rt modbu
895 Beiträge 132 Kommentatoren 366.6k Aufrufe 126 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • M ms111175

    @Atlantis Hi Atlantis, dann stimmt wohl doch noch etwas nicht mit der Verbindung. Sorry, ich sehe ioBroker das erste mal, ich verstehe noch gar nicht, wie das ganze funktioniert. Werde mich da wohl erst mal schlau machen müssen. Ich komme aus PLZ 53, südliches NRW.

    Bei mir sieht es so aus, aber wie gesagt, ich hab keine Ahnung, was ich da tun soll. :)
    eaa44bdd-2a03-46d7-8b27-ac9acf60115f-image.png
    9f8ff40f-2b93-45bb-b846-f030a29a1e79-image.png
    e474e083-bf14-4481-995f-891ca338f804-image.png

    burghardpoeB Offline
    burghardpoeB Offline
    burghardpoe
    schrieb am zuletzt editiert von
    #791

    @ms111175 Hallo ms111175, ich habe genau das gleiche Problem. Wie hast du das damals gelöst? Ist ja schon eine ganze weile her.

    1 Antwort Letzte Antwort
    0
    • L Offline
      L Offline
      lxa83
      schrieb am zuletzt editiert von
      #792

      Ist mittlerweile in der neusten Winet-S2 Firmware die Möglichkeit gegeben dann endlich den MPPT3 abzufragen? Weil dann würde ich den Firmwareupdate beauftragen. Ansonsten muss ich den Waveshare mit RS485 / Ethernet anschließen.

      1 Antwort Letzte Antwort
      0
      • J Offline
        J Offline
        jwerlsdf
        schrieb am zuletzt editiert von
        #793

        Hallo,
        Bei uns ist seit dieser Woche ein Sungrow SH 20T verbaut. Jetzt würde ich Ihn gerne einbinden. Aber leider weiß ich nicht genau wie ich das machen muss.
        Folgendes habe ich bisher schon verstanden.

        1. Ich habe nur einen LAN Port am WR. Ich benötige wohl zusätzliche Hardware, um per modbus die Daten abzugreifen. Aktuell ist der LAN Port bereits belegt, da icu die Daten nicut über WLAN sende. Welches Hardware Modul kann man mir empfehlen? Was benötige icu genau?
        2. Es soll wohl über den waveshare funktionieren. Aktuell habe icu bereits einen, um meine beiden eastron Zähler einzubinden. Kann ich diesen dafür Mitbenutzen oder benötige icu einen komplett neuen? Wie muss icu das anschließen?

        Ich hoffe, es kann mir jemand helfen.

        G 1 Antwort Letzte Antwort
        0
        • J jwerlsdf

          Hallo,
          Bei uns ist seit dieser Woche ein Sungrow SH 20T verbaut. Jetzt würde ich Ihn gerne einbinden. Aber leider weiß ich nicht genau wie ich das machen muss.
          Folgendes habe ich bisher schon verstanden.

          1. Ich habe nur einen LAN Port am WR. Ich benötige wohl zusätzliche Hardware, um per modbus die Daten abzugreifen. Aktuell ist der LAN Port bereits belegt, da icu die Daten nicut über WLAN sende. Welches Hardware Modul kann man mir empfehlen? Was benötige icu genau?
          2. Es soll wohl über den waveshare funktionieren. Aktuell habe icu bereits einen, um meine beiden eastron Zähler einzubinden. Kann ich diesen dafür Mitbenutzen oder benötige icu einen komplett neuen? Wie muss icu das anschließen?

          Ich hoffe, es kann mir jemand helfen.

          G Offline
          G Offline
          GombersIOB
          schrieb am zuletzt editiert von
          #794

          @jwerlsdf
          Ein LAN-Port reicht. Obwohl das jetzt das erste Mal ist, dass ich von jemanden höre, es gebe nur einen LAN-Port.
          Ansonsten ist die Einrichtung eigentlich schon mit dem ersten Beitrag dieses Threads gut beschrieben. Wenn Du mal ganz nach oben scrollst findest Du es.
          Die Registerbelegung findest Du auf GitHub (https://gist.github.com/dnoegel/543c72ef722365a3934bbad0bb43e222).

          Ich würde da aber sukzessive vorgehen. Immer mal 5 Register eintragen und schauen obs funktioniert und dann weiter.

          G J 2 Antworten Letzte Antwort
          0
          • G GombersIOB

            @jwerlsdf
            Ein LAN-Port reicht. Obwohl das jetzt das erste Mal ist, dass ich von jemanden höre, es gebe nur einen LAN-Port.
            Ansonsten ist die Einrichtung eigentlich schon mit dem ersten Beitrag dieses Threads gut beschrieben. Wenn Du mal ganz nach oben scrollst findest Du es.
            Die Registerbelegung findest Du auf GitHub (https://gist.github.com/dnoegel/543c72ef722365a3934bbad0bb43e222).

            Ich würde da aber sukzessive vorgehen. Immer mal 5 Register eintragen und schauen obs funktioniert und dann weiter.

            G Offline
            G Offline
            GombersIOB
            schrieb am zuletzt editiert von
            #795

            @gombersiob

            Aktuell ist der LAN Port bereits belegt

            Die Aussage verstehe ich nicht. Was heißt denn belegt? Man braucht doch nicht für jede Port-Adresse an einem Server einen eigenen LAN-Port!

            Es soll wohl über den waveshare funktionieren.

            Den Begriff kenne ich nicht. Wenn ich es suche, ist es wohl einfach nur eine Implementation, Modbus-Daten bereitzustellen. Aber wie das gemacht wird, ist doch vermutlich egal. Du brauchst die IP-Adresse und den Port, fertig!

            1 Antwort Letzte Antwort
            0
            • G GombersIOB

              @jwerlsdf
              Ein LAN-Port reicht. Obwohl das jetzt das erste Mal ist, dass ich von jemanden höre, es gebe nur einen LAN-Port.
              Ansonsten ist die Einrichtung eigentlich schon mit dem ersten Beitrag dieses Threads gut beschrieben. Wenn Du mal ganz nach oben scrollst findest Du es.
              Die Registerbelegung findest Du auf GitHub (https://gist.github.com/dnoegel/543c72ef722365a3934bbad0bb43e222).

              Ich würde da aber sukzessive vorgehen. Immer mal 5 Register eintragen und schauen obs funktioniert und dann weiter.

              J Offline
              J Offline
              jwerlsdf
              schrieb am zuletzt editiert von jwerlsdf
              #796

              @gombersiob
              Also ich habe jetzt keine weiter Hardware angeschlossen. Lan kabel steckt. Dementsprechend kein WLAN.
              Ich habe die Einstellungen wie geschrieben entsprechend vorgenommen, der Adapter geht auf grün, aber ich bekomme keine Werte rein. Anbei zwei Bilder.
              Screenshot_20250214-191527_Chrome.jpg
              Screenshot_20250214-191417_Chrome.jpg
              Wo liegt mein Fehler?

              Folgende Fehler kommen

              modbus.1
              2025-02-14 19:36:58.348	error	Invalid object: {"type":"state","common":{"name":"Geräte Typ-Code","role":"value","type":"number","read":true,"write":false,"def":0,"unit":""},"native":{"regType":"inputRegs","address":-25002,"deviceId":1,"type":"int8be","len":"1","offset":"0","factor":"1"}}
              
              modbus.1
              2025-02-14 19:36:58.348	error	Invalid data inputRegisters/0: {"_address":-25002,"name":"Device type code","description":"Geräte Typ-Code","unit":"","type":"int8be","len":"1","factor":"1","offset":"0","formula":"","role":"value","room":"","cw":false,"isScale":false,"deviceId":1,"address":-25002,"fullId":"modbus.1.0"}
              
              modbus.1
              2025-02-14 19:36:58.347	error	Invalid inputRegisters address: -25002
              
              modbus.1
              2025-02-14 19:36:58.347	error	Invalid inputRegisters address: -25001
              
              modbus.1
              2025-02-14 19:36:58.347	error	Invalid inputRegisters address: -24999
              
              modbus.1
              2025-02-14 19:36:58.346	error	Invalid inputRegisters address: -24998
              
              modbus.1
              2025-02-14 19:36:58.346	error	Invalid inputRegisters address: -24994
              

              Unter WiNet-S2 System Weiterleitung der Informationen ist als Modbus die IP vom iobroker bereits automatisch eingetragen. Passt also. Scheint wohl an den register Einträgen zu liegen oder?

              G 1 Antwort Letzte Antwort
              0
              • J jwerlsdf

                @gombersiob
                Also ich habe jetzt keine weiter Hardware angeschlossen. Lan kabel steckt. Dementsprechend kein WLAN.
                Ich habe die Einstellungen wie geschrieben entsprechend vorgenommen, der Adapter geht auf grün, aber ich bekomme keine Werte rein. Anbei zwei Bilder.
                Screenshot_20250214-191527_Chrome.jpg
                Screenshot_20250214-191417_Chrome.jpg
                Wo liegt mein Fehler?

                Folgende Fehler kommen

                modbus.1
                2025-02-14 19:36:58.348	error	Invalid object: {"type":"state","common":{"name":"Geräte Typ-Code","role":"value","type":"number","read":true,"write":false,"def":0,"unit":""},"native":{"regType":"inputRegs","address":-25002,"deviceId":1,"type":"int8be","len":"1","offset":"0","factor":"1"}}
                
                modbus.1
                2025-02-14 19:36:58.348	error	Invalid data inputRegisters/0: {"_address":-25002,"name":"Device type code","description":"Geräte Typ-Code","unit":"","type":"int8be","len":"1","factor":"1","offset":"0","formula":"","role":"value","room":"","cw":false,"isScale":false,"deviceId":1,"address":-25002,"fullId":"modbus.1.0"}
                
                modbus.1
                2025-02-14 19:36:58.347	error	Invalid inputRegisters address: -25002
                
                modbus.1
                2025-02-14 19:36:58.347	error	Invalid inputRegisters address: -25001
                
                modbus.1
                2025-02-14 19:36:58.347	error	Invalid inputRegisters address: -24999
                
                modbus.1
                2025-02-14 19:36:58.346	error	Invalid inputRegisters address: -24998
                
                modbus.1
                2025-02-14 19:36:58.346	error	Invalid inputRegisters address: -24994
                

                Unter WiNet-S2 System Weiterleitung der Informationen ist als Modbus die IP vom iobroker bereits automatisch eingetragen. Passt also. Scheint wohl an den register Einträgen zu liegen oder?

                G Offline
                G Offline
                GombersIOB
                schrieb am zuletzt editiert von
                #797

                @jwerlsdf said in Sungrow WR SGH10RT erfolgreich mit MODBUS eingebunden:

                -25002

                Ein negatives Register "-25002" kann es nicht geben. Da sind Typo-Fehler in der Definition. Das sieht man auch in den in den Objekten gezeigten Namen. "NAN" bedeutet "Not A Number". Das heißt der Wert der an der Stelle, wo das Register erwartet wird, ausgelesen wird, ist eben keine Zahl.

                Nur um einen Eindruck zu geben, wie das Ergebnis der EIngabe etwa aussehen müsste, sei hier mal ein Screenshot meiner Eingangsregister:
                2929f7ed-1700-4bcf-ae2d-61d1db57008f-grafik.png

                Vielleicht kannst Du ja damit den Fehler finden.

                J 1 Antwort Letzte Antwort
                0
                • G GombersIOB

                  @jwerlsdf said in Sungrow WR SGH10RT erfolgreich mit MODBUS eingebunden:

                  -25002

                  Ein negatives Register "-25002" kann es nicht geben. Da sind Typo-Fehler in der Definition. Das sieht man auch in den in den Objekten gezeigten Namen. "NAN" bedeutet "Not A Number". Das heißt der Wert der an der Stelle, wo das Register erwartet wird, ausgelesen wird, ist eben keine Zahl.

                  Nur um einen Eindruck zu geben, wie das Ergebnis der EIngabe etwa aussehen müsste, sei hier mal ein Screenshot meiner Eingangsregister:
                  2929f7ed-1700-4bcf-ae2d-61d1db57008f-grafik.png

                  Vielleicht kannst Du ja damit den Fehler finden.

                  J Offline
                  J Offline
                  jwerlsdf
                  schrieb am zuletzt editiert von
                  #798

                  @gombersiob
                  Danke. Bei mir hat der slave gefehlt. Alias aus den Einstellungen rausgenommen und mehrere slaves hacken rein.
                  Jetzt habe ich zwei erfolgreich drinnen und bekomme die Werte. Nehme ich die Liste von github funktioniert es nicht, da dort der slave fehlt. Füge ich den hinzu bekomme ich einen Fehler weil irgendwas an der falschen Position ist. Hast du vlt für mich eine fertige Liste als Txt die ich importieren kann oder wie kann ich die Liste richtig bearbeiten und dann importieren?

                  B 1 Antwort Letzte Antwort
                  0
                  • J jwerlsdf

                    @gombersiob
                    Danke. Bei mir hat der slave gefehlt. Alias aus den Einstellungen rausgenommen und mehrere slaves hacken rein.
                    Jetzt habe ich zwei erfolgreich drinnen und bekomme die Werte. Nehme ich die Liste von github funktioniert es nicht, da dort der slave fehlt. Füge ich den hinzu bekomme ich einen Fehler weil irgendwas an der falschen Position ist. Hast du vlt für mich eine fertige Liste als Txt die ich importieren kann oder wie kann ich die Liste richtig bearbeiten und dann importieren?

                    B Offline
                    B Offline
                    berlinerbolle
                    schrieb am zuletzt editiert von
                    #799

                    @jwerlsdf

                    https://github.com/c0ldtech/sungrow

                    Da steht auch ein kurzer Text dazu. Aber @GombersIOB hat bestimmt auch eine einfachere Liste.

                    G 1 Antwort Letzte Antwort
                    0
                    • B berlinerbolle

                      @jwerlsdf

                      https://github.com/c0ldtech/sungrow

                      Da steht auch ein kurzer Text dazu. Aber @GombersIOB hat bestimmt auch eine einfachere Liste.

                      G Offline
                      G Offline
                      GombersIOB
                      schrieb am zuletzt editiert von
                      #800

                      @berlinerbolle

                      Meine Liste habe ich schon mehrfach in diesem Thread gepostet. Den Slave muss man auch nur bei einer bestimmten Adapter-Einstellung eingeben. Was genau das war, fällt mir gerade nicht ein, ich komme auch nicht an die Einstellungen.
                      Den Slave kann man auch einfach in die Liste an die zweite Stelle hineineditieren und dann importieren.
                      Meine Liste zu nehmen ist vielleicht nicht sinnvoll. Sie ist von eine SH08RT, womöglich hat sich da mittlerweile waa geändert. Manches unterscheidet sich sowieso von WR zu WR. Wirklich sicher ist man nur mit der Beschreibung.

                      B 1 Antwort Letzte Antwort
                      0
                      • G GombersIOB

                        @berlinerbolle

                        Meine Liste habe ich schon mehrfach in diesem Thread gepostet. Den Slave muss man auch nur bei einer bestimmten Adapter-Einstellung eingeben. Was genau das war, fällt mir gerade nicht ein, ich komme auch nicht an die Einstellungen.
                        Den Slave kann man auch einfach in die Liste an die zweite Stelle hineineditieren und dann importieren.
                        Meine Liste zu nehmen ist vielleicht nicht sinnvoll. Sie ist von eine SH08RT, womöglich hat sich da mittlerweile waa geändert. Manches unterscheidet sich sowieso von WR zu WR. Wirklich sicher ist man nur mit der Beschreibung.

                        B Offline
                        B Offline
                        berlinerbolle
                        schrieb am zuletzt editiert von
                        #801

                        @gombersiob

                        Auch wieder wahr. Die die ich gepostet habe, ist von einem SH10RT.

                        1 Antwort Letzte Antwort
                        0
                        • J Offline
                          J Offline
                          jwerlsdf
                          schrieb am zuletzt editiert von jwerlsdf
                          #802

                          Und woher bekomme ich die Liste vom WR SH20T?

                          G 1 Antwort Letzte Antwort
                          0
                          • J jwerlsdf

                            Und woher bekomme ich die Liste vom WR SH20T?

                            G Offline
                            G Offline
                            GombersIOB
                            schrieb am zuletzt editiert von
                            #803

                            @jwerlsdf
                            Ich glaube in der GitHub-Beschreibung ist ein Link. Und in der Beschreibung gibt es dann Fallunterscheidungen je nach WR.

                            J 1 Antwort Letzte Antwort
                            0
                            • G GombersIOB

                              @jwerlsdf
                              Ich glaube in der GitHub-Beschreibung ist ein Link. Und in der Beschreibung gibt es dann Fallunterscheidungen je nach WR.

                              J Offline
                              J Offline
                              jwerlsdf
                              schrieb am zuletzt editiert von
                              #804

                              @gombersiob
                              Finde ich leider nicht :confounded:

                              G 1 Antwort Letzte Antwort
                              0
                              • J jwerlsdf

                                @gombersiob
                                Finde ich leider nicht :confounded:

                                G Offline
                                G Offline
                                GombersIOB
                                schrieb am zuletzt editiert von
                                #805

                                @jwerlsdf

                                Finde ich leider nicht

                                Merkwürdig. Ich hatte es gleich. Es gibt aber ein paar GitHub Einträge, vielleicht ist die Quelle nicht überfall aufgeführt. ich füge mal ein Dokument von mir bei. Ob das aktuell ist, habe ich nicht geprüft.

                                f2a8971f-a3b9-4dc1-8608-a7d3d3001a9e-Communication.Protocol.of.Residential.Hybrid.Inverter_V1.1.2_EN.pdf

                                1 Antwort Letzte Antwort
                                0
                                • D DRUROB

                                  @wolfi913 Klasse Erklärung! Danke dir. Genau das hatte ich heute bei meiner Recherche auch vermutet und mit den int / uint Werten rumgespielt. Zack war es wieder korrekt. Das ist echt ne doofe Umstellung, ich werde mal eine Änderung bei github beim Ersteller der Liste anmerken, dann tappt der nächste nicht auch in diese "Falle".
                                  Klasse Forumsleute hier! Riesen Dank an alle!

                                  M Offline
                                  M Offline
                                  Maddm
                                  schrieb am zuletzt editiert von
                                  #806

                                  @drurob
                                  ich würde mich gern mal an das Problem mit der Umstellung des Typs von 13021 dran hängen:
                                  Hallo zusammen, ich hab an meiner PV seit fast 2 Jahren einen SH80RT Wechselrichter, dessen Daten ich via Modbus per IOBroker auslese und visualisiere die Daten in einem Stromflussdiagramm, dessen Logik ich komplett von hier übernommen habe.

                                  Durch die Umstellung war der angezeigte Ladewert viel zu hoch, durch Suche habe ich gefunden, dass man den Type von 13021 selbst umstellen kann (unter Instanzen - modbus0 - Eingangsregister - den Typ von 13021 von unsigned 16 bit (Big Endian) umstellen auf signed 16 bit (Big Endian)".
                                  Danach stehen in 13021 korrekte Werte, mit Vorzeichen drin (negative Werte = Ladung in die Batterie, positive Werte: Entladung der Batterie).

                                  Welche Änderung muss ich jetzt im Blockly bzw. im Scriptblock, der auf der oben verlinken Seite drauf ist machen, damit die Berechnung der einzelnen Werte (Stromfluss in/von der Batterie, ins/vom Netz) wieder passen?

                                  W G 2 Antworten Letzte Antwort
                                  0
                                  • M Maddm

                                    @drurob
                                    ich würde mich gern mal an das Problem mit der Umstellung des Typs von 13021 dran hängen:
                                    Hallo zusammen, ich hab an meiner PV seit fast 2 Jahren einen SH80RT Wechselrichter, dessen Daten ich via Modbus per IOBroker auslese und visualisiere die Daten in einem Stromflussdiagramm, dessen Logik ich komplett von hier übernommen habe.

                                    Durch die Umstellung war der angezeigte Ladewert viel zu hoch, durch Suche habe ich gefunden, dass man den Type von 13021 selbst umstellen kann (unter Instanzen - modbus0 - Eingangsregister - den Typ von 13021 von unsigned 16 bit (Big Endian) umstellen auf signed 16 bit (Big Endian)".
                                    Danach stehen in 13021 korrekte Werte, mit Vorzeichen drin (negative Werte = Ladung in die Batterie, positive Werte: Entladung der Batterie).

                                    Welche Änderung muss ich jetzt im Blockly bzw. im Scriptblock, der auf der oben verlinken Seite drauf ist machen, damit die Berechnung der einzelnen Werte (Stromfluss in/von der Batterie, ins/vom Netz) wieder passen?

                                    W Online
                                    W Online
                                    wolfi913
                                    schrieb am zuletzt editiert von
                                    #807

                                    @maddm sagte in Sungrow WR SGH10RT erfolgreich mit MODBUS eingebunden:

                                    Welche Änderung muss ich jetzt im Blockly bzw. im Scriptblock, der auf der oben verlinken Seite drauf ist machen, damit die Berechnung der einzelnen Werte (Stromfluss in/von der Batterie, ins/vom Netz) wieder passen?

                                    schau mal hier…

                                    M 1 Antwort Letzte Antwort
                                    0
                                    • W wolfi913

                                      @maddm sagte in Sungrow WR SGH10RT erfolgreich mit MODBUS eingebunden:

                                      Welche Änderung muss ich jetzt im Blockly bzw. im Scriptblock, der auf der oben verlinken Seite drauf ist machen, damit die Berechnung der einzelnen Werte (Stromfluss in/von der Batterie, ins/vom Netz) wieder passen?

                                      schau mal hier…

                                      M Offline
                                      M Offline
                                      Maddm
                                      schrieb am zuletzt editiert von
                                      #808

                                      @wolfi913
                                      das scheint bei mir nicht zu gehen, der Stromfluss scheint zwar zu stimmen, aber die Werte gehen nicht auf.

                                      Hier der Code den ich verwende (da habe ich die Codezeile aus dem oben verlinkten Beitrag mit reingenommen):

                                      function decToBit(dec, bitPosition) {
                                          return (dec & (1 << bitPosition)) === 0 ? false : true;
                                      }
                                      
                                      // Creates a state if it does not exist yet
                                      function createStateIfNotExists(state, name)
                                      {
                                          // createState(state, 0, true, {name: name,  type: "number", role: 'value'}, function () {});    
                                          if ( !existsState(state )) {
                                              createState(state, 0, false, {name: name,  type: "number", role: 'value'}, function () {});    
                                          } 
                                      }
                                      
                                      // Create states
                                      createStateIfNotExists("0_userdata.0.PV.PvToLoad", "Power from PV to load");
                                      createStateIfNotExists("0_userdata.0.PV.PvToBat", "Power from PV to bat");
                                      createStateIfNotExists("0_userdata.0.PV.PvToGrid", "Power from PV to grid");
                                      
                                      createStateIfNotExists("0_userdata.0.PV.BatToLoad", "Power from Bat to load");
                                      createStateIfNotExists("0_userdata.0.PV.BatToGrid", "Power from Bat to grid");
                                      
                                      createStateIfNotExists("0_userdata.0.PV.GridToLoad", "Power from grid to load");
                                      createStateIfNotExists("0_userdata.0.PV.GridToBat", "Power from Gridto battery");
                                      
                                      createStateIfNotExists("0_userdata.0.PV.SignedBat", "Battery but with minus sign for charging");
                                      
                                      
                                      // Decode running state flags
                                      $powerGeneratedFromPV = decToBit(dec, 0);
                                      $batteryCharging = decToBit(dec, 1);
                                      $batteryDischarging = decToBit(dec, 2);
                                      $loadActive = decToBit(dec, 3);
                                      $powerFeedIntoGrid = decToBit(dec, 4);
                                      $powerImportFromGrid = decToBit(dec, 5);
                                      $powerGeneratedFromLoad = decToBit(dec, 7);
                                      
                                      // Save running state more speaking fields
                                      setState("0_userdata.0.PV.PowerGeneratedFromPV", $powerGeneratedFromPV, true);
                                      setState("0_userdata.0.PV.BatteryCharging", $batteryCharging, true);
                                      setState("0_userdata.0.PV.BatteryDischarging", $batteryDischarging, true);
                                      setState("0_userdata.0.PV.LoadActive", $loadActive, true);
                                      setState("0_userdata.0.PV.PowerFeedIntoGrid", $powerFeedIntoGrid, true);
                                      setState("0_userdata.0.PV.PowerImportFromGrid", $powerImportFromGrid, true);
                                      setState("0_userdata.0.PV.PowerGeneratedFromLoad", $powerGeneratedFromLoad, true);
                                      
                                      // Read current power levels of bat, pv, load and grid
                                      $load = getState("modbus.0.inputRegisters.13007_Load_power_").val;
                                      $grid = getState("modbus.0.inputRegisters.13009_Export_power").val;
                                      $pv = getState("modbus.0.inputRegisters.5016_Total_DC_Power").val;
                                      $battery = Math.abs(getState('modbus.0.inputRegisters.13021_Battery_power_').val);
                                      
                                      
                                      // Write signed bat
                                      
                                      setState("0_userdata.0.PV.SignedBat", $batteryCharging ? $battery * -1 : $battery, true);
                                      
                                      // Calculate PV
                                      $pvToBat = 0;
                                      $pvToLoad = 0;
                                      $pvToGrid = 0;
                                      $loadRemaining = $load;
                                      if ($powerGeneratedFromPV) {
                                          $remaining = $pv;
                                          if ($remaining > $loadRemaining) {
                                              $pvToLoad = $loadRemaining;
                                              $remaining -= $load;
                                              $loadRemaining = 0;
                                          } else {
                                              $pvToLoad = $remaining;
                                              $loadRemaining = $load - $remaining;
                                              $remaining = 0;
                                              
                                          }
                                          
                                          if ($batteryCharging) {
                                              if ($remaining > $battery) {            
                                                  $pvToBat = $battery;
                                                  $remaining -= $battery;
                                              } else {            
                                                  $pvToBat = $remaining;
                                                  $remaining = 0;
                                              }
                                          }
                                          
                                          if ($grid > 0) {
                                              $pvToGrid = Math.min($grid, $remaining);
                                          }
                                      }
                                      setState("0_userdata.0.PV.PvToLoad", $pvToLoad);
                                      setState("0_userdata.0.PV.PvToBat", $pvToBat);
                                      setState("0_userdata.0.PV.PvToGrid", $pvToGrid);
                                      
                                      // Calculate Bat
                                      $batToLoad = 0;
                                      $batToGrid = 0;
                                      if ($batteryDischarging) {
                                          $remaining = $battery;
                                          if ($remaining > $loadRemaining) {
                                              $batToLoad = $loadRemaining;
                                              $remaining -= $loadRemaining;
                                              $loadRemaining = 0;
                                          } else {
                                              $batToLoad = $remaining;
                                              $loadRemaining -= $remaining;
                                              $remaining = 0;        
                                          }
                                          
                                          if ($powerFeedIntoGrid) {
                                              $batToGrid = Math.min($grid, $remaining);
                                          }
                                      }
                                      
                                      setState("0_userdata.0.PV.BatToLoad", $batToLoad);
                                      setState("0_userdata.0.PV.BatToGrid", $batToGrid);
                                      
                                      // Calculate grid
                                      $gridToBat = 0;
                                      $gridToLoad = 0;
                                      if ($grid < 0) {
                                          $remaining = Math.abs($grid);
                                          if ($remaining > $loadRemaining) {
                                              $gridToLoad = $loadRemaining;
                                              $remaining -= $loadRemaining;
                                              $loadRemaining = 0;
                                          } else {
                                              $gridToLoad = $remaining;
                                              $loadRemaining -= $remaining;
                                              $remaining = 0;        
                                          }
                                          
                                          if ($batteryCharging) {
                                              $gridToBat = Math.min($battery, $remaining);;
                                          }
                                      }
                                      
                                      setState("0_userdata.0.PV.GridToLoad", $gridToLoad);
                                      setState("0_userdata.0.PV.GridToBat", $gridToBat);
                                      

                                      das führt zu folgenden Werten in den einzelnen Registern:
                                      Bildschirmfoto 2025-03-01 um 14.39.08.png

                                      Stromerzeugung PV = 3159 W
                                      Hausverbrauch = 413 W
                                      bleiben also 2746 W um die Batterie zu laden, da stehen aber nur 2462 W, wo sind die restlichen 284 W hin?

                                      Müssen bei noch weiteren Registern die "Typen" geändert werden oder ist meine Änderung einfach falsch?

                                      W 1 Antwort Letzte Antwort
                                      0
                                      • M Maddm

                                        @wolfi913
                                        das scheint bei mir nicht zu gehen, der Stromfluss scheint zwar zu stimmen, aber die Werte gehen nicht auf.

                                        Hier der Code den ich verwende (da habe ich die Codezeile aus dem oben verlinkten Beitrag mit reingenommen):

                                        function decToBit(dec, bitPosition) {
                                            return (dec & (1 << bitPosition)) === 0 ? false : true;
                                        }
                                        
                                        // Creates a state if it does not exist yet
                                        function createStateIfNotExists(state, name)
                                        {
                                            // createState(state, 0, true, {name: name,  type: "number", role: 'value'}, function () {});    
                                            if ( !existsState(state )) {
                                                createState(state, 0, false, {name: name,  type: "number", role: 'value'}, function () {});    
                                            } 
                                        }
                                        
                                        // Create states
                                        createStateIfNotExists("0_userdata.0.PV.PvToLoad", "Power from PV to load");
                                        createStateIfNotExists("0_userdata.0.PV.PvToBat", "Power from PV to bat");
                                        createStateIfNotExists("0_userdata.0.PV.PvToGrid", "Power from PV to grid");
                                        
                                        createStateIfNotExists("0_userdata.0.PV.BatToLoad", "Power from Bat to load");
                                        createStateIfNotExists("0_userdata.0.PV.BatToGrid", "Power from Bat to grid");
                                        
                                        createStateIfNotExists("0_userdata.0.PV.GridToLoad", "Power from grid to load");
                                        createStateIfNotExists("0_userdata.0.PV.GridToBat", "Power from Gridto battery");
                                        
                                        createStateIfNotExists("0_userdata.0.PV.SignedBat", "Battery but with minus sign for charging");
                                        
                                        
                                        // Decode running state flags
                                        $powerGeneratedFromPV = decToBit(dec, 0);
                                        $batteryCharging = decToBit(dec, 1);
                                        $batteryDischarging = decToBit(dec, 2);
                                        $loadActive = decToBit(dec, 3);
                                        $powerFeedIntoGrid = decToBit(dec, 4);
                                        $powerImportFromGrid = decToBit(dec, 5);
                                        $powerGeneratedFromLoad = decToBit(dec, 7);
                                        
                                        // Save running state more speaking fields
                                        setState("0_userdata.0.PV.PowerGeneratedFromPV", $powerGeneratedFromPV, true);
                                        setState("0_userdata.0.PV.BatteryCharging", $batteryCharging, true);
                                        setState("0_userdata.0.PV.BatteryDischarging", $batteryDischarging, true);
                                        setState("0_userdata.0.PV.LoadActive", $loadActive, true);
                                        setState("0_userdata.0.PV.PowerFeedIntoGrid", $powerFeedIntoGrid, true);
                                        setState("0_userdata.0.PV.PowerImportFromGrid", $powerImportFromGrid, true);
                                        setState("0_userdata.0.PV.PowerGeneratedFromLoad", $powerGeneratedFromLoad, true);
                                        
                                        // Read current power levels of bat, pv, load and grid
                                        $load = getState("modbus.0.inputRegisters.13007_Load_power_").val;
                                        $grid = getState("modbus.0.inputRegisters.13009_Export_power").val;
                                        $pv = getState("modbus.0.inputRegisters.5016_Total_DC_Power").val;
                                        $battery = Math.abs(getState('modbus.0.inputRegisters.13021_Battery_power_').val);
                                        
                                        
                                        // Write signed bat
                                        
                                        setState("0_userdata.0.PV.SignedBat", $batteryCharging ? $battery * -1 : $battery, true);
                                        
                                        // Calculate PV
                                        $pvToBat = 0;
                                        $pvToLoad = 0;
                                        $pvToGrid = 0;
                                        $loadRemaining = $load;
                                        if ($powerGeneratedFromPV) {
                                            $remaining = $pv;
                                            if ($remaining > $loadRemaining) {
                                                $pvToLoad = $loadRemaining;
                                                $remaining -= $load;
                                                $loadRemaining = 0;
                                            } else {
                                                $pvToLoad = $remaining;
                                                $loadRemaining = $load - $remaining;
                                                $remaining = 0;
                                                
                                            }
                                            
                                            if ($batteryCharging) {
                                                if ($remaining > $battery) {            
                                                    $pvToBat = $battery;
                                                    $remaining -= $battery;
                                                } else {            
                                                    $pvToBat = $remaining;
                                                    $remaining = 0;
                                                }
                                            }
                                            
                                            if ($grid > 0) {
                                                $pvToGrid = Math.min($grid, $remaining);
                                            }
                                        }
                                        setState("0_userdata.0.PV.PvToLoad", $pvToLoad);
                                        setState("0_userdata.0.PV.PvToBat", $pvToBat);
                                        setState("0_userdata.0.PV.PvToGrid", $pvToGrid);
                                        
                                        // Calculate Bat
                                        $batToLoad = 0;
                                        $batToGrid = 0;
                                        if ($batteryDischarging) {
                                            $remaining = $battery;
                                            if ($remaining > $loadRemaining) {
                                                $batToLoad = $loadRemaining;
                                                $remaining -= $loadRemaining;
                                                $loadRemaining = 0;
                                            } else {
                                                $batToLoad = $remaining;
                                                $loadRemaining -= $remaining;
                                                $remaining = 0;        
                                            }
                                            
                                            if ($powerFeedIntoGrid) {
                                                $batToGrid = Math.min($grid, $remaining);
                                            }
                                        }
                                        
                                        setState("0_userdata.0.PV.BatToLoad", $batToLoad);
                                        setState("0_userdata.0.PV.BatToGrid", $batToGrid);
                                        
                                        // Calculate grid
                                        $gridToBat = 0;
                                        $gridToLoad = 0;
                                        if ($grid < 0) {
                                            $remaining = Math.abs($grid);
                                            if ($remaining > $loadRemaining) {
                                                $gridToLoad = $loadRemaining;
                                                $remaining -= $loadRemaining;
                                                $loadRemaining = 0;
                                            } else {
                                                $gridToLoad = $remaining;
                                                $loadRemaining -= $remaining;
                                                $remaining = 0;        
                                            }
                                            
                                            if ($batteryCharging) {
                                                $gridToBat = Math.min($battery, $remaining);;
                                            }
                                        }
                                        
                                        setState("0_userdata.0.PV.GridToLoad", $gridToLoad);
                                        setState("0_userdata.0.PV.GridToBat", $gridToBat);
                                        

                                        das führt zu folgenden Werten in den einzelnen Registern:
                                        Bildschirmfoto 2025-03-01 um 14.39.08.png

                                        Stromerzeugung PV = 3159 W
                                        Hausverbrauch = 413 W
                                        bleiben also 2746 W um die Batterie zu laden, da stehen aber nur 2462 W, wo sind die restlichen 284 W hin?

                                        Müssen bei noch weiteren Registern die "Typen" geändert werden oder ist meine Änderung einfach falsch?

                                        W Online
                                        W Online
                                        wolfi913
                                        schrieb am zuletzt editiert von wolfi913
                                        #809

                                        @maddm

                                        Im Bereich modbus.0 ändert die Einstellung ja nichts. Es wird nur für die Weiterverarbeitung im Script der absolute Wert für $battery (ohne negative Kennzeichnung) verwendet. So wie es vor der Firmwareänderung war. Das Script arbeitet dann so wie vorher unsigned weiter. Die verarbeiteten Werte speichert das Script ja unter 0_userdata.0.PV.xxx. Dort sollten dann wieder die korrekte und sinnvolle Werte stehen. In der Beschreibung vom Scriptersteller steht ja auch, dass die Werte die über Modbus geliefert werden ohne Weiterverarbeitung (gerade in Verbindung mit einer Batterie) nur bedingt direkt nutzbar sind.

                                        Ergänzung:
                                        Was mir gerade noch bei Deinem obigen Script aufgefallen ist.
                                        Du hast das (Arbeits-)Script von der Homepage direkt verwendet. Ich meine das ist nicht ganz vollständig. Das enthält m.M.n. gar keinen Trigger der die Änderungen kontinuierlich einliest und weiterverarbeitet. Sinnvoll wäre das Script oder Blockly das dort im unteren Bereich unter Downloads verlinkt ist zu verwenden.

                                        1 Antwort Letzte Antwort
                                        0
                                        • M Maddm

                                          @drurob
                                          ich würde mich gern mal an das Problem mit der Umstellung des Typs von 13021 dran hängen:
                                          Hallo zusammen, ich hab an meiner PV seit fast 2 Jahren einen SH80RT Wechselrichter, dessen Daten ich via Modbus per IOBroker auslese und visualisiere die Daten in einem Stromflussdiagramm, dessen Logik ich komplett von hier übernommen habe.

                                          Durch die Umstellung war der angezeigte Ladewert viel zu hoch, durch Suche habe ich gefunden, dass man den Type von 13021 selbst umstellen kann (unter Instanzen - modbus0 - Eingangsregister - den Typ von 13021 von unsigned 16 bit (Big Endian) umstellen auf signed 16 bit (Big Endian)".
                                          Danach stehen in 13021 korrekte Werte, mit Vorzeichen drin (negative Werte = Ladung in die Batterie, positive Werte: Entladung der Batterie).

                                          Welche Änderung muss ich jetzt im Blockly bzw. im Scriptblock, der auf der oben verlinken Seite drauf ist machen, damit die Berechnung der einzelnen Werte (Stromfluss in/von der Batterie, ins/vom Netz) wieder passen?

                                          G Offline
                                          G Offline
                                          GombersIOB
                                          schrieb am zuletzt editiert von
                                          #810

                                          @maddm

                                          Ich bin immer etwas im Zweifel, welches Register gemeint ist, da der Dokumentationsoffset immer um 1 höher ist als die Registeradresse. Ich gehe mal von Battery Power aus.
                                          Die Register 13020 bis 13022 sind wie folgt in der Dokumentation beschrieben:
                                          692c6572-3177-4661-9d83-e9d846ccc2ef-grafik.png
                                          Ich habe auch eine SH8.0RT und dort bei mir sind die Register auch genauso als UNSIGNED 16bit Integer im IOBroker eingetragen.
                                          59154380-3875-4e02-af3d-f205f87920e5-grafik.png
                                          Diese Eintragung hat gar nichts damit zu tun wie der Wechselrichter seine Daten speichert oder sie an den aufrufenden Master sendet. Das Datenformat ist nicht Bestandteil des MODBUS-Protokolls. In dem werden einfach Register abgefragt und die Inhalte geschickt - aber nicht interpretiert. Man kann damit kein Vorzeichenbit im Wechselrichter einschalten!

                                          Die Eintragung betrifft nur den IOBroker Modbus-Adapter selber, damit der weiß, wie er die Register interpretieren muss. Wenn die Zahl als signed verstanden werden soll, wird das erste Bit als Vorzeichen (0=="+"; 1=="-") interpretiert. Wird es als unsigned definiert werden alle 16 Bit als positiver Zahlwert gerechnet.
                                          In die Objekte wird dann der entsprechend umgerechnete Dezimalwert eingetragen.

                                          Woher das kommt, dass das Register 13021 jetzt vorzeichenbehaftet sein soll, würde mich doch interessieren. Mein letztes Dokument über die Beschreibung der Register ist vom August 2023 (V1.1.2), da ist es noch unsigned. Habt Ihr dazu neuere Dokumentation.

                                          Ich habe mir gerade mal aller Werte der BatteryPower (13021) aus dem letzten Jahr angesehen. Da war bei mir absolut nichts merkwürdig.

                                          W M 2 Antworten Letzte Antwort
                                          0
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

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

                                          751

                                          Online

                                          32.4k

                                          Benutzer

                                          81.5k

                                          Themen

                                          1.3m

                                          Beiträge
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Anmelden

                                          • Du hast noch kein Konto? Registrieren

                                          • Anmelden oder registrieren, um zu suchen
                                          • Erster Beitrag
                                            Letzter Beitrag
                                          0
                                          • Home
                                          • Aktuell
                                          • Tags
                                          • Ungelesen 0
                                          • Kategorien
                                          • Unreplied
                                          • Beliebt
                                          • GitHub
                                          • Docu
                                          • Hilfe