Fritzbox, Node-RED und homee

Gäste-WLAN an- und ausschalten, eine Benachrichtigung über eingehende Anrufe oder eine Anwesenheitserkennung. Mit Node-RED und homee lässt sich eine FritzBox noch etwas smarter machen.

Installation

Für diese Funktionen benötigen wir NodeJS und Node-RED. Eine detaillierte Installationsanleitung findest Du im Post Virtuelle Geräte in homee. Außerdem sollte Dein homee mindestens Version 2.15 haben.

Zusätzlich benötigen wir zwei Plugins für Node-RED die wir mit folgenden Befehlen installieren:

cd ~/.node-red
npm install node-red-contrib-fritzbox-presence
npm install node-red-contrib-fritz

Damit die neuen Plugins in Node-RED zur Verfügung stehen, starten wir Node-RED mit sudo /etc/init.d/node-red restart neu. Alternativ kann auch der ganze Raspberry Pi neu gestartet werden. Das FritzBox Plugin nutzt zur Kommunikation die TR064 Schnittstelle die wir zuerst aktivieren müssen.

Aktivierung der TR064 API der FritzBox
Die Aktivierung kann über ein angeschlossenes Telefon erfolgen. Damit rufen wir die Ziffernfolge #96*5* an. Zum Deaktivieren kann die Folge #96*4* verwendet werden.

Weitere Informationen zur TR064 Schnittstelle gibt es hier von AVM.

Steuerung des Gäste-WLAN

Das Ein- und Ausschalten des Gäste-WLAN über die Oberfläche der FritzBox ist umständlich und lässt nur eine eingeschränkte Automation zu. Einfacher ist ein Schalten mit Hilfe eines virtuellen Geräts in homee. Der Schaltzustand des Gäste-WLAN kann dann auch als Auslöser für Homeegramme dienen. Genauso kann das Gäste-WLAN über ein Homeegramm ein und ausgeschaltet werden.

Flow zum Schalten des Gäste WLAN

Für den Flow brauchen wir ein virtuelles WeMo Gerät, eine Funktion und den Fritz!Box Node. Das virtuelle WeMo Gerät konfigurieren wir mit den Payloads on und off.

WeMo Konfiguration

Die Funktion sieht dann so aus

return {payload: {
        NewEnable: msg.payload === 'on' ? 1 : 0
    }
};

Jetzt muss noch der Fritz Node konfiguriert werden. Mit einem Doppelklick auf den Node kommen wir in das Konfigurationsmenü und legen dort eine neue Fritz Box Konfiguration an.

Fritz Node Konfiguration

Im Anschluss fragen wir die Services über den Button mit der Lupe ab. Je nach Modell der FritzBox kann das ein wenig dauern. Wenn nach einer Minute noch nichts im Dropdown Feld zu finden ist, einfach noch mal auf die Lupe klicken. Über die Liste wählen wir dann urn:dslforum-org:service:WLANConfiguration:3 aus.

Die gleiche Prozedur wiederholen wir beim Feld Actions. Dort wählen wir SetEnable aus der Liste.

Fritz Node Konfiguration 2

Jetzt kann derSchalter wie gewohnt in homee integriert oder mit einer anderen Software genutzt werden.

Benachrichtigung bei eingehenden Anrufen

Als nächstes erstellen wir einen Flow, der uns bei eingehenden Anrufen benachrichtigt. Dazu benötigen wir den Callmonitor Node, eine Funktion und einen Node für die Benachrichtigung. Ich verwende hier Slack, da bei einer Push-Nachricht über homee aktuelle nur ein statischer Text und nicht die Rufnummer verwendet werden kann. Alternativ kann aber auch auf eine Benachrichtigung per E-Mail zurückgegriffen werden.

Flow zur Benachrichtigung über eingehende Anrufe via Slack

Der Callmonitor ist unser Ausgangspunkt. Im Konfigurationsmenü wählen wir unsere bereits erstellte FritzBox aus.

Immer wenn ein Anruf eingeht, wird eine Nachricht erzeugt und an den nächsten Node weitergegeben. Neben eingehenden Anrufen werden auch nicht angenommene Anrufe gemeldet. Um nur eine Benachrichtigung bei eingehenden Anrufen und eine besser lesbare Variante zu erhalten, fügen wir folgende Funktion in den Funktions Node ein.

if (msg.payload.type !== 'INBOUND') return;

return {
    payload: 'Eingehender Anruf von ' + msg.payload.caller
};

