DOIF Umsetzungsproblem für mehrere Devices

Begonnen von Keule_09, 27 Februar 2019, 21:48:19

Vorheriges Thema - Nächstes Thema

Keule_09

Hallo

hab eine Frage zu einem DOIF das folgendermassen aussieht:

defmod autoRollBad_DOIF DOIF ([auto_rolladen_bad_fenster] eq "on"\
and\
(([auto_rolladen_zentral] eq "Sommer"\
and\
[daemmerung_messwert] ge [auto_wetterstation_daemmerung_so:state:d]\
and\
[temperatur_wetterstation] ge [auto_wetterstation_temp:state:d]\
)\
or\
(\
[auto_rolladen_zentral] eq "Winter"\
and\
[daemmerung_messwert] le [auto_wetterstation_daemmerung_wi:state:d]\
and\
[[auto_rolladen_starttime_wi]-[auto_rolladen_endtime_wi]]\
)\
)\
)\
(set rolladen_bad_fenster Nacht)
attr autoRollBad_DOIF DbLogExclude .*
attr autoRollBad_DOIF cmdpause 14400
attr autoRollBad_DOIF do always
attr autoRollBad_DOIF group Rolladenautomatik
attr autoRollBad_DOIF room Automation->DOIF


Ich möchte nun das Ganze für 9 andere Fenster/Türen auch anlegen, es ändert sich nur aber nur der fett markierte Teil: rolladen_bad_fenster und auto_rolladen_bad_fenster.
Muss ich für alle ein einzelnes DOIF anlegen oder kann man da den Code irgendwie zusammenfassen ?

Gruß Marco

Per

Du kannst das auto_rolladen_bad_fenster aus der Bedingung nehmen und auf der Ausführungsseite einen Filter verwenden.

Damian

Du könntest mit $DEVICE arbeiten :

defmod autorollo DOIF ( ["rolladen_.*_fenster"] and  [?auto_$DEVICE] eq "on"] ...
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Keule_09

ok danke werde es die Tage mal ausprobieren

rabehd

Mein Problem ist ähnlich, aber die Lösung scheint bei mir nicht zu funktionieren.
Ich möchte mit indirekten Zeiten arbeiten und habe für jedes Device ein DOIF angelegt.
Bedingungsteil:([{strftime("%H:%M",localtime([WeckerRT:aWeckTime]))}] and ($ymd eq {strftime("%Y-%m-%d", localtime([WeckerRT:aWeckTime]))}))
Es gibt die Decive WeckerRT und WeckerKT und später noch mehr.
Kann man hier auch mit Wildcards arbeiten?
Auch funktionierende Lösungen kann man hinterfragen.