FHEM Forum

FHEM => Codeschnipsel => Thema gestartet von: blitzcom am 24 August 2013, 07:56:41

Titel: Alarmanlage nur über Fensterkontakte
Beitrag von: blitzcom am 24 August 2013, 07:56:41
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.


Titel: Aw: Alarmanlage nur über Fensterkontakte
Beitrag von: bugster_de am 25 August 2013, 21:23:47
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.

Titel: Aw: Alarmanlage nur über Fensterkontakte
Beitrag von: blitzcom am 26 August 2013, 09:32:15
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

Titel: Aw: Alarmanlage nur über Fensterkontakte
Beitrag von: bugster_de am 26 August 2013, 10:55:27
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 :-)



Titel: Aw: Alarmanlage nur über Fensterkontakte
Beitrag von: betateilchen am 26 August 2013, 12:02:35
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.
Titel: Aw: Alarmanlage nur über Fensterkontakte
Beitrag von: bugster_de am 26 August 2013, 12:07:01
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)
Titel: Aw: Alarmanlage nur über Fensterkontakte
Beitrag von: betateilchen am 26 August 2013, 12:19:41
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 ;)
Titel: Aw: Alarmanlage nur über Fensterkontakte
Beitrag von: bugster_de am 26 August 2013, 12:27:41
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
Titel: Aw: Alarmanlage nur über Fensterkontakte
Beitrag von: bugster_de am 26 August 2013, 12:29:05
Sehr gut ! Dann werde ich doch gleich mal meine Installtion auf Performance trimmen und das umbauen. Danke !
Titel: Aw: Alarmanlage nur über Fensterkontakte
Beitrag von: betateilchen am 26 August 2013, 12:31:32
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...
Titel: Aw: Alarmanlage nur über Fensterkontakte
Beitrag von: blitzcom am 26 August 2013, 12:32:32
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
Titel: Aw: Alarmanlage nur über Fensterkontakte
Beitrag von: bugster_de am 26 August 2013, 12:47:42
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.

Titel: Aw: Alarmanlage nur über Fensterkontakte
Beitrag von: bugster_de am 26 August 2013, 13:37:51
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.
Titel: Aw: Alarmanlage nur über Fensterkontakte
Beitrag von: betateilchen am 26 August 2013, 13:39:30
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.

Titel: Aw: Alarmanlage nur über Fensterkontakte
Beitrag von: bugster_de am 26 August 2013, 13:43:00
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 :-)
Titel: Aw: Alarmanlage nur über Fensterkontakte
Beitrag von: betateilchen am 26 August 2013, 13:44:15
Zitat von: blitzcom schrieb am Mo, 26 August 2013 12:32
define Bad_links MAX ShutterContact 0735df
define Buero MAX ShutterContact 07359d
define Haustuer MAX ShutterContact 073e01
define Bad_rechts MAX ShutterContact 0735e3
define Esszimmer MAX ShutterContact 0735cd
define Kueche_rechts MAX ShutterContact 0737b4
define Balkon_WZ MAX ShutterContact 07378e
define Kueche_links MAX ShutterContact 07375f
define Schlafz_unten_klein MAX ShutterContact 073685
define Schlafzimmer_oben MAX ShutterContact 0735de


Bei mir heißen die Melder alle "Melder_...." also z.B. "Melder_FAl" ist der Melder "Fenster Arbeitszimmer links" und Melder_TEingang ist der Melder "Tür Eingang" (es gibt auch Melder_TBalkon) somit kann ich wahlweise alle Fenstermelder (Melder_F.*) oder alle Türmelder (Melder_T.*) oder alle Melder (Melder_.*) auswerten.

sendmail auf Raspberry? Na dann mal viel Spaß damit :) Ich hab den Versuch nach zwei Tagen abgebrochen.

Titel: Aw: Alarmanlage nur über Fensterkontakte
Beitrag von: betateilchen am 26 August 2013, 13:47:01
Zitat von: bugster_de schrieb am Mo, 26 August 2013 13:43Allerdings kenne ich doch meine Frau :-)

glaub mir, wenn sie zweimal die Wohnung betritt und die Sirene losheult, vergisst sie das nie wieder. Und das Schlüsselbrett in Nähe des Tasters hilft, das Vergessen des Scharfschaltens zu vermeiden.
Titel: Aw: Alarmanlage nur über Fensterkontakte
Beitrag von: bugster_de am 26 August 2013, 14:47:45
Zitatund die Sirene losheult, vergisst sie das nie wieder
wie gesagt ich kenne meine Frau. Ich glaube eher dass danach die Sirene auf den Müll wandert :-)

ZitatBei mir heißen die Melder alle "Melder_...."
das ist klasse. Bei mir sind die Dinger momentan nach GESCHOSS_RAUM_Name aufgeteilt. Also OG_BZ_Rolladen wäre dann der Rolladen im Badezimmer im Obergeschoss.
Aber eigentlich brauche ich das ja nur umzudrehen (Rolladen_OG_BZ) und kann dann mit Rolladen.* alle Rolläden, mit Rolladen_OG.* alle im OG etc. auswerten.
Gleiches natürlich für die Melder.
MELDER_EG_TTM wäre dann der Melder im Erdgeschoss an der Terassen-Türe Mitte (TTM) und TTL ist dann Links und TTR ist dann rechts.
Und mittels MELDER_EG_TT.* kann ich die Terassentüren abfragen und entsprechend die Rolläden oben lassen.

Das gefällt mir immer besser !
Titel: Aw: Alarmanlage nur über Fensterkontakte
Beitrag von: blitzcom am 26 August 2013, 16:33:26
Hehe, schön das ihr beiden euch so rege austauscht... :-)

Leider komme ich nicht weiter.

Die Nummer mit dem absent klappt schon mal. Ich habe jetzt ein Fenstermelder nach Kontakt01 umbenannt. Wenn ich das richtig sehe, wird doch das Pearl script in der 99_Utils.pm eingetragen, richtig?
Wenn ich das mache, taucht als Fehlermeldung folgendes auf: syntax error at ./FHEM/99_Utils.pm line 263, near ""Irgend ein Fenster ist auf";"
Ab gesehen davon: Kann man den auf der FHEM Gui nicht zusätzlich einen Schalter definieren, mit dem man die Alarmanlage per Hand einschalten kann.

Was die Thematik Sirene betrifft... Da nehme ich ohnehin Abstand von. Ruf nur die Polizei auf den Schirm und im dümmsten Fall bezahle ich dann den einsatz. Wie gesagt, eine hell blitzende Leuchte innen sollte wohl jeden Einbrecher daran hindern weiter zu machen, bzw. erst ins Haus zu gehen. In dem Zusammenhang, wie schalte ich denn nun im Falle eines Alarmes eine FS20 Dose, als Beispiel?

mfg
Mike
Titel: Aw: Alarmanlage nur über Fensterkontakte
Beitrag von: bugster_de am 26 August 2013, 17:00:05
tja, wie gesagt untestet:
Log( 1, "Irgend ein Fenster ist auf";
ist falsch. richtig ist
Log 1, "Irgend ein Fenster ist auf";
oder
Log( 1, "Irgend ein Fenster ist auf" );

Das mit dem Webschalter kann man natürlich machen. Einen dummy definieren und der schaltet dann ebenfalls per notify die Alarmanlage ein oder aus. #
Aber nun wird es ja genau spannend (siehe meine Anmerkungen zur steigenden Komplexität): wer hat nun Vorrang? Der Schalter oder das Handy? Man schaltet per Hand aus und geht dann weg? Was passiert dann? Aus oder Ein? :-)
Titel: Aw: Alarmanlage nur über Fensterkontakte
Beitrag von: blitzcom am 26 August 2013, 17:09:58
Alle drei Lösungen funktionieren nicht.
Ich glaube, dass es eher an der hier liegt, oder?
notifymyAndroid "Irgendein Fenster ist auf";

Was ist eleganter... tja. Ich habe gerade bei den Eventmeldungen gesehen, das es schon mal 90 sekunden dauern kann bis registriert wird, dass das Handy wieder anwesend ist. Jetzt ist der Weg von der Garage etwas weiter, das würde vielleicht auch im längsten Fall passen. Aber die Nummer mit dem Dummy Schalter, bis der Türkontakt da ist, wäre vielleicht die bessere Lösung.
Aber was hälst Du von der Variante mit dem Blitzlicht?

mfg
Mike
Titel: Aw: Alarmanlage nur über Fensterkontakte
Beitrag von: bugster_de am 26 August 2013, 18:07:24
Zitat von: betateilchen schrieb am Mo, 26 August 2013 12:02
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.

trifft das eigentlich auch auf AT zu? Sprich wird jedesmal alle AT durchgegangen, um zu sehen welcher es war? Und wenn ja, wie errechnet sich die Zeitbasis für AT?
Titel: Aw: Alarmanlage nur über Fensterkontakte
Beitrag von: Puschel74 am 26 August 2013, 19:23:52
Hallo,

@betateilchen

Zitatsendmail auf Raspberry? Na dann mal viel Spaß damit :) Ich hab den Versuch nach zwei Tagen abgebrochen.

Bei mir funktioniert sendmail einwandfrei auf dem RasPi.
Woran bist du den gescheitert? (vielleicht kann ich ja auch mal helfen ^^ ).

@bugster_de

Zitattrifft das eigentlich auch auf AT zu?

Ein at wird über eine Uhrzeit getriggert und nicht über ein notify ;-)
Hat also mit at nichts zu tun.

Grüße
Titel: Aw: Alarmanlage nur über Fensterkontakte
Beitrag von: bugster_de am 27 August 2013, 19:03:08
ZitatHat also mit at nichts zu tun.

Was ich meinte war die Art und Weise, wie FHEM dafür sorgt, dass die Timer losfeuern.

Beispiel 1:
man hat einen at mit +00:00:02 und einen at +00:00:06
wird nun FHEM alle 2 Sekunden aktive und überprüft, ob irgendein at losgelaufen ist? Sprich der Basistakt (kleinster gemeinsamer Nenner) der beiden at ist 2 Sek und somit bei jedem mal wird der erste at losgetreten und bei jedem dritten mal der zweite at?

Beispiel 2:
at +00:00:11
at +00:00:17
hier ist der kleinste gemeinsame Nenner 1 Sek. Sprich FHEM schaut jede Sekunde nach ob was passiert ist. Aber nur bei jedem 11. mal geht at 1 los und bei jedem 17. mal at zwei. Das hat natürlich deutliche Rechenlast zur Folge, die man sich durch geschicktes Design der at sparen kann. Sprich wenn FHEM einfach in einer while(1) loop in der Basis läuft und dann die abgelaufene Zeit vergleicht, müsste man auf sowas achten

Oder greift FHEM auf darunter liegende Dienste des Betriebssystems zurück und lässt sich quasi extern triggern?
Dann wären wir ja bei einem echten Echtzeitsystem, bei dem man auf Overrun, Speichersharing etc. aufpassen muß. Und damit würden sich für mich auch so manche interessante Phänomene wie MISSING ACK bei Homematic erklären lassen (vermute ich mal).
Titel: Aw: Alarmanlage nur über Fensterkontakte
Beitrag von: betateilchen am 27 August 2013, 19:09:14
Der Timer wird immer auf eine absolute Uhrzeit gesetzt, egal wie Du es im at angibst. Nix mit gemeinsamem Nenner oder ähnlichem. Schau Dir einfach mal die Werte in einer at-Definition an. Da findest Du "next" im STATE, und Du siehst den Timestamp und die formatierte Anzeige für die nächste Ausführung. Diese Werte werden direkt bei der Definition bzw. bei einem Wiederholungs-at bei jeder Ausführung ermittelt.


(siehe Anhang / see attachement)
Titel: Aw: Alarmanlage nur über Fensterkontakte
Beitrag von: blitzcom am 28 August 2013, 12:07:07
Hmm,

hilft mir bei meinem Problem aber immer noch nicht weiter.
Zum Thema notifymyandroid.
Das ich da dann vermutlich ein Account brauche verstehe ich, aber wie versteht fhem was es mit dem befehl notifymyandroid anfangen soll?

Ich komm nicht wirklich voran.
Titel: Aw: Alarmanlage nur über Fensterkontakte
Beitrag von: PatrickB am 28 August 2013, 16:22:01
Hallo,

ich war auch schon dabei in Perl und notify was zu schreiben um meine (EIB) Fensterkontakte mit FHEM zu prüfen. Leider ist dann die SD Card des Raspi abgeraucht und alles war weg..

Meine Idee ist für die Fensterkontakte ein Array anzulegen. Wenn ein Notify kommt wird eine 1 oder 0 in das Array geschrieben und im Anschluss per Schleife auf Summe 0 geprüft. Sind alle Fenster zu ist die Summe = 0 ist eins offen >0

Leider bin ich noch nicht dazu gekommen aber vlt. kann jemand mit ein paar Perl zeilen weiterhelfen

Gruss Patrick
Titel: Aw: Alarmanlage nur über Fensterkontakte
Beitrag von: Matscher am 28 August 2013, 21:36:28
Hallo Patrick,
für den Fall gibt es das helper module structure (http://fhem.de/commandref.html#structure (//fhem.de/commandref.html#structure)), was genau das abbildet.

Gruß
Titel: Aw: Alarmanlage nur über Fensterkontakte
Beitrag von: bugster_de am 29 August 2013, 09:02:36
Zitat von: blitzcom schrieb am Mi, 28 August 2013 12:07Hmm,

hilft mir bei meinem Problem aber immer noch nicht weiter.
Zum Thema notifymyandroid.
Das ich da dann vermutlich ein Account brauche verstehe ich, aber wie versteht fhem was es mit dem befehl notifymyandroid anfangen soll?

Ich komm nicht wirklich voran.

Hi,

naja, wie sage ich es höflich? Ein bisschen Programmieren solltest Du schon können. Sprich da wirst Du Dich in Prgrammierung und Perl wohl oder übel einarbeiten müssen.

NMA:
da ich wie gesagt kein NMA habe, weiss ich nicht genau, wie das geht. Das solltest Du zuerst einrichten, um sicherzustellen, dass das geht. Wenn es dann von der FHEM Oberfläche aus funktioniert kannst Du in Perl mittels fhem( "der fhem Befehl hier" ); dann jeden belibigen FHEM Befehl absetzen, denn Du auch oben in FHEM eingeben kannst.

Titel: Aw: Alarmanlage nur über Fensterkontakte
Beitrag von: bugster_de am 29 August 2013, 09:06:53
Zitat von: betateilchen schrieb am Di, 27 August 2013 19:09Der Timer wird immer auf eine absolute Uhrzeit gesetzt, egal wie Du es im at angibst. Nix mit gemeinsamem Nenner oder ähnlichem. Schau Dir einfach mal die Werte in einer at-Definition an. Da findest Du "next" im STATE, und Du siehst den Timestamp und die formatierte Anzeige für die nächste Ausführung. Diese Werte werden direkt bei der Definition bzw. bei einem Wiederholungs-at bei jeder Ausführung ermittelt.


(siehe Anhang / see attachement)

Das ist schon klar. Wer triggert aber nun FHEM? Übergibt FHEM diese Werte an das darunter liegende OS? Unter Triggertime steht ja eine Zahl, die man mit localtime() in einen absoluten Zeitwert, wie er dann wieder unter State steht verwandeln kann.

Bin mir jetzt nicht mehr sicher, wie ich das verständlich ausdrücken kann :-)
FHEM reagiert ja auf verschieden Events. Sei es entweder einen Timer (at) oder z.B. auch empfangene Nachrichten von externer Hardware (z.B. ein Homematic Device schikct etwas und der HMLAN übergibt dies an FHEM.
Hat FHEM dann Interrupt handler, die aufgerufen werden oder hat fhem eine while(1) loop und pollt zyklisch um ggf. neue Werte abzuholen?
Titel: Aw: Alarmanlage nur über Fensterkontakte
Beitrag von: betateilchen am 29 August 2013, 10:08:06
ja so ähnlich, es gibt eine globale loop, die man im Zweifel für alles verantwortlich machen kann...

fhem führt intern einen Timer, der gespeicherte Aufgaben abarbeitet. Wenn Du ein at definierst, wird das in die Liste der abzuarbeitenden Aufgaben übernommen und zu gegebener Zeit ausgeführt.
Titel: Aw: Alarmanlage nur über Fensterkontakte
Beitrag von: bugster_de am 29 August 2013, 20:20:23
wir reden aneinander vorbei. Ich weiß jetzt aber auch nicht mehr genau, wie ich das noch besser beschreiben soll.
Wiki kann das besser als ich: http://en.wikipedia.org/wiki/Real-time_operating_system (//en.wikipedia.org/wiki/Real-time_operating_system)
Siehe dort unter Scheduling und Algorithms

Ob ein at nun um 19:30:00 oder 19:30:01 kommt ist vergleichsweise egal. Wenn aber ein Homematic Device eine Message sendet und FHEM diese in einer gegebenen Zeit verarbeiten muss, da sonst MISSING ACK kommt, dann ist das Timing nicht mehr ganz egal. Und dann haben wir ein Echtzeit System.
Titel: Aw: Alarmanlage nur über Fensterkontakte
Beitrag von: betateilchen am 29 August 2013, 21:09:29
Wir reden nicht aneinander vorbei. Du hast lediglich ein falsches Verständnis der Arbeitsweise von fhem und daran angeschlossenen Komponenten.

Beispiel:

Zitat von: bugster_de schrieb am Do, 29 August 2013 20:20Wenn aber ein Homematic Device eine Message sendet und FHEM diese in einer gegebenen Zeit verarbeiten muss, da sonst MISSING ACK kommt

Das ist nämlich nur die halbe Wahrheit. Ein angefordertes ACK kann nämlich auch direkt von der HM-Hardware (HMLAN oder HMUSB) kommen, ohne dass fhem damit überhaupt irgendetwas zu tun haben muss. Ich habe zum Beispiel die Buttons einer gepairten Homematic Fernbedienung direkt mit dem HM-USB-CFG gepeered (ja, gepeered!) und damit kommt das ACK und die grüne Lampe beim Knopfdrücken direkt von diesem Adapter und nicht von fhem. Damit habe ich sämtliche Timingprobleme eliminiert, die mich vorher wochenlang fast in den Wahnsinn getrieben hatten. Da hatte ich nämlich den Effekt, dass ich nach dem Drücken eines Fernbedienungsknopfes eine rote Rückmeldung bekommen habe, die Funktion von fhem aber trotzdem ausgeführt wurde.

Außerdem hast Du bisher immer nur von at und anderen fhem-internen Verarbeitungen gesprochen, nicht von Timingproblemen bei Homematic.
Titel: Aw: Alarmanlage nur über Fensterkontakte
Beitrag von: bugster_de am 29 August 2013, 22:58:06
Hi,

ok, das kann natürlich sein, dass ich die Basis da nicht verstanden habe (ich suche ja Aufklärung und Wissen).

Die Frage nach den Homematic Problemen werden parallel in einem anderen Fred erörtert. Ich versuchte den Zusammenhang hin zu bekommen.

Das heisst, wenn ein Rolladenaktor mit einer Fernbedienung gepeered ist, dann wird die ganze Kommunikation direkt im HMLAN abgewickelt und FHEM muss gar nichts tun?
Titel: Aw: Alarmanlage nur über Fensterkontakte
Beitrag von: andi.riese am 10 September 2013, 23:11:53
Der Einbrecher sucht sich eine Aussenlampe und verursacht erst mal einen Kurzschluss, sodass die Hauptsicherung rausfliegt und die Fritzbox nicht mehr arbeitet.
Dann steigt er beim Fenster rein...  
Titel: Aw: Alarmanlage nur über Fensterkontakte
Beitrag von: blitzcom am 11 September 2013, 06:25:51
Hallo Andi,

erstmal habe ich keine Außensteckdose und wenn ich eine hätte, könnte man die entsprechend bei Alarmanlage "an" verriegeln.
2. Würde dann die entsprechende Sicherung und nicht die Hauptsicherung fallen. Da es ein altes Haus ist, ist auch kein FI verbaut. Und zudem setzt das voraus, dass der Einbrecher sich die Zeit zum suchen nimmt und/oder vermutet, dass eine Alamanlage verbaut ist. Das ist aber nicht ersichtlich, d.h. die Fensterkontakte sind nicht einsehbar. Der Überraschungseffekt das dann bei Alarm intern eine Blitzleuchte angeht sollte den Einbrecher zumindest abschrecken.
Titel: Antw:Alarmanlage nur über Fensterkontakte
Beitrag von: Trebor5 am 15 Oktober 2013, 20:56:15
Hallo zusammen,

ich lese schon eine ganze Zeit mit.

Also ich habe mir bei Conrad einen Fingerprint gekauft (100€) damit öffne ich meine Tür und mit einem Taster denn ich daneben eingebaut habe und gedrückt halte kann ich die Alarmanlage ein/ausschalten. Der zustand wir mit einer grünnen und roten led aussen angezeigt.
Sprich der Fingerprint ( bei gedrückten taster ) schaltet ein Homematic Funkschalter. Aussensteckdosen habe ich auch aber mein Raspberry/Fritzbox läuft an einer USV die es schon für 100€ gibt ( die hält bei stromausfall schon mal 6-8 Stunden) da wechsel ich alle 3 Jahre mal die Batterie für 20€. Die ganzen sensoren sprich Fensterkontakte und Rauchmelder die ich noch zum Alarmmelden benutzen will funzen sowieso über Batterie also kein Problem.
NotifymyAndroid habe ich für ein paar Cent als vollversion.

Jetzt habe ich zum ein und ausschalten folgendes gemacht:

#################### EINSCHALTEN ########################
define act_on_SCHARF_on notify Finger_Print:open { fhem("set ANLAGE_STATUS warten ;; set Flurlicht on ;; define verzoegert_Flurlicht_ein at +00:00:11 set Flurlicht off ;; define verzoegert_scharf at +00:00:20 set ANLAGE_STATUS scharf ") }

somit kann ich am Flurlicht sehen das die Anlage auch eingeschaltet wurde.

######### AUSSCHALTEN #############
define act_on_SCHARF_off notify Finger_Print:closed { fhem("set Flurlicht on ;; set ANLAGE_STATUS unscharf ;; define verzoegert_Flurlicht_aus at +00:00:11 set Flurlicht off ") }

somit kann ich am Flurlicht sehen das die Anlage auch ausgeschaltet wurde.

Somit geht der Alarm los:
define act_on_ALARM_on notify Haustuer:open { if (Value("ANLAGE_STATUS") eq "scharf") {{NMA_send("ALARM","ALARM WURDE AUSGELÖST!",2,"Robert")} {fhem("set Flurlicht on ;; define verzoegert_Flurlicht_ALARM at +00:02:00 set Flurlicht off ")}}}

FRAGE 1:
Wie kann  ich hier noch alle fenster bei zustand Scharf der Alarmanlage einbauen ?

FRAGE 2 :
Wo ist hier der Fehler bei zustand der Alarmanlage "warten" und ein fenster ist gekippt oder noch offen will ich auch eine Meldung auf dem Handy bekommen ?

Das ist der Code:
define act_on_FENSTER1_on notify FENSTER.*:open { if (Value("ANLAGE_STATUS") eq "warten") {NMA_send("Fenster noch offen","FENSTER NOCH OFFEN! Alarmanlage ausschalten und Fenster kontrolieren",2,"Robert")}}

define act_on_FENSTER2_on notify FENSTER.*:tilted { if (Value("ANLAGE_STATUS") eq "warten") {NMA_send("Fenster noch offen","FENSTER NOCH OFFEN! Alarmanlage ausschalten und Fenster kontrolieren",2,"Robert")}}

WER KANN MAL EINEN TIPP GEBEN  ?

Titel: Antw:Alarmanlage nur über Fensterkontakte
Beitrag von: C. Zimmermann am 27 Oktober 2013, 09:39:30
Ich hänge mich mal hier dran, da ein Teil der Diskussion in eine ähnliche Richtung geht.
Ausgangslage: AndroidTablet für Sprachausgabe, Homematic Schließerkontakt über Schlüsselbrett (-> für Away Status) und massig Tür-Fenster Kontakte.

Bei Verlassen der Wohnung wird der Schlüssel mitgenommen und folgendes Skript ausgelöst:
define keyChristophAway notify SchluesselChristoph:open {
my $Inhalt = "";;
my $Verabschiedung = "Auf wiedersehen Chrisdtof.";;
my $statusFensterBad=(ReadingsVal("FensterBad","state","unkown"));;
my $statusFensterBuero=(ReadingsVal("FensterBuero","state","unkown"));;
my $statusFensterGaesteWC=(ReadingsVal("FensterGaesteWC","state","unkown"));;
my $statusFensterKueche_links=(ReadingsVal("FensterKueche_links","state","unkown"));;
my $statusFensterKueche_rechts=(ReadingsVal("FensterKueche_rechts","state","unkown"));;
my $statusFensterSchlafzimmer=(ReadingsVal("FensterSchlafzimmer","state","unkown"));;
my $statusFensterWohnzimmer_links=(ReadingsVal("FensterWohnzimmer_links","state","unkown"));;
my $statusFensterWohnzimmer_rechts=(ReadingsVal("FensterWohnzimmer_rechts","state","unkown"));;
if ($statusFensterBad eq "opened"){
$Inhalt = $Inhalt . "Bad "};;
if ($statusFensterBuero eq "opened"){
$Inhalt = $Inhalt . "Büro "};;
if ($statusFensterGaesteWC eq "opened"){
$Inhalt = $Inhalt . "Gäste WeeCee "};;
if ($statusFensterKueche_links eq "opened"){
$Inhalt = $Inhalt . "Küche "};;
if ($statusFensterKueche_rechts eq "opened"){
$Inhalt = $Inhalt . "Küche "};;
if ($statusFensterSchlafzimmer eq "opened"){
$Inhalt = $Inhalt . "Schlafzimmer "};;
if ($statusFensterWohnzimmer_links eq "opened"){
$Inhalt = $Inhalt . "Wohnzimmer "};;
if ($statusFensterWohnzimmer_rechts eq "opened"){
$Inhalt = $Inhalt . "Wohnzimmer "};;
if ($Inhalt eq ""){
fhem "set androidTablet ttsSay $Verabschiedung";;}
else{
fhem "set androidTablet ttsSay $Verabschiedung . Es sind noch folgende Fenster offen $Inhalt"}
}


Im Prinzip geh ich alle Fensterkontakte durch, frag deren Status ab und hau, füge wenn ein Fenster offen ist den String zu $Inhalt dazu und haue dann, je nach $Inhalt die entsprechende Verabschiedung raus. Gibt es hier nun die Möglichkeit den Code übersichtlicher bzw. in irgendeiner Form einfacher zu gestalten und keine dämlichen ifs die ganze Zeit zu verwenden? Geschweige denn ein Art "structure" mit Readings?

Eine Idee hab ich zumindest: Machbar wäre natürlich nen SuperDummy, der immer den Status aller Fenster als State hat, d.h. die Fensterkontakte pushen einzeln ihren Namen bei Öffnung rein und löschen ihn wieder sobald sie geschlossen sind. Den könnte man dann auch für die Alarmanlage nutzen und hätte dann auch gleich die geöffneten Fenster.
Titel: Antw:Alarmanlage nur über Fensterkontakte
Beitrag von: Ralph am 28 Oktober 2013, 14:23:34
So vielleicht:
http://www.fhemwiki.de/wiki/FHTTK:_Benachrichtigung_bei_offenem_Fenster
Titel: Antw:Alarmanlage nur über Fensterkontakte
Beitrag von: Elektrolurch am 28 Oktober 2013, 16:13:11
Hallo,

mit der Scharfschaltung über PRESENCE -> kann ich auch nur von abraten. Nicht alle Handys sind rund um die Uhr im Netzwerk eingebucht.
Taster an der Tür -> schön und gut. Ich habe ein 8-Kanal Sendemodul FS20 verbaut und da muss man einen Code für das desaktivieren eingeben.
Außerdem hat meine Alarmanlage mehrere Schaltzustände: aus, aktivieren, scharrf, d deaktivieren.
Während "aktivieren" läuft, kann man das Haus verlassen oder die Alarmanlage oder Eingabe des Sicherheitscodes wieder deaktvieren. Während der Deaktivierung kann man sie nicht wieder scharf - schalten (1 Min).
Bei den Fensterkontakten musst Du mal untersuchen, was die wann senden. Die von FHT senden nämlich sowohl "closed", als auch "open", so alle 2 Minuten. Und Du brauchst ja nur das Event "open". Wenn das bei offenem Fenster wiederholt kommt, muss Du das Attribut event-on-change setzen, ansonsten wierd Dein notify ständig getriggert.
Ich setze zusätzlich noch Bewegungsmelder ein, die auch das Treppenhauslicht während "dunkel" einschalten.
Und eigentlich ist es besser, einen potentiellen Einbrecher schon bei der Annäherung ans Haus in die Flucht zu schlagen, d.h. draussen Bewegungsmelder und drinnen Hund bellen lassen oder Rolläden fahren....

Mit readingsGroup kann man dann alle Kontakte ordentlich sortiert mit Status und Öffnungszeiten darstellen lassen und wenn man eine Fritzbox hat, kommt man über VPN auf die fhem-Seite und hat alles auf einen Blick.

Elektrolurch

Elektrolurch