[gelöst] Alarmanlage innerhalb von 3 minuten deaktivierbar machen

Begonnen von WhyTea, 15 Juni 2016, 16:15:49

Vorheriges Thema - Nächstes Thema

WhyTea

Hallo
Ich habe mir mithilfe einiger Homematic HM-SEC-SCo eine Alarmanlage erstellt.
Wenn diese scharf ist und einer dieser Sensoren auf den Status open wechselt wird ein Alarm ausgelöst.

define notAlarm_EG notify Eingangstuer:open {\
if (Value("Alarmanlage") eq "on") {\
fhem ("set Alarm_EG ja")}\
}


Das funktioniert soweit wunderbar. Allerdings wird nun jedes mal wenn jemand heim kommt ein Alarm ausgelöst.

Ich möchte aber, dass nur ein Alarm ausgelöst wird wenn die Alarmanlage nicht innerhalb von 3 Minuten nach Öffnung der Eingangstür ausgeschaltet wurde.

Kann mir jemand einen Tipp geben wie ich das realisieren kann?

Danke und Gruß
Daniel

marvin78

Zum Beispiel mit watchdog. Aber auch mit at wäre das machbar.

KölnSolar

oder Du nimmst einfach das seeeeeehr umfangreiche Alarmanlagen-Modul.
Grüße, Markus
RPi3/2 buster/stretch-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-zigbee2mqtt

Leeloo_Dallas

Greatz Leeloo

linuxpaul


Ellert

Zitat von: WhyTea am 15 Juni 2016, 16:15:49
Hallo
Ich habe mir mithilfe einiger Homematic HM-SEC-SCo eine Alarmanlage erstellt.
Wenn diese scharf ist und einer dieser Sensoren auf den Status open wechselt wird ein Alarm ausgelöst.

define notAlarm_EG notify Eingangstuer:open {\
if (Value("Alarmanlage") eq "on") {\
fhem ("set Alarm_EG ja")}\
}


Das funktioniert soweit wunderbar. Allerdings wird nun jedes mal wenn jemand heim kommt ein Alarm ausgelöst.

Ich möchte aber, dass nur ein Alarm ausgelöst wird wenn die Alarmanlage nicht innerhalb von 3 Minuten nach Öffnung der Eingangstür ausgeschaltet wurde.

Kann mir jemand einen Tipp geben wie ich das realisieren kann?

Danke und Gruß
Daniel

