NEWS
Falls zwei Trigger Einfluss auf eine Veränderung haben
-
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>
-
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>
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.
-
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>
-
@paul53
fehlt da nicht der delay? Wegen Falls Objekt und state.val != getState() -
@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.
@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
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@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. -
@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.@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. :)
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden
