Zwei DOIFs verhalten sich anscheinend unterschiedlich

Begonnen von Rince, 10 September 2025, 16:32:40

Vorheriges Thema - Nächstes Thema

Rince

Edit sagt noch:
Die Zigbee Wassermelder (ZWS16) senden einen Event, wenn sie Wasser erkennen. Und wieder ein Event, wenn sie keines mehr erkennen.
Sonst sind die ziemlich still.


Liebes Forum,

ich fürchte ich habe Tomaten auf den Augen.
Nachdem mir jetzt 2 mal die Küche und der Keller abgesoffen sind, will mit Wassermeldern gewarnt werden.

Bei einem Melder wird über DOIF eine Warnung ausgegeben und alle 10 Sekunden wiederholt, schick.
Bei dem anderen Melder wird zwar initial die Warnung ausgegeben, aber nicht wiederholt.

Ich finde den Fehler nicht.

Hier das List des DOIFs welches funktioniert:
Internals:
  CFGFN     
  DEF        ([zigbee_Ku_Wasser:"true"]) (set ECHO_G090P3087456067K volume 100) (set ECHO_G090P3087456067K speak "Alarm, in die Küche dringt Wasser ein")
  FUUID      68c175a2-f33f-f8e1-6beb-6df75be97b8b18c5
  MODEL      FHEM
  NAME      di_Wasser_Kueche
  NOTIFYDEV  zigbee_Ku_Wasser,global
  NR        154
  NTFY_ORDER 50-di_Wasser_Kueche
  STATE      cmd_2
  TYPE      DOIF
  VERSION    29460 2024-12-29 20:25:48
  eventCount 89
  READINGS:
    2025-09-10 15:44:35  Device          zigbee_Ku_Wasser
    2025-09-10 15:33:49  cmd            2
    2025-09-10 15:33:49  cmd_event      zigbee_Ku_Wasser
    2025-09-10 15:33:49  cmd_nr          2
    2025-09-10 15:44:35  e_zigbee_Ku_Wasser_events battery: 100,false,tamper: false,linkquality: 112,battery_low: false
    2025-09-10 15:21:24  mode            enabled
    2025-09-10 15:33:49  state          cmd_2
    2025-09-10 15:33:49  wait_timer      no timer
  Regex:
    accu:
    bar:
    barAvg:
    collect:
    cond:
      zigbee_Ku_Wasser:
        0:
          &STATE    ^zigbee_Ku_Wasser$
  attr:
    cmdState:
    repeatcmd:
      10
    wait:
    waitdel:
  condition:
    0          ::EventDoIf('zigbee_Ku_Wasser',$hash,'true',1)
  do:
    0:
      0          set ECHO_G090P3087456067K volume 100
      1          set ECHO_G090P3087456067K speak "Alarm, in die Küche dringt Wasser ein"
    1:
  helper:
    NOTIFYDEV  zigbee_Ku_Wasser,global
    event      battery: 100,false,tamper: false,linkquality: 112,battery_low: false
    globalinit 1
    last_timer 0
    sleepdevice zigbee_Ku_Wasser
    sleepsubtimer 0
    sleeptimer -1
    timerdev  zigbee_Ku_Wasser
    timerevent battery: 100,false,tamper: false,linkquality: 112,battery_low: false
    triggerDev zigbee_Ku_Wasser
    timerevents:
      battery: 100
      false
      tamper: false
      linkquality: 112
      battery_low: false
    timereventsState:
      battery: 100
      state: false
      tamper: false
      linkquality: 112
      battery_low: false
    triggerEvents:
      battery: 100
      false
      tamper: false
      linkquality: 112
      battery_low: false
    triggerEventsState:
      battery: 100
      state: false
      tamper: false
      linkquality: 112
      battery_low: false
  internals:
  readings:
  trigger:
    all        zigbee_Ku_Wasser
  uiState:
  uiTable:
Attributes:
  checkReadingEvent 1
  repeatcmd  10
  room      Küche

Anbei noch das list vom Wassersensor:
Internals:
  CFGFN     
  CID        zigbee_Ku_Wasser
  DEF        zigbee_Ku_Wasser
  FUUID      68c172d1-f33f-f8e1-22ac-9b3794ebd37a528e
  IODev      myBroker
  LASTInputDev myBroker
  MSGCNT    72
  NAME      zigbee_Ku_Wasser
  NR        151
  STATE      Leak: false
  TYPE      MQTT2_DEVICE
  eventCount 74
  myBroker_CONN myBroker_192.168.12.6_56860
  myBroker_MSGCNT 72
  myBroker_TIME 2025-09-10 15:44:35
  JSONMAP:
    water_leak state
  OLDREADINGS:
  READINGS:
    2025-09-10 14:45:05  IODev          myBroker
    2025-09-10 14:45:05  associatedWith  Zigbee2MQTT_Bridge
    2025-09-10 14:46:15  attrTemplateVersion 20200904
    2025-09-10 15:44:35  battery        100
    2025-09-10 15:44:35  battery_low    false
    2025-09-10 15:44:35  linkquality    112
    2025-09-10 15:44:35  state          false
    2025-09-10 15:44:35  tamper          false
Attributes:
  devicetopic zigbee2mqtt/Ku_Wasser
  jsonMap    water_leak:state
  model      zigbee2mqtt_Water_Leak_Sensor
  readingList $DEVICETOPIC:.* { json2nameValue($EVENT,'',$JSONMAP) }
  room      Küche,MQTT2_DEVICE
  stateFormat Leak: state


