Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Hardware
    4. Probleme beim MODBus Holding Register schreiben per Skript

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    Probleme beim MODBus Holding Register schreiben per Skript

    This topic has been deleted. Only users with topic management privileges can see it.
    • A
      Atlantis last edited by

      Wir sind aktuell im Forum in einer kleinen Gruppe dabei die Sungrow Hybrid WR per MODbus einzubinden und das für die Nachwelt zu dokumentieren.
      Das Lesen funkt mittleweile sehr gut. Nur beim Schreiben der Holding-Register kommen wir aktuell nicht weiter.

      Da unser Problem wie es aussieht ein ganz allgemeines Thema ist, kann uns sicher jemand weiter helfen, da das nicht WR spezifisch ist.

      Wir können aktuell die angelegten Holding Register von Hand in Objekte beschreiben, nicht aber per Skript.

      fb70d5bd-4bbb-498a-bdd5-b2c61a31f922-grafik.png
      Werden Werte per Skript in die Objekte geschrieben, werden diese zwar angezeigt, aber nicht übertragen.
      Werden sie von Hand eingegeben und bestätigt, werden sie angezeigt und übertragen.

      Wo ist unser Denkfehler?

      Anbei der Post zu unserem aktuellen Stand:
      https://forum.iobroker.net/topic/38441/sungrow-wr-sgh10rt-erfolgreich-mit-modbus-eingebunden

      Ich hoffe uns kann einer diese Hürde nehmen.

      Gruss

      Atlantis

      UncleSam 1 Reply Last reply Reply Quote 0
      • UncleSam
        UncleSam Developer @Atlantis last edited by

        @Atlantis Sorry, ich mag nicht das ganze Thema nach dem Skript durchsuchen. Wie macht ihr das Setzen der States? setState(...) was steht da bei den Punkten drin?

        A 1 Reply Last reply Reply Quote 0
        • A
          Atlantis @UncleSam last edited by Atlantis

          @UncleSam Danke für Dein Angebot uns zu unterstützen.

          Ich versuche aktuell die Objekte mit Blocky zu schreiben.

          Das sind aktuell meine 2 Versuche:
          aa07ec9a-a9ba-4fd4-933d-c45045c4fd41-grafik.png
          Übersetzt sieht dass dann im unteren Fall so aus:

          on({id: getState("modbus.1.holdingRegisters.13049_EMS_mode selection").val, change: "ne"}, async function (obj) {
            var value = obj.state.val;
            var oldValue = obj.oldState.val;
            if (getState("modbus.1.holdingRegisters.13049_EMS_mode selection").val == 0) {
              setState("modbus.1.holdingRegisters.13049_EMS_mode selection", 3, true);
            }
          
          

          Gruss

          Atlantis

          Dolomiti 1 Reply Last reply Reply Quote 0
          • Dolomiti
            Dolomiti @Atlantis last edited by Dolomiti

            @Atlantis
            Ich meine irgendwo im Forum was gelesen zu haben, das du "steuere" und nicht "aktualisiere" verwenden musst.

            Edit. Gerade war da noch ein Blockly bei dir zu sehen. Jetzt ist es weg.

            A 3 Replies Last reply Reply Quote 1
            • A
              Atlantis @Dolomiti last edited by Atlantis

              @Dolomiti Wie mache ich das aus Blocky heraus. Ich bin mit JS noch nicht warm, komme eher aus der C Ecke, wobei das hier wenn es um Regsiter schreiben geht schon sehr ähnlich aussieht.

              Werde mal mit steuere und aktualisiere im FOrum suchen...

              Dolomiti 1 Reply Last reply Reply Quote 0
              • A
                Atlantis @Dolomiti last edited by

                @Dolomiti Ja, moment stelle ich gleichnnoch einmal rein

                1 Reply Last reply Reply Quote 0
                • A
                  Atlantis @Dolomiti last edited by

                  @Dolomiti O.K. jetzt habe ich es verstanden, was Du meinst... Ich probiere das mal und gebe gleich Rückinfo

                  1 Reply Last reply Reply Quote 0
                  • Dolomiti
                    Dolomiti @Atlantis last edited by

                    @Atlantis
                    Bei mir ist es umgekehrt, ich komm nicht so richtig mit Blockly klar.😳

                    A 1 Reply Last reply Reply Quote 0
                    • A
                      Atlantis @Dolomiti last edited by

                      @Dolomiti Du meintest so, oder?
                      c34764b8-4ea7-40d7-81b7-a4e9c077c574-grafik.png

                      Dolomiti 1 Reply Last reply Reply Quote 0
                      • Dolomiti
                        Dolomiti @Atlantis last edited by Dolomiti

                        @Atlantis Ja, so könnte es gehen.

                        D.h. wenn sich das Register ändert überprüfst du, ob der Wert null ist um ihn dann auf drei zu setzen.

                        A 2 Replies Last reply Reply Quote 0
                        • A
                          Atlantis @Dolomiti last edited by Atlantis

                          @Dolomiti Erster Versuch mit dem Blocky von eben hat nach dem Erreichen des Nullwertes den Regsiterwert nicht zurück auf 3 gesetzt. Dann neuer Versuch, alle 10 Sekunden den Wert auf 3 setzen.
                          76d0669d-9d48-4296-b7e4-795bbc7319a8-grafik.png

                          für Dich noch als JS:

                          schedule("*/10 * * * * *", async function () {
                            setState("modbus.0.holdingRegisters.13049_EMS_mode selection", 3);
                          });
                          

                          Geht leider auch nicht.

                          Logeinträge im Status Debug gibt es keine, die MOD Bus Adapter laufen momentan aber in Zeitlupe, auch Handeinträge kommen oft nicht am WR an. Der Zeitstempel hinter den Holding Register EInträgen ist tlw. 4-6 Minuten alt.

                          Anbei mal noch meine Settings:
                          73121dd2-8ddf-4585-8905-95a6883ffd84-grafik.png

                          b276dd4f-8163-4470-ba75-f172fbcba424-grafik.png
                          Weitere Ideen?

                          Gruss ATlantis

                          Dolomiti 1 Reply Last reply Reply Quote 0
                          • A
                            Atlantis @Dolomiti last edited by

                            @Dolomiti Nachdem auch meine VIS über 10 Minuten hinterher hing, habe ich mich jetzt für
                            sudo shutdown -r now

                            entscheiden. Mal sehen ob es was hilft...

                            1 Reply Last reply Reply Quote 0
                            • Dolomiti
                              Dolomiti @Atlantis last edited by Dolomiti

                              @Atlantis Die Settings sehen bei mir auch so aus.
                              Hab das Blockly mal nachgebaut und mit meiner Heizungssteuerung probiert, die über eine Wago-SPS 750-880 läuft probiert. Wenn der Wert 22 erreicht wird er wieder auf 20 zurück gesetzt.

                              2021-01-09 18_25_11-javascript - ioBroker - Vivaldi.png

                              Und noch als Blockly-Export

                              on({id: 'modbus.0.holdingRegisters.40771_T_WZ_W', change: "ne"}, async function (obj) {
                                var value = obj.state.val;
                                var oldValue = obj.oldState.val;
                                if (getState("modbus.0.holdingRegisters.40771_T_WZ_W").val == 22) {
                                  setState("modbus.0.holdingRegisters.40771_T_WZ_W"/*Sollwert Wohnzimmer*/, 20);
                                }
                              });
                              
                              

                              bzw. hier der Export. Oben die Umwandlung nach JS

                              <xml xmlns="https://developers.google.com/blockly/xml">
                               <block type="on_ext" id="9:cE=oem[o9w2e{1.kVD" x="88" y="63">
                                 <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=":~)ktxq4IBIR9BqE9#3*">
                                     <field name="oid">modbus.0.holdingRegisters.40771_T_WZ_W</field>
                                   </shadow>
                                 </value>
                                 <statement name="STATEMENT">
                                   <block type="controls_if" id="$aO_3#Dcm-O%q3Y+x9QM">
                                     <value name="IF0">
                                       <block type="logic_compare" id="FGaO+K#}fG$oY9cguS2a">
                                         <field name="OP">EQ</field>
                                         <value name="A">
                                           <block type="get_value" id="v8eh)if,K^S5H_rDN1I}">
                                             <field name="ATTR">val</field>
                                             <field name="OID">modbus.0.holdingRegisters.40771_T_WZ_W</field>
                                           </block>
                                         </value>
                                         <value name="B">
                                           <block type="math_number" id="s/=huaZkeI2T{MjL{T6f">
                                             <field name="NUM">22</field>
                                           </block>
                                         </value>
                                       </block>
                                     </value>
                                     <statement name="DO0">
                                       <block type="control" id="3a:r:e-%a{G/*+_C@,6,">
                                         <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
                                         <field name="OID">modbus.0.holdingRegisters.40771_T_WZ_W</field>
                                         <field name="WITH_DELAY">FALSE</field>
                                         <value name="VALUE">
                                           <block type="math_number" id=";_h_S~yjv5T8qvP%*GxG">
                                             <field name="NUM">20</field>
                                           </block>
                                         </value>
                                       </block>
                                     </statement>
                                   </block>
                                 </statement>
                               </block>
                              </xml>
                              

                              A 1 Reply Last reply Reply Quote 0
                              • A
                                Atlantis @Dolomiti last edited by Atlantis

                                @Dolomiti Nachdem Reboot kann ich jetzt wieder die Holding Register in den Objekten zügig setzen und die gesetzten werden auch so im WR übernommen.

                                Per Skipt nach wie vor Fehlanzeige.

                                Jetzt habe ich aber eine neues, völlig unbekanntes Problem.
                                Die Vis hängt trotz Reboot auf dem alten Wert von 18:01 Uhr (als vor 30 Minuten) fest.

                                O.K. dachte Browser Cache. Neues privates Fenster geöfnet. VIS zeigt das gleiche, obwohl ich um 18:23 gerebootet habe.
                                Manchmal ist es echt zum Verzweifeln, vor allem als IO Broker Neuling...

                                Ich glaube nicht, das an der Logik des Blocky hängt. Im Forum hatt jemand schon einmal genau das gleiche Problem geschildert. Nach Adapter Neustart war bei ihm dann aber alles i.O.
                                Gruss
                                Atlantis

                                A Dolomiti 2 Replies Last reply Reply Quote 0
                                • A
                                  Atlantis @Atlantis last edited by Atlantis

                                  @Atlantis @Dolomiti @UncleSam
                                  Habe den Fehler jetzt gefunden.
                                  VIS hing, da das Blocky Skript, welches ich zum Testen um den Eintrag mit den Holding Registern ergänzt habe,
                                  ohne jegliche Fehlermeldung eingefroren war.

                                  Habe dann kurz alle Testeinträge zu den Holdiung Registern von vorher gelöscht, bis auf den mit den 10/20 Sekunden weisen setzen des Holding Registers und wollte das Skript abspeichern.
                                  Dabei habe ich die JS Warnung in Rot erhalten mit einem Compiler Fehler. Also das 10 Sek. Blocky gelöscht und gespeichert.

                                  --> Siehe da! Die VIS lief wieder wie vorher.

                                  Dann im gleichen Blocke erneut das gleiche Skript mit 20 Sekunden Register Setzen eingebaut, gespeichert. --> Keinen Compiler Fehler und....

                                  Das Holding Regsiter wird brav alle 20 Sekunden gesetzt.

                                  Für die, die das hier je mal nachlesen. Funktionierende Lösung sieht so aus:
                                  Blocky:
                                  10511735-4a76-4cf7-b975-59a87f9adbcf-grafik.png

                                  oder als JS:

                                  schedule("*/20 * * * * *", async function () {
                                    setState("modbus.0.holdingRegisters.13049_EMS_mode selection", 3);
                                  });
                                  
                                  
                                  

                                  Gruss und ganz lieben Dank allen !!!!!
                                  Atlantis

                                  1 Reply Last reply Reply Quote 0
                                  • Dolomiti
                                    Dolomiti @Atlantis last edited by

                                    @Atlantis Schön das es jetzt funktioniert.

                                    1 Reply Last reply Reply Quote 0
                                    • First post
                                      Last post

                                    Support us

                                    ioBroker
                                    Community Adapters
                                    Donate

                                    606
                                    Online

                                    31.8k
                                    Users

                                    79.9k
                                    Topics

                                    1.3m
                                    Posts

                                    holding register modbus schreiben schreiben settings einstellung write
                                    3
                                    16
                                    2978
                                    Loading More Posts
                                    • Oldest to Newest
                                    • Newest to Oldest
                                    • Most Votes
                                    Reply
                                    • Reply as topic
                                    Log in to reply
                                    Community
                                    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                    The ioBroker Community 2014-2023
                                    logo