Hauptmenü

DOIF will nicht so richtig

Begonnen von Spartacus, 12 Dezember 2019, 20:57:56

Vorheriges Thema - Nächstes Thema

Spartacus

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.
Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R

MadMax-FHEM

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

FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Per

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.

loescher

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.