NEWS
Blockly - Rolladensteuerung mit Prüfung auf offene Fenster mit Wiederholung
-
Hallo zusammen,
ich bin Neuling in Sachen ioBroker und Blockly. Daher verzeiht mit bitte ggf. blöde Fragen oder Vermutungen. Von Javascript habe ich leider auch so gut wie keine Ahnung.
Ich habe aber bereits einige Skripte mit Blockly realisiert und schalte damit Homematic Geräte. Das funktioniert weitestgehend alles wie ich möchte.
Bei einem Szenario habe ich allerdings Probleme das abzubilden.
Folgendes möchte ich erreichen:
In jedem Raum sind Fenstersensoren (offen/geschlossen) und Rolladensteuerung vorhanden. Ich möchte zu einem Zeitpunkt X die Rolläden schließen lassen. Allerdings nur wenn das dazugehörige Fenster auch geschlossen ist. Ist das Fenster geöffnet, soll die Prüfung aber immer wieder erfolgen, sodass die Rolläden auch nach dem Zeitpunkt X geschlossen werden sobald das Fenster dann geschlossen ist. Der Befehl zum Schließen soll quasi geparkt werden bis das Fenster geschlossen wird oder ein Zeitpunkt Y erreicht ist.
So wie ich es umgesetzt habe funktioniert das auch weitestgehend bzw. manchmal. Als Beispiel habe ich mal ein kleines Skript genommen. Es gibt auch Räume mit mehreren Fenstern und mehreren Rolladen und anderen Abhängigkeiten. Ist nun ein Fenster offen werden aber scheinbar andere Skripte nicht mehr ausgeführt. Es bleiben bei geöffnetem Fenster in einem Raum plötzlich die Rolladen eines anderen Raumes geöffnet.
Ich fürchte das liegt daran, dass ich mit Wiederholungen in Blockly arbeite und das vielleicht nicht das richtige Werkzeug dafür ist.
Führt eine Wiederholung dazu, dass das System die ganze Zeit in dem Skript bleibt und es immer wieder versucht zu wiederholen und während dessen auch keine anderen Skripte mehr ausgeführt werden? Das würde meine Probleme mit der mangelnden Zuverlässigkeit der Skripte erklären.
Hier das verwendete Skript:
! <xml 1999/xmlns="<URL url=" http:/www.w3.org/xhtml"="">http://www.w3.org/1999/xhtml">
! <block type="comment" id="]0ZqmioP2VSNH]-%aEA5" x="-638" y="63"><field name="COMMENT">Esszimmer</field>
! <next><block type="schedule" id="P3Yb*N?HMq08rY.A:=u/"><field name="SCHEDULE">30 22 * * 0-6</field>
! <statement name="STATEMENT"><block type="controls_if" id="6/3{2|z.]t,U;]et+m"><mutation else="1"></mutation> ! <value name="IF0"><block type="logic_compare" id="?xjb23GavD)KD]Z;0N^}"><field name="OP">EQ</field> ! <value name="A"><block type="get_value" id="lXK0soFK1xL{D[WEAcF2"><field name="ATTR">val</field> ! <field name="OID">hm-rpc.1.0007D7099D033E.1.STATE</field></block></value> ! <value name="B"><block type="convert_tonumber" id="Y6zC?QqpZD3G0?6MYgVj"><value name="VALUE"><block type="math_number" id="sJ_j)oW_0CS_
vb_R%be"><field name="NUM">0</field></block></value></block></value></block></value>
! <statement name="DO0"><block type="control" id="y3qqK9o6Gx%E;EeQ5CR"><mutation delay_input="true"></mutation> ! <field name="OID">hm-rpc.0.OEQ1317662.1.LEVEL</field> ! <field name="WITH_DELAY">TRUE</field> ! <field name="DELAY_MS">1</field> ! <field name="UNIT">sec</field> ! <field name="CLEAR_RUNNING">FALSE</field> ! <value name="VALUE"><block type="math_number" id="=BKh=#e+WrNyJRDSO|Nn"><field name="NUM">0</field></block></value> ! <next><block type="debug" id="|MjR!6Yd
?^F+:5eAH^d"><field name="Severity">log</field>
! <value name="TEXT"><shadow type="text" id="8},F]r,hIwFeJ}?t5Q1W"><field name="TEXT">Rolladen Esszimmer abends geschlossen</field></shadow></value></block></next></block></statement>
! <statement name="ELSE"><block type="controls_whileUntil" id="|o2YC}=b4LgzCK-Q=?HZ"><field name="MODE">UNTIL</field>
! <value name="BOOL"><block type="logic_operation" id="P5DsZ8rOOQ1+0%egwZL"><field name="OP">OR</field>
! <value name="A"><block type="logic_compare" id="7fb^L+UHQrEs0!ZlDnK"><field name="OP">EQ</field> ! <value name="A"><block type="get_value" id="crutH~k)hpYm[V)qQ:{D"><field name="ATTR">val</field> ! <field name="OID">hm-rpc.1.0007D7099D033E.1.STATE</field></block></value> ! <value name="B"><block type="convert_tonumber" id=":R5N|EJ(Acu71suZ8p@,"><value name="VALUE"><block type="math_number" id="4mAbKJm*UedW/M.3pz.7"><field name="NUM">0</field></block></value></block></value></block></value> ! <value name="B"><block type="time_compare" id="Clu=)S6Q9Kiije47tK;Y"><mutation end_time="true"></mutation> ! <field name="OPTION">between</field> ! <field name="START_TIME">22:30</field> ! <field name="END_TIME">06:00</field></block></value></block></value> ! <statement name="DO"><block type="control" id=";FoI7sK*MeGU
BdJ!JxB"><mutation delay_input="false"></mutation>
! <field name="OID">hm-rpc.0.OEQ1317662.1.LEVEL</field>
! <field name="WITH_DELAY">FALSE</field>
! <value name="VALUE"><block type="math_number" id="LjvT30ZeIWJhsm!Jhc8("><field name="NUM">0</field></block></value>
! <next><block type="debug" id="DpB+VXCxipU,]b8H4y05"><field name="Severity">log</field>
! <value name="TEXT"><shadow type="text" id="dj|1eD/(lWf8p8rn(`x4"><field name="TEXT">Rolladen Esszimmer abends geschlossen (nachdem Fenster geschlossen wurde)</field></shadow></value></block></next></block></statement></block></statement></block></statement></block></next></block></xml>Habt ihr Tipps für mich, wie man das besser/richtig machen kann?
Wichtig ist mir halt die Funktion, dass die Rolladen auch nach dem Schließen das Fenster noch nachträglich geschlossen werden.
Danke für eure Hilfe!
LG
norbhb
-
Schleifen wiederhole bis unbedingt vermeiden !! Vorschlag:
-
Vielen Dank für die schnelle Hilfe.
Aber würde ich damit nicht eine permanente Steuerung des Rolladen erwirken?
Das Skript sagt doch im unteren Teil aus, dass wenn das Fenster geschlossen ist, dass dann steuere den Rolladen auf 0%. Aber das würde er ja permanent zwischen 22.30 und 6 Uhr machen, oder macht er das einmalig bei einer Änderung des Status des Fensters?
-
macht er das einmalig bei einer Änderung des Status des Fensters? `
Ja, im Kommentar steht "Fenster <u>wird</u> geschlossen".Falls der Fensterkontakt öfter sendet als bei Änderung des Zustands, muss man auf "wurde geändert" triggern und den Wert abfragen.
falls Aktuelle Zeit ist zwischen 22:30 und 06:00 und nicht Wert