Hallo,
ich möchte etwas ganz einfaches machen, nämlich mit einem DOIF zu einer bestimmten Zeit eine push Message ausgeben. Das klappt auch sehr gut, wenn die Zeit explizit in der DOIF-Triggerbedingung angegeben ist, aber nicht, wenn es sich um ein Reading handelt. Egal ob es der State eines Dummies ist oder ein Reading eines Dummies.
Funktioniert:
defmod di_termin_2 DOIF ([17:10]) ( { pushMessage("Termin","[termin2_text]","TERMIN") } )
Wert als Reading eines Dummy:
defmod termine dummy
attr termine DbLogExclude .*
attr termine room Home,Termine
attr termine setList day1 day2 name1 name2 sw1 sw2 text1 text2 time1 time2
oder als selbstständiges Dummy:
defmod termin2_time dummy
attr termin2_time DbLogExclude .*
attr termin2_time room Termine
Geht nicht:
defmod di_termin_2 DOIF { if ([termin2_time:state]) { pushMessage("Termin","[termin2_text:state]","TERMIN") } }
defmod di_termin_2 DOIF ([termin2_time]) ({ pushMessage("Termin","[termine:text2]","TERMIN") })
defmod di_termin_2 DOIF ([termine:time2]) ({ pushMessage("Termin","[termine:text2]","TERMIN") })
Warum das nicht geht ist mir schleierhaft, und es wurden solche Probleme schon mehrfach hier angesprochen, aber ich habe keine eindeutige Lösung gefunden. Sicher kein Fehler des DOIF, sonder eins meiner Definition. Es ist egal ob beim ersten oder zweiten DOIF state oder STATE abgefragt wird, es geht so nicht. In der CommandReferenz steht zwar dankenswerterweise viel über DOIF, aber keines mit Zeit-Readings als Triggerbedingung.
Aber wie muss es richtig lauten?
Vielen Dank schon mal.
DOIF ([[termine:time2]])
Siehe https://fhem.de/commandref_DE.html#DOIF_Indirekten_Zeitangaben
Vielen Dank, das hatte ich schon mal im anderen Zusammenhang verwendet, vergessen und nun in CommandReferenz nicht bist zu dieser Stelle gelesen. Nun bin ich erst mal glücklich.