Hauptmenü

DOIF mit Selbstbezug

Begonnen von olwaldi, 10 Oktober 2026, 18:22:43

Vorheriges Thema - Nächstes Thema

olwaldi

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.