FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: ingo46 am 02 Dezember 2022, 18:10:05

Titel: at Neustart möglich?
Beitrag von: ingo46 am 02 Dezember 2022, 18:10:05
Hallo,

mit
define n_al1 notify BW1:off define warn.delay at +00:10:00 set AlarmdFlag off
wird eine Warnstufe zurückgesetzt.

Meine Frage: Ist es möglich durch ein anderes Ereignis noch während des Ablaufs von "warn.delay" dieses neu zu starten? - d.h. wenn dieses Ereignis nach Minute 5 eintrifft, wird "AlarmFlag" erst nach Minute 15 auf "off" gesetzt. 

Ingo
Titel: Antw:at Neustart möglich?
Beitrag von: bartman121 am 02 Dezember 2022, 18:14:55
mit defmod kannst du dein warn.delay-at jederzeit modifizieren.

Defmod würde es aber auch anlegen falls es nicht existiert. Im Zweifelsfall vorher prüfen...

Grüße
Titel: Antw:at Neustart möglich?
Beitrag von: roedert am 02 Dezember 2022, 19:54:32
Was hast du genau vor? Ist das nicht besser ein Fall für einen Watchdog?
Titel: Antw:at Neustart möglich?
Beitrag von: ingo46 am 03 Dezember 2022, 10:19:05
Hallo,

danke für eure Antworten.

Von einem vorherigen Projekt ist in jedem dem Raum ein Bewegungsmelder installiert. Jetzt der Plan: Wenn ich das Haus betrete, so bemerkt das Bewegungsmelder "BW1" und setzt für 10 Minuten "AlarmFlag" auf "on". Ich gehe jetzt z.B. in die Küche. Dort ist BW2. Das Signal soll jetzt die Zeit für "AlarmFlag" wieder auf 10 Minuten setzen, usw... Insgesammt gibt es 6 Bewegungsmelder.

Mit:
define warn.delay notify <motion> defmod mdOff at +00:10 set AlarmdFlag off
würde das für einen Bewegungsmelder funktionieren.

Das Problem ist, das verschiedene Bewegungsmelder die Zeit zurücksetzen sollen.

In C++ würde ich einen Zähler nehmen, der per Interrupt gesteuert wird - aber in Perl gibt es (?) keinen Interrupt.
Titel: Antw:at Neustart möglich?
Beitrag von: roedert am 03 Dezember 2022, 10:27:12
Meine Lösung wäre:

Step 1: Ein notify welches bei Bewegung irgendeines Melders Alarmflag auf "on" setzt
define alarm_on_nfy notify <Regex Bewegung irgendeines BWs> set AlarmFlag on

Step 2: Ein Watchdog der 10min nach dem letzen Auslösen irgendeines BWs das Alarmflag zurücksetzt
define alarm_off_wd watchdog <Regex für Bewegung irgendeines BWs> 00:10:00 SAME set AlarmFlag off
attr alarm_off_wd autoRestart 1


Genau mit diesem Konstrukt läuft bei mir die Lichtsteuerung im Flur der 4 Bewegungsmelder hat weil er so verwinkelt ist.
Titel: Antw:at Neustart möglich?
Beitrag von: binford6000 am 03 Dezember 2022, 10:29:37
define bwm.n notify BW(1|2|3|4|5|6):state:.motion set AlarmdFlag on-for-timer 600
AlarmdFlag mit attr useSetExtensions erweitern. Event an deine BWMs anpassen.
Der on-for-timer wird dann jeweils wieder auf 10 Minuten gestezt.

VG Sebastian
Titel: Antw:at Neustart möglich?
Beitrag von: roedert am 03 Dezember 2022, 10:32:13
Zitat von: binford6000 am 03 Dezember 2022, 10:29:37
Der on-for-timer wird dann jeweils wieder auf 10 Minuten gestezt.

Stimmt, die interne Funktion "on-for-timer" nutzen ist noch einfacher wenn es das AlarmFlag-device unterstützt.
Titel: Antw:at Neustart möglich?
Beitrag von: binford6000 am 03 Dezember 2022, 10:42:18
Zitatwenn es das AlarmFlag-device unterstützt.
Das habe ich dem AlarmdFlag-(dummy?!)-device mangels Informationen jetzt mal unterstellt ;D
Titel: Antw:at Neustart möglich?
Beitrag von: ingo46 am 03 Dezember 2022, 12:17:43
Hallo,

ich habe "die Sache" gerade getestet. Mein "Testsieger":

Zitat von: binford6000 am 03 Dezember 2022, 10:29:37
define bwm.n notify BW(1|2|3|4|5|6):state:.motion set AlarmdFlag on-for-timer 600
AlarmdFlag mit attr useSetExtensions erweitern.

...es läuft! Nur ohne eure Hilfe wäre ich nicht zu dieser Lösung gekommen.

Bei mir steht nur angepasst:
define n_aFlag notify BEW.(AZ|EZ|FU|KU|SZ|WZ):state:on|on-old.* set AlarmFlag on-for-timer 600

LG Ingo