NEWS
Timeout Zeit über VIS an variable übegeben
-
Hallo,
ich versuche ein Wert x via VIS an eine Variable zu übergeben um somit die Zeit eine timouts zu ändern:
~~![](</s><URL url=)http://up.picr.de/31751474ml.png" />
Leider funktioniert das ganze irgendwie nicht. Der Wert wird nicht übernommen. Hat jemand eine Idee?
:geek:
<xml xmlns="http://www.w3.org/1999/xhtml"><block type="on_ext" id="Be)ry,e1ZV:S@Nh_+54w" x="-113" y="-462"><mutation items="1"></mutation> <field name="CONDITION">ne</field> <value name="OID0"><shadow type="field_oid" id=")b}K..it,nrY)e@N}g*K"><field name="oid">javascript.0.Tageszeit.Sonnenuntergang_Start</field></shadow></value> <statement name="STATEMENT"><block type="timeouts_cleartimeout" id="MR(hie#A)WM2k3N#Olp:"><field name="NAME">timeout</field> <next><block type="debug" id="gXnGhPFKt,dVzC0H7_Vd"><field name="Severity">log</field> <value name="TEXT"><shadow type="text" id="?)L2hh0bPu)v]=(DtBFI"><field name="TEXT">test</field></shadow></value> <next><block type="variables_set" id="]U%ngZDiTwX]V:uiaS(H"><field name="VAR">timeout</field> <value name="VALUE"><block type="get_value" id="@lq,Yw0TIWL-4MfJ~a!g"><field name="ATTR">val</field> <field name="OID">javascript.0.Visuobjekte.Auto_Licht_Flur_unten</field></block></value> <next><block type="timeouts_settimeout" id="7^Jq0oM0:G=cL9a_e)h6"><field name="NAME">timeout</field> <field name="DELAY">timeout</field> <field name="UNIT">min</field> <statement name="STATEMENT"><block type="debug" id="p~I2-oG)(xCePp+M3%uc"><field name="Severity">warn</field> <value name="TEXT"><shadow type="text" id="}=4;SQ}]mViUhQtlrRj#"><field name="TEXT">Timeout</field></shadow></value></block></statement></block></next></block></next></block></next></block></statement></block></xml> ````~~
-
Blockly erlaubt offenbar nur konstante Werte für die Verzögerungszeit. Bleibt Javascript.
const idDelay = '...'; // Datenpunkt mit Verzögerungszeit in Minuten const idEreignis = '...'; // Datenpunkt mit Ereignis, das die verzögerte Reaktion auslöst var timer = null; var delay = getState(idDelay).val; on(idDelay, function(dp) { // Änderung der Verzögerungszeit if(timer) { clearTimeout(timer); timer = null; } delay = dp.state.val; }); function meineFunktion() { // Mache was (verzögert) timer = null; } on(idEreignis, function() { if(timer) { clearTimeout(timer); timer = null; } timer = setTimeout(meineFunktion, 60000 * delay); // delay Minuten verzögert });
-
Da Skript klappt bei mir super und der Timer macht seinen Job.
Ich starte damit einen Prozess den ich nach x Minuten beende und mittels einer Lampe signalisiere das der Job beendet wurde.
Nur möchte ich zusätzlich noch eine Funktionalität 'Abbruch' einbauen.
Sobald der Abbruch aktiviert wird, soll der Timer stoppen und die Funktionalität sofort ausführen.
Sodas mein Prozess sofort beendet wird.
Aber es darf nicht alles was in "function meineFunktion" steht ausgeführt werden.
Denn die Lampe, die normalerweise, dass Ende signalisiert, soll bei einen Abbruch nicht leuchten.
Ist dafür eine einfach Implementierung möglich?
-
Aber es darf nicht alles was in "function meineFunktion" steht ausgeführt werden. `
Dann müssen die Aktivitäten in 2 Funktionen aufgeteilt werden: Im Timeout-Callback werden beide Funktionen aufgerufen, bei Abbruch wird der Timer gestoppt und nur eine Funktion aufgerufen.timer = setTimeout(function() { Funktion1(); Funktion2(); }, 60000 * delay); // delay Minuten verzögert
-
@ErazorVIP
Nur um das Thema komplett abzuschließen...Das geht mit Variablen in Blockly schon, aber die Einheit der Zeit muss. "ms" sein, mit "sek" und "min" geht es nicht.
Soweit ich das sehe, liegt es daran, dass die beiden intern durch eine Formel mit "ms" ersetzt werden, was zu Problemen führt.