2213746

Fritzbox mit Dect: So schalten Sie Stromabnehmer mit dem Raspberry Pi

16.08.2016 | 12:12 Uhr |

Die Fritzbox ist weit mehr als nur ein DSL-Router. Sie können damit auch Geräte ein- und ausschalten sowie Energieverbrauch und Temperatur messen.

Die Fritzbox kann zusätzliche Geräte steuern, die Sie als Zubehör erwerben können. Die Steuerung funktioniert über die Browseroberfläche der Fritzbox und mit Apps fürs Smartphone. Die Geräte lassen sich nach einem Zeitplan schalten, etwa jeden Tag um eine bestimmte Uhrzeit oder anhängig von der Leistungsaufnahme. Da AVM die Spezifikationen für die Webschnittstelle der Fritzbox veröffentlicht hat, lassen sich Smart-Home-Geräte auch per Script auf der Kommandozeile oder über einen eigenen Webserver steuern. Dieser Artikel bietet Beispiele dafür, die Sie auf einem Raspberry Pi oder einem anderen Linux-PC ausprobieren können. Sie müssen die Befehlszeilen nicht abtippen. Über www.pcwelt.de/82Ecau laden Sie das ZIP-Archiv „SmartFritz.zip“ herunter. Es enthält das Bash-Script „smart_fritz_terminal.sh“ für die Kommandozeile und „smart_fritz_server.sh“ für den Webserver.

Lesetipp: Fritzbox-Hacks: Versteckte Funktionen freischalten

1. Smart-Home-Geräte für die Fritzbox

Zurzeit gibt es den Schalter Fritz Dect 200 und den Heizkörperregler Comet Dect als Zubehör für die Fritzbox. Bei der Fritz Dect 200 handelt es sich um eine Steckdose, die in eine freie Steckdose gesteckt wird. Das Gerät, das Sie mit der Fritz Dect 200 steuern wollen, schließen Sie an die Fritz Dect 200 an. Elektrische Geräte bis zu 2300 Watt/10 Ampere dürfen eingeschaltet werden. Aufgrund seiner Bauform verdeckt die Fritz Dect 200 die benachbarte Steckdose in einer Steckdosenleiste. Bis zu zehn Fritz Dect 200 sind gleichzeitig an Fritzbox-Modellen mit Dect einsetzbar.

Fritz Dect 200 erfordert eine Fritzbox mit Fritz-OS ab Version 5.50. Comet Dect benötigt Fritz-OS ab Version 6.35. Welche Version des Betriebssystems auf Ihrer Fritzbox installiert ist, sehen Sie auf der Startseite, wenn Sie im Browser http://fritz.box aufrufen und sich beim Router anmelden. Ist ein älteres System installiert, gehen Sie auf „System -> Update“ und klicken auf „Neues FRITZ!OS suchen“. Wenn ein Update verfügbar ist, installieren Sie es.

Hinweis: Wenn Ihr Internetanbieter die Fritzbox zur Verfügung gestellt hat, gibt es möglicherweise keine Updatefunktion. Die Auslieferung von Updates erfolgt dann automatisch, sobald der Anbieter die neue Fritz-OS-Version getestet und bereitgestellt hat.

Die angemeldeten Geräte tauchen unter „Heimnetz -> Smart Home“ auf.
Vergrößern Die angemeldeten Geräte tauchen unter „Heimnetz -> Smart Home“ auf.

2. Geräte bei der Fritzbox anmelden

Um eine Fritz Dect 200 mit der Fritzbox zu koppeln, stecken Sie die Fritz Dect 200 in eine Steckdose möglichst in der Nähe der Fritzbox, damit Sie während des Drückens der Dect-Taste die Fritz Dect 200 im Blick haben. Drücken Sie dann die Dect-Taste auf der Fritzbox. Dafür haben Sie zwei Minuten Zeit. Nach etwa zehn Sekunden sollte die Fritz Dect 200 an der Fritzbox registriert sein. Aktualisieren Sie dazu die Ansicht im Web-Front-End der Fritzbox – jetzt sollten Sie die Fritz Dect 200 sehen. Nun können Sie die Fritz Dect 200 in die Steckdose stecken, in der sie künftig ihre Dienste verrichten soll.

Comet Dect funktioniert ähnlich. Legen Sie die Batterien in das Gerät ein und drücken Sie dann an der Fritzbox innerhalb von 90 Sekunden die Dect-Taste. Halten Sie die Taste gedrückt, bis an der Fritzbox die Leuchtdiode „Info“ blinkt. Die Funkverbindung ist hergestellt, wenn das Funksymbol im Display des Comet Dect dauerhaft leuchtet.