Die Funktion sorgt dafür, dass der Flow nur bei eingehenden Anrufen fortgesetzt und der Text "Eingehender Anruf von: [Rufnummer]" weitergegeben wird. Ich gebe die Nachricht z.B. an einen Slack Channel weiter.

Slack Nachricht bei eingehendem Anruf

Wer auf die Anzeige der Rufnummer verzichten kann, kann mit einem Request Node (siehe nächstes Beispiel) auch ein Homeegramm über einen Webhook auslösen. Dieses Homeegramm kann dann z.B. eine Push-Nachricht an die Nutzer senden oder eine bestimmte Lampe einschalten.

Anwesenheitserkennung für beliebig viele Personen

Last but not least wollen wir uns noch eine automatische Anwesenheitserkennung über die Anwesenheit des Smartphones bauen. Dazu fragen wir die an der Fritzbox angemeldeten Geräte in einem definierten Intervall ab. Über einen Abgleich der eindeutigen MAC-Adresse der Geräte, kann der Anwesenheitsstatus ermittelt werden.

Flow zur Anwesenheitserkennung mit beliebig vielen Geräten

Wir verwenden hier den FritzBox Presence Node, eine Funktion, einen Switch und zwei Requests. Als Auslöser dient hier ein Zeitintervall, bei mir 5 Minuten. Das lässt sich aber natürlich beliebig anpassen.

Flow zur Anwesenheitserkennung mit beliebig vielen Geräten

Die Funktion zur Überprüfung, ob mindestens ein Gerät angemeldet ist, kopieren wir in den Funktions Node. Ganz oben müssen die MAC Adressen der zu überprüfenden Geräte abgeändert werden. Die MAC Adressen lassen sich z.B. über das Webinterface der Fritzbox (Heimnetzwerk -> Geräte) auslesen.

const devices = ["AB:CD:5E:7F:01:82", "DE:FG:1A:78:D3:82"];

let state = false;

msg.payload.forEach(function(device) {
    if (devices.indexOf(device.mac) > -1) {
        state = true;
    }
})

return {payload: state};

Jetzt muss die Nachricht noch an homee übermittelt werden. Dazu gibt es zwei Möglichkeiten. Variante 1 ist das Auslösen eines Webhooks. Als Alternative kann auch mein Node-RED Plugin für homee genutzt werden. Ich werde hier nur die erste Variante beschreiben.

Wir erstellen zunächst zwei Homeegramme. Eins für den Status Anwesend, das zweite für den Status Abwesend. Als Auslöser verwenden wir jeweils einen Webhook und als Aktion verändern wir den Modus in Zuhause bzw. Abwesend. Damit der Modus Urlaub nicht durch den Status Abwesend verändert wird, legen wir im zweiten Homeegramm eine zusätzliche Bedingung an.

img/blog/node-red-fritz-09-preview.jpg" alt="Homeegramm zum Setzen des Status Abwesend

Zurück in Node-RED benötigen wir zunächst einen Switch, der je nach Payload des Vorgängers einen anderen Ausgang benutzt.

Konfigurtion des Switch Nodes

Für das Auslösen des Webhooks brauchen wir dann jeweils einen HTTP Request Node, den wir wie im Bild konfigurieren. Im Feld URL fügen wir unseren Webhook aus homee ein.

Konfigurtion des Switch Nodes

Nach dem Deployen des Flows wird nun alle fünf Minuten der Anwesenheitsstatus überprüft und automatisch an homee übermittelt.

Share this post!

Das könnte dich auch interessieren

Node-RED mit Docker auf der Synology Diskstation

27.11.2018

Node-RED lässt sich auf zwei verschiedenen Wegen auf einer Synology Diskstation betreiben. Neben der manuellen Installation über SSH kann Node-RED auch via Docker auf der Diskstation laufen.

weiterlesen

So geht’s: Harmony Hub mit Philips Hue verbinden

25.11.2018

Ein Zuhause wird erst dann richtig smart, wenn man nicht mehr manuell eingreifen muss. Ein Beispiel dafür ist eine automatisierte Beleuchtungssteuerung bei einem Filmabend.

weiterlesen

Raspberry Pi absichern

06.11.2018

Wer zuhause einen Raspberry Pi einsetzt, sollte sich auch Gedanken über die Absicherung machen. Gerade wenn der Raspberry als Dienstleister im Hintergrund läuft, geraten regelmäßige Updates und andere Sicherheitsmaßnahmen oft in Vergessenheit.

weiterlesen