Danke für den Hinweis auf deine Alternative per DOIF. Gibt es da eventuell einen aktuellen codeschnipsel?
Wird denn das RT Modul noch weiter entwickelt?
Wenn ja, darf ich dann als Feature request vorschlagen, dass eine Unterscheidung zwischen Ende des RT Zeitintervalls und Abbruch des RT eingeführt wird? Sodass man per Attribut einstellen kann was bei Abbruch des Timers passiert. Oder zumindest dass ein Abbruch keine weiteren Schaltvorgänge auslöst.
Hätte gerne auch eine Fallunterscheidung zwischen Timer-Ablauf und Heimkehr bei aktivem Timer, habe daher mal selbst Hand angelegt. Sind meine ersten Schritte in Perl und fhem, bitte nicht schlagen wenn ich gegen irgendeine Etikette verstoße...
Im aktuellen Modul wird in beiden Fällen die gleiche Funktion durchlaufen, die abhängig vom Attribut "keepDeviceAlive" den Endzustand schaltet:
sub RandomTimer_down($) {
my ($hash) = @_;
$hash->{COMMAND} = AttrVal($hash->{NAME}, "keepDeviceAlive", 0) ? "on" : "off";
RandomTimer_device_switch($hash);
}
Ich habe daher ein neues Attribut und eine neue Funktion hinzugefügt:
sub RandomTimer_disableDown($) {
my ($hash) = @_;
my $disableState = AttrVal($hash->{NAME}, "disableState", 0);
if ($disableState != -1) {
Log3 $hash, 4, "[".$hash->{NAME}."]"." setting requested disableState on $hash->{DEVICE}: ";
$hash->{COMMAND} = AttrVal($hash->{NAME}, "disableState", 0) ? "on" : "off";
RandomTimer_device_switch($hash);
} else {
Log3 $hash, 4, "[".$hash->{NAME}."]"." no action requested on $hash->{DEVICE}: ";
}
}
Das Attribut heißt "disableState". Die Funktion wird nur in dem Fall durchlaufen, wenn bei aktivem Timer die DisableCondition eintritt. Ansonsten wird wie gehabt die alte Funktion ausgeführt, die das "keepDeviceActive" Attribut auswertet. So können beide Fälle unabhängig konfiguriert werden.
Logik ist wie derzeit bei "keepDeviceActive": 0 setzt das Device auf "off", 1 setzt das Device auf "on". Neu ist "-1", damit wird am Ende keine Aktion durchgeführt und das Device bleibt wie es gerade ist.
Funktioniert bei mir wie beschrieben und erfüllt meine Anforderung, vielleicht mag es ja noch jemand testen.