Ich versuche zu verstehen, wie/ob man selbstbezügliche DOIFs erstellen darf. Hier ein einfaches Beispiel, daß zwar funktioniert, aber in cmd_1 steckenbleibt:
define AudioMode DOIF ([AudioModeKeys] eq "on")\
(set AudioModeKeys off)\
DOELSE\
attr AudioMode cmdState on|off
attr AudioMode do resetwait
attr AudioMode wait 10:0
# DEF ([AudioModeKeys] eq "on")
# (set AudioModeKeys off)
#DOELSE
#
# FUUID 656d878e-f33f-fc3a-38f2-09c42f025fc93f22
# MODEL FHEM
# NAME AudioMode
# NOTIFYDEV global,AudioModeKeys
# NR 73
# NTFY_ORDER 50-AudioMode
# STATE on
# TYPE DOIF
# VERSION 30659 2025-12-25 12:37:16
# eventCount 87
# READINGS:
# 2026-10-10 18:12:54 Device AudioModeKeys
# 2026-10-10 18:13:04 cmd 1
# 2026-10-10 18:13:04 cmd_event AudioModeKeys
# 2026-10-10 18:13:04 cmd_nr 1
# 2026-10-10 18:12:54 e_AudioModeKeys_STATE on
# 2026-10-10 18:11:26 mode enabled
# 2026-10-10 18:13:04 state on
# 2026-10-10 18:13:04 wait_timer no timer
# Regex:
# accu:
# bar:
# barAvg:
# collect:
# cond:
# AudioModeKeys:
# 0:
# &STATE ^AudioModeKeys$
# attr:
# cmdState:
# 0:
# on
# 1:
# off
# wait:
# 0:
# 10
# 1:
# 0
# waitdel:
# condition:
# 0 ::InternalDoIf($hash,'AudioModeKeys','STATE') eq "on"
# do:
# 0:
# 0 set AudioModeKeys off
# 1:
# 0
# helper:
# NOTIFYDEV global,AudioModeKeys
# event on
# globalinit 1
# last_timer 0
# sleepdevice AudioModeKeys
# sleepsubtimer -1
# sleeptimer -1
# timerdev AudioModeKeys
# timerevent on
# triggerDev AudioModeKeys
# DOIF_eventa:
# cmd_nr: 1
# cmd: 1
# cmd_event: AudioModeKeys
# on
# DOIF_eventas:
# cmd_nr: 1
# cmd: 1
# cmd_event: AudioModeKeys
# state: on
# timerevents:
# on
# timereventsState:
# state: on
# triggerEvents:
# on
# triggerEventsState:
# state: on
# internals:
# all AudioModeKeys:STATE
# readings:
# trigger:
# uiState:
# uiTable:
#
setstate AudioMode on
setstate AudioMode 2026-10-10 18:12:54 Device AudioModeKeys
setstate AudioMode 2026-10-10 18:13:04 cmd 1
setstate AudioMode 2026-10-10 18:13:04 cmd_event AudioModeKeys
setstate AudioMode 2026-10-10 18:13:04 cmd_nr 1
setstate AudioMode 2026-10-10 18:12:54 e_AudioModeKeys_STATE on
setstate AudioMode 2026-10-10 18:11:26 mode enabled
setstate AudioMode 2026-10-10 18:13:04 state on
setstate AudioMode 2026-10-10 18:13:04 wait_timer no timer
Vermutlich wird der Status von DOIF auf on/cmd_1 gesetzt, wenn nach 10s der Wert auf off gesetzt wird.
Aber wie erreiche ich mein Ziel, daß der state vom DOIF synchron zu AudioModeKeys geändert wird?
Grüßle, Michael
Nachtrag: Dasselbe Problem habe ich auch mit einem anderen DOIF, wo nicht so offensichtlich dieselbe Art von "Rekursivität" genutzt wird.