NEWS
[Gelöst] Blockly: Tür abschließen nach Abwesenheit mehr als 5 Minuten
-
Hallo zusammen,
ich beisse mir gerade die Zähne aus.
Wie kann ich mittels Blockly Keymatic dazu bewegen, die Tür nach mehr als 5 Minuten Abwesenheit abzuschließen?
Generell könnte ich ja so vorgehen:
Wenn Abwesenheit aktiv, dass verzögert um 5 Minuten abschließen.
Leider wird die Tür danach abgeschlossen, wenn ich innerhalb der 5 Minuten wieder anwesend bin.
Ich würde also gern eine Lösung erstellen, die den 5-Minuten-Timer wieder resetet.
Ich vermute mal, das ich hierzu eine Variable erstellen muss und diese dann minütlich befülle. Wenn ich dann innerhalb der 5 Minuten wieder anwesend bin, wird die Variable geleert. Richtig?
Wie kann ein solches Skript aussehen? Wie bewege ich Blockly einen Wert minütlich um 1 zu erhöhen?
Freue mich auf eure Antworten.
Grüße,
Stefan
-
Hallo Stefan1984
Zeig doch mal was Du schon hast.
Am Besten mit Export.
Dann kann man besser mitbasteln.
Grüße
-
Huhu,
hier mein bisheriges Werk. Klappt das so? Hab mich noch nicht getraut es zu testen, ohne das mal einer drüber schaut.
Vielleicht geht es noch einfacher. Ganz schön umfangreich, … nur um eine Tür abzuschließen.
! ````
// Object Abwesenheit_Minuten erzeugen
createState("Abwesenheit_Minuten", function () {
});
// Trigger Anwesenheit
on({id: new RegExp('hm-rega\.0\.19754' + "|" + 'hm-rega\.0\.19755'), change: "ne"}, function (obj) {
// Anwesenheit Stefan UND Nicole
if (getState("hm-rega.0.19754").val == false && getState("hm-rega.0.19755").val == false) {
// Erhöhe Abwesenheit_Minuten solange um 1, bis Anwesenheit Stefan oder Nicole = wahr
while (!(getState("hm-rega.0.19754").val == true || getState("hm-rega.0.19755").val == true)) {
setStateDelayed('javascript.0.Abwesenheit_Minuten', (getState("javascript.0.Abwesenheit_Minuten").val + 1), false, parseInt(60000, 10), false);
}
}
});
// Trigger Abwesenheit_Minuten
on({id: "javascript.0.Abwesenheit_Minuten"/Abwesenheit_Minuten/, change: "ne"}, function (obj) {
var value = obj.state.val;
var oldValue = obj.oldState.val;
// Falls Abwesenheit_Minuten gleich 5 Minuten
if (getState("javascript.0.Abwesenheit_Minuten").val == 5) {
// Dann schließe die Tür ab
setState("hm-rpc.0.KEQ085xxxx.1.STATE"/Keymatic.STATE/, false);
}
});
// Trigger Anwesenheit
on({id: new RegExp('hm-rega\.0\.19754' + "|" + 'hm-rega\.0\.19755'), change: "ne"}, function (obj) {
// Anwesenheit Stefan ODER Nicole ist wahr
if (getState("hm-rega.0.19754").val == true || getState("hm-rega.0.19755").val == true) {
// Setze Abwesenheit_Minuten auf 0
setState("javascript.0.Abwesenheit_Minuten"/Abwesenheit_Minuten/, 0);
}
});Vorab vielen Dank für die Hilfe. Grüße, Stefan
-
Hallo Stefan1984
Sieht schon nicht schlecht aus.
Ein paar kleine Haken gibt es aber noch.
Bitte ein Blockly Export!
(Die kleinen Pfeilchen)
Du hast das Script kopiert.
Grüße
-
Hallo Stefan1984
Sieht schon nicht schlecht aus.
Ein paar kleine Haken gibt es aber noch.
Bitte ein Blockly Export!
(Die kleinen Pfeilchen)
Du hast das Script kopiert.
Grüße `
Oh. Hier der Export.
! ````
<xml xmlns="http://www.w3.org/1999/xhtml"><block type="comment" id="e|)^CZ6;ZK,ZY]H{#*Uj" x="-598" y="-202"><field name="COMMENT">Object Abwesenheit_Minuten erzeugen</field>
<next><block type="create" id="Meyg;a7=A:AmFcx(JK7t"><field name="NAME">Abwesenheit_Minuten</field>
<next><block type="comment" id="d5#O+3XtPq;(TXY;T#VE"><field name="COMMENT">Trigger Anwesenheit</field>
<next><block type="on_ext" id="7.;.]I_qHy;|LM6r~cQ0"><mutation items="2"></mutation>
<field name="CONDITION">ne</field><value name="OID0"><shadow type="field_oid" id="tJ4K@d5P/`Ju[Gb+Od!l"><field name="oid">hm-rega.0.19754</field></shadow></value> <value name="OID1"><shadow type="field_oid" id=",cc}|HK)H,%3V0P-Re_8"><field name="oid">hm-rega.0.19755</field></shadow></value> <statement name="STATEMENT"><block type="comment" id="6ux=}[ZGzBP8/%Tv!:M1"><field name="COMMENT">Anwesenheit Stefan UND Nicole</field> <next><block type="controls_if" id="C,5si]khTWf_dY:;{7-_"><value name="IF0"><block type="logic_operation" id="eUazc]-^Kgi8}=W8ahH1"><field name="OP">AND</field> <value name="A"><block type="logic_compare" id="a!8u+F6nW)(O-vb-s3[8"><field name="OP">EQ</field> <value name="A"><block type="get_value" id="6yrv#J]Kr+G!FTkr;B?|"><field name="ATTR">val</field> <field name="OID">hm-rega.0.19754</field></block></value> <value name="B"><block type="logic_boolean" id="=XS;thp6Ba01Tj0a{Bl|"><field name="BOOL">FALSE</field></block></value></block></value> <value name="B"><block type="logic_compare" id="t1nwVbGEXT3tAbZsR^xE"><field name="OP">EQ</field> <value name="A"><block type="get_value" id="_p;Q[:bP/R-V8q=XHhEI"><field name="ATTR">val</field> <field name="OID">hm-rega.0.19755</field></block></value> <value name="B"><block type="logic_boolean" id="e_zC78^-q_b[@Bd,N|p!"><field name="BOOL">FALSE</field></block></value></block></value></block></value> <statement name="DO0"><block type="comment" id="#KJ-Bj:ybC?6*ALw;SkG"><field name="COMMENT">Erhöhe Abwesenheit_Minuten solange um 1, bis Anwesenheit Stefan oder Nicole = wahr</field> <next><block type="controls_whileUntil" id="L==y8Y|RzV[h~y5u%DP("><field name="MODE">UNTIL</field> <value name="BOOL"><block type="logic_operation" id="{8871.k8;sK0)m(lNd/j"><field name="OP">OR</field> <value name="A"><block type="logic_compare" id="/_nrabpHUb3#x=0nAA86"><field name="OP">EQ</field> <value name="A"><block type="get_value" id="5cdDYnDa(fV[N`Q5HdJ,"><field name="ATTR">val</field> <field name="OID">hm-rega.0.19754</field></block></value> <value name="B"><block type="logic_boolean" id="?DP*v#/xwavOCZZsb=s?"><field name="BOOL">TRUE</field></block></value></block></value> <value name="B"><block type="logic_compare" id=";1=Z~-lcjy701;y}4,=6"><field name="OP">EQ</field> <value name="A"><block type="get_value" id="j]rVWmmxTN+cS;;;-WcC"><field name="ATTR">val</field> <field name="OID">hm-rega.0.19755</field></block></value> <value name="B"><block type="logic_boolean" id="r!?AzKazF82mt|*WHK6I"><field name="BOOL">TRUE</field></block></value></block></value></block></value> <statement name="DO"><block type="control_ex" id="GrOHU{G?f*Gu|X}A]:#y"><field name="TYPE">false</field> <field name="CLEAR_RUNNING">FALSE</field> <value name="OID"><shadow type="field_oid" id="2tuv4NjBrBY*-hmJUyr="><field name="oid">javascript.0.Abwesenheit_Minuten</field></shadow> <block type="field_oid" id="(U}5Pj%l|.Mp%}Sdu-gZ"><field name="oid">javascript.0.Abwesenheit_Minuten</field></block></value> <value name="VALUE"><shadow type="logic_boolean" id="{?7!`|ls(xV.qxy9g[+p"><field name="BOOL">TRUE</field></shadow> <block type="math_arithmetic" id="*.~!Q9OWd;/A5]EJSA]0"><field name="OP">ADD</field> <value name="A"><shadow type="math_number" id="#`;v+]xB~ph6-@dhG?G9"><field name="NUM">1</field></shadow> <block type="get_value" id="tw-I:aRT]pa.t1aoQrd/"><field name="ATTR">val</field> <field name="OID">javascript.0.Abwesenheit_Minuten</field></block></value> <value name="B"><shadow type="math_number" id="!GqV;,IN0[]=)*b,t(Jc"><field name="NUM">1</field></shadow></value></block></value> <value name="DELAY_MS"><shadow type="math_number" id="B`I)!%M2(igl!Y5]vb9E"><field name="NUM">0</field></shadow> <block type="math_number" id="g(I7tCYtg/l/wAl~3G4Z"><field name="NUM">60000</field></block></value></block></statement></block></next></block></statement></block></next></block></statement> <next><block type="comment" id=";d8oI-}TK1HlLGi|m`9O"><field name="COMMENT">Trigger Abwesenheit_Minuten</field> <next><block type="on" id="o;z5^hu#VO@@M)i:QuZN"><field name="OID">javascript.0.Abwesenheit_Minuten</field> <field name="CONDITION">ne</field> <statement name="STATEMENT"><block type="comment" id="]X/%8AMd.,;DUO9WMf/]"><field name="COMMENT">Falls Abwesenheit_Minuten gleich 5 Minuten</field> <next><block type="controls_if" id="2ejv7NvXV.#35dY(}*,("><value name="IF0"><block type="logic_compare" id="+OScM(;z~?l]rR1u]b?W"><field name="OP">EQ</field> <value name="A"><block type="get_value" id="[0]n*rKA7G#BtCAuK`+W"><field name="ATTR">val</field> <field name="OID">javascript.0.Abwesenheit_Minuten</field></block></value> <value name="B"><block type="math_number" id="e*Ee,pIqi#j5/(aOmBgp"><field name="NUM">5</field></block></value></block></value> <statement name="DO0"><block type="comment" id="rCWQB/BbS[[5MUgfom1*"><field name="COMMENT">Dann schließe die Tür ab</field> <next><block type="control" id="~}.4ts3|oG}jxo}zQ+ft"><mutation delay_input="false"></mutation> <field name="OID">hm-rpc.0.KEQ085xxxx.1.STATE</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"><block type="logic_boolean" id="z~In[}V3@zq#`DbZ)-3-"><field name="BOOL">FALSE</field></block></value></block></next></block></statement></block></next></block></statement> <next><block type="comment" id="o5+3R`05Gv({zPgzifm)"><field name="COMMENT">Trigger Anwesenheit</field> <next><block type="on_ext" id="qx-K5(jZ_za(S_c:JTWR"><mutation items="2"></mutation> <field name="CONDITION">ne</field> <value name="OID0"><shadow type="field_oid" id="C+Vy^^VVm(#(*k}K0b,{"><field name="oid">hm-rega.0.19754</field></shadow></value> <value name="OID1"><shadow type="field_oid" id="|kDX@K,k*s-st@U@%V@?"><field name="oid">hm-rega.0.19755</field></shadow></value> <statement name="STATEMENT"><block type="comment" id="YgAJ=uhzuq0IJS/%matA"><field name="COMMENT">Anwesenheit Stefan ODER Nicole ist wahr</field> <next><block type="controls_if" id="J+}ay2vYpxG:j@K@9Pz|"><value name="IF0"><block type="logic_operation" id="gF]Wu5aTb63+^odhw-cw"><field name="OP">OR</field> <value name="A"><block type="logic_compare" id="Q2{a=VybNc0q5|%pe#E+"><field name="OP">EQ</field> <value name="A"><block type="get_value" id="!e41(NR7)Ty@6eCn2]{P"><field name="ATTR">val</field> <field name="OID">hm-rega.0.19754</field></block></value> <value name="B"><block type="logic_boolean" id="Kl1[,OO1IcbV6(eGkDxO"><field name="BOOL">TRUE</field></block></value></block></value> <value name="B"><block type="logic_compare" id="3bl8XgVFH-T/RyBq,0KO"><field name="OP">EQ</field> <value name="A"><block type="get_value" id=";}x/sE5C}n!3j~bv76du"><field name="ATTR">val</field> <field name="OID">hm-rega.0.19755</field></block></value> <value name="B"><block type="logic_boolean" id="mZZ#fSq*kG}1S-g_7E#9"><field name="BOOL">TRUE</field></block></value></block></value></block></value> <statement name="DO0"><block type="comment" id="GZTQJQsp~o^dZX3BpC=j"><field name="COMMENT">Setze Abwesenheit_Minuten auf 0</field> <next><block type="control" id="@r(u6I[]_c[6,`z_wRlK"><mutation delay_input="false"></mutation> <field name="OID">javascript.0.Abwesenheit_Minuten</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"><block type="math_number" id="QSt1Fqn;:RSpiH5qNZCK"><field name="NUM">0</field></block></value></block></next></block></statement></block></next></block></statement></block></next></block></next></block></next></block></next></block></next></block></next></block></next></block></xml>
-
Also ich würde das ganz kurz lösen, etwa so:
Export:
! ````
<xml xmlns="http://www.w3.org/1999/xhtml"><block id="d5#O+3XtPq;(TXY;T#VE" type="comment" x="-598" y="-176"><field name="COMMENT">Trigger Anwesenheit</field>
<next><block id="7.;.]I_qHy;|LM6r~cQ0" type="on_ext"><mutation items="2"></mutation>
<field name="CONDITION">ne</field><value name="OID0"><shadow id="tJ4K@d5P/`Ju[Gb+Od!l" type="field_oid"><field name="oid">hm-rega.0.19754</field></shadow></value> <value name="OID1"><shadow id=",cc}|HK)H,%3V0P-Re_8" type="field_oid"><field name="oid">hm-rega.0.19755</field></shadow></value> <statement name="STATEMENT"><block id="6ux=}[ZGzBP8/%Tv!:M1" type="comment"><field name="COMMENT">Anwesenheit Stefan UND Nicole</field> <next><block id="C,5si]khTWf_dY:;{7-_" type="controls_if"><mutation elseif="1"></mutation> <value name="IF0"><block id="eUazc]-^Kgi8}=W8ahH1" type="logic_operation"><field name="OP">AND</field> <value name="A"><block id="a!8u+F6nW)(O-vb-s3[8" type="logic_compare"><field name="OP">EQ</field> <value name="A"><block id="6yrv#J]Kr+G!FTkr;B?|" type="get_value"><field name="ATTR">val</field> <field name="OID">hm-rega.0.19754</field></block></value> <value name="B"><block id="=XS;thp6Ba01Tj0a{Bl|" type="logic_boolean"><field name="BOOL">FALSE</field></block></value></block></value> <value name="B"><block id="t1nwVbGEXT3tAbZsR^xE" type="logic_compare"><field name="OP">EQ</field> <value name="A"><block id="_p;Q[:bP/R-V8q=XHhEI" type="get_value"><field name="ATTR">val</field> <field name="OID">hm-rega.0.19755</field></block></value> <value name="B"><block id="e_zC78^-q_b[@Bd,N|p!" type="logic_boolean"><field name="BOOL">FALSE</field></block></value></block></value></block></value> <statement name="DO0"><block id="#KJ-Bj:ybC?6*ALw;SkG" type="comment"><field name="COMMENT">warte 5min</field> <next><block id="EO*m;lSsRR#SR/w=|rq[" type="timeouts_settimeout"><field name="NAME">timeout</field> <field name="DELAY">5</field> <field name="UNIT">min</field> <statement name="STATEMENT"><block id="rCWQB/BbS[[5MUgfom1*" type="comment"><field name="COMMENT">Dann schließe die Tür ab</field> <next><block id="~}.4ts3|oG}jxo}zQ+ft" type="control"><mutation delay_input="false"></mutation> <field name="OID">hm-rpc.0.KEQ085xxxx.1.STATE</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"><block id="z~In[}V3@zq#`DbZ)-3-" type="logic_boolean"><field name="BOOL">FALSE</field></block></value></block></next></block></statement></block></next></block></statement> <value name="IF1"><block id="j1=pqn[2FJXU;?fa;/X[" type="logic_operation"><field name="OP">OR</field> <value name="A"><block id="LCl5eST4ub[ZT~qLd7ex" type="logic_compare"><field name="OP">EQ</field> <value name="A"><block id="G~i5ZVY~[g#Qi5o)mAB[" type="get_value"><field name="ATTR">val</field> <field name="OID">hm-rega.0.19754</field></block></value> <value name="B"><block id="LAz(|IO:nnPW!yKEuYRM" type="logic_boolean"><field name="BOOL">FALSE</field></block></value></block></value> <value name="B"><block id="Ps,+z?jbeB)FKtvn,://" type="logic_compare"><field name="OP">EQ</field> <value name="A"><block id="SK10Pbzt9Cjzm5GKz!.(" type="get_value"><field name="ATTR">val</field> <field name="OID">hm-rega.0.19755</field></block></value> <value name="B"><block id="qOOvmaMkZNMO^pSKI4.Q" type="logic_boolean"><field name="BOOL">FALSE</field></block></value></block></value></block></value> <statement name="DO1"><block id="dio;rhIOR`PB4Ex.ap@S" type="timeouts_cleartimeout"><field name="NAME">timeout</field> <next><block id="^{_8d1l8Z{4V)!W_A:EI" type="comment"><field name="COMMENT">Dann schließe die Tür auf</field> <next><block id="1?w@OX:T0VXIz#Ik3UFQ" type="control"><mutation delay_input="false"></mutation> <field name="OID">hm-rpc.0.KEQ085xxxx.1.STATE</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"><block id="vhOK-mdieM}(%OF3zE:z" type="logic_boolean"><field name="BOOL">TRUE</field></block></value></block></next></block></next></block></statement></block></next></block></statement></block></next></block></xml>
Die Datenpunkte sind alle aus deinem Blockly! :D :? Habe grad gesehen, dass bei dem "oder" noch beide Variablen auf "unwahr" stehen, die müssen natürlich beide auf "wahr"! Enrico
-
Hallo Enrico,
bewirkt der timeout stop, dass die Tür nicht abgeschlossen wird, sobald ich innerhalb der 5 Minuten wieder anwesend bin?
Wenn ja, dann wäre es perfekt. Und dazu noch deutlich kürzer als meins.
Stefan
-
Das sollte so sein, das habe ich mir jedenfalls so gedacht.
Man kann das Script, wenn es denn funktioniert noch etwas verbessern, in dem man z.B. auf den Duty-Cycle achtet. Dann müsste beim Aufschließen noch ein falls-Block rein, dann nur sendet, falls das Schloss zu ist, also keine Befehlssendung, wenn du während der 5min wieder da bist.
Mal sehen was rantanplan noch für Ideeen hat, er ist der Profi, ich nur der Azubi!
Enrico
-
Mal sehen was rantanplan noch für Ideeen hat, er ist der Profi, ich nur der Azubi! `
Der "Profi" hätte es so ähnlich gemachtUnd den Hinweis auf "nur schalten wenn auch etwas zu schalten ist" hast Du ja auch gemacht. :!:
@Stefan1984 Und nie den Schlüssel vergessen
Grüße
-
Dann haben wir es. Danke ihr zwei.
Gute Nacht.
Stefan