DOIF triggert nicht nach setzen von "cmdpause"

Begonnen von fast-eddy, 27 Juni 2025, 13:50:37

Vorheriges Thema - Nächstes Thema

fast-eddy

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]
Raspberry Pi | HMUART | HMLAN | JeeLink | HUE | Z-WAVE.ME | HM-LC-Bl1PBU-FM | HM-PB-2-WM55 HM-CC-RT-DN | HM-LC-SW4-SM | HM-WDS10-TH-O HM-WDS30-T-O | HM-LC-SW4-DR | HM-Sen-MDIR-O-2 | HM-SEC-SCo |  Technoline TX 29 DT-HT|

Damian

#1
Zum Nachvollziehen des Problems musst du:

1) cmdpause-Attribut setzen
2) den Zustand posten, wo du glaubst, dass es nicht funktioniert hat
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

fast-eddy

... 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]
Raspberry Pi | HMUART | HMLAN | JeeLink | HUE | Z-WAVE.ME | HM-LC-Bl1PBU-FM | HM-PB-2-WM55 HM-CC-RT-DN | HM-LC-SW4-SM | HM-WDS10-TH-O HM-WDS30-T-O | HM-LC-SW4-DR | HM-Sen-MDIR-O-2 | HM-SEC-SCo |  Technoline TX 29 DT-HT|

Damian

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.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

fast-eddy

...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
Raspberry Pi | HMUART | HMLAN | JeeLink | HUE | Z-WAVE.ME | HM-LC-Bl1PBU-FM | HM-PB-2-WM55 HM-CC-RT-DN | HM-LC-SW4-SM | HM-WDS10-TH-O HM-WDS30-T-O | HM-LC-SW4-DR | HM-Sen-MDIR-O-2 | HM-SEC-SCo |  Technoline TX 29 DT-HT|

fast-eddy

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]
Raspberry Pi | HMUART | HMLAN | JeeLink | HUE | Z-WAVE.ME | HM-LC-Bl1PBU-FM | HM-PB-2-WM55 HM-CC-RT-DN | HM-LC-SW4-SM | HM-WDS10-TH-O HM-WDS30-T-O | HM-LC-SW4-DR | HM-Sen-MDIR-O-2 | HM-SEC-SCo |  Technoline TX 29 DT-HT|

Damian

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 ) ...





Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF