Hallo,
ich habe mal eine Frage zu DOIF. In der Doku steht:
Verzögerungen
Verzögerungen für die Ausführung von Kommandos werden pro Kommando über das Attribut "wait" definiert. Syntax:
attr <Modulname> wait <Sekunden für das erste Kommando>:<Sekunden für das zweite Kommando>:...
Für Kommandos ohne Verzögerung werden Sekundenangaben ausgelassen oder auf Null gesetzt. Die Verzögerungen werden nur auf Events angewandt und nicht auf Zeitsteuerung. Eine bereits ausgelöste Verzögerung wird zurückgesetzt, wenn während der Wartezeit ein anders Kommando, ausgelöst durch ein neues Ereignis, ausgeführt werden soll.
Ich habe folgendes DOIF erstellt
([MicroServer] eq "Stop")({system "/opt/scripts/test.sh&"} set steckdose.11 off)
Jetzt will ich, das zwischen dem ersten Befehl ({system "/opt/scripts/test.sh&"}) und dem Set Befehl eine Verzögerung stattfindet. Leider scheint aber das Wait Attribut sich nur darauf zu Beziehen, wie lange die Verzögerung nach dem Triggern des DOIF ist, bevor der erste Befehl ausgeführt wird.
Irgendwie blicke ich da nicht durch, dachte eigentlich, das ein wait 10:100 10 Sekunden vor dem ersten Befehl warten und dann 100 Sekunden bis zum 2. Befehl. So habe ich zumindest den Teil der Doku verstanden
Vielleicht kann mir jemand ein Tipp geben?
Vielen Dank
ZitatIrgendwie blicke ich da nicht durch, dachte eigentlich, das ein wait 10:100 10 Sekunden vor dem ersten Befehl warten und dann 100 Sekunden bis zum 2. Befehl.
Nein, diese Trennung ist nur dafür da, wenn du mehrere Befehle (also mit DOELSE(IF)) hast...
Evtl. gehts mit einem (perl) wait Befehl im Code?
Hi, mit sleep hab ich auch schon gearbeitet, allerdings blockiert er dann fhem für die angebene Zeitspanne, obwohl in der Doku folgendes steht
Bemerkung: sleep gefolgt von weiteren Befehlen blockiert die Abarbeitung von FHEM nicht, und ist vergleichbar mit einem namenlosen at Kommando
Was mache ich falsch?
So könnte es klappen:
define du_count dummy
define di_name DOIF ([MicroServer] eq "Stop") ({system "/opt/scripts/test.sh&"}, setreading du_count state 1)
DOELSEIF ([du_count] == 1) (set steckdose.11 off, setreading du_count state 0)
attr di_name wait 10:100