Alarmanlage nur über Fensterkontakte

Begonnen von blitzcom, 24 August 2013, 07:56:41

Vorheriges Thema - Nächstes Thema

blitzcom

Hallo zusammen...

Ich habe folgendes im Einsatz:
FHEM auf Raspberry, 2 CUL (einer schaltet FS20 Module, einer hört nur MAX! Fensterkontakte ab)

Um was geht es? Ich habe viel zum Thema Alarmanlage gelesen und ja, ich habe den Wiki Artikel auch gelesen. Aber ich denke das der Ansatz für eine relativ einfache Alarmanlage fast zu weit geht.
Eins gleich vorweg, ich bin zwar belesen, allerdings fehlt mir programmiertechnisch einiges.
 
Zu meinem Haus:
Ich habe derzeit 10 Fensterkontakte im Einsatz, damit sichere ich auch Türen ab.
Die Idee ist, dass beim verlassen des Hauses per Android Handy die Anlage scharf geschaltet wird. Im Fall das sich dann ein Fenster öffnet, soll eine Meldung per notifymyandroid auf dem Handy erscheinen.
Derzeit lauten die Namen der Kontakte verschieden. Wenn ich das per trigger abfragen will, sollten die Namen, soweit ich das verstanden habe, sowas wie "Fenster" enthalten.

Der Hintergrund ist, dass ich im Falle einer Abwesendheit eine Nachricht bekommen will, ob sich da gerade ein Fenster geöffnet hat. Ich denke, dass ein Einbrecher, selbst wenn er eine Scheibe einschlägt, dann das Fenster öffnet. Parallel sollte dann noch im Haus eine Blitzleuchte, die habe ich hier liegen, per FS20 angehen.
Ich denke, das ein Einbrecher das Haus in dem Fall nicht mehr betreten wird, wenn er sieht das innen etwas anfängt zu blinken.

Ich hoffe, ich hab das verständlich ausgedrückt.
Könnt ihr mir helfen? Und was braucht ihr von mir als Info?
Danke schon mal.



bugster_de

Hi,

ich habe heute so was ähnliches bei mir umgesetzt. Deshalb frage vorab: wenn die Alarmanlage scharf ist, dann ist es doch egal, welches Fenster geöffnet wurde. Wichtig ist doch nur dass EINES geöffnet wurde, oder?

Wenn Du nun also alle Kontakte mit unterschliedlichen Namen hast, dann setze dir pro Kontakt einen notify
define mynotify01 notify Kontakt01:on.* { myPerlAlarm( );; }
define mynotify02 notify Kontakt02:on.* { myPerlAlarm( );; }
usw.

Man kann nun sehen, dass die alle die gleiche Perl Funktion aufrufen. Und in dieser Funktion machst Du dann das notifymyAndroid.
Pro Kontakt sollte halt das attribut event-on-change-reading state gesetzt sein, sonst feuert der notify dauernd und nicht nur einmal.

Diese notify erstellst Du Dir ebenfalls aus einem Perl Skript, welches beim Verlassen des Hauses / Scharfschalten der Alarmanlage aufgerufen wird. Und ein anderes Skript löscht die notify wieder sobald die Anlage wieder ausgeschaltet wird.


blitzcom

Moin,
ich bin mir nicht sicher, ob es tatsächlich so egal ist. Zu wissen, welches Fenster genau geöffnet wird ist hilfreich, da man dann genau weiß, wo geschaut werden muss. Kann ja sein, dass der Nachbar mal "rüberschaut" und im Bedarfsfall die Polizei informiert. Gegebenfalls macht es sogar Sinn, dass man die Events loggt. Damit könnte man den Einbruchvorgang besser nachvollziehen.
Wie genau stelle ich den Notify pro Fenster ein? Kannst Du mir ein Beispiel nennen?
Zum Thema scharf schalten: Die Nummer per Handy ist eigentlich eine Krücke, wenn auch vielleicht einfach umzusetzen. Besser wäre da vermutlich ein Kontakt an der Haustür, der schaltet, wenn man die Tür zu schließt.
Aber eins nach dem anderen.

Ich bin nicht wirklich fit was die Programmierung betrifft. Kannst Du mir da auf die Sprünge helfen?

mfg
Mike


bugster_de

Hi,

