Anwesenheitserkennung - Remote Fritzbox: Unterschied zwischen den Versionen
KKeine Bearbeitungszusammenfassung |
KKeine Bearbeitungszusammenfassung |
||
Zeile 26: | Zeile 26: | ||
=== Voraussetzungen: === | === Voraussetzungen: === | ||
* Telnet auf der Fritzbox aktiviert | * Telnet auf der Fritzbox aktiviert | ||
* perl NET::Telnet Modul auf dem Host wo FHEM läuft installiert. Beim Raspberry-PI geht das so: | |||
<pre>sudo apt-get install libnet-telnet-perl</pre> | |||
Folgende Reihenfolge ist empfehlenswert: | Folgende Reihenfolge ist empfehlenswert: | ||
=== kopieren von Rpresence.sh in die Fritzbox === | === kopieren von Rpresence.sh in die Fritzbox === | ||
Zeile 39: | Zeile 39: | ||
=== installation / konfig / test Daemon am FHEM host === | === installation / konfig / test Daemon am FHEM host === | ||
kopieren von RFritzBoxScan.pl ins FHEM Verzeichnis | kopieren von RFritzBoxScan.pl ins FHEM Verzeichnis (dort wo alle Module 00_xxx.pm - 99_yyy.pm sind) | ||
<pre>sudo chmod +x RFritzBoxScan.pl # ausführbar machen | <pre>sudo chmod +x RFritzBoxScan.pl # ausführbar machen | ||
sudo chown fhem:root RFritzBoxScan.pl #for user fhem </pre> | sudo chown fhem:root RFritzBoxScan.pl #for user fhem </pre> |
Version vom 3. Januar 2014, 11:24 Uhr
In Erweiterung des Beitrages Anwesenheitserkennung wird eine Beispiel-Lösung für folgendes Szenario vorgestellt:
- Eine (nicht modifizierte) Fritzbox wird als WLAN Access Point und Router genutzt, jedoch läuft auf dieser Box kein FHEM oder Perl.
- Ein Linux Rechner (in diesem Beispiel ein RPI) wird als FHEM host verwendet.
- Device Erkennung mittels PRESENCE - ident mit PRESENCE fritzbox
Die Lösung basiert auf dem PRESENCE Modul und nutzt die Funktion PRESENCE function { }.
Background / Motivation
Ich hatte während der letzten 12 Monate ein modifiziertes PRESENCE Modul im Einsatz, das jedoch immer wieder ein Hängen oder Reboots der Fritzbox verursacht hatte (speziell bei 7270), daher hatte ich es nicht veröffentlicht. Die Vermutung liegt nahe, dass das ständige Telnet ein/aus-loggen die Hänger/Reboots verursacht hat.
Diese Lösung basiert (wie auch die PRESENCE fritzbox Funktion) auf dem Fritzbox Befehl ctlmgr_ctl, der jedoch von der "Ferne" ausgelöst werden muß, da FHEM ja nicht auf der Fritzbox läuft. Weiters wurden Ideen/Konzepte des presenced/collectord verwendet.
Die Lösung läuft bei mir seit Anfang Dez. 2013 stabil mit 12 abgefragten Devices / 120 Sekunden Intervall. (Env: FHEM auf RPI, Fritzbox 7390)
Konzept
- Auf der Fritzbox wird ein shellscript installiert, dass von remote gestartet wird, Kommandos lokal ausführt und das Ergebniss zurückschickt.
- Am FHEM host läuft ein perl basierender daemon der Kommandos von FHEM empfängt, aufbereitet und das shellscript auf der Fritzbox (mit parameter) startet. Dieser Daemon hält auch die Telnet Verbindung zur Fritzbox permanent aufrecht. Gestartet wird dieser Daemon automatisch beim ersten Aufruf durch FHEM.
- ein Modul 99_RFritzBox.pm ist die Schnittstelle zwischen FHEM und dem daemon.
Installation / Debug
Der code ist als zip-file im thread PRESENCE-RemoteFritzbox abgelegt. Bitte in diesem thread auch Fragen/Feedback/Wünsche posten.
Voraussetzungen:
- Telnet auf der Fritzbox aktiviert
- perl NET::Telnet Modul auf dem Host wo FHEM läuft installiert. Beim Raspberry-PI geht das so:
sudo apt-get install libnet-telnet-perl
Folgende Reihenfolge ist empfehlenswert:
kopieren von Rpresence.sh in die Fritzbox
z.B. mittels FTP in folgendes Verzeichnis:
/var/media/ftp/FRITZ/bin # Der Verzeichnispfad muß angepaßt werden! In diesem Beispiel ist das eine FB7390 im Internen Speicher. chmod +x Rpresence.sh # shell script ausführbar machen.
Ein erster Test von der Telnet Konsole der Fritzbox:
./Rpresence.sh <FBdevicename>
sollte folgendes Ergebnis liefern:
RFritzBox: <FBdevicename> y z
wobei für <FBdevicename> der Name eines Gerätes, so wie in der Fritzbox Weboberfläche definert einzusetzen ist. y ist die Fritzbox interne Devicenummer dieses Gerätes (es sollte jedenfalls nicht 999 hier stehen, in diesem Fall hat die FB den Namen nicht gefunden. z ist der Status (0==abwesend/1==anwesend).
Falls bis hierher alles geklappt hat, ist die Einrichtung auf der Fritzbox fertig.
installation / konfig / test Daemon am FHEM host
kopieren von RFritzBoxScan.pl ins FHEM Verzeichnis (dort wo alle Module 00_xxx.pm - 99_yyy.pm sind)
sudo chmod +x RFritzBoxScan.pl # ausführbar machen sudo chown fhem:root RFritzBoxScan.pl #for user fhem
Erstellen eines config- files für den daemon: im root FHEM-Verzeichnis ( dort wo üblicherweise auch die fhem.pl zu finden ist ) ein file: credentials.cfg mit folgendem Inhalt erstellen (Adressen/User/Passwort/pfad anpassen):
# PRESENCE credentials (only required for function RemoteFritzBox) $credentials{RemoteFritzBox}{ipadress} = "192.168.1.254"; # FB LAN Adress $credentials{RemoteFritzBox}{username} = "FritzBoxusername"; $credentials{RemoteFritzBox}{password} = "FritzboxPasswort"; $credentials{RemoteFritzBox}{shellcmd} = "/var/media/ftp/FRITZ/bin/Rpresence.sh"; # pfad anpassen! $credentials{RemoteFritzBox}{serverhost} = "localhost"; # RFritzBoxScan.pl provides this service $credentials{RemoteFritzBox}{serverport} = 7777; $credentials{RemoteFritzBox}{serverbin} = "RFritzBoxScan.pl"; # Fritzbox daemon
Das Format dieser cfg-file entspricht dem im Modul Webcam. Ein erster Test:
./RFritzBoxScan.pl <fullpath and name> # of credentials.cfg eg: /opt/fhem/credentials.cfg
Damit wir der Daemon von Hand gestartet und alle debug-Meldungen kommen auf diese Konsole. Beim Start sollte der Output so aussehen:
RFritzBoxScan: server waiting for client connection on port 7777 RFritzBoxScan: Fritzbox login ok ### die folgenden Zeilen kommen erst ab dem nächsten Schritt ! ### und zwar jedesmal wenn ein request von FHEM an den daemon kommt... RFritzBoxScan: connection from 127.0.0.1:57595 RFritzBoxScan: ..from FHEM received data: Nokia-N810 RFritzBoxScan: ..sending to Fritzbox: Nokia-N810 17 RFritzBoxScan: ..cmdresult: RFritzBox: Nokia-N810 17 1 RFritzBoxScan: ..result to fhem: 1
installation und konfiguration FHEM-Module
kopieren von 99_RFritzBox.pm ins FHEM Verzeichnis
sudo chown fhem:root 99_RFritzBox.pm # for user fhem
Im FHEM command-feld:
reload 99_RFritzBox.pm
eintippen (oder FHEM neu starten)
Die FHEM-PRESENCE Definition:
define <myName> PRESENCE function {RemoteFritzBox("<FBdevicename>")} 120 120
damit wird in 120 sec Abständen der Status abgefragt. im Telnet Fenster sollten jetzt die requests / response - Meldungen kommen.
Zum Abschluß:
<Strg-C>
im telnet Fenster eingeben, der Daemon wird dadurch gestoppt. Auf den nächsten Aufruf durch FHEM warten, der Daemon wird automatisch (im Hintergrund) gestartet. Überprüfen durch Eingabe von
ps -e | grep RFritzBoxScan
Debug Tip
Log Meldungen vom Daemon bekommt man im FHEM Log durch anlegen eines dummy devices mit dem Namen RemoteFritzBox :
define RemoteFritzBox dummy attr RemoteFritzBox verbose 5
Den Daemon beenden, falls er im Hintergrund läuft:
sudo killall RFritzBoxScan.pl
have fun
erwin