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