FHEM Forum

FHEM - Entwicklung => FHEM Development => Thema gestartet von: Markus Bloch am 05 März 2016, 12:29:07

Titel: [PATCH] - fhem.pl - Optionale Angabe einer Funktion bei RemoveInternalTimer()
Beitrag von: Markus Bloch am 05 März 2016, 12:29:07
Hallo Rudi,

anbei ein Patch für fhem.pl um optional den Funktionsnamen bei RemoveInternalTimer() angeben zu können. Man kann damit folgendes machen:



# Definition von 2 Timern mit $hash als Argument
InternalTimer(gettimeofday()+30, "functionA", $hash);
InternalTimer(gettimeofday()+60, "functionB", $hash);

# Löschen des ersten Timers, der zweite läuft weiter
RemoveInternalTimer($hash, "functionA");

InternalTimer(gettimeofday()+30, "functionA", $hash);

# löschen von beiden Timern (functionA und function B)
RemoveInternalTimer($hash);


Ich habe bei YAMAHA_AVR zwei Timer laufen. Einen für den regelmäßigen Status-Request und einen zweiten der Befehle in der Command-Queue regelmäßig versucht beim Device abzusetzen. Beide benutzen $hash als Argument, rufen aber verschiedene Funktionen auf.

Die bisherige Funktionsweise bleibt davon unberührt.

Gruß
Markus
Titel: Antw:[PATCH] - fhem.pl - Optionale Angabe einer Funktion bei RemoveInternalTimer()
Beitrag von: dev0 am 05 März 2016, 13:17:49
Heute morgen hatte ich genau diese Funktionalität gesucht ;)
Titel: Antw:[PATCH] - fhem.pl - Optionale Angabe einer Funktion bei RemoveInternalTimer()
Beitrag von: rudolfkoenig am 05 März 2016, 16:39:16
Habs eingecheckt.
Titel: Antw:[PATCH] - fhem.pl - Optionale Angabe einer Funktion bei RemoveInternalTimer()
Beitrag von: Markus Bloch am 05 März 2016, 17:40:57
Hallo Rudi,

vielen Dank. In diesem Zusammenhang würde ich ebenfalls vorschlagen den Prototype für InternalTimer zu ändern:

aktuell:
InternalTimer($$$$)

Vorschlag:
InternalTimer($$$;$)

So muss man $waitIfInitNotDone nicht immer explizit mit 0 oder 1 angeben. Hier würde mich eh mal interessieren in welchen Fällen das wirklich gebraucht wird?

Gruß
Markus
Titel: Antw:[PATCH] - fhem.pl - Optionale Angabe einer Funktion bei RemoveInternalTimer()
Beitrag von: Markus Bloch am 05 März 2016, 17:59:35
Hab gerade gesehen, dass du den Prototype geändert hast.

Müsste aber in Zeile 2794 ebenfalls geändert werden.

Prototype mismatch: sub main::InternalTimer ($$$;$) vs ($$$$) at /usr/local/FHEM/bin/fhem.pl line 2794.


Vielen Dank schonmal.

Gruß
Markus
Titel: Antw:[PATCH] - fhem.pl - Optionale Angabe einer Funktion bei RemoveInternalTimer()
Beitrag von: rudolfkoenig am 05 März 2016, 18:03:13
ZitatMüsste aber in Zeile 2794 ebenfalls geändert werden.
Danke fuer den Hinweis, habs gemacht.

Laut svn blame/log habe ich den Parameter bei der "FHT softbuffer rewrite" benoetigt.
Warum genau, kann ich dir aber nicht mehr sagen, immerhin ist es 8+ Jahre her.
Titel: Antw:[PATCH] - fhem.pl - Optionale Angabe einer Funktion bei RemoveInternalTimer()
Beitrag von: justme1968 am 05 März 2016, 18:49:33
das hatten wir vor einer weile mal diskutiert :)

der parameter ist überflüssig und das verhalten mit dem wait das scheinbar mal vorgesehen war funktioniert auch nicht wirklich sondern wartet blockierend und ruft dann $fn aus.
Titel: Antw:[PATCH] - fhem.pl - Optionale Angabe einer Funktion bei RemoveInternalTimer()
Beitrag von: Markus Bloch am 05 März 2016, 18:54:50
Ich hab im Wiki genau wegen dem blockierenden Aufruf einen entsprechenden Warnhinweis in Großbuchstaben gemacht.