Abwesenheitsgesteuerte Anrufweiterleitung mit FritzBox und Fhem

In einem echten Smart Home sollte natürlich auch die Kommunikation intelligenter erfolgen. Wie wäre es beispielsweise wenn die Telefonanlage wüsste, dass man nur kurz außer Haus ist? Anrufe könnten dann direkt auf die entsprechenden Mobilgeräte weitergeleitet werden und man erspart sich umständliches Anrufbeantworter abhören und zurückrufen. Mit den Fhem Modulen RESIDENTS, ROOMMATE, GEOFANCY und FRITZBOX ist diese Vision seit einiger Zeit leicht wie folgt umzusetzen:

Zuerst muss eine RESIDENTS Instanz definiert werden, diese stellt den Status einer ganzen Wohneinheit d.h. Wohnung, Haus etc. dar:

Danach werden dieser Residents Instanz die einzelnen Bewohner hinzugefügt:

Um fhem mitzuteilen wer gerade anwesend ist gibt es mittlerweile eine Vielzahl von Möglichkeiten. Die zuverlässigsten sind PRESENCE per FritzBox oder Bluetooth sowie Geofancy:

Mit der kostenlosen Geofancy iPhone App lassen sich z.B. einfach Geofences für iDevices erstellen und überwachen. Eine GEOFANCY Instanz auf fhem Seite kann folgendermaßen definiert werden:

Mit einem Notifier können die erfassten Orte dann ins ROOMMATE Modul übernommen und die Anwesenheit der Wohneinheit aktualisiert werden:

Alternativ kann die Anwesenheit auch mit PRESENCE und Bluetooth überwacht werden:

Und den zugehörigen Notifiern:

Nun zur tatsächlichen Anrufweiterleitung auf der FritzBox. Diese muss zuerst im Webinterface angelegt werden. Ein kleiner Tipp am Rande: Wenn die Abgangsrufnummer auf „automatisch“ steht, kann es passieren das die Anrufweiterleitung direkt im Amt geschieht (AWS). In diesem Falle finden sich keinerlei Logeinträge in der FritzBox Anrufhistorie.