generelle Anmerkung vorab: ich habe gute Erfahrungen damit gemacht, mir erstmal auf einem Papier auzuschreiben, was das System können muß und was nett wäre wenn es das kann. Manche Funktionen sind dann überraschend kompliziert obwohl man am Anfang dachte, das ist doch ganz einfach.

wenn der Nachbar mal schnell aus dem Fenster sehen soll, macht es natürlich Sinn, dass man weiß, von welchem Fenster aus der notify erzeugt wurde. Hier gibt es im Prinzip zwei Möglichkeiten:
- eine generische Perl Routine, die man für alle Fenster nutzt. Dieser Routine muß man dann natürlich einen eindeutigen Identifier mitgeben, um das jeweilige Fenster zu identifizieren
- eine Perl Routine pro Kontakt. Hat den Vorteil dass man sich den Identifier "Zirkus" sparen kann, aber man hat hat halt den gleichen Code mehrfach kopiert. Macht die Wartung schwer

ZitatZum Thema scharf schalten
wie auch immer man das scharf schaltet, kann man später definieren. Ich mag es gerne, wenn ich eine Perl Funktion habe, die mir einen Regler ein oder ausschaltet. Somit kann man entweder automatisch oder manuell per FHEM Oberfläche etwas machen.
Im konkreten Fall empfiehlt sich doch das PRESENCE Modul, oder? Sobald das Handy im WLAN zu Hause eingebucht ist, wird der Status auf Anwesend gesetzt und die Alarmanlage aus geschaltet. Wenn das Handy nicht mehr im WLAN ist, dann schaltet sich Alarmanlage scharf. Da Du ja ein Android nutzt, geht das auch sehr zuverlässig. Ich habe ein Android und ein Blackberry. Die beiden funktionieren perfekt als Anwesenheitserkennung. Mein Frau hat ein iPhone und mit dem geht es nicht wirklich (siehe viele Beiträge zum Thema hier im Forum).

Code Beispiele stelle ich Dir nachher mal zusammen. Ich habe bei mir im Haus an den Terassentueren die Three-State Sensoren von Homematic und an den Fenstern die billigen Two-State von Intertechno. Die muß man zwar etwas unterschiedlicher behandeln, kann es dann aber in der Alarmanlagen Funktion zusammen laufen lassen.

Übrigens finde ich ganz nett, dass man sich nach dem Verlassen des Hauses noch kurz einen Status senden lassen kann, der angibt, ob man vergessen hat ein Fenster zu schliessen. Dann kann man nochmal umdrehen und es schnell zumachen :-)




betateilchen

Zitat von: bugster_de schrieb am So, 25 August 2013 21:23define mynotify01 notify Kontakt01:on.* { myPerlAlarm( );; }
define mynotify02 notify Kontakt02:on.* { myPerlAlarm( );; }
usw.

aus Performancegründen besser so:

define mynotify notify Kontakt..:on.* { myPerlAlarm( );; }

Und welcher Kontakt das notify ausgelöst hat, weiß man doch sowieso, weil das in $NAME steht.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

bugster_de

wow, was ist der Unterschied? Ich muss nämlich zugeben, dass ich die verschiedenen Möglichkeiten der notifys noch nicht durch drungen habe. Und die Beschreibung im Wiki ist ja auch eher ...

Sehe ich es richtig, dass mit Deiner Definition dann nur EIN notify angelegt wird, der auf alles reagiert, was Kontaktxx:on.* heisst? Sprich alles was nach "Kontakt" noch genau zwei Ziffern/Buchstaben hat?
Das wäre natürlich eleganter, da bei meiner Lösung halt endlos viele notifies erzeugt werden (dafür können alle Schalter aber halt auch heissen wie sie wollen)

betateilchen

Zitat von: bugster_de schrieb am Mo, 26 August 2013 12:07Das wäre natürlich eleganter, da bei meiner Lösung halt endlos viele notifies erzeugt werden

Genau darin liegt ein Performanceproblem. Denn jeder Event wird immer an jedes notify übergeben, um dort (per regex) zu prüfen, ob das notify auf den Event passt. Bei meiner Lösung findet also nur eine Prüfung statt, in deinem simplen Beispiel sind es derer schon zwei. Und das Ganze multipliziert sich mit der Anzahl aller auftretenden events (nicht nur der von den Kontakten)

Zitat von: bugster_de schrieb am Mo, 26 August 2013 12:07(dafür können alle Schalter aber halt auch heissen wie sie wollen)

