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. 😉

    2044_bildschirmfoto_2017-12-30_um_22.42.09.png

    ! ````
    // 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


  • @rantanplan:

    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> 
    
  • Most Active

    Also ich würde das ganz kurz lösen, etwa so:

    2216_abschlie_en.jpg

    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

  • Most Active

    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


  • @RappiRN:

    Mal sehen was rantanplan noch für Ideeen hat, er ist der Profi, ich nur der Azubi! 😄 `
    Der "Profi" hätte es so ähnlich gemacht 😉

    Und 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

Suggested Topics

1.8k
Online

38.4k
Users

43.8k
Topics

612.3k
Posts