Und folgendes DOIF tut nur ein mal melden, die wird aber nicht wiederholt...
Internals:
  CFGFN     
  DEF        ([zigbee_WK_Wasser:"true"]) (set ECHO_G090P3087456067K volume 100) (set ECHO_G090P3087456067K speak "Alarm, der Waschkeller der Herbstburg versinkt")
  FUUID      68c18102-f33f-f8e1-be78-51528d54d0b76724
  MODEL      FHEM
  NAME      di_Wasser_Waschkeller
  NOTIFYDEV  zigbee_WK_Wasser,global
  NR        159
  NTFY_ORDER 50-di_Wasser_Waschkeller
  STATE      cmd_2
  TYPE      DOIF
  VERSION    29460 2024-12-29 20:25:48
  eventCount 55
  READINGS:
    2025-09-10 16:21:24  Device          zigbee_WK_Wasser
    2025-09-10 16:21:24  cmd            2
    2025-09-10 16:21:24  cmd_event      zigbee_WK_Wasser
    2025-09-10 16:21:24  cmd_nr          2
    2025-09-10 16:21:24  e_zigbee_WK_Wasser_events battery_low: false,linkquality: 144,battery: 100,tamper: false,false
    2025-09-10 15:51:59  mode            enabled
    2025-09-10 16:21:24  state          cmd_2
    2025-09-10 16:20:45  wait_timer      no timer
  Regex:
    accu:
    bar:
    barAvg:
    collect:
    cond:
      zigbee_WK_Wasser:
        0:
          &STATE    ^zigbee_WK_Wasser$
  attr:
    cmdState:
    repeatcmd:
      10
    repeatsame:
    wait:
    waitdel:
  condition:
    0          ::EventDoIf('zigbee_WK_Wasser',$hash,'true',1)
  do:
    0:
      0          set ECHO_G090P3087456067K volume 100
      1          set ECHO_G090P3087456067K speak "Alarm, der Waschkeller der Herbstburg versinkt"
    1:
  helper:
    NOTIFYDEV  zigbee_WK_Wasser,global
    event      battery_low: false,linkquality: 144,battery: 100,tamper: false,false
    globalinit 1
    last_timer 0
    sleepdevice zigbee_WK_Wasser
    sleepsubtimer -1
    sleeptimer -1
    timerdev  zigbee_WK_Wasser
    timerevent battery_low: false,linkquality: 144,battery: 100,tamper: false,false
    triggerDev zigbee_WK_Wasser
    DOIF_eventa:
      cmd_nr: 2
      cmd: 2
      cmd_event: zigbee_WK_Wasser
      cmd_2
    DOIF_eventas:
      cmd_nr: 2
      cmd: 2
      cmd_event: zigbee_WK_Wasser
      state: cmd_2
    timerevents:
      battery_low: false
      linkquality: 144
      battery: 100
      tamper: false
      false
    timereventsState:
      battery_low: false
      linkquality: 144
      battery: 100
      tamper: false
      state: false
    triggerEvents:
      battery_low: false
      linkquality: 144
      battery: 100
      tamper: false
      false
    triggerEventsState:
      battery_low: false
      linkquality: 144
      battery: 100
      tamper: false
      state: false
  internals:
  readings:
  trigger:
    all        zigbee_WK_Wasser
  uiState:
  uiTable:
Attributes:
  checkReadingEvent 1
  repeatcmd  10
  room      Waschküche

Falls es hilft, hier noch das list des zweiten Sensors...
Internals:
  CFGFN     
  CID        zigbee_WK_Wasser
  DEF        zigbee_WK_Wasser
  FUUID      68c17fe1-f33f-f8e1-a3da-cf242c81bb5a7090
  IODev      myBroker
  LASTInputDev myBroker
  MSGCNT    23
  NAME      zigbee_WK_Wasser
  NR        157
  STATE      Leak: false
  TYPE      MQTT2_DEVICE
  eventCount 25
  myBroker_CONN myBroker_192.168.12.6_56860
  myBroker_MSGCNT 23
  myBroker_TIME 2025-09-10 16:21:24
  JSONMAP:
    water_leak state
  OLDREADINGS:
  READINGS:
    2025-09-10 15:40:49  IODev          myBroker
    2025-09-10 15:40:49  associatedWith  Zigbee2MQTT_Bridge
    2025-09-10 15:41:22  attrTemplateVersion 20200904
    2025-09-10 16:21:24  battery        100
    2025-09-10 16:21:24  battery_low    false
    2025-09-10 16:21:24  linkquality    144
    2025-09-10 16:21:24  state          false
    2025-09-10 16:21:24  tamper          false
Attributes:
  devicetopic zigbee2mqtt/WK_Wasser
  jsonMap    water_leak:state
  model      zigbee2mqtt_Water_Leak_Sensor
  readingList $DEVICETOPIC:.* { json2nameValue($EVENT,'',$JSONMAP) }
  room      Waschküche,MQTT2_DEVICE
  stateFormat Leak: state

Hat jemand zufällig eine gute Idee?

Herzlichen Dank

Rince
Wer zu meinen Posts eine Frage schreibt und auf eine Antwort wartet, ist hiermit herzlich eingeladen mich per PN darauf aufmerksam zu machen. (Bitte mit Link zum betreffenden Thread)

Per

Zwei Sachen fallen mir auf: die Lists sind nicht vom Fall Cmd1 und "true" ist kein Vergleich, sondern nur ein Event. Und wenn die Batterie leer ist, gibt er auch Vollalarm.
Den Unterschied zwischen beiden habe ich aber auch nicht entdeckt...

Damian

Wenn die beiden DOIF-Definitionen vom Aufbau her identisch sind, dann muss es zwangsweise am unterschiedlichen Verhalten der Wasserdetektoren liegen. Dazu musst du dir die Events der beiden im Alarmfall anschauen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF