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

  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.2k

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

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

Sungrow WR SGH10RT erfolgreich mit MODBUS eingebunden

Geplant Angeheftet Gesperrt Verschoben ioBroker Allgemein
hardware sungrow sgh10rt modbu
895 Beiträge 132 Kommentatoren 363.9k 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.
  • L Offline
    L Offline
    LJSven
    schrieb am zuletzt editiert von
    #263

    Kann mir jemand sagen, warum ich nicht alle Werte auslesen kann bzw. der Adapter im 16000er Bereich nicht mehr grün wird?

    1 Antwort Letzte Antwort
    0
    • T Offline
      T Offline
      trouble
      schrieb am zuletzt editiert von
      #264

      Hallo zs.

      ich habe es nun auch geschaftt, den SH10RT per Modbus anzubinden. Leider bekomme ich aber keine Werte, alle bei 0:
      Screenshot 2022-08-01 222749.png
      hier meine Einstellungen, ich denke sollte passen.
      Screenshot 2022-08-01 223058.png
      Screenshot 2022-08-01 223147.png
      Screenshot 2022-08-01 223220.png

      Woran kann das noch liegen?

      Danke

      1 Antwort Letzte Antwort
      0
      • D Offline
        D Offline
        DRUROB
        schrieb am zuletzt editiert von
        #265

        Hi!
        Kann mir jemand sagen ob ich aus den Werten irgendwo den Status der DO bzw. D0 (O=oscar oder 0=null das weiß ich nicht so genau)Schnittstelle auslesen kann? Bin mir unsicher ob bei den Holding Registern unter 130xx das richtige für mich dabei ist.
        Ziel ist, den Status zu tracken um zu sehen ob die Wärmepumpe korrekt auf die Schnittstelle reagiert bzw. überhaupt etwas macht.

        @trouble
        ich hatte zu anfang auch probleme. ich kann dir nicht sagen was das problem bei dir ist, aber ich hatte auch sorgen damit. Hatte viel mit dem Übertrag der Register im IObroker Adapter gespielt und irgendwann gings auf einmal.

        1 Antwort Letzte Antwort
        0
        • A Atlantis

          Kurzbeschreibung zur Anbindung der neuen Sungrow Hybrid WR
          SGH5RT- SGH10RT (5-10 KW Hybrid), Markteinführung Sep./Okt. 2020

          und lt. der Beschreibung auch für folgende Modelle (ungetestet)
          SH5K-20 / SH3K6 / SH4K6 / SH5K-V13
          SH5K-30 / SH3K6-30 / SH4K6-30
          SH5.0RS / SH3.6RS / SH4.6RS / SH6.0RS
          SH10RT / SH8.0RT / SH6.0RT / SH5.0RT

          Die Anbindung zum IOBroker erfolgt per MODBUS.
          Einen ganz großen Dank geht hiermit an die Adapter Entwickler des MODBUS und an das Technik Team der Fa. Sungrow Deutschland für die Bereitstellung der MODBUS Variablen. Das ist absolut vorbildlich!!!

          Grundeinstellungen des MOD Bus Adapter:
          Die Modbus- Settings im Modbus Adapter bitte wie folgt wählen
          --> Dann passen die Copy Paste Files der Ein und Holding Register automatisch!, da das Registeradressen Offset (+1), welches sehr häufig für Probleme sorgt, bereits berücksichtigt ist:
          1ecf9052-1e26-4602-a3aa-d823a04b12cd-grafik.png

          Hier muss natürlich die IP Adresse Eures WR eingetragen werden!
          Mit dem WLAN Direkt LOGIN (und dem 3D Code) des Aufklebers auf dem WR kann der eingebaute LAN Adapter des WR aktiviert und erstellt werden. Mit diesem LOGIN kann dieser sowohl als DHCP als auch mit fester IP eingestellt werden. Ich habe den Zugang per LAN gewählt, da ich kein Freund von WLAN bin...

          Als Geräte ID ist die des WR selbst einzusetzen (also nicht des WLAN Adpaters) .
          Diese findet man z.B. über den Cloudzugang hier:
          ad93731f-bd6d-4287-a1a2-464cc708eb19-grafik.png

          Einstellungen zum Lesen der Eingangsregister (Read Only Werte des WR)
          Zum Lesen der WR Istwerte müssen die entsprechenden gewünschten Sollwerte aus der schon funktionsfähigen Copy/Paste Liste weiter unten ausgewählt werden. Alternativ können auch testweise mal einfach alle, die darin enthalten sind übenommen werden. (Hier ein Dank auch an alle Mitbefüller dieser Liste !!!)

          Die zu lesenden Werte müssen per Eingangsregister angelegt werden.
          Das geht über den Reiter Eingangsregister und im Eingangsregistermenü über das + Zeichen
          6108b2b7-3dd7-40fb-a10c-bda2d62a44cf-grafik.png

          Das leere Textfeld mit folgenden Werten des hier angehängten Textfiles befüllen:
          Eingangsregister_STAND2021_02_02.txt neuster Stand
          (ACHTUNG: Dazu das txt FIle zuerst downloaden und nicht aus dem Forum gleich per click öffnen, dann sind auch die Trennzeichen dabei. Nach dem DL mit Editor öffnen und per Copy & Paste einfügen)
          Danach unten das Hakerl zum Übernehmen setzen und speichern!

          Sollten Euch noch weitere Werte fehlen, die komplette MODBUS Beschreibung von Sungrow
          hat m-fuchs in diesem threat am 15.12.20 gepostet, dort könnt Ihr das Original als pdf runterladen.

          Schreiben der Modbus Werte via Holding Register.
          Analog der Eingangsregister werden die Lese- und schreibefähigen (Holding Register) wie folgt angelegt:

          Das geht über den Reiter Holdingsregister und im Holdingsregistermenü über das + Zeichen
          Anbei die mittlerweile recht vollständige Copy & Paste Liste
          (Einen großen Dank geht an alle, die hier im Forum dazu beigetragen haben, die Fehler zu elliminieren und fehlende Werte zu ergänzen!)
          Holding-Register2021_02_04.txt

          Jetzt kommt noch ein wichtiger Punkt!
          Möchte man die Holdingregister beschreiben kann dies entweder von Hand in den Objects passieren oder per Skript/Blocky. Dazu ist aber anders als bei den JS Variablen eine andere Ansteuerung erforderlich. So funktioniert es:
          mit Blocky:
          0b40509a-b909-4834-9ac7-ea4eb5b1d6b9-grafik.png

          Wichtig ist hier den Block Baustein "Steuere" zu nehmen und unter keinen Umständen den STD Baustein "aktualisiere"

          So sieht es dann per JS aus:

          setState("modbus.0.holdingRegisters.13049_EMS_mode selection", 3);
          

          Wenn man z.B. mit 500 W Laden/ Entladen möchte muss man folgende Holdings beschreiben:
          EMS Mode = 2 (Quasi Handsteuerung)
          13084 Einmalig mit einem Startwert versehen
          EMS Charge/Discharge Comand13050 wie folgt setzen:
          170 (Dezimal) = AA (Hexadezimal) <=> Charge/ Laden;
          187 (Dezimal) = BB: <=> Discharge / Entladen;
          204 (Dezimal) 0xCC <=> Stop (Anhalten/ Default );

          Der Startwert 13084 muss nach meiner Erfahrung nur einmal gesetzt werden.
          Um Ehrlich zu sein habe ich noch immer den Sinn dieses Registers nicht verstanden...

          Sobald die Werte geschrieben sind dauert es kurz (ca. 1-2s) dann legt der WR los...

          Anbei meine Intervalle wie ich das ganze kontinuierlich ansteuere:
          Den EMS Mode schreibe ich jede h 1x
          13051 Leistungssollwert schreibe ich ca. jede Sekunde
          13050 Richtung Laden/Entladen schreibe ich ebenfalls jede Sekunde.
          Das ist aber sicher nur bei Veränderung wirklich erforderlich-

          Wenn Ihr hier Fehler in den Copy Paste Listen entdeckt oder weitere Infos zum Schreiben der Register herausgefunden habt bitte bei mir melden, ich teste dann und ergänze die Anleitung hier---

          Habe einen neuen Post aufgemacht, um mit anderen zusammen eine Muster Energiemanagement Skript Lösung für die Sollwertvorgaben zu erarbeiten. Weiterlesen könnt Ihr hier:
          https://forum.iobroker.net/topic/40990/batteriemanagement-energiemanagement-mit-iobroker

          Allgemeines zum Sungrow WR (ohne Bezug zu IOBROKER)

          Jetzt noch ein paar generelle Punkte zum WR selbst, da sich einige sicher Fragen, kann man den WR kaufen... ?

          Habe ewig mit dem Webinterface und den diversen Zugangsmöglichkeiten per WLAN, APP, & Cloud gekämpft, bis ich endlich mal verstanden habe, auf welchem der 3 Wege man sich für welchen Zweck in den WR überhaupt einloggen muss. Hier besteht noch signifikantes Verbesserungspotential im User Manual um diese 3 Zugangs-Modi und deren Einschränkungen und Funktionen besser zu erklären.
          Verbesserungspotential besteht auch in der Qualität der Smartphone APP und des Cloud Zugangs. Die PC APP habe ich nicht getestet.

          Ich finde es Schade, dass der WR kein eigenes Webintgerface mehr besitzt und man nur per APP oder Cloud zugreifen kann. Wichtige Einstellungen lassen sich nur per direktem Einloggen per WLAN am WR direkt VORORT vornehmen.

          Warum es dazu nicht ein einfaches Webinterface mit PW Zugang getan hat und man wahrscheinlich wegen dem aktuellen Trend jetzt so einen APP Murgs begonnen hat, kann nur Sungrow beantworten...

          Aber wenn bei Euch mit MODBUS auch erstmal die Daten sprudeln, braucht das App Gelumpe eh keiner mehr... Bin da vielleicht etwas altmodisch...

          Der WR selbst macht einen super soliden Eindruck. Gerät ist massiv, klasse verarbeitet, Montagematerial wie Dübel (Fischer), Steckverbinder (Weidhaus) sind entgegen der Erwartung nicht billig sondern sehr gehobener deutscher STD!
          Schon die in die Montagehalterung integrierte Wasserwagenlibelle ist vorbildlich und zeigt, dass man bei SUNGROW mitgedacht hat.

          Einer von meinen 2 WR brummt (Netzbrummen) auch Nachts im Standby recht laut, was ich von meinen bisherigen Kostal WR nur bei mittlerer und hoher Last kenne. In diesem Lastbereich sind die SUNGROW WR dagegen eher ruhig.

          Was ich bisher beurteilen kann ist der Wirkungsgrad zumindest bei sehr geringen PV Leistungen im reinen PV Betrieb nicht der Beste, also gerade an Tagen, wo man auf jedes Watt angewiesen ist.

          Der WR (10 KW) beginnt erst ab einer AC Leistung von ca. 150W seinen Dienst, wenn auf der DC Seite bereits 220 W Leistung anliegen und bei solch geringen Leistungen auch mit sehr bescheidenem Wirkungsgrad. Dieses Verhalten kann man aber auch bei anderen Hybrid WR bzw. Batteriespeichersystemen anderer Anbieter auch zu Hauf im Netz finden.
          Ohne Batterie nimmt sich der Hybrid WR 23w im Standby bei Nacht.
          Werde weitere Werte z.B. bei mittlerer und hoher Einspeisung und ab Dezember dann auch mit Batterie nachliefern, sobald vorhanden!!!

          Jetzt bleibt nur zu hoffen, dass Sungrow Deutschland seiner aktuellen sehr offenen Philosophie treu bleibt. In Australien wo die WR mit leichten Änderungen (LCD Display) bereits seit geraumer Zeit verfügbar sind wurde der Zugang zum Modbus nach einem SW Updates ohne Vorwarnung plötzlich mit PW geschütz. Das wäre ein klares "DON´T BUY THIS PRODUCT " Signal !!!!!

          Momentan halte ich aber an beiden Händen die DAUMEN HOCH !!!!!

          Wer schon alles so weit umgesetzt hat und gerne den codierten WR Status als Variable haben möchte hier ein super unschöne Spaghetticode Lösung, welche aber funktioniert. Wer sich in JS oder Blocky besser auskennt und eine schönere Lösung findet bitte melden, dann übernehme ich diese für die anderen hier:

          Als Zielvariablen habe ich diese hier per JS Variablen angelegt.
          feea64be-bbbf-428d-b4ba-a095ae9287e3-grafik.png

          Hier der Blocky Code für Copy/Paste:
          Blocky_WR_STATUS.txt

          Ich habe in der Zwischenzeit ein Energiemanagement für 2 WR mit 2Batterien recht stabil am laufen.
          Nachdem sich die Sonne in den letzten Wochen leider nur sehr selten so stark zeigt, dass ich in den Überschuss komme würde ich das Ganze jedoch gerne noch etwas beobachten, bevor ich das teile.

          Ich werde auf das Thema Energiemanagement hier nicht weiter eingehen sondern in dem oben genanten Post, da das Thema HIER nicht jeder braucht.

          Dennoch vorab mal ein paar Impressionen.

          Bevor jetzt gleich der Shitstorm losgeht....
          Thema Estethik:
          Momentan sind noch Werte mit in der Anzeige, die später natürlich rausfliegen, um die Übersichtlichkeit zu erhöhen. Aktuell aber zum Fehlers uchen mal mehr reingepackt als der Übersichtlichkeit dient und mehr als erforderlich...

          Thema Ausregelung:
          Ich habe sehr stark springende Lasten und sehr viele spontane Verbraucher, so dass ein Ausgleichen am Grid von 300-400 Watt für mich ein recht akzeptables Resultat darstellt.
          Zwischen den Bildern (Screenshots) liegen natürlich weitere Sprünge im Energiebedarf.
          Bei mir läuft eine Holhackschnitzelanlage, die sich im 2-10 Sekunden Rhytmus Holz aus dem Silo mit einem 1,5 KW Motor holt, da ist ständig was in Bewegung
          EIgentlich müsste ich das Ganze als Video Posten, nur dabei ist zu sehen, wie der IO Broker ständig nachtarriert...
          Entladen_B_IIIII.JPG Entladen_B_IIII.JPG Entladen_B_III.JPG Entladen_B_II.JPG Entladen_B.JPG

          Die WR reagieren leider nicht ganz so spontan auf die Sollwerte, wie man das erhoffen würde... Hier läßt siche später in der Abfragefrequenz, dem Zeitpunkt der Abfrage von Energiemessgerät und WR usw. noch einiges optimieren. Dazu dann mehr im anderen Post...

          Atlantis (Stand 18.11.20/ Letztes Update 03.02.21)

          S Offline
          S Offline
          Smokey
          schrieb am zuletzt editiert von
          #266

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

          **Kurzbeschreibung zur Anbindung der neuen Sungrow Hybrid WR

          Herzlichen Dank @Atlantis . Es war zwar auch im Sommer 2022 noch kein Selbstläufer, aber jetzt klappt alles.
          Ich habe den Wechselrichter zwar letztendlich doch über die "richtige" LAN Buchse verbunden. Aber am längsten habe ich mit dem WiNet-S rumgemacht. Ich hab ihn schlicht in meinem (sehr großen) WLAN Netzwerk nicht gefunden weil die Hinweise auf die Sungrow MAC Adresse (beginnt mit AC:xx) halt für den WiNet nicht zutreffen. Wenn das also jemand ein Problem macht: MAC des WiNet-S Adapters beginnt bei mir mit 94:xx und er ist mit dem Namen "espressif" aufgetaucht.. hab ewig gesucht :) Vielleicht schont es die Nerven des einen oder anderen es zu wissen.

          1 Antwort Letzte Antwort
          0
          • M Offline
            M Offline
            mihas
            schrieb am zuletzt editiert von mihas
            #267

            Kann jemand kurz mein log schauen:

            logs - iobroker 2022-08-17 10-08-20.png

            Was ist FC 132?
            Meine Anlage SH5.0RT.

            P.S. GELÖST.

            1 Antwort Letzte Antwort
            0
            • J jh410

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

              Hallo,
              SH10RT über Lankabel angeschlossen, nichts WiNet-S
              Bekomme beim register 13007 ab und an werte die mit "4294967" beginnen.
              22cc3d6e-e6c3-4b0e-b7ad-ce2e19e7b8b3-grafik.png
              Was dann natürlich später in Grafana nicht abbildbar ist.
              habt ihr das auch oder wie habt ihr das problem gelöst ?
              habe schon neues Iobroker + neu installation Modbus getestet, hat nichts funktioniert.

              Danke

              Genau das Problem habe ich auch, seit der SG20RT neben dem SH10RT in Betrieb genommen wurde. Wie hast du das gelöst, @burberry?
              Hatte Modbus erst bei beiden über das WiNet-S laufen, allerdings ging der Running State nicht mehr beim SH10RT, bin dann wieder auf den normalen LAN-Port.

              D Offline
              D Offline
              Davipet
              schrieb am zuletzt editiert von
              #268

              @jh410
              Das Selbe habe ich auch. Leider keine Lösung dafür. Hast du das inzwischen gefixt bekommen?

              Woran seht ihr eigentlich ob der Batteriespeicher geladen oder entladen wird? Strom und Leistung wechseln nicht wie ich erwartet hatte die Vorzeichen...

              Gruß

              David

              1 Antwort Letzte Antwort
              0
              • D Offline
                D Offline
                Daniel
                schrieb am zuletzt editiert von Daniel
                #269

                Hallo zusammen,
                starre seit Monaten immer mal wieder auf diesen Thread und versuche meinen WR via Modbus in Iobroker auszuwerten. Hatte auch immer wieder das Problem mit reconnects und Fehlern.
                Heute hat es endlich geklappt. Keine Ahnung, woran es am Ende lag… hier meine letzten Schritte:

                1. Modbus-Adapter komplett deinstalliert und neu installiert

                2. Geräte ID 1, IP, Master, kein Alias. Rest wie vorkonfiguriert 86fd6bbc-6ffb-4488-b9c9-e8d38d533b6a-image.png

                3. Ich habe nicht den WiNet-Dongle benutzt (weder Wifi noch den LAN Port des Dongles) sondern den fest verbauten separaten LAN-Port des WRs

                4. Die IP findet ihr bspw. in Fritzbox unter Heimnetz->Netzwerk. Wenn ihr oben rechts über den Button "+/-" die Spalte Mac-Adresse einblendet, sollte ihr die richtige IP recht fix finden, die dazugehörige Mac-Adresse beginnt mit "AC" (Achtung: das ist aber auch beim WiNet-Dongle der Fall)

                5. Um zu checken ob die Kommunikation grundsätzlich funktioniert kann man bspw. Tools wie modbus-cli nutzen:

                  modbus 192.168.YYY.ZZ:502 -s 1 4999/H
                  Parsed 0 registers definitions from 1 files
                  4999: 2022 0x7e6

                  Hier wird bspw. das aktuelle Jahr zurück gegeben. Wenn das schon nicht funktioniert, habt ihr vermutlich schon ein Problem mit der Verbindung (Client-ID falsch, IP falsch...). Aber Achtung: Verschwendet aber nicht zu viel Zeit darauf, damit "richtige" Werte wie aktuellen Ertrag auszulesen. Über das CLI-Tool habe ich bis heute keine oder unplausible Werte, man kann da mit Word Swap etc pp. viel falsch machen und denkt dann, es funktioniert irgendwas grundlegendes nicht, obwohl man nur die Datentypen falsch hat

                6. Den Fehler On error: {"errno":-104,"code":"ECONNRESET","syscall":"read"} habe ich anfänglich immer wieder gehabt - und jetzt innerhalb weniger Tage mehrfach. Einmal hat ein Firmware-Update des WR das Problem gelöst (vll. aber auch nur wg. des damit zusammenhängenden Neustarts); gerade eben habe ich in meinem Zyxel-Switch das vom WR kommende LAN-Kabel in einen anderen Port gesteckt - und direkt wieder eine funktionierende Verbindung gehabt. Arbeitshypothese wäre in dem Fall, dass der Switch auf dem Port dicht gemacht hat??

                7. Das TSV Format bzgl. der Register hat sich wohl verändert mittlerweile. Hier der Stand, der bei mir funktioniert hat: https://gist.github.com/dnoegel/543c72ef722365a3934bbad0bb43e222. Wenn ihr dort auf "Raw" klickt, kommt ihr direkt zur Datei.

                8. Versucht nicht zu lange von Hand drei handverlesene Register zum Laufen zu bringen, wenn ihr euch nicht sicher seit, dass ihr die Datentypen richtig getroffen habt: Die TSV funktioniert, bringt das Ding erstmal rein und schaut dann, welche Werte ihr bekommt.

                9. In der Sungrow App kann man wunderbar sehen, welche Ströme von wo nach wo fließen. In den Modbus-Daten sieht man eher, welche Ströme an welche Quelle anliegen. Möchte man sehen, ob die Batterie geladen oder entladen wird, muss man den "Running State" interpretieren (Register 13000). Die Information ist binary, d.h. das Checken á la "Wenn Wert = 25" kann man sich sparen. Hier mein Ansatz in Blockly:


                  <xml xmlns="https://developers.google.com/blockly/xml">
                  <variables>
                  <variable id="Wu=u[10[PLwu)p_g$2ZM">number</variable>
                  <variable id="u?6#BJh2Bp((1W3u)Vnf">bitPosition</variable>
                  <variable id="Kl3S0K7)wS:E#~kmp_|">dec</variable> </variables> <block type="comment" id="dl.~:*si1DA:Ep6wYJ[%" x="-863" y="-137"> <field name="COMMENT">Run whenever state is changed</field> <next> <block type="on_ext" id="c;*|gCMP^+7VyIN]qj^">
                  <mutation xmlns="http://www.w3.org/1999/xhtml" items="1"></mutation>
                  <field name="CONDITION">ne</field>
                  <field name="ACK_CONDITION"></field>
                  <value name="OID0">
                  <shadow type="field_oid" id="jk{31$NENu@o]pNzRU">
                  <field name="oid">modbus.0.inputRegisters.13000_Running_State</field>
                  </shadow>
                  </value>
                  <statement name="STATEMENT">
                  <block type="procedures_callnoreturn" id="~dii,d.PsDx8L!{#5e4G">
                  <mutation name="run">
                  <arg name="dec"></arg>
                  </mutation>
                  <value name="ARG0">
                  <block type="on_source" id="NE|H~0.b4VGmM[GnS2~?">
                  <field name="ATTR">state.val</field>
                  </block>
                  </value>
                  </block>
                  </statement>
                  <next>
                  <block type="comment" id="W}Mu1vp1F6~uBlmI|.C">
                  <field name="COMMENT">Run once after script is started</field>
                  <next>
                  <block type="procedures_callnoreturn" id="/+j6gN2NZ:bV+X~x0ur"> <mutation name="run"> <arg name="dec"></arg> </mutation> <value name="ARG0"> <block type="get_value" id="?)Snd}*[?TT^E)h(x^I#"> <field name="ATTR">val</field> <field name="OID">modbus.0.inputRegisters.13000_Running_State</field> </block> </value> </block> </next> </block> </next> </block> </next> </block> <block type="procedures_defcustomreturn" id=")7@7$^bI?;9JiXb,CqbC" x="-437" y="-88"> <mutation statements="false"> <arg name="number" varid="Wu=u[10[PLwu)p_g$2ZM"></arg> <arg name="bitPosition" varid="u?6#BJh2Bp((1W3u)Vnf"></arg> </mutation> <field name="NAME">getBit</field> <field name="SCRIPT">ICByZXR1cm4gKG51bWJlciAmICgxIDw8IGJpdFBvc2l0aW9uKSkgPT09IDAgPyAwIDogMTsK</field> <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment> </block> <block type="procedures_defcustomnoreturn" id="lz{Fy{/wE{2-%uVacZd0" x="-437" y="-37"> <mutation statements="false"> <arg name="dec" varid="Kl3S0K7)wS:E#~kmp_|"></arg>
                  </mutation>
                  <field name="NAME">extractRunningStates</field>
                  <field name="SCRIPT">ZnVuY3Rpb24gZGVjVG9CaXQoZGVjLCBiaXRQb3NpdGlvbikgewogICAgcmV0dXJuIChkZWMgJiAoMSA8PCBiaXRQb3NpdGlvbikpID09PSAwID8gZmFsc2UgOiB0cnVlOwp9CgoKc2V0U3RhdGUoIjBfdXNlcmRhdGEuMC5QVi5Qb3dlckdlbmVyYXRlZEZyb21QViIsIGRlY1RvQml0KGRlYywgMCksIHRydWUpOwpzZXRTdGF0ZSgiMF91c2VyZGF0YS4wLlBWLkJhdHRlcnlDaGFyZ2luZyIsIGRlY1RvQml0KGRlYywgMSksIHRydWUpOwpzZXRTdGF0ZSgiMF91c2VyZGF0YS4wLlBWLkJhdHRlcnlEaXNjaGFyZ2luZyIsIGRlY1RvQml0KGRlYywgMiksIHRydWUpOwpzZXRTdGF0ZSgiMF91c2VyZGF0YS4wLlBWLkxvYWRBY3RpdmUiLCBkZWNUb0JpdChkZWMsIDMpLCB0cnVlKTsKc2V0U3RhdGUoIjBfdXNlcmRhdGEuMC5QVi5Qb3dlckZlZWRJbnRvR3JpZCIsIGRlY1RvQml0KGRlYywgNCksIHRydWUpOwpzZXRTdGF0ZSgiMF91c2VyZGF0YS4wLlBWLlBvd2VySW1wb3J0RnJvbUdyaWQiLCBkZWNUb0JpdChkZWMsIDUpLCB0cnVlKTsKc2V0U3RhdGUoIjBfdXNlcmRhdGEuMC5QVi5Qb3dlckdlbmVyYXRlZEZyb21Mb2FkIiwgZGVjVG9CaXQoZGVjLCA3KSwgdHJ1ZSk7Cg==</field>
                  <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
                  </block>
                  <block type="procedures_defnoreturn" id="vv(U!g(@pnn)8_.{bCV|" x="-388" y="163">
                  <mutation>
                  <arg name="dec" varid="Kl3S0K7)wS:E#~kmp_|"></arg> </mutation> <field name="NAME">debug output</field> <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment> <statement name="STACK"> <block type="comment" id="4Kc|yjIOj/d!+rX^eB8k"> <field name="COMMENT">create some debug messages so we can check state changes in the log after the fact</field> <next> <block type="debug" id="KOrPE~?_|7q-iX+hf9B7"> <field name="Severity">log</field> <value name="TEXT"> <shadow type="text" id="qi6ijIzs)8YkGt3mXbyd"> <field name="TEXT">test</field> </shadow> <block type="text_join" id="sQoBJpPXUR}I,yDnYLzU"> <mutation items="2"></mutation> <value name="ADD0"> <block type="text" id="@[Qr;#TN3?QNNtRdBFJb"> <field name="TEXT">Power generation</field> </block> </value> <value name="ADD1"> <block type="procedures_callcustomreturn" id="[di$veE=W)etZ1N1csD!"> <mutation name="getBit"> <arg name="number"></arg> <arg name="bitPosition"></arg> </mutation> <value name="ARG0"> <block type="variables_get" id="!.K$T:bqj+}ijHEBEu1O"> <field name="VAR" id="Kl3S0K7)wS:E#~kmp_|">dec</field>
                  </block>
                  </value>
                  <value name="ARG1">
                  <block type="math_number" id="[?#(KLA~d_4od@i%HKRE">
                  <field name="NUM">0</field>
                  </block>
                  </value>
                  </block>
                  </value>
                  </block>
                  </value>
                  <next>
                  <block type="debug" id=".tDzA6hZ]hWm/Q1Ki+C}">
                  <field name="Severity">log</field>
                  <value name="TEXT">
                  <shadow type="text">
                  <field name="TEXT">test</field>
                  </shadow>
                  <block type="text_join" id="9_lIMrC@kQZHlIS.BX5"> <mutation items="2"></mutation> <value name="ADD0"> <block type="text" id="+0Y)usl;k0!LReL=@1TA"> <field name="TEXT">Battery charging</field> </block> </value> <value name="ADD1"> <block type="procedures_callcustomreturn" id="l-(+Hf/C:1.Pr$1TME!">
                  <mutation name="getBit">
                  <arg name="number"></arg>
                  <arg name="bitPosition"></arg>
                  </mutation>
                  <value name="ARG0">
                  <block type="variables_get" id="]k8{NSg3:qwE6y~~PPUG">
                  <field name="VAR" id="Kl3S0K7)wS:E#~kmp_|">dec</field> </block> </value> <value name="ARG1"> <block type="math_number" id="f|p*H^X]~uRfJ4zwy{V]"> <field name="NUM">1</field> </block> </value> </block> </value> </block> </value> <next> <block type="debug" id="#o:4EZCjL=5M?Gw+0O.i"> <field name="Severity">log</field> <value name="TEXT"> <shadow type="text"> <field name="TEXT">test</field> </shadow> <block type="text_join" id="OIyVbASBmVYSEM=oZSMm"> <mutation items="2"></mutation> <value name="ADD0"> <block type="text" id="YkP-(f;KKjkroM[%{a;?"> <field name="TEXT">Battery discharging</field> </block> </value> <value name="ADD1"> <block type="procedures_callcustomreturn" id="pGmRj}_+$eQxsP,i1O@L"> <mutation name="getBit"> <arg name="number"></arg> <arg name="bitPosition"></arg> </mutation> <value name="ARG0"> <block type="variables_get" id="VZ2rjX0pe@PD-b0EK.@n"> <field name="VAR" id="Kl3S0K7)wS:E#~kmp_|">dec</field>
                  </block>
                  </value>
                  <value name="ARG1">
                  <block type="math_number" id="^/WwB;Scl3(cF8[3jylF">
                  <field name="NUM">2</field>
                  </block>
                  </value>
                  </block>
                  </value>
                  </block>
                  </value>
                  <next>
                  <block type="debug" id="2=ESEy@?o=2!#~*4.[p"> <field name="Severity">log</field> <value name="TEXT"> <shadow type="text"> <field name="TEXT">test</field> </shadow> <block type="text_join" id="SrIP5yY+X.D22D[VrlP$"> <mutation items="2"></mutation> <value name="ADD0"> <block type="text" id="M5Sk=a6?/W8mc@|rtDHZ"> <field name="TEXT">Positive load</field> </block> </value> <value name="ADD1"> <block type="procedures_callcustomreturn" id="UCHG|NH^a829VlS_FOc["> <mutation name="getBit"> <arg name="number"></arg> <arg name="bitPosition"></arg> </mutation> <value name="ARG0"> <block type="variables_get" id="Mrs-RQx3Z0}OX1FVc!+c"> <field name="VAR" id="Kl3S0K7)wS:E#~kmp_|">dec</field>
                  </block>
                  </value>
                  <value name="ARG1">
                  <block type="math_number" id="3oaU:Voj|5J0Fn$KdP=^">
                  <field name="NUM">3</field>
                  </block>
                  </value>
                  </block>
                  </value>
                  </block>
                  </value>
                  <next>
                  <block type="debug" id="8
                  ~@Ywry?/piw*O}+,=]">
                  <field name="Severity">log</field>
                  <value name="TEXT">
                  <shadow type="text">
                  <field name="TEXT">test</field>
                  </shadow>
                  <block type="text_join" id="K,z(Z;tM4v-MVT)=sh"> <mutation items="2"></mutation> <value name="ADD0"> <block type="text" id="QsKlyP=k#wB.!q2W+XJ">
                  <field name="TEXT">Power feed into the grid</field>
                  </block>
                  </value>
                  <value name="ADD1">
                  <block type="procedures_callcustomreturn" id="aknN
                  P^vup+EdTLM6/yn">
                  <mutation name="getBit">
                  <arg name="number"></arg>
                  <arg name="bitPosition"></arg>
                  </mutation>
                  <value name="ARG0">
                  <block type="variables_get" id="0QUz2T3lebdal%Stjha^">
                  <field name="VAR" id="Kl3S0K7)wS:E#~kmp_|">dec</field> </block> </value> <value name="ARG1"> <block type="math_number" id="d5~PH;7@M7kTud**ES.">
                  <field name="NUM">4</field>
                  </block>
                  </value>
                  </block>
                  </value>
                  </block>
                  </value>
                  <next>
                  <block type="debug" id="s[=~4,hPHDd0]0YAO8|u">
                  <field name="Severity">log</field>
                  <value name="TEXT">
                  <shadow type="text">
                  <field name="TEXT">test</field>
                  </shadow>
                  <block type="text_join" id="X9{#rK3QZb$[550!GD$"> <mutation items="2"></mutation> <value name="ADD0"> <block type="text" id="Oe-,=fU/6IGKG3v,/t+0"> <field name="TEXT">Power from the grid</field> </block> </value> <value name="ADD1"> <block type="procedures_callcustomreturn" id="EGn+kHA^EQ1XRJhx!Vhb"> <mutation name="getBit"> <arg name="number"></arg> <arg name="bitPosition"></arg> </mutation> <value name="ARG0"> <block type="variables_get" id="}2agbC4wrjiK^REZrT={"> <field name="VAR" id="Kl3S0K7)wS:E#~kmp_|">dec</field>
                  </block>
                  </value>
                  <value name="ARG1">
                  <block type="math_number" id=":fd,9cSXwq[{cx76A-+}">
                  <field name="NUM">5</field>
                  </block>
                  </value>
                  </block>
                  </value>
                  </block>
                  </value>
                  <next>
                  <block type="debug" id="hOK+$jW(m-QrUr#W|/n@">
                  <field name="Severity">log</field>
                  <value name="TEXT">
                  <shadow type="text">
                  <field name="TEXT">test</field>
                  </shadow>
                  <block type="text_join" id="QJDY}eje)+|3SUH(BZyM">
                  <mutation items="2"></mutation>
                  <value name="ADD0">
                  <block type="text" id="hj9k)mHycGoRx9vHO]Q{">
                  <field name="TEXT">Power from load</field>
                  </block>
                  </value>
                  <value name="ADD1">
                  <block type="procedures_callcustomreturn" id="Rk4r]0=rc#(qd]Nqjds$">
                  <mutation name="getBit">
                  <arg name="number"></arg>
                  <arg name="bitPosition"></arg>
                  </mutation>
                  <value name="ARG0">
                  <block type="variables_get" id="m,$d6J}Ic:=mV:|i0B58">
                  <field name="VAR" id="Kl3S0K7)wS:E#~kmp_|">dec</field> </block> </value> <value name="ARG1"> <block type="math_number" id=":^V4s@UVYMGm/ada=3N">
                  <field name="NUM">7</field>
                  </block>
                  </value>
                  </block>
                  </value>
                  </block>
                  </value>
                  </block>
                  </next>
                  </block>
                  </next>
                  </block>
                  </next>
                  </block>
                  </next>
                  </block>
                  </next>
                  </block>
                  </next>
                  </block>
                  </next>
                  </block>
                  </statement>
                  </block>
                  <block type="procedures_defnoreturn" id="ILxxz6e}u[fcDIeO6oXT" x="-812" y="212">
                  <mutation>
                  <arg name="dec" varid="Kl3S0K7)wS:E#~kmp_`|"></arg>
                  </mutation>
                  <field name="NAME">run</field>
                  <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
                  <statement name="STACK">
                  <block type="procedures_callcustomnoreturn" id="j|y@bpDyP5[;xE)~RRQ[">
                  <mutation name="extractRunningStates">
                  <arg name="dec"></arg>
                  </mutation>
                  <value name="ARG0">
                  <block type="variables_get" id="Q=XjjZ?bay6J1^X4EO)2">
                  <field name="VAR" id="Kl3S0K7)wS:E#~kmp_`|">dec</field>
                  </block>
                  </value>
                  <next>
                  <block type="procedures_callnoreturn" id="-0-R2zP[?Peo2o)AH{B0">
                  <mutation name="debug output">
                  <arg name="dec"></arg>
                  </mutation>
                  <value name="ARG0">
                  <block type="variables_get" id=")ehVkoDs8KN([lz_?.j.">
                  <field name="VAR" id="Kl3S0K7)wS:E#~kmp_`|">dec</field>
                  </block>
                  </value>
                  </block>
                  </next>
                  </block>
                  </statement>
                  </block>
                  </xml>

                Hoffe das hilft etwas weiter. Vielen Dank auch nochmal an @Atlantis fürs Zusammentragen der Infos + alle anderen die mitüberlegt und mitrecherchiert haben!

                Daniel

                T F R 3 Antworten Letzte Antwort
                0
                • D Daniel

                  Hallo zusammen,
                  starre seit Monaten immer mal wieder auf diesen Thread und versuche meinen WR via Modbus in Iobroker auszuwerten. Hatte auch immer wieder das Problem mit reconnects und Fehlern.
                  Heute hat es endlich geklappt. Keine Ahnung, woran es am Ende lag… hier meine letzten Schritte:

                  1. Modbus-Adapter komplett deinstalliert und neu installiert

                  2. Geräte ID 1, IP, Master, kein Alias. Rest wie vorkonfiguriert 86fd6bbc-6ffb-4488-b9c9-e8d38d533b6a-image.png

                  3. Ich habe nicht den WiNet-Dongle benutzt (weder Wifi noch den LAN Port des Dongles) sondern den fest verbauten separaten LAN-Port des WRs

                  4. Die IP findet ihr bspw. in Fritzbox unter Heimnetz->Netzwerk. Wenn ihr oben rechts über den Button "+/-" die Spalte Mac-Adresse einblendet, sollte ihr die richtige IP recht fix finden, die dazugehörige Mac-Adresse beginnt mit "AC" (Achtung: das ist aber auch beim WiNet-Dongle der Fall)

                  5. Um zu checken ob die Kommunikation grundsätzlich funktioniert kann man bspw. Tools wie modbus-cli nutzen:

                    modbus 192.168.YYY.ZZ:502 -s 1 4999/H
                    Parsed 0 registers definitions from 1 files
                    4999: 2022 0x7e6

                    Hier wird bspw. das aktuelle Jahr zurück gegeben. Wenn das schon nicht funktioniert, habt ihr vermutlich schon ein Problem mit der Verbindung (Client-ID falsch, IP falsch...). Aber Achtung: Verschwendet aber nicht zu viel Zeit darauf, damit "richtige" Werte wie aktuellen Ertrag auszulesen. Über das CLI-Tool habe ich bis heute keine oder unplausible Werte, man kann da mit Word Swap etc pp. viel falsch machen und denkt dann, es funktioniert irgendwas grundlegendes nicht, obwohl man nur die Datentypen falsch hat

                  6. Den Fehler On error: {"errno":-104,"code":"ECONNRESET","syscall":"read"} habe ich anfänglich immer wieder gehabt - und jetzt innerhalb weniger Tage mehrfach. Einmal hat ein Firmware-Update des WR das Problem gelöst (vll. aber auch nur wg. des damit zusammenhängenden Neustarts); gerade eben habe ich in meinem Zyxel-Switch das vom WR kommende LAN-Kabel in einen anderen Port gesteckt - und direkt wieder eine funktionierende Verbindung gehabt. Arbeitshypothese wäre in dem Fall, dass der Switch auf dem Port dicht gemacht hat??

                  7. Das TSV Format bzgl. der Register hat sich wohl verändert mittlerweile. Hier der Stand, der bei mir funktioniert hat: https://gist.github.com/dnoegel/543c72ef722365a3934bbad0bb43e222. Wenn ihr dort auf "Raw" klickt, kommt ihr direkt zur Datei.

                  8. Versucht nicht zu lange von Hand drei handverlesene Register zum Laufen zu bringen, wenn ihr euch nicht sicher seit, dass ihr die Datentypen richtig getroffen habt: Die TSV funktioniert, bringt das Ding erstmal rein und schaut dann, welche Werte ihr bekommt.

                  9. In der Sungrow App kann man wunderbar sehen, welche Ströme von wo nach wo fließen. In den Modbus-Daten sieht man eher, welche Ströme an welche Quelle anliegen. Möchte man sehen, ob die Batterie geladen oder entladen wird, muss man den "Running State" interpretieren (Register 13000). Die Information ist binary, d.h. das Checken á la "Wenn Wert = 25" kann man sich sparen. Hier mein Ansatz in Blockly:


                    <xml xmlns="https://developers.google.com/blockly/xml">
                    <variables>
                    <variable id="Wu=u[10[PLwu)p_g$2ZM">number</variable>
                    <variable id="u?6#BJh2Bp((1W3u)Vnf">bitPosition</variable>
                    <variable id="Kl3S0K7)wS:E#~kmp_|">dec</variable> </variables> <block type="comment" id="dl.~:*si1DA:Ep6wYJ[%" x="-863" y="-137"> <field name="COMMENT">Run whenever state is changed</field> <next> <block type="on_ext" id="c;*|gCMP^+7VyIN]qj^">
                    <mutation xmlns="http://www.w3.org/1999/xhtml" items="1"></mutation>
                    <field name="CONDITION">ne</field>
                    <field name="ACK_CONDITION"></field>
                    <value name="OID0">
                    <shadow type="field_oid" id="jk{31$NENu@o]pNzRU">
                    <field name="oid">modbus.0.inputRegisters.13000_Running_State</field>
                    </shadow>
                    </value>
                    <statement name="STATEMENT">
                    <block type="procedures_callnoreturn" id="~dii,d.PsDx8L!{#5e4G">
                    <mutation name="run">
                    <arg name="dec"></arg>
                    </mutation>
                    <value name="ARG0">
                    <block type="on_source" id="NE|H~0.b4VGmM[GnS2~?">
                    <field name="ATTR">state.val</field>
                    </block>
                    </value>
                    </block>
                    </statement>
                    <next>
                    <block type="comment" id="W}Mu1vp1F6~uBlmI|.C">
                    <field name="COMMENT">Run once after script is started</field>
                    <next>
                    <block type="procedures_callnoreturn" id="/+j6gN2NZ:bV+X~x0ur"> <mutation name="run"> <arg name="dec"></arg> </mutation> <value name="ARG0"> <block type="get_value" id="?)Snd}*[?TT^E)h(x^I#"> <field name="ATTR">val</field> <field name="OID">modbus.0.inputRegisters.13000_Running_State</field> </block> </value> </block> </next> </block> </next> </block> </next> </block> <block type="procedures_defcustomreturn" id=")7@7$^bI?;9JiXb,CqbC" x="-437" y="-88"> <mutation statements="false"> <arg name="number" varid="Wu=u[10[PLwu)p_g$2ZM"></arg> <arg name="bitPosition" varid="u?6#BJh2Bp((1W3u)Vnf"></arg> </mutation> <field name="NAME">getBit</field> <field name="SCRIPT">ICByZXR1cm4gKG51bWJlciAmICgxIDw8IGJpdFBvc2l0aW9uKSkgPT09IDAgPyAwIDogMTsK</field> <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment> </block> <block type="procedures_defcustomnoreturn" id="lz{Fy{/wE{2-%uVacZd0" x="-437" y="-37"> <mutation statements="false"> <arg name="dec" varid="Kl3S0K7)wS:E#~kmp_|"></arg>
                    </mutation>
                    <field name="NAME">extractRunningStates</field>
                    <field name="SCRIPT">ZnVuY3Rpb24gZGVjVG9CaXQoZGVjLCBiaXRQb3NpdGlvbikgewogICAgcmV0dXJuIChkZWMgJiAoMSA8PCBiaXRQb3NpdGlvbikpID09PSAwID8gZmFsc2UgOiB0cnVlOwp9CgoKc2V0U3RhdGUoIjBfdXNlcmRhdGEuMC5QVi5Qb3dlckdlbmVyYXRlZEZyb21QViIsIGRlY1RvQml0KGRlYywgMCksIHRydWUpOwpzZXRTdGF0ZSgiMF91c2VyZGF0YS4wLlBWLkJhdHRlcnlDaGFyZ2luZyIsIGRlY1RvQml0KGRlYywgMSksIHRydWUpOwpzZXRTdGF0ZSgiMF91c2VyZGF0YS4wLlBWLkJhdHRlcnlEaXNjaGFyZ2luZyIsIGRlY1RvQml0KGRlYywgMiksIHRydWUpOwpzZXRTdGF0ZSgiMF91c2VyZGF0YS4wLlBWLkxvYWRBY3RpdmUiLCBkZWNUb0JpdChkZWMsIDMpLCB0cnVlKTsKc2V0U3RhdGUoIjBfdXNlcmRhdGEuMC5QVi5Qb3dlckZlZWRJbnRvR3JpZCIsIGRlY1RvQml0KGRlYywgNCksIHRydWUpOwpzZXRTdGF0ZSgiMF91c2VyZGF0YS4wLlBWLlBvd2VySW1wb3J0RnJvbUdyaWQiLCBkZWNUb0JpdChkZWMsIDUpLCB0cnVlKTsKc2V0U3RhdGUoIjBfdXNlcmRhdGEuMC5QVi5Qb3dlckdlbmVyYXRlZEZyb21Mb2FkIiwgZGVjVG9CaXQoZGVjLCA3KSwgdHJ1ZSk7Cg==</field>
                    <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
                    </block>
                    <block type="procedures_defnoreturn" id="vv(U!g(@pnn)8_.{bCV|" x="-388" y="163">
                    <mutation>
                    <arg name="dec" varid="Kl3S0K7)wS:E#~kmp_|"></arg> </mutation> <field name="NAME">debug output</field> <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment> <statement name="STACK"> <block type="comment" id="4Kc|yjIOj/d!+rX^eB8k"> <field name="COMMENT">create some debug messages so we can check state changes in the log after the fact</field> <next> <block type="debug" id="KOrPE~?_|7q-iX+hf9B7"> <field name="Severity">log</field> <value name="TEXT"> <shadow type="text" id="qi6ijIzs)8YkGt3mXbyd"> <field name="TEXT">test</field> </shadow> <block type="text_join" id="sQoBJpPXUR}I,yDnYLzU"> <mutation items="2"></mutation> <value name="ADD0"> <block type="text" id="@[Qr;#TN3?QNNtRdBFJb"> <field name="TEXT">Power generation</field> </block> </value> <value name="ADD1"> <block type="procedures_callcustomreturn" id="[di$veE=W)etZ1N1csD!"> <mutation name="getBit"> <arg name="number"></arg> <arg name="bitPosition"></arg> </mutation> <value name="ARG0"> <block type="variables_get" id="!.K$T:bqj+}ijHEBEu1O"> <field name="VAR" id="Kl3S0K7)wS:E#~kmp_|">dec</field>
                    </block>
                    </value>
                    <value name="ARG1">
                    <block type="math_number" id="[?#(KLA~d_4od@i%HKRE">
                    <field name="NUM">0</field>
                    </block>
                    </value>
                    </block>
                    </value>
                    </block>
                    </value>
                    <next>
                    <block type="debug" id=".tDzA6hZ]hWm/Q1Ki+C}">
                    <field name="Severity">log</field>
                    <value name="TEXT">
                    <shadow type="text">
                    <field name="TEXT">test</field>
                    </shadow>
                    <block type="text_join" id="9_lIMrC@kQZHlIS.BX5"> <mutation items="2"></mutation> <value name="ADD0"> <block type="text" id="+0Y)usl;k0!LReL=@1TA"> <field name="TEXT">Battery charging</field> </block> </value> <value name="ADD1"> <block type="procedures_callcustomreturn" id="l-(+Hf/C:1.Pr$1TME!">
                    <mutation name="getBit">
                    <arg name="number"></arg>
                    <arg name="bitPosition"></arg>
                    </mutation>
                    <value name="ARG0">
                    <block type="variables_get" id="]k8{NSg3:qwE6y~~PPUG">
                    <field name="VAR" id="Kl3S0K7)wS:E#~kmp_|">dec</field> </block> </value> <value name="ARG1"> <block type="math_number" id="f|p*H^X]~uRfJ4zwy{V]"> <field name="NUM">1</field> </block> </value> </block> </value> </block> </value> <next> <block type="debug" id="#o:4EZCjL=5M?Gw+0O.i"> <field name="Severity">log</field> <value name="TEXT"> <shadow type="text"> <field name="TEXT">test</field> </shadow> <block type="text_join" id="OIyVbASBmVYSEM=oZSMm"> <mutation items="2"></mutation> <value name="ADD0"> <block type="text" id="YkP-(f;KKjkroM[%{a;?"> <field name="TEXT">Battery discharging</field> </block> </value> <value name="ADD1"> <block type="procedures_callcustomreturn" id="pGmRj}_+$eQxsP,i1O@L"> <mutation name="getBit"> <arg name="number"></arg> <arg name="bitPosition"></arg> </mutation> <value name="ARG0"> <block type="variables_get" id="VZ2rjX0pe@PD-b0EK.@n"> <field name="VAR" id="Kl3S0K7)wS:E#~kmp_|">dec</field>
                    </block>
                    </value>
                    <value name="ARG1">
                    <block type="math_number" id="^/WwB;Scl3(cF8[3jylF">
                    <field name="NUM">2</field>
                    </block>
                    </value>
                    </block>
                    </value>
                    </block>
                    </value>
                    <next>
                    <block type="debug" id="2=ESEy@?o=2!#~*4.[p"> <field name="Severity">log</field> <value name="TEXT"> <shadow type="text"> <field name="TEXT">test</field> </shadow> <block type="text_join" id="SrIP5yY+X.D22D[VrlP$"> <mutation items="2"></mutation> <value name="ADD0"> <block type="text" id="M5Sk=a6?/W8mc@|rtDHZ"> <field name="TEXT">Positive load</field> </block> </value> <value name="ADD1"> <block type="procedures_callcustomreturn" id="UCHG|NH^a829VlS_FOc["> <mutation name="getBit"> <arg name="number"></arg> <arg name="bitPosition"></arg> </mutation> <value name="ARG0"> <block type="variables_get" id="Mrs-RQx3Z0}OX1FVc!+c"> <field name="VAR" id="Kl3S0K7)wS:E#~kmp_|">dec</field>
                    </block>
                    </value>
                    <value name="ARG1">
                    <block type="math_number" id="3oaU:Voj|5J0Fn$KdP=^">
                    <field name="NUM">3</field>
                    </block>
                    </value>
                    </block>
                    </value>
                    </block>
                    </value>
                    <next>
                    <block type="debug" id="8
                    ~@Ywry?/piw*O}+,=]">
                    <field name="Severity">log</field>
                    <value name="TEXT">
                    <shadow type="text">
                    <field name="TEXT">test</field>
                    </shadow>
                    <block type="text_join" id="K,z(Z;tM4v-MVT)=sh"> <mutation items="2"></mutation> <value name="ADD0"> <block type="text" id="QsKlyP=k#wB.!q2W+XJ">
                    <field name="TEXT">Power feed into the grid</field>
                    </block>
                    </value>
                    <value name="ADD1">
                    <block type="procedures_callcustomreturn" id="aknN
                    P^vup+EdTLM6/yn">
                    <mutation name="getBit">
                    <arg name="number"></arg>
                    <arg name="bitPosition"></arg>
                    </mutation>
                    <value name="ARG0">
                    <block type="variables_get" id="0QUz2T3lebdal%Stjha^">
                    <field name="VAR" id="Kl3S0K7)wS:E#~kmp_|">dec</field> </block> </value> <value name="ARG1"> <block type="math_number" id="d5~PH;7@M7kTud**ES.">
                    <field name="NUM">4</field>
                    </block>
                    </value>
                    </block>
                    </value>
                    </block>
                    </value>
                    <next>
                    <block type="debug" id="s[=~4,hPHDd0]0YAO8|u">
                    <field name="Severity">log</field>
                    <value name="TEXT">
                    <shadow type="text">
                    <field name="TEXT">test</field>
                    </shadow>
                    <block type="text_join" id="X9{#rK3QZb$[550!GD$"> <mutation items="2"></mutation> <value name="ADD0"> <block type="text" id="Oe-,=fU/6IGKG3v,/t+0"> <field name="TEXT">Power from the grid</field> </block> </value> <value name="ADD1"> <block type="procedures_callcustomreturn" id="EGn+kHA^EQ1XRJhx!Vhb"> <mutation name="getBit"> <arg name="number"></arg> <arg name="bitPosition"></arg> </mutation> <value name="ARG0"> <block type="variables_get" id="}2agbC4wrjiK^REZrT={"> <field name="VAR" id="Kl3S0K7)wS:E#~kmp_|">dec</field>
                    </block>
                    </value>
                    <value name="ARG1">
                    <block type="math_number" id=":fd,9cSXwq[{cx76A-+}">
                    <field name="NUM">5</field>
                    </block>
                    </value>
                    </block>
                    </value>
                    </block>
                    </value>
                    <next>
                    <block type="debug" id="hOK+$jW(m-QrUr#W|/n@">
                    <field name="Severity">log</field>
                    <value name="TEXT">
                    <shadow type="text">
                    <field name="TEXT">test</field>
                    </shadow>
                    <block type="text_join" id="QJDY}eje)+|3SUH(BZyM">
                    <mutation items="2"></mutation>
                    <value name="ADD0">
                    <block type="text" id="hj9k)mHycGoRx9vHO]Q{">
                    <field name="TEXT">Power from load</field>
                    </block>
                    </value>
                    <value name="ADD1">
                    <block type="procedures_callcustomreturn" id="Rk4r]0=rc#(qd]Nqjds$">
                    <mutation name="getBit">
                    <arg name="number"></arg>
                    <arg name="bitPosition"></arg>
                    </mutation>
                    <value name="ARG0">
                    <block type="variables_get" id="m,$d6J}Ic:=mV:|i0B58">
                    <field name="VAR" id="Kl3S0K7)wS:E#~kmp_|">dec</field> </block> </value> <value name="ARG1"> <block type="math_number" id=":^V4s@UVYMGm/ada=3N">
                    <field name="NUM">7</field>
                    </block>
                    </value>
                    </block>
                    </value>
                    </block>
                    </value>
                    </block>
                    </next>
                    </block>
                    </next>
                    </block>
                    </next>
                    </block>
                    </next>
                    </block>
                    </next>
                    </block>
                    </next>
                    </block>
                    </next>
                    </block>
                    </statement>
                    </block>
                    <block type="procedures_defnoreturn" id="ILxxz6e}u[fcDIeO6oXT" x="-812" y="212">
                    <mutation>
                    <arg name="dec" varid="Kl3S0K7)wS:E#~kmp_`|"></arg>
                    </mutation>
                    <field name="NAME">run</field>
                    <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
                    <statement name="STACK">
                    <block type="procedures_callcustomnoreturn" id="j|y@bpDyP5[;xE)~RRQ[">
                    <mutation name="extractRunningStates">
                    <arg name="dec"></arg>
                    </mutation>
                    <value name="ARG0">
                    <block type="variables_get" id="Q=XjjZ?bay6J1^X4EO)2">
                    <field name="VAR" id="Kl3S0K7)wS:E#~kmp_`|">dec</field>
                    </block>
                    </value>
                    <next>
                    <block type="procedures_callnoreturn" id="-0-R2zP[?Peo2o)AH{B0">
                    <mutation name="debug output">
                    <arg name="dec"></arg>
                    </mutation>
                    <value name="ARG0">
                    <block type="variables_get" id=")ehVkoDs8KN([lz_?.j.">
                    <field name="VAR" id="Kl3S0K7)wS:E#~kmp_`|">dec</field>
                    </block>
                    </value>
                    </block>
                    </next>
                    </block>
                    </statement>
                    </block>
                    </xml>

                  Hoffe das hilft etwas weiter. Vielen Dank auch nochmal an @Atlantis fürs Zusammentragen der Infos + alle anderen die mitüberlegt und mitrecherchiert haben!

                  Daniel

                  T Offline
                  T Offline
                  toki1973
                  schrieb am zuletzt editiert von
                  #270

                  Ich werde in absehbarer Zeit auch einen Sungrow WR bekommen. Mein Installateur möchte wohl das Techniker PW nicht rausrücken. Ist das ein Standard PW?
                  Was soll ich den einstellen lassen sofern ich nicht an das PW komme, damit ich auf den Bus zugreifen kann?

                  NUC, PROXMOX, Grafana, Influx, Unify

                  S D 2 Antworten Letzte Antwort
                  0
                  • T toki1973

                    Ich werde in absehbarer Zeit auch einen Sungrow WR bekommen. Mein Installateur möchte wohl das Techniker PW nicht rausrücken. Ist das ein Standard PW?
                    Was soll ich den einstellen lassen sofern ich nicht an das PW komme, damit ich auf den Bus zugreifen kann?

                    S Offline
                    S Offline
                    Smokey
                    schrieb am zuletzt editiert von
                    #271

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

                    Ich werde in absehbarer Zeit auch einen Sungrow WR bekommen. Mein Installateur möchte wohl das Techniker PW nicht rausrücken. Ist das ein Standard PW?
                    Was soll ich den einstellen lassen sofern ich nicht an das PW komme, damit ich auf den Bus zugreifen kann?

                    Jetzt muss ich aufpassen, dass ich mich nicht falsch erinnere. Aber ich denke bei mir war es so, dass der Zugriff über das WiFi Modul auf dem Standard-PW belassen wurde. Viel wichtiger bei mir war aber im Nachhinein der Zugriff über das normale LAN Kabel auf den LAN Port (nicht der, in dem das Wifi Modul steckt). Denn dort hat der Zugriff mittels Modbus Adapter am besten funktioniert. Und soweit ich weiß, gibt es dafür kein Name/PWD sondern geht direkt immer. Nebenbemerkung: es ist Deine Anlage. "nicht herausrücken von Zugriff" würde ich nicht akzeptieren.

                    1 Antwort Letzte Antwort
                    0
                    • T toki1973

                      Ich werde in absehbarer Zeit auch einen Sungrow WR bekommen. Mein Installateur möchte wohl das Techniker PW nicht rausrücken. Ist das ein Standard PW?
                      Was soll ich den einstellen lassen sofern ich nicht an das PW komme, damit ich auf den Bus zugreifen kann?

                      D Offline
                      D Offline
                      Daniel
                      schrieb am zuletzt editiert von
                      #272

                      @toki1973 Lt. Handbuch lauten die Standard-Zugangsdaten "admin / pw8888". Eigentlich(TM) brauchst du die Zugangsdaten aber nicht und solltest auch ohne das alles eingerichtet bekommen.

                      1 Antwort Letzte Antwort
                      0
                      • D Daniel

                        Hallo zusammen,
                        starre seit Monaten immer mal wieder auf diesen Thread und versuche meinen WR via Modbus in Iobroker auszuwerten. Hatte auch immer wieder das Problem mit reconnects und Fehlern.
                        Heute hat es endlich geklappt. Keine Ahnung, woran es am Ende lag… hier meine letzten Schritte:

                        1. Modbus-Adapter komplett deinstalliert und neu installiert

                        2. Geräte ID 1, IP, Master, kein Alias. Rest wie vorkonfiguriert 86fd6bbc-6ffb-4488-b9c9-e8d38d533b6a-image.png

                        3. Ich habe nicht den WiNet-Dongle benutzt (weder Wifi noch den LAN Port des Dongles) sondern den fest verbauten separaten LAN-Port des WRs

                        4. Die IP findet ihr bspw. in Fritzbox unter Heimnetz->Netzwerk. Wenn ihr oben rechts über den Button "+/-" die Spalte Mac-Adresse einblendet, sollte ihr die richtige IP recht fix finden, die dazugehörige Mac-Adresse beginnt mit "AC" (Achtung: das ist aber auch beim WiNet-Dongle der Fall)

                        5. Um zu checken ob die Kommunikation grundsätzlich funktioniert kann man bspw. Tools wie modbus-cli nutzen:

                          modbus 192.168.YYY.ZZ:502 -s 1 4999/H
                          Parsed 0 registers definitions from 1 files
                          4999: 2022 0x7e6

                          Hier wird bspw. das aktuelle Jahr zurück gegeben. Wenn das schon nicht funktioniert, habt ihr vermutlich schon ein Problem mit der Verbindung (Client-ID falsch, IP falsch...). Aber Achtung: Verschwendet aber nicht zu viel Zeit darauf, damit "richtige" Werte wie aktuellen Ertrag auszulesen. Über das CLI-Tool habe ich bis heute keine oder unplausible Werte, man kann da mit Word Swap etc pp. viel falsch machen und denkt dann, es funktioniert irgendwas grundlegendes nicht, obwohl man nur die Datentypen falsch hat

                        6. Den Fehler On error: {"errno":-104,"code":"ECONNRESET","syscall":"read"} habe ich anfänglich immer wieder gehabt - und jetzt innerhalb weniger Tage mehrfach. Einmal hat ein Firmware-Update des WR das Problem gelöst (vll. aber auch nur wg. des damit zusammenhängenden Neustarts); gerade eben habe ich in meinem Zyxel-Switch das vom WR kommende LAN-Kabel in einen anderen Port gesteckt - und direkt wieder eine funktionierende Verbindung gehabt. Arbeitshypothese wäre in dem Fall, dass der Switch auf dem Port dicht gemacht hat??

                        7. Das TSV Format bzgl. der Register hat sich wohl verändert mittlerweile. Hier der Stand, der bei mir funktioniert hat: https://gist.github.com/dnoegel/543c72ef722365a3934bbad0bb43e222. Wenn ihr dort auf "Raw" klickt, kommt ihr direkt zur Datei.

                        8. Versucht nicht zu lange von Hand drei handverlesene Register zum Laufen zu bringen, wenn ihr euch nicht sicher seit, dass ihr die Datentypen richtig getroffen habt: Die TSV funktioniert, bringt das Ding erstmal rein und schaut dann, welche Werte ihr bekommt.

                        9. In der Sungrow App kann man wunderbar sehen, welche Ströme von wo nach wo fließen. In den Modbus-Daten sieht man eher, welche Ströme an welche Quelle anliegen. Möchte man sehen, ob die Batterie geladen oder entladen wird, muss man den "Running State" interpretieren (Register 13000). Die Information ist binary, d.h. das Checken á la "Wenn Wert = 25" kann man sich sparen. Hier mein Ansatz in Blockly:


                          <xml xmlns="https://developers.google.com/blockly/xml">
                          <variables>
                          <variable id="Wu=u[10[PLwu)p_g$2ZM">number</variable>
                          <variable id="u?6#BJh2Bp((1W3u)Vnf">bitPosition</variable>
                          <variable id="Kl3S0K7)wS:E#~kmp_|">dec</variable> </variables> <block type="comment" id="dl.~:*si1DA:Ep6wYJ[%" x="-863" y="-137"> <field name="COMMENT">Run whenever state is changed</field> <next> <block type="on_ext" id="c;*|gCMP^+7VyIN]qj^">
                          <mutation xmlns="http://www.w3.org/1999/xhtml" items="1"></mutation>
                          <field name="CONDITION">ne</field>
                          <field name="ACK_CONDITION"></field>
                          <value name="OID0">
                          <shadow type="field_oid" id="jk{31$NENu@o]pNzRU">
                          <field name="oid">modbus.0.inputRegisters.13000_Running_State</field>
                          </shadow>
                          </value>
                          <statement name="STATEMENT">
                          <block type="procedures_callnoreturn" id="~dii,d.PsDx8L!{#5e4G">
                          <mutation name="run">
                          <arg name="dec"></arg>
                          </mutation>
                          <value name="ARG0">
                          <block type="on_source" id="NE|H~0.b4VGmM[GnS2~?">
                          <field name="ATTR">state.val</field>
                          </block>
                          </value>
                          </block>
                          </statement>
                          <next>
                          <block type="comment" id="W}Mu1vp1F6~uBlmI|.C">
                          <field name="COMMENT">Run once after script is started</field>
                          <next>
                          <block type="procedures_callnoreturn" id="/+j6gN2NZ:bV+X~x0ur"> <mutation name="run"> <arg name="dec"></arg> </mutation> <value name="ARG0"> <block type="get_value" id="?)Snd}*[?TT^E)h(x^I#"> <field name="ATTR">val</field> <field name="OID">modbus.0.inputRegisters.13000_Running_State</field> </block> </value> </block> </next> </block> </next> </block> </next> </block> <block type="procedures_defcustomreturn" id=")7@7$^bI?;9JiXb,CqbC" x="-437" y="-88"> <mutation statements="false"> <arg name="number" varid="Wu=u[10[PLwu)p_g$2ZM"></arg> <arg name="bitPosition" varid="u?6#BJh2Bp((1W3u)Vnf"></arg> </mutation> <field name="NAME">getBit</field> <field name="SCRIPT">ICByZXR1cm4gKG51bWJlciAmICgxIDw8IGJpdFBvc2l0aW9uKSkgPT09IDAgPyAwIDogMTsK</field> <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment> </block> <block type="procedures_defcustomnoreturn" id="lz{Fy{/wE{2-%uVacZd0" x="-437" y="-37"> <mutation statements="false"> <arg name="dec" varid="Kl3S0K7)wS:E#~kmp_|"></arg>
                          </mutation>
                          <field name="NAME">extractRunningStates</field>
                          <field name="SCRIPT">ZnVuY3Rpb24gZGVjVG9CaXQoZGVjLCBiaXRQb3NpdGlvbikgewogICAgcmV0dXJuIChkZWMgJiAoMSA8PCBiaXRQb3NpdGlvbikpID09PSAwID8gZmFsc2UgOiB0cnVlOwp9CgoKc2V0U3RhdGUoIjBfdXNlcmRhdGEuMC5QVi5Qb3dlckdlbmVyYXRlZEZyb21QViIsIGRlY1RvQml0KGRlYywgMCksIHRydWUpOwpzZXRTdGF0ZSgiMF91c2VyZGF0YS4wLlBWLkJhdHRlcnlDaGFyZ2luZyIsIGRlY1RvQml0KGRlYywgMSksIHRydWUpOwpzZXRTdGF0ZSgiMF91c2VyZGF0YS4wLlBWLkJhdHRlcnlEaXNjaGFyZ2luZyIsIGRlY1RvQml0KGRlYywgMiksIHRydWUpOwpzZXRTdGF0ZSgiMF91c2VyZGF0YS4wLlBWLkxvYWRBY3RpdmUiLCBkZWNUb0JpdChkZWMsIDMpLCB0cnVlKTsKc2V0U3RhdGUoIjBfdXNlcmRhdGEuMC5QVi5Qb3dlckZlZWRJbnRvR3JpZCIsIGRlY1RvQml0KGRlYywgNCksIHRydWUpOwpzZXRTdGF0ZSgiMF91c2VyZGF0YS4wLlBWLlBvd2VySW1wb3J0RnJvbUdyaWQiLCBkZWNUb0JpdChkZWMsIDUpLCB0cnVlKTsKc2V0U3RhdGUoIjBfdXNlcmRhdGEuMC5QVi5Qb3dlckdlbmVyYXRlZEZyb21Mb2FkIiwgZGVjVG9CaXQoZGVjLCA3KSwgdHJ1ZSk7Cg==</field>
                          <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
                          </block>
                          <block type="procedures_defnoreturn" id="vv(U!g(@pnn)8_.{bCV|" x="-388" y="163">
                          <mutation>
                          <arg name="dec" varid="Kl3S0K7)wS:E#~kmp_|"></arg> </mutation> <field name="NAME">debug output</field> <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment> <statement name="STACK"> <block type="comment" id="4Kc|yjIOj/d!+rX^eB8k"> <field name="COMMENT">create some debug messages so we can check state changes in the log after the fact</field> <next> <block type="debug" id="KOrPE~?_|7q-iX+hf9B7"> <field name="Severity">log</field> <value name="TEXT"> <shadow type="text" id="qi6ijIzs)8YkGt3mXbyd"> <field name="TEXT">test</field> </shadow> <block type="text_join" id="sQoBJpPXUR}I,yDnYLzU"> <mutation items="2"></mutation> <value name="ADD0"> <block type="text" id="@[Qr;#TN3?QNNtRdBFJb"> <field name="TEXT">Power generation</field> </block> </value> <value name="ADD1"> <block type="procedures_callcustomreturn" id="[di$veE=W)etZ1N1csD!"> <mutation name="getBit"> <arg name="number"></arg> <arg name="bitPosition"></arg> </mutation> <value name="ARG0"> <block type="variables_get" id="!.K$T:bqj+}ijHEBEu1O"> <field name="VAR" id="Kl3S0K7)wS:E#~kmp_|">dec</field>
                          </block>
                          </value>
                          <value name="ARG1">
                          <block type="math_number" id="[?#(KLA~d_4od@i%HKRE">
                          <field name="NUM">0</field>
                          </block>
                          </value>
                          </block>
                          </value>
                          </block>
                          </value>
                          <next>
                          <block type="debug" id=".tDzA6hZ]hWm/Q1Ki+C}">
                          <field name="Severity">log</field>
                          <value name="TEXT">
                          <shadow type="text">
                          <field name="TEXT">test</field>
                          </shadow>
                          <block type="text_join" id="9_lIMrC@kQZHlIS.BX5"> <mutation items="2"></mutation> <value name="ADD0"> <block type="text" id="+0Y)usl;k0!LReL=@1TA"> <field name="TEXT">Battery charging</field> </block> </value> <value name="ADD1"> <block type="procedures_callcustomreturn" id="l-(+Hf/C:1.Pr$1TME!">
                          <mutation name="getBit">
                          <arg name="number"></arg>
                          <arg name="bitPosition"></arg>
                          </mutation>
                          <value name="ARG0">
                          <block type="variables_get" id="]k8{NSg3:qwE6y~~PPUG">
                          <field name="VAR" id="Kl3S0K7)wS:E#~kmp_|">dec</field> </block> </value> <value name="ARG1"> <block type="math_number" id="f|p*H^X]~uRfJ4zwy{V]"> <field name="NUM">1</field> </block> </value> </block> </value> </block> </value> <next> <block type="debug" id="#o:4EZCjL=5M?Gw+0O.i"> <field name="Severity">log</field> <value name="TEXT"> <shadow type="text"> <field name="TEXT">test</field> </shadow> <block type="text_join" id="OIyVbASBmVYSEM=oZSMm"> <mutation items="2"></mutation> <value name="ADD0"> <block type="text" id="YkP-(f;KKjkroM[%{a;?"> <field name="TEXT">Battery discharging</field> </block> </value> <value name="ADD1"> <block type="procedures_callcustomreturn" id="pGmRj}_+$eQxsP,i1O@L"> <mutation name="getBit"> <arg name="number"></arg> <arg name="bitPosition"></arg> </mutation> <value name="ARG0"> <block type="variables_get" id="VZ2rjX0pe@PD-b0EK.@n"> <field name="VAR" id="Kl3S0K7)wS:E#~kmp_|">dec</field>
                          </block>
                          </value>
                          <value name="ARG1">
                          <block type="math_number" id="^/WwB;Scl3(cF8[3jylF">
                          <field name="NUM">2</field>
                          </block>
                          </value>
                          </block>
                          </value>
                          </block>
                          </value>
                          <next>
                          <block type="debug" id="2=ESEy@?o=2!#~*4.[p"> <field name="Severity">log</field> <value name="TEXT"> <shadow type="text"> <field name="TEXT">test</field> </shadow> <block type="text_join" id="SrIP5yY+X.D22D[VrlP$"> <mutation items="2"></mutation> <value name="ADD0"> <block type="text" id="M5Sk=a6?/W8mc@|rtDHZ"> <field name="TEXT">Positive load</field> </block> </value> <value name="ADD1"> <block type="procedures_callcustomreturn" id="UCHG|NH^a829VlS_FOc["> <mutation name="getBit"> <arg name="number"></arg> <arg name="bitPosition"></arg> </mutation> <value name="ARG0"> <block type="variables_get" id="Mrs-RQx3Z0}OX1FVc!+c"> <field name="VAR" id="Kl3S0K7)wS:E#~kmp_|">dec</field>
                          </block>
                          </value>
                          <value name="ARG1">
                          <block type="math_number" id="3oaU:Voj|5J0Fn$KdP=^">
                          <field name="NUM">3</field>
                          </block>
                          </value>
                          </block>
                          </value>
                          </block>
                          </value>
                          <next>
                          <block type="debug" id="8
                          ~@Ywry?/piw*O}+,=]">
                          <field name="Severity">log</field>
                          <value name="TEXT">
                          <shadow type="text">
                          <field name="TEXT">test</field>
                          </shadow>
                          <block type="text_join" id="K,z(Z;tM4v-MVT)=sh"> <mutation items="2"></mutation> <value name="ADD0"> <block type="text" id="QsKlyP=k#wB.!q2W+XJ">
                          <field name="TEXT">Power feed into the grid</field>
                          </block>
                          </value>
                          <value name="ADD1">
                          <block type="procedures_callcustomreturn" id="aknN
                          P^vup+EdTLM6/yn">
                          <mutation name="getBit">
                          <arg name="number"></arg>
                          <arg name="bitPosition"></arg>
                          </mutation>
                          <value name="ARG0">
                          <block type="variables_get" id="0QUz2T3lebdal%Stjha^">
                          <field name="VAR" id="Kl3S0K7)wS:E#~kmp_|">dec</field> </block> </value> <value name="ARG1"> <block type="math_number" id="d5~PH;7@M7kTud**ES.">
                          <field name="NUM">4</field>
                          </block>
                          </value>
                          </block>
                          </value>
                          </block>
                          </value>
                          <next>
                          <block type="debug" id="s[=~4,hPHDd0]0YAO8|u">
                          <field name="Severity">log</field>
                          <value name="TEXT">
                          <shadow type="text">
                          <field name="TEXT">test</field>
                          </shadow>
                          <block type="text_join" id="X9{#rK3QZb$[550!GD$"> <mutation items="2"></mutation> <value name="ADD0"> <block type="text" id="Oe-,=fU/6IGKG3v,/t+0"> <field name="TEXT">Power from the grid</field> </block> </value> <value name="ADD1"> <block type="procedures_callcustomreturn" id="EGn+kHA^EQ1XRJhx!Vhb"> <mutation name="getBit"> <arg name="number"></arg> <arg name="bitPosition"></arg> </mutation> <value name="ARG0"> <block type="variables_get" id="}2agbC4wrjiK^REZrT={"> <field name="VAR" id="Kl3S0K7)wS:E#~kmp_|">dec</field>
                          </block>
                          </value>
                          <value name="ARG1">
                          <block type="math_number" id=":fd,9cSXwq[{cx76A-+}">
                          <field name="NUM">5</field>
                          </block>
                          </value>
                          </block>
                          </value>
                          </block>
                          </value>
                          <next>
                          <block type="debug" id="hOK+$jW(m-QrUr#W|/n@">
                          <field name="Severity">log</field>
                          <value name="TEXT">
                          <shadow type="text">
                          <field name="TEXT">test</field>
                          </shadow>
                          <block type="text_join" id="QJDY}eje)+|3SUH(BZyM">
                          <mutation items="2"></mutation>
                          <value name="ADD0">
                          <block type="text" id="hj9k)mHycGoRx9vHO]Q{">
                          <field name="TEXT">Power from load</field>
                          </block>
                          </value>
                          <value name="ADD1">
                          <block type="procedures_callcustomreturn" id="Rk4r]0=rc#(qd]Nqjds$">
                          <mutation name="getBit">
                          <arg name="number"></arg>
                          <arg name="bitPosition"></arg>
                          </mutation>
                          <value name="ARG0">
                          <block type="variables_get" id="m,$d6J}Ic:=mV:|i0B58">
                          <field name="VAR" id="Kl3S0K7)wS:E#~kmp_|">dec</field> </block> </value> <value name="ARG1"> <block type="math_number" id=":^V4s@UVYMGm/ada=3N">
                          <field name="NUM">7</field>
                          </block>
                          </value>
                          </block>
                          </value>
                          </block>
                          </value>
                          </block>
                          </next>
                          </block>
                          </next>
                          </block>
                          </next>
                          </block>
                          </next>
                          </block>
                          </next>
                          </block>
                          </next>
                          </block>
                          </next>
                          </block>
                          </statement>
                          </block>
                          <block type="procedures_defnoreturn" id="ILxxz6e}u[fcDIeO6oXT" x="-812" y="212">
                          <mutation>
                          <arg name="dec" varid="Kl3S0K7)wS:E#~kmp_`|"></arg>
                          </mutation>
                          <field name="NAME">run</field>
                          <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
                          <statement name="STACK">
                          <block type="procedures_callcustomnoreturn" id="j|y@bpDyP5[;xE)~RRQ[">
                          <mutation name="extractRunningStates">
                          <arg name="dec"></arg>
                          </mutation>
                          <value name="ARG0">
                          <block type="variables_get" id="Q=XjjZ?bay6J1^X4EO)2">
                          <field name="VAR" id="Kl3S0K7)wS:E#~kmp_`|">dec</field>
                          </block>
                          </value>
                          <next>
                          <block type="procedures_callnoreturn" id="-0-R2zP[?Peo2o)AH{B0">
                          <mutation name="debug output">
                          <arg name="dec"></arg>
                          </mutation>
                          <value name="ARG0">
                          <block type="variables_get" id=")ehVkoDs8KN([lz_?.j.">
                          <field name="VAR" id="Kl3S0K7)wS:E#~kmp_`|">dec</field>
                          </block>
                          </value>
                          </block>
                          </next>
                          </block>
                          </statement>
                          </block>
                          </xml>

                        Hoffe das hilft etwas weiter. Vielen Dank auch nochmal an @Atlantis fürs Zusammentragen der Infos + alle anderen die mitüberlegt und mitrecherchiert haben!

                        Daniel

                        F Offline
                        F Offline
                        Flieder
                        schrieb am zuletzt editiert von Flieder
                        #273

                        @daniel Ich beabsichte mir auch einen WG SGH10RT mit Speicher zuzulegen.
                        Eine generelle Frage ist für mich: kann der Zählerwert aus IOBroker per Modbus übergeben werden.
                        Ich möchte ungern mein bestehendes Setup bezüglich des Netzzählers ändern.

                        D 1 Antwort Letzte Antwort
                        0
                        • F Flieder

                          @daniel Ich beabsichte mir auch einen WG SGH10RT mit Speicher zuzulegen.
                          Eine generelle Frage ist für mich: kann der Zählerwert aus IOBroker per Modbus übergeben werden.
                          Ich möchte ungern mein bestehendes Setup bezüglich des Netzzählers ändern.

                          D Offline
                          D Offline
                          Daniel
                          schrieb am zuletzt editiert von Daniel
                          #274

                          @flieder Verstehe ich das richtig: Du möchtest Daten, die in Iobroker sind, an andere Systeme übergeben via Modbus? Ich benutze es bisher nur lesend, zu der Richtung kann ich leider nichts sagen. Eigentlich bekommt man seine Daten aus Iobroker ja immer gut raus - will nur bzgl. Modbus nichts falsches sagen, das Protokoll scheint mir seine Tücken zu haben 😅
                          Aber wenn das die Idee ist, könntest du die Daten ja auch direkt via Modbus aus dem WR auslesen, vll. habe ich dich noch missverstanden?

                          1 Antwort Letzte Antwort
                          0
                          • D Daniel

                            Hallo zusammen,
                            starre seit Monaten immer mal wieder auf diesen Thread und versuche meinen WR via Modbus in Iobroker auszuwerten. Hatte auch immer wieder das Problem mit reconnects und Fehlern.
                            Heute hat es endlich geklappt. Keine Ahnung, woran es am Ende lag… hier meine letzten Schritte:

                            1. Modbus-Adapter komplett deinstalliert und neu installiert

                            2. Geräte ID 1, IP, Master, kein Alias. Rest wie vorkonfiguriert 86fd6bbc-6ffb-4488-b9c9-e8d38d533b6a-image.png

                            3. Ich habe nicht den WiNet-Dongle benutzt (weder Wifi noch den LAN Port des Dongles) sondern den fest verbauten separaten LAN-Port des WRs

                            4. Die IP findet ihr bspw. in Fritzbox unter Heimnetz->Netzwerk. Wenn ihr oben rechts über den Button "+/-" die Spalte Mac-Adresse einblendet, sollte ihr die richtige IP recht fix finden, die dazugehörige Mac-Adresse beginnt mit "AC" (Achtung: das ist aber auch beim WiNet-Dongle der Fall)

                            5. Um zu checken ob die Kommunikation grundsätzlich funktioniert kann man bspw. Tools wie modbus-cli nutzen:

                              modbus 192.168.YYY.ZZ:502 -s 1 4999/H
                              Parsed 0 registers definitions from 1 files
                              4999: 2022 0x7e6

                              Hier wird bspw. das aktuelle Jahr zurück gegeben. Wenn das schon nicht funktioniert, habt ihr vermutlich schon ein Problem mit der Verbindung (Client-ID falsch, IP falsch...). Aber Achtung: Verschwendet aber nicht zu viel Zeit darauf, damit "richtige" Werte wie aktuellen Ertrag auszulesen. Über das CLI-Tool habe ich bis heute keine oder unplausible Werte, man kann da mit Word Swap etc pp. viel falsch machen und denkt dann, es funktioniert irgendwas grundlegendes nicht, obwohl man nur die Datentypen falsch hat

                            6. Den Fehler On error: {"errno":-104,"code":"ECONNRESET","syscall":"read"} habe ich anfänglich immer wieder gehabt - und jetzt innerhalb weniger Tage mehrfach. Einmal hat ein Firmware-Update des WR das Problem gelöst (vll. aber auch nur wg. des damit zusammenhängenden Neustarts); gerade eben habe ich in meinem Zyxel-Switch das vom WR kommende LAN-Kabel in einen anderen Port gesteckt - und direkt wieder eine funktionierende Verbindung gehabt. Arbeitshypothese wäre in dem Fall, dass der Switch auf dem Port dicht gemacht hat??

                            7. Das TSV Format bzgl. der Register hat sich wohl verändert mittlerweile. Hier der Stand, der bei mir funktioniert hat: https://gist.github.com/dnoegel/543c72ef722365a3934bbad0bb43e222. Wenn ihr dort auf "Raw" klickt, kommt ihr direkt zur Datei.

                            8. Versucht nicht zu lange von Hand drei handverlesene Register zum Laufen zu bringen, wenn ihr euch nicht sicher seit, dass ihr die Datentypen richtig getroffen habt: Die TSV funktioniert, bringt das Ding erstmal rein und schaut dann, welche Werte ihr bekommt.

                            9. In der Sungrow App kann man wunderbar sehen, welche Ströme von wo nach wo fließen. In den Modbus-Daten sieht man eher, welche Ströme an welche Quelle anliegen. Möchte man sehen, ob die Batterie geladen oder entladen wird, muss man den "Running State" interpretieren (Register 13000). Die Information ist binary, d.h. das Checken á la "Wenn Wert = 25" kann man sich sparen. Hier mein Ansatz in Blockly:


                              <xml xmlns="https://developers.google.com/blockly/xml">
                              <variables>
                              <variable id="Wu=u[10[PLwu)p_g$2ZM">number</variable>
                              <variable id="u?6#BJh2Bp((1W3u)Vnf">bitPosition</variable>
                              <variable id="Kl3S0K7)wS:E#~kmp_|">dec</variable> </variables> <block type="comment" id="dl.~:*si1DA:Ep6wYJ[%" x="-863" y="-137"> <field name="COMMENT">Run whenever state is changed</field> <next> <block type="on_ext" id="c;*|gCMP^+7VyIN]qj^">
                              <mutation xmlns="http://www.w3.org/1999/xhtml" items="1"></mutation>
                              <field name="CONDITION">ne</field>
                              <field name="ACK_CONDITION"></field>
                              <value name="OID0">
                              <shadow type="field_oid" id="jk{31$NENu@o]pNzRU">
                              <field name="oid">modbus.0.inputRegisters.13000_Running_State</field>
                              </shadow>
                              </value>
                              <statement name="STATEMENT">
                              <block type="procedures_callnoreturn" id="~dii,d.PsDx8L!{#5e4G">
                              <mutation name="run">
                              <arg name="dec"></arg>
                              </mutation>
                              <value name="ARG0">
                              <block type="on_source" id="NE|H~0.b4VGmM[GnS2~?">
                              <field name="ATTR">state.val</field>
                              </block>
                              </value>
                              </block>
                              </statement>
                              <next>
                              <block type="comment" id="W}Mu1vp1F6~uBlmI|.C">
                              <field name="COMMENT">Run once after script is started</field>
                              <next>
                              <block type="procedures_callnoreturn" id="/+j6gN2NZ:bV+X~x0ur"> <mutation name="run"> <arg name="dec"></arg> </mutation> <value name="ARG0"> <block type="get_value" id="?)Snd}*[?TT^E)h(x^I#"> <field name="ATTR">val</field> <field name="OID">modbus.0.inputRegisters.13000_Running_State</field> </block> </value> </block> </next> </block> </next> </block> </next> </block> <block type="procedures_defcustomreturn" id=")7@7$^bI?;9JiXb,CqbC" x="-437" y="-88"> <mutation statements="false"> <arg name="number" varid="Wu=u[10[PLwu)p_g$2ZM"></arg> <arg name="bitPosition" varid="u?6#BJh2Bp((1W3u)Vnf"></arg> </mutation> <field name="NAME">getBit</field> <field name="SCRIPT">ICByZXR1cm4gKG51bWJlciAmICgxIDw8IGJpdFBvc2l0aW9uKSkgPT09IDAgPyAwIDogMTsK</field> <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment> </block> <block type="procedures_defcustomnoreturn" id="lz{Fy{/wE{2-%uVacZd0" x="-437" y="-37"> <mutation statements="false"> <arg name="dec" varid="Kl3S0K7)wS:E#~kmp_|"></arg>
                              </mutation>
                              <field name="NAME">extractRunningStates</field>
                              <field name="SCRIPT">ZnVuY3Rpb24gZGVjVG9CaXQoZGVjLCBiaXRQb3NpdGlvbikgewogICAgcmV0dXJuIChkZWMgJiAoMSA8PCBiaXRQb3NpdGlvbikpID09PSAwID8gZmFsc2UgOiB0cnVlOwp9CgoKc2V0U3RhdGUoIjBfdXNlcmRhdGEuMC5QVi5Qb3dlckdlbmVyYXRlZEZyb21QViIsIGRlY1RvQml0KGRlYywgMCksIHRydWUpOwpzZXRTdGF0ZSgiMF91c2VyZGF0YS4wLlBWLkJhdHRlcnlDaGFyZ2luZyIsIGRlY1RvQml0KGRlYywgMSksIHRydWUpOwpzZXRTdGF0ZSgiMF91c2VyZGF0YS4wLlBWLkJhdHRlcnlEaXNjaGFyZ2luZyIsIGRlY1RvQml0KGRlYywgMiksIHRydWUpOwpzZXRTdGF0ZSgiMF91c2VyZGF0YS4wLlBWLkxvYWRBY3RpdmUiLCBkZWNUb0JpdChkZWMsIDMpLCB0cnVlKTsKc2V0U3RhdGUoIjBfdXNlcmRhdGEuMC5QVi5Qb3dlckZlZWRJbnRvR3JpZCIsIGRlY1RvQml0KGRlYywgNCksIHRydWUpOwpzZXRTdGF0ZSgiMF91c2VyZGF0YS4wLlBWLlBvd2VySW1wb3J0RnJvbUdyaWQiLCBkZWNUb0JpdChkZWMsIDUpLCB0cnVlKTsKc2V0U3RhdGUoIjBfdXNlcmRhdGEuMC5QVi5Qb3dlckdlbmVyYXRlZEZyb21Mb2FkIiwgZGVjVG9CaXQoZGVjLCA3KSwgdHJ1ZSk7Cg==</field>
                              <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
                              </block>
                              <block type="procedures_defnoreturn" id="vv(U!g(@pnn)8_.{bCV|" x="-388" y="163">
                              <mutation>
                              <arg name="dec" varid="Kl3S0K7)wS:E#~kmp_|"></arg> </mutation> <field name="NAME">debug output</field> <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment> <statement name="STACK"> <block type="comment" id="4Kc|yjIOj/d!+rX^eB8k"> <field name="COMMENT">create some debug messages so we can check state changes in the log after the fact</field> <next> <block type="debug" id="KOrPE~?_|7q-iX+hf9B7"> <field name="Severity">log</field> <value name="TEXT"> <shadow type="text" id="qi6ijIzs)8YkGt3mXbyd"> <field name="TEXT">test</field> </shadow> <block type="text_join" id="sQoBJpPXUR}I,yDnYLzU"> <mutation items="2"></mutation> <value name="ADD0"> <block type="text" id="@[Qr;#TN3?QNNtRdBFJb"> <field name="TEXT">Power generation</field> </block> </value> <value name="ADD1"> <block type="procedures_callcustomreturn" id="[di$veE=W)etZ1N1csD!"> <mutation name="getBit"> <arg name="number"></arg> <arg name="bitPosition"></arg> </mutation> <value name="ARG0"> <block type="variables_get" id="!.K$T:bqj+}ijHEBEu1O"> <field name="VAR" id="Kl3S0K7)wS:E#~kmp_|">dec</field>
                              </block>
                              </value>
                              <value name="ARG1">
                              <block type="math_number" id="[?#(KLA~d_4od@i%HKRE">
                              <field name="NUM">0</field>
                              </block>
                              </value>
                              </block>
                              </value>
                              </block>
                              </value>
                              <next>
                              <block type="debug" id=".tDzA6hZ]hWm/Q1Ki+C}">
                              <field name="Severity">log</field>
                              <value name="TEXT">
                              <shadow type="text">
                              <field name="TEXT">test</field>
                              </shadow>
                              <block type="text_join" id="9_lIMrC@kQZHlIS.BX5"> <mutation items="2"></mutation> <value name="ADD0"> <block type="text" id="+0Y)usl;k0!LReL=@1TA"> <field name="TEXT">Battery charging</field> </block> </value> <value name="ADD1"> <block type="procedures_callcustomreturn" id="l-(+Hf/C:1.Pr$1TME!">
                              <mutation name="getBit">
                              <arg name="number"></arg>
                              <arg name="bitPosition"></arg>
                              </mutation>
                              <value name="ARG0">
                              <block type="variables_get" id="]k8{NSg3:qwE6y~~PPUG">
                              <field name="VAR" id="Kl3S0K7)wS:E#~kmp_|">dec</field> </block> </value> <value name="ARG1"> <block type="math_number" id="f|p*H^X]~uRfJ4zwy{V]"> <field name="NUM">1</field> </block> </value> </block> </value> </block> </value> <next> <block type="debug" id="#o:4EZCjL=5M?Gw+0O.i"> <field name="Severity">log</field> <value name="TEXT"> <shadow type="text"> <field name="TEXT">test</field> </shadow> <block type="text_join" id="OIyVbASBmVYSEM=oZSMm"> <mutation items="2"></mutation> <value name="ADD0"> <block type="text" id="YkP-(f;KKjkroM[%{a;?"> <field name="TEXT">Battery discharging</field> </block> </value> <value name="ADD1"> <block type="procedures_callcustomreturn" id="pGmRj}_+$eQxsP,i1O@L"> <mutation name="getBit"> <arg name="number"></arg> <arg name="bitPosition"></arg> </mutation> <value name="ARG0"> <block type="variables_get" id="VZ2rjX0pe@PD-b0EK.@n"> <field name="VAR" id="Kl3S0K7)wS:E#~kmp_|">dec</field>
                              </block>
                              </value>
                              <value name="ARG1">
                              <block type="math_number" id="^/WwB;Scl3(cF8[3jylF">
                              <field name="NUM">2</field>
                              </block>
                              </value>
                              </block>
                              </value>
                              </block>
                              </value>
                              <next>
                              <block type="debug" id="2=ESEy@?o=2!#~*4.[p"> <field name="Severity">log</field> <value name="TEXT"> <shadow type="text"> <field name="TEXT">test</field> </shadow> <block type="text_join" id="SrIP5yY+X.D22D[VrlP$"> <mutation items="2"></mutation> <value name="ADD0"> <block type="text" id="M5Sk=a6?/W8mc@|rtDHZ"> <field name="TEXT">Positive load</field> </block> </value> <value name="ADD1"> <block type="procedures_callcustomreturn" id="UCHG|NH^a829VlS_FOc["> <mutation name="getBit"> <arg name="number"></arg> <arg name="bitPosition"></arg> </mutation> <value name="ARG0"> <block type="variables_get" id="Mrs-RQx3Z0}OX1FVc!+c"> <field name="VAR" id="Kl3S0K7)wS:E#~kmp_|">dec</field>
                              </block>
                              </value>
                              <value name="ARG1">
                              <block type="math_number" id="3oaU:Voj|5J0Fn$KdP=^">
                              <field name="NUM">3</field>
                              </block>
                              </value>
                              </block>
                              </value>
                              </block>
                              </value>
                              <next>
                              <block type="debug" id="8
                              ~@Ywry?/piw*O}+,=]">
                              <field name="Severity">log</field>
                              <value name="TEXT">
                              <shadow type="text">
                              <field name="TEXT">test</field>
                              </shadow>
                              <block type="text_join" id="K,z(Z;tM4v-MVT)=sh"> <mutation items="2"></mutation> <value name="ADD0"> <block type="text" id="QsKlyP=k#wB.!q2W+XJ">
                              <field name="TEXT">Power feed into the grid</field>
                              </block>
                              </value>
                              <value name="ADD1">
                              <block type="procedures_callcustomreturn" id="aknN
                              P^vup+EdTLM6/yn">
                              <mutation name="getBit">
                              <arg name="number"></arg>
                              <arg name="bitPosition"></arg>
                              </mutation>
                              <value name="ARG0">
                              <block type="variables_get" id="0QUz2T3lebdal%Stjha^">
                              <field name="VAR" id="Kl3S0K7)wS:E#~kmp_|">dec</field> </block> </value> <value name="ARG1"> <block type="math_number" id="d5~PH;7@M7kTud**ES.">
                              <field name="NUM">4</field>
                              </block>
                              </value>
                              </block>
                              </value>
                              </block>
                              </value>
                              <next>
                              <block type="debug" id="s[=~4,hPHDd0]0YAO8|u">
                              <field name="Severity">log</field>
                              <value name="TEXT">
                              <shadow type="text">
                              <field name="TEXT">test</field>
                              </shadow>
                              <block type="text_join" id="X9{#rK3QZb$[550!GD$"> <mutation items="2"></mutation> <value name="ADD0"> <block type="text" id="Oe-,=fU/6IGKG3v,/t+0"> <field name="TEXT">Power from the grid</field> </block> </value> <value name="ADD1"> <block type="procedures_callcustomreturn" id="EGn+kHA^EQ1XRJhx!Vhb"> <mutation name="getBit"> <arg name="number"></arg> <arg name="bitPosition"></arg> </mutation> <value name="ARG0"> <block type="variables_get" id="}2agbC4wrjiK^REZrT={"> <field name="VAR" id="Kl3S0K7)wS:E#~kmp_|">dec</field>
                              </block>
                              </value>
                              <value name="ARG1">
                              <block type="math_number" id=":fd,9cSXwq[{cx76A-+}">
                              <field name="NUM">5</field>
                              </block>
                              </value>
                              </block>
                              </value>
                              </block>
                              </value>
                              <next>
                              <block type="debug" id="hOK+$jW(m-QrUr#W|/n@">
                              <field name="Severity">log</field>
                              <value name="TEXT">
                              <shadow type="text">
                              <field name="TEXT">test</field>
                              </shadow>
                              <block type="text_join" id="QJDY}eje)+|3SUH(BZyM">
                              <mutation items="2"></mutation>
                              <value name="ADD0">
                              <block type="text" id="hj9k)mHycGoRx9vHO]Q{">
                              <field name="TEXT">Power from load</field>
                              </block>
                              </value>
                              <value name="ADD1">
                              <block type="procedures_callcustomreturn" id="Rk4r]0=rc#(qd]Nqjds$">
                              <mutation name="getBit">
                              <arg name="number"></arg>
                              <arg name="bitPosition"></arg>
                              </mutation>
                              <value name="ARG0">
                              <block type="variables_get" id="m,$d6J}Ic:=mV:|i0B58">
                              <field name="VAR" id="Kl3S0K7)wS:E#~kmp_|">dec</field> </block> </value> <value name="ARG1"> <block type="math_number" id=":^V4s@UVYMGm/ada=3N">
                              <field name="NUM">7</field>
                              </block>
                              </value>
                              </block>
                              </value>
                              </block>
                              </value>
                              </block>
                              </next>
                              </block>
                              </next>
                              </block>
                              </next>
                              </block>
                              </next>
                              </block>
                              </next>
                              </block>
                              </next>
                              </block>
                              </next>
                              </block>
                              </statement>
                              </block>
                              <block type="procedures_defnoreturn" id="ILxxz6e}u[fcDIeO6oXT" x="-812" y="212">
                              <mutation>
                              <arg name="dec" varid="Kl3S0K7)wS:E#~kmp_`|"></arg>
                              </mutation>
                              <field name="NAME">run</field>
                              <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
                              <statement name="STACK">
                              <block type="procedures_callcustomnoreturn" id="j|y@bpDyP5[;xE)~RRQ[">
                              <mutation name="extractRunningStates">
                              <arg name="dec"></arg>
                              </mutation>
                              <value name="ARG0">
                              <block type="variables_get" id="Q=XjjZ?bay6J1^X4EO)2">
                              <field name="VAR" id="Kl3S0K7)wS:E#~kmp_`|">dec</field>
                              </block>
                              </value>
                              <next>
                              <block type="procedures_callnoreturn" id="-0-R2zP[?Peo2o)AH{B0">
                              <mutation name="debug output">
                              <arg name="dec"></arg>
                              </mutation>
                              <value name="ARG0">
                              <block type="variables_get" id=")ehVkoDs8KN([lz_?.j.">
                              <field name="VAR" id="Kl3S0K7)wS:E#~kmp_`|">dec</field>
                              </block>
                              </value>
                              </block>
                              </next>
                              </block>
                              </statement>
                              </block>
                              </xml>

                            Hoffe das hilft etwas weiter. Vielen Dank auch nochmal an @Atlantis fürs Zusammentragen der Infos + alle anderen die mitüberlegt und mitrecherchiert haben!

                            Daniel

                            R Offline
                            R Offline
                            Red2Devil
                            schrieb am zuletzt editiert von Red2Devil
                            #275

                            Hallo zusammen,
                            erst mal
                            @Atlantis Danke für die tolle Anleitung und das Zusammentragen der Registereinträge.
                            @daniel Ebenfalls danke für weitere gute infos.

                            Ich bin seit knapp 2 Wochen Besitzer eines WR SH10RT und schließlich seit 2 Tagen ist auch die Batterie angeschlossen.

                            Via IoBroker werden die Daten des WRs per Modbus erfolgreich ausgelesen. Ich hatte die Hoffnung das der Running State die korrekten Werte nach Anschluss der Batterie liefern würde - leider nein!
                            Dieser bleibt weiter 0.

                            Meine Konfig und Daten:
                            Modbus Instanz 1.png
                            Modbus Instanz 2.png
                            ioBroker Running State 0.png

                            QModMaster zeigt ebenfalls 0:
                            QModMaster_13000.png

                            Laut diesem und dem Photovoltaik Forum ist dies wohl ein Problem an der Firmware des WLAN Dongles, das bei mir ebenfalls im Einsatz ist.

                            Firmware-Versionen:
                            WR Softwareversionen.png
                            WiNet-S Version.png

                            Meine Frage ist nun:
                            Ist ein Wechsel vom Wifi(LAN) Dongle auf den alternativen LAN Port ohne Probleme möglich? Also bleiben die Einstellungen und die Verbinung zur Cloud ohne Eingriff erhalten?
                            Hat jemand danach Probleme mit Verbindungsabbrüchen gehabt? In anderen Foren berichten Leute über Timing-Probleme in Kombi mit der Cloud.

                            Außerdem zum Thema Firmware:
                            Lohnt sich ein Update und ist es empfehlenswert diese regelmäßig einzuspielen oder sind diese eher mit Vorsicht zu genießen?
                            Ich kann schlecht bewerten ob meine Firmware-Versionen vom Dongle und vom WR recht aktuell oder eher veraltet sind.

                            Danke und Grüße,
                            Marcel


                            Ergänzung 31.10.2022

                            Ich habe es gewagt den LAN Port anzuschließen - allerdings ohne Erfolg.
                            Erwartung war: Cloud + Modbus und Running State funktionieren und liefern Ergebnisse.

                            Ist-Zustand:
                            LAN via Dongle
                            IP im Netzwerk: Ja (IP: 10.55.0.1)
                            Cloud: Ja
                            Modbus: Ja
                            Running State: Nein (= 0)

                            Test-Zustand 1:
                            LAN an separaten Port + Dongle angeschlossen aber ohne Verbindung
                            IP im Netzwerk: Ja (IP: 10.55.0.2)
                            Cloud: Nein
                            Modbus: Keine Verbindung
                            Running State: unbekannt

                            Test-Zustand 2:
                            LAN an separaten Port + Dongle angeschlossen mit WLAN verbunden
                            IP im Netzwerk: (JA) nur Dongle (IP: 10.55.0.3)
                            Cloud: Nein
                            Modbus: Nein
                            Running State: unbekannt

                            Test-Zustand 3:
                            LAN an separaten Port + Dongle angeschlossen mit LAN verbunden
                            IP im Netzwerk: (JA) nur Dongle (IP: 10.55.0.1)
                            Cloud: JA
                            Modbus: JA (via Dongle)
                            Running State: weiterhin 0, da Zugriff via Dongle

                            Der separate LAN Port scheint bei mir nur eine IP Adresse im Netz zu bekommen, wenn der Dongle weder LAN noch WLAN Zugriff hat. Die Cloud bekommt dann aber keine Daten mehr. Zugriff via QModMaster auf LAN IP hat aber trotzdem nicht geklappt.

                            Hat jemand eine Idee und kann mir helfen, wie ich evt. ohne Dongle am LAN Port Cloud Zugriff + Modbus eingerichtet bekomme und hoffentlich dann auch den Running_State auslesen kann?

                            M 1 Antwort Letzte Antwort
                            0
                            • A Atlantis

                              Nachdem ich sonst immer nur mit Fragen komme, möchte ich hiermit mal was zurück geben.

                              Habe mit viel Try & Error den SUngrow WR Typ SGH10RT (10Kw Hybrid) mit Modbus eingebunden.

                              Wenn ich Zeit habe werde ich ein komplettes How To dazu verfassen, sollte jemand schon vorher Bedarf haben einfach melden.

                              Gruss

                              Atlantis

                              T Offline
                              T Offline
                              tuning
                              schrieb am zuletzt editiert von
                              #276

                              @atlantis

                              Hallo, ich habe den SMA Wechselrichter.
                              Der ist von der Hardware Baugleich.

                              Das Auslesen diverser Modbus daten funktioniert mit Iobroker
                              Jetzt würde ich gerne die Batterie Lade und Entladeleistung begrenzen.
                              Die sollte über die Register 44433 CmpBMS.BatChaMaxW und 44437 CmpBMS.BatDschMaxW funktionieren.
                              Leider nimmt der Wechselrichter es nicht an wenn ich unter Objekte z.B. 2000W eintrage.
                              Hast du ne Idee?

                              T G 2 Antworten Letzte Antwort
                              0
                              • B Offline
                                B Offline
                                Bricoleur
                                schrieb am zuletzt editiert von
                                #277

                                Hallo liebe Foristen,
                                ich stelle mich mal vor als Betreiber eines Sungrow SH6.0RT, der sich von der isolar-cloud emanzipieren möchte und sich gerade mühsam in das Thema "modbus" einarbeitet.
                                Bisher ist es mir gelungen, den iobroker auf einem ubuntu-System (Thinkpad) zu installieren und die Eingangsregister des Wechselrichters auszulesen.

                                Hierzu gleich meine erste Frage:
                                Ich habe beide Schnittstellen des WR (LAN bzw. WiNet-S) ausprobiert. LAN liefert plausible Daten, dis- bzw. reconnected aber im Sekundentakt. Ist das so normal?
                                Beim Auslesen mit WiNet-S bleibt die Verbindung permanent, dafür sind die gelieferten Daten unsinnig.

                                Im nächsten Schritt möchte ich die Daten (analog der Darstellung in der isolar-cloud) visualisieren.

                                Vielleicht möchte mir ja der eine oder andere hier ein Tip geben, damit ich mich nicht zu tief in "trial-and-error" verstricke;).

                                Besten Dank schon mal im Voraus!

                                O G 2 Antworten Letzte Antwort
                                0
                                • B Bricoleur

                                  Hallo liebe Foristen,
                                  ich stelle mich mal vor als Betreiber eines Sungrow SH6.0RT, der sich von der isolar-cloud emanzipieren möchte und sich gerade mühsam in das Thema "modbus" einarbeitet.
                                  Bisher ist es mir gelungen, den iobroker auf einem ubuntu-System (Thinkpad) zu installieren und die Eingangsregister des Wechselrichters auszulesen.

                                  Hierzu gleich meine erste Frage:
                                  Ich habe beide Schnittstellen des WR (LAN bzw. WiNet-S) ausprobiert. LAN liefert plausible Daten, dis- bzw. reconnected aber im Sekundentakt. Ist das so normal?
                                  Beim Auslesen mit WiNet-S bleibt die Verbindung permanent, dafür sind die gelieferten Daten unsinnig.

                                  Im nächsten Schritt möchte ich die Daten (analog der Darstellung in der isolar-cloud) visualisieren.

                                  Vielleicht möchte mir ja der eine oder andere hier ein Tip geben, damit ich mich nicht zu tief in "trial-and-error" verstricke;).

                                  Besten Dank schon mal im Voraus!

                                  O Offline
                                  O Offline
                                  ostseeskipper
                                  schrieb am zuletzt editiert von
                                  #278

                                  @bricoleur

                                  Die Übertragung zur Cloud übers WiNet-S
                                  Den LAN Anschluss am SH10RT für Modbus. Nicht alle Daten abfragen die gehen sondern nur die die du wirklich brauchst und lass dem WR 5 - 10 sec Pause zwischen den Abfragen.

                                  Meine Vis über 3 WR sieht so aus
                                  35c672c1-175c-415c-b33b-d65f75cf7f55-grafik.png

                                  Die Strings selber so
                                  fba644e8-ee0c-44d3-8519-323c76981f65-grafik.png

                                  plus die des Energiemanagments
                                  a4c1ee52-69d1-4ec4-8e40-0c36f410afc2-grafik.png

                                  Nur mal so als Anregung. Modbus Adapter, SQL Adapter und widgets von @Scrounger

                                  1 Antwort Letzte Antwort
                                  0
                                  • B Offline
                                    B Offline
                                    Bricoleur
                                    schrieb am zuletzt editiert von
                                    #279

                                    @ostseeskipper
                                    danke für die Tips!

                                    Unterbricht denn der Modbusadapter auch bei dir alle paar Sekunden die Verbindung, wenn du den LAN-Port zur Abfrage verwendest?

                                    Mit dem SQL-Adapter und den Widgets von Scrounger werde ich mich jetzt mal befassen.

                                    Verwendest du für deine Visualisierung auch den VIS-Adapter?

                                    O 1 Antwort Letzte Antwort
                                    0
                                    • B Bricoleur

                                      @ostseeskipper
                                      danke für die Tips!

                                      Unterbricht denn der Modbusadapter auch bei dir alle paar Sekunden die Verbindung, wenn du den LAN-Port zur Abfrage verwendest?

                                      Mit dem SQL-Adapter und den Widgets von Scrounger werde ich mich jetzt mal befassen.

                                      Verwendest du für deine Visualisierung auch den VIS-Adapter?

                                      O Offline
                                      O Offline
                                      ostseeskipper
                                      schrieb am zuletzt editiert von
                                      #280

                                      @bricoleur
                                      Habe keine Modbus Unterbrechungm nicht im SH10(LAN Port) und auch nicht im SG10.
                                      Nur der kleine SG3 mit einen EthernetStick steigt genau alle 5 Minuten aus wenn er versucht nach Hause zu funken.
                                      SQL nehm ich für die Datenspeicherung. da gibts aber auch noch anderes.
                                      Ja die Visualisierung ist mit VIS.

                                      JollyJ 1 Antwort Letzte Antwort
                                      0
                                      • O ostseeskipper

                                        @bricoleur
                                        Habe keine Modbus Unterbrechungm nicht im SH10(LAN Port) und auch nicht im SG10.
                                        Nur der kleine SG3 mit einen EthernetStick steigt genau alle 5 Minuten aus wenn er versucht nach Hause zu funken.
                                        SQL nehm ich für die Datenspeicherung. da gibts aber auch noch anderes.
                                        Ja die Visualisierung ist mit VIS.

                                        JollyJ Offline
                                        JollyJ Offline
                                        Jolly
                                        schrieb am zuletzt editiert von Jolly
                                        #281

                                        Servus Zusammen,

                                        ich habe einen SH10RT schon länger erfolgreich über Modubus eingebunden.
                                        Jetzt wollte ich einen SG10RT über den WiNet-S Stick ebenfalls einbinden.
                                        Hab alles gleich gemacht, nur natürlich mit einer anderen IP und Modubus ID.
                                        Verbindung wird im IO-Broker als "true" angezeigt. Aber leider sind alle Werte "0".
                                        Kann man für den SG10RT die gleichen Eingangsregister verwenden wie für den SH10RT ?

                                        Danke schon mal im Vorraus :)

                                        O 1 Antwort Letzte Antwort
                                        0
                                        • JollyJ Jolly

                                          Servus Zusammen,

                                          ich habe einen SH10RT schon länger erfolgreich über Modubus eingebunden.
                                          Jetzt wollte ich einen SG10RT über den WiNet-S Stick ebenfalls einbinden.
                                          Hab alles gleich gemacht, nur natürlich mit einer anderen IP und Modubus ID.
                                          Verbindung wird im IO-Broker als "true" angezeigt. Aber leider sind alle Werte "0".
                                          Kann man für den SG10RT die gleichen Eingangsregister verwenden wie für den SH10RT ?

                                          Danke schon mal im Vorraus :)

                                          O Offline
                                          O Offline
                                          ostseeskipper
                                          schrieb am zuletzt editiert von
                                          #282

                                          @jolly
                                          Der SG10RT hat andere Register.
                                          Hier z.B. meine Leseregister, schreibend macht da ja kein Sinn

                                          _address	name	description	unit	type	len	factor	offset	formula	role	room	cw	isScale
                                          5002	Daily_Output_Energy	Eigene Energienutzung heute (PV & Akku)	Kwh	uint16be	1	0.1	0		value		false	false
                                          5003	Total_Output_Energy	Eigene Energienutzung gesamt (PV & Akku)	Kwh	uint32sw	2	1	0		value		false	false
                                          5005	Total_running_time	Betriebstunden	h	uint16be	1	1	0		value		false	false
                                          5007	Inside_Temperature	Innenlufttemperatur	°C	int16be	1	0.1	0		value		false	false
                                          5010	MPPT_1_Voltage	MPPT1 Spannung	V	uint16be	1	0.1	0		value		false	false
                                          5011	MPPT_1_Current	MPPT1 Strom	A	uint16be	1	0.1	0		value		false	false
                                          5012	MPPT_2_Voltage	MPPT 2 Spannung	V	uint16be	1	0.1	0		value		false	false
                                          5013	MPPT_2_Current	MPPT 2 Strom	A	uint16be	1	0.1	0		value		false	false
                                          5016	Total_DC_Power	PV-Leistung aktuell	W	uint32sw	2	1	0		value		false	false
                                          5030	Total_active_power	Total active power	W	uint32sw	2	1	0		value		false	false
                                          

                                          Als TSV Daten einfügen, dann sollte es so aussehen.
                                          701c6ffd-0abe-4c6e-b4c4-5b8feb8276b7-grafik.png

                                          JollyJ 1 Antwort 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

                                          624

                                          Online

                                          32.4k

                                          Benutzer

                                          81.4k

                                          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