DOIF löst nach FHEM Update nur noch einmal aus

Begonnen von fast-eddy, 17 Juni 2024, 14:20:10

Vorheriges Thema - Nächstes Thema

fast-eddy

Hallo zusammen,

vor ein paar Wochen gab es Probleme mit der Gardena API, für die BOFH auch sehr schnell einen Fix erstellt und diesen per FHEM Update ausgerollt hatte
(https://forum.fhem.de/index.php?topic=75098.msg1313846#msg1313846)

Leider funktioniert eines meiner vielen DOIF seither nicht mehr - ohne dass ich daran etwas geändert habe.
Im Gegensatz zu den anderen DOIF verwendet dieses das Attribut "cmdpause". Lösche ich das Attribut funktioniert das DOIF wieder.
 
Das Fehlerbild sieht folgendermaßen aus: Das DOIF wird nach Initialisierung genau einmal ausgeführt und legt sich danach schlafen, wacht aber auch nach Ablauf des "cmdpause timers" nicht wieder auf.
Getriggert wird das DOIF nur durch einen Gardena Sensor (KUEBEL), der auch brav seine Werte sendet.

Da mein FHEM-System stabil gelaufen ist habe ich ich über längere Zeit kein Update gefahren (Never Touch A Running System!  ;) )
Hat sich in den letzten Monaten etwas an der DOIF-Syntax bzgl. "cmdpause" oder der Behandlung von Events geändert, das ich verpennt habe?
Oder hat jemand eine andere Idee wo der Fehler liegen könnte?

Bin für jede Hilfe dankbar.

Grüße,
Ralf


Hier das Listing des DOIF:
Zitatdefine timer_BEWAESSERUNG_KUEBEL DOIF ([KUEBEL:humidity-humidity] <= 10 and [?NIEDERSCHLAG:basicSet] != 99)\
(set garten_SWC_04 on-for-timer 1200)\
({fhem("set pushmsg msg title='BEWÄSSERUNG KÜBEL' message='Bodenfeuchte Kübel: ".ReadingsVal("KUEBEL","humidity-humidity","")." %'")})\
DOELSEIF ([NIEDERSCHLAG:basicSet] == 99 and [?garten_SWC_04:state] eq "on") \
(set garten_SWC_04 off)\
(set pushmsg msg 'BEWÄSSERUNG KÜBEL' 'Beendet wegen Regen' ''0'')\
DOELSE
attr timer_BEWAESSERUNG_KUEBEL cmdpause 21600:0:0
attr timer_BEWAESSERUNG_KUEBEL do always
attr timer_BEWAESSERUNG_KUEBEL group Gartensteuerung
attr timer_BEWAESSERUNG_KUEBEL room STEUERUNG
#   DEF        ([KUEBEL:humidity-humidity] <= 10 and [?NIEDERSCHLAG:basicSet] != 99)
# (set garten_SWC_04 on-for-timer 1200)
# ({fhem("set pushmsg msg title='BEWÄSSERUNG KÜBEL' message='Bodenfeuchte Kübel: ".ReadingsVal("KUEBEL","humidity-humidity","")." %'")})
#DOELSEIF ([NIEDERSCHLAG:basicSet] == 99 and [?garten_SWC_04:state] eq "on")
# (set garten_SWC_04 off)
# (set pushmsg msg 'BEWÄSSERUNG KÜBEL' 'Beendet wegen Regen' ''0'')
#DOELSE
#   FUUID      5c59da3d-f33f-d5e6-150f-611fc5528f99d635
#   MODEL      FHEM
#   NAME       timer_BEWAESSERUNG_KUEBEL
#   NOTIFYDEV  NIEDERSCHLAG,KUEBEL,global
#   NR         486
#   NTFY_ORDER 50-timer_BEWAESSERUNG_KUEBEL
#   STATE      cmd_3
#   TYPE       DOIF
#   VERSION    28546 2024-02-23 20:11:05
#   eventCount 1
#   READINGS:
#     2024-06-17 13:08:59   Device          KUEBEL
#     2024-06-17 10:13:23   cmd             3
#     2024-06-17 10:13:23   cmd_event       KUEBEL
#     2024-06-17 10:13:23   cmd_nr          3
#     2024-06-17 13:08:59   e_KUEBEL_humidity-humidity 5
#     2024-06-16 20:27:31   mode            enabled
#     2024-06-17 10:13:23   state           cmd_3
#   Regex:
#     accu:
#     bar:
#     barAvg:
#     collect:
#     cond:
#       KUEBEL:
#         0:
#           humidity-humidity ^KUEBEL$:^humidity-humidity:
#       NIEDERSCHLAG:
#         1:
#           basicSet   ^NIEDERSCHLAG$:^basicSet:
#   attr:
#     cmdpause:
#       21600
#       0
#       0
#     wait:
#     waitdel:
#   condition:
#     0          ::ReadingValDoIf($hash,'KUEBEL','humidity-humidity') <= 10 and ::ReadingValDoIf($hash,'NIEDERSCHLAG','basicSet') != 99
#     1          ::ReadingValDoIf($hash,'NIEDERSCHLAG','basicSet') == 99 and ::ReadingValDoIf($hash,'garten_SWC_04','state') eq "on"
#   do:
#     0:
#       0          set garten_SWC_04 on-for-timer 1200
#       1          {fhem("set pushmsg msg title='BEWÄSSERUNG KÜBEL' message='Bodenfeuchte Kübel: ".ReadingsVal("KUEBEL","humidity-humidity","")." %'")}
#     1:
#       0          set garten_SWC_04 off
#       1          set pushmsg msg 'BEWÄSSERUNG KÜBEL' 'Beendet wegen Regen' ''0''
#     2:
#       0         
#   helper:
#     NOTIFYDEV  NIEDERSCHLAG,KUEBEL,global
#     event      humidity-humidity: 5,device_info-last_time_online: 2024-06-17 13:08:54,T: 26°C, H: 5%,D: -16.6
#     globalinit 1
#     last_timer 0
#     sleeptimer -1
#     timerdev   
#     timerevent humidity-humidity: 5,device_info-last_time_online: 2024-06-17 13:08:54,T: 26°C, H: 5%,D: -16.6
#     timerevents
#     timereventsState
#     triggerDev
#   internals:
#   perlblock:
#   readings:
#     all         KUEBEL:humidity-humidity NIEDERSCHLAG:basicSet
#   trigger:
#   uiState:
#   uiTable:
#
setstate timer_BEWAESSERUNG_KUEBEL cmd_3
setstate timer_BEWAESSERUNG_KUEBEL 2024-06-17 13:08:59 Device KUEBEL
setstate timer_BEWAESSERUNG_KUEBEL 2024-06-17 10:13:23 cmd 3
setstate timer_BEWAESSERUNG_KUEBEL 2024-06-17 10:13:23 cmd_event KUEBEL
setstate timer_BEWAESSERUNG_KUEBEL 2024-06-17 10:13:23 cmd_nr 3
setstate timer_BEWAESSERUNG_KUEBEL 2024-06-17 13:08:59 e_KUEBEL_humidity-humidity 5
setstate timer_BEWAESSERUNG_KUEBEL 2024-06-16 20:27:31 mode enabled
setstate timer_BEWAESSERUNG_KUEBEL 2024-06-17 10:13:23 state cmd_3

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

