Zählschleife mit Sleepfunktion

Begonnen von projectsun, 25 April 2016, 12:22:14

Vorheriges Thema - Nächstes Thema

projectsun

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?
Zentrale Ubuntu, Rpi B+ mit Busware 868 CUL ser2net, Rpi 2 an Aquarium mit DS18B20, und S0Counter, Rpi 3 mit nanoCUL 433 und 868 ser2net, 7x Revolt NC-5462, 1x miniCUL WLAN, 3x IT-1000, 6x ELRO AB440, KS300, EM1000-HSM, EM1000-WZ, FHT80B, 5x FHT8v2, 20x Nodemcu mit Sensoren, 6x Echo, Sonos

justme1968

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
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

projectsun

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.
Zentrale Ubuntu, Rpi B+ mit Busware 868 CUL ser2net, Rpi 2 an Aquarium mit DS18B20, und S0Counter, Rpi 3 mit nanoCUL 433 und 868 ser2net, 7x Revolt NC-5462, 1x miniCUL WLAN, 3x IT-1000, 6x ELRO AB440, KS300, EM1000-HSM, EM1000-WZ, FHT80B, 5x FHT8v2, 20x Nodemcu mit Sensoren, 6x Echo, Sonos

justme1968

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.  :) 
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968