NEWS
setStateDelayed - Fragen zur Funktion
-
@hardy sagte: Lasse ich den Timer nicht neu starten, dann habe ich das Problem, dass es sein kann, das der Ein- und Ausschaltbefehl zu undefinierten Zeitpunkten geschrieben werden.
In deinem Beispiel wird setStatedelayed() alle 10 s aufgerufen, wenn die Bedingungen erfüllt sind. Das Schreiben des Wertes erfolgt erstmalig nach 60 s und dann jede weitere 10 s. Es laufen 6 Timer parallel.
@hardy sagte in setStateDelayed - Fragen zur Funktion:
Lasse ich den Timer bei jedem Aufruf neu starten, dann schaltet der Befehl meinen Ausgang nicht.
Der 60-s-Timer wird alle 10 s gestoppt, kann also nie ablaufen.
@hardy sagte in setStateDelayed - Fragen zur Funktion:
Hier mal noch das Script
Wozu die Verzögerungen? Die Hysterese ist doch groß genug, um zu häufiges Schalten zu vermeiden.
-
@paul53 ich habe ebenfalls ein Problem mit setstatedelayed
Ich möchte einen Ausgang für eine Zeit setzen und dann wieder zurücksetzen. Funktioniert aber nicht:
Console.log nur, um zu sehen, das das überhaupt angestoßen wird)function einschalten() { setState('rpi2.0.gpio.22.state'/**/,true); // true ist einschalten setStateDelayed('opendtu.1.114184537824.power_control.power_on'/**/,true,2000,false, function(){console.log("ein")}); }; // Ende einschalten
-
@laser sagte: Ausgang für eine Zeit setzen und dann wieder zurücksetzen.
Dein setStateDelayed() schaltet nur "power_on" um 2 s verzögert ein.
-
@paul53 Ja, das merke ich. Und wie schalte ich wieder aus? Hatte gehofft, das passiert mit dem "false"
-
@laser sagte: wie schalte ich wieder aus?
Was soll wann wieder ausgeschaltet werden? GPIO22 oder "power_on"?
@laser sagte in setStateDelayed - Fragen zur Funktion:
Hatte gehofft, das passiert mit dem "false"
Das false hinter der Verzögerungszeit bedeutet, dass der Timer bei erneutem Aufruf nicht gestoppt wird.
-
@paul53
power_on -
@laser
Wenn "power_on" verzögert ausgeschaltet werden soll, muss false (anstelle von true) vor der Verzögerungszeit verwendet werden.setStateDelayed('opendtu.1.114184537824.power_control.power_on'/**/, false, 2000, false, function() { console.log("aus") });
-
@paul53 versuche es jetzt so:
function einschalten() { setState('rpi2.0.gpio.22.state'/**/,true); // true ist einschalten Relais setState('opendtu.1.114184537824.power_control.power_on'/*Start the inverter*/,true); setStateDelayed('opendtu.1.114184537824.power_control.power_on'/*Start the inverter*/,false,6000); }; // Ende einschalten
EDIT: das ging so schnell, daß ich es in "Objekte" nicht gesehen habe. Bin jetzt auf 6000 gegangen.
-
@paul53 zweimal "delayed" geht wohl nicht? Nach Einschalten über Relais muß der Inverter erst hochlaufen...
und: gibt es einen Höchstwert für Delay?function einschalten() { // setState('rpi2.0.gpio.22.state'/**/,true); // true ist einschalten Relais setStateDelayed('opendtu.1.114184537824.power_control.power_on'/**/,true,5000); setStateDelayed('opendtu.1.114184537824.power_control.power_on'/*Start the inverter*/,false,8000); }; // Ende einschalten
-
@laser sagte: zweimal "delayed" geht wohl nicht?
Sollte funktionieren. Ich würde allerdings setTimeout() bevorzugen.
@laser sagte in setStateDelayed - Fragen zur Funktion:
gibt es einen Höchstwert für Delay?
Ja, der ist aber sehr hoch.
-
@paul53 das setzen funktioniert nicht. Erst wenn ich das zweite "setstateDelayed" auskommentiere, wird gesetzt nach Ablauf der Zeit. "setTimeout" muß ich mir ansehen.
function einschalten() { // setState('rpi2.0.gpio.22.state'/**/,true); // true ist einschalten Relais setStateDelayed('opendtu.1.114184537824.power_control.power_on'/**/,true,5000); // setStateDelayed('opendtu.1.114184537824.power_control.power_on'/*Start the inverter*/,false,8000); }; // Ende einschalten
-
@laser sagte: "setTimeout" muß ich mir ansehen.
function einschalten() { setState('rpi2.0.gpio.22.state'/**/,true); // true ist einschalten Relais setTimeout(function() { setState('opendtu.1.114184537824.power_control.power_on'/**/, true); setStateDelayed('opendtu.1.114184537824.power_control.power_on', false, 3000); // 3 s Impuls }, 5000); // 5 s Hochlauf }; // Ende einschalten
-
@paul53 Danke, das Absetzen der Impulse klappt so. Muß nur noch die Zeiten für den Inverter- Hochlauf hinbekommen, damit die Impulse auch wirken.
EDIT: Klappt auch mit dem Hochlauf abwarten... ,40000 -
@paul53
irgendwelche Nebenwirkungen hat das aber nicht (Unterbrechen von JS- Abarbeitung für die timeout-Zeit?) -
@laser sagte: Unterbrechen von JS- Abarbeitung für die timeout-Zeit?
Nein, setTimeout() wird asynchron ausgeführt.