FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Elektrolurch am 18 August 2014, 10:38:39

Titel: Fragen zu "InternalTimer"
Beitrag von: Elektrolurch am 18 August 2014, 10:38:39
Hallo,
habe mal zum "InternalTimer" einige Fragen:

1. Zeitwert gettimeofday()+ $delay
Da ich in fhem bislang nur für den Zeitwert "ganze Sekunden" gesehen habe, war ich davon ausgegangen, dass es auch nur sekundenweise geht.
Nun habe ich das mal mit "krummen Werten", wie z.B. für $delay = 3.51 getestet und gemessen und es geht tatsächlich genauso präzise, wie man erwartet, was bei der Berechnung von Fahrtzeiten und Positionen sehr hilfreich ist.

2. interne Verwaltung der Timer:
ich habe z.B. folgendes programmiert:
InternalTimer(gettimeofday()+ 60, "Wcmcom_BrennerDaten", $hash, 0);
InternalTimer(gettimeofday()+ 1800, "Wcmcom_SolarDaten", $hash, 0);

Zu der Instanz $hash werden also alle 60 Sekunden die Routine Wcmcom_Brennerdaten und alle 1800 s die Routine Wcmcom_Solardaten aufgerufen und zwar jeweils mit dem Parameter "$hash".
RemoveInternalTimer($hash);   

löscht dann wohl aber beide Timer, da die interne Verwaltung "$hash" als Kriterium verwendet.
Was müsste ich tun, wenn ich die beiden Timer getrennt löschen wollte?


So was bspw:
InternalTimer(gettimeofday()+ 60, "Wcmcom_BrennerDaten", "$hash,20", 0);
RemoveInternalTimer("$hash,20");   

Wird "$hash,20" als statischen Text für die Verwaltung der Timer verwendet?

Und wie kann man dann zum AufrufZeitpunkt der Subroutine (z.B. Wcmcom_BrennerDaten) dynamisch Werte übergeben? (z.B. "$hash,$wert1)
Vermutlich direkt nicht, da ja dann die Verwaltung der Timer nicht funktioniert.
Nur indirekt, über $hash->{Wert1) = $wert1..

Sehe ich das so richtig?

Gruß


Elektrolurch




Titel: Antw:Fragen zu "InternalTimer"
Beitrag von: Dietmar63 am 18 August 2014, 10:53:51
Vielleicht hilft dir diese Routine


forum.fhem.de/index.php/topic,18734.msg124978.html#msg124978 (http://forum.fhem.de/index.php/topic,18734.msg124978.html#msg124978)
Titel: Antw:Fragen zu "InternalTimer"
Beitrag von: justme1968 am 18 August 2014, 10:54:16
zu 2.: du erzeugst dir jeweils einen eigenen hash. da steckst du den fhem hash rein und alles was du sonst noch brauchst. an InternalTimer übergibst du dann eine referenz darauf. in der timer routine bekommst du deinen hash übergeben und hast zugriff auf alles was du da rein gesteckt hast. beim remove verwendest du auch deine eindeutige referenz.

gruss
  andre
Titel: Antw:Fragen zu "InternalTimer"
Beitrag von: Elektrolurch am 18 August 2014, 11:20:17
Hallo,

ja stimmt, so wie es bei den http-utils gemacht wird.
Beispiel my $hash = {'Wert1' => $wert1, 'state' => 'up'};
Danke und Gruß
Titel: Antw:Fragen zu "InternalTimer"
Beitrag von: Dietmar63 am 18 August 2014, 17:58:13
Oder du nutzt gleich die beiden Routinen

myInternalTimer
myRemoveInternalTimer

Die in Twilight definiert sind.
Also nur vorher Twilight laden.

Beispiele wie die Routinen zu nutzen sind findest du in Twilight selbst. Sie werden meines Wissens auch in RandomTimer genutzt!