NEWS
Blockly: Garagentor automatisch schließen lassen
-
Hallo!
Ich steige gerade erst wieder in ioBroker ein und versuche mich an einem Blockly Script welches mein Garagentor nach einer Zeit X schließt, wenn man (Frau) es selbst vergessen hat.
Hierzu habe ich einen Homematic Garagentorantrieb mit Lichtschranke und einen Bewegungsmelder. Meine bisherige Logik war wie folgt: Sobald eine Statusänderung am Bewegungsmelder erfolgt wird geprüft: 1. Ist der Dummyschalter für die Schließautomatik an, 2. Ist das Garagentor nicht geschlossen, 3. Ist in der Garage keiner anwesend (keine Bewegung).
Wenn das eintritt und sich binnen 4 Minuten nichts ändert, soll das Tor geschlossen werden.
Jetzt ist es aber so, dass wenn alle Bedingungen erfüllt sind zwar der Impuls kommt das Tor zu schließen. Wenn allerdings innerhalb dieser 4 Minuten doch jemand wieder die Garage betritt, wird der Timer nicht zurück gesetzt sondern trotzdem das Tor runtergefahren, zumindest für 10% und stoppt dann.
Wo ist mein Fehler? Danke euch vorab!!<xml xmlns="https://developers.google.com/blockly/xml"> <variables> <variable type="timeout" id="timeout">timeout</variable> </variables> <block type="on_ext" id="Rc,RDdc5.6wG*^S365kb" x="63" y="213"> <mutation xmlns="http://www.w3.org/1999/xhtml" items="1"></mutation> <field name="CONDITION">any</field> <field name="ACK_CONDITION"></field> <value name="OID0"> <shadow type="field_oid" id="8hnUfm/?(yNLdqZYZioq"> <field name="oid">hm-rpc.1.000920C99B440F.1.MOTION</field> </shadow> </value> <statement name="STATEMENT"> <block type="controls_if" id="Mn:.=S/[gc[Thv5A|uXj"> <value name="IF0"> <block type="logic_multi_and" id="bfL7b$l[:-;i~hIrK|wL"> <mutation xmlns="http://www.w3.org/1999/xhtml" items="3"></mutation> <value name="AND0"> <block type="logic_compare" id="*W{+nK5#|V!oF:.8L*s+"> <field name="OP">EQ</field> <value name="A"> <block type="get_value" id="[r~|BdaEIVXhiu6{JM5X"> <field name="ATTR">val</field> <field name="OID">0_userdata.0.Garage_Autoclose</field> </block> </value> <value name="B"> <block type="logic_boolean" id="q=1%9$-8B}Z0U8%28k#)"> <field name="BOOL">TRUE</field> </block> </value> </block> </value> <value name="AND1"> <block type="logic_compare" id="Qq5B,Q|db2el8:aKjBWq"> <field name="OP">EQ</field> <value name="A"> <block type="get_value" id="nx62AQcvUCmy#c@$Asax"> <field name="ATTR">val</field> <field name="OID">hm-rpc.1.000920C99B440F.1.MOTION</field> </block> </value> <value name="B"> <block type="logic_boolean" id="e1x]U3dj#0ZIAq`Xk+Gd"> <field name="BOOL">FALSE</field> </block> </value> </block> </value> <value name="AND2"> <block type="logic_compare" id="_7d#`#s};ypO29N9upu6"> <field name="OP">NEQ</field> <value name="A"> <block type="get_value" id="mS]!-(O0uD9,u}`A#`td"> <field name="ATTR">val</field> <field name="OID">hm-rpc.1.002420C995C575.1.DOOR_STATE</field> </block> </value> <value name="B"> <block type="math_number" id="BV9G(8uj+VE?A.^me=a5"> <field name="NUM">0</field> </block> </value> </block> </value> </block> </value> <statement name="DO0"> <block type="comment" id="JQ!5`+_8gzc?@iT^Mi|C"> <field name="COMMENT">Nach 6 min ohne Bewegung automatisch schließen</field> <next> <block type="comment" id="BP05f8xMWyF:n[eD!g7H"> <field name="COMMENT">2 min davon vorgegeben vom Bewegungsmelder</field> <next> <block type="timeouts_settimeout" id="w?3#}$|H,rD_$OA}6lO="> <field name="NAME">timeout</field> <field name="DELAY">4</field> <field name="UNIT">min</field> <statement name="STATEMENT"> <block type="control" id="eyPVpw@h|Otg_5=%p_iG"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">hm-rpc.1.002420C995C575.1.DOOR_COMMAND</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="math_number" id="5O?]J$QiwJydKxtg5!`Q"> <field name="NUM">3</field> </block> </value> </block> </statement> </block> </next> </block> </next> </block> </statement> </block> </statement> </block> <block type="logic_multi_and" id="maR8$Fi].Y#DT)cpqr?b" x="261" y="396"> <mutation xmlns="http://www.w3.org/1999/xhtml" items="2"></mutation> </block> </xml>
-
@lastactionhero mach mal in Deinem Blockly diesen Block bitte weg
-
@lastactionhero und du müsstest eine "stop timeout" Zeile einbauen bevor du den Timeout auslöst
Wird das ganze dann noch mal angetriggert, kann es so den zuvor gestarteten , ja noch laufenden timeout beenden.Ich nehme hoffentlich richtig an das dieser dann nicht ausgeführt wird
-
Hab ich gemacht, danke schonmal für den wertvollen Input! Jetzt passiert nichtsmehr. Tor geht garnicht mehr runter...
wobei ich grade sehe, dass der stop timeout VOR den anderen muss. Das muss ich aber morgen weiter testen...
-
@lastactionhero den stop timeout_garagentor direkt über Ausführen timeout .. setzen, nicht in den sonst zweig
-
hab ich eben auch schon festgestellt, allerdings, was passiert damit, wenn nun der timeout schon ausgelöst wurde, und wieder einer in die Garage rennt? Die Bedingung für den Stop-Timeout sind damit ja nicht erfüllt (Dummy ist an, Garage ist nicht zu, aber motion true) damit kommt es nicht zum stop-timeout.
Heißt man müsste noch eine zweite Falls Verknüpfung machen mit Motion True und auch einen Stop-Timeout da rein packen?
-
@lastactionhero sagte in Blockly: Garagentor automatisch schließen lassen:
Heißt man müsste noch eine zweite Falls Verknüpfung machen mit Motion True und auch einen Stop-Timeout da rein packen?
ich denke ja. Dann müsste man aber noch mal über den Auslöser nachdenken. Hat der Bewegungsmelder einen Status "Bewegung erkannt" und "Jetzt ist wieder ruhig" ? Sieht so aus als wäre das wahr und falsch
Dann einfach in den sonst-zweig.
Besser wäre "wenn falsch dann Timer anlaufen lassen" und "wenn wahr, timer stoppen" -
Ja, der Melder hat nur Motion: true/false
Aber, müsste es nicht auch so gehen?
Sobald der Melder seinen Status ändert, in was auch immer, wird der Timer gestoppt. Solange Bewegung oder eben keine Bewegung erkannt wird, bleibt der Status identisch. Ist Motion true wird keine Bedingung für einen neuen Timer erfüllt, aber der alte in jedem Fall gestoppt. Ist Motion dann false, sind alle 3 Bedingungen erfüllt und ein neuer Timer wird gestartet, der dann auch durchläuft, wenn Motion false bleibt und sich nicht ändert? Teste ich morgen früh! -
@lastactionhero genau, probiere einfach aus.
Ansonsten bau die Debug-Meldungen ein, dann kannst du im Log sehen was dein Skript macht, wo es steht. -
@bananajoe scheint nun zu funktionieren, danke für die Hilfe! Ich beobachte das Verhalten nun noch ein paar Tage, dann kann ich den Export noch oben reinstellen für diejenigen, die auch nach sowas suchen! Danke!
-
nach nun 2 Wochen testen habe ich das Script noch um den Fall erweitert, dass bspw. bei Dunkelheit oder Dämmerung der Bewegungssensor gar keine Bewegung bei Öffnung des Tores erkannt hat. Damit funktioniert das Script ziemlich gut! Für alle, die es kopieren wollen, hier der Export:
<xml xmlns="https://developers.google.com/blockly/xml"> <variables> <variable type="timeout" id="timeout_garagentor">timeout_garagentor</variable> </variables> <block type="on_ext" id="Rc,RDdc5.6wG*^S365kb" x="63" y="213"> <mutation xmlns="http://www.w3.org/1999/xhtml" items="2"></mutation> <field name="CONDITION">any</field> <field name="ACK_CONDITION"></field> <value name="OID0"> <shadow type="field_oid" id="8hnUfm/?(yNLdqZYZioq"> <field name="oid">hm-rpc.1.000920C99B440F.1.MOTION</field> </shadow> </value> <value name="OID1"> <shadow type="field_oid" id="8AnIbRH(B2Z0mq*E[{%["> <field name="oid">hm-rpc.1.002420C995C575.1.DOOR_STATE</field> </shadow> </value> <statement name="STATEMENT"> <block type="timeouts_cleartimeout" id="T?qf2^:iUp,w(UT*ZQz;"> <field name="NAME">timeout_garagentor</field> <next> <block type="controls_if" id="Mn:.=S/[gc[Thv5A|uXj"> <value name="IF0"> <block type="logic_multi_and" id="bfL7b$l[:-;i~hIrK|wL"> <mutation xmlns="http://www.w3.org/1999/xhtml" items="3"></mutation> <value name="AND0"> <block type="logic_compare" id="*W{+nK5#|V!oF:.8L*s+"> <field name="OP">EQ</field> <value name="A"> <block type="get_value" id="[r~|BdaEIVXhiu6{JM5X"> <field name="ATTR">val</field> <field name="OID">0_userdata.0.Garage_Autoclose</field> </block> </value> <value name="B"> <block type="logic_boolean" id="q=1%9$-8B}Z0U8%28k#)"> <field name="BOOL">TRUE</field> </block> </value> </block> </value> <value name="AND1"> <block type="logic_compare" id="Qq5B,Q|db2el8:aKjBWq"> <field name="OP">EQ</field> <value name="A"> <block type="get_value" id="nx62AQcvUCmy#c@$Asax"> <field name="ATTR">val</field> <field name="OID">hm-rpc.1.000920C99B440F.1.MOTION</field> </block> </value> <value name="B"> <block type="logic_boolean" id="e1x]U3dj#0ZIAq`Xk+Gd"> <field name="BOOL">FALSE</field> </block> </value> </block> </value> <value name="AND2"> <block type="logic_compare" id="_7d#`#s};ypO29N9upu6"> <field name="OP">NEQ</field> <value name="A"> <block type="get_value" id="mS]!-(O0uD9,u}`A#`td"> <field name="ATTR">val</field> <field name="OID">hm-rpc.1.002420C995C575.1.DOOR_STATE</field> </block> </value> <value name="B"> <block type="math_number" id="BV9G(8uj+VE?A.^me=a5"> <field name="NUM">0</field> </block> </value> </block> </value> </block> </value> <statement name="DO0"> <block type="comment" id="JQ!5`+_8gzc?@iT^Mi|C"> <field name="COMMENT">Nach 5 min ohne Bewegung automatisch schließen</field> <next> <block type="comment" id="BP05f8xMWyF:n[eD!g7H"> <field name="COMMENT">2 min davon vorgegeben vom Bewegungsmelder</field> <next> <block type="timeouts_settimeout" id="w?3#}$|H,rD_$OA}6lO="> <field name="NAME">timeout_garagentor</field> <field name="DELAY">3</field> <field name="UNIT">min</field> <statement name="STATEMENT"> <block type="control" id="eyPVpw@h|Otg_5=%p_iG"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">hm-rpc.1.002420C995C575.1.DOOR_COMMAND</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="math_number" id="5O?]J$QiwJydKxtg5!`Q"> <field name="NUM">3</field> </block> </value> </block> </statement> </block> </next> </block> </next> </block> </statement> </block> </next> </block> </statement> </block> </xml>