Hauptmenü

Fragen zu "InternalTimer"

Begonnen von Elektrolurch, 18 August 2014, 10:38:39

Vorheriges Thema - Nächstes Thema

Elektrolurch

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




configDB und Windows befreite Zone!

Dietmar63

Gruß Dietmar
FB7390, CUL, 2 FHT, FS20
modules: 98_WOL.pm, 98_Heating_Control.pm,   98_WeekdayTimer.pm, 98_RandomTimer.pm, 59_Twilight.pm

justme1968

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

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

Elektrolurch

Hallo,

ja stimmt, so wie es bei den http-utils gemacht wird.
Beispiel my $hash = {'Wert1' => $wert1, 'state' => 'up'};
Danke und Gruß
configDB und Windows befreite Zone!

Dietmar63

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!
Gruß Dietmar
FB7390, CUL, 2 FHT, FS20
modules: 98_WOL.pm, 98_Heating_Control.pm,   98_WeekdayTimer.pm, 98_RandomTimer.pm, 59_Twilight.pm