Über solche grundlegenden Designfragen sollte man sich im Vorfeld Gedanken machen, bevor man anfängt, loszuwurschteln ;)
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

bugster_de

so, und nun also mal ein paar Codeschnippel (ungetestet)

in der fhem.cfg:
# ist jemand zu Hause?
define Handy PRESENCE lan-ping 192.168.2.57
define Anwesenheit notify Handy:.* { Set_Alarmanlage( % );; }

# Fensterkontakte
define Kontakt01 IT 000000000F FF F0
define Kontakt02 IT 000000000F FF F0
define AlarmNotify notify Kontakt..:on.* { myPerlAlarm( );; }


und im Perl
my $Alarmanlage = 0; # 0 ist aus, 1 ist ein

sub Set_Alarmanlage( $ ) {
   my $status = @_[ 0 ];
   
   if( $status eq "absent" ) {
     $Alarmanlage = 1;
   } else {
     $Alarmanlage = 0;
   }
}

sub myPerlAlarm( ) {
  if( $Alarmanlage ) {
     # Anlage ist scharf und wir wurden aufgerufen, also stimmt was nicht
     FB_mail( 'mail.an@mich.de', "ALARM", "Irgendein Fenster ist auf" );
     Log( 1, "Irgend ein Fenster ist auf";
     notifymyAndroid "Irgendein Fenster ist auf";
  }
}



Sprich: sobald das Handy das WLAN Netz verlässt wird die Anlage automatisch scharf geschaltet. Und wenn dann irgendein Fenster Kontakt geöffnet wird, wird myPerlAlarm aufgerufen. Der prüft, ob die Alarmanlage scharf ist und löst Alarm aus. Wenn die Anlage nicht scharf ist, passiert nichts. Sobald das Handy wieder zu Hause ist loggt es sich im WLAN ein und die Alarmanlage wird ausgeschaltet.

Viel Spaß damit

bugster_de

Sehr gut ! Dann werde ich doch gleich mal meine Installtion auf Performance trimmen und das umbauen. Danke !

betateilchen

Zitat von: bugster_de schrieb am Mo, 26 August 2013 12:27Sprich: sobald das Handy das WLAN Netz verlässt wird die Anlage automatisch scharf geschaltet.

Eine saublöde Idee...
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

blitzcom

Hmm... schwieriges Tehma.
Ich hab da ja schon sehr genau nachgedacht was die Anlage können soll. Und eigentlich auch relativ genau beschrieben. Ich gehe ja immer noch davon aus, dass der Einbrecher die Tür aufhebelt, bzw. öffnet, auch wenn er zunächst die Scheibe einschlagen sollte.
Als wünschenswert wäre dann noch die Möglichkeit, dass ein oder zwei geschaltete Steckdosen angehen. Eine soll dann ja die Xenon Blitzleuchte steuern.

Die Nummer mit dem presence ist sicherlich die ganz geile Variante. Und die Meldung beim Verlassen, wie genau der Status ist ebenso.

Hiermal der relevante Teil aus der FHEM.conf
define CUL_0 CUL /dev/ttyACM1@9600 1134
attr CUL_0 rfmode MAX
define cm CUL_MAX 123456
define Bad_links MAX ShutterContact 0735df
attr Bad_links devStateIcon closed:signal_Fenster_Offen.off opened:signal_Fenster_Offen.on
attr Bad_links room MAX
define Buero MAX ShutterContact 07359d
attr Buero devStateIcon closed:signal_Fenster_Offen.off opened:signal_Fenster_Offen.on
attr Buero room MAX
define Haustuer MAX ShutterContact 073e01
attr Haustuer devStateIcon closed:signal_Fenster_Offen.off opened:signal_Fenster_Offen.on
attr Haustuer room MAX
define Bad_rechts MAX ShutterContact 0735e3
attr Bad_rechts devStateIcon closed:signal_Fenster_Offen.off opened:signal_Fenster_Offen.on
attr Bad_rechts room MAX
define Esszimmer MAX ShutterContact 0735cd
attr Esszimmer devStateIcon closed:signal_Fenster_Offen.off opened:signal_Fenster_Offen.on
attr Esszimmer room MAX
define Kueche_rechts MAX ShutterContact 0737b4
attr Kueche_rechts devStateIcon closed:signal_Fenster_Offen.off opened:signal_Fenster_Offen.on
attr Kueche_rechts room MAX
define Balkon_WZ MAX ShutterContact 07378e
attr Balkon_WZ devStateIcon closed:signal_Fenster_Offen.off opened:signal_Fenster_Offen.on
attr Balkon_WZ room MAX
define Kueche_links MAX ShutterContact 07375f
attr Kueche_links devStateIcon closed:signal_Fenster_Offen.off opened:signal_Fenster_Offen.on
attr Kueche_links room MAX
define Schlafz_unten_klein MAX ShutterContact 073685
attr Schlafz_unten_klein devStateIcon closed:signal_Fenster_Offen.off opened:signal_Fenster_Offen.on
attr Schlafz_unten_klein room MAX
define Schlafzimmer_oben MAX ShutterContact 0735de
attr Schlafzimmer_oben devStateIcon closed:signal_Fenster_Offen.off opened:signal_Fenster_Offen.on
attr Schlafzimmer_oben room MAX


Soll ich die Kontakte nochmal umbenennen?
Zwecks der Einfachkeit halber? Und müüste da nicht noch auf dem Raspberry ein sendmail installiert werden?

mfg
Mike

bugster_de

ZitatEine saublöde Idee...

1. bessere Ideen sind natürlich immer willkommen (z.B. wie bereits beschrieben per Türschloßkontakt oder sonst wie)
2. Eine Begründung warum das doof ist wäre natürlich auch nett.


bugster_de

ZitatUnd welcher Kontakt das notify ausgelöst hat, weiß man doch sowieso, weil das in $NAME steht.
ich lerne gerade kräftig dazu ! Keep it coming !!

Habe über das Mittagessen nochmal drüber nach gedacht. Das ist echt genial und dies ist das fehlende Puzzlestück bei meiner FHEM Installation. Ich wusste die ganze Zeit, dass da irgendwas nicht so toll ist.
Nun kann ich alle Kontakte einfach durch nummerieren und somit z.B. in Perl falls nötig einfach per foreach drüber iterieren. Und für das FHEM GUI nutze ich das attribut alias und habe dann einen schönen, sprechenden Namen.
Performance wird besser, Programmierbarkeit wird besser, eigentlich wird alles besser.

betateilchen

Zitat von: bugster_de schrieb am Mo, 26 August 2013 12:471. bessere Ideen sind natürlich immer willkommen (z.B. wie bereits beschrieben per Türschloßkontakt oder sonst wie)

Ein Taster in Türnähe. Wird vor dem Verlassen der Wohnung betätigt und schaltet die Anlage mit einer Verzögerung von 30 Sekunden scharf. Beim Betreten der Wohnung erfolgt ein verzögerter Alarm (z.B. 5 Sekunden) wenn die Anlage nicht über den Taster unscharf geschaltet wird.

Zitat von: bugster_de schrieb am Mo, 26 August 2013 12:472. Eine Begründung warum das doof ist wäre natürlich auch nett.

Stell Dir vor, Du bist zu Hause und der Handyakku wird unbemerkt leer.
Stell Dir vor, Du kommst nach Hause und der Handyakku wurde unterwegs leer.
Außerdem dauert es eine gewisse Zeit, bis sich das Handy beim Nachhausekommen in das WLAN einloggt. Und auch presence braucht ein paar Sekunden, um die Anwesenheit zu erkennen. Solange stehst Du vor Deiner Wohnungstür, weil die Alarmanlage noch scharf ist.

Ich habe das mit einer Fernbedienung am Schlüsselbund gelöst (Homematic) und bekomme sowohl beim Scharf- wie beim Unscharfschalten eine direkte Rückmeldung, ob der Befehl angekommen ist. Die presence meines Handies nutze ich in diesem Zusammenhang nur dafür, ein versehentliches extern-Scharfschalten zu vermeiden, solange ich zu Hause bin.

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

bugster_de

das ist wohl richtig. Ich glaube das wird aber nur zum Problem, wenn die Alarmanlage auch die Polizei alarmiert oder eine entsprechende Sirene auslöst oder sonstwie tolle Sachen macht. So lange sie erstmal nur eine Mail oder eine Notification schickt.

Der Taster in der Nähe der Türe ist da sicherlich eine gute Idee. Allerdings kenne ich doch meine Frau :-)