Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Blockly
    5. Falls zwei Trigger Einfluss auf eine Veränderung haben

    NEWS

    • Wir empfehlen: Node.js 22.x

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker goes Matter ... Matter Adapter in Stable

    Falls zwei Trigger Einfluss auf eine Veränderung haben

    This topic has been deleted. Only users with topic management privileges can see it.
    • M
      Mika 0 last edited by

      Hallo,
      ich verzweifle an folgendem Vorhaben:

      Anwesenheitserkennung steuert Rufumleitung.
      Es muss nur eine Person im Haus sein, dann steuere Rufumleitung mit false.
      Wenn keine Person im Haus, Rufumleitung auf true.

      So wie ich das gemacht habe, ändert sich das willkürlich wenn nur eine Person das Haus verlässt. Wie macht man es denn richtig?

      <xml xmlns="https://developers.google.com/blockly/xml">
        <block type="on_ext" id="uwYo(qUyXt`C3CiGYgO^" x="288" y="-238">
          <mutation xmlns="http://www.w3.org/1999/xhtml" items="2"></mutation>
          <field name="CONDITION">ne</field>
          <field name="ACK_CONDITION"></field>
          <value name="OID0">
            <shadow type="field_oid" id=",TM4eFuuXv[JBKzFkB7d">
              <field name="oid">0_userdata.0.Personen.Daniel</field>
            </shadow>
          </value>
          <value name="OID1">
            <shadow type="field_oid" id="z[j6TS*xS31?aTjNK_UO">
              <field name="oid">0_userdata.0.Personen.Andreas</field>
            </shadow>
          </value>
          <statement name="STATEMENT">
            <block type="controls_if" id="E+@%Vrm!LPTo)GF=7[z;">
              <mutation elseif="1"></mutation>
              <value name="IF0">
                <block type="logic_compare" id="{LhHF{{pLJuAAZa(j~.t">
                  <field name="OP">EQ</field>
                  <value name="A">
                    <block type="on_source" id="uITXc{[JLLjZqt4;D/{[">
                      <field name="ATTR">state.val</field>
                    </block>
                  </value>
                  <value name="B">
                    <block type="logic_boolean" id=",SQA0:/p$h8+}#K/.oRK">
                      <field name="BOOL">TRUE</field>
                    </block>
                  </value>
                </block>
              </value>
              <statement name="DO0">
                <block type="control" id="+??q,}3nUDZRPn;8{*|1">
                  <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
                  <field name="OID">tr-064.0.callForwarding.0</field>
                  <field name="WITH_DELAY">FALSE</field>
                  <value name="VALUE">
                    <block type="logic_boolean" id="c3MzTm~dkz[DHJKKE:mk">
                      <field name="BOOL">FALSE</field>
                    </block>
                  </value>
                </block>
              </statement>
              <value name="IF1">
                <block type="logic_compare" id="#7cff:Fb;@[g_@$RhyS*">
                  <field name="OP">EQ</field>
                  <value name="A">
                    <block type="on_source" id="ye8i^#68k=x!fccp!dLO">
                      <field name="ATTR">state.val</field>
                    </block>
                  </value>
                  <value name="B">
                    <block type="logic_boolean" id="`.8qMYqtt%=nYnc*b%BJ">
                      <field name="BOOL">FALSE</field>
                    </block>
                  </value>
                </block>
              </value>
              <statement name="DO1">
                <block type="control" id="07.u}DXs#ie4UOjg_K~z">
                  <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
                  <field name="OID">tr-064.0.callForwarding.0</field>
                  <field name="WITH_DELAY">FALSE</field>
                  <value name="VALUE">
                    <block type="logic_boolean" id="j:Gnw;NGLBqvczn`,(KQ">
                      <field name="BOOL">TRUE</field>
                    </block>
                  </value>
                </block>
              </statement>
            </block>
          </statement>
        </block>
      </xml>
      

      dcb219a8-f7ea-4ea9-b8fd-c75ebd319516-image.png

      T paul53 2 Replies Last reply Reply Quote 0
      • T
        ticaki Developer @Mika 0 last edited by ticaki

        Ist kein Blockly aber du musst ja nur die States anpassen:

        die oberen 4 0_userdata.0.Sensoren.Anwesenheit States auf deine Bedürfnisse anpassen und den Anyone erstellen, dann hast du einen State auf den du triggern kannst.

        const cAnyone = '0_userdata.0.Sensoren.Anwesenheit.Anyone'
        var someOne = [
            {atHome: false, id: '0_userdata.0.Sensoren.Anwesenheit.Sarah'},
            {atHome: false, id: '0_userdata.0.Sensoren.Anwesenheit.Tim'},// wenn du Gast löschst muß ach das komma hier weg
            {atHOme: false, id: '0_userdata.0.Sensoren.Anwesenheit.Gast'}
        ];
        
        var homeCount = 0;
        
        for (let a=0;a<someOne.length;a++) {
            someOne[a].atHome=getState(someOne[a].id).val;
        }
        
        function checkAnyone(obj) {
            homeCount = 0;
            for (var y = 0; y<someOne.length;y++){
                if (obj && obj.id == someOne[y].id) someOne[y].atHome=obj.state.val;
                if (someOne[y].atHome) homeCount++;
            }
            setState(cAnyone, homeCount > 0);
        }
        for (var x = 0; x<someOne.length;x++) {
            on({id:someOne[x].id, change:'ne'}, checkAnyone);
        }
        on({id:cAnyone, change:'any', ack:false}, function (obj){
            //setState('mqtt.1.display.show.Anwesenheit.value',homeCount);
            setState(cAnyone, obj.state.val, true);
        });
        checkAnyone(null);
        

        So wie das von Paul geht auch.

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

          @mika-0 sagte: Wenn keine Person im Haus, Rufumleitung auf true.

          Blockly_temp.JPG

          T M 2 Replies Last reply Reply Quote 0
          • T
            ticaki Developer @paul53 last edited by

            @paul53
            fehlt da nicht der delay? Wegen Falls Objekt und state.val != getState()

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

              @ticaki sagte: fehlt da nicht der delay?

              Was soll ein delay bewirken? Es ist lediglich eine Oderverknüpfung der beiden Anwesenheitswerte mit anschließender Negation.

              T 1 Reply Last reply Reply Quote 0
              • T
                ticaki Developer @paul53 last edited by

                @paul53
                Das man, soweit mir bekannt, in einer on(x, y) Subscription nicht auf den Wert von x per getState() zugreifen soll, da getState().val != dp.state.val sein kann

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

                  @ticaki sagte: da getState().val != dp.state.val sein kann

                  Das widerspricht meiner Erfahrung aus hunderten Beiträgen im Forum. Wenn auf Änderung getriggert wird, liefert auch getState(id).val den Wert, der zum Auslösen führte.
                  Anders ausgedrückt: Die Callback-Funktion, die den Puffer der Javascript-Instanz mit dem Zustand aktualisiert, wird vor der Callback-Funktion im Skript ausgeführt.

                  T 1 Reply Last reply Reply Quote 1
                  • T
                    ticaki Developer @paul53 last edited by ticaki

                    @paul53 sagte in Falls zwei Trigger Einfluss auf eine Veränderung haben:

                    @ticaki sagte: da getState().val != dp.state.val sein kann

                    Das widerspricht meiner Erfahrung aus hunderten Beiträgen im Forum. Wenn auf Änderung getriggert wird, liefert auch getState(id).val den Wert, der zum Auslösen führte.
                    Anders ausgedrückt: Der Trigger, der den Puffer der Javascript-Instanz mit dem Zustand aktualisiert, erfolgt vor dem Trigger im Skript.

                    Ok, meine Informationen sind jetzt ca. 3 Jahre alt und ich mache es seit dem einfach nicht. Gut möglich dass das heute so ist. Oder der der es geschrieben hatte (mit nem developer tag) hat unsinn geschrieben

                    Edit: Test durchgeführt mit 100 Wertänderungen eines Adapters, jedesmal war state.val == getState(). Gut das ich gefragt habe und noch besser das du mir geantwortet hast. Danke wiedermal. 🙂

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

                      @paul53 Hi Paul, danke nochmals. funktioniert einfandfrei!

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

                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      833
                      Online

                      32.0k
                      Users

                      80.4k
                      Topics

                      1.3m
                      Posts

                      3
                      9
                      209
                      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