FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: projectsun am 25 April 2016, 12:22:14

Titel: Zählschleife mit Sleepfunktion
Beitrag von: projectsun am 25 April 2016, 12:22:14
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?
Titel: Antw:Zählschleife mit Sleepfunktion
Beitrag von: justme1968 am 25 April 2016, 13:20:26
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
Titel: Antw:Zählschleife mit Sleepfunktion
Beitrag von: projectsun am 25 April 2016, 15:41:34
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.
Titel: Antw:Zählschleife mit Sleepfunktion
Beitrag von: justme1968 am 25 April 2016, 15:48:32
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.  :)