Hi!
Ich habe ein Weihnachten DOIF welches mir einen Dummy ein oder ausschaltet wenn Advent ist...
Das DOIF ist relativ einfach gestrickt, allerdings funktioniert es nur zum Adventzeitpunkt oder wenn ich checkall durchführe... Wenn ich aber mal Fhem neustarte oder der Adventzeitpunkt , warum auch immer verpasst wurde schaltet das doif nicht...
Hat jemand eine Idee wie dieses Advent==0 immer überwachen lassen kann? Also , ich meine quasi so wie ein Lichtsensor der den Status immer überprüft...
Dankeschön!
Hier das List:
nternals:
DEF (Advent==0) (set Weihnachten off)
DOELSEIF
(Advent==1) (set Weihnachten on)
FUUID 603dea9d-f33f-e7ed-c4ec-596ed337d2ab6877
MODEL FHEM
NAME DOIFWeihnachten
NOTIFYDEV global
NR 158
NTFY_ORDER 50-DOIFWeihnachten
STATE cmd_2
TYPE DOIF
VERSION 24905 2021-09-01 18:35:54
READINGS:
2021-12-21 05:35:32 cmd 2
2021-12-21 05:35:32 cmd_event DOIFWeihnachten
2021-12-21 05:35:32 cmd_nr 2
2021-03-02 08:36:40 mode enabled
2021-12-21 05:35:32 state cmd_2
Regex:
accu:
collect:
attr:
cmdState:
wait:
waitdel:
condition:
0 Advent==0
1 Advent==1
do:
0:
0 set Weihnachten off
1:
0 set Weihnachten on
2:
helper:
DEVFILTER ^global$
NOTIFYDEV global
globalinit 1
last_timer 0
sleeptimer -1
timerdev
timerevent
timerevents
timereventsState
triggerDev
perlblock:
uiState:
uiTable:
Attributes:
do always
room DOIF
Die Berechnung ob Advent ist oder nciht übernimmt ein code im 99myUtils:
######## Adventberechnung 1. Advent ############
use strict;
use warnings;
use POSIX;
use HTTP::Date;
sub Advent() {
my ($Sekunde, $Minute, $Stunde, $Monatstag, $Monat, $Jahr, $Wochentag, $Jahrestag, $Sommerzeit) = localtime(time);
my $adv=0;
$Jahr+=1900;
if($Monat<1) {
if ($Monatstag<7) {$adv=1;}
}
else
{ my $time = str2time("$Jahr-12-25");
my $wday = (localtime($time))[6];
$wday = $wday ? $wday : 7;
$time -= ($wday+22)*86400;
$adv=1 if ($time<time)
}
return $adv;
}
1;
Wieso geht der Status verloren?
Wie wäre es mit https://commandref.fhem.de/commandref_DE.html#DOIF_repeatcmd (https://commandref.fhem.de/commandref_DE.html#DOIF_repeatcmd)
Ich bin mir nicht sicher ob er ihn verliert oder einfach nicht checkt das der auf ==1 steht...
jedenfalls musste ich einen checkall durchführen obwohl ==1 schon seit wochen feststeht...
Verstehe es nicht wirklich...
Wer soll denn dein DOIF triggern ?
Advent ist eine Routine, die macht das bestimmt nicht. ;)
:o hmm.... das ist ja mal ne Aussage... irgendwie kan mir das nicht in den Sinn...
Also am besten einen Dummy erstellen den diese Advent routine schaltet und dann einen DOIFF auf das dummy triggern... Klingt nach einem Plan! 8)
Zitat von: misux am 21 Dezember 2021, 08:00:28
:o hmm.... das ist ja mal ne Aussage... irgendwie kan mir das nicht in den Sinn...
Also am besten einen Dummy erstellen den diese Advent routine schaltet und dann einen DOIFF auf das dummy triggern... Klingt nach einem Plan! 8)
Leider nein. Dann hast du immer noch keinen Trigger.
Bevor wir hier noch lange diskutieren. Du nimmst einfach mit
and einen Zeittrigger in deine DOIF-Definition mit auf.
Vielleicht beschreibst Du mal was überhaupt der UseCase ist.
Wofür brauchst Du das DOIF, den Dummy?
Ich habe auch einen Dummy Weihnachtszeit, der wirdauf ja und am Ende auf nein geschaltet (auch überein DOIF).
Seine Änderung aktiviert, bzw. deaktiviert Routinen.
Hmm.. ja, irgendwie war es etwas dumm von mir gedacht...
Ich wollte damit eigentlich meinen Weihnachtsbaum steuern.. Problem ist nur das dieser anunterschiedlichen Zeiten aufgestellt wird... naja, habe es jetzt anders gelöst... Habe mir einfach nen Dummy erstellt (Weihnachten) den ich manuell einschalte sobald der Weihnachtsbaum steht. Darauf reagiert dan ein DOIF und tut seinen Dienst. Die Advent==0 o.1 steuert dann meine Weihnachtsbeleuchtung am Haus. Da ist ja der Anfangs- und End- Zeitpunkt immer gleich.
Trotzdem Vielen Dank!
Zitat von: misux am 23 Dezember 2021, 05:14:41
Hmm.. ja, irgendwie war es etwas dumm von mir gedacht...
Ich wollte damit eigentlich meinen Weihnachtsbaum steuern.. Problem ist nur das dieser anunterschiedlichen Zeiten aufgestellt wird... naja, habe es jetzt anders gelöst... Habe mir einfach nen Dummy erstellt (Weihnachten) den ich manuell einschalte sobald der Weihnachtsbaum steht. Darauf reagiert dan ein DOIF und tut seinen Dienst. Die Advent==0 o.1 steuert dann meine Weihnachtsbeleuchtung am Haus. Da ist ja der Anfangs- und End- Zeitpunkt immer gleich.
Trotzdem Vielen Dank!
Warum nutzt Du das Attribut "disable" des DOIF nicht direkt?
Denke wegen der einfachen übersichtigkeit. Habe den Dummy auch im FTUI eingebunden... Ja würde auch ohne dummy gehen aber so ist es auf einen Schlag sichtbar...