Das Passwort geht bei der Fritzbox-Anmeldung nicht über das Netz.
Vergrößern Das Passwort geht bei der Fritzbox-Anmeldung nicht über das Netz.

Auch interessant: Die besten Gratis-Downloads für Ihre Fritzbox

3. Bei der Fritzbox per Script anmelden

Damit sich eine Fritzbox über ein Script oder Programm steuern lässt, muss die Anmeldung mit Benutzernamen und Passwort aktiviert sein. Sollte das noch nicht der Fall sein, rufen Sie die Fritzbox-Oberfläche im Browser auf und gehen auf „System -> FRITZ!Box-Benutzer“.

Über die Schaltfläche „Benutzer hinzufügen“ legen Sie einen neuen Benutzer an. Gehen Sie auf die Registerkarte „Anmeldung im Heimnetz“ und aktivieren Sie die Option „Anmeldung mit FRITZ!Box-Benutzernamen und Kennwort“. Gehen Sie ferner auf „Internet -> Freigaben“ und klicken Sie auf die Registerkarte „FRITZ!Box-Dienste“. Merken Sie sich den Wert, der hinter „TCP-Port für HTTPS“ eingetragen ist, beispielsweise „444“. Hinter „Heimnetzadresse Ihrer FRITZ!Box“ sehen Sie die Adressen, über die die Fritzbox erreichbar ist, etwa „https://fritz.box:444“.

Wir verwenden diesen Wert für die folgenden Beispiele. Ist Ihre Fritzbox für einen anderen Port konfiguriert, passen Sie die Beispiele entsprechend an. Beim ersten Aufruf der URL im Browser erhalten Sie eine Zertifikatswarnung. In Firefox klicken Sie auf „Erweitert“, dann auf „Ausnahme hinzufügen“ und „Sicherheits-Ausnameregel bestätigen“.

Das Anmeldeverfahren: Aus Sicherheitsgründen verwendet die Fritzbox bei der Anmeldung ein spezielles Verfahren, bei dem das Passwort nicht direkt übertragen wird. Die Dokumentation von AVM inklusive Beispielcode können Sie über www.pcwelt.de/session-ID abrufen. Der Aufruf der URL https://fritz.box:444/login_sid.lua liefert einen zufälligen Challenge-Wert. Aus diesem muss für die Antwort (Challenge-Response-Verfahren) zusammen mit dem Passwort ein Hashwert gebildet werden. In einem Bashscript funktioniert das mit den folgenden zehn Zeilen:

fbox="https://fritz.box:444"
USER="MeinBenutzername"
PASSWD="MeinPasswort"
SID=$(curl --insecure -s $fbox/login_sid.lua | sed 's/.*<SID>\(.*\)<\/SID>.*/\1/')
challenge=$(curl --insecure -s $fbox/login_sid.lua | grep -o "<Challenge>[a-z0-9]\{8\}" | cut -d'>' -f 2)
CPSTR="$challenge-$PASSWD"
hash=`echo -n $CPSTR | iconv -f ISO8859-1 -t UTF-16LE | md5sum -b | awk '{print substr($0,1,32)}'`
RESPONSE="$challenge-$hash"
POSTDATA="?username=$USER&response=$RESPONSE"
SID=$(curl --insecure --data "$POSTDATA" -s $fbox/login_sid.lua | sed 's/.*<SID>\(.*\)<\/SID>.*/\1/')

Die Variable „$SID“ enthält anschließend eine Zeichenkette, die für alle weiteren Anfragen an die Fritzbox verwendet wird. Damit das Script funktioniert, müssen Curl, Sed, Awk, Iconv, Grep und Md5sum auf dem PC installiert sein. Das ist bei Raspbian auf dem Raspberry Pi Standard. Bei anderen Systemen fehlt oft Curl, das Sie über Paketverwaltung nachinstallieren.

Lesetipp: Einfache Raspberry-Pi-Mini-Projekte

4. Smart-Home-Geräte per Script steuern

Die Befehle, über die sich Smart Home steuern lässt, hat AVM dokumentiert ( www.pcwelt.de/ahahttp ). Zuerst bringen Sie in Erfahrung, welche Smart-Home-Geräte vorhanden sind und welche ID diese besitzen:

CURLCMD="curl --insecure -s $fbox/webservices/homeautoswitch.lua"
RESULT=$($CURLCMD"?sid=$SID&switchcmd=getswitchlist")
echo AIN-Liste: $RESULT

„$SID“ ist die zuvor ermittelte ID für die Authentifizierung. Das Ergebnis enthält eine durch Komma getrennte Liste mit den IDs der Aktoren, wie die Smart-Home-Geräte im AVM-Sprachgebrauch heißen.

Mit den folgenden Kommandos lässt sich ermitteln, ob ein Aktor aktiv und wie sein Status ist:

CONNECTED=$($CURLCMD"?sid=$SID&ain=087610272493&switchcmd=getswitchpresent")
echo Verbunden: $CONNECTED
STATE=$($CURLCMD"?sid=$SID&ain=087610272493&switchcmd=getswitchstate")
echo Status: $STATE

Den Wert hinter „&ain=“ ersetzen Sie durch eine von Ihnen ermittelte Aktoren-ID. Ist ein Gerät verbunden, enthält „$CONNECTED“ den Wert „1“, andernfalls „0“. Ist der Schalter eingeschaltet, liefert „$STATE“ den Wert „1“, ist er ausgeschaltet, erhalten Sie den Wert „0“.

Zum Einschalten dient dieser Befehl

 STATE=$($CURLCMD"?sid=$SID&ain=087610272493&switchcmd=setswitchon")

und zum Ausschalten dieser:

 STATE=$($CURLCMD"?sid=$SID&ain=087610272493&switchcmd=setswitchoff")

Außerdem gibt es noch „setswitchtoggle“, mit dem Sie den Zustand einfach umschalten. „getswitchpower“ meldet die aktuelle Leistungsaufnahme in mW. Sie können diesen Wert nutzen, um ein Gerät automatisch abzuschalten, sobald es nur noch wenig Leistung benötigt, so etwa einen Fernseher im Standbymodus oder eine Waschmaschine, nachdem das Waschprogramm beendet ist.

In die Datei „smart_fritz_terminal.sh“ tragen Sie die Adresse Ihrer Fritzbox ein.
Vergrößern In die Datei „smart_fritz_terminal.sh“ tragen Sie die Adresse Ihrer Fritzbox ein.

Script anpassen: Das Script „smart_fritz_terminal.sh“ ( www.pcwelt.de/82Ecau ) müssen Sie zuerst in einem Editor öffnen. Passen Sie am Anfang des Scripts die Werte für die Fritzbox-URL, das Passwort und den Benutzernamen an. Wenn Sie keine SSL-Verbindung zur Fritzbox nutzen, ändern Sie

INSECURE="--insecure"
auf
INSECURE=""

Der Parameter „--insecure“ ist bei HTTPS-Seiten nötig, damit Curl das selbst signierte SSL-Zertifikat akzeptiert. Starten Sie dann das Script im aktuellen Verzeichnis:

./smart_fritz_terminal.sh

Es gibt die gefundenen Aktoren-IDs aus, ferner deren Status, die aktuelle Leistungsaufnahme, die bisherige Gesamtleistungsaufnahme und die Temperatur.

Über folgende Befehlszeile schalten Sie das erste gefundene Gerät aus:

./smart_fritz_terminal.sh 1 off

Ersetzen Sie „off“ durch „on“, um es wieder einzuschalten. „toggle“ schaltet den Zustand um.

CGI-Scripts liegen bei Debian- und Ubuntu-Systemen im Ordner „/usr/lib/cgi-bin“.
Vergrößern CGI-Scripts liegen bei Debian- und Ubuntu-Systemen im Ordner „/usr/lib/cgi-bin“.

5. Geräte über einen Webserver ansprechen

Ein etwas modifiziertes Bashscript lässt sich auch über einen Webserver steuern. Voraussetzung ist, dass Apache 2 installiert ist. Sollte es noch nicht vorhanden sein, verwenden Sie folgende drei Befehlszeilen:

sudo apt-get install apache2
sudo a2enmod cgi
sudo service apache2 restart

Öffnen Sie das Script „smart_fritz_server.sh“ ( www.pcwelt.de/82Ecau ) in einem Editor. Passen Sie es an, wie in -> Punkt 4 beschrieben. Kopieren Sie (als root) die Datei in den Ordner „/usr/lib/cgi-bin“. Achten Sie darauf, dass die Datei ausführbar ist, und setzen Sie die Rechte wie folgt:

sudo chmod 755 /usr/lib/cgi-bin/smart_fritz_server.sh

Rufen Sie im Browser die Adresse http://raspberrypi.local/cgi-bin/smart_fritz_server.sh auf. Ändern Sie die URL, wenn Ihr Raspberry Pi einen anderen Hostnamen hat, oder verwenden Sie die IP-Adresse. Das Script „smart_fritz_server.sh“ gibt die gleichen Informationen aus wie das Script fürs Terminalfenster.

Auch interessant: Mini-PC-Überblick - Die Alternativen zum Raspberry Pi

Neben den jeweiligen Actor-IDs finden Sie die Schaltfläche „Umschalten“, über die Sie eine Steckdose ein- oder ausschalten. Danach können Sie auf „Seite neu laden“ klicken, um die aktuellen Werte auszulesen.

0 Kommentare zu diesem Artikel
2213746