Hinweis: Ich habe hier ein neues Tutorial erstellt, das ebenfalls die Sprachsteuerung per Android-Gerät behandelt. Dieses ist meiner Meinung nach einsteigerfreundlicher, da eine bewährte Sprachsteuerungsapp (AIVC) für Android-Geräte eingesetzt wird und auf dem Raspberry Pi zum Webinterface keine weitere Software installiert werden muss. Zudem antwortet und schaltet die App zügiger, als die hier vorgestellte. Dennoch bleibt dieses Tutorial und Projekt natürlich weiter auf der Seite.


Hallo liebe Leserinnen und Leser!

Heute möchte ich euch kurz zeigen, wie ihr das vorangegangene Tutorial zum Steuern von Funksteckdosen über den Raspberry Pi um eine Möglichkeit der Steuerung über Sprachanweisung via Android-Smartphone erweitern könnt. Dazu braucht ihr die folgenden Dateien:

Update (8.5.2014): Wie ich vorhin festgestellt habe, hat sich am Google-Dienst etwas verändert. Wer also noch den alten Server-Teil auf dem Raspberry Pi installiert hat, sollte die Installation durch die „VoiceControl.zip“-Dateien ersetzen (Vor dem Überschreiben der detect.php ein Backup anlegen, um die eigenen Befehle zu sichern bzw. in der Datei das entsprechende Wort austauschen)

Update (14.5.2014): Paul hat mich gerade darauf hingewiesen (danke dafür!) dass der neu eingetragene Key für die Speech-API von Google bereits wieder gesperrt wurde. Einen „Universalkey“ zu nutzen ist also mit der V2 der API ein Katz-und-Maus-Spiel mit Google. Wer auf Nummer sicher gehen will, sollte sich einen API-Key generieren lassen von Google. Dazu ist ein Google-Account notwendig. Wie das geht wird z.B. hier beschrieben. Mit dem Key könnt ihr bis zu 50 Abfragen pro Tag ganz offiziell machen. Den Key ganz einfach in in die speechdetect.sh bei „&key=“ eintragen.

apkZudem sollte bereits ein Apache-Server mit PHP auf eurem Raspberry Pi eingerichtet sein. Zusätzlich müsst ihr noch ffmpeg installieren via
sudo apt-get install ffmpeg
Als nächstes kopiert ihr den Ordner (VoiceControl) aus der .zip-Datei in das Verzeichnis /var/www auf eurem Raspberry Pi. Der Ordnername muss unbedingt beibehalten werden, damit das spätere Zusammenspiel mit der Android-App auch funktioniert. In die Datei detect.php kommen später die Befehle, die über die Android-App ausgeführt werden sollen. Fürs erste könnt ihr die Datei allerdings noch unbearbeitet lassen, da schon Beispielbefehle integriert wurden mit denen ihr später überprüfen könnt, ob eure Konfiguration wie gewünscht arbeitet. Jetzt solltet ihr noch die Rechte für den Ordner VoiceControl und die darin enthaltenen Unterordner und Dateien anpassen. Das erfolgt z.B. über den chown-Befehl oder über chmod. Sollte euer Raspberry Pi (so wie meiner auch) nicht von außerhalb eures Netzwerkes erreichbar sein, müsst ihr euch meiner Meinung nach keine großen Gedanken um die Zugriffsrechte machen und könnt einfach über cd /var/www/VoiceControl in den Ordner wechseln und dann über chmod 777 * -R die Lese-/Schreibrechte setzen. Sollte euer Raspberry Pi auch von außen erreichbar sein, also z.B. durch eine entsprechende Portweiterleitung im Router, solltet ihr euch mehr Gedanken um die Rechte machen.

Das war es vorerst mit den Vorbereitungen auf dem Raspberry Pi. Nun könnt ihr euer Android-Smartphone zur Hand nehmen und die oben angebotene .apk-Datei installieren. Diese ist nur wenige kb groß und sollte schnell installiert sein. Voice Control StartUm die App mit eurem Raspberry nutzen zu können müsst ihr nun erst einmal über die Einstellungen (die drei Punkte oben in der Leiste antippen -> Einstellungen)Voice Control Menudie IP-Adresse eures Raspberry Pi eingeben.

Voice Control EinstellungenIst dies geschehen, könnt ihr auf den Button „Tippen zum Sprechen“ tippen und „Hallo Welt“ sagen, sobald sich der Text zu „Höre zu…“ geändert hat und sich der Kreis darunter dreht.

Voice Control - "Höre zu..."

Um den Befehl abzuschließen tippt ihr auf den Button „Höre zu…“ und die Sprachdatei wird gespeichert und an den Raspberry Pi zur weiteren Verarbeitung geschickt. Nun solltet ihr kurz warten und als (gesprochene) Antwort von eurem Android-Smartphone „Hallo du“ erhalten. Wenn das der Fall ist, habt ihr bis hierhin alles richtig gemacht. Falls es bereits hier Probleme gibt, solltet ihr zunächst mal einen Blick in das Apache-Logfile via
cat /var/log/apache2/error.log
werfen. Meist hilft das schon weiter, um etwaige Fehler in der Konfiguration zu finden.

Da der Raspberry aber auch Befehle zum Steuern von den Funksteckdosen ausführen können soll auf Sprachbefehl, sind nun weitere Schritte auf eurem Raspberry notwendig. Da die send-Befehle über sudo ausgeführt werden, müsst ihr zunächst noch sudo konfigurieren, da Apache standardmäßig vom User www-data ausgeführt wird. Gebt daher ins Terminal sudo visudo ein. Jetzt öffnet sich über einen Editor eine Datei, in der ihr unten folgendes hinzufügt:
www-data ALL=NOPASSWD: ALL
Diese Einstellung sollte wiederum nur dann so vorgenommen werden, wenn euer Raspberry nicht von außen erreichbar ist. Ansonsten solltet ihr euch mit sudo beschäftigen und den Eintrag so anpassen, dass nur der send-Befehl in der NOPASSWD-Option enthalten ist.

Sind die Änderungen an der sudoers-Datei abgeschlossen, könnt ihr nun damit beginnen, eure eigenen Sprachbefehle und send-Befehle in die Datei detect.php einzupflegen. Dazu müsst ihr natürlich erst einmal wieder in den Ordner VoiceControl wechseln, also cd /var/www/VoiceControl eingeben. Dann könnt ihr z.B. mit nano die Datei detect.php öffnen:
nano detect.php
Wie ihr seht habe ich bereits die Befehle „drucker an“ und „drucker aus“ angelegt. Hier könnt ihr eure eigenen Befehle eintragen und das in beliebiger Anzahl und Reihenfolge. Zu jedem Sprachbefehl könnt ihr über echo die jeweilige (Sprach-) Rückgabe des Android-Smartphones festlegen. In der exec-Funktion solltet ihr nun noch die jeweiligen send-Befehle anpassen, damit der Raspberry Pi auch weiß, was er über den Transmitter schicken soll. Die Syntax dazu wurde ja im vorangegangenen Tutorial ausführlich erklärt. Jetzt noch die Datei speichern und ihr könnt auf eurem Android-Smartphone beginnen, die Sprachbefehle über die App auszutesten. Falls es hier Probleme gibt und der Raspberry nichts sendet, empfiehlt es sich wieder einen Blick in das Apache-Logfile via cat /var/log/apache2/error.log zu werfen.

Sofern ihr alles richtig gemacht habt (und ich keinen wichtigen Schritt in der Anleitung vergessen habe ;)) könnt ihr fortan auch euer Android-Smartphone zur Sprachsteuerung eurer Steckdosen nutzen.

Viel Spaß (und Erfolg) damit!

 

[Update 7.12.2013] Ab sofort könnt ihr euch den Quellcode der App hier runterladen