Hallo zusammen,
auch wenn der Titel des Threads die Frage nahelegt: ja ich habe das Forum bereits nach ähnlichen Einträgen durchsucht und leider nichts passendes gefunden ;)
Für die Bewässerung meiner Dachterrasse habe ich ein DOIF gebaut, welches beim unterschreiten eines bestimmten Bodenfeuchtewerts (Gardena Sensor) eine Pumpe für 15 Minuten einschaltet.
Um zu verhindern, dass die Pumpe bei heißem Wetter ständig läuft, habe ich auch ein cmdpause gesetzt, welches das nächste Triggern um 4 Stunden verzögern soll.
Da die Pumpe im Betrieb doch relativ laut ist, soll das DOIF nur in der Zeit von 08:00 - 22.00 Uhr triggern.
Das DOIF funktioniert einwandfrei - solange KEIN cmdpause gesetzt ist - egal bei welchem intervall. D.h. das DOIF trigger NIE auch nicht einmal oder nach Ablauf der Pause.
Das Pradoxe an der Sache ist - das DOIF lief MIT cmdpause über mehrere Monate einwandfrei, bis ich den Sensor tauschen musste (gleiches Modell).
Nach Stunden der Fehlersuche bin ich mit meinem Latein am Ende!
Kann mir jemand helfen, vom Schlauch herunter zu kommen, auf dem ich gerade stehe? :-\
LG Ralf
[code]define timer_BEWAESSERUNG_DACHTERRASSE DOIF ([08:00-22:00] and [DACH_2:humidity-humidity] <= 20 )\
(set dachterrasse_SWE_01 on-for-timer 900)\
({fhem("set pushmsg msg title='BEWÄSSERUNG DACHTERRASSE' message='Bodenfeuchte Dach: ".ReadingsVal("DACH_2","humidity-humidity","")." %'")})\
DOELSE
attr timer_BEWAESSERUNG_DACHTERRASSE do always
attr timer_BEWAESSERUNG_DACHTERRASSE group Gartensteuerung
attr timer_BEWAESSERUNG_DACHTERRASSE room STEUERUNG
attr timer_BEWAESSERUNG_DACHTERRASSE stateFormat NEXT: timer_01_c01 | LAST CMD: cmd
# DEF ([08:00-22:00] and [DACH_2:humidity-humidity] <= 20 )
# (set dachterrasse_SWE_01 on-for-timer 900)
# ({fhem("set pushmsg msg title='BEWÄSSERUNG DACHTERRASSE' message='Bodenfeuchte Dach: ".ReadingsVal("DACH_2","humidity-humidity","")." %'")})
#DOELSE
# FUUID 5ebeb786-f33f-d5e6-d4e7-8ceef903d08fcad5
# MODEL FHEM
# NAME timer_BEWAESSERUNG_DACHTERRASSE
# NOTIFYDEV global,DACH_2
# NR 556
# NTFY_ORDER 50-timer_BEWAESSERUNG_DACHTERRASSE
# STATE NEXT: 28.06.2025 08:00:00 | LAST CMD: 2
# TYPE DOIF
# VERSION 29460 2024-12-29 20:25:48
# eventCount 78
# READINGS:
# 2025-06-27 12:50:03 Device DACH_2
# 2025-06-27 13:21:38 cmd 2
# 2025-06-27 13:21:38 cmd_event timer_BEWAESSERUNG_DACHTERRASSE
# 2025-06-27 13:21:38 cmd_nr 2
# 2025-06-27 12:50:03 e_DACH_2_humidity-humidity 35
# 2025-06-27 12:30:17 mode enabled
# 2025-06-27 13:21:38 state cmd_2
# 2025-06-27 12:30:17 timer_01_c01 28.06.2025 08:00:00
# 2025-06-27 12:30:17 timer_02_c01 27.06.2025 22:00:00
# Regex:
# accu:
# bar:
# barAvg:
# collect:
# cond:
# DACH_2:
# 0:
# humidity-humidity ^DACH_2$:^humidity-humidity:
# attr:
# cmdState:
# cmdpause:
# wait:
# waitdel:
# condition:
# 0 ::DOIF_time($hash,0,1,$wday,$hms) and ::ReadingValDoIf($hash,'DACH_2','humidity-humidity') <= 20
# days:
# do:
# 0:
# 0 set dachterrasse_SWE_01 on-for-timer 900
# 1 {fhem("set pushmsg msg title='BEWÄSSERUNG DACHTERRASSE' message='Bodenfeuchte Dach: ".ReadingsVal("DACH_2","humidity-humidity","")." %'")}
# 1:
# 0
# helper:
# NOTIFYDEV global,DACH_2
# event humidity-humidity: 35,soil_temperature-temperature: 28,device_info-last_time_online: 2025-06-27 12:48:50,T: 28°C, H: 35%,D: 11.1
# globalinit 1
# last_timer 2
# sleeptimer -1
# timerdev
# timerevent humidity-humidity: 35,soil_temperature-temperature: 28,device_info-last_time_online: 2025-06-27 12:48:50,T: 28°C, H: 35%,D: 11.1
# timerevents
# timereventsState
# triggerDev
# internals:
# interval:
# 0 -1
# 1 0
# intervalfunc:
# localtime:
# 0 1751090400
# 1 1751054400
# readings:
# all DACH_2:humidity-humidity
# realtime:
# 0 08:00:00
# 1 22:00:00
# time:
# 0 08:00:00
# 1 22:00:00
# timeCond:
# 0 0
# 1 0
# timer:
# 0 0
# 1 0
# timers:
# 0 0 1
# trigger:
# triggertime:
# 1751054400:
# localtime 1751054400
# hash:
# 1751090400:
# localtime 1751090400
# hash:
# uiState:
# uiTable:
#
setstate timer_BEWAESSERUNG_DACHTERRASSE NEXT: 28.06.2025 08:00:00 | LAST CMD: 2
setstate timer_BEWAESSERUNG_DACHTERRASSE 2025-06-27 12:31:19 .eM on
setstate timer_BEWAESSERUNG_DACHTERRASSE 2025-06-27 12:50:03 Device DACH_2
setstate timer_BEWAESSERUNG_DACHTERRASSE 2025-06-27 13:21:38 cmd 2
setstate timer_BEWAESSERUNG_DACHTERRASSE 2025-06-27 13:21:38 cmd_event timer_BEWAESSERUNG_DACHTERRASSE
setstate timer_BEWAESSERUNG_DACHTERRASSE 2025-06-27 13:21:38 cmd_nr 2
setstate timer_BEWAESSERUNG_DACHTERRASSE 2025-06-27 12:50:03 e_DACH_2_humidity-humidity 35
setstate timer_BEWAESSERUNG_DACHTERRASSE 2025-06-27 12:30:17 mode enabled
setstate timer_BEWAESSERUNG_DACHTERRASSE 2025-06-27 13:21:38 state cmd_2
setstate timer_BEWAESSERUNG_DACHTERRASSE 2025-06-27 12:30:17 timer_01_c01 28.06.2025 08:00:00
setstate timer_BEWAESSERUNG_DACHTERRASSE 2025-06-27 12:30:17 timer_02_c01 27.06.2025 22:00:00
[/code]
Zum Nachvollziehen des Problems musst du:
1) cmdpause-Attribut setzen
2) den Zustand posten, wo du glaubst, dass es nicht funktioniert hat
... war klar das was fehlt ;-)
Danke für die Unterstützung.
LG Ralf
[code]define timer_BEWAESSERUNG_DACHTERRASSE DOIF ([08:00-22:00] and [DACH_2:humidity-humidity] <= 20 )\
(set dachterrasse_SWE_01 on-for-timer 900)\
({fhem("set pushmsg msg title='BEWÄSSERUNG DACHTERRASSE' message='Bodenfeuchte Dach: ".ReadingsVal("DACH_2","humidity-humidity","")." %'")})\
DOELSE
attr timer_BEWAESSERUNG_DACHTERRASSE cmdpause 14400:0
attr timer_BEWAESSERUNG_DACHTERRASSE do always
attr timer_BEWAESSERUNG_DACHTERRASSE group Gartensteuerung
attr timer_BEWAESSERUNG_DACHTERRASSE room STEUERUNG
attr timer_BEWAESSERUNG_DACHTERRASSE stateFormat NEXT: timer_01_c01 | LAST CMD: cmd
# DEF ([08:00-22:00] and [DACH_2:humidity-humidity] <= 20 )
# (set dachterrasse_SWE_01 on-for-timer 900)
# ({fhem("set pushmsg msg title='BEWÄSSERUNG DACHTERRASSE' message='Bodenfeuchte Dach: ".ReadingsVal("DACH_2","humidity-humidity","")." %'")})
#DOELSE
# FUUID 5ebeb786-f33f-d5e6-d4e7-8ceef903d08fcad5
# MODEL FHEM
# NAME timer_BEWAESSERUNG_DACHTERRASSE
# NOTIFYDEV global,DACH_2
# NR 556
# NTFY_ORDER 50-timer_BEWAESSERUNG_DACHTERRASSE
# STATE NEXT: 28.06.2025 08:00:00 | LAST CMD: 2
# TYPE DOIF
# VERSION 29460 2024-12-29 20:25:48
# eventCount 81
# READINGS:
# 2025-06-27 13:50:09 Device DACH_2
# 2025-06-27 15:46:17 cmd 2
# 2025-06-27 15:46:17 cmd_event timer_BEWAESSERUNG_DACHTERRASSE
# 2025-06-27 15:46:17 cmd_nr 2
# 2025-06-27 13:50:09 e_DACH_2_humidity-humidity 50
# 2025-06-27 12:30:17 mode enabled
# 2025-06-27 15:46:17 state cmd_2
# 2025-06-27 12:30:17 timer_01_c01 28.06.2025 08:00:00
# 2025-06-27 12:30:17 timer_02_c01 27.06.2025 22:00:00
# Regex:
# accu:
# bar:
# barAvg:
# collect:
# cond:
# DACH_2:
# 0:
# humidity-humidity ^DACH_2$:^humidity-humidity:
# attr:
# cmdState:
# cmdpause:
# 14400
# 0
# wait:
# waitdel:
# condition:
# 0 ::DOIF_time($hash,0,1,$wday,$hms) and ::ReadingValDoIf($hash,'DACH_2','humidity-humidity') <= 20
# days:
# do:
# 0:
# 0 set dachterrasse_SWE_01 on-for-timer 900
# 1 {fhem("set pushmsg msg title='BEWÄSSERUNG DACHTERRASSE' message='Bodenfeuchte Dach: ".ReadingsVal("DACH_2","humidity-humidity","")." %'")}
# 1:
# 0
# helper:
# NOTIFYDEV global,DACH_2
# event humidity-humidity: 50,soil_temperature-temperature: 26,radio-quality: 90,device_info-last_time_online: 2025-06-27 13:48:50,T: 26°C, H: 50%,D: 14.8
# globalinit 1
# last_timer 2
# sleeptimer -1
# timerdev
# timerevent humidity-humidity: 50,soil_temperature-temperature: 26,radio-quality: 90,device_info-last_time_online: 2025-06-27 13:48:50,T: 26°C, H: 50%,D: 14.8
# timerevents
# timereventsState
# triggerDev
# DOIF_eventa:
# cmd_nr: 2
# cmd: 2
# cmd_event: timer_BEWAESSERUNG_DACHTERRASSE
# cmd_2
# DOIF_eventas:
# cmd_nr: 2
# cmd: 2
# cmd_event: timer_BEWAESSERUNG_DACHTERRASSE
# state: cmd_2
# internals:
# interval:
# 0 -1
# 1 0
# intervalfunc:
# localtime:
# 0 1751090400
# 1 1751054400
# readings:
# all DACH_2:humidity-humidity
# realtime:
# 0 08:00:00
# 1 22:00:00
# time:
# 0 08:00:00
# 1 22:00:00
# timeCond:
# 0 0
# 1 0
# timer:
# 0 0
# 1 0
# timers:
# 0 0 1
# trigger:
# triggertime:
# 1751054400:
# localtime 1751054400
# hash:
# 1751090400:
# localtime 1751090400
# hash:
# uiState:
# uiTable:
#
setstate timer_BEWAESSERUNG_DACHTERRASSE NEXT: 28.06.2025 08:00:00 | LAST CMD: 2
setstate timer_BEWAESSERUNG_DACHTERRASSE 2025-06-27 12:31:19 .eM on
setstate timer_BEWAESSERUNG_DACHTERRASSE 2025-06-27 13:50:09 Device DACH_2
setstate timer_BEWAESSERUNG_DACHTERRASSE 2025-06-27 15:46:17 cmd 2
setstate timer_BEWAESSERUNG_DACHTERRASSE 2025-06-27 15:46:17 cmd_event timer_BEWAESSERUNG_DACHTERRASSE
setstate timer_BEWAESSERUNG_DACHTERRASSE 2025-06-27 15:46:17 cmd_nr 2
setstate timer_BEWAESSERUNG_DACHTERRASSE 2025-06-27 13:50:09 e_DACH_2_humidity-humidity 50
setstate timer_BEWAESSERUNG_DACHTERRASSE 2025-06-27 12:30:17 mode enabled
setstate timer_BEWAESSERUNG_DACHTERRASSE 2025-06-27 15:46:17 state cmd_2
setstate timer_BEWAESSERUNG_DACHTERRASSE 2025-06-27 12:30:17 timer_01_c01 28.06.2025 08:00:00
setstate timer_BEWAESSERUNG_DACHTERRASSE 2025-06-27 12:30:17 timer_02_c01 27.06.2025 22:00:00
[/code]
Du hast cmdpause für den ersten Pfad cmd1 definiert, hier darf es keine Wiederholung innerhalb von 4 Stunden geben. Bisher befinden wir uns im cmd2 Fall. Also noch nicht innerhalb der Testbedingung.
...schon klar!
Nur müsste dann nach meinem Verständnis das Modul ja schon wenigstens einmal getriggert worden sein, oder? Das ist aber nicht der Fall - das Modul ist noch nie gestartet - woher soll dann die Wartezeit kommen ?
Und selbst wenn der Timestamp der Initialisierung herangezogen würde, müsste dann um 19:46:17 der nächste Trigger erfolgen - war aber nicht der Fall. Oder verstehe ich da was falsch? ???
Mal sehen was passiert wenn morgen um 08:00 Uhr die nächste Zeitbedingung erfüllt ist.
Aber auf jeden Fall schon mal herzlichen Dank für deine Unterstützung bis hierher, Damian.
LG Ralf
Guten Morgen zusammen,
wie - leider - erwartet hat das DOIF auch heute morgen um 08:00 nicht getriggert, obwohl beide Bedingungen wahr sind: Zeitintervall [08:00-22:00] und Bodenfeuchte <= 65.
Hier das Listing dazu:
[code]define timer_BEWAESSERUNG_DACHTERRASSE DOIF ([08:00-22:00] and [DACH_2:humidity-humidity] <= 65 )\
(set dachterrasse_SWE_01 on-for-timer 900)\
({fhem("set pushmsg msg title='BEWÄSSERUNG DACHTERRASSE' message='Bodenfeuchte Dach: ".ReadingsVal("DACH_2","humidity-humidity","")." %'")})\
DOELSE
attr timer_BEWAESSERUNG_DACHTERRASSE cmdpause 14400:0
attr timer_BEWAESSERUNG_DACHTERRASSE do always
attr timer_BEWAESSERUNG_DACHTERRASSE group Gartensteuerung
attr timer_BEWAESSERUNG_DACHTERRASSE room STEUERUNG
attr timer_BEWAESSERUNG_DACHTERRASSE stateFormat NEXT: timer_01_c01 | LAST CMD: cmd
# DEF ([08:00-22:00] and [DACH_2:humidity-humidity] <= 65 )
# (set dachterrasse_SWE_01 on-for-timer 900)
# ({fhem("set pushmsg msg title='BEWÄSSERUNG DACHTERRASSE' message='Bodenfeuchte Dach: ".ReadingsVal("DACH_2","humidity-humidity","")." %'")})
#DOELSE
# FUUID 5ebeb786-f33f-d5e6-d4e7-8ceef903d08fcad5
# MODEL FHEM
# NAME timer_BEWAESSERUNG_DACHTERRASSE
# NOTIFYDEV global,DACH_2
# NR 556
# NTFY_ORDER 50-timer_BEWAESSERUNG_DACHTERRASSE
# STATE NEXT: 28.06.2025 08:00:00 | LAST CMD: 2
# TYPE DOIF
# VERSION 29460 2024-12-29 20:25:48
# eventCount 89
# READINGS:
# 2025-06-28 05:51:43 Device DACH_2
# 2025-06-28 05:51:43 cmd 2
# 2025-06-28 05:51:43 cmd_event DACH_2
# 2025-06-28 05:51:43 cmd_nr 2
# 2025-06-28 05:51:43 e_DACH_2_humidity-humidity 55
# 2025-06-27 23:34:27 mode enabled
# 2025-06-28 05:51:43 state cmd_2
# 2025-06-27 23:34:27 timer_01_c01 28.06.2025 08:00:00
# 2025-06-27 23:34:27 timer_02_c01 28.06.2025 22:00:00
# Regex:
# accu:
# bar:
# barAvg:
# collect:
# cond:
# DACH_2:
# 0:
# humidity-humidity ^DACH_2$:^humidity-humidity:
# attr:
# cmdState:
# cmdpause:
# 14400
# 0
# wait:
# waitdel:
# condition:
# 0 ::DOIF_time($hash,0,1,$wday,$hms) and ::ReadingValDoIf($hash,'DACH_2','humidity-humidity') <= 65
# days:
# do:
# 0:
# 0 set dachterrasse_SWE_01 on-for-timer 900
# 1 {fhem("set pushmsg msg title='BEWÄSSERUNG DACHTERRASSE' message='Bodenfeuchte Dach: ".ReadingsVal("DACH_2","humidity-humidity","")." %'")}
# 1:
# 0
# helper:
# NOTIFYDEV global,DACH_2
# event timer_1
# globalinit 1
# last_timer 2
# sleeptimer -1
# timerdev
# timerevent timer_1
# triggerDev
# timerevents:
# timer_1
# timereventsState:
# timer_1
# triggerEvents:
# timer_1
# triggerEventsState:
# timer_1
# internals:
# interval:
# 0 -1
# 1 0
# intervalfunc:
# intervaltimer:
# localtime:
# 0 1751090400
# 1 1751140800
# readings:
# all DACH_2:humidity-humidity
# realtime:
# 0 08:00:00
# 1 22:00:00
# time:
# 0 08:00:00
# 1 22:00:00
# timeCond:
# 0 0
# 1 0
# timer:
# 0 0
# 1 0
# timers:
# 0 0 1
# trigger:
# triggertime:
# 1751140800:
# localtime 1751140800
# hash:
# uiState:
# uiTable:
#
setstate timer_BEWAESSERUNG_DACHTERRASSE NEXT: 28.06.2025 08:00:00 | LAST CMD: 2
setstate timer_BEWAESSERUNG_DACHTERRASSE 2025-06-27 12:31:19 .eM on
setstate timer_BEWAESSERUNG_DACHTERRASSE 2025-06-28 05:51:43 Device DACH_2
setstate timer_BEWAESSERUNG_DACHTERRASSE 2025-06-28 05:51:43 cmd 2
setstate timer_BEWAESSERUNG_DACHTERRASSE 2025-06-28 05:51:43 cmd_event DACH_2
setstate timer_BEWAESSERUNG_DACHTERRASSE 2025-06-28 05:51:43 cmd_nr 2
setstate timer_BEWAESSERUNG_DACHTERRASSE 2025-06-28 05:51:43 e_DACH_2_humidity-humidity 55
setstate timer_BEWAESSERUNG_DACHTERRASSE 2025-06-27 23:34:27 mode enabled
setstate timer_BEWAESSERUNG_DACHTERRASSE 2025-06-28 05:51:43 state cmd_2
setstate timer_BEWAESSERUNG_DACHTERRASSE 2025-06-27 23:34:27 timer_01_c01 28.06.2025 08:00:00
setstate timer_BEWAESSERUNG_DACHTERRASSE 2025-06-27 23:34:27 timer_02_c01 28.06.2025 22:00:00
[/code]
Ich kann das Verhalten bei mir nachvollziehen. Dass nicht geschaltet wird, liegt daran, dass zum Triggerzeitpunkt um 08:00 geschaut wird von wann der letzte Status des DOIF-Devices ist. Wenn dieser innerhalb der angegebenen Zeitspanne ist, dann passiert nichts.
Daher ist cmdpause für deine Intention nicht geeignet.
Ich würde es mit Intervall-Timer ohne cmdpause lösen:
DOIF ([08:00-22:00,+04:00] and [?DACH_2:humidity-humidity] <= 65 ) ...