Ich habe neulich an dieser Stelle beschrieben, wie man mit dem Google Home 433 MHz-Steckdosen zum Laufen bringt und sie so mit der Sprache steuern kann. Aus den Kommentaren geht hervor, dass es einfach gehen sollte. Ich habe es inzwischen auch ohne Zwischenserver gelöst, das bedeutet, dass die Webhook bei ifttt.com direkt auf dem Raspberry die Info auslöst.
Einige Schritte sind gleich wie in der anderen Anleitung, andere unterscheiden sich. Damit man nicht zwischen den Schritten hin- und her wechseln muss, beschreibe ich hier den ganzen Ablauf, setze aber die identischen Stellen als Zitat. So sollte allen geholfen sein, nämlich sowohl den Lesern des „alten“ Kapitels, als auch denen, die komplett von Vorne beginnen. Und los geht es:
Vorbereitungen auf dem Raspberry zu Hause
Da der Raspberry bei Euch zu Hause in diesem Beispiel die Befehle direkt erhalten soll, muss er aus dem Internet erreichbar sein und es muss ein Webserver (apache) darauf laufen. Diese Schritte führen wir als erstes durch.
Webserver auf dem Raspberry installieren
Dies geht am einfachsten über die Kommandozeile des Raspberry. Wir benötigen einen Webserver, der auch PHP beherrscht. Alternativ kann man es natürlich auch mit einer anderen, beliebigen Skriptsprache machen. Die Skripte später müssen dann nur in die jeweilige Sprache angepasst werden. Als Webserver nehmen wir den weitverbreiteten Server „Apache2“ und das entsprechende PHP-Modul. Es wird über folgenden Befehl installiert:
sudo apt-get update sudo apt-get install apache2 php7
Dies installiert den Webserver und PHP. Mit dem Aufruf der IP-Adresse des Raspberry im eigenen Netz sollte nun ein Apache zu sehen sein. Ungefähr so:
Raspberry Pi von außen erreichbar machen
sudo apt-get update sudo apt-get upgrade
Damit ihr immer unter der gleichen Adresse erreichbar seid, benötigt ihr einen Dienst wie zum Beispiel dyndns. Dieser sorgt dafür, dass ihr immer über eine Namensadresse trotzdem auf eurem Gerät landet, auch wenn sich eure IP-Adresse ändert. Eine genaue Beschreibung, wie ihr dyndns auf dem Raspberry einsetzen könnt, findet ihr bei raspberry.tips.
Der andere, wichtige Schritt ist, dass die Anfragen, die bei eurem Router ankommen auch an den Raspberry weitergeleitet werden. Das geschieht über Port-Forwarding. Ich gehe davon aus, dass ihr die IP-Adresse von eurem Raspberry kennt und beschreibe die Einstellung jetzt für Horizon von UnityMedia. Wie man es auf einer Fritz Box einrichtet, beschreibt auch raspberry.tips sehr gut. Bei Horiton meldet ihr euch im Admin-Interface an. Meistens ist das unter http://192.168.192.1 zu erreichen. Dort klickt ihr auf „Fortgrschritten“ (oben) und „Weiterleitung“ (links im Menü). Nun könnt ihr Weiterleitungen mit „Neue Zeile hinzufügen“ einrichten. Wenn alles bei Standartd-Ports bleiben soll, sollte es so aussehen:
Steuerbefehle über ifttt.com schicken
ifttt.com bietet die Möglichkeit verschiedene Schnittstellen miteinander zu verbinden. Auch der Google Assistant steht dort inzwischen zur Verfügung. Hier kann man Sprachbefehle hinterlegen und sie hinterher mit anderen Schnittstellen kombinieren. Für die Steuerung der Steckdosen habe ich folgendes Beispiel angelegt:
Wie man schon in der Konfiguration sehen kann, ist die Einstellung sehr leicht: man gibt an, auf welchen Satz hin Google Home reagieren soll. Das schöne ist: im Gegensatz zu Amazon Echo muss man keinen Skillnamen vorher sagen. Eigene Sätze werden einfach in das System integriert, als ob sie von Google selbst kommen. Entsprechend habe ich hinterlegt „Wohnzimmerlicht an“. ifttt.com legt diese Aussage im Google Assistant an. Das ist dann auch schon der erste Teil der Schnittstellenbrücke. Die zweite ist nun die Brücke zur Webschnittstelle aus dem obigen Artikel. Diese realisiert man als „Webhook“. Eine Webhook ist nichts anderes, als ein URL-Aufruf. Ich übergebe also an meinen Webserver per URL-Aufruf den Status, welche Steckdosennummer geschaltet werden soll und ob diese ein- oder ausgeschaltet werden soll. Also zum Beispiel so:
http://www.dyndns.org/input.php?steckdose=1&zustand=1
Statt der Steckdosennummer kann natürlich auch eine Reihenfolge definiert werden o.ä. Der Zustand ist an oder aus, als 1 oder 0. So kann man nun verschiedene Aussagen mit verschiedenen Schaltfolgen hinterlegen. Fehlt nur noch der letzte Schritt: das Skript, dass mit den übergebenen Informationen die Aktion zu Hause mit dem Funkmodul auslöst.
Mit PHP die Steckdosen steuern
Es geht nun also um die Datei „input.php“ von oben. Diese muss auf dem Raspberry unter /var/www/html/ abgelegt werden. Benutzt dafür euren Libelingseditor. Wichtig ist, dass die Datei genau so heißen muss, wie bei der dyndns-Adresse bei ifttt.com angegeben. Meine Datei sieht dann wie folgt aus:
<?php
$kommando = $_GET[steckdose];
$status = $_GET[status];
// Schaltet alle Steckdosen aus
if($_GET[kommando]=="aus") {
exec("/home/pi/raspberry-remote/send 10111 1 0");
sleep(1);
exec("/home/pi/raspberry-remote/send 10111 2 0");
sleep(1);
exec("/home/pi/raspberry-remote/send 10111 3 0");
sleep(1);
exec("/home/pi/raspberry-remote/send 10111 4 0");
sleep(1);
exec("/home/pi/raspberry-remote/send 10011 4 0");
}
// Schaltet alle Steckdosen im Wohnzimmer an
if($_GET[kommando]=="whzan") {
exec("/home/pi/raspberry-remote/send 10111 3 1");
sleep(1);
exec("/home/pi/raspberry-remote/send 10111 4 1");
}
// Schaltet alle Steckdosen an
if($_GET[kommando]=="allesan") {
exec("/home/pi/raspberry-remote/send 10111 1 1");
sleep(1);
exec("/home/pi/raspberry-remote/send 10111 2 1");
sleep(1);
exec("/home/pi/raspberry-remote/send 10111 3 1");
sleep(1);
exec("/home/pi/raspberry-remote/send 10111 4 1");
}
// Schaltet die Lichterkette an
if($_GET[kommando]=="lichterkette") {
exec("/home/pi/raspberry-remote/send 10011 4 $status");
}
// Steuerung komplett über ifttt.com
if($kommando>0) {
exec("/home/pi/raspberry-remote/send 10111 $kommando $status");
echo "/home/pi/raspberry-remote/send 10111 $kommando $status";}
?>
Besondere Infos: /home/pi/raspberry-remote/send Das ist der Aufruf zum Programm zur Steuerung der Steckdosen. Das kann bei euch an einer anderen Stelle liegen 10111 Hierbei handelt es sich um den Steckdosencode. Hier kann man sogar mehrere Steckdosen durch unterschiedliche Codes steuern
Verbesserungspotential
Wer die Sorge hat, dass Fremde, die die Adresse zu ihrem Gerät kennen, das Licht steuern könnten, können auch ein Passwort mit übergeben, auf das geprüft wird. Alternativ kann auch anhand des DNS-Namens der eingehenden URL überprüft werden, ob es sich um eine Webhook von ifttt.com handelt. Trotzdem nochmal der Hinweis: es sollten damit keine Geräte gesteuert werden, die gefährlich sein könnten, wenn sie unbeaufsichtigt eingeschaltet werden, wie zum Beispiel Wasserkocher, Herdplatten etc.