FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: Spartacus am 12 Dezember 2019, 20:57:56

Titel: DOIF will nicht so richtig
Beitrag von: Spartacus am 12 Dezember 2019, 20:57:56
Hallo,
bin etwas aus der Übung, da ich lange nix mit fhem gemacht habe. Ich habe eine Funktion Weihnachtszeit, die zwischen Totensonntag un d 3 Könige eine "1" zurückliefert und sonst eine "0".

Jetzt will ich ein einfaches dummy-Device setzten, was einfach nur anzeigt, ob wir in dem Weihnachtszeitszeitaum sind, oder nicht. Aber irgendwie kriege ich das nicht hin, da es ja regelmäßig angetriggert werden muss. Daher wollte ich ein DOIF bauen, welches auf den Status der Funktion triggert...klappt aber nicht! Wo ist hier mein Gedankenfehler?

Danke und Gruß,
Spartacus

defmod weihnachten DOIF ([{Weihnachtszeit}] eq "1")\
(set help.Weihnachtszeit.dum on)\
DOELSEIF ([Weihnachtszeit] eq "0")\
(set help.Weihnachtszeit.dum off)

setstate weihnachten initialized
setstate weihnachten 2019-12-12 20:47:45 cmd 0
setstate weihnachten 2019-12-12 20:47:45 mode enabled
setstate weihnachten 2019-12-12 20:47:45 state initialized
setstate weihnachten 2019-12-12 20:47:45 timer_01_c01 error: the function "Weihnachtszeit" must return a timespec and not 1.
Titel: Antw:DOIF will nicht so richtig
Beitrag von: MadMax-FHEM am 12 Dezember 2019, 22:31:57
Und wer soll hier die Funktion und v.a. wann aufrufen?

Also wäre mein Gedanke warum das nicht geht...

Warum eigentlich "immer" DOIF!?

Mach doch (wenn du es zyklisch willst / nicht anders geht) ein zyklisches at

Vermutlich reicht 1x am Tag!?

Und dann einfach in Perl:


{if(Weihnachtszeit() eq "1"){fhem("set help.Weihnachtszeit.dum on")}else{fhem("set help.Weihnachtszeit.dum off")}}


Gruß, Joachim

Titel: Antw:DOIF will nicht so richtig
Beitrag von: Per am 13 Dezember 2019, 12:18:21
Ein DOIF lohnt hier eigentlich nur, wenn du die Funktion direkt (entweder als Perl-DOIF oder in DOIFReadings) mit aufnimmst.

Außerdem kannst du das Setzen des Dummys mit in die Funktion aufnehmen, dann brauchst du sie nur noch zu starten.

Ansonsten sind die eckigen Klammern um [Weihnachtszeit] falsch, weil Weihnachtszeit kein Device bzw keine Zeitangabe ist.
Titel: Antw:DOIF will nicht so richtig
Beitrag von: loescher am 17 Dezember 2019, 20:08:25
Genau.
Ein DOIF hätte hier nur den Vorteil, wenn du damit gleich auf den dummy verzichtest.
So hab ich es gemacht:


defmod Weihnachtszeit DOIF (([00:00] or ["^global$:^MODIFIED $SELF$"]) and ($md ge "11-23" or $md le "01-15")) DOELSE
attr Weihnachtszeit cmdState true|false
attr Weihnachtszeit comment Zeigt mit true/false an, ob es gerade Weihnachtszeit ist (zwischen 23.11. und 15.1.)
trigger global MODIFIED Weihnachtszeit


LG,
Stephan.