Hallo Zusammen,
warscheinlich stehe ich mal wieder voll auf dem Schlauch :-\
Ich weiß gar nicht so recht, wie ich mein "Problem" beschreiben soll.
Ich möchte einen Prozess erstellen, der alle paar Sekunden einen Befehl sendet, selbst aber abbrechbar ist.
Es handelt sich hierbei um einen Dimmer.
Mein aktueller Entwurf sieht wie folgt aus (Inhalt einer "Wecker"-at):
for(my $i=1; $i < 101; $i++)
{
my $wait = $i * 6;
fhem("sleep $wait; set LichtweckerDimmer dim $i");
}
fhem("sleep 610; set LichtweckerDimmer dim 100");
fhem("sleep 720; set LichtweckerDimmer off");
}
Damit werden zum Ausführungszeitpunkt 101 Dimmbefehle generiert, die dann aber eben nicht mehr unterbrechbar sind.
Spontan hätte ich an ein fhem("sleep"); fhem("set ...") usw gedacht....das unterbricht aber bekannter Weise ja dann das gesamte FHEM.
Ich suche nun also eine Möglichkeit ein "Objekt" (at oder was auch immer) zu erstellen, was wirklich alle x Sekunden einen Befehl abgibt und selbst unterbrechbar ist.
(Ich will den Dimmer sozusagen zu einem beliebigen Zeitpunkt unterbrechen können.)
"Blöde Idee", gerade beim Schreiben gekommen:
Mit der "Wecker"-at eine weitere at starten die sich alle x Sekunden wiederholt und den Dimmer hochdreht?
Diese könnte man beliebig unterbrechen.....
Vielleicht habt ihr ja noch eine bessere Idee?
Grüße,
Kharim
Vielleicht hift Dir die Aussage das ein FHEM sleep nicht blockierend arbeitet
fhem ("sleep 60; set DEVICE on");
blockiert also nicht für 60s FHEM. Schau Dir mal sleep in der FHEM Doku an, den kann man auch noch einen weiteren Parameter mitgeben über diesen man dann das sleep auch abbrechen kann.
Genau, und sleep + Befehl arbeiten intern wohl sehr ähnlich als eine Lösung mit at hat neulich irgendjemand (Rudi?) in einem anderen Thread geschrieben.
Das ist ihm wohl bewusst (und es steht ja auch klar in der Doku). Es geht ihm ums unterbrechen. Da könnte ihm der 2. Parameter helfen, ich würde es mit einem sich wiederholenden at machen.
schau dir mal die version aus diesem thread hier an: https://forum.fhem.de/index.php/topic,51906.msg436451.html#msg436451 (https://forum.fhem.de/index.php/topic,51906.msg436451.html#msg436451).
du musst deine version so umbauen das nicht alle sleep in einer schleife erzeugt werden sondern häppchenweise bei jedem aufruf nur der nächste noch eingeplant wird.
wenn du dann noch den optionalen zweiten parameter verwendest den sleep hat kannst du das ganze mit cancel wieder abbrechen.
gruss
andre
Mit DOIF geht das natürlich auch, als Rohentwurf:
([DimmerTrigger] eq "up") (set LichtweckerDimmer dim {([LichtweckerDimmer:dim] +1)})
DOELSEIF ([DimmerTrigger] eq "stop")
Attribute
repeatcmd 6
repeatsame 100
Ich danke euch für die Rückmeldungen.
Ich werde beide Wege mal ausprobieren - die sich wiederholende App und die Timer Funktion...