Resetwait nur für einen Command möglich?

Begonnen von bismosa, 21 Dezember 2019, 11:16:57

Vorheriges Thema - Nächstes Thema

bismosa

Hallo!

Kaum hat man etwas fertig möchte man schon optimieren  :)

Ich habe die Steuerung meiner Weihnachtsbeleuchtung nach Helligkeit umgesetzt.
(https://forum.fhem.de/index.php/topic,106392.0.html)

defmod di_lamp DOIF \
##1 - Manuell eingeschaltet\
##Nach 60Min abschalten,\
([lamp:"on"] and ([$SELF:state] ne "cmd_2") and ([$SELF:state] ne "cmd_3"))\
(\
##Nur abschalten, wenn nicht mittlerweile wieder Dunkel und im Automatikzeitfenster\
if ((not ($hms gt ("[Weihnachtsbeleuchtung_Einstellung:start]") and $hms lt ("[Weihnachtsbeleuchtung_Einstellung:end]"))) or \
[sensor] > [Weihnachtsbeleuchtung_Einstellung:helligkeit]) \
(set lamp off)\
)\
\
##2 - Zeit und Helligkeit\
DOELSEIF ( [$SELF:wait_timer] !~ "cmd_1 lamp" and\
[[Weihnachtsbeleuchtung_Einstellung:start]-[Weihnachtsbeleuchtung_Einstellung:end]] and \
[sensor] < ([Weihnachtsbeleuchtung_Einstellung:helligkeit] - [Weihnachtsbeleuchtung_Einstellung:hysterese])) \
(\
IF ([lamp] ne "on") (set lamp on)\
)\
##3 - Hysterese\
DOELSEIF ( [$SELF:wait_timer] !~ "cmd_1 lamp" and \
[[Weihnachtsbeleuchtung_Einstellung:start]-[Weihnachtsbeleuchtung_Einstellung:end]] and \
[sensor] <= [Weihnachtsbeleuchtung_Einstellung:helligkeit])\
(\
## Nichts unternehmen! Zwischenzustand!\
)\
##4 - Hell - AUS\
DOELSEIF ( [$SELF:wait_timer] !~ "cmd_1 lamp" and\
[[Weihnachtsbeleuchtung_Einstellung:start]-[Weihnachtsbeleuchtung_Einstellung:end]] and \
[sensor] > [Weihnachtsbeleuchtung_Einstellung:helligkeit])\
(\
IF ([lamp] ne "off") (set lamp off)\
)\
##5 - Nach der eingestellten Zeit\
DOELSEIF ([[Weihnachtsbeleuchtung_Einstellung:end]])\
(\
IF ([lamp] ne "off") (set lamp off)\
)\

attr di_lamp checkall all
attr di_lamp devStateIcon 1
attr di_lamp do resetwait
attr di_lamp group Kombinierte Ereignis- und Zeitsteuerung
attr di_lamp icon helper_doif
attr di_lamp room Weihnachten
attr di_lamp stateFormat state\
wait_timer
attr di_lamp wait 10:1:1:1

setstate di_lamp cmd_4\
no timer
setstate di_lamp 2019-12-19 10:40:58 Device sensor
setstate di_lamp 2019-12-19 10:40:59 cmd 4
setstate di_lamp 2019-12-19 10:40:59 cmd_event sensor
setstate di_lamp 2019-12-19 10:40:59 cmd_nr 4
setstate di_lamp 2019-12-19 10:40:47 e_lamp_events on
setstate di_lamp 2019-12-19 10:40:58 e_sensor_STATE 14460
setstate di_lamp 2019-12-19 10:39:48 mode enabled
setstate di_lamp 2019-12-19 10:40:59 state cmd_4
setstate di_lamp 2019-12-19 10:39:48 timer_01_c02 20.12.2019 06:30:00
setstate di_lamp 2019-12-19 10:39:48 timer_02_c02 19.12.2019 19:22:00
setstate di_lamp 2019-12-19 10:39:48 timer_03_c03 20.12.2019 06:30:00
setstate di_lamp 2019-12-19 10:39:48 timer_04_c03 19.12.2019 19:22:00
setstate di_lamp 2019-12-19 10:39:48 timer_05_c04 20.12.2019 06:30:00
setstate di_lamp 2019-12-19 10:39:48 timer_06_c04 19.12.2019 19:22:00
setstate di_lamp 2019-12-19 10:39:48 timer_07_c05 19.12.2019 19:22:00
setstate di_lamp 2019-12-19 10:40:59 wait_timer no timer


Dabei habe ich auch in cmd_1 einen Taster, der die Beleuchtung für eine Stunde einschaltet. Damit man die Zeit auch resetten kann, habe ich das Attribut Resetwait verwendet.

Nun ist es aber so, das ich auch eine Wartezeit für die anderen Zweige definiert habe (attr di_lamp wait 3600:60:60:60), um bei schnellen Helligkeitsänderungen nicht sofort zu schalten. Ist diese Wartezeit zu lang und eine "normale" Helligkeitsänderung findet statt, wird der Timer ja jedes Mal zurückgesetzt. Dies möchte ich aber nur beim ersten Command haben.

Bestimmt habe ich etwas übersehen...oder eine Funktion noch nicht damit in Verbindung gebracht?

Gruß
Bismosa
1x nanoCUL 433MHz (SlowRF Intertechno) für Fenstersensoren
1x nanoCUL 868Mhz für MAX (9x HT 1xWT)
1x ZigBee CUL
Weiteres: Squeezebox server, Kindle Display, ESP8266, Löterfahrung, ...

Damian

Resetwait gilt für alle Zweige und lässt sich nicht auf einzelne Zweige einschränken. Dazu müsste man mehre DOIFs definieren oder im DOIF-Perlmodus programmieren.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF