FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: siggi85 am 26 September 2014, 09:19:51

Titel: Doku zu InternalTimer() Funktion
Beitrag von: siggi85 am 26 September 2014, 09:19:51
Ich finde leider keine Doku zur InternalTimer() Funktion.Ich habe im Forum, Wiki, der Commandref und google gesucht, aber nur Beispielcodes gefunden.
Kann mir jemand sagen wo ich eine Beschreibung für diese Funktion finde?!
Titel: Antw:Doku zu InternalTimer() Funktion
Beitrag von: krikan am 26 September 2014, 09:31:42
Im Wiki gibt es doch in diesen Dokumenten Infos zu dieser internen Funktion:
http://www.fhemwiki.de/wiki/DevelopmentGuidelines
http://www.fhemwiki.de/wiki/DevelopmentModuleIntro
Was ist denn genau Dein Problem?
Titel: Antw:Doku zu InternalTimer() Funktion
Beitrag von: siggi85 am 26 September 2014, 10:32:38
Zitat von: HolyMoly am 14 April 2014, 08:56:39
sub
startFireEffect()
{
    my $hue = int((rand()*3460)+5460);
    my $sat = int(rand(64)+170);
    my $bri = int(rand(60)+16);
    my $delay = (rand()+0.1);
    my $transitiontime = int($delay * 10);
    fhem("set Schlafzimmer.NachtkastenLampe hue $hue: sat $sat : bri $bri : transitiontime $transitiontime immediateUpdate");
    InternalTimer(qw(gettimeofday)+$delay, "startFireEffect", "fireEffectTimer", 0);
}

sub
stopFireEffect()
{
   RemoveInternalTimer("fireEffectTimer");
}

Ich würde diese Funktion (ein Kaminfeuereffekt für Hue Lampen, Danke an dieser Stelle an HolyMoly. :) ) gerne so umbauen, dass ich der Funktion als Werte die zugehörigen Hue Lampen übergebe, und so ein Timer für jede Hue Lampe gesetzt wird.
Wenn ich es richtig verstehe, startet der Timer die Subroutine in der er erzeugt wird immer wieder neu. Mein Problem ist, ich weiß nicht wie ich hier die Parameter übergebe. Ich kann die Subroutine ansprechen und mehrere Lampen übergeben (den Code dafür habe ich gerade nicht zur Hand), aber diese Parameter im Timer übergeben habe ich auf Anhieb nicht hinbekommen.
Momentan habe ich diese Funktion halt 2 Mal drin, mit meinen Hue Devices hardcoded. Also startFireEffect1() und startFireEffect2(). Recht unflexibel und unschön.  ::)

Vor diesem Vorhaben kannte ich Funktion nicht und würde die gerne komplett verstehen um diese ggf. selber mal verwenden zu können. :)

EDIT: Unter http://www.fhemwiki.de/wiki/DevelopmentModuleIntro scheint das zu sein was ich suche. Komisch, dass ich das nicht selber gefunden habe. Manchmal sieht man den Wald vor läuter Bäumen nicht. :D Danke auf jeden Fall für den Link!

EDIT2: Aha, ich dachte "fireEffectTimer" ist der Name des Timers, damit man ihn identifizieren kann (für die Stop Subroutine), allerdings ist dies auch der Parameter der übergeben wird (auch wenn er in diesem Beispiel in der startFireEffect Routine nicht ausgewertet wird). Das sollte meine Probleme lösen. :)
Titel: Antw:Doku zu InternalTimer() Funktion
Beitrag von: krikan am 26 September 2014, 11:30:28
Am Rande: Beachte http://forum.fhem.de/index.php/topic,26260.msg192642.html#msg192642 bei RemoveInternalTimer($hash)
Titel: Antw:Doku zu InternalTimer() Funktion
Beitrag von: siggi85 am 26 September 2014, 17:27:04
Ich konnte mein Vorhaben nun in die Tat umsetzen.
Das Ergebnis kann im Hue Thread (http://forum.fhem.de/index.php/topic,11020.420.html) nachgelesen werden.