NEWS
Probleme mit Schleife… ??
-
Hallo,
ich bräuchte mal nen kleinen Tipp:
Ich lasse , wenn ein Bewegungsmelder "motion" meldet UND wenn die Variable Lichtautomatik true ist UND wenn es Dunkel ist eine Lampe einschalten…
Nun will ich eigentlich das Licht so lange anlassen, wie bewegung erkannt wird, ansonsten innerhalb einer Minute wieder ausschalten.
Also baue ich mir eine Variable _ausschalten, setzte die auf false.
Dann mache ich eine Schleife, bis _ausschalten = true und prüfe einmal pro Minute ob der Bewegungsmelder ungleich "motion" ist, wenn das Zutrifft, dann wird das Licht ausgeschaltet und _ausschalten auf Wahr gesetzt, damit die Schleife beendet wird...
Aber : Das Licht geht nicht mehr aus, und die Debug Ausgaben werden auch nicht im Log angezeigt..(bis auf die erste...)
<xml xmlns="http://www.w3.org/1999/xhtml"><block type="create" id="6*T}2d^#pp!Nfn/]#8F=" x="-512" y="-462"><field name="NAME">Lichtautomatik</field> <next><block type="on" id="*ISg8|x]{s|1@R3`?xgE"><field name="OID">fhem.0.Bewegung1.state</field> <field name="CONDITION">ne</field> <statement name="STATEMENT"><block type="debug" id="[u_`,.@nty]LHi827s9S"><field name="Severity">log</field> <value name="TEXT"><shadow type="text" id="m7#m_#;OA_CEYrS8c+m}"><field name="TEXT">Ausgelöst</field></shadow></value> <next><block type="controls_if" id="}oaRZ^wU2sm-CF%QI0I5"><value name="IF0"><block type="logic_operation" id="hAKkny#%hi;F)h]UR+.c" inline="false"><field name="OP">AND</field> <value name="A"><block type="logic_operation" id="i|5:S]qgTQG6b]qDRoyC" inline="false"><field name="OP">OR</field> <value name="A"><block type="logic_compare" id="/E)r?Y@tP4,EBTmtF(HS"><field name="OP">EQ</field> <value name="A"><block type="get_value" id="gi+mhS9@aIq=o=Qa0D*/"><field name="ATTR">val</field> <field name="OID">javascript.0.Lichtautomatik</field></block></value> <value name="B"><block type="logic_boolean" id="%|@VFR`@,XGmT:jiLoui"><field name="BOOL">TRUE</field></block></value></block></value> <value name="B"><block type="logic_compare" id="L]0)-U_I7LG~.{Oh5g/k"><field name="OP">EQ</field> <value name="A"><block type="get_value" id="Q{t!wThfbx+?l9ruyiOr"><field name="ATTR">val</field> <field name="OID">fhem.0.Bewegung1_Helligkeit.dark</field></block></value> <value name="B"><block type="math_number" id="#~)]H]WGE{f91MUog9[9"><field name="NUM">1</field></block></value></block></value></block></value> <value name="B"><block type="logic_operation" id="FXFZmqC]4,hbtaWQ(VFJ" inline="false"><field name="OP">AND</field> <value name="A"><block type="logic_compare" id="v):QANJOy}CMs054;Q/t"><field name="OP">EQ</field> <value name="A"><block type="get_value" id="FU+?YONEF74/}m1,6RR;"><field name="ATTR">val</field> <field name="OID">hm-rpc.0.OEQ1147516.1.STATE</field></block></value> <value name="B"><block type="logic_boolean" id="J`~u;O:L^P|Vo#Aa65uF"><field name="BOOL">FALSE</field></block></value></block></value> <value name="B"><block type="logic_compare" id="+aIC?dV.#u~*BXwuu[GT"><field name="OP">EQ</field> <value name="A"><block type="get_value" id="+Jodrl0?x;]`cH7CeEtJ"><field name="ATTR">val</field> <field name="OID">fhem.0.Bewegung1.state</field></block></value> <value name="B"><block type="text" id="W;B(@AkW,IU/N.?Hw|zP"><field name="TEXT">motion</field></block></value></block></value></block></value></block></value> <statement name="DO0"><block type="control" id="+`zl890lh[hkafle-mZz"><mutation delay_input="false"></mutation> <field name="OID">hm-rpc.0.OEQ1147516.1.STATE</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"><block type="logic_boolean" id="u9R0W*`|qT%jZk[v;}bu"><field name="BOOL">TRUE</field></block></value> <next><block type="variables_set" id="l#QnLX,oNHkTLeMzk[*Y"><field name="VAR">_ausschalten</field> <value name="VALUE"><block type="logic_boolean" id="^%-r!xuFG3_^A0]CDqTG"><field name="BOOL">FALSE</field></block></value></block></next></block></statement> <next><block type="debug" id="[`FQ{/r{7oB^}/Fi?U~G"><field name="Severity">log</field> <value name="TEXT"><shadow type="text" id="m7#m_#;OA_CEYrS8c+m}"><field name="TEXT">test</field></shadow> <block type="text_join" id="c(CY[FRA7ozs4I)Q%Ki%" inline="true"><mutation items="2"></mutation> <value name="ADD0"><block type="text" id="Qi[DfOC*;dIlE#Ccd5^G"><field name="TEXT">Vor Schleife ist Ausschalten:</field></block></value> <value name="ADD1"><block type="variables_get" id="z%c|vnF;o6r*Q9_kkIxB"><field name="VAR">_ausschalten</field></block></value></block></value> <next><block type="controls_whileUntil" id="37%[SoH~_zFjIH,4*@`S"><field name="MODE">UNTIL</field> <value name="BOOL"><block type="logic_compare" id="[L4=+5y5l^W@E,ds}G|r"><field name="OP">EQ</field> <value name="A"><block type="variables_get" id="bBNGpxOqMbZ;)8PFqGfu"><field name="VAR">_ausschalten</field></block></value> <value name="B"><block type="logic_boolean" id="_eb~BYDpL1J3hGN=esTa"><field name="BOOL">TRUE</field></block></value></block></value> <statement name="DO"><block type="timeouts_settimeout" id="3Gg-T(=HN[f`FK^h]xyy"><field name="NAME">timeout</field> <field name="DELAY">1</field> <field name="UNIT">min</field> <statement name="STATEMENT"><block type="controls_if" id="(WCzCtwN;h{mqhRWbdCU"><value name="IF0"><block type="logic_compare" id="9n}/AXbA9B)8J(SQO#xb"><field name="OP">NEQ</field> <value name="A"><block type="get_value" id="d:,%!;xh`UlI@dlB0.Cb"><field name="ATTR">val</field> <field name="OID">fhem.0.Bewegung1.state</field></block></value> <value name="B"><block type="text" id="2`A-V;CUy=OBbZ3OpGF-"><field name="TEXT">motion</field></block></value></block></value> <statement name="DO0"><block type="control" id="+MrX*#qIzFrIIW1At#~]"><mutation delay_input="false"></mutation> <field name="OID">hm-rpc.0.OEQ1147516.1.STATE</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"><block type="logic_boolean" id="2U^=?I91%mj~,,Hqq~]%"><field name="BOOL">FALSE</field></block></value> <next><block type="variables_set" id=":./Ykmt(f`:q{R8SHt{J"><field name="VAR">_ausschalten</field> <value name="VALUE"><block type="logic_boolean" id="ky0XB0_/w-G(v[oFO}R,"><field name="BOOL">TRUE</field></block></value></block></next></block></statement> <next><block type="debug" id="2ET0%,+(oBN5QA,t@GId"><field name="Severity">log</field> <value name="TEXT"><shadow type="text" id="m7#m_#;OA_CEYrS8c+m}"><field name="TEXT">test</field></shadow> <block type="text_join" id="5Y6aSP|9|B59p8TtYG+0"><mutation items="2"></mutation> <value name="ADD0"><block type="text" id="04.EbH]~Rse1S@URRgWJ"><field name="TEXT">In Schleife ist Ausschalten:</field></block></value> <value name="ADD1"><block type="variables_get" id="#58wG^_gpu4q2HUrGF/q"><field name="VAR">_ausschalten</field></block></value></block></value></block></next></block></statement></block></statement> <next><block type="debug" id=":{s_?Y|?/@HbS!9EO^`m"><field name="Severity">log</field> <value name="TEXT"><shadow type="text" id="m7#m_#;OA_CEYrS8c+m}"><field name="TEXT">test</field></shadow> <block type="text_join" id="ZHq*#/X+}L;gI%~5HgOw"><mutation items="2"></mutation> <value name="ADD0"><block type="text" id="*f1=Ua~g|,|dWpgLyBPm"><field name="TEXT">Schleife ist beendet</field></block></value> <value name="ADD1"><block type="variables_get" id=".a/)]CY6(BC}F:Th]KO@"><field name="VAR">_ausschalten</field></block></value></block></value></block></next></block></next></block></next></block></next></block></statement></block></next></block></xml>
-
Ganz andere Frage… warum löst du nicht bei Motion einen Zähler aus der jedesmal auf 1 Minute steht. Und wenn der Zähler einmal runtergezählt hat auf 0 Sekunden dann geht das Licht aus.
-
Hm.. gute Frage.. Ich wüsste ehrlichgesagt gar nicht, wie ich das in Blockly umsetzen könnte…
-
Schleifen sollte man vermeiden, wenn es geht. Für das Problem werden keine Schleifen benötigt.
! ````
<xml xmlns="http://www.w3.org/1999/xhtml"><block type="variables_set" id="U,v}AxcbrG,o}/9r)R!" x="-438" y="-287"><field name="VAR">licht</field>
<value name="VALUE"><block type="get_value" id="7.:eScCos^))#So/]I7"><field name="ATTR">val</field>
<field name="OID">ID auswählen</field></block></value>
<next><block type="comment" id="bl5[_A@=Q=VNvb.TPlA"><field name="COMMENT">ID Bewegung</field> <next><block type="on" id="^E4sfXy
;J%7%N7!~KYN"><field name="OID">Object ID</field>
<field name="CONDITION">ne</field><statement name="STATEMENT"><block type="controls_if" id="lZ(wkj5=qNXN;_`3W3EM"><mutation else="1"></mutation> <value name="IF0"><block type="logic_operation" id="E=HM_HQk,dla`gsD4{H:"><field name="OP">AND</field> <value name="A"><block type="on_source" id="PGl2?Mdj=ftaduMP.DcR"><field name="ATTR">state.val</field></block></value> <value name="B"><block type="logic_operation" id="@TpyiC./.ECP0lF-~1?w"><field name="OP">AND</field> <value name="A"><block type="get_value" id="Y(b=sP`q47riGyA,XksN"><field name="ATTR">val</field> <field name="OID">ID auswählen</field></block></value> <value name="B"><block type="get_value" id="HxQ1+yJnLg==AA(b^I,["><field name="ATTR">val</field> <field name="OID">ID auswählen</field></block></value></block></value></block></value> <statement name="DO0"><block type="timeouts_cleartimeout" id="hn7o@X`)MPX_2^EM:0iI"><field name="NAME">timeout</field> <next><block type="controls_if" id="K94}j.-.@0H_Qv0Gtd|k"><value name="IF0"><block type="logic_negate" id="#V;!K4AL,EVuI|e#@TR/"><value name="BOOL"><block type="variables_get" id="A.cSD(Zg%#/:Wc^b_H2?"><field name="VAR">licht</field></block></value></block></value> <statement name="DO0"><block type="control" id="uE]kwP%Z?J[RCFy42a,7"><mutation delay_input="false"></mutation> <field name="OID">Object ID</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"><block type="logic_boolean" id="a6o!G0N:bhTy-.[j1666"><field name="BOOL">TRUE</field></block></value></block></statement></block></next></block></statement> <statement name="ELSE"><block type="timeouts_settimeout" id="26Qh!Rpw,HOnvZWR)fBO"><field name="NAME">timeout</field> <field name="DELAY">1</field> <field name="UNIT">min</field> <statement name="STATEMENT"><block type="controls_if" id="E|Lu6baONWBoanxvjKfU"><value name="IF0"><block type="variables_get" id="Vk/QUZ21UvvUZ5Suw0,G"><field name="VAR">licht</field></block></value> <statement name="DO0"><block type="control" id="fN9ODQfdy]0,i1~n~SwP"><mutation delay_input="false"></mutation> <field name="OID">Object ID</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"><block type="logic_boolean" id="G{|*343fVJg|E6]vxm2Q"><field name="BOOL">FALSE</field></block></value></block></statement></block></statement></block></statement></block></statement> <next><block type="comment" id="PlNbAyN^w;+~0DlYraf?"><field name="COMMENT">ID Licht</field> <next><block type="on" id="Qvir^Iyye;}YSbLTY*En"><field name="OID">Object ID</field> <field name="CONDITION">any</field> <field name="ACK_CONDITION">true</field> <statement name="STATEMENT"><block type="variables_set" id="8u+DfM@(Gb|Gpa*5V%gb"><field name="VAR">licht</field> <value name="VALUE"><block type="on_source" id="*z`p%tJ(Mc`=dl6(%0Q%"><field name="ATTR">state.val</field></block></value></block></statement></block></next></block></next></block></next></block></next></block>
<block type="comment" id="2aV7tF/;%?p=WCSi2.Nl" x="-138" y="-263"><field name="COMMENT">ID Licht</field></block>
<block type="comment" id="8FWPRKjHjiILtXhLpktJ" x="12" y="-162"><field name="COMMENT">ID dunkel</field></block>
<block type="comment" id="YuX%ZN/@}XH3WgMto.~!" x="337" y="-162"><field name="COMMENT">ID Lichtautomatik</field></block>
<block type="comment" id="V~Zi4,Y5gD!CJ*}rZQ:W" x="-213" y="113"><field name="COMMENT">ID Licht</field></block></xml> -
Sehr geil..
ich musste allerdings die Abfrage des Bewegungsmelder von True auf "Wert von Melder = motion" abändern, da die Hue-Melder "motion" oder "nomotion" zurückgeben.
Wäre es jetzt noch möglich, am Anfang des Scripts, die Objekte des Bewegungsmelders und der Lampe irgendwie in Variablen zu übergeben, damit man nicht an gefühlt 10 Stellen die richtigen Objekte einsetzen muss ? Dann könnte man das Script nämlich leichter als Vorlage für andere Räume nutzen.