Auf fhem Seite muss eine Instanz des FritzBox Moduls definiert werden. Dieses kann entweder im lokalen Modus laufen, wenn Fhem direkt auf der FritzBox installiert ist und als root läuft oder im entfernten Modus laufen, d.h. per telnet auf fritz.box. Dazu muss telnet zuerst per Telefon auf der FritzBox aktiviert werden (#96*7*) und das telnet Passwort in der Datei fb_pwd.txt im Fhem root Verzeichnis hinterlegt werden. Gegebenenfalls muss auch noch das telnet perl modus auf dem hem server installiert werden:

Die Instanz des FRITZBOX Moduls kann einfach folgendermaßen definiert werden:

Mit den folgenden Notifies kann dann auf verschiedene Anwesenheitsstatus reagiert werden:

Und Voilà, die intelligente Anrufweiterleitung spart Zeit, Nerven und Roamingkosten.

TFTP server on OS X

For flashing, recovering or unbricking embedded devices often a TFTP server is needed for serving the firmware image. On OS X such a server is already built in. To use it, simply put the firmware in /private/tftpboot and then start the tftp daemon with:

Once you are done you can stop the daemon with:

Telnet auf FritzBox 7490 mit FRITZ!OS 6.30 dauerhaft reaktivieren

Neulich musste ich feststellen, dass 1&1 hinter meinem Rücken wohl per TR-069 meine FritzBox 7490 von FritzOS 6.24 auf 6.30 aktualisiert und damit meine intelligente Anrufweiterleitungsfunktion mit FHEM zerstört hat. Falls auch Sie Telnet auf Ihrer FritzBox 7490 nach dem 6.30er Update schmerzlich vermissen, hier eine Möglichkeit um es wieder zu aktivieren:

Zuerst das FritzBox 6.24 Downgrade Image herunterladen. Es scheint zur Zeit nicht mehr auf dem offiziellen FTP zu sein, evtl. mir eine Email schreiben dann sehe ich was ich tun kann. Ein Backup machen und mit Kennwort versehen. Das Kennwort ist besonders wichtig, weil ohne ging der Reimport dann nicht mehr. Danach das Image wie gewohnt einspielen. Auf FritzOS 6.24 dann die Internetverbindung auf der FritzBox wiederherstellen, die Telefonie einrichten und mit einem angeschlossenen Handgerät #96*7* wählen um den telnetd zu aktivieren.

Telnetd sollte nun wieder erreichbar sein:

telnet fritz.box
Trying 192.168.181.1...
Connected to fritz.box.
Escape character is '^]'.
password:

BusyBox v1.20.2 (2014-09-26 13:25:19 CEST) built-in shell (ash)
Enter 'help' for a list of built-in commands.

Nun kann ein Update auf 6.30 mit einigen Modifikationen per modfs vorgenommen werden:

mkdir -p /var/mod;cd /var/mod;wget -qO- http://yourfritz.de/7490/modfs.tgz | gunzip -c | tar x;./modfs update

Ermitteln der Hardware-Version ... OK
Prüfen, ob die Hardware-Version unterstützt wird ... OK
Suchen der Einstellung zur Umschaltung auf das alternative System ... OK
Prüfen der aktuell zu startenden Systemversion ... OK
Suchen der aktuellen Kernel-Partition ... OK
Suchen der alternativen Kernel-Partition ... OK
Vergleich der Systeme in den Kernel-Partitionen ... übersprungen
Suchen der aktuellen Dateisystem-Partition ... OK
Suchen der alternativen Dateisystem-Partition ... OK
Überprüfen des zur Verfügung stehenden Speicherplatzes im RAM ... OK
Überprüfen des freien Speicherplatzes für das Auspacken des Dateisystems ... OK

Das System erfüllt die Voraussetzungen zur Modifikation des root-Dateisystems.

Im Moment läuft auf der Box die Version: 113.06.24

Die Auswahl des 'update'-Modus erfordert eine neuere Firmware-Version vom
FTP-Server des Herstellers.

Ermitteln der neuesten Version durch Suche auf dem FTP-Server ... OK
Es wurde eine neuere Version (113.06.30) auf dem FTP-Server gefunden.
Download eines aktuellen Firmware-Images vom FTP-Server des Herstellers ... OK
Extrahieren des neuen Kernel-Images aus dem Firmware-Image ... OK
Extrahieren des Flash-Filesystems aus dem Firmware-Image ... OK
Extrahieren des Wurzeldateisystems aus dem Flash-Filesystem ... OK
Löschen des geladenen Firmware-Images ... OK
Entpacken des root-Dateisystem für die Modifikationen ... OK

Das entpackte Dateisystem ist jetzt bereit für die Modifikationen.

Verzeichnis des root-Dateisystems : /var/media/ftp/1447338623/squashfs-root

Die Modifikation 'enable system selection from GUI' wird verarbeitet ...
Überprüfen der unterstützten Sprachen ... OK
Überprüfen der Voraussetzungen für die Modifikation ... OK
Modifikation wird ausgeführt ... OK
Überprüfen des Erfolgs der Modifikation ... OK

Die Modifikation 'enable system selection from GUI' wurde angewendet, Fehlercode = 0.

Die Modifikation 'enable rc.user execution' wird verarbeitet ...
Überprüfen der unterstützten Sprachen ... OK
Überprüfen der Voraussetzungen für die Modifikation ... OK
Modifikation wird ausgeführt ... OK
Überprüfen des Erfolgs der Modifikation ... OK

Die Modifikation 'enable rc.user execution' wurde angewendet, Fehlercode = 0.

Die Modifikation 'create edit_rcuser command' wird verarbeitet ...
Überprüfen der unterstützten Sprachen ... OK
Soll die Modifikation 'create edit_rcuser command' mit folgender Beschreibung
Es wird ein zusätzliches Kommando 'edit_rcuser' erzeugt, mit dem die Kommandos
in der Datei 'rc.user' sicher bearbeitet werden können, ohne daß man sich um
die Besonderheiten des TFFS kümmern muß.
angewendet werden ? (j/N) N

Die Modifikation '(re)enable telnet daemon' wird verarbeitet ...
Überprüfen der unterstützten Sprachen ... OK
Soll die Modifikation '(re)enable telnet daemon' mit folgender Beschreibung
Erstellen eines Symlinks, um die Ausführung des telnetd-Applets der
Busybox wieder zu ermöglicen
angewendet werden ? (j/N) j
Überprüfen der Voraussetzungen für die Modifikation ... OK
Modifikation wird ausgeführt ... OK
Überprüfen des Erfolgs der Modifikation ... OK

Die Modifikation '(re)enable telnet daemon' wurde angewendet, Fehlercode = 0.

Die Modifikation 'enable custom profile extension' wird verarbeitet ...
Überprüfen der unterstützten Sprachen ... OK
Soll die Modifikation 'enable custom profile extension' mit folgender Beschreibung
/etc/profile modifizieren, um die Kommandos in /var/custom/profile am Ende
zusätzlich auszuführen, wenn diese Datei existiert
angewendet werden ? (j/N) N

Das ist die letzte Chance zum manuellen Modifizieren des Dateisystems in /var/media/ftp/1447338623/squashfs-root.

Die Eingabetaste drücken, um mit dem Packen des neuen root-Dateisystems zu beginnen
oder 'q' eingeben, um die letzte Möglichkeit zum Abbruch zu nutzen :

Packen des neuen root-Dateisystems ... /

Die Optionen wie oben gezeigt wählen und mit Enter quittieren. Danach einen reboot durchführen.

Damit einem nicht wieder der Netzbetreiber heimlich updates einspielen kann empfiehlt es sich den tr-069 zu deaktivieren. Dies kann einfach per ctlmgr_ctl erreicht werden:

Bei dem Mod kann auch die debug.cfg wieder reaktiviert werden.
Danach kann die debug.cfg wieder wie gewohnt mit nvi editiert werden:

Falls man fhem mit https auf FRITZ!OS 6.20 betreiben möchte, kommt es beim Starten zu folgendem Fehler:

weil AVM die OpenSSL von 0.9.8j auf 1.0.1h angehoben hat.

Ein Workaround ist die Verwendung der alten Libraries:

Auch können die fehlenden Programme netcat und socat über eine unbeschnittene Busybox nachinstalliert werden:

Danach ist netcat wieder verfügbar unter:

FritzBox zu Mitternacht neu starten

Bild

Wer wie ich unter Verbindungsproblemen seiner FritzBox und UMTS leidet, kann versuchen sie jede Nacht neu zu starten. Folgenden Abschnitt einfach per nvi in die debug.cfg einfügen:

nvi /var/flash/debug.cfg

Neuer Tag, neues Glück!

Klingelerkennung mit FHEM und 1-wire

Die Vorteile einer solchen Schaltung sind z.B.:

  • man kann sich per PushOver informieren lassen wenn es klingelt, auch wenn man auf dem Balkon sitzt und sonst die Klingel nicht hören würde
  • man weiß ob der Paketzusteller wirklich versucht hat das Paket zuzustellen!?
  • mann kann zu bestimmten Zeiten die Klingel einfach vollkommen deaktivieren, z.B. in der Nacht, wenn das Oktoberfest tobt 🙂

Hier ein Schaltplan zur Klingelsignalerkennung an einer 8V Wechselstromklingel mit 1-Wire:

Klingelerkennung Schaltplan

In Fhem eingebunden schaut das ganze dann so aus:

Per PushOver kann man sich dann bequem über Klingelevents informieren lassen:

FritzBox debug.cfg editieren

Wenn man Befehle bei jedem FritzBox Start ausführen mag z.B. eigene Programme nachinstallieren, FritzLoad! oder FHEM kann man dies in der debug.cfg tun.

Das geht ganz einfach mit dem vi Derivat nvi:

dann vi typisch:

  • i für insert
  • dd um Zeile zu löschen
  • esc+:q zum abbrechen
  • esc+:wq zum speichern

Um zum Beispiel FHEM als root zu starten müsste die Zeile:

/var/InternerSpeicher/fhem/startfhemAsRoot

eingefügt werden. Das Ganze geht allerdings auch noch einfacher als One-Liner: