Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. [gelöst] Stark verzögerte Triggerreaktion IDs vom Selektor

    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

    [gelöst] Stark verzögerte Triggerreaktion IDs vom Selektor

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

      Hallo zusammen!

      Ich bin aktuell dabei mittels des Bausteins "IDs vom Selektor" ein Blockly zu bauen, welches die Online-Zustände verschiedener Shellys überwacht. Sowie so gut....

      Nun ist mir aufgefallen, dass insbesondere die Reaktion auf "false" extrem verzögert und oftmals gar nicht geschieht. Ich habe sowohl mit "wurde aktualisiert" und "wurde geändert" getestet. Gleiches Verhalten.

      Auf "true" reagiert der Trigger quasi sofort, auf false wie gesagt in der Regel nicht. Erst wenn der Datenpunkt wieder "true" ist kommt sowohl die Reaktion auf "false" als auch auf "true" direkt nacheinander. Die Zeitstempel im Log passen dann aber trotzdem.

      Mein Blockly ist aktuell nur ein Test, daher der Debug-Output um das nachbilden zu können. Also bitte nicht wundern.

      idsvomsel.JPG

      Ist so etwas schon mal wem untergekommen, oder hat eine Lösung? Eine Offlinewarnung sollte ja zeitnah geschehen....

      Danke und Grüße

      paul53 1 Reply Last reply Reply Quote 0
      • paul53
        paul53 @puppet1912 last edited by

        @puppet1912 sagte: Erst wenn der Datenpunkt wieder "true" ist kommt sowohl die Reaktion auf "false" als auch auf "true" direkt nacheinander.

        Vermutung: Die Datenpunkte wechseln nicht auf false, sondern haben keinen Zustand. Dann können sie nicht mehr triggern.

        P 1 Reply Last reply Reply Quote 0
        • P
          puppet1912 @paul53 last edited by

          @paul53
          Die Vermutung ist berechtigt, habe ich aber tatsächlich nebenbei geprüft. Der Zustand des Datenpunktes wechselt defintiv jedes mal. Nur die Debug-Ausgabe reagiert wie beschrieben verzögert.

          Grüße

          DJMarc75 1 Reply Last reply Reply Quote 0
          • DJMarc75
            DJMarc75 @puppet1912 last edited by DJMarc75

            @puppet1912 Hab da mal was gebastelt und getestet. Zumindest funktionierts bei mir so ohne Verzögerung mit den Shellys:

            Screenshot 2022-07-12 164815.png

            JS-Funktion:

            return getObject(id).common.name; 
            


            <xml xmlns="https://developers.google.com/blockly/xml">
            <variables>
            <variable id="pG9B-J+!~NV%)XblSH">Liste</variable>
            <variable id="}C,vdrOLxAOW-W^#ZQA">id</variable> <variable id="2h_!zm_t0]ewai#h}K^]">true</variable> <variable id="|RHJi9fgTN)D1LhbkEC1">false</variable> <variable id="2?n$Sb1zieDf0D4ctS+}">i</variable> </variables> <block type="variables_set" id="zC!X6xvd{_[#iFUWSw``" x="-262" y="-562"> <field name="VAR" id="pG9B-J+!~NV%)Xb*l*SH">Liste</field> <value name="VALUE"> <block type="selector" id="03?xKTf;!VOD19Rsa2_">
            <field name="TEXT">(functions=LostCon)</field>
            </block>
            </value>
            <next>
            <block type="on_ext" id="X}-6Uq@:qL:+S[V!TlgU">
            <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=",UI,O@^F$|0_}9_rOi%[">
            <field name="oid">default</field>
            </shadow>
            <block type="variables_get" id="||}udX0swL73ERhMn+rw">
            <field name="VAR" id="pG9B-J+!~NV%)Xb
            lSH">Liste</field>
            </block>
            </value>
            <statement name="STATEMENT">
            <block type="variables_set" id="t9eKT0wDh0XFL1OZ)jt)">
            <field name="VAR" id="2h_!zm_t0]ewai#h}K^]">true</field>
            <value name="VALUE">
            <block type="lists_create_with" id="X#w]EW^#iuk2:PK^ZoYc">
            <mutation items="0"></mutation>
            </block>
            </value>
            <next>
            <block type="variables_set" id="Tza;}.8_KJj4;={,1X0(">
            <field name="VAR" id="|RHJi9fgTN)D1LhbkEC1">false</field>
            <value name="VALUE">
            <block type="lists_create_with" id="Qx+7[5,#{1!80#L[77h(">
            <mutation items="0"></mutation>
            </block>
            </value>
            <next>
            <block type="controls_forEach" id="ZzPLw7BWHG}u1*z0e8-"> <field name="VAR" id="2?n$Sb1zieDf0D4ctS+}">i</field> <value name="LIST"> <block type="variables_get" id="8,Oa4x%oB%77/G;?zRWf"> <field name="VAR" id="pG9B-J+!~NV%)Xb*l*SH">Liste</field> </block> </value> <statement name="DO"> <block type="controls_if" id="rF{)FjpW~?p!$/)n7Yes"> <mutation elseif="1"></mutation> <value name="IF0"> <block type="logic_compare" id="wKBFF*;^K,!0KZdbKK#F"> <field name="OP">EQ</field> <value name="A"> <block type="get_value_var" id="CS+0WsMog?-H0?;}e1+K"> <field name="ATTR">val</field> <value name="OID"> <shadow type="text" id="mhsW9*bv%JB/f4}))K.h"> <field name="TEXT"></field> </shadow> <block type="variables_get" id="cX$x9lAxqCm-P~bKl?x">
            <field name="VAR" id="2?n$Sb1zieDf0D4ctS+}">i</field>
            </block>
            </value>
            </block>
            </value>
            <value name="B">
            <block type="logic_boolean" id="5gOxApd5zGl5nd0/,gao">
            <field name="BOOL">TRUE</field>
            </block>
            </value>
            </block>
            </value>
            <statement name="DO0">
            <block type="lists_setIndex" id="IiueN#6;R^G~gn7!)SPR">
            <mutation at="false"></mutation>
            <field name="MODE">INSERT</field>
            <field name="WHERE">LAST</field>
            <value name="LIST">
            <block type="variables_get" id="w/G9Ia/IK[tpg_(:9fmY">
            <field name="VAR" id="2h_!zm_t0]ewai#h}K^]">true</field>
            </block>
            </value>
            <value name="TO">
            <block type="procedures_callcustomreturn" id="_+2;w)2qKXCqLfF0jq2}" inline="true">
            <mutation name="getName">
            <arg name="id"></arg>
            </mutation>
            <value name="ARG0">
            <block type="variables_get" id=".J
            ToNM/JOp:l0%=lzA[">
            <field name="VAR" id="2?n$Sb1zieDf0D4ctS+}">i</field>
            </block>
            </value>
            </block>
            </value>
            </block>
            </statement>
            <value name="IF1">
            <block type="logic_compare" id="RO?3M*^lipp5yer,0;a-">
            <field name="OP">EQ</field>
            <value name="A">
            <block type="get_value_var" id="Je!LG;-@sDx_s2T:/R~S">
            <field name="ATTR">val</field>
            <value name="OID">
            <shadow type="text">
            <field name="TEXT"></field>
            </shadow>
            <block type="variables_get" id="EJm..ko}GNy1^K7pwr3"> <field name="VAR" id="2?n$Sb1zieDf0D4ctS+}">i</field> </block> </value> </block> </value> <value name="B"> <block type="logic_boolean" id="yo.}z[wX)0qj{@a,+R;b"> <field name="BOOL">FALSE</field> </block> </value> </block> </value> <statement name="DO1"> <block type="lists_setIndex" id="b{J_~z;D9VRto_a._DYT"> <mutation at="false"></mutation> <field name="MODE">INSERT</field> <field name="WHERE">LAST</field> <value name="LIST"> <block type="variables_get" id="%Xy{Qz7s0D?}^Ox(+g4]"> <field name="VAR" id="|RHJi9fgTN)D1LhbkEC1">false</field> </block> </value> <value name="TO"> <block type="procedures_callcustomreturn" id="WMCLrhs{E7,jlKPtWi66" inline="true"> <mutation name="getName"> <arg name="id"></arg> </mutation> <value name="ARG0"> <block type="variables_get" id="{Jh]i28kn4PgtB}WB@9">
            <field name="VAR" id="2?n$Sb1zieDf0D4ctS+}">i</field>
            </block>
            </value>
            </block>
            </value>
            </block>
            </statement>
            </block>
            </statement>
            <next>
            <block type="debug" id="5~4}NVirRxn;gwr!aA1o">
            <field name="Severity">log</field>
            <value name="TEXT">
            <shadow type="text" id="kGrb;[!z}G7y1E?,}8,7">
            <field name="TEXT">test</field>
            </shadow>
            <block type="text_join" id="Tj.JFZV!DSdD*iYxq9Vk">
            <mutation items="2"></mutation>
            <value name="ADD0">
            <block type="text" id="t1|pWSmrHphA9#oaS66"> <field name="TEXT">Offline: </field> </block> </value> <value name="ADD1"> <block type="lists_split" id="S03BCKA+zz=MLOX{Rtk">
            <mutation mode="JOIN"></mutation>
            <field name="MODE">JOIN</field>
            <value name="INPUT">
            <block type="variables_get" id="q=V1A8T~j{j6rGzHm^:S">
            <field name="VAR" id="|RHJi9fgTN)D1LhbkEC1">false</field>
            </block>
            </value>
            <value name="DELIM">
            <shadow type="text" id="qEn(]!)8s2FYDtOefrUM">
            <field name="TEXT">,</field>
            </shadow>
            <block type="text" id="$XZ{JkZf6jbux/){6t6j">
            <field name="TEXT">, </field>
            </block>
            </value>
            </block>
            </value>
            </block>
            </value>
            <next>
            <block type="debug" id="?kCvR1(+E-80XDRa}LF">
            <field name="Severity">log</field>
            <value name="TEXT">
            <shadow type="text" id=";NP:_}HY$z/x{qk6#HMr">
            <field name="TEXT">test</field>
            </shadow>
            <block type="text_join" id="EVjg^P,wVQ
            p@lnY)n7/">
            <mutation items="2"></mutation>
            <value name="ADD0">
            <block type="text" id="o3)d}u,qxwex9.n)z^QC">
            <field name="TEXT">Online: </field>
            </block>
            </value>
            <value name="ADD1">
            <block type="lists_split" id="A$Z;6IYoAVp,Xqwi#^m"> <mutation mode="JOIN"></mutation> <field name="MODE">JOIN</field> <value name="INPUT"> <block type="variables_get" id="7B)$.vJx|N~Qv8eC(rRp"> <field name="VAR" id="2h_!zm_t0]ewai#h}K^]">true</field> </block> </value> <value name="DELIM"> <shadow type="text"> <field name="TEXT">,</field> </shadow> <block type="text" id="GClXMqE][APr@/;IDHR."> <field name="TEXT">, </field> </block> </value> </block> </value> </block> </value> </block> </next> </block> </next> </block> </next> </block> </next> </block> </statement> </block> </next> </block> <block type="procedures_defcustomreturn" id="b6_!v~9#Y!k45Fl?.w," x="263" y="-562">
            <mutation statements="false">
            <arg name="id" varid="}C,`vdrOLxAOW-W^#ZQA"></arg>
            </mutation>
            <field name="NAME">getName</field>
            <field name="SCRIPT">cmV0dXJuIGdldE9iamVjdChpZCkuY29tbW9uLm5hbWU7IA==</field>
            <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
            </block>
            </xml>

            P 1 Reply Last reply Reply Quote 0
            • P
              puppet1912 @DJMarc75 last edited by

              @djmarc75 said in Stark verzögerte Triggerreaktion IDs vom Selektor:

              return getObject(id).common.name;

              Guten Abend!

              Erstmal Danke für deine Mühen. Ich habe mir mal erlaubt dein Blockly nachzubauen und die vier bis fünf mal die ich eben getestet habe, war keine großartige Verzögerung da. Bei meinem Testscript im Moment allerdings auch nicht. Es ist mir wirklich ein Rätsel.

              Deine Herangehensweise finde ich recht interessant. Welchen Vorteil hat es, vor dem Trigger den Selektor in eine Variable zu überführen?

              Eins haben unsere Scripte allerdings gemein, beide reagieren auf jede Änderung, sodass wenn bspw drei von zehn überwachten Zuständen nur wenige Millisekunden hintereinander auf false wechseln, auch mehrere Nachrichten kommen. Hier muss ich wohl an geeigneter Stelle noch etwas einbauen.

              Ich danke dir für deine Hilfe.

              Beste Grüße

              DJMarc75 paul53 2 Replies Last reply Reply Quote 0
              • DJMarc75
                DJMarc75 @puppet1912 last edited by

                @puppet1912 sagte in Stark verzögerte Triggerreaktion IDs vom Selektor:

                Welchen Vorteil hat es, vor dem Trigger den Selektor in eine Variable zu überführen?

                Dass beim Skriptstart die Variable auf den Selektor gesetzt wird und somit nicht verloren geht.

                @puppet1912 sagte in Stark verzögerte Triggerreaktion IDs vom Selektor:

                war keine großartige Verzögerung da

                Bei mir max. 1 Sekunde beim Test.

                @puppet1912 sagte in Stark verzögerte Triggerreaktion IDs vom Selektor:

                nur wenige Millisekunden hintereinander auf false wechseln

                Da ergibt sich die Frage: Warum wechseln denn diese Shellys so oft den Onlinezustand ??? Welche sind das denn ?

                P 1 Reply Last reply Reply Quote 0
                • P
                  puppet1912 @DJMarc75 last edited by

                  @djmarc75

                  Da ergibt sich die Frage: Warum wechseln denn diese Shellys so oft den Onlinezustand ??? Welche sind das denn ?

                  Das ist nicht der Regelfall, eher ein Schönheitsfehler. Ich nutze bspw 6 Shellys für meine Ventilsteuerung der Gartenbewässerung. Diese sind alle über die gleiche Sicherung abgesichert. Wenn also mal der Strom weg ist, aus welchen Gründen auch immer, wechseln gleich mehrere auf false. Beim Zuschalten des Stromes wechseln natürlich nicht alle zum exakt gleichen Zeitpunkt auf true.

                  Wie gesagt, nur ein Schönheitsfehler und nicht die Regel.

                  DJMarc75 1 Reply Last reply Reply Quote 0
                  • DJMarc75
                    DJMarc75 @puppet1912 last edited by

                    @puppet1912 Könntest ja dann das ganze per CRON/Zeitplan abfragen. Nur als Idee.

                    P 1 Reply Last reply Reply Quote 0
                    • paul53
                      paul53 @puppet1912 last edited by

                      @puppet1912 sagte: Welchen Vorteil hat es, vor dem Trigger den Selektor in eine Variable zu überführen?

                      Wenn das Ergebnis einer komplexe Funktion - wie Selektor - mehr als einmal verwendet wird (hier zweimal), schont es Ressourcen, wenn man eine Variable mit dem Ergebnis der Funktion füllt und dann diese verwendet.

                      P 1 Reply Last reply Reply Quote 0
                      • P
                        puppet1912 @DJMarc75 last edited by puppet1912

                        @djmarc75 said in Stark verzögerte Triggerreaktion IDs vom Selektor:

                        @puppet1912 Könntest ja dann das ganze per CRON/Zeitplan abfragen. Nur als Idee.

                        Mahlzeit.

                        Ja das eine sehr gute Idee. Danke dir.

                        Eine Änderung werde ich auch noch vornehmen müssen. Der Datenpunkt des Shellys welcher den Onlinestatus ausgibt, hat als Namen ebenfalls nur "online". Sinnvoll wäre es aber, den Namen des eigentlichen Devices auzugeben, denn diese enthält gleichzeitig das Ventil welches angesteuert wird.
                        Könnte man das direkt über eine JS-Funktion realisieren?

                        Mir kam jetzt nur der Gedanke den gesamten Pfad des Online-DPs zu speichern, über "nimm-Text-Ab" die letzten Stellen zu entfernen und dann über eine weitere Funktion den Namen des so erhaltenen Devices zu ermitteln. War das verständlich wie ich das meine?

                        Grüße

                        1 Reply Last reply Reply Quote 0
                        • P
                          puppet1912 @paul53 last edited by

                          @paul53

                          Wenn das Ergebnis einer komplexe Funktion - wie Selektor - mehr als einmal verwendet wird (hier zweimal), schont es Ressourcen, wenn man eine Variable mit dem Ergebnis der Funktion füllt und dann diese verwendet.

                          Danke für die Erläuterung. Grundlegend nachvollziehbar und setze ich in verschiedenen Scripten auch so um. Bspw mit dem "Wert" des Triggers zu arbeiten.

                          Meine Frage zielte allerdings darauf ab, warum das vor dem eigentlichen Trigger passiert. Könnte man nicht auch direkt an erster Stelle innerhalb des Triggers die Variable erstellen? Oder habe ich da einen Denkfehler.

                          Grüße

                          paul53 1 Reply Last reply Reply Quote 0
                          • paul53
                            paul53 @puppet1912 last edited by paul53

                            @puppet1912 sagte: Könnte man nicht auch direkt an erster Stelle innerhalb des Triggers die Variable erstellen?

                            Das Ergebnis des Selektors ist u.a. der Trigger.

                            @puppet1912 sagte in Stark verzögerte Triggerreaktion IDs vom Selektor:

                            Namen des eigentlichen Devices auzugeben

                            Siehe hier.

                            P 1 Reply Last reply Reply Quote 0
                            • P
                              puppet1912 @paul53 last edited by

                              @paul53 said in Stark verzögerte Triggerreaktion IDs vom Selektor:

                              @puppet1912 sagte: Könnte man nicht auch direkt an erster Stelle innerhalb des Triggers die Variable erstellen?

                              Das Ergebnis des Selektors ist u.a. der Trigger.

                              @puppet1912 sagte in Stark verzögerte Triggerreaktion IDs vom Selektor:

                              Namen des eigentlichen Devices auzugeben

                              Siehe hier.

                              Super, vielen Dank. Schau ich mir direkt mal an. Wieder ein Punkt mal Javascript zu lernen.

                              Danke und Grüße

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

                              Support us

                              ioBroker
                              Community Adapters
                              Donate

                              553
                              Online

                              31.9k
                              Users

                              80.1k
                              Topics

                              1.3m
                              Posts

                              3
                              13
                              465
                              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