Du könntest DOIF verwenden, etwas so:
define Alarm_di DOIF ([?Alarmanlage] eq "on" and [Eingangstuer] eq "open") (set Alarm_EG ja)
DOELSEIF (([Alarmanlage] eq "off")
attr Alarm_di wait 180:0

Näheres zu DOIF siehe: http://fhem.de/commandref_DE.html#DOIF

WhyTea

Zitat von: Ellert am 17 Juni 2016, 18:13:27
Du könntest DOIF verwenden, etwas so:
define Alarm_di DOIF ([?Alarmanlage] eq "on" and [Eingangstuer] eq "open") (set Alarm_EG ja)
DOELSEIF (([Alarmanlage] eq "off")
attr Alarm_di wait 180:0

Näheres zu DOIF siehe: http://fhem.de/commandref_DE.html#DOIF

Danke das funktioniert wunderbar!
define Alarm_di DOIF ([Alarmanlage] eq "on" and [EG_Eingangstuer] eq "open") (set Alarm_EG ja)\
DOELSEIF ([Alarmanlage:"off"])
attr Alarm_di room _Alarmanlage
attr Alarm_di wait 120:0

CoolTux

Zitat von: WhyTea am 28 Juni 2016, 09:00:39
Danke das funktioniert wunderbar!
define Alarm_di DOIF ([Alarmanlage] eq "on" and [EG_Eingangstuer] eq "open") (set Alarm_EG ja)\
DOELSEIF ([Alarmanlage:"off"])
attr Alarm_di room _Alarmanlage
attr Alarm_di wait 120:0


Interessant. Hier geht also ein Alarm los wenn die Eingangstür offen steht und ich die Alarmanlage scharf schalte. Ist das so bei Design oder war das unüberlegt?


define Alarm_di DOIF ([?Alarmanlage] eq "on" and [EG_Eingangstuer] eq "open") (set Alarm_EG ja)\
DOELSEIF ([Alarmanlage:"off"])
attr Alarm_di room _Alarmanlage
attr Alarm_di wait 120:0


Ich gehe mal von aus das der eigentliche Einbruchssensor die Tür ist und wenn die Tür auf geht der Dummy Alarmanlage nur abgefragt werden soll, oder?




Grüße
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

WhyTea

Zitat von: CoolTux am 28 Juni 2016, 09:06:02
Interessant. Hier geht also ein Alarm los wenn die Eingangstür offen steht und ich die Alarmanlage scharf schalte. Ist das so bei Design oder war das unüberlegt?
Das soll natürlich so nicht sein. Ist aber auch so nicht passiert. Nichts desto trotz nehme ich Deinen Verbesserungsvorschlag gerne auf.
Würdest Du mir bitte erklären wo der Unterschied zwischen [Alarmanlage] und [?Alarmanlage] ist?

Zitat von: CoolTux am 28 Juni 2016, 09:06:02
Ich gehe mal von aus das der eigentliche Einbruchssensor die Tür ist und wenn die Tür auf geht der Dummy Alarmanlage nur abgefragt werden soll, oder?
Ja Alarmanlage ist ein Dummy.


Darüber hinaus habe ich nun noch festgestellt, dass ich die Funktion noch erweitern muss. Wenn ich zB was vergessen habe und nur kurz das Haus betrete und innerhalb von 2 Minuten wieder raus bin geht der Alarm los obwohl ich die Alarmanlage aus und ein schalte.

Vorgang im Detail um Missverständnisse zu vermeiden:
- Einangstür geöffnet
- Alarmanlage an
- Einangstür geschlossen
*die nächsten Schritte innerhalb von 120 Sekunden
- Eingangstür geöffnet
- Alarmanlage aus
- Alarmanlage an
- Eingangstür geschlossen

Ich habe das mal folgendermaßen probiert, auch das angemerkte ? ist eingefügt, testen kann ich das aber erst heute Nachmittag. Bestimmt kann mir ein erfahrenes Auge sagen ob das die gewünschte Veränderung bewirkt.

define Alarm_di DOIF ([Alarmanlage] eq "on" and [EG_Eingangstuer] eq "open") (set Alarm_EG ja)\
DOELSEIF ([Alarmanlage:"off"]) (set Alarm_EG nein)
attr Alarm_di room _Alarmanlage
attr Alarm_di wait 120:0

Gruß
Daniel

bene_dicere

Zitat von: WhyTea am 28 Juni 2016, 10:02:19

Würdest Du mir bitte erklären wo der Unterschied zwischen [Alarmanlage] und [?Alarmanlage] ist?


"Angaben in eckigen Klammern, die mit einem Fragezeichen beginnen, führen zu keiner Triggerung des Moduls, sie dienen lediglich der Abfrage."
http://fhem.de/commandref_DE.html#DOIF_Zeitintervalle_Readings_und_Stati_ohne_Trigger

In deinem Fall bedeutet es, dass wenn du die Alarmanlage scharf schaltest es nicht den Timer auslöst wenn zeitgleich die Tür geöffnet ist, sondern ausschließlich die Veränderung des Kontakts/Sensors an der Tür zu einem Ereignis führt. Jedoch denke ich, dass es in deinem Fall keinen großen Unterschied macht. Lasse mich da aber auch gerne eines besseren belehren.

Gruß
 

CoolTux

Zitat von: bene_dicere am 28 Juni 2016, 10:18:36
"Angaben in eckigen Klammern, die mit einem Fragezeichen beginnen, führen zu keiner Triggerung des Moduls, sie dienen lediglich der Abfrage."
http://fhem.de/commandref_DE.html#DOIF_Zeitintervalle_Readings_und_Stati_ohne_Trigger

In deinem Fall bedeutet es, dass wenn du die Alarmanlage scharf schaltest es nicht den Timer auslöst wenn zeitgleich die Tür geöffnet ist, sondern ausschließlich die Veränderung des Kontakts/Sensors an der Tür zu einem Ereignis führt. Jedoch denke ich, dass es in deinem Fall keinen großen Unterschied macht. Lasse mich da aber auch gerne eines besseren belehren.

Gruß
 

Nicht wirklich, denn er hat ja schon selber mitbekommen das es da noch einen Logikfehler gibt. Also einen weiteren.

Kleines Beispiel. Wenn die Tür offen ist und er jetzt die Alarmanlage scharf schaltet, geht sofort der Alarm los, denn es wird auf den Dummy STATE reagiert und festgestellt das der on ist.
Würde er nun ein Fragezeichen davor setzen würde das nicht passieren. Er muß nur dir Tür auf lassen, den Dummy auf on setzen und dann die Tür schließen und nichts passiert.
Hat er das Fragezeichen gesetzt, schaltet aber den Dummy auf on wärend die Tür zu ist und er will dann raus und öffnet die Tür, so geht der Alarm los.

Also ich würde ja durchs Fenster raus, das lässt beide Probleme   ;D


Oder man überlegt kurz wie man das ganze eleganter lösen kann.

Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

WhyTea

Zitat von: CoolTux am 28 Juni 2016, 10:26:08
Nicht wirklich, denn er hat ja schon selber mitbekommen das es da noch einen Logikfehler gibt. Also einen weiteren.

Kleines Beispiel. Wenn die Tür offen ist und er jetzt die Alarmanlage scharf schaltet, geht sofort der Alarm los, denn es wird auf den Dummy STATE reagiert und festgestellt das der on ist.
Würde er nun ein Fragezeichen davor setzen würde das nicht passieren. Er muß nur dir Tür auf lassen, den Dummy auf on setzen und dann die Tür schließen und nichts passiert.
Hat er das Fragezeichen gesetzt, schaltet aber den Dummy auf on wärend die Tür zu ist und er will dann raus und öffnet die Tür, so geht der Alarm los.
Und genau das passierte nicht. Das einschalten bei geöffneter Tür führte nicht zu einem Alarm. Warum nicht kann ich nicht begründen.

Zitat von: CoolTux am 28 Juni 2016, 10:26:08
Also ich würde ja durchs Fenster raus, das lässt beide Probleme   ;D
Nette Idee!  ;D Geht aber nicht. Die Fenster sind natürlich auch angesichert.

Zitat von: CoolTux am 28 Juni 2016, 10:26:08
Oder man überlegt kurz wie man das ganze eleganter lösen kann.
Sicher geht das eleganter aber meine Perl und auch die allgemeinen Programmierkenntnisse sind eher bescheiden daher war ich stolz es überhaupt soweit hin bekommen zu haben.

Ich merke schon es ist glaub ich mal sinnvoll den kompletten Code der Alarmanlage zu posten um Klarheit zu schaffen.


### Strukturen ###
define Alle_Tueren_und_Fenster structure room KG_Tueren_und_Fenster EG_Tueren_und_Fenster OG1_Tueren_und_Fenster OG2_Tueren_und_Fenster
attr Alle_Tueren_und_Fenster clientstate_behavior relative
attr Alle_Tueren_und_Fenster clientstate_priority open tilted closed
attr Alle_Tueren_und_Fenster room Zentralsysteme,_Fenster

define KG_Tueren_und_Fenster structure room KG_Kellertuer
attr KG_Tueren_und_Fenster userattr room_map structexclude
attr KG_Tueren_und_Fenster clientstate_behavior relative
attr KG_Tueren_und_Fenster clientstate_priority open tilted closed
attr KG_Tueren_und_Fenster room Zentralsysteme,_Fenster

define EG_Tueren_und_Fenster structure room EG_AZ_Fenster_Status EG_BZ_Fenster_Status EG_Eingangstuer EG_EG_Fenster_Status EG_Kueche_Fenster_Status EG_WZ_Fenster_links_Status EG_WZ_Terassentuer_Status
attr EG_Tueren_und_Fenster userattr room_map structexclude
attr EG_Tueren_und_Fenster clientstate_behavior relative
attr EG_Tueren_und_Fenster clientstate_priority open tilted closed
attr EG_Tueren_und_Fenster room Zentralsysteme,_Fenster

define EG_Tueren_und_Fenster_o_Eingang structure room EG_AZ_Fenster_Status EG_BZ_Fenster_Status EG_EG_Fenster_Status EG_Kueche_Fenster_Status EG_WZ_Fenster_links_Status EG_WZ_Terassentuer_Status
attr EG_Tueren_und_Fenster_o_Eingang userattr room_map structexclude
attr EG_Tueren_und_Fenster_o_Eingang clientstate_behavior relative
attr EG_Tueren_und_Fenster_o_Eingang clientstate_priority open tilted closed
attr EG_Tueren_und_Fenster_o_Eingang room Zentralsysteme,_Fenster

define OG1_Tueren_und_Fenster structure room OG1_AZ_Fenster_Status OG1_BZ_Fenster_Status OG1_SZ_Fenster_Status
attr OG1_Tueren_und_Fenster userattr room_map structexclude
attr OG1_Tueren_und_Fenster clientstate_behavior relative
attr OG1_Tueren_und_Fenster clientstate_priority open tilted closed
attr OG1_Tueren_und_Fenster room Zentralsysteme,_Fenster

define OG2_Tueren_und_Fenster structure room OG2_KZ_Balkonfenster_Status OG2_KZ_Balkontuer_Status OG2_KZ_BVBFenster_Status
attr OG2_Tueren_und_Fenster userattr room_map structexclude
attr OG2_Tueren_und_Fenster clientstate_behavior relative
attr OG2_Tueren_und_Fenster clientstate_priority open tilted closed
attr OG2_Tueren_und_Fenster room Zentralsysteme,_Fenster


### Alarmanlage ###
define notAlarmanlage_on notify Alarmanlage:on {\
if ((Value("EG_Tueren_und_Fenster_o_Eingang") ne "closed") || (Value("KG_Tueren_und_Fenster") ne "closed")) {\
fhem ("set Alarmanlage off");;\
system ("curl -s --cacert /etc/ssl/cert.pem -F 'sound=alien' -F 'token=x' -F 'user=x' -F 'message=Alarmanlage nicht aktivierbar! Keller und EG überprüfen!' https://api.pushover.net/1/messages.json")} \
}
attr notAlarmanlage_on room _Alarmanlage

define notAlarmanlage_on_TV notify Alarmanlage:on {\
if (Value("struc_TV") ne "absent") {\
system ("curl -s --cacert /etc/ssl/cert.pem -F 'sound=siren' -F 'token=x' -F 'user=x' -F 'message=Der Fernseher oder ect. ist noch an!' https://api.pushover.net/1/messages.json")} \
}
attr notAlarmanlage_on_TV room _Alarmanlage

define notAlarmanlage_off notify Alarmanlage:off {\
fhem ("set Alarmanlage off");;\
fhem ("set Alarm_KG nein");; fhem ("set Alarm_EG nein")\
}
attr notAlarmanlage_off room _Alarmanlage

define notAlarm_EG notify EG_Tueren_und_Fenster_o_Eingang:open {\
if (Value("Alarmanlage") eq "on") {\
fhem ("set Alarm_EG ja")}\
}
attr notAlarm_EG room _Alarmanlage

define Alarm_di DOIF ([?Alarmanlage] eq "on" and [EG_Eingangstuer] eq "open") (set Alarm_EG ja)\
DOELSEIF ([Alarmanlage:"off"]) (set Alarm_EG nein)
attr Alarm_di room _Alarmanlage
attr Alarm_di wait 120:0

define notAlarm_KG notify KG_Tueren_und_Fenster:open {\
if (Value("Alarmanlage") eq "on") {\
fhem ("set Alarm_KG ja")}\
}
attr notAlarm_KG room _Alarmanlage

### Pushover Notification ###
define Alarmanlage_EG_Pushover notify Alarm_EG:ja {\
if (Value("Alarmanlage") eq "on") {\
system ("curl -s --cacert /etc/ssl/cert.pem -F 'sound=alien' -F 'token=x' -F 'user=x' -F 'message=*** Alarm *** Im EG wurde ein Fenster oder eine Tür geöffnet!' https://api.pushover.net/1/messages.json")} \
    }
attr Alarmanlage_EG_Pushover room _Alarmanlage

define Alarmanlage_KG_Pushover notify Alarm_KG:ja {\
if (Value("Alarmanlage") eq "on") {\
system ("curl -s --cacert /etc/ssl/cert.pem -F 'sound=alien' -F 'token=x' -F 'user=x' -F 'message=*** Alarm *** Im KG wurde ein Fenster oder eine Tür geöffnet!' https://api.pushover.net/1/messages.json")} \
    }
attr Alarmanlage_KG_Pushover room _Alarmanlage



Gruß
Daniel

CoolTux

Zitat von: WhyTea am 28 Juni 2016, 11:24:53
Und genau das passierte nicht. Das einschalten bei geöffneter Tür führte nicht zu einem Alarm. Warum nicht kann ich nicht begründen.
Gruß
Daniel

Bitte bitte lese etwas genauer

Zitat von: CoolTux am 28 Juni 2016, 10:26:08
Würde er nun ein Fragezeichen davor setzen würde das nicht passieren. Er muß nur die Tür auf lassen, den Dummy auf on setzen und dann die Tür schließen und nichts passiert.

Ich hoffe Du siehst nun das beide Aussagen mit geöffneter Tür sind. Ausserdem sollte Dir nun endlich bewusst sein wieso nichts passiert


Auf den Rest Antworte ich später. Muss mal eben bisschen was zuhören   ;D
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

WhyTea

#13
Hallo CoolTux
Danke das Du Dir so viel Mühe gibst mir zu helfen!

Ich habe nochmals gelesen was Du geschrieben hast. Und hoffentlich nun endlich verstanden was Ihr mir sagen wollt im Bezug auf das ?.

Bis heute verwendete ich das ? nicht. Die Alarmanlage verhilt sich wie folgt.
Alarmanlage on, Tür wird geöfnet -> nach 120 Sekunden Alarm
Tür zu, Alarmanlage wird auf on gestellt, Tür wird geöfnet -> nach 120 Sekunden Alarm
Tür auf, Alarmanlage wird auf on gestellt -> nichts passiert 

Ob es nach 120 Sekunden bei weiterhin geöffneter Tür einen Alarm gegeben hätte kann ich nicht sagen da ich die Tür immer innerhalb der Zeit geschlossen habe.  :-\
Nachdem wie ich das ? nun verstehe wäre es aber nach 120 Sekunden zu einem Alarm gekommen.

Da ich aber ab heute das ? gesetzt habe sollte dies nun nicht mehr der Fall sein, richtig?
-
Daniel



CoolTux

Richtig.
Wichtig ist zu verstehen WIESO.


([Alarmanlage] eq "on" and [EG_Eingangstuer] eq "open") (set Alarm_EG ja)\
DOELSEIF ([Alarmanlage:"off"]) (set Alarm_EG nein)

Das Tür öffnen löst ein EVENT aus. Dein DOIF reagiert darauf (ist etwas ungenau ausgedrückt, aber lassen wir das mal so stehen) und weil es den state open hat wird ausgelöst.
Im obrigen Beispiel ist kein ? vor der Alarmanlage. Also löst das setzen des Dummys Alarmanlage auf on ebenfalls einen EVENT aus und darauf reagiert auch Dein DOIF.

Schauen wir uns nun an was passiert wenn ein ? vor Alarmanlage ist

([?Alarmanlage] eq "on" and [EG_Eingangstuer] eq "open") (set Alarm_EG ja)\
DOELSEIF ([Alarmanlage:"off"]) (set Alarm_EG nein)

Auch hier führt das öffnen der Tür zu einem EVENT und Dein DOIF reagiert darauf und löst Alarm aus.
Setzt Du nun den Alarmanlage Dummy auf on wird ein EVENT ausgelöst, aber durch das ? darauf nicht reagiert. Das Fragezeichen sorgt aber dafür das beim öffnen der Tür und damit auslösen des DOIF's eine Zustandsabfrage passiert. Nämlich die Frage nach, ist der Zustand des Dummys Alarmanlage = on.



PS:
Noch kurz zur Erläuterung meiner gewählten Formulierung. DOIF Wissende würde jetzt Amok laufen wenn sie das lesen, Korinthenkacker gibt es überall und Abends haben Gymnasiallehrer bekanntlich auch Ausgang ( das ist lieb gemeint und soll zum schmunzeln anregen)

In der Form wie Du Dein DOIF geschrieben hast, reagiert das DOIF nicht wirklich auf EVENTS sondern auf Veränderung des STATE Zustandes.
Ich habe das aber so geschrieben weil ich glaube das es verständlicher ist was gemeint ist. Es ist eben das reagieren auf eine Ereignis. Wie das Ereignis aus sieht mag jetzt hier nicht entscheidend sein.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net