FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: FunkOdyssey am 05 Februar 2016, 14:31:59

Titel: Steuerung der Alarmauslösung (repeat,wait,etc.)
Beitrag von: FunkOdyssey am 05 Februar 2016, 14:31:59
Hallo miteinander,

ich habe ein Problem mit einem meiner Alarm-DOIFs und würde mich freuen, wenn ich hierzu eine zweite Meinung erhalten könnte. Ich habe das DOIF hier mal recht schlank dargestellt. In Wirklichkeit ist das Ding komplexer.


(
[Alarm] eq "ausgeloest" ...
)

(
set BuzzerWarnung on-for-timer 2,
{Log 3, "Alarmsystem: Auslösung registriert. Countdown läuft."}
)

(
set Sirene on-for-timer 120,
{Log 3, "Alarmsystem: Auslösung der Sirene."}
)


Mit folgenden Attributen habe ich es ausprobiert:

Attributes:
   cmdpause   30
   do         always
   repeatsame 3
   repeatcmd 60
   wait       0,60:0:0


Ich habe dabei folgende Wünsche/Anforderungen/Probleme:

Kann mir jemand helfen? Danke.
Titel: Antw:Steuerung der Alarmauslösung (repeat,wait,etc.)
Beitrag von: Ellert am 06 Februar 2016, 12:56:26
Das könnte Deiner Vorstellung nahe kommen, allerdings kann die Sirene maximal 5x und minimal 2x ertönen.

di DOIF ([Alarm] eq "ausgelöst" and ([?di] eq "cmd_3" or [di] eq "initialized"))

   (set BuzzerWarnung on-for-timer 2) (set Sirene on-for-timer 120) (set Sirene on-for-timer 120) (set Sirene on-for-timer 120)

DOELSEIF ([Alarm] eq "ausgelöst" and ( [?di] eq "cmd_1" or [?di] eq "cmd_2"))

   (set Sirene on-for-timer 120)

DOELSEIF ([AlarmReset])

wait 60,140,140,140
repeatcmd 0:140
repeatsame 0:2
Titel: Antw:Steuerung der Alarmauslösung (repeat,wait,etc.)
Beitrag von: Ellert am 08 Februar 2016, 10:39:09
Ich könnte noch folgendes anbieten:
di1 DOIF ([Alarm] eq "ausgelöst")
   ((IF ([di1:count] == 0)(set BuzzerWarnung on-for-timer 2, setreading di1 count 1)))
   ((IF ([di1:count] > 1 and [di1:count] < 4)(set Sirene on-for-timer 120, setreading di1 count {([di1:count] +1)})))
DOELSEIF ([AlarmReset]) (setreading di1 count 0)

repeatcmd 90
repeatsame 3
wait 0,60:0
Titel: Antw:Steuerung der Alarmauslösung (repeat,wait,etc.)
Beitrag von: FunkOdyssey am 08 Februar 2016, 10:48:31
Hey, danke für deine Tipps.
Nur finde ich es merkwürdig, wenn man den State des DOIFs abfragen muss oder sich Hilfsvariablen bauen muss.
Alle diese Dinge sollten eigentlich mit "cmdpause, repeatsame, repeatcmd, wait" möglich sein.
Ich werde mir mal ein Hilfs-DOIF basteln und schrittweise debuggen. Wenn ich einen Ansatz finde, dann schreibe ich das hier rein.
Titel: Antw:Steuerung der Alarmauslösung (repeat,wait,etc.)
Beitrag von: FunkOdyssey am 08 Februar 2016, 12:23:14
Schade, ich habe mal ein ganz einfaches DOIF gebastet, um die Auswirkungen der Attribute testen zu können. Leider läuft das DOIF auch dreimal in einer Schleife ab. "repeatcmd" fängt also wieder ganz vorne an.

@Damian:
Könnte man "repeatcmd" evtl. erweitern, indem man die Wiederholungen der einzelnen Sequenzen getrennt festlegen kann?  Also "repeatcmd 0,3"?

Internals:
   CFGFN
   DEF        (
[test_alarm] eq "ausgeloest"
)

(
{Log 3, "Test-Alarmsystem: Auslösung registriert. Countdown läuft."}
)

