FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: mfeske am 30 Dezember 2025, 21:15:42

Titel: DOIF für kleine mini Alarmanlage mit geofancy
Beitrag von: mfeske am 30 Dezember 2025, 21:15:42
Hallo zusammen, ich habe mein Projekt ,,Alarmanlage" weiterverfolgt und bin auf einem guten Weg.
Ich habe ein dummy Alarm_Status worüber ich den Status der Alarmanlage über die Anwesenheit bzw. den dummy Alarm_Taster steuere.
Status
0 es ist jemand zu Hause unscharf
1 manuell unscharf
2 manuell scharf
3 es ist niemand zu Hause scharf

Ich Werte verschiedene Kontakte mit einem DOIF Alarm_Kontakte_DOIF aus. Das DOIF sendet auch die erwarteten pushmsg.
State sind alle geschlossen bzw.

Ich wollte dann mit dem DOIF Alarm_send_DOIF ggf. einen Alarm auslösen, wenn Alarm_Kontakte_DOIF nicht ,,sind alle geschlossen" und Alarm_Taster 2 oder 3 ist. Dazu sollten mehrere Befehle ausgeführt werden, welcher jeder für sich schon funktioniert.
1. set FHEM_gong_Mp3 playTone 254,016
2. set LED_aussen on,set LED blink 30 2
3. set pushmsg msg Alarm ausgelöst! Mindestens ein Kontakt ist offen.
4. set Rolladen01 down
5. set Rolladen02 down
6. set Rauchmelder_Team alarmOn
Am besten wären wenn 1-3 mit einer Verzögerung vom 60 Sekunden einsetzen würde und 5-6 mit 120 Sekunden; sobald Alarm_Status 0 oder 1 ist soll abgebrochen werden. Bei 3 wäre auch das ,, set pushmsg msg "Kontakt $DEVICE wurde geöffnet. Es sind folgende Kontakte offen: [@"_Alarm$":state:"open"]"" wünschenswert aber das hat mit der Syntax gar nicht funktioniert. Das DOIF wie es jetzt ist löst nicht aus. Ich hatte es auch mit der KI probiert aber auch mit der bin ich nicht zum Ziel gekommen.


List Alarm_Status
Internals:
   FUUID      67807828-f33f-be1a-6f3e-56d9bde8e61ee267
   NAME       Alarm_Status
   NR         68
   STATE      3
   TYPE       dummy
   eventCount 51
   READINGS:
     2025-12-30 17:49:55   state           3
Attributes:
   room       AppleWatch,Alarmanlage

List Alarm_Taster
Internals:
   FUUID      67816ae7-f33f-be1a-7c06-39d56c9a9d1ba135
   NAME       Alarm_Taster
   NR         69
   STATE      off
   TYPE       dummy
   eventCount 44
   READINGS:
     2025-12-30 16:27:48   state           off
Attributes:
   alexaName  Alarmanlage Taster
   devStateIcon on:15px-red off:15px-green
   room       Alexa,Alarmanlage,AppleWatch
   setList    on off

List Alarm_Kontakte_DOIF
Internals:
   DEF        ([#"_Alarm$:open":state:"open"] != 0) (set pushmsg msg "Kontakt $DEVICE wurde geöffnet. Es sind folgende Kontakte offen: [@"_Alarm$":state:"open"]")
DOELSEIF
([#"_Alarm$:closed":state:"open"] == 0) (set pushmsg msg "alle Kontakte geschlossen")
   FUUID      678d3cd1-f33f-be1a-c7f2-dad1fd51a7b4aa33
   MODEL      FHEM
   NAME       Alarm_Kontakte_DOIF
   NOTIFYDEV  global,.*(_Alarm$).*
   NR         78
   NTFY_ORDER 50-Alarm_Kontakte_DOIF
   STATE      alle geschlossen
   TYPE       DOIF
   VERSION    30659 2025-12-25 12:37:16
   eventCount 23
   READINGS:
     2025-12-30 17:48:02   Device          Aussentuer_Strasse_Alarm
     2025-12-30 17:48:02   cmd             2
     2025-12-30 17:48:02   cmd_event       Aussentuer_Strasse_Alarm
     2025-12-30 17:48:02   cmd_nr          2
     2025-12-30 15:11:55   mode            enabled
     2025-12-30 17:48:02   state           alle geschlossen
   Regex:
     accu:
     bar:
     barAvg:
     collect:
     cond:
       :
         0:
           "_Alarm$:open" _Alarm$:open
         1:
           "_Alarm$:closed" _Alarm$:closed
   attr:
     cmdState:
       0:
         $DEVICE zuletzt geöffnet
       1:
         alle geschlossen
     wait:
     waitdel:
   condition:
     0          ::AggregateDoIf($hash,'#','_Alarm$','state','"open"') != 0
     1          ::AggregateDoIf($hash,'#','_Alarm$','state','"open"') == 0
   do:
     0:
       0          set pushmsg msg "Kontakt $DEVICE wurde geöffnet. Es sind folgende Kontakte offen: [@"_Alarm$":state:"open"]"
     1:
       0          set pushmsg msg "alle Kontakte geschlossen"
     2:
   helper:
     NOTIFYDEV  global,.*(_Alarm$).*
     event      closed,STATE: closed,hmstate: closed
     globalinit 1
     last_timer 0
     sleeptimer -1
     timerdev   Aussentuer_Strasse_Alarm
     timerevent closed,STATE: closed,hmstate: closed
     triggerDev Aussentuer_Strasse_Alarm
     timerevents:
       closed
       STATE: closed
       hmstate: closed
     timereventsState:
       state: closed
       STATE: closed
       hmstate: closed
     triggerEvents:
       closed
       STATE: closed
       hmstate: closed
     triggerEventsState:
       state: closed
       STATE: closed
       hmstate: closed
   internals:
   readings:
   trigger:
   uiState:
   uiTable:
Attributes:
   cmdState   $DEVICE zuletzt geöffnet|alle geschlossen
   do         always
   room       Alarmanlage

List Alarm_send_DOIF
Internals:
   CFGFN     
   DEF        (([Alarm_Status:STATE] eq "2" or [Alarm_Status:STATE] eq "3") and (#"_Alarm$":state:"open" > 0)) (set FHEM_gong_Mp3 playTone 254,016,set LED_aussen on,set LED blink 30 2,set pushmsg msg Alarm ausgelöst! Mindestens ein Kontakt ist offen.,set Rolladen01 down,set Rolladen02 down,set Rauchmelder_Team alarmOn) DOELSEIF ([Alarm_Status:STATE] eq "0" or [Alarm_Status:STATE] eq "1") (cancel)

   FUUID      6953e764-f33f-be1a-da62-f7aba6284e6e4660
   MODEL      FHEM
   NAME       Alarm_send_DOIF
   NOTIFYDEV  global,Alarm_Status
   NR         191
   NTFY_ORDER 50-Alarm_send_DOIF
   STATE      initialized
   TYPE       DOIF
   VERSION    30659 2025-12-25 12:37:16
   eventCount 10
   READINGS:
     2025-12-30 16:24:58   cmd             0
     2025-12-30 16:24:58   mode            enabled
     2025-12-30 16:24:58   state           initialized
   Regex:
     accu:
     bar:
     barAvg:
     collect:
     cond:
       Alarm_Status:
         0:
           STATE      ^Alarm_Status$:^STATE:
         1:
           STATE      ^Alarm_Status$:^STATE:
   attr:
     cmdState:
       0:
         {(ReadingsVal("Alarm_Status","STATE","0") eq "2" || ReadingsVal("Alarm_Status","STATE","0") eq "3") ? ((::AggregateDoIf($hash,"#","_Alarm$","state","\"open\"") > 0) ? "alarm" : "armed") : ((ReadingsVal("Alarm_Status","STATE","0") eq "0" || ReadingsVal("Alarm_Status","STATE","0") eq "1") ? "idle" : "disabled")}
     repeatsame:
       0
     wait:
       0:
         60
         120
   condition:
     0          (::ReadingValDoIf($hash,'Alarm_Status','STATE') eq "2" or ::ReadingValDoIf($hash,'Alarm_Status','STATE') eq "3") and (#"_Alarm$":state:"open" > 0)
     1          ::ReadingValDoIf($hash,'Alarm_Status','STATE') eq "0" or ::ReadingValDoIf($hash,'Alarm_Status','STATE') eq "1"
   do:
     0:
       0          set FHEM_gong_Mp3 playTone 254,016,set LED_aussen on,set LED blink 30 2,set pushmsg msg Alarm ausgelöst! Mindestens ein Kontakt ist offen.,set Rolladen01 down,set Rolladen02 down,set Rauchmelder_Team alarmOn
     1:
       0          cancel
     2:
   helper:
     NOTIFYDEV  global,Alarm_Status
     globalinit 1
     last_timer 0
     sleeptimer -1
   hmccu:
   readings:
     all         Alarm_Status:STATE
   uiState:
   uiTable:
Attributes:
   cmdState   {(ReadingsVal("Alarm_Status","STATE","0") eq "2" || ReadingsVal("Alarm_Status","STATE","0") eq "3") ? ((::AggregateDoIf($hash,"#","_Alarm$","state","\"open\"") > 0) ? "alarm" : "armed") : ((ReadingsVal("Alarm_Status","STATE","0") eq "0" || ReadingsVal("Alarm_Status","STATE","0") eq "1") ? "idle" : "disabled")}
   devStateIcon alarm:message_attention
armed:secur_open
idle:security
disabled:control_pause
   do         always
   repeatsame 0
   room       Alarmanlage
   selftrigger wait
   wait       60,120

List Alarm_send_DOIF KI
define Alarm_send_DOIF DOIF (
  ([Alarm_Status:STATE] =~ "^(2|3)$")
  and
  ([Alarm_Kontakte_DOIF] ne "closed")
)
(
  set FHEM_gong_Mp3 playTone 254,016,
  set LED_aussen on,
  set LED blink 30 2,
  set pushmsg msg "Alarm ausgelöst! Kontakt $DEVICE wurde geöffnet. Offene Kontakte: [@"_Alarm$":state:"open"]",
  set Rolladen01 down,
  set Rolladen02 down,
  set Rauchmelder_Team alarmOn
)
DOELSEIF (
  ([Alarm_Status:STATE] =~ "^(0|1)$")
)
(
  cancel
)

mit
attr Alarm_send_DOIF wait 60,120
attr Alarm_send_DOIF do always
attr Alarm_send_DOIF selftrigger
attr Alarm_send_DOIF repeatsame 0


vielleicht könnt ihr mir ja weiterhelfen, die KI ist dafür offensichtlich noch nicht bereit.

Gruß
Micha