NEWS
Ansteuerung für Zeit X
-
Hallo,
ich habe einen Heizstab in meinem Boiler, den ich Ersatzweise für die Wärmepumpe im Sommer betreibe.
Die Ansteuerung erfolgt über die Vis, ein Objekt. Das Blockly läuft los und steuert für 30min im regelmäßigen Abstand von 3 Sekunden ein Zeitrelais an.
Sollte sich iobroker aufhängen oder fehlerhaft sein, wird nicht mehr angesteuert und der Heizstab saugt mir nicht die Hausbatterie leer. So der Grundgedanke.Gelegentlich kommt es aber vor, dass nicht nur 30min angesteuert wird, sondern ununterbrochen, bis ich entweder iobroker neu starte, oder das Skript beende.
- Warum ist das so?
- Wie kann ich das Blockly verbessern, damit es überhaupt nicht dazu kommen kann?
- Wie kann ich verhindern, wenn schon eine Person auf Heizen gedrückt hat, also das Skript läuft, jemand anderes den während die Ansteuerung schon läuft nochmals das Skript startet. Ich vermute, dass könnte auch Einfluss haben. Vielleicht gibt es die Möglichkeit, das zu verhindern
<xml xmlns="https://developers.google.com/blockly/xml"> <variables> <variable type="interval" id="Intervall">Intervall</variable> <variable type="interval" id="Intervall2">Intervall2</variable> </variables> <block type="on_ext" id="{GP]f31L:Z[:8=bu`p7e" x="-337" y="-2137"> <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="3ciF;@X=vqdnZWF}/ND*"> <field name="oid">0_userdata.0.Boiler.HeizstabAN30min</field> </shadow> </value> <statement name="STATEMENT"> <block type="controls_if" id="iq/q#-=Abklf_EhtBYkK"> <value name="IF0"> <block type="logic_compare" id="tbh*PfF;vTS#Pf8@-3*J"> <field name="OP">EQ</field> <value name="A"> <block type="on_source" id="1*`ZN7m4B|(U?{NvV/|-"> <field name="ATTR">state.val</field> </block> </value> <value name="B"> <block type="logic_boolean" id="5wKA#s?j!xMt@o:y4Dwp"> <field name="BOOL">TRUE</field> </block> </value> </block> </value> <statement name="DO0"> <block type="timeouts_setinterval" id="U1Psj/[4{(8mM$SST!Y6"> <field name="NAME">Intervall</field> <field name="INTERVAL">3</field> <field name="UNIT">sec</field> <statement name="STATEMENT"> <block type="control" id=".*}z95zpJQuIn@*M]9IF"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">s7.2.DBs.DB1.NI32_121_1_Boiler_Stufe_NUR_Heizstab_Puls-Ansteuerung</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="logic_boolean" id="{VWJ!M7,.!5|vQt.XX$i"> <field name="BOOL">TRUE</field> </block> </value> </block> </statement> <next> <block type="update" id="@qHjmj$O1vM]AQiJZ=HB"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">0_userdata.0.Boiler.HeizstabAN30min</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="logic_boolean" id="-VP;T9%@oM4vS#*e~E~1"> <field name="BOOL">FALSE</field> </block> </value> <next> <block type="timeouts_wait" id="h4R*C^X]WZ#[d^X8^0N*"> <field name="DELAY">30</field> <field name="UNIT">min</field> <next> <block type="timeouts_clearinterval" id="QQ+0)HsRZ1VUm!!87:Z{"> <field name="NAME">Intervall</field> </block> </next> </block> </next> </block> </next> </block> </statement> </block> </statement> </block> <block type="on_ext" id=");@yOqr(mMo~ALPv4/=5" disabled="true" x="888" y="-2063"> <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="Ij)-ngYVT#cLxp,?P/K|"> <field name="oid">0_userdata.0.Boiler.HeizstabAN30min</field> </shadow> </value> <statement name="STATEMENT"> <block type="controls_if" id="aIsH%2KngNR,_:[!SCu?"> <value name="IF0"> <block type="logic_compare" id=".-%f^|%IP[42K`+KG12B"> <field name="OP">EQ</field> <value name="A"> <block type="on_source" id="zz+uMp2gvk)x7SZMNR+}"> <field name="ATTR">state.val</field> </block> </value> <value name="B"> <block type="logic_boolean" id="f{dAWKeOZ,O$]txc0/}r"> <field name="BOOL">TRUE</field> </block> </value> </block> </value> <statement name="DO0"> <block type="timeouts_setinterval" id="tK2zyxG,e1VL1Ja3GW*@"> <field name="NAME">Intervall2</field> <field name="INTERVAL">2</field> <field name="UNIT">sec</field> <statement name="STATEMENT"> <block type="control" id="-*^#TQzRS9rZU.%~qlVC"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">s7.2.DBs.DB1.NI32_Boiler_Stufe_NUR_Heizstab_Ansteuerung_(Zusatzrelais-Dauersignal)</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="logic_boolean" id="ka[OYk$9tzx9-?Kxw^bX"> <field name="BOOL">TRUE</field> </block> </value> </block> </statement> <next> <block type="telegram" id="2KxsY+}@i0S6lY(!f[Qr"> <field name="INSTANCE"></field> <field name="LOG"></field> <field name="SILENT">FALSE</field> <field name="PARSEMODE">default</field> <field name="ESCAPING">FALSE</field> <field name="DISABLE_WEB_PAGE_PREVIEW">FALSE</field> <value name="MESSAGE"> <shadow type="text" id=":x~LJOhzhk@,0z:6E4`z"> <field name="TEXT">Heizstab für 30min an</field> </shadow> </value> <value name="USERNAME"> <block type="text" id="J{SZDA#SsH4,8!VaU%aI"> <field name="TEXT">Michael</field> </block> </value> <next> <block type="timeouts_wait" id="J4k~5QLA2sx*N[ydPQc8"> <field name="DELAY">15</field> <field name="UNIT">min</field> <next> <block type="timeouts_clearinterval" id="h_~J%?~6q]H].|nVVG_c"> <field name="NAME">Intervall</field> <next> <block type="control_ex" id="5H]wK@eIgjSX7HiSuTf="> <field name="TYPE">true</field> <field name="CLEAR_RUNNING">FALSE</field> <value name="OID"> <shadow type="field_oid" id="wjSA(m4#v1;GcT{7iu@9"> <field name="oid">0_userdata.0.Boiler.HeizstabAN30min</field> </shadow> </value> <value name="VALUE"> <shadow type="logic_boolean" id="p+JC@nUbIB=s(DEUC}.U"> <field name="BOOL">FALSE</field> </shadow> </value> <value name="DELAY_MS"> <shadow type="math_number" id="(]yJ*3[CCC=HB);2p8_e"> <field name="NUM">0</field> </shadow> </value> <next> <block type="telegram" id="V8v2.HaOWFe*~?{5:B;c"> <field name="INSTANCE"></field> <field name="LOG"></field> <field name="SILENT">FALSE</field> <field name="PARSEMODE">default</field> <field name="ESCAPING">FALSE</field> <field name="DISABLE_WEB_PAGE_PREVIEW">FALSE</field> <value name="MESSAGE"> <shadow type="text" id="~(oOqE6)X;)?zy%wnQq8"> <field name="TEXT">Heizstab wieder aus</field> </shadow> </value> <value name="USERNAME"> <block type="text" id="zOJ|[C)zoGPyK`#z,,V;"> <field name="TEXT">Michael</field> </block> </value> </block> </next> </block> </next> </block> </next> </block> </next> </block> </next> </block> </statement> </block> </statement> </block> </xml>
Besten Dank für eure Hilfe.
-
@mika-0 Vielleicht hängen die Probleme (1) und (2) mit dem Auftreten von (3) zusammen
Für Verriegelung entsprechend Frage (3) könntest Du eine Variable "HeizenLäuft" definieren, mit "false" initialisieren, und zu Beginn des Triggers prüfen, ob die Variable auf false steht.
Nur dann den Timer-Mechanismus starten, die Variable auf true setzen und nach dem Ablauf am ende nach dem stop der zyklischen Ausführung wieder auf false setzen... -
@mika-0 Warum auf
wurde aktualisiert
und nicht aufwurde geändert
getriggert? Denn dann würde es nach den 30 Minuten enden. So startest du immer wieder neu wenn der Datenpunkt aktualisiert wurde und das Intervall läuft mehrfach.Du kannst aber auch mit der Aktualisierung das laufende Intervall abbrechen. Dann würde mit jedem Start die Zeit neu zu laufen beginnen ohne das es mehrfach parallel läuft.
-
@dr-bakterius Es gibt eine noch bessere Variante, und zwar "ist größer als letztes" dann könnte man die "falls" Klammer weglassen
Die Frage ist aber ob der Datenpunkt "HeizstabAN30nin" wirklich nur vom Skript gelöscht werden kann. Wenn von außerhalb gelöscht werden kann, ist das natürlich so nicht möglich...Ansonste würde diese Lösung auch die Hilfsvariable "HeizenLäuft" unnötig machen.
-
@mika-0 sagte: nicht nur 30min angesteuert wird, sondern ununterbrochen
Man muss einen Mehrfachstart des Intervalls verhindern, z.B. so:
-
OK danke euch allen.
Ich werde diverse Möglichkeiten testen und euch berichten
@martinp- was bedeutet "false" initialisieren?
- wie geht das?