(
{Log 3, "Test-Alarmsystem: Auslösung der Sirene."}
)
DOELSE
   NAME       test_di_sirene
   NR         1557
   NTFY_ORDER 50-di_du_sirene
   STATE      cmd_1
   TYPE       DOIF
   Readings:
     2016-02-08 12:17:06   Device          test_alarm
     2016-02-08 12:19:06   cmd_event       test_alarm
     2016-02-08 12:19:06   cmd_nr          1
     2016-02-08 12:19:06   cmd_seqnr       2
     2016-02-08 12:17:06   e_test_alarm_STATE ausgeloest
     2016-02-08 12:19:06   state           cmd_1
     2016-02-08 12:19:36   wait_timer      no timer
   Condition:
     0          InternalDoIf('test_alarm','STATE','',AttrVal($hash->{NAME},'notexist',undef)) eq "ausgeloest"
   Devices:
     0           test_alarm
     all         test_alarm
   Do:
     0:
       0          {Log 3, "Test-Alarmsystem: Auslösung registriert. Countdown läuft."}
       1          {Log 3, "Test-Alarmsystem: Auslösung der Sirene."}
     1:
       0
   Helper:
     event      ausgeloest
     globalinit 1
     last_timer 0
     sleepdevice test_alarm
     sleepsubtimer -1
     sleeptimer -1
     timerdev   test_alarm
     timerevent ausgeloest
     triggerDev test_alarm
     timerevents:
       ausgeloest
     triggerEvents:
       ausgeloest
   Internals:
     0           test_alarm:STATE
     all         test_alarm:STATE
   Itimer:
   Readings:
   Regexp:
     0:
     All:
   State:
   Timerfunc:
   Trigger:
Attributes:
   do         always
   repeatcmd  30
   repeatsame 3
   wait       0,20



2016.02.08 12:17:06 3: Test-Alarmsystem: Auslösung registriert. Countdown läuft.
2016.02.08 12:17:26 3: Test-Alarmsystem: Auslösung der Sirene.
2016.02.08 12:17:56 3: Test-Alarmsystem: Auslösung registriert. Countdown läuft.
2016.02.08 12:18:16 3: Test-Alarmsystem: Auslösung der Sirene.
2016.02.08 12:18:46 3: Test-Alarmsystem: Auslösung registriert. Countdown läuft.
2016.02.08 12:19:06 3: Test-Alarmsystem: Auslösung der Sirene.
Titel: Antw:Steuerung der Alarmauslösung (repeat,wait,etc.)
Beitrag von: Damian am 08 Februar 2016, 16:44:51
Zitat von: FunkOdyssey am 08 Februar 2016, 12:23:14
Schade, ich habe mal ein ganz einfaches DOIF gebastet, um die Auswirkungen der Attribute testen zu können. Leider läuft das DOIF auch dreimal in einer Schleife ab. "repeatcmd" fängt also wieder ganz vorne an.

@Damian:
Könnte man "repeatcmd" evtl. erweitern, indem man die Wiederholungen der einzelnen Sequenzen getrennt festlegen kann?  Also "repeatcmd 0,3"?


Kann man bestimmt. Ich habe aber erst mal andere Verpflichtungen.

Gruß

Damian
Titel: Antw:Steuerung der Alarmauslösung (repeat,wait,etc.)
Beitrag von: FunkOdyssey am 08 Februar 2016, 20:37:54
Alles klar.
Titel: Antw:Steuerung der Alarmauslösung (repeat,wait,etc.)
Beitrag von: Damian am 08 Februar 2016, 20:43:31
Zitat von: FunkOdyssey am 08 Februar 2016, 20:37:54
Alles klar.


Kommt dann auf die Todo-Liste.
Titel: Antw:Steuerung der Alarmauslösung (repeat,wait,etc.)
Beitrag von: FunkOdyssey am 08 Februar 2016, 21:05:15
Danke, das hatte ich auch insgeheim angenommen. Das reicht mir auch schon. Ich kann warten. Kein Stress, Damian. :-)
Titel: Antw:Steuerung der Alarmauslösung (repeat,wait,etc.)
Beitrag von: Rampler am 27 August 2021, 12:10:13
@Damian,
ich weiß, das ist schon ein paar Jahre her.
Ist die  repeatcmd Erweiterung nun endgültig vom Tisch ?
VG Klaus
Titel: Antw:Steuerung der Alarmauslösung (repeat,wait,etc.)
Beitrag von: Damian am 28 August 2021, 16:48:13
Zitat von: Rampler am 27 August 2021, 12:10:13
@Damian,
ich weiß, das ist schon ein paar Jahre her.
Ist die  repeatcmd Erweiterung nun endgültig vom Tisch ?
VG Klaus

Eigentlich habe ich es ja schon indirekt beantwortet - im DOIF-FHEM-Modus geht es nicht, weil entweder würden folgende Befehle einer Sequenz nicht zum Zuge kommen (sequentielle Reihenfolge) oder man müsste mehrere Timer verwalten, die gleichzeitig laufen - im DOIF-FHEM-Modus gibt es nur einen (wait-) Timer.

Im DOIF-Perlmodus kannst du es realisieren. Dort kann man beliebig viele Wiederholungen gleichzeitig laufen lassen.