Kann es sein, dass es für die Parameter des Attributs "cmdpause" eine Größenbeschränkung gibt?

Habe jetzt das DOIF Schritt für Schritt neu aufgebaut (exakt so wie vorher) und jeden Schritt einzeln getestet.
Dabei ist der Eindruck entstanden, dass es mit kleinen Pausen-Werten kein Problem gibt mit großen Zeiträumen (>20.000 Sek) aber schon. Vielleicht täusche ich mich aber auch - Lange Intervalle sind halt schwer zu testen :-|
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

Aktuelles Statusupdate:

Habe das DOIF jetzt soweit zurückgebaut, dass ich mit Sicherheit sagen kann, dass das Problem durch das Attribut "cmdpause" verursacht wird und zwar entgegen meiner letzten Vermutung, unabhängig vom eingetragenen Zeitwert!

Hat das Problem sonst noch jemand? Oder bin ich der einzige?
@Damian: Hast Du evtl. noch eine Idee was den beschriebenen Fehler verursachen kann?

P.S. Habe das auch mit anderen DOIF´s ausprobiert und das Problem tritt IMMER auf sobald man "cmdpause" setzt.
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

Zitat von: fast-eddy am 18 Juni 2024, 20:20:52Aktuelles Statusupdate:

Habe das DOIF jetzt soweit zurückgebaut, dass ich mit Sicherheit sagen kann, dass das Problem durch das Attribut "cmdpause" verursacht wird und zwar entgegen meiner letzten Vermutung, unabhängig vom eingetragenen Zeitwert!

Hat das Problem sonst noch jemand? Oder bin ich der einzige?
@Damian: Hast Du evtl. noch eine Idee was den beschriebenen Fehler verursachen kann?

P.S. Habe das auch mit anderen DOIF´s ausprobiert und das Problem tritt IMMER auf sobald man "cmdpause" setzt.

1. cmdpause muss man mit Vorsicht genießen, es verhindert ja nur eine Ausführung innerhalb einer Zeitspanne, es ist kein Timer, der abläuft. Wenn z. B. ein Event innerhalb der gewünschten Pause kommt, dann wird es einfach ignoriert, aber nicht irgendwann später nachgeholt. Dh. wenn nach der Pause erst mal kein Event kommt, dann passiert auch nichts

2. cmdpause wirkt im Zusammenhang mit do always und anderen Attributen, wenn z. B. do always nicht gesetzt wird, dann wird auch nach Ablauf der Pause der gleiche Zweig nicht ausgeführt, sondern erst dann wenn ein anderer Zweig zuerst dran war
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF