|
|
(41 dazwischenliegende Versionen von 12 Benutzern werden nicht angezeigt) |
Zeile 1: |
Zeile 1: |
| Viele Benutzer führen bereits eine eigene '''Anwesenheitserkennung''' durch. Diese basiert in den meisten Fällen auf Ping Checks oder bei [[AVM Fritz!Box|FritzBoxen]] auf dem Befehl ''ctlmgr_ctl''. Diese Lösungen können aber je nach Aufbau und Funktion FHEM massiv beeinträchtigen. Aufgrund des Aufbaus vom FHEM kann dieses dadurch für mehrere Sekunden zum völligen Stillstand gebracht werden.
| |
|
| |
| In FHEM gibt es mittlerweile mehrere Module, die eine zuverlässige Anwesenheitserkennung bieten, ohne dabei FHEM bei der Ausführung zu beeinträchtigen.
| |
|
| |
| Eine erweiterte Funktion der Anwesenheitserkennung ist die Standortverfolgung, die sich nicht nur auf ein oder sehr wenige mit (eigenem) WLAN versorgte Gebiete beschränkt.
| |
|
| |
| == Vorüberlegungen == | | == Vorüberlegungen == |
| Generell gibt es mehrere Ansätze um Anwesenheitserkennung mit Handys/Smartphones durchzuführen. | | Generell gibt es mehrere Ansätze um Anwesenheitserkennung mit Handys/Smartphones durchzuführen. |
Zeile 15: |
Zeile 9: |
|
| |
|
| Dabei gilt bei der Auswahl der Art darauf zu achten wie sich das jeweilige Device verhält. Aufgrund der Vielfältigkeit kann man hier keine allgemeine Vorgehensweise empfehlen. Als einfacher Start (zumindest für Nicht-Apfel Telefone) eignet sich die Ping-Überprüfung und die FritzBox-Abfrage sehr gut. | | Dabei gilt bei der Auswahl der Art darauf zu achten wie sich das jeweilige Device verhält. Aufgrund der Vielfältigkeit kann man hier keine allgemeine Vorgehensweise empfehlen. Als einfacher Start (zumindest für Nicht-Apfel Telefone) eignet sich die Ping-Überprüfung und die FritzBox-Abfrage sehr gut. |
| | |
| | {{Randnotiz|RNText=Eine mögliche Lösung für diesen Effekt, ist die Verwendung von [[Blocking Call]] in eigen entwickelten Anwesenheitserkennung}}Viele Benutzer führen bereits eine '''eigen''' entwickelte Anwesenheitserkennung durch. Diese basiert in den meisten Fällen auf Ping Checks oder bei [[AVM Fritz!Box|FritzBoxen]] auf dem Befehl ''ctlmgr_ctl''. Diese Lösungen können aber je nach Aufbau und Funktion FHEM massiv beeinträchtigen. Aufgrund des Aufbaus vom FHEM kann dieses dadurch für mehrere Sekunden zum völligen Stillstand gebracht werden. |
| | |
| | Da es in FHEM aber mittlerweile '''mehrere''' Module gibt, die eine zuverlässige '''Anwesenheitserkennung''' bieten, ohne dabei FHEM bei der Ausführung zu beeinträchtigen, empfiehlt sich deren Einsatz. |
| | |
| | Eine erweiterte Funktion der Anwesenheitserkennung ist die Standortverfolgung, die sich nicht nur auf ein oder sehr wenige mit (eigenem) WLAN versorgte Gebiete beschränkt. |
|
| |
|
| === Randbedingungen === | | === Randbedingungen === |
Zeile 29: |
Zeile 29: |
| Als Alternative, unabhängig vom WLAN und der Erkennung, ob ein Gerät dort eingebucht ist oder nicht, bzw. unabhängig von Bluetooth kann zumindest bei einem iPhone die seit iOS 7 nochmals stark verbesserte Geo-Lokation (Geofencing) genutzt werden. Die iPhone Apps [http://geofency.com/ Geofency] oder [http://geofancy.com/ Geofancy] werden über das FHEM-Modul GEOFANCY angebunden und übertragen ihren Status immer dann, wenn ein definierter Standort betreten oder verlassen wird. Gekoppelt mit entsprechenden Notify und/oder Watchdog Kommandos ist so ebenfalls eine sehr zuverlässige Anwesenheitserkennung möglich (und das nicht nur für das eigene Zuhause). | | Als Alternative, unabhängig vom WLAN und der Erkennung, ob ein Gerät dort eingebucht ist oder nicht, bzw. unabhängig von Bluetooth kann zumindest bei einem iPhone die seit iOS 7 nochmals stark verbesserte Geo-Lokation (Geofencing) genutzt werden. Die iPhone Apps [http://geofency.com/ Geofency] oder [http://geofancy.com/ Geofancy] werden über das FHEM-Modul GEOFANCY angebunden und übertragen ihren Status immer dann, wenn ein definierter Standort betreten oder verlassen wird. Gekoppelt mit entsprechenden Notify und/oder Watchdog Kommandos ist so ebenfalls eine sehr zuverlässige Anwesenheitserkennung möglich (und das nicht nur für das eigene Zuhause). |
|
| |
|
| == Das PRESENCE Modul == | | == PRESENCE-Modul == |
| Das [[PRESENCE]] Modul bietet für die Anwesenheitserkennung mehrere Varianten an. Diese sind aktuell folgende: | | Das [[PRESENCE]] Modul bietet für die Anwesenheitserkennung mehrere Varianten an. Diese sind aktuell folgende: |
|
| |
|
| * '''lan-ping''' - Das Überwachen via PING Checks, die durch den FHEM Server versandt werden. | | * '''lan-ping''' - Das Überwachen via PING Checks, die durch den FHEM Server versandt werden. |
| * '''fritzbox''' - Das Überwachen von Geräten auf einer FritzBox via ctlmgr_ctl (Nur auf einer FritzBox möglich) | | * '''fritzbox''' - Das Überwachen von Geräten auf einer FritzBox via ctlmgr_ctl (Nur auf einer FritzBox möglich) '''Abgekündigt''' |
| * '''local-bluetooth''' - Das Überwachen via Bluetooth Checks, die vom FHEM Server direkt durchgeführt werden (angeschlossener Bluetooth-Stick und die Software bluez voraussgesetzt) | | * ''' Bluetooth''' |
| * '''lan-bluetooth''' - Das Überwachen von Bluetoothgeräte, über Netzwerk. Auf einer oder mehreren Maschinen im Netzwerk (z.B. [[:Kategorie:Raspberry Pi|Raspberry Pi]]) läuft ein Presence-Daemon, der nach Bluetooth-Geräten sucht. Um mehrere Presence-Daemon mit FHEM zu verbinden, gibt es den Collector-Daemon, der sich zu allen Presence-Damons im Netzwerk verbindet und das Ergebnis von allen zusammenfasst.
| | :- '''local-bluetooth''' - Das Überwachen via Bluetooth Checks, die vom FHEM Server direkt durchgeführt werden (angeschlossener Bluetooth-Stick und die Software bluez voraussgesetzt) |
| | :- '''lan-bluetooth''' - Das Überwachen von Bluetoothgeräten, über Netzwerk. Auf einer oder mehreren Maschinen im Netzwerk (z.B. [[:Kategorie:Raspberry Pi|Raspberry Pi]]) läuft ein Presence-Daemon, der nach Bluetooth-Geräten sucht. Um mehrere Presence-Daemon mit FHEM zu verbinden, gibt es den Collector-Daemon, der sich zu allen Presence-Damons im Netzwerk verbindet und das Ergebnis von allen zusammenfasst. |
| * '''function''' - Das Überwachen mithilfe einer selbst geschrieben Perl-Funktion, die den Anwesenheitsstatus zurückgibt (0 oder 1) | | * '''function''' - Das Überwachen mithilfe einer selbst geschrieben Perl-Funktion, die den Anwesenheitsstatus zurückgibt (0 oder 1) |
| * '''shell-script''' - Das Überwachen mithilfe eines selbst geschriebenen Shell-Programms/Skript, das eine 0 oder 1 ausgibt, um den Anwesenheitsstatus mitzuteilen. | | * '''shell-script''' - Das Überwachen mithilfe eines selbst geschriebenen Shell-Programms/Skript, das eine 0 oder 1 ausgibt, um den Anwesenheitsstatus mitzuteilen. |
|
| |
|
| === Ping-Überwachung von Geräten im WLAN/LAN ===
| | Für eine bessere Übersicht befinden sich die '''Details''' zur '''Einrichtung''' und '''Benutzung''' von PRESENCE auf folgende '''Seite''' [[PRESENCE|PRESENCE]] |
| {{Randnotiz|RNText=Um diese Methode auf einer FritzBox nutzen zu können, muss FHEM mit root-Rechten laufen. Dies ist standardmäßig nicht der Fall. Bitte dazu den Wiki Artikel [[FritzBox: fhem unter root starten]] beachten.}}
| |
| Um ein Gerät via Ping zu überwachen, muss folgende Definition durchgeführt werden:
| |
| :<code>define Handy PRESENCE lan-ping 192.168.0.30</code>
| |
| | |
| Dadurch wird die IP-Addresse 192.168.0.30 alle 30 Sekunden geprüft, ob sie erreichbar ist. Wenn sie erreichbar ist, ist der Status "present" (anwesend), ansonsten "absent" (abwesend).
| |
| | |
| Der Timeout kann verändert werden, indem ein Wert (in Sekunden) an das Define anhängt wird:
| |
| :<code>define Handy PRESENCE lan-ping 192.168.0.30 '''60'''</code>
| |
| | |
| Nun würde das Handy alle 60 Sekunden geprüft werden.
| |
| | |
| Nur wenn bei einem iPhone/iPad die Funktion "über WLAN synchronisieren" aktiviert ist, ist es auch im Standby zuverlässig pingbar. Standardmäßig deaktivieren Apple-Geräte ihr WLAN im Standby-Betrieb um die Akkulaufzeit zu verlängern.
| |
| | |
| Sollte die Fehlermeldung
| |
| :<code> PRESENCE (Handy) - ping command returned with output: ping: icmp open socket: Operation not permitted </code>
| |
| im Log auftauchen und lan-ping dadurch nicht funktionieren, liegt ein Berechtigungsproblem vor. Kein Grund den User fhem zu root zu machen!
| |
| So sollten die Berechtigungen aussehen
| |
| :<code>sudo ls -la /bin/ping</code>
| |
| unter Jessie
| |
| :<code>-rwxr-xr-x 1 root root 38844 Feb 12 2014 /bin/ping</code>
| |
| unter Wheezy
| |
| :<code>-rwsr-xr-x 1 root root 33220 Mär 30 2012 /bin/ping</code>
| |
| Sollte es trotzdem unter Jessie nicht funktionieren kann man auch dort die Berechtigung analog wheezy setzen:
| |
| :<code>sudo chmod u+s /bin/ping</code>
| |
| | |
| === FritzBox: direktes Abfragen der Aktivität via ctlmgr_ctl ===
| |
| {{Randnotiz|RNText=Um diese Methode auf einer FritzBox nutzen zu können, muss FHEM mit root-Rechten laufen. Dies ist standardmäßig nicht der Fall. Bitte dazu den Wiki Artikel [[FritzBox: fhem unter root starten]] beachten.}}
| |
| Eine sehr häufige und auch zuverlässige Methode ist auf einer FritzBox die Abfrage mittels ctlmgr_ctl Befehl. Über diesen lassen sich alle Geräte abfragen ob sie aktiv sind. Ist ein Gerät aktiv, so gilt es als anwesend.
| |
| | |
| Dieser Modus kann allerdings nur in FHEM Installationen direkt auf einer FritzBox verwendet werden. Des weiteren muss FHEM unter dem User root laufen. Um ein Gerät zu überwachen, wird lediglich der Gerätename benötigt, so wie er unter dem Menüpunkt "Heimnetz" auftaucht.
| |
| | |
| Die erforderliche Definition:
| |
| :<code>define Handy PRESENCE fritzbox iPhone-4S</code>
| |
| | |
| === Bluetooth-Überwachung von Geräten durch den FHEM Server ===
| |
| [[Datei:Bluetooth-Adresse-iPhone.png|thumb|Bluetooth-Adresse eines iPhones]]
| |
| Jenach Aufstellungsort des FHEM Servers kann es sinnvoll sein, eine Bluetooth-Überwachung direkt durch den FHEM Server durchzuführen. Hierbei gilt allerdings zu beachten, dass Bluetooth nicht für große Reichweiten gedacht ist und in den meisten Fällen keine Wände überwinden kann. Das heisst, dass in den meisten Fällen damit nur ein Raum überwacht werden kann.
| |
| | |
| Je nach Einsatzzweck kann das auch so gewollt sein. Bluetooth USB Sticks, die bereits Bluetooth 4.0 unterstützen, können höhere Reichweiten über Zimmerwände hinaus erreichen. Vorausgesetzt, das Mobilgerät unterstützt Bluetooth 4.0.
| |
| | |
| Um eine Überwachung per Bluetooth durchführen zu können, benötigt man die Bluetooth-Adresse eines Gerätes. Diese ähnelt vom Aufbau einer MAC-Adresse. Generell wird die Adresse in den Telefon-Informationen bei Smartphones angezeigt.
| |
| | |
| Um eine Anwesenheitserkennung via Bluetooth durchzuführen, wird folgende Definition in der [[Konfiguration]] benötigt:
| |
| :<code>define Handy PRESENCE local-bluetooth XX:XX:XX:XX:XX:XX</code>
| |
| | |
| === Bluetooth-Überwachung von Geräten durch verteilte Agenten in der Wohnung (presenced/collectord) ===
| |
| [[Datei:Raspberry-Pi-mit-WLAN-und-Bluetooth-Stick.jpg|thumb|left|Raspberry Pi mit Bluetooth- und WLAN-USB-Stick]]
| |
| Um eine zuverlässige und flächendeckende Bluetooth-Anwesenheitserkennung durchzuführen, ist es unerlässlich, mehrere Bluetooth-Empfänger zu verwenden, die auf mehrere oder alle Räume verteilt sind.
| |
| | |
| Hierfür bietet sich zum Beispiel ein [[Raspberry Pi]] mit einem Mini-Bluetooth-USB-Stick und evtl. einem WLAN-USB-Stick an. Jeder Raum wird mit solch einem Raspberry ausgestattet und ist im WLAN Netz verfügbar.
| |
| | |
| Dieses Netz aus Raspberrys wird mit dem presenced (Download-Link ist in der [http://fhem.de/commandref_DE.html#PRESENCE Commandref] zum Modul enthalten) ausgestattet. Es stehen bereits entsprechende Pakete für den Raspberry zur Verfügung.
| |
| | |
| Beide Programme (presenced/collectord) sind Perl-Skripte, die als Daemon im Hintergrund laufen und auf Anfragen via Netzwerk warten. Es wird lediglich eine vollständige Perl-Grundinstallation mit Standardmodulen benötigt. Nach Installation der *.deb Pakete sollten diese noch angewiesen werden, automatisch beim Rechner-Neustart gestartet zu werden:
| |
| | |
| <pre>
| |
| sudo update-rc.d presenced defaults
| |
| sudo update-rc.d collectord defaults
| |
| </pre>
| |
| | |
| Eine detaillierte Benutzung von presenced ist in der [http://fhem.de/commandref_DE.html#PRESENCE Commandref] Beschreibung zum PRESENCE Modul enthalten.
| |
| | |
| ==== Jeden Raum einzeln ansprechen (presenced) ====
| |
| Nun kann zuallererst jeder Raum einzeln angesprochen werden. Dabei ist zu beachten, dass pro Definition in der Konfiguration nur ein Gerät in einem Raum spezifisch überwacht werden kann.
| |
| | |
| Eine Definition sieht dabei folgendermaßen aus:
| |
| :<code>define Handy_Wohnzimmer PRESENCE lan-bluetooth XX:XX:XX:XX:XX:XX 192.168.0.10:5111</code>
| |
| | |
| Damit wird nun das Gerät nur im Wohnzimmer (Raspberry mit IP 192.168.0.10) überwacht.
| |
| | |
| ==== Alle Räume gemeinsam ansprechen (collectord) ====
| |
| Um jedoch alle Räume gemeinsam zu verwenden, gibt es den Collector-Daemon. Dieser kennt alle presenced-Installationen im Netzwerk und führt eine koordinierte Suche nach den gewünschten Geräten durch. Sobald ein Gerät in einem Raum erkannt wurde, meldet der collectord den Status einschließlich der Angabe des Raumes, in dem das Gerät erkannt wurde.
| |
| | |
| Um alle Räume zu kennen, müssen diese mit einem Config-File dem collectord mitgeteilt werden. Dieses sieht folgendermaßen aus:
| |
| | |
| <pre>
| |
| [Schlafzimmer] # Name des Raumes (wird in FHEM als Reading angezeigt)
| |
| address=192.168.179.31 # IP-Adresse oder Hostname des presenced
| |
| port=5111 # TCP Port, der verwendet werden soll (standardmäßig Port 5111)
| |
| presence_timeout=120 # Prüfinterval, das verwendet werden soll, wenn ein Gerät anwesend ist
| |
| absence_timeout=20 # Prüfinterval, das verwendet werden soll, wenn ein Gerät abwesend ist
| |
| | |
| [Wohnzimmer]
| |
| address=192.168.179.34
| |
| port=5111
| |
| presence_timeout=180
| |
| absence_timeout=20
| |
| </pre>
| |
| | |
| Standardmäßig ist dieses Config-File unter /etc/collectord.conf zu finden. Mit dieser Konfiguration kann der Collectord gestartet werden. Es empfiehlt sich diesen mit auf dem FHEM Server zu betreiben. Die erforderliche Definition in der FHEM-Konfiguration:
| |
| :<code>define Handy PRESENCE lan-bluetooth XX:XX:XX:XX:XX:XX 127.0.0.1:5222</code>
| |
|
| |
|
| Sobald das Handy irgendwo in der Wohnung erkannt wurde, meldet der Collectord dies sofort an FHEM und teilt den Raum mit.
| | Im Forum [https://forum.fhem.de/index.php/topic,76342.0.html] findet man eine Lösung zum Problem des "deep standby" Modus von den neuen iPhones und Android Geräte. Mittels hping3 werden Packete an das Gerät geschickt, damit die "wach" bleiben. Dann werden die Mac-Adressen via 'arp' gelesen. |
|
| |
|
| Eine detaillierte Benutzung von collectord findet man in der [http://fhem.de/commandref.html#PRESENCE Commandref zum PRESENCE Modul].
| | == GEOFANCY-Modul == |
| | |
| === Überwachung von Geräten mit Perl-Code === | |
| Es ist möglich zum Überwachen von Geräten eine eigene Perl-Funktion zu verwenden die dann vom PRESENCE Modul im Hintergrund aufgerufen wird.
| |
| | |
| define <name> PRESENCE function {...} [ <check-interval> [ <present-check-interval> ] ]
| |
| | |
| Sobald die Funktion den Rückgabewert 1 hat, ist das Gerät anwesend, bei 0 abwesend.
| |
| | |
| ==== Beispiel DHCP Überwachung auf Airport Basestation ====
| |
| Die hier vorgestellte Überwachung der DHCP Lease auf Airport Basestations per SNMP ist absolut robust gegenüber dem Ruhezustand von iOS und setzt keine weitere Konfiguration auf dem iPhone voraus. Das Abmelden beim Verlassen des Empfangsbereiches der Basestation geschieht mit etwa 5-10 Minuten Verzögerung und ist somit auch vor kurzzeitigen Empfangsproblemen sicher. Das nebenstehende Bild (???) verdeutlicht noch mal die Unterschiede zwischen einer IP-Basierten Ping-Überwachung und der Überwachung auf Ebene der Basestation oder FritzBox.
| |
| | |
| Bevor der folgende Code verwendet werden kann ist das Perl Modul Net:SNMP zu installieren (z. B. mit: <code>cpan install use Net::SNMP</code>).
| |
| | |
| Zuerst ist folgender Code in 99_myUtils.pm einzufügen, sollte diese noch nicht vorhanden sein muss diese aus dem Template welches unter Edit Files zu finden ist erzeugt werden.
| |
| '''Achtung, das ist nicht der komplette Inhalt der 99_myUtils!''' Das ist nur die einzelne Routine
| |
| | |
| <pre>
| |
| use Net::SNMP;
| |
| sub
| |
| snmpCheck($$)
| |
| {
| |
| my ($airport,$client)= @_;
| |
| | |
| my $community = "public";
| |
| my $host = $airport;
| |
| my $oid = ".1.3.6.1.2.1.3.1.1.2";
| |
| #my $oid = ".1.3.6.1.2.1.3.1.1.2.25.1.10.0.1";
| |
| | |
| my ( $session, $error ) = Net::SNMP->session(
| |
| -hostname => $host,
| |
| -community => $community,
| |
| -port => 161,
| |
| -version => 1
| |
| );
| |
| | |
| if( !defined($session) ) {
| |
| return 0;
| |
| return "Can't connect to host $host.";
| |
| }
| |
| | |
| my @snmpoids = ();
| |
| | |
| my $response = $session->get_next_request($oid);
| |
| my @nextid = keys %$response;
| |
| while ( @nextid && $nextid[0] && $nextid[0] =~ m/^$oid/ ) {
| |
| push( @snmpoids, $nextid[0] );
| |
| | |
| $response = $session->get_next_request( $nextid[0] );
| |
| @nextid = keys %$response;
| |
| }
| |
| | |
| if( !defined($response = $session->get_request( @snmpoids ) ) ) {
| |
| return 0;
| |
| }
| |
| | |
| foreach my $value (values %$response) {
| |
| return 1 if( $value eq $client )
| |
| }
| |
| | |
| return 0;
| |
| }
| |
| </pre>
| |
| | |
| Danach lässt sich das Mobilgerät so überwachen:
| |
| :<code>define iPhone PRESENCE function {snmpCheck("10.0.1.1","0x44d77429f35c")} 30 30</code>
| |
| | |
| wobei 10.0.1.1 durch die IP-Adresse der Basestation und 0x44d77429f35c durch die MAC Adresse des Geräts als HEX-Zahl ersetzt werden muss.
| |
| | |
| ==== Beispiel Anwesenheitserkennung mittels UniFi Controller ====
| |
| | |
| Die Anwesenheitserkennung bei Geräten in Verbindung mit UniFi-Produkten funktioniert selbst dann, wenn sich die Geräte im PowerSave-Modus befinden.
| |
| | |
| Beachte: Die Geräte werden erst ungefähr nach 5 Minuten, nachdem das Gerät das WLAN verlassen hat als disconnected angezeigt.
| |
| | |
| <code>define <NAME> PRESENCE function {ReadingsVal("<UniFi>","<NamedDevice>","") eq "connected" ? 1:0}</code>
| |
| | |
| === Eventbasierte Anwesenheitserkennung am Beispiel mittels UniFi Controller ===
| |
| Der Vorteil gegenüber der Function-Variante ist, dass diese Variante ohne Blocking.pm-Overhead direkt ausgeführt werden kann und in "Echtzeit" abläuft (siehe {{Link2Forum|Topic=40287|Message=562823}}).
| |
| | |
| <code>define <NAME> PRESENCE event UniFi:NamedDevice:.disconnected UniFi:NamedDevice:.connected</code>
| |
| | |
| == Das GEOFANCY Modul ==
| |
| Das Modul ermöglicht über einen sogenannten Webhook Mechanismus (umgangssprachlich oft auch als "Push" benannt) das aktive Melden des aktuellen Standortes. Die iPhone Apps [http://geofency.com/ Geofency] und [http://geofancy.com/ Geofancy] können dann aktiv und quasi in dem Moment, wo man den Wohnbereich betritt oder verlässt, benachrichtigen. Android Nutzern können [https://play.google.com/store/apps/details?id=de.egi.geofence.geozone&hl=de EgiGeoZone Geofence] nutzen. Das geht nochmals um einiges schneller, als die Erkennung im WLAN, bei der die Anwesenheit nur in (engen) Zyklen aktiv geprüft werden muss. Gleichzeitig werden Ressourcen in FHEM geschont. Die aktuelle Implementierung im iPhone 5S mit dediziert für das Tracking zuständigem Chip ist so gut, dass der Akku ebenfalls sehr geschont wird. | | Das Modul ermöglicht über einen sogenannten Webhook Mechanismus (umgangssprachlich oft auch als "Push" benannt) das aktive Melden des aktuellen Standortes. Die iPhone Apps [http://geofency.com/ Geofency] und [http://geofancy.com/ Geofancy] können dann aktiv und quasi in dem Moment, wo man den Wohnbereich betritt oder verlässt, benachrichtigen. Android Nutzern können [https://play.google.com/store/apps/details?id=de.egi.geofence.geozone&hl=de EgiGeoZone Geofence] nutzen. Das geht nochmals um einiges schneller, als die Erkennung im WLAN, bei der die Anwesenheit nur in (engen) Zyklen aktiv geprüft werden muss. Gleichzeitig werden Ressourcen in FHEM geschont. Die aktuelle Implementierung im iPhone 5S mit dediziert für das Tracking zuständigem Chip ist so gut, dass der Akku ebenfalls sehr geschont wird. |
|
| |
|
| === Modul in FHEM einrichten ===
| | Für eine bessere Übersicht befinden sich die '''Details''' zur '''Einrichtung''' und '''Benutzung''' von GEOFANCY auf folgende '''Seite''' [[GEOFANCY|GEOFANCY]] |
| Das Modul ist mit einer einfachen Definition sofort betriebsbereit:
| |
| :<code>define geofancy GEOFANCY geo</code>
| |
|
| |
|
| Damit nimmt FHEM unter <nowiki>http://192.168.178.1:8083/fhem/geo</nowiki> entsprechende Meldungen des iPhones entgegen. Damit das nicht nur über das lokale WLAN funktioniert, bedarf es allerdings noch einiger zusätzlicher Maßnahmen. FHEM muss vom Internet erreichbar gemacht werden, dabei sollte unbedingt an die Absicherung des Zugriffs gedacht werden.
| | == livetracking-Modul == |
| | Das [[livetracking]] Modul baut auf der App Owntracking auf. Wird sie installiert, so kann man via MQTT oder HTTP an FHEM Angaben über den eigenen Standort, die Batteriestärke und die Entfernung zum Heimatort senden. |
|
| |
|
| Zunächst einmal habe ich bei mir eine eigene FHEMWEB Instanz dafür angelegt:
| | Livetracking ist unter Linux (RPi) wie folgt zu installieren. Zuerst sind zwei Perl-Module zu holen |
| <pre>
| | sudo apt-get -y install libnet-oauth-perl |
| define WEBhook FHEMWEB 8088 global
| | sudo apt-get -y install libmath-round-perl |
| attr WEBhook column Alarms: Apartment: Living: Bedroom: Kitchen: Sonos: Residents: Weather: Bathroom: Logs: Statistics: DashboardRoom: System: hidden: all:
| | Das Modul selbst wird ohne weitere Angaben durch |
| attr WEBhook hiddenroom input,detail,save,Unsorted,Everything,CUL_HM,FS20,Commandref,style,Edit files,Select style,Logfile,Floorplans,Remote doc,FileLogs,Apartment,Bathroom,Bedroom,Kitchen,Living,Residents,System,Weather,Event monitor,NEW
| | define <name> livetracking |
| attr WEBhook room hidden
| | in FHEM angelegt. Es erhält ein Attribut, das auf das owntracking-Gerät in FHEM verweist durch |
| attr WEBhook webname webhook
| | attr owntracksDevice <hier-owntracking-device-angeben> |
| </pre> | | Das owntracking-device selbst ist ein MQTT-Gerät, das in der App entsprechend anzulegen ist. Eine beispielhafte Installation (hinter einem VPN) sieht hier so aus |
| | | defmod <hier-owntracking-device-angeben> MQTT_DEVICE |
| Damit ist unter der URL <nowiki>http://192.168.178.1:8088/webhook/geo</nowiki> das GEOFANCY Modul erreichbar. Ich verstecke in dieser Ansicht noch alle Räume, die ich so habe. Wer die Raumnamen allerdings kennt, kann sie trotzdem aufrufen. Die Anzeige in den Räumen kann man mit dem Attribut column und entsprechend leeren Definitionen verstecken. Nun muss man explizit den Devicenamen kennen, um noch etwas über die Konfiguration in Erfahrung bringen zu können.
| | attr <hier-owntracking-device-angeben> IODev Mosquitto |
| Auch wenn das Security-by-Obscurity ist - ich fühle mich wohler damit.
| | attr <hier-owntracking-device-angeben> subscribeReading_OWNTRACKS owntracks/<nutzer-und-app-spezifische-angaben> |
| | |
| === Webhook weiter absichern ===
| |
| Mit Hilfe eines [http://fhem.de/commandref.html#allowed allowed]-Devices lässt sich die FHEMWEB Instanz noch weiter absichern indem nur die tatsächlich benötigten Kommandos erlaubt werden (in diesem Fall keine) und damit alle anderen nicht erlaubten (attr,define,get,set,...) automatisch nicht mehr zur Verfügung stehen:
| |
| <pre> | |
| define allowedWEBhook allowed
| |
| attr allowedWEBhook allowedCommands , | |
| attr allowedWEBhook allowedDevices , | |
| attr allowedWEBhook validFor WEBhook
| |
| </pre> | |
|
| |
|
| Außerdem ist dringend zu empfehlen, den Zugriff über TLS/SSL und HTTP Basic-Authentication weiter abzusichern. Läuft FHEM auf einem Raspberry Pi, dann empfehle ich dazu die Konfiguration eines ReverseProxy (vorzugsweise HAproxy, Pound oder Varnish, notfalls auch Nginx oder Apache); damit ist man am flexibelsten und kann auch alle FHEMWEB Instanzen direkt über einen einzigen Port (meist 443, der HTTPS Standard Port) zusammenfassen. Ich möchte hier allerdings beschreiben, wie weit man mit FHEM Bordmitteln kommt und nehme das Beispiel einer Installation auf einer Fritzbox.
| |
|
| |
| Wie TLS aktiviert wird, steht in der Commandref für [[FHEMWEB]]. Um die Kommandos auf der Fritzbox ausführen zu können, muss zuerst Telnet aktiviert werden (bitte Google benutzen). Anschließend wechselt man auf der Fritzbox ins Verzeichnis /var/media/ftp/fhem und kann dann den Hinweisen aus der [http://fhem.de/commandref.html#FHEMWEB Commandref] unter dem Punkt HTTPS folgen. Letztlich fehlt noch das entsprechende Attribut:
| |
|
| |
| <pre>
| |
| attr WEBhook HTTPS
| |
| </pre>
| |
|
| |
| Als nächstes aktivieren wir Benutzername+Passwort für den Zugriff. Die commandref für allowed gibt auch hier unter dem Punkt basicAuth entsprechende Hinweise. Wir fügen hier einfach mal einen Benutzer "webhook" mit dem Passwort "Geofancy" hinzu, das sieht dann so aus:
| |
|
| |
| <pre>
| |
| attr allowedWEBhook basicAuth { "$user:$password" eq "webhook:Geofancy" }
| |
| </pre>
| |
|
| |
| Weitere Infos zur Absicherung gibt auch [[FritzBox Webzugriff absichern]].
| |
|
| |
| Um zu testen, ob unsere Absicherung erfolgreich war, kann man die URL <nowiki>https://192.168.178.1:8088/webhook/geo</nowiki> aufrufen (wichtig ist, dass man jetzt https und nicht mehr http eingibt; ansonsten bekommt man keine Antwort). Eine Zertifikatswarnung kann getrost ignoriert werden, verschlüsselt wird trotzdem. Es sollte auch eine Passwort Abfrage kommen und die Eingabe der entsprechenden Daten sollte dann zu einer entsprechenden Meldung vom GEOFANCY Modul führen:
| |
|
| |
| <pre>
| |
| NOK No data received, see API information on http://wiki.geofancy.com
| |
| </pre>
| |
|
| |
| Das ist ok, schließlich sind wir keine App, sondern der Mensch, der nur mal eben prüfen will :-)
| |
|
| |
| === Zugriff vom Internet ermöglichen ===
| |
| Das ist je nach Fritzbox und Software Version unterschiedlich. Grundsätzlich gilt: Eine Weiterleitung des ports 8088 vom Internet auf das laufende FHEM auf Port 8088 intern ist von AVM so nicht vorgesehen.
| |
| Bei mir führte folgendes zum Erfolg:
| |
|
| |
| * Einloggen per Telnet auf der Fritzbox (ich habe FritzOS 6 installiert)
| |
| * Konfiguration editieren mittels "nvi /var/flash/ar7.cfg"
| |
| * Suchen nach richtiger Zeile durch Eingabe von "/internet_forwardrules" und Enter
| |
| * Hinzufügen einer weiteren Zeile (Vorsicht, die bestehende Zeile endet mit ; und das muss in , umgeändert werden, so dass das ; schließlich am Ende der Zeile steht.
| |
|
| |
| So sieht es bei mir vorher aus:
| |
| :<code>internet_forwardrules = "tcp 0.0.0.0:488 0.0.0.0:488 0";</code>
| |
| Hinterher:
| |
| :<code>internet_forwardrules = "tcp 0.0.0.0:488 0.0.0.0:488 0", "tcp 0.0.0.0:8088 0.0.0.0:8088 0";</code>
| |
|
| |
| Danach mittels ":x" abspeichern und sofort per "reboot" die Box neu starten, um diese Änderungen zu aktivieren. Das ist wichtig; ansonsten zeigt die Erfahrung, dass die Änderung nicht dauerhaft erhalten bleibt und die gerade gemachten Änderungen verloren gehen.
| |
|
| |
| Wer die Einstellungen zu "internet_forwardrules" bei sich nicht finden kann, hat womöglich eine andere Version als ich oder ein leicht anderes Gerät und bemüht am besten Google, was er tun kann, um das Gleiche zu erreichen. Möglicherweise tauchen die Einträge auch erst auf, wenn man mal über das Webinterface ein Forwarding eingerichtet hatte.
| |
|
| |
| Hat man einen DynDNS Dienst oder myFritz auf der Fritzbox aktiviert, so kann man jetzt auch von draußen auf den Webhook zugreifen. Das kann man prüfen, indem man das iPhone aus dem WLAN ausbucht und einmal die externe Adresse eingibt, also z.B. https://meindyndns.org:8088/webhook/geo.
| |
|
| |
| === Weitere Alternativen für den Zugriff aus dem Internet ===
| |
| Als Alternative zum Port Forwarding kann man sich auch per VPN in das lokale Netzwerk einwählen. iOS bietet dazu auch eine automatische Aktivierung des VPN (VPN on Demand), wie z.B. [http://forum.loxone.com/dede/netzwerk-firewall-and-security/8121-vpn-demand-ios-8-1-1-fritz-box-kleine-how.html hier] beschrieben wird.
| |
|
| |
| Auch eine Alternative ist, das Portforwarding nicht direkt an FHEM einzurichten, sondern an einem im Netzwerk laufenden Reverse-Proxy, der dann seinerseits die Anfragen an FHEM weiterleitet. Dies kann z.B. Apache, Nginx oder am besten HAproxy sein.
| |
| Letzterer ist dabei sehr flexibel, allerdings nicht unbedingt einfach zu konfigurieren. Ein paar Inspirationen diesbezüglich gibt es z.B. [https://github.com/Hoanoho/HSE/tree/develop/lib/cfg/any/stat/etc/haproxy hier] und [https://github.com/Hoanoho/HSE/tree/develop/lib/cfg/any/dyn/etc/haproxy hier]. Wer pfSense nutzt, findet [http://loredo.me/post/116633549315/geeking-out-with-haproxy-on-pfsense-the-ultimate diesen Artikel] womöglich auch interessant. Er zeigt auch, dass mit HAproxy noch weit mehr möglich ist.
| |
| Der Reverse-Proxy sollte dabei auch unbedingt der TLS Termination Point sein (TLS Offloading). Nicht nur spart man sich dann die Aktivierung von TLS in FHEM, sondern man hat auch mehr Einfluss darauf, wie TLS arbeitet (z.B. Deaktivierung von SSLv3, forcieren von TLSv1.2, nur als sicher eingestufte Cipher Suite... siehe auch Infos auf der [https://wiki.mozilla.org/Security/Server_Side_TLS Mozilla Website]).
| |
|
| |
| === Einrichten in der Geof[e|a]ncy.app ===
| |
| Hat das alles soweit geklappt, können endlich in der Geofency.app bzw. Geofancy.app am iPhone die gewünschten Bereiche definiert werden. Am Besten zuvor in den Global Settings die folgenden Einstellungen hinterlegen:
| |
|
| |
| * URL: https://meindyndns.org:8088/webhook/geo
| |
| * POST (oder GET, ist egal - das FHEM Modul kann beides)
| |
| * HTTP Basic Authentication: EIN (entsprechend Username und Password eintragen)
| |
|
| |
| Anfänglich ist es empfehlenswert noch "Notification on success" und "Notification on Failure" einzuschalten. Ersteres kann man ausmachen wenn man weiß, dass es soweit funktioniert. Über "Send Test-Request" kann man einmal einen Test schicken und erhält das Ergebnis entsprechend dargestellt. Es sollte sowas kommen wie
| |
| :<code>POST Success: test OK</code>. In Geofancy.app gibt es keine Rückmeldung über den Erfolg des Testrequests. In FHEM sollten sich durch den Testrequest jedoch die Readings sofort aktualisieren (Ggf. ist ein Reload der FHEMWEB-Seite nötig da zusätzliche Tabellenzeilen nicht via Longpoll ergänzt werden).
| |
|
| |
| Funktioniert das soweit, kann man eine neue Lokation als sein Zuhause anlegen. Es empfiehlt sich einen ID-Namen zu setzen; dieser ist dann in FHEM als Name für die Lokation sichtbar. Für die eigene Wohnung empfiehlt sich hier "home" (da dies auch direkt vom RESIDENTS Modul so verwendet werden kann). Man kann auch Trigger für andere Standorte anlegen. FHEM weiß dann sogar, wenn ihr im Büro seid und könnte sich dabei auch unterschiedlich verhalten, als wenn ihr "auf Achse" seid. Bei letzterem ist der Status im GEOFANCY Modul "underway", was so viel heißt wie "unbekannter Aufenthaltsort".
| |
|
| |
| Hinweis: Zumindest für Geofancy.app liefert ein Testrequest wohl zufällige Locations zurück. Die eigenen Location-IDs werden also nicht übergeben, selbst wenn man sich in einem Geofence befindet. Um zu testen muss man sich wohl oder übel selbst bewegen ;-).
| |
|
| |
| === GEOFANCY Modul individualisieren ===
| |
| Die im GEOFANCY Modul dargestellten Readings sind nun in etwa so, wenn ihr euch bewegt:
| |
|
| |
| <pre>
| |
| Readings:
| |
| 2014-01-18 14:37:42 lastDevice -
| |
| 2014-01-18 14:37:42 lastDeviceUUID 51F23894-AAAA-BBBB-CCCC-0123456789AB
| |
| 2014-01-18 14:37:42 state dev:51F23894-AAAA-BBBB-CCCC-0123456789AB trig:test id:home lat:48.9999 long:11.9999
| |
| </pre>
| |
|
| |
| Wer genauer hinschaut sieht: Mein iPhone heißt wohl 51F23894-AAAA-BBBB-CCCC-0123456789AB.
| |
| Damit nun die Readings für mein iPhone richtig angelegt werden, muss ein Device Alias gesetzt werden. Sinnvoll erscheint mir der Vorname des Besitzers:
| |
| :<code>attr geofancy devAlias 51F23894-AAAA-BBBB-CCCC-0123456789AB:Julian</code>
| |
|
| |
| Weitere Alias-Namen können mit Leerzeichen einfach angehängt werden.
| |
| Jetzt werden weitere Readings angelegt, sobald GEOFANCY entsprechende Daten vom Mobilgerät empfängt:
| |
|
| |
| <pre>
| |
| Readings:
| |
| 2014-01-18 14:37:42 Julian arrived home
| |
| 2014-01-18 14:37:42 currLocLat_Julian 48.9999
| |
| 2014-01-18 14:37:42 currLocLong_Julian 11.9999
| |
| 2014-01-18 14:37:42 currLocTime_Julian 2014-01-18 14:37:42
| |
| 2014-01-18 14:37:42 currLoc_Julian home
| |
| 2014-01-17 19:18:23 lastArr Julian home
| |
| 2014-01-17 18:41:46 lastDep Julian Office
| |
| 2014-01-18 14:37:42 lastDevice Julian
| |
| 2014-01-18 14:37:42 lastDeviceUUID 51F23894-AAAA-BBBB-CCCC-0123456789AB
| |
| 2014-01-17 18:41:46 lastLocArr_Julian 2014-01-17 08:58:37
| |
| 2014-01-17 18:41:46 lastLocDep_Julian 2014-01-17 18:41:46
| |
| 2014-01-17 18:41:46 lastLocLat_Julian 48.1111
| |
| 2014-01-17 18:41:46 lastLocLong_Julian 11.1111
| |
| 2014-01-17 18:41:46 lastLoc_Julian Office
| |
| 2014-01-18 14:37:42 state dev:Julian trig:test id:home lat:48.9999 long:11.9999
| |
| </pre>
| |
|
| |
| Möchte man nun etwas bestimmtes tun, wenn man nach Hause kommt oder das Heim verlässt, kann man am Besten ein entsprechendes Notify auf das Reading currLoc_Name setzen. Ich aktualisiere lediglich zwei Dummies, durch die dann alle weiteren Notifies ausgelöst werden:
| |
|
| |
| <pre>
| |
| define n_Julian.Presence notify geofancy:currLoc_Julian:.home set Julian.homestatus:FILTER=STATE!=home home
| |
| attr n_Julian.Presence room Residents
| |
| define n_Julian.absence notify geofancy:currLoc_Julian:.underway {\
| |
| if (Value("Julian.homestatus") ne "gone") {\
| |
| fhem("set Julian.homestatus:FILTER=STATE!=absent absent");;\
| |
| }\
| |
| }
| |
| define n_Julian.whereabout notify geofancy:currLoc_Julian:.* set Julian.whereabout:FILTER=STATE!=$EVTPART1 $EVTPART1
| |
| </pre>
| |
|
| |
| Wer es noch einfacher möchte (bzw. auch noch mehr Features) schaut sich einmal die neue Modulfamilie aus RESIDENTS[http://fhem.de/commandref_DE.html#RESIDENTS], ROOMMATE[http://fhem.de/commandref_DE.html#ROOMMATE] und GUEST[http://fhem.de/commandref_DE.html#GUEST] an. Diese sind direkt auf GEOFANCY abgestimmt. Dabei kann das devAlias Attribut entfallen und man hinterlegt die UUID stattdessen direkt im ROOMMATE oder GUEST Device (Attribut r*_geofenceUUIDs). Das erspart es für jeden Bewohner und jedes Device zig unterschiedliche Devices der Typen Notify, DOIF oder Watchdog anlegen und pflegen zu müssen.
| |
|
| |
| Wer mehr Kontrolle möchte kann natürlich bei notify, DOIF und Co. bleiben: <code>define n_rr_Julian.location notify geofancy:currLoc_Julian:.* set rr_Julian:FILTER=location!=$EVTPART1 location $EVTPART1</code>. Wobei "Julian" dabei als devAlias in GEOFANCY eingtragen wurde, rr_Julian der Name des ROOMMATE aus RESIDENTS ist. Außerdem wurden die Location-IDs in der Geofency.app bzw. Geofancy.app so gewählt, dass diese direkt einem ROOMMATE-Status entsprechen (also z.B. home, wayhome...).
| |
|
| |
|
| == Beispiele für die Nutzung der Anwesenheitserkennung == | | == Beispiele für die Nutzung der Anwesenheitserkennung == |
Zeile 368: |
Zeile 69: |
|
| |
|
| === Abschalten aller Verbraucher (Licht, Musikanlage) beim Verlassen der Wohnung === | | === Abschalten aller Verbraucher (Licht, Musikanlage) beim Verlassen der Wohnung === |
| Typisches Szenario: Man geht ausser Haus, aber hat vergessen im Bad das Licht aus zu machen. Allerdings geht man heutzutage fast garnicht mehr ohne Handy aus dem Haus. | | Typisches Szenario: Man geht ausser Haus, aber hat vergessen im Bad das Licht aus zu machen. Allerdings geht man heutzutage fast gar nicht mehr ohne Handy aus dem Haus. |
|
| |
|
| Nun soll FHEM in der gesamten Wohnung das Licht, sowie sonstige Verbraucher ausschalten, wenn ich länger als 15 Minuten ausser Haus bin. Dazu benötigt man zuerst eine structure, die alle Verbraucher und sonstigen Devices, die das betrifft, zusammenfasst. | | Nun soll FHEM in der gesamten Wohnung das Licht, sowie sonstige Verbraucher ausschalten, wenn ich länger als 15 Minuten ausser Haus bin. Dazu benötigt man zuerst eine structure, die alle Verbraucher und sonstigen Devices, die das betrifft, zusammenfasst. |
Zeile 388: |
Zeile 89: |
| attr watchdog_Anwesenheit regexp1WontReactivate 1 | | attr watchdog_Anwesenheit regexp1WontReactivate 1 |
| </pre> | | </pre> |
| | |
|
| |
|
| === Benachrichtigung bei Batteriewechsel === | | === Benachrichtigung bei Batteriewechsel === |
Zeile 394: |
Zeile 96: |
|
| |
|
| <pre> | | <pre> |
| # PRESENCE-Modul für Elgato Eve Room Sensor mit Aktualisierung aller 6 Minuten | | # PRESENCE-Modul für Elgato Eve Room Sensor mit Aktualisierung alle 6 Minuten |
| define Eve_Room_BLE lan-bluetooth <Bluetooth-Adresse> 127.0.0.1:5333 360 | | define Eve_Room_BLE lan-bluetooth <Bluetooth-Adresse> 127.0.0.1:5333 360 |
| </pre> | | </pre> |
|
| |
|
| Anschließend wird eine DOIF-Regel definiert, die eine Nachricht an die installiere [[FHEM_APP|FHEM App]] absendet: | | Anschließend wird eine DOIF-Regel definiert, die eine Nachricht an die installierte FHEM App absendet: |
| <pre> | | <pre> |
| define Eve_Room_BLE_Battery_Msg DOIF ([Eve_Room_BLE] eq "absent") (set Msg_iPhone message 'Batteriewechsel beim Eve Room Sensor im Wohnzimmer.') | | define Eve_Room_BLE_Battery_Msg DOIF ([Eve_Room_BLE] eq "absent") (set Msg_iPhone message 'Batteriewechsel beim Eve Room Sensor im Wohnzimmer.') |
Zeile 405: |
Zeile 107: |
|
| |
|
| Die Aktualisierung des PRESENCE-Eintrages sollte nicht größer sein als das WAIT-Attribut der DOIF-Regel. Ansonsten könnte eine kurze Systemstörung zum Fehlalarm führen. | | Die Aktualisierung des PRESENCE-Eintrages sollte nicht größer sein als das WAIT-Attribut der DOIF-Regel. Ansonsten könnte eine kurze Systemstörung zum Fehlalarm führen. |
|
| |
| == Anwesenheitserkennung Bluetooth PebbleBee mit PRESENCE Modul ==
| |
| Im Forum gibt es einen {{Link2Forum|Topic=28753|LinkText=langen Beitrag}} über die Einrichtung eines BT-Tag an einem RaspberryPI mit FHEM. Dabei werden Skripte wie blescan.pl und lepresenced genannt.
| |
| Da mittlerweile viele neue Informationen zusammen gekommen sind wurde der Wiki Eintrag erstellt.
| |
|
| |
| Im Folgenden wird die Konfiguration für '''LE Deviced (z.B. Gtags,Pebbles etc.)''' und '''NICHT LE Device (z.B. IPhone)''' beschreiben.
| |
|
| |
| {{Randnotiz|RNText=Beide hier beschriebenen Wege (presenced/lepresenced) können parallel auf dem selben BT-Dongle laufen, da sich die Ports unterscheiden! }}
| |
| '''Wo finde ich denn lepresenced?'''
| |
|
| |
| lepresenced kann über Github heruntergeladen werden (Link weiter unten)
| |
|
| |
| '''Was ist der Vorteil gegenüber blescan.pl?'''
| |
|
| |
| blescan.pl hat u. a. das Problem, dass dank der wundervollen Bluetooth-Implementierung unter Linux ab und zu der Scan fehlschlägt und das Interface resettet werden muss. Das tut blescan.pl auch mit aller Gewalt. Dazu kommt, dass bei längeren Scanzeiten und vielen Tags sich die Prozesse anstauen, weil immer nur auf einen Tag "gewartet" wird. Außerdem wurden mit der Einführung von lepresenced sämtliche Supportverträge gekündigt lepresenced läuft dauerhaft und merkt sich bei allen sendenden Tags den Zeitstempel des letzten Empfangs.
| |
|
| |
| === Getestete Hardware/Software===
| |
| * '''Raspbian System''' - wheezy, Jessie
| |
| * '''BT-Dongle''' - CSL NET BT USB2.0 Stick, Bluetooth V4.0, Nano <br />'''Achtung''': Es muss ein BT V4.0 oder höher verwendet werden. Nur dieser unterstützt ''LowEnergy''
| |
| * '''BT-TAG''' - Gtag von Gigaset, TrackR, UDOO Neo, PebbleBee, iTag von Unitec, X4-LIFE Multifunkti BL-Anhänger, iTag Wireless Anti, Trackr bravo
| |
|
| |
| === BT Dongel am PI installieren ===
| |
|
| |
| Um den BT Dongle ''(hier: CSL NET BT USB2.0)'' am PI verwenden zu können, müssen die notwendigen Pakete über die Paketverwaltung von debain nachinstalliert werden.
| |
| Wer bereits ein BT-Dongle installiert hat, kann diesen Schritt überspringen.
| |
| <pre>
| |
| apt-get install bluetooth
| |
| </pre>
| |
| Nach erfolgreicher Installation der Pakete sollte der RaspberryPI neu gestartet werden.
| |
| <pre>
| |
| sudo reboot
| |
| </pre>
| |
|
| |
| Nach dem erfolgten Reboot bitte das Log des Raspberry auf folgende Einträge prüfen:
| |
| <pre>
| |
| Feb 12 19:52:55 fhem kernel: [ 4.773600] Bluetooth: Core ver 2.20
| |
| Feb 12 19:52:55 fhem kernel: [ 4.773748] NET: Registered protocol family 31
| |
| Feb 12 19:52:55 fhem kernel: [ 4.773765] Bluetooth: HCI device and connection manager initialized
| |
| Feb 12 19:52:55 fhem kernel: [ 4.773797] Bluetooth: HCI socket layer initialized
| |
| Feb 12 19:52:55 fhem kernel: [ 4.773821] Bluetooth: L2CAP socket layer initialized
| |
| Feb 12 19:52:55 fhem kernel: [ 4.773890] Bluetooth: SCO socket layer initialized
| |
| Feb 12 19:52:55 fhem kernel: [ 4.797531] usbcore: registered new interface driver btusb
| |
| </pre>
| |
| Sobald der BT-Dongle erkannt wurde ''leuchtet'' (wenn vorhanden) auch die ''blaue/gelbe'' LED am Dongle auf.
| |
|
| |
| === BT-Tags aktivieren ===
| |
| Jetzt kann der BT-Tag aktiviert werden. Bei einigen Tags muss dafür die '''Batteriesicherung''' gezogen werden.
| |
|
| |
| Einen Tag wird mit folgendem Befehl auf der Konsole gesucht:
| |
| <source lang="bash">
| |
| sudo hcitool lescan
| |
|
| |
| Ausgabe z.B.:
| |
| LE Scan ...
| |
| 7C:2F:80:A1:XA:XD (unknown)
| |
| 7C:2F:80:A1:XA:XD Gigaset G-tag
| |
| 7C:2F:80:A1:X4:X1 (unknown)</source>
| |
| Eine Übersicht über die möglichen Befehle von hcitool gibt es mit der Eingabe von:
| |
| <pre>
| |
| sudo hcitool
| |
|
| |
| Ausgabe z.B.:
| |
| hcitool - HCI Tool ver 5.23
| |
| Usage:
| |
| hcitool [options] <command> [command parameters]
| |
| Options:
| |
| --help Display help
| |
| -i dev HCI device
| |
| Commands:
| |
| dev Display local devices
| |
| inq Inquire remote devices
| |
| scan Scan for remote devices
| |
| name Get name from remote device
| |
| info Get information from remote device
| |
| spinq Start periodic inquiry
| |
| epinq Exit periodic inquiry
| |
| cmd Submit arbitrary HCI commands
| |
| con Display active connections
| |
| cc Create connection to remote device
| |
| dc Disconnect from remote device
| |
| sr Switch master/slave role
| |
| cpt Change connection packet type
| |
| rssi Display connection RSSI
| |
| lq Display link quality
| |
| tpl Display transmit power level
| |
| afh Display AFH channel map
| |
| lp Set/display link policy settings
| |
| lst Set/display link supervision timeout
| |
| auth Request authentication
| |
| enc Set connection encryption
| |
| key Change connection link key
| |
| clkoff Read clock offset
| |
| clock Read local or remote clock
| |
| lescan Start LE scan
| |
| lewladd Add device to LE White List
| |
| lewlrm Remove device from LE White List
| |
| lewlsz Read size of LE White List
| |
| lewlclr Clear LE White list
| |
| lecc Create a LE Connection
| |
| ledc Disconnect a LE Connection
| |
| lecup LE Connection Update
| |
| </pre>
| |
|
| |
| Falls beim SCAN kein Tag gefunden wird, sollte das BT Interface neu gestartet werden. Dazu ist kein Reboot des PI notwendig.
| |
| <source lang="bash">
| |
| sudo hciconfig hci0 down
| |
| sudo hciconfig hci0 up
| |
| sudo hcitool dev
| |
| </source>
| |
|
| |
| === Anleitung für ein LE Device (z.B. Gtags,Pebbles etc.) ===
| |
|
| |
| Die Software lepresenced kann aktuell über drei Varianten installiert werden. Dabei ist die bevorzugte Variante (Variante 1) die Installation über das bereitgestellte .deb-Paket.
| |
| Die Variante 2 setzt voraus, dass im FHEM contrib Verzeichnis (/opt/fhem/contrib) die aktuelle Version des .deb-Pakets liegt. Die Variante 3 ist dafür gedacht, wenn man keine .deb-Pakete installieren kann/will oder es aus anderen Gründen nicht funktioniert. Es wird davon abgeraten die Variante 3 zu verwenden. Vollständigkeithalber wird sie aber aufgeführt.
| |
|
| |
| ====Installation per .deb-Paket====
| |
|
| |
| Die bevorzugte Variante ist die Installation von lepresenced durch die passenden .deb Pakete.
| |
|
| |
| '''1.Variante:'''
| |
| Herunterladen der aktuellen lepresenced-0.8-1.deb Datei über den Webbrowser
| |
| [https://svn.fhem.de/trac/export/HEAD/trunk/fhem/contrib/PRESENCE/deb/ SVN-Repository]. Im SVN die passende Datei auswählen und in der folgende Webseite den Link unter:
| |
| <pre>
| |
| Download in other formats:
| |
| Original Format
| |
| </pre>
| |
| anklicken und die Datei herunterladen.
| |
| Die Datei kann jetzt auf den RPi kopiert und mit folgenden Befehlen ausgeführt werden (ggf. Berechtigungen anpassen).
| |
|
| |
| Alternativ per wget Befehl direkt auf den RPi
| |
| https://svn.fhem.de/trac/export/13992/trunk/fhem/contrib/PRESENCE/deb/lepresenced-0.8-1.deb
| |
|
| |
| '''2.Variante:'''
| |
| Herunterladen aus dem fhem contrib Verzeichnis:
| |
| Hierzu muss das contrib auf dem aktuellen Stand sein. Dazu wird die Installation von subversion (normal bereits vorhanden) benötigt.
| |
|
| |
| sudo apt-get install subversion
| |
|
| |
| Danach kann per
| |
| sudo svn checkout svn://svn.code.sf.net/p/fhem/code/trunk/fhem/contrib svnrepo
| |
|
| |
| Das aktuelle Repository auf den Pi heruntergeladen werden. Danach sollte im gewählten Verzeichnis die eingecheckten Dateien verfügbar sein.
| |
| /opt/fhem/svnrepo/PRESENCE/deb
| |
|
| |
|
| |
| ''' Installation der Variante 1 oder 2 '''
| |
| Egal welche Variante gewählt wurde, kann nun mit folgenden Befehlen das Paket installiert werden. Bitte Pfade ggf. anpassen.
| |
|
| |
| sudo dpkg -i lepresenced-0.8-1.deb
| |
|
| |
| sudo apt-get -f install
| |
|
| |
| Die Ausgabe der Installation sollte am Ende ein [ ok ] Starting lepresenced (via systemctl): lepresenced.service. ausgeben.
| |
|
| |
| <pre>
| |
| Paketlisten werden gelesen... Fertig
| |
| Abhängigkeitsbaum wird aufgebaut.
| |
| Statusinformationen werden eingelesen.... Fertig
| |
| Abhängigkeiten werden korrigiert ... Fertig
| |
| Die folgenden zusätzlichen Pakete werden installiert:
| |
| bluez-hcidump
| |
| Die folgenden NEUEN Pakete werden installiert:
| |
| bluez-hcidump
| |
| 0 aktualisiert, 1 neu installiert, 0 zu entfernen und 0 nicht aktualisiert.
| |
| 1 nicht vollständig installiert oder entfernt.
| |
| Es müssen 157 kB an Archiven heruntergeladen werden.
| |
| Nach dieser Operation werden 490 kB Plattenplatz zusätzlich benutzt.
| |
| Möchten Sie fortfahren? [J/n]
| |
| Holen: 1 http://archive.raspberrypi.org/debian/ jessie/main bluez-hcidump armhf 5.23-2+rpi2 [157 kB]
| |
| Es wurden 157 kB in 0 s geholt (921 kB/s).
| |
| Vormals nicht ausgewähltes Paket bluez-hcidump wird gewählt.
| |
| (Lese Datenbank ... 42033 Dateien und Verzeichnisse sind derzeit installiert.)
| |
| Vorbereitung zum Entpacken von .../bluez-hcidump_5.23-2+rpi2_armhf.deb ...
| |
| Entpacken von bluez-hcidump (5.23-2+rpi2) ...
| |
| Trigger für man-db (2.7.0.2-5) werden verarbeitet ...
| |
| bluez-hcidump (5.23-2+rpi2) wird eingerichtet ...
| |
| lepresenced (0.8-1) wird eingerichtet ...
| |
| [ ok ] Starting lepresenced (via systemctl): lepresenced.service.
| |
| </pre>
| |
|
| |
| Ab hier kann, wenn alles problemlos funktioniert hat mit der [[https://wiki.fhem.de/wiki/Anwesenheitserkennung#Einrichtung_der_G-Tags_.C3.BCber_FHEM| Einrichtung]] der Tags unter FHEM weitergemacht werden.
| |
|
| |
|
| |
| '''3.Variante:'''
| |
|
| |
| Bei dieser Variante wird das aktuellste lepresenced Skript aus github heruntergeladen. Das bedeutet, dass jegliche Konfiguration wie automatischer Start, Berechtigungen etc.
| |
| manuell konfiguriert werden muss. Diese Variante eignet sich nur für diejenigen, die keine .deb-Pakete installieren wollen/können oder die genau Wissen, was sie tun!
| |
| <pre>
| |
| https://github.com/mhop/fhem-mirror/blob/master/fhem/contrib/PRESENCE/lepresenced
| |
| </pre>
| |
|
| |
| Zur "Installation" des Skripts folgendermaßen vorgehen:
| |
| Unter /fhem manuell den Ordner „script“ anlegen:
| |
| <pre>
| |
| mkdir script
| |
| </pre>
| |
| Datei lepresenced reinkopieren und ausführbar machen:
| |
| <pre>
| |
| sudo chmod +x /opt/fhem/script/lepresenced
| |
| sudo chgrp -cR dialout lepresenced
| |
| </pre>
| |
| Skript erstmalig starten:
| |
| <pre>
| |
| sudo ./lepresenced --loglevel LOG_EMERG -d
| |
| </pre>
| |
| Kommt beim Starten des Skript eine Fehlermeldung, müssen die Abhängigkeiten aufgelöst werden.
| |
| <pre>
| |
| Can't locate Net/Server/Daemonize.pm in @INC (@INC contains: /etc/perl /usr/local/lib/perl/5.14.2 /usr/local/share/perl/5.14.2 /usr/lib/perl5 /usr/share/perl5 / usr/lib/perl/5.14 /usr/share/perl/5.14 /usr/local/lib/site_perl .) at /opt/fhem/lepresenced line 17.
| |
| BEGIN failed--compilation aborted at /opt/fhem/lepresenced line 17.
| |
| </pre>
| |
| Um die Abhängigkeiten aufzulösen muss folgendes nachinstalliert werden und anschließend ein Reboot durchgeführt werden.
| |
| <pre>
| |
| sudo apt-get install libnet-server-*
| |
| </pre>
| |
|
| |
|
| |
| ====Einrichtung der G-Tags über FHEM====
| |
|
| |
| Nach dem letzten Schritt sind alle Bedingungen für eine abschließende Konfiguration der BT-Tags in FHEM abgeschlossen worden.
| |
| Jetzt kann der Tag dem FHEM-Server bekannt gemacht werden.
| |
| <pre>
| |
| -- Name Modul Modus MAC vom Gtag IP vom PI Port Abfragezeit in Sekunden
| |
| define MeinGtAG PRESENCE lan-bluetooth xx:xx:xx:xx:xx:xx 127.0.0.1:5333 120
| |
| </pre>
| |
|
| |
| Den absent und present Mode kann man einfach testen, in dem man den Gtag mit Alufolie einwickelt.
| |
|
| |
| === Anleitung für ein NICHT LE Device (z.B. IPhone) ===
| |
| Die Installation kann (wie in der commanref beschrieben) über Debian Pakete erfolgen.
| |
| <pre>
| |
| .deb package for Debian (noarch): presenced-1.3.deb http://svn.code.sf.net/p/fhem/code/trunk/fhem/contrib/PRESENCE/deb/presenced-1.3.deb
| |
|
| |
| .deb package for Raspberry Pi (raspbian): presenced-rpi-1.3.deb http://svn.code.sf.net/p/fhem/code/trunk/fhem/contrib/PRESENCE/deb/presenced-rpi-1.3.deb
| |
| </pre>
| |
|
| |
| <pre>
| |
| sudo dpkg -i presenced-rpi-1.3.de
| |
| </pre>
| |
|
| |
| Installation perl script file (Auszug commanref)
| |
| <pre>
| |
| direct perl script file: presenced http://svn.code.sf.net/p/fhem/code/trunk/fhem/contrib/PRESENCE/presenced
| |
| </pre>
| |
|
| |
| Nach dem letzten Schritt sind alle Bedingungen für eine abschließende Konfiguration der BT-Tags in FHEM abgeschlossen worden.
| |
| Jetzt kann der Tag dem FHEM-Server bekannt gemacht werden.
| |
| {{Randnotiz|RNText=Wenn man mit collectord arbeitet muß man die Erkennung bei allen Devices auf port 5222 setzen.
| |
| lan-bluetooth xx:xx:80:xx:xx:AC 127.0.0.1:5222 20 120}}
| |
| <pre>
| |
| -- Name Modul Modus MAC vom Gtag IP vom PI Port Abfragezeit in Sekunden
| |
| define MeinGtAG PRESENCE lan-bluetooth xx:xx:xx:xx:xx:xx 127.0.0.1:5333 120
| |
| </pre>
| |
|
| |
| === Automatischer Start ===
| |
|
| |
| Damit das leprecend Skript beim Systemstart mitgestartet wird, sollte eine Crontab Eintrag gesetzt werden. Alternativ die rc.local anpassen.
| |
| Ersteres würde so aussehen:
| |
|
| |
| Ein sh-Skript mit dem Inhalt:
| |
| <pre>
| |
| sudo start-stop-daemon -d /opt/fhem/script -S -x /opt/fhem/script/lepresenced &
| |
| </pre>
| |
| unter dem Verzeichnis /home/pi ablegen, welches sich init_start.sh nennt.
| |
|
| |
| Das Skript dann unter: sudo crontab -e einhängen mit folgender Folge:
| |
| <pre>
| |
| @reboot /home/pi/init_start.sh
| |
| </pre>
| |
|
| |
| Zweiteres so:
| |
| <pre>
| |
| sudo nano /etc/rc.local
| |
| </pre>
| |
|
| |
| Datei rc.local, freie Stelle suchen, vor "exit 0":
| |
|
| |
| <pre>
| |
| # Start lepresenced
| |
| /opt/fhem/script/lepresenced --loglevel LOG_EMERG -d
| |
| exit 0
| |
| </pre>
| |
|
| |
| === Batterieüberwachung (aktuell nur G-Tags) ===
| |
|
| |
| Leider überträgt der G-Tag nach der Einrichtung als Device in FHEM kein Reading mit seinem aktuellen Batteriestatus.
| |
| Dem wurde mit Hilfe des Forum Abhilfe geschaffen.
| |
| Im Folgenden wird erläutert wie die Batterieüberwachung eingerichtet werden kann.
| |
|
| |
| '''Voraussetzung:'''
| |
|
| |
| bc - Basiscalculator [https://packages.debian.org/de/sid/bc Bc-Paket]
| |
| <pre> sudo apt-get install bc </pre>
| |
|
| |
| Anlegen eines Shellskript auf dem Raspberry System.
| |
| Die Parameter <<MAC-Adresse>> und <<TagName>> müssen durch die Werte des auszulesenden G-Tags ersetzt werden.
| |
| <pre>
| |
| #!/bin/bash
| |
| stringZ=$(sudo gatttool -b 5C:2B:80:C1:14:41 --char-read --handle=0x001b)
| |
| stringZ=${stringZ:33:2}
| |
| stringZ=$(echo "$stringZ" | tr a-f A-F)
| |
| decimal=$(echo "ibase=16; $stringZ" | bc)
| |
| perl /opt/fhem/fhem.pl 7072 "setreading MeinGtag Batterie $decimal"
| |
| </pre>
| |
|
| |
| Dem Device in FHEM (hier MeinGtag) ein userReading mit dem Namen '''Batterie''' hinzufügen.
| |
| Das Shellskript mit folgendem Befehl starten:
| |
| <pre>
| |
| ./GtagBatterie.sh
| |
| </pre>
| |
| '''Wichtig ist hierbei,''' dass Skript mit "./" und nicht mit "sh" aufzurufen. Beim Aufruf mit "sh GtagBatterie.sh" produziert es einen Fehler
| |
| <pre>GtagBatterie.sh: 3: GtagBatterie.sh: Bad substitution </pre>
| |
|
| |
| Das Reading wird auf den ausgelesenen Wert der Batterie gesetzt.
| |
|
| |
| Hinweis: Es sollte für jeden G-Tag ein eigenes Skript abgelegt werden. Das Skript kann per crontab oder fhem Kommando (system) regelmäßig aufgerufen werden.
| |
|
| |
| === Batterieüberwachung (alle Devices vom Typ "MODE=lan-bluetooth") ===
| |
|
| |
| Es gibt eine weitere Möglichkeit um den Batteriestatus von LE Devices abzurufen und in FHEM als Reading darzustellen.
| |
| Dabei wird der Batteriezustand für alle LE Devices, die bereits in FHEM konfiguriert sind und per lepresenced überwacht werden, automatisch in einem shell-Script ermittelt.
| |
| Näheres dazu im Forumartikel {{Link2Forum|Topic=56960|LinkText=Erweiterung: Anwesenheitserkennung/Batterieüberwachung}}.
| |
|
| |
| Vorteile:
| |
| * Automatische Ermittlung aller in FHEM konfigurierten LE Devices
| |
| * Möglichkeit, diese Devices alternativ manuell im Script einzutragen
| |
| * Es werden nur Devices abgefragt, die im Status "present" sind, also mit ziemlicher Sicherheit auch verfügbar sind
| |
| * Ein eventuell auf dem FHEM telnet-Port gesetztes Passwort kann im Script hinterlegt werden
| |
|
| |
| '''Voraussetzung:'''
| |
|
| |
| '''Funktionierendes lepresenced''' - siehe [[Anwesenheitserkennung#Anleitung_f.C3.BCr_ein_LE_Device_.28z.B._Gtags.2CPebbles_etc..29|Anleitung für ein LE Device (z.B. Gtags,Pebbles etc.)]]
| |
|
| |
| '''socat''' - TCP port forwarder
| |
| <pre>
| |
| sudo apt-get update && sudo apt-get install socat
| |
| </pre>
| |
|
| |
|
| |
| '''gawk''' - Zum extrahieren der Daten
| |
| <pre>
| |
| sudo apt-get update && sudo apt-get install gawk
| |
| </pre>
| |
|
| |
| '''gatttool''' - Bestandteil von bluez
| |
|
| |
| gatttool ist auf den meisten Distributionen im bluez-Paket, allerdings nicht bei Opensuse. Dort muss man das Sourcepaket von bluez installieren und selbst kompilieren.
| |
| gatttool sollte dann nach /usr/bin oder /usr/local/bin kopiert werden,
| |
|
| |
|
| |
| Zusätzlich zu den notwendigen Erweiterungen werden für die Ausführung von gatttool '''Root-Rechte benötigt'''!
| |
|
| |
| Das Script selbst gibt es hier: [https://raw.githubusercontent.com/micky0867/lebattery/master/lebattery lebattery]
| |
|
| |
| Am Besten unter /opt/fhem/script/lebattery speichern und ausführbar machen:
| |
| <source lang="bash">
| |
| sudo su -
| |
| mkdir /opt/fhem/script
| |
| cd /opt/fhem/script
| |
| wget https://raw.githubusercontent.com/micky0867/lebattery/master/lebattery
| |
| chmod 755 lebattery
| |
| </source>
| |
|
| |
| Je nach Bedarf können im Script noch die folgenden 3 Parameter angepasst werden:
| |
| <source lang="bash">
| |
| # If allowed_telnetPort is protected by a password, add the password here
| |
| TELNETPASSWORD=""
| |
| # Attribute for batterylevel in FHEM
| |
| ATTRIBUT="batterylevel"
| |
| # Use this, if you dont want the script to determine the tags on its own
| |
| LETAGS=""
| |
| </source>
| |
|
| |
| Das Skript wird dann unter root folgendermaßen gestartet:
| |
| <pre>
| |
| /opt/fhem/script/lebattery -v
| |
| </pre>
| |
|
| |
| Ausgabe des Skripts, wenn es mit dem Verbose Parameter -v gestartet wird.
| |
|
| |
| Beide Devices sind vom Typ NUT mini, das Device mit dem FHEM-Namen '''nut_Micky''' ist im Status '''absent'''. Das zweite Device ist im Status '''present'''.
| |
| <pre>
| |
| Determining address for nut_Micky ...
| |
| nut_Micky is in state absent, no further action required
| |
|
| |
| Determining address for nut_Test ...
| |
| Fetching batterylevel for nut_Test (F3:44:04:81:54:89) ...
| |
| Setting batterylevel for nut_Test to 100%
| |
| </pre>
| |
|
| |
| Mein crontab-Eintrag (User root) sieht so aus:
| |
| <pre>
| |
| 3 3 * * * /opt/fhem/script/lebattery -v >/opt/fhem/script/lebattery.log 2>&1
| |
| </pre>
| |
| Damit wird jeden Morgen um 3 Minuten nach 3 Uhr der Zustand der Batterien aller Devices ermittelt und in FHEM abgespeichert.<br>
| |
| Bevor man das mit crontab macht, sollte man allerdings zunächst sicher stellen, dass es auch ohne crontab funktioniert....
| |
|
| |
| Bei Problemen kann man auch erstmal schauen, ob das mit dem gattool überhaupt funktioniert:
| |
| <pre>
| |
| gatttool -t <Typ> -b <MAC-Adresse> --char-read --uuid 0x2a19
| |
|
| |
| handle: 0x0017 value: 64
| |
| </pre>
| |
| In diesem Fall hat die Batterie noch 100% (hex 64).<br>
| |
| Der Typ ist abhängig vom Hersteller und kann public (G-Tags) bzw. random (Nut) sein. Im Zweifelsfall beides ausprobieren.
| |
|
| |
| === Anwesenheitserkennung / Anwesenheitsbenachrichtigung mit G-Tags ===
| |
|
| |
| Ein Skript zur Nutzung der Gigaset G-TAGs zur Alarmierung bei öffnen und schließen von Türen und zur Anwesenheitserkennung, um die Alarmierung zu aktivieren bzw. deaktivieren.
| |
| Es kann verwendet werden um die Anwesenheit von mehrern Personen im Haushalt zu erkennen. Dabei wird eingeschränkt, dass nur bestimmte Personen die Alarmierung aktivieren können ( Eltern/Kind -Beziehung ).
| |
| Des Weiteren werden im Beispiel die Eltern benachrichtigt wenn eins der Kinder das Haus verlässt und die Eltern nicht anwesend sind.
| |
|
| |
| {{Randnotiz|RNText= Namen der G-Tags in den Skripten bitte Anpassen!}}
| |
|
| |
| Für die ''Notify'' und die ''RESIDENTS-Erweiterung'' wird ein Dummy benötigt.
| |
| <pre>
| |
| define Alarm dummy
| |
| attr Alarm devStateIcon aktiv:secur_locked@red inaktiv:secur_open@lightgreen
| |
| attr Alarm eventMap on:aktiv off:inaktiv
| |
| attr Alarm setList on off
| |
| attr Alarm webCmd aktiv:inaktiv
| |
| attr Alarm room Alarm
| |
| </pre>
| |
|
| |
|
| |
| ====Mit Notify ====
| |
| <pre>
| |
| gtag.*.presence:.* {Anwesenheit_check("$EVTPART1", "$NAME")}
| |
| </pre>
| |
|
| |
| Code für die 99_myUtils.pm
| |
| <pre>
| |
| ### GTAG ANWESENHEITS CHECK
| |
| sub Anwesenheit_check($$) {
| |
| my ($EVENT, $NAME) = @_;
| |
|
| |
| # gtag_rot - Alias Marco
| |
| # gtag_schwarz - Alias Ulli
| |
| # gtag_gruen - Alias Frida
| |
| # gtag_orange - Alias Hannah
| |
|
| |
| my $RESIDENT = "rr_"; # Alle GTAGs sind Standardmäßig Residents Roommate
| |
| # $RESIDENT = "rg_" if (($NAME eq "gtag_orange") xor ($NAME eq "gtag_weis")); # Hier nur Gäste (Roomguest) Auskommentiert, da ich es so nicht brauche
| |
| my $ROOMMATE = ("$RESIDENT" . "$NAME"); # Residentsname zusammenbauen
| |
| my $ALIASNAME = AttrVal($ROOMMATE,'alias',$ROOMMATE); # ALIAS des Roommates auslesen
| |
|
| |
| my $GTAG1 = Value('gtag_rot'); # ELTERN
| |
| my $GTAG2 = Value('gtag_schwarz'); # ELTERN
| |
|
| |
| my $STATUS = "wahrscheinlich gerade los";
| |
| $STATUS = "anwesend" if ($EVENT eq "present"); # Status: anwesend
| |
| $STATUS = "unterwegs" if ($EVENT eq "absent"); # Status: unterwegs
| |
|
| |
| Log 1, "$ALIASNAME ist $STATUS."; # LOG Eintrag erzeugen
| |
|
| |
| if (($EVENT eq "present" && Value("Alarm") eq "aktiv") && ($NAME eq "gtag_gruen" xor $NAME eq "gtag_orange")) {
| |
| fhem("set teleBot send ALARMIERUNG BLEIBT AKTIV: $ALIASNAME ist da..."); # Telegram
| |
| # fhem("set Infopush msg 'ALARMIERUNG BLEIBT AKTIV' '$ALIASNAME ist da...'"); # Pushover
| |
| }
| |
| elsif (($EVENT eq "present" && Value("Alarm") eq "aktiv") && ($NAME eq "gtag_rot" xor $NAME eq "gtag_schwarz")) {
| |
| fhem("set teleBot send ALARMIERUNG INAKTIV: $ALIASNAME ist da...; set Alarm inaktiv"); # Telegram
| |
| # fhem("set Infopush msg 'ALARMIERUNG INAKTIV' '$ALIASNAME ist da...'; set Alarm inaktiv"); # Pushover
| |
| }
| |
| elsif (($EVENT eq "absent" && Value("Alarm") eq "aktiv") && ($NAME eq "gtag_gruen" xor $NAME eq "gtag_orange")) {
| |
| fhem("set teleBot send ALARMIERUNG BLEIBT AKTIV: $ALIASNAME hat das Haus verlassen."); # Telegram
| |
| # fhem("set Infopush msg 'ALARMIERUNG BLEIBT AKTIV' '$ALIASNAME hat das Haus verlassen.'"); # Pushover
| |
| }
| |
| elsif (($EVENT eq "absent" && Value("Alarm") eq "inaktiv") && ($GTAG1 eq "absent" && $GTAG2 eq "absent")) {
| |
| fhem("set Alarm aktiv; set teleBot send ALARMIERUNG AKTIV: $ALIASNAME hat das Haus verlassen."); # Telegram
| |
| # fhem("set Alarm aktiv; set Infopush msg 'ALARMIERUNG AKTIV' '$ALIASNAME hat das Haus verlassen.' '' 0 ''"); # Pushover
| |
| }
| |
| }
| |
| </pre>
| |
|
| |
| <br>
| |
|
| |
| ====Mit Notify und Integration des RESIDENTS-MODUL====
| |
|
| |
| Der hier beschriebene Code erweitert die Funktionen unter dem Punkt 5.93.
| |
| Das Notify muss daher mit der folgenden Zeile erweitert werden.
| |
|
| |
| <pre>
| |
| define Alarm_AnwesenheitCheck notify gtag.*.presence:.* { Anwesenheit_check("$EVTPART1", "$NAME"), Anwesenheit_check_resi("$NAME") }
| |
| </pre>
| |
|
| |
| Zusätzlicher Code für die 99_myUtils.pm um die RESIDENTS Funktion nutzen zu können:
| |
| <pre>
| |
| ### RESIDENTS
| |
| sub Anwesenheit_check_resi($) {
| |
| my ($NAME) = @_;
| |
| my $ALIASNAME = AttrVal($NAME,'alias',$NAME); # ALIASNAME des GTAGs auslesen
| |
|
| |
| my $RESIDENT = "rr_"; # Als Standard sind alle GTAGs Roommates
| |
| $RESIDENT = "rg_" if (($NAME eq "gtag_orange") xor ($NAME eq "gtag_weis")); # Hier nur GTAG Namen der Gäste (Roomguest)
| |
| my $ROOMMATE = ("$RESIDENT" . "$ALIASNAME"); # Residentsname zusammenbauen
| |
|
| |
| if (ReadingsVal($NAME,'presence',$NAME) eq "absent") {
| |
| fhem("set $ROOMMATE absent"); # Resisents Status von Roommates setzen
| |
| }
| |
| elsif(ReadingsVal($NAME,'presence',$NAME) eq "present") {
| |
| fhem("set $ROOMMATE home"); # Resisents Status von Roommates setzen
| |
| }
| |
| }
| |
| </pre>
| |
| <br>
| |
|
| |
| ====Mit Notify und Fenster/Tür. -Kontakt Überwachung====
| |
|
| |
| Erweiterung für die Überwachung von Fenster/Tür. -Kontakten. Dazu sind zwei weitere Notifys notwendig die auf die Trigger der Kontakte regagieren
| |
| und so eine weitere Funktion in der 99_myUtils.pm ansprechen. Die Notifys triggern auf Kontakte die mit dem Namen Kontakt* beginnen.
| |
| Sollten die eigenen Fenster/Tür. -Kontakt anderen Namen besitzen, müssen die Skripte dementsprechend angepasst werden.
| |
| <pre>
| |
| define Alarm_Kontaktmeldung notify Kontakt.*:contact:.* {Kontakt_Meldung("$EVTPART1", "$NAME")}
| |
| </pre>
| |
| <pre>
| |
| define Alarm_Sabotagealarm notify Kontakt.*.sabotageError:.on {Kontakt_Sabotage("$EVTPART1", "$NAME")}
| |
| </pre>
| |
|
| |
| Zusätzlicher Code für die 99_myUtils.pm um die TÜRKONTAKTE-Meldung nutzen zu können:
| |
| <pre>
| |
| ### TÜRKONTAKTE-Meldung/Zustand
| |
| sub Kontakt_Meldung($$) {
| |
| my ($EVENT, $NAME) = @_;
| |
| my $ALIASNAME = AttrVal($NAME,'alias',$NAME);
| |
| Log 1, "$ALIASNAME wurde $EVENT";
| |
| if (ReadingsVal("Alarm", "state", "on") eq "on") {
| |
| fhem("set teleBot send $ALIASNAME wurde $EVENT"); # Nachricht über Telegram
| |
| # fhem("set Infopush msg '$ALIASNAME' '$ALIASNAME wurde $EVENT'"); # Nachricht über Pushover
| |
| }
| |
| }
| |
|
| |
| ### TÜRKONTAKTE-Sabotagealarm
| |
|
| |
| sub Kontakt_Sabotage($$) {
| |
| my ($EVENT, $NAME) = @_;
| |
| my $ALIASNAME = AttrVal($NAME,'alias',$NAME);
| |
| Log 1, "$ALIASNAME meldet Sabotagealarm";
| |
| fhem("set teleBot send Alarm: $ALIASNAME meldet Sabotagealarm"); # Nachricht über Telegram
| |
| # fhem("set Infopush msg 'Alarmanlage' '$ALIASNAME meldet Sabotagealarm' '' 2 ' ' 60 600 "); # Nachricht über Pushover
| |
| }
| |
| </pre>
| |
| <br>
| |
|
| |
| ==== Hinweis zur Benutzung / Fehlerhandling ====
| |
|
| |
| Der Alarm dummy hat den Zustand on:off. Die Bezeichnungen und Namen müssen 1:1 übernommen werden damit das Script funktioniert.
| |
| Andernfalls müssen die Bezeichnungen für z.B. absent:unterwegs und present:anwesend - angepasst werden.
| |
| Die Benachrichtigung kann aktuell per ''Telegram'' sowie ''Pushover'' ('''Achtung mit zweiterem sind Abokosten verbunden!''') realisiert werden.
| |
| Diskussion zum Thema im Forum unter: {{Link2Forum|Topic=64080}}
| |
| <br>
| |
|
| |
| === Verwendung von Collectord bei mehreren PRESENCE Installationen mit LE-Devices ===
| |
|
| |
| Um zwei presence Installation zu verbinden wird der collectored Daemon von Markus Bloch benötigt.
| |
| Hierfür gibt es im Wiki auch eine kurze Erläuterung sowie die Commandref.
| |
|
| |
| '''Aufbau:'''<br>
| |
| RPi1 (Hautpinstanz): fhem nebst presence Installation sowie collectord
| |
| RPi2 (Zweitsystem): fhem nebst presence Installation
| |
|
| |
| '''Installation:'''<br>
| |
|
| |
| auf RPi1 wird wie in der Commandref und im Wiki beschriebendas Presence Paket (https://svn.fhem.de/trac/export/HEAD/trunk/fhem/contrib/PRESENCE/deb/) heruntergeladen, installiert und konfiguriert.
| |
| Alle BT-Tags werden dann wie im Wiki beschrieben konfiguriert.
| |
|
| |
| auf RPi2 wird wie in der Commandref und im Wiki beschriebendas Presence Paket (https://svn.fhem.de/trac/export/HEAD/trunk/fhem/contrib/PRESENCE/deb/) heruntergeladen, installiert und konfiguriert.
| |
| Alle BT-Tags werden dann wie im Wiki beschrieben konfiguriert.
| |
|
| |
| Somit sollte auf beiden Systemen eine identische Konfiguration vorliegen.
| |
|
| |
| Jetzt wird das collectord heruntergeladen und installiert:
| |
| https://svn.fhem.de/trac/export/HEAD/trunk/fhem/contrib/PRESENCE/deb/collectord-1.7.deb
| |
| <pre>
| |
| sudo apt-get install collectord-1.7.deb
| |
| </pre>
| |
|
| |
| Nach der Installation befindet sich im Verzeichnis: /etc/collectord.conf die Konfigurationsdatei für das collectord.
| |
|
| |
| '''Konfiguration Shell:'''<br>
| |
| <pre>
| |
| sudo vi /etc/collectord.conf
| |
| </pre>
| |
|
| |
| Diese Datei muss jetzt nach folgender Vorlage angepasst werden.
| |
| <pre>
| |
| # room definition
| |
| #[room-name] # name of the room
| |
| #address=192.168.0.10 # ip-address or hostname
| |
| #port=5111 # tcp port which should be used (5111 is default)
| |
| #presence_timeout=120 # timeout in seconds for each check when devices are present
| |
| #absence_timeout=20 # timeout in secondsfor each check when devices are absent
| |
|
| |
| [RPi1] # Name (wird als Reading room bei den BT-Tags angezeigt) der presence Instanze
| |
| address=127.0.0.1 # Lokale Adresse RPi1 , da hier das Collectord später laufen soll!
| |
| port=5111 # Port der Presence Installation
| |
| presence_timeout=60 # Selbstgewaelte Pruefintervalle
| |
| absence_timeout=60 # Selbstgewaelte Pruefintervalle
| |
|
| |
| [RPi2] # Name (wird als Reading room bei den BT-Tags angezeigt) der presence Instanze
| |
| address=192.168.178.127 # IP-Adresse der Instanz, wo nur das Presence laueft, also RPi2
| |
| port=5111 # Port der Presence Installation
| |
| presence_timeout=60 # Selbstgewaelte Pruefintervalle
| |
| absence_timeout=60 # Selbstgewaelte Pruefintervalle
| |
| </pre>
| |
|
| |
| Hinweis: Es dürfen keine [Namen] mit Leerzeichen verwendet werden.
| |
|
| |
| '''Konfiguration FHEM:'''<br>
| |
| RPi1
| |
| define Gtag PRESENCE lan-bluetooth XX:XX:XX:XX:XX:XX 127.0.0.1:5222 60
| |
| Hinweis: Der Port ist der, des Collectord!! Also hier, Standard 5222
| |
| <br>
| |
| RPi2
| |
| define Gtag PRESENCE lan-bluetooth XX:XX:XX:XX:XX:XX 192.168.178.27:5222 60
| |
| Hinweis: Der Port ist der, des Collectord!! Also hier, Standard 5222 die IP-Adresse von RPi1
| |
|
| |
|
| |
| Nach der Konfiguration kann der Daemon gestartet werden. Um eine visuelle Log-Ausgabe mit dem Aufruf:
| |
| <pre>
| |
| sudo /usr/bin/perl /usr/sbin/collectord -vv -c /etc/collectord.conf
| |
| </pre>
| |
| <pre>
| |
| 2017-04-02 17:52:55 - =================================================
| |
| 2017-04-02 17:52:55 - started with PID 15554
| |
| 2017-04-02 17:52:55 - reading configuration file
| |
| 2017-04-02 17:52:55 - no config errors found
| |
| 2017-04-02 17:52:55 - forked with PID 15556
| |
| 2017-04-02 17:52:56 - created socket on 0.0.0.0 with port 5111
| |
| 2017-04-02 17:53:20 - new connection from 127.0.0.1:48656
| |
| 2017-04-02 17:53:20 - created thread 1 for processing device 7C:2F:80:E1:14:31 in room RPi2 for peer 127.0.0.1 (UUID: d0beb79dd4771532eb5e207c7bf31788)
| |
| 2017-04-02 17:53:20 - created thread 2 for processing device 7C:2F:80:E1:14:31 in room RPi1 for peer 127.0.0.1 (UUID: d0beb79dd4771532eb5e207c7bf31788)
| |
| 2017-04-02 17:53:20 - new connection from 127.0.0.1:48662
| |
| 2017-04-02 17:53:20 - new connection from 127.0.0.1:48664
| |
| 2017-04-02 17:53:20 - created thread 3 for processing device 7C:2F:80:ED:BC:F7 in room RPi2 for peer 127.0.0.1 (UUID: 7495a112063d5db45e6335d3fe305e36)
| |
| 2017-04-02 17:53:20 - created thread 4 for processing device 7C:2F:80:ED:BC:F7 in room RPi1 for peer 127.0.0.1 (UUID: 7495a112063d5db45e6335d3fe305e36)
| |
| 2017-04-02 17:53:20 - created thread 5 for processing device 7C:2F:80:E1:2A:4D in room RPi2 for peer 127.0.0.1 (UUID: c228f8d4d33b06787f995c7903c02760)
| |
| 2017-04-02 17:53:20 - created thread 6 for processing device 7C:2F:80:E1:2A:4D in room RPi1 for peer 127.0.0.1 (UUID: c228f8d4d33b06787f995c7903c02760)
| |
| 2017-04-02 17:53:22 - new connection from 192.168.xxx.xxx:51638
| |
| 2017-04-02 17:53:22 - created thread 7 for processing device 7C:2F:80:E1:14:31 in room RPi2 for peer 192.168.xxx.xxx (UUID: 5db7012e709d6dc2fcd8159fc0344e40)
| |
| 2017-04-02 17:53:22 - created thread 8 for processing device 7C:2F:80:E1:14:31 in room RPi1 for peer 192.168.xxx.xxx (UUID: 5db7012e709d6dc2fcd8159fc0344e40)
| |
| 2017-04-02 17:53:22 - new connection from 192.168.xxx.xxx:51640
| |
| 2017-04-02 17:53:22 - created thread 9 for processing device 7C:2F:80:ED:BC:F7 in room RPi2 for peer 192.168.xxx.xxx (UUID: c4b4d7c654132cf88e8c1fec3a956d3d)
| |
| 2017-04-02 17:53:23 - created thread 10 for processing device 7C:2F:80:ED:BC:F7 in room RPi1 for peer 192.168.xxx.xxx (UUID: c4b4d7c654132cf88e8c1fec3a956d3d)
| |
| 2017-04-02 17:53:29 - new connection from 192.168.xxx.xxx:51642
| |
| 2017-04-02 17:53:29 - created thread 11 for processing device 7C:2F:80:E1:2A:4D in room RPi2 for peer 192.168.xxx.xxx (UUID: ecd7081e5ae3a0d8e735c8750cb116a1)
| |
| 2017-04-02 17:53:29 - created thread 12 for processing device 7C:2F:80:E1:2A:4D in room RPi1 for peer 192.168.xxx.xxx (UUID: ecd7081e5ae3a0d8e735c8750cb116a1)
| |
| </pre>
| |
|
| |
| Wenn das Log wie oben abgebildet aussieht wurde alles richtig gemacht und unter dem Device in fhem erscheint ein neues Reading "rooms" mit dem Wert der Erkannten PRESENCE Installation.
| |
|
| |
| '''Automatischer Start:'''<br>
| |
| Wenn das Collectord per .deb Paket installiert wurde, startet es automatisch bei einem Reboot mit.
| |
| Manuell Starten als Daemon mit:
| |
| <pre>
| |
| sudo /usr/bin/perl /usr/sbin/collectord -c /etc/collectord.conf -d -v -l /var/log/collectord.log
| |
| </pre>
| |
|
| |
| === Problemlösungen ===
| |
| Falls es '''Probleme beim Starten des Skripts''' gibt bzw. man das Skript ohne Reboot des Systems neustarten möchte, kann man dies per kill Befehl erledigen.
| |
| <source lang="bash">
| |
| ps -ef | grep lepresenced
| |
| sudo kill <pid>
| |
| </source>
| |
|
| |
| Debuglevel lepresenced setzen:
| |
| {{Randnotiz|RNText=Um Debug-Meldungen zu bekommen (Vorsicht bei SD-Karten-Systemen wie dem RPi) - Hierbei werden die Schreibzyklen auf die SD-Karte erhöht.}}
| |
| <pre>
| |
| lepresenced --loglevel LOG_DEBUG
| |
| </pre>
| |
| Nur das wichtigste Loggen:
| |
| <pre>
| |
| lepresenced --loglevel LOG_WARNING
| |
| </pre>
| |
| Keinerlei LOG-Einträge
| |
| <pre>
| |
| lepresenced --loglevel LOG_EMERG
| |
| </pre>
| |
|
| |
| Bei '''Problemen mit der Batterieüberwachung''' der Tags kann die Pi Firmeware mit folgenden Befehl auf eine ältere Version zurückgesetzt werden.
| |
| Fehlermeldung beim Aufruf des lebattery oder anderen Batterietestskripten:
| |
| <pre>connect: Connection refused (111)</pre>
| |
|
| |
| Lösung (vorübergehend)
| |
| <pre>
| |
| sudo rpi-update 8521fd34c8f66b6d109acce943f6e25ec93ec005
| |
| </pre>
| |
|
| |
| Mehr dazu unter: {{Link2Forum|Topic=56960|Message=589165}}
| |
|
| |
| '''Das BT-Device ist ständig "absent"'''<br>
| |
| Eine Mögliche Lösung kann sein, dass Paket bluez-hcidump zu installieren. Das Werkzeug hcidump erlaubt die Beobachtung von Bluetooth-Aktivität.
| |
| Dies ist nicht notwendig, wenn bereits bluez installiert ist, da dies Teil des bluez Paketes ist
| |
| <pre>
| |
| sudo apt-get install bluez-hcidump
| |
| </pre>
| |
|
| |
|
| |
| ==== Ansprechpartner ====
| |
| # {{Link2FU|5068|PatrikR}} (Patrick) für lepresenced
| |
| # [[Benutzer Diskussion:Devender|Devender]] ({{Link2FU|20043|Dirk}}) für Wiki und Doku
| |
|
| |
| [[Kategorie:Code Snippets]] | | [[Kategorie:Code Snippets]] |
| [[Kategorie:Glossary]] | | [[Kategorie:Glossary]] |
| | [[Kategorie:Anwesenheitserkennung]] |