NEWS
[Gelöst] HUE Motion Sensor Lampe an/aus -> Problem Haustier
-
@Sanweb
Bin zwar nicht "der Experte"...Das Problem wird sein, dass sich der Zustand nicht ändert.
Wenn Du drückst und der Wert war "1002" ist er danach immer noch "1002" - wenn auch "aktualisiert".
Du könntest Versuchen Dein Blockly auf "aktualisiert" statt "geändert" zu stellen (weiß leider nicht wie Dein "Bewegungsobjekt" sich verhält/aktualisiert, könnte zu Problemen führen ).
Falls es damit klappt, kannste das ganze "falls knopf gedrückt" auch weglassen, dann greift ja der Stopp am Anfang.
Übrigens, wieso nutzt Du eine Variable, statt direkt mit dem Wert zu vergleichen?
Ist meiner Meinung nach nicht nötig.
Thema: Ressourcen schonen.Falls es mit "aktualisiert" nicht klappt, könntest Du in das "falls buttonpressed" ein "setze buttonpressed auf 0" rein packen, dann stellt ein erneutes Drücken eine Änderung dar ("buttonpressed" muss dafür natürlich schreibbar sein).
-
@padrino
Hab es eben einmal ausprobiert und das Script soweit geändert, das ich die Variable nun weg gelassen habe und nun direkt mit dem Wert vergleiche.Der Datenpunkt "buttonpressed" steht stets IMMER auf 0, sofern KEINE Aktion mit dem Button erfolgt. Erst wenn der Button z.B. kurz gedrückt wird, springt er von "0" auf "1002" und dann wieder automatisch zurück auf "0". Also "1002" wird von Beginn bis Ende des "Drückvorganges" gesetzt, wird zu lange gedrückt, erscheint der Wert "1003".
Bei diesem Verhalten musste ich davon ausgehen, das sich der Wert "wird ändert" von Objekt ID "Sensor 15 buttonpressed" so korrekt erst einmal ist.
-
@Sanweb
Wenn er sich selbst ändertDenke aber, Du kannst wirklich das "falls buttonpressed" weglassen.
Denn, wenn sich der Status ändert, bei gedrückt, gibt es den stopp, und selbst wenn Status kurz drauf auf "0" geht, wird ein weiteres Stopp nicht schaden.
Wie sah denn das funktionierende Skript (ohne den Button) aus?
-
@padrino
Also das original sieht aktuell so aus:
und funktioniert super (solange man sich im Badezimmer ein bischen bewegt!).Wenn ich keine "Falls" Option ins Spiel bringe, sondern nur "Falls Objekt sich ändert" und dort den Bewegungssensor und den Button benenne, müsste ich innerhalb des Timeouts entweder eine Bewegung produzieren, oder den Button regelmäßig drücken (Tot-Mann's-Knopf), was ja auch nicht Sinn der Sache ist. Wenn ich den Button drücke,, ist der Status "1002" und springt nach loslassen des Buttos wieder auf "0". Da er sich dann nicht mehr ändert, würde der Timeout in der vordefinierten Zeit auslösen.
Also dachte ich mir, das ich mit Werten arbeiten muss, die verglichen werden, daher kam ich auf die Variable "ButtonKlick", wenn die einmal erkannt wird, sollte das Licht dauerhaft anbleiben, unabhängig davon, ob der Bewegungssensor etwas registriert oder nicht. Bei erneuten betätigen des Türkontaktes tritt ja dann automatisch ein Reset ein und das Licht schaltet dann ja nach dem timeout wieder aus.
So erst einmal der Plan ...
-
@Sanweb
Ah, ja, ok.Wie wäre es mit
- Falls Wert(rot) = 1002 setze Variable X auf true, stop timeout
- sonst falls ergänzen um ... & nicht X
- im Teil mit dem Türsensor packste noch ein "setze X auf false"
-
Scheine irgendwie zu blöd dafür zu sein ...
HAbe mir mal eine manipulierbare variable des Buttons genommen, welche nicht gleich wild umherspringt beim drücken und los lassen des Buttons. Ergebnis: Wird der Button nicht gedrückt, funktioniert alles über wie gewohnt über den Bewegungsmelder. Wird er gedrückt, schaltet das Licht aus (soweit ja gut), aber wird der Türkontakt erneut ausgelöst (Verlassen des Raumes) bleibt das Licht an. Mann muss erst den reulären Lichtschalter betätigen (oder Alexa darum bitten) um das Licht zu löschen.
<xml xmlns="https://developers.google.com/blockly/xml"> <variables> <variable type="timeout" id="timeout">timeout</variable> </variables> <block type="comment" id="j^MxUgu8?7{mlu]rA:Tf" x="685" y="-2361"> <field name="COMMENT">Bewegung</field> <next> <block type="on_ext" id="Vo2d_MmTq==sR.4ZWR$O"> <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="Czsj]a1TUk|+~h~ORP[b"> <field name="oid">deconz.0.Sensors.2.presence</field> </shadow> </value> <value name="OID1"> <shadow type="field_oid" id="D~cxI@R3d9Qx8WQ#e+*e"> <field name="oid">deconz.0.Sensors.15.buttonevent</field> </shadow> </value> <statement name="STATEMENT"> <block type="timeouts_cleartimeout" id=".AnY7,uE8z6%68I_9r!J"> <field name="NAME">timeout</field> <next> <block type="controls_if" id="+RZ{~*8u`F-{891w*mat"> <mutation elseif="1"></mutation> <value name="IF0"> <block type="logic_compare" id="MN?aguGn@4Va*isSfJlE"> <field name="OP">EQ</field> <value name="A"> <block type="get_value" id="Q7EW:c|QXZG`n]0EAC|{"> <field name="ATTR">val</field> <field name="OID">deconz.0.Sensors.15.buttonevent</field> </block> </value> <value name="B"> <block type="math_number" id="L}L-PyHNK43~ZBR#G]Yv"> <field name="NUM">1002</field> </block> </value> </block> </value> <statement name="DO0"> <block type="timeouts_cleartimeout" id="rpT/q:9t@dh:zAD1RZRa"> <field name="NAME">timeout</field> </block> </statement> <value name="IF1"> <block type="logic_negate" id="C4LtUkpka$={[9/VCOva"> <value name="BOOL"> <block type="on_source" id="+d+_sgAE*[8U#u/8-`=!"> <field name="ATTR">state.val</field> </block> </value> </block> </value> <statement name="DO1"> <block type="timeouts_settimeout" id="b8c{g!jXe$]dFOh^QXP["> <field name="NAME">timeout</field> <field name="DELAY">30</field> <field name="UNIT">sec</field> <statement name="STATEMENT"> <block type="comment" id="vvNPR8V{Zt(;|2~TmxfO"> <field name="COMMENT">Licht ein?</field> <next> <block type="controls_if" id="ub/zHL/V?|rXYe|9Al6y"> <value name="IF0"> <block type="logic_operation" id="sRWf3Sh^D=g_?X6r1GMv"> <field name="OP">AND</field> <value name="A"> <block type="get_value" id="FrcZZNPN%#R(^G6NN|LM"> <field name="ATTR">val</field> <field name="OID">sonoff.0.Badezimmerlicht.POWER</field> </block> </value> <value name="B"> <block type="logic_negate" id="F~[{i96epeX5jd2{rmv%"> <value name="BOOL"> <block type="get_value" id="ejT!#TZx@6fmiw7y+(:;"> <field name="ATTR">val</field> <field name="OID">deconz.0.Sensors.15.buttonevent</field> </block> </value> </block> </value> </block> </value> <statement name="DO0"> <block type="control" id="$86HuP~`N{LaY4I7md,3"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">sonoff.0.Badezimmerlicht.POWER</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="logic_boolean" id="1UP*Me:;gW3cC?+vbh94"> <field name="BOOL">FALSE</field> </block> </value> </block> </statement> </block> </next> </block> </statement> </block> </statement> </block> </next> </block> </statement> <next> <block type="comment" id="#NX^q_VjK@F9iUWAWPA}"> <field name="COMMENT">Tür öffnet</field> <next> <block type="on_ext" id="/V]t?I@Gjkc^eMR_n#)|"> <mutation xmlns="http://www.w3.org/1999/xhtml" items="1"></mutation> <field name="CONDITION">gt</field> <field name="ACK_CONDITION"></field> <value name="OID0"> <shadow type="field_oid" id="z.rf;Ppk-,EU=pVr7wQN"> <field name="oid">deconz.0.Sensors.5.open</field> </shadow> </value> <statement name="STATEMENT"> <block type="comment" id="S+(!XQne8~@_%_R_(8!Q"> <field name="COMMENT">dunkel und Licht aus?</field> <next> <block type="controls_if" id="!muI`Yamueo@M|l(k(*v"> <value name="IF0"> <block type="logic_operation" id="F[YWS@t_RdTz=1pg)U=J" inline="false"> <field name="OP">AND</field> <value name="A"> <block type="logic_compare" id="xlS/H6h9B::cLn|J=^i+"> <field name="OP">EQ</field> <value name="A"> <block type="get_value" id="2NG.@e5:!/WW%;U$]|v`"> <field name="ATTR">val</field> <field name="OID">deconz.0.Sensors.1.daylight</field> </block> </value> <value name="B"> <block type="logic_boolean" id="/:tUU*Q~(.qOA?h~O9ft"> <field name="BOOL">FALSE</field> </block> </value> </block> </value> <value name="B"> <block type="logic_negate" id="QzU)|^M:2SQsEF%CPjDi"> <value name="BOOL"> <block type="get_value" id="+gD/U?X!ZU|7OJiYPclr"> <field name="ATTR">val</field> <field name="OID">sonoff.0.Badezimmerlicht.POWER</field> </block> </value> </block> </value> </block> </value> <statement name="DO0"> <block type="control" id=":TjQf-tu@Q#kgie^P)@o"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">sonoff.0.Badezimmerlicht.POWER</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="logic_boolean" id="*ClGOYPry2taM^E+%*n#"> <field name="BOOL">TRUE</field> </block> </value> <next> <block type="control" id="N[Wn)HQ)B|e`NIk_{%^$"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">deconz.0.Sensors.15.buttonevent</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="math_number" id="g24C1K?yk,s{q;E1_vE^"> <field name="NUM">0</field> </block> </value> </block> </next> </block> </statement> </block> </next> </block> </statement> </block> </next> </block> </next> </block> </next> </block> </xml>
-
@Sanweb
"Blind" zu basteln ist für mich immer schwierig...
Versuch es mal damit (Code ist unten):
<xml xmlns="https://developers.google.com/blockly/xml"> <variables> <variable id="I0Yf8M3QAcZ{lh:%~V6_">X</variable> <variable type="timeout" id="timeout">timeout</variable> </variables> <block type="comment" id="j^MxUgu8?7{mlu]rA:Tf" x="685" y="-2361"> <field name="COMMENT">Bewegung</field> <next> <block type="on_ext" id="Vo2d_MmTq==sR.4ZWR$O"> <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="Czsj]a1TUk|+~h~ORP[b"> <field name="oid">deconz.0.Sensors.2.presence</field> </shadow> </value> <value name="OID1"> <shadow type="field_oid" id="D~cxI@R3d9Qx8WQ#e+*e"> <field name="oid">deconz.0.Sensors.15.buttonevent</field> </shadow> </value> <statement name="STATEMENT"> <block type="timeouts_cleartimeout" id=".AnY7,uE8z6%68I_9r!J"> <field name="NAME">timeout</field> <next> <block type="controls_if" id="+RZ{~*8u`F-{891w*mat"> <mutation elseif="1"></mutation> <value name="IF0"> <block type="logic_compare" id="a`FAZUm.0S=g+(-d75=="> <field name="OP">EQ</field> <value name="A"> <block type="on_source" id="ikJdPHuN/r_sUhC_8z[X"> <field name="ATTR">state.val</field> </block> </value> <value name="B"> <block type="math_number" id="Hpe8l%6h9;.8Zv!5uo@="> <field name="NUM">1002</field> </block> </value> </block> </value> <statement name="DO0"> <block type="variables_set" id="`@%/xVvi/mJ1VgyS%2~Q"> <field name="VAR" id="I0Yf8M3QAcZ{lh:%~V6_">X</field> <value name="VALUE"> <block type="logic_boolean" id="d_z{;C{MAiW;EKo=/il8"> <field name="BOOL">TRUE</field> </block> </value> <next> <block type="timeouts_cleartimeout" id="PUO?G1f[%s]1g?=~:b7v"> <field name="NAME">timeout</field> </block> </next> </block> </statement> <value name="IF1"> <block type="logic_operation" id="cbX|!~f6(oV88sundj)u"> <field name="OP">AND</field> <value name="A"> <block type="logic_negate" id="C4LtUkpka$={[9/VCOva"> <value name="BOOL"> <block type="on_source" id="+d+_sgAE*[8U#u/8-`=!"> <field name="ATTR">state.val</field> </block> </value> </block> </value> <value name="B"> <block type="logic_negate" id="An.9KZR+0C*LGDj[ENv]"> <value name="BOOL"> <block type="variables_get" id="#:aCZ:-uk|KYsrPP#(Vk"> <field name="VAR" id="I0Yf8M3QAcZ{lh:%~V6_">X</field> </block> </value> </block> </value> </block> </value> <statement name="DO1"> <block type="timeouts_settimeout" id="b8c{g!jXe$]dFOh^QXP["> <field name="NAME">timeout</field> <field name="DELAY">30</field> <field name="UNIT">sec</field> <statement name="STATEMENT"> <block type="comment" id="vvNPR8V{Zt(;|2~TmxfO"> <field name="COMMENT">Licht ein?</field> <next> <block type="controls_if" id="ub/zHL/V?|rXYe|9Al6y"> <value name="IF0"> <block type="logic_operation" id="sRWf3Sh^D=g_?X6r1GMv"> <field name="OP">AND</field> <value name="A"> <block type="get_value" id="FrcZZNPN%#R(^G6NN|LM"> <field name="ATTR">val</field> <field name="OID">sonoff.0.Badezimmerlicht.POWER</field> </block> </value> <value name="B"> <block type="logic_negate" id="F~[{i96epeX5jd2{rmv%"> <value name="BOOL"> <block type="get_value" id="ejT!#TZx@6fmiw7y+(:;"> <field name="ATTR">val</field> <field name="OID">deconz.0.Sensors.15.buttonevent</field> </block> </value> </block> </value> </block> </value> <statement name="DO0"> <block type="control" id="$86HuP~`N{LaY4I7md,3"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">sonoff.0.Badezimmerlicht.POWER</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="logic_boolean" id="1UP*Me:;gW3cC?+vbh94"> <field name="BOOL">FALSE</field> </block> </value> </block> </statement> </block> </next> </block> </statement> </block> </statement> </block> </next> </block> </statement> <next> <block type="comment" id="#NX^q_VjK@F9iUWAWPA}"> <field name="COMMENT">Tür öffnet</field> <next> <block type="on_ext" id="/V]t?I@Gjkc^eMR_n#)|"> <mutation xmlns="http://www.w3.org/1999/xhtml" items="1"></mutation> <field name="CONDITION">gt</field> <field name="ACK_CONDITION"></field> <value name="OID0"> <shadow type="field_oid" id="z.rf;Ppk-,EU=pVr7wQN"> <field name="oid">deconz.0.Sensors.5.open</field> </shadow> </value> <statement name="STATEMENT"> <block type="variables_set" id="3PSjZPC*-BBEVrMeSgvm"> <field name="VAR" id="I0Yf8M3QAcZ{lh:%~V6_">X</field> <value name="VALUE"> <block type="logic_boolean" id="H0N3e-dqcA[Qlj[O8UPu"> <field name="BOOL">FALSE</field> </block> </value> <next> <block type="comment" id="S+(!XQne8~@_%_R_(8!Q"> <field name="COMMENT">dunkel und Licht aus?</field> <next> <block type="controls_if" id="!muI`Yamueo@M|l(k(*v"> <value name="IF0"> <block type="logic_operation" id="F[YWS@t_RdTz=1pg)U=J" inline="false"> <field name="OP">AND</field> <value name="A"> <block type="logic_compare" id="xlS/H6h9B::cLn|J=^i+"> <field name="OP">EQ</field> <value name="A"> <block type="get_value" id="2NG.@e5:!/WW%;U$]|v`"> <field name="ATTR">val</field> <field name="OID">deconz.0.Sensors.1.daylight</field> </block> </value> <value name="B"> <block type="logic_boolean" id="/:tUU*Q~(.qOA?h~O9ft"> <field name="BOOL">FALSE</field> </block> </value> </block> </value> <value name="B"> <block type="logic_negate" id="QzU)|^M:2SQsEF%CPjDi"> <value name="BOOL"> <block type="get_value" id="+gD/U?X!ZU|7OJiYPclr"> <field name="ATTR">val</field> <field name="OID">sonoff.0.Badezimmerlicht.POWER</field> </block> </value> </block> </value> </block> </value> <statement name="DO0"> <block type="control" id=":TjQf-tu@Q#kgie^P)@o"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">sonoff.0.Badezimmerlicht.POWER</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="logic_boolean" id="*ClGOYPry2taM^E+%*n#"> <field name="BOOL">TRUE</field> </block> </value> </block> </statement> </block> </next> </block> </next> </block> </statement> </block> </next> </block> </next> </block> </next> </block> </xml>
-
-
@paul53
Passt meins nicht? -
@padrino sagte:
Passt meins nicht?
Wenn das stimmt ?
@padrino sagte in [Gelöst] HUE Motion Sensor Lampe an/aus -> Problem Haustier:
Wenn Du drückst und der Wert war "1002" ist er danach immer noch "1002" - wenn auch "aktualisiert".
, dann nicht.
-
@paul53
Ich war doch schon weiter.
Aber es interessiert mich, lerne gerne (aus Fehlern). -
Beide Scripte funktionieren leider nicht. Ich habe beide Scripte erstellt und als erstes erst einmal getestet, wenn ich die Tür auf und zu mache, ob das Licht an geht und sich nach dem Timeout wieder ausschaltet. Ergebnis war: Tür ging auf und zu, Licht ging an und nicht wieder aus ... Der Datenpunkt von "Buttonevent" stand vor öffnen der Tür auf 1002, auch wenn ich ihn händisch mal auf 0 setze, ist das Ergebnis gleich, das Licht geht nicht wieder aus bei Tür auf und zu machen ohne Nutzung des Buttons.
-
@Sanweb sagte:
das Licht geht nicht wieder aus bei Tür auf und zu machen ohne Nutzung des Buttons.
Dann logge mal das Verhalten von "buttonevent" mit einem Debug output Wert vor der Abfrage auf Wert == 1002.
-
@Sanweb sagte:
Der Datenpunkt "buttonpressed" steht stets IMMER auf 0, sofern KEINE Aktion mit dem Button erfolgt. Erst wenn der Button z.B. kurz gedrückt wird, springt er von "0" auf "1002" und dann wieder automatisch zurück auf "0". Also "1002" wird von Beginn bis Ende des "Drückvorganges" gesetzt, wird zu lange gedrückt, erscheint der Wert "1003".
Das widerspricht der Aussage:
@Sanweb sagte in [Gelöst] HUE Motion Sensor Lampe an/aus -> Problem Haustier:Der Datenpunkt von "Buttonevent" stand vor öffnen der Tür auf 1002,
Ich habe irgendwo gelesen, dass 1002 "loslassen" und 1000 "drücken" entspricht. Dann müsste mit 1000 verglichen werden.
EDIT: Kann man nicht Release after press verwenden ?
-
@paul53
es Widerspricht nicht meiner Aussage, da ich in meinem Beitrag z.B. vom 18.08. z.B. den Datenpunkt "sensor 15 buttonpressed" zuerst benutzt hatte, welcher nicht stehen blieb und beim drücken den Wert "1002" gab und beim los lassen den Wert "0" widergab. Da ich mit diesem "gespringe" nicht zurecht kam, schrieb ich am 20.08., das ich auf den manipulierbaren Datenpunkt "Sensor 15 buttonevent" gewechselt bin. Diesen Datenpunkt hast Du auch in Deinem Scriptvorschlag ja auch benutzt.Habe eben einmal das Script auf den alten Datenpunkt "Sensor 15 buttonpressed" abgeändert und neu gestestet. Den Datenpunkt " ... release_press" wäre sicherlich auch verwendbar, der wird aber so schnell von iobroker aktuallisiert, das ich auf Anhie nicht sagen könnte, ob er überhaupt auf "true" gestanden hat ....
Müsste ich dennoch jetzt vergleichen, ob "1002" oder "0" steht, da nun "Objekt wurde aktuallisiert" benutzt wird? DA es funktioniert, wohl offenbar nicht ...
Funktioniert jetzt tadellos wie es soll. Vielen Dank für deine/eure Hilfe.
Lieber Paul, bei Dir bin ich mittlerweile sehr erstaunt, wie Du Dir "mal eben so" die ganzen Scripte anscheinend regelrecht aus dem "Ärmel schüttelst" ...
"
-
-
-
@Sanweb sagte:
Muss da dennoch der vergleich auf "0" mit rein? Also mit "sonst setzte duschen auf falsch"?
Nein, "setze duschen auf falsch" darf nur beim Tür öffnen erfolgen.
-
@Sanweb
Könntest Du mein Skript mal mit dem richtigen Datenpunkt testen, da mich interessiert, ob es läuft.
Finde auch das von Paul sind nicht soviel anders aus. -