Hallo!
Um mit meinem PWM Modul einen Sonnenauf- und untergang zu simulieren, brauche ich eine Zählschleife, die die Werte hoch und runterzählt.
Das soll aber nicht schnell hintereinander passieren sondern hinter jeder stufe soll 2 sekunden gewartet werden.
in 99myutils
sub
FadeIn()
{
for (my $i = 0; $i <= 150; $i++){
fhem("sleep 2; set PWM Port15 " . $i );
}
}
lässt 2 Sekunden warten und rennt dann durch.
sub
FadeIn()
{
for (my $i = 0; $i <= 150; $i++){
fhem("set PWM Port15 " . $i );
fhem("sleep 2");
}
}
blockiert mir alles.
Aufgerufen wird durch: define FadeIn at *8:45:00 {FadeIn()}
Wie mache ich es richtig?
du darfst keine for schleife verwenden sondern musst die kontrolle wieder an FHEM zuruck geben.
so wie z.b. in diesem thread: https://forum.fhem.de/index.php/topic,51906.msg436451.html#msg436451
gruss
andre
Hallo!
Problem ist aber, dass ich eine zwischengespeicherte Variable brauche. Ich habe kein Gerät, was ich mit z.B. Volume -1 steuern kann.
Ich kann nur absolute Werte setzen "set PWM Port15 150" beispielsweise.
Also habe ich mal bisschen rumprobiert:
sub
FadeTimerIn ($;$;$)
{
my $duration = shift;
my $startTime = shift;
my $i = shift;
my $currentTime = time;
$i++;
if (!$startTime) {
$startTime = $currentTime
}
if (($startTime + $duration) > $currentTime) {
fhem("sleep 2; set PWM Port15 " . $i ."; { FadeTimerIn ($duration, $startTime, $i) }");
}
else {
#fhem("set PWM Port15 off");
}
}
funktioniert.
Aufruf mit
define FadeTimerin at *8:29:00 {FadeTimerIn(2000,0,150)}
2000 Sekunden- 150 als PWM Startwert.
das war ja nur ein beispiel auf eine prinzipielle Möglichkeit und nicht als 1:1 umsetzung gedacht. aber du hast es ja richtig erweitert. :)