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.
Zudem 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. Um 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)
die IP-Adresse eures Raspberry Pi eingeben.
Ist 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.
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
Hi Alexander,
Danke habs soeben zum laufen bekommen :) Bei den Korrekturvorschlägen der letzte Punkt hats gefixt. Hab nicht mehr im Kopf wie der genaue Wortlaut war, aber anscheinend ist Eclipse schlau genug Fehler beim importieren zu richten :)
Android-SDK ist natürlich drauf :D
Ich probier mal ein bisschen rum und schau ob ich das Absturz Problemchen fixen kann. Melde mich dann nochmal.
lg, couka
Hi ich bins nochmal,
testest du auf einem angeschlossenen Smartphone (bzw. welches) oder im Emulator?
lg, couka
Hi,
nutze dazu mein Nexus 4 mit Android 4.4.2. Emulator ist mir immer zu laggy ;)
Hallo,
das Nachbauen hat soweit geklappt, Teil 1 deines Tutorials funktioniert nun wunderbar. Ich habe den Fehler gemacht, nicht beim Neustart zuerst mittels „cd raspberry-remote“ in den Ordner zu wechseln und dann „sudo ./daemon &“ auszuführen.
Jetzt habe ich mir die Sprachpakete für den Raspberry heruntergeladen und auch die App Voice Control für Android. Jetzt habe ich das Problem, dass sich der Balken bei Höre zu ziemlich lange dreht und sich dabei aber nichts tut.
Habe Android 4.1 und 4.4.2, auf beiden Geräten funktioniert das anscheinend nicht. Kann es an der Androidversion liegen? Habe mit der richtigen IP-Adresse in den Einstellungen bei der VoiceControl App begonnen und dann den daemon gestartet am Raspberry.
Danke im Vorraus!
Gruß Tim
Ok, so wie ich es gerade verstanden habe, muss ich den Sprachbefehl auch beenden, dann ist das wohl normal. Dennoch wird mir in deiner Anleitung nicht klar, ob ich vorher beim Raspberry wieder den Befehl „sudo ./daemon &“ starten soll oder nicht.
Habe mal beide Varianten probiert, mit und ohne. Das Ergebnis war, dass ich am Handy und Tablet keine Antwort bekommen habe und auch in Uploads Ordner keine Datei auftaucht. Ich habe dem Ordner Voice Control alle Rechte gegeben.
Muss ich erst noch etwas am Raspberry einstellen, damit er mit der App kommuniziert?
Danke im Vorraus!
Gruß Tim
Hi Tim,
schön, dass der erste Teil schon mal funktioniert bei dir.
Zu der App: Du hast recht, um den Befehl zu beenden und an den Raspberry zu senden, muss man auf „Höre zu…“ tippen.
Der Daemon wird bei meinen Anleitungen nur vom Webinterface genutzt, die Sprachsteuerung nutzt nur den send-Befehl und hat mit dem Daemon nichts zu tun.
Liegt denn die Sprachdatei auf deinem Android-Gerät (normal im Oberordner auf SDCard etc.)?
Wenn ja, solltest du mal einen Blick in das Apache-Logfile werfen (cat /var/log/apache2/error.log). Aller Wahrscheinlichkeit nach würde es dann an einem Rechte-Problem liegen. Das kannst du auch am Raspberry selbst testen, mit dem Tipp, den ich Manuel auf der vorherigen Kommentarseite gegeben habe (Ordner habe ich hier mal angepasst):
„Gehe mal in den Ordner /var/www/VoiceControl/uploads (cd /var/www/VoiceControl/uploads) und versuch mal als User www-data dort eine Datei anzulegen. Also: Über “sudo su www-data” zu diesem Nutzer werden, dann z.B. “nano test.txt” mit beliebigem Inhalt anlegen und speichern und anschließend über “su pi” wieder zum User pi werden und über “ls -l” die Dateiliste mit Zugriffsberechtigungen ausgeben lassen. Kommt nun sowas wie “-rw-r–r– 1 www-data www-data 2 Dez 17 10:00 test.txt”?“
Hallo Alex,
danke für deine schnelle Antwort. Ich habe mal den vorherigen Kommentar von Manuel durchgelesen und deinen Tipp befolgt. Ich habe auch festgestellt, dass ich anscheinend keine Rechte über chmod 777 * -R vergeben konnte. Es kam die Fehlermeldung:“Beim Setzen der Zugriffsrechte für uploads/test.text.save: Die Operation ist nicht erlaubt“
Über sudo su konnte ich dann doch noch die Rechte vergeben, habe das auch mittels dem FileBrowser und Eigenschaften->Berechtigungen überprüft.
Ich bekomme mit dem Befehl „ls -l“ nur dann die Berechtigungen angezeigt, wenn ich vorher über cd in den Ordner gewechselt bin:
„[email protected] /var/www/VoiceControl $ ls -l
insgesamt 4
-rwxrwxrwx 1 www-data www-data 0 Sep 20 13:20 detect.php
-rwxrwxrwx 1 www-data www-data 0 Sep 20 12:09 speechdetect.sh
-rwxrwxrwx 1 www-data www-data 0 Sep 20 12:11 speech.results
-rwxrwxrwx 1 www-data www-data 0 Sep 20 12:11 testFile.txt
drwxrwxrwx 2 www-data www-data 4096 Feb 5 11:35 uploads
[email protected] /var/www/VoiceControl $ cd /var/www/VoiceControl/uploads
[email protected] /var/www/VoiceControl/uploads $ ls -l
insgesamt 8
-rwxrwxrwx 1 www-data www-data 21 Feb 5 11:28 test.txt.save
-rwxrwxrwx 1 www-data www-data 32 Feb 5 11:35 test.txt.save.1
“
Bei meinem Handy wird das voice.3gp File unter /sdcard wie beschrieben abgelegt. Das scheint also schon einmal zu funktionieren.
Was mich aber richtig stutzig macht sind die Fehlermeldungen mit dem Befehl „cat /var/log/apache2/error.log“
Da bekomme ich sehr viele PHP Fehler angezeigt, weiß aber nicht, ob das damit jetzt zusammenhängt oder normal ist:
“
[email protected] /var/www/VoiceControl $ cat /var/log/apache2/error.log
[Mon Feb 03 11:37:12 2014] [notice] Apache/2.2.22 (Debian) configured — resuming normal operations
[Mon Feb 03 11:42:04 2014] [notice] caught SIGTERM, shutting down
[Mon Feb 03 11:42:16 2014] [notice] Apache/2.2.22 (Debian) configured — resuming normal operations
[Mon Feb 03 11:43:36 2014] [notice] caught SIGTERM, shutting down
[Mon Feb 03 11:43:39 2014] [notice] Apache/2.2.22 (Debian) PHP/5.4.4-14+deb7u7 configured — resuming normal operations
[Mon Feb 03 12:45:12 2014] [notice] caught SIGTERM, shutting down
[Mon Feb 03 12:45:39 2014] [notice] Apache/2.2.22 (Debian) PHP/5.4.4-14+deb7u7 configured — resuming normal operations
[Mon Feb 03 12:45:42 2014] [notice] Apache/2.2.22 (Debian) PHP/5.4.4-14+deb7u7 configured — resuming normal operations
[Tue Feb 04 10:18:04 2014] [error] [client 192.168.1.46] File does not exist: /var/www/favicon.ico
[Tue Feb 04 10:20:45 2014] [error] [client 192.168.1.46] PHP Parse error: syntax error, unexpected ‚Sofa‘ (T_STRING), expecting ‚)‘ in /var/www/remote/config.php on line 29
[Tue Feb 04 10:20:51 2014] [error] [client 192.168.1.46] PHP Parse error: syntax error, unexpected ‚Sofa‘ (T_STRING), expecting ‚)‘ in /var/www/remote/config.php on line 29
[Tue Feb 04 10:20:53 2014] [error] [client 192.168.1.46] PHP Parse error: syntax error, unexpected ‚Sofa‘ (T_STRING), expecting ‚)‘ in /var/www/remote/config.php on line 29
[Tue Feb 04 10:20:55 2014] [error] [client 192.168.1.46] PHP Parse error: syntax error, unexpected ‚Sofa‘ (T_STRING), expecting ‚)‘ in /var/www/remote/config.php on line 29
[Tue Feb 04 10:21:39 2014] [error] [client 192.168.1.46] PHP Parse error: syntax error, unexpected ‚Sofa‘ (T_STRING), expecting ‚)‘ in /var/www/remote/config.php on line 29
[Tue Feb 04 10:22:46 2014] [error] [client 192.168.1.46] PHP Parse error: syntax error, unexpected ‚Sofa‘ (T_STRING), expecting ‚)‘ in /var/www/remote/config.php on line 29
[Tue Feb 04 10:22:49 2014] [error] [client 192.168.1.46] PHP Parse error: syntax error, unexpected ‚Sofa‘ (T_STRING), expecting ‚)‘ in /var/www/remote/config.php on line 29
[Tue Feb 04 10:22:51 2014] [error] [client 192.168.1.46] PHP Parse error: syntax error, unexpected ‚Sofa‘ (T_STRING), expecting ‚)‘ in /var/www/remote/config.php on line 29
[Tue Feb 04 10:23:31 2014] [error] [client 192.168.1.46] PHP Parse error: syntax error, unexpected ‚Sofa‘ (T_STRING), expecting ‚)‘ in /var/www/remote/config.php on line 29
[Tue Feb 04 10:27:34 2014] [error] [client 192.168.1.46] PHP Parse error: syntax error, unexpected ‚Sofa‘ (T_STRING), expecting ‚)‘ in /var/www/remote/config.php on line 29
[Tue Feb 04 10:27:35 2014] [error] [client 192.168.1.46] PHP Parse error: syntax error, unexpected ‚Sofa‘ (T_STRING), expecting ‚)‘ in /var/www/remote/config.php on line 29
[Tue Feb 04 10:29:01 2014] [error] [client 192.168.1.46] PHP Parse error: syntax error, unexpected ‚Sofa‘ (T_STRING), expecting ‚)‘ in /var/www/remote/config.php on line 29
[Tue Feb 04 10:29:04 2014] [error] [client 192.168.1.46] File does not exist: /var/www/r
[Tue Feb 04 10:31:47 2014] [error] [client 192.168.1.46] PHP Parse error: syntax error, unexpected ‚Sofa‘ (T_STRING), expecting ‚)‘ in /var/www/remote/config.php on line 29
[Tue Feb 04 10:31:49 2014] [error] [client 192.168.1.46] PHP Parse error: syntax error, unexpected ‚Sofa‘ (T_STRING), expecting ‚)‘ in /var/www/remote/config.php on line 29
[Tue Feb 04 10:31:51 2014] [error] [client 192.168.1.46] PHP Parse error: syntax error, unexpected ‚Sofa‘ (T_STRING), expecting ‚)‘ in /var/www/remote/config.php on line 29
[Tue Feb 04 10:31:53 2014] [error] [client 192.168.1.46] PHP Parse error: syntax error, unexpected ‚Sofa‘ (T_STRING), expecting ‚)‘ in /var/www/remote/config.php on line 29
[Tue Feb 04 10:33:33 2014] [error] [client 192.168.1.46] PHP Parse error: syntax error, unexpected ‚Sofa‘ (T_STRING), expecting ‚)‘ in /var/www/remote/config.php on line 29
[Tue Feb 04 10:34:55 2014] [error] [client 192.168.1.46] PHP Parse error: syntax error, unexpected ‚Sofa‘ (T_STRING), expecting ‚)‘ in /var/www/remote/config.php on line 29
[Tue Feb 04 10:43:55 2014] [notice] caught SIGTERM, shutting down
[Tue Feb 04 10:44:20 2014] [notice] Apache/2.2.22 (Debian) PHP/5.4.4-14+deb7u7 configured — resuming normal operations
[Tue Feb 04 10:47:47 2014] [error] [client 192.168.1.46] PHP Parse error: syntax error, unexpected ‚Sofa‘ (T_STRING), expecting ‚)‘ in /var/www/remote/config.php on line 29
[Tue Feb 04 10:48:08 2014] [error] [client 192.168.1.46] PHP Parse error: syntax error, unexpected ‚Sofa‘ (T_STRING), expecting ‚)‘ in /var/www/remote/config.php on line 29
[Tue Feb 04 10:49:03 2014] [error] [client 192.168.1.46] PHP Parse error: syntax error, unexpected ‚Sofa‘ (T_STRING), expecting ‚)‘ in /var/www/remote/config.php on line 29
[Tue Feb 04 10:49:04 2014] [error] [client 192.168.1.46] PHP Parse error: syntax error, unexpected ‚Sofa‘ (T_STRING), expecting ‚)‘ in /var/www/remote/config.php on line 29
[Tue Feb 04 10:57:48 2014] [notice] caught SIGTERM, shutting down
[Tue Feb 04 10:58:12 2014] [notice] Apache/2.2.22 (Debian) PHP/5.4.4-14+deb7u7 configured — resuming normal operations
[Tue Feb 04 18:38:34 2014] [error] [client 192.168.1.28] PHP Parse error: syntax error, unexpected ‚Sofa‘ (T_STRING), expecting ‚)‘ in /var/www/remote/config.php on line 29
[Tue Feb 04 18:50:16 2014] [error] [client 192.168.1.27] PHP Parse error: syntax error, unexpected ‚Sofa‘ (T_STRING), expecting ‚)‘ in /var/www/config.php on line 29
[Tue Feb 04 18:50:19 2014] [error] [client 192.168.1.27] PHP Parse error: syntax error, unexpected ‚Sofa‘ (T_STRING), expecting ‚)‘ in /var/www/config.php on line 29
[Tue Feb 04 18:50:26 2014] [error] [client 192.168.1.27] PHP Parse error: syntax error, unexpected ‚Sofa‘ (T_STRING), expecting ‚)‘ in /var/www/remote/config.php on line 29
[Tue Feb 04 18:50:43 2014] [error] [client 192.168.1.28] PHP Parse error: syntax error, unexpected ‚Sofa‘ (T_STRING), expecting ‚)‘ in /var/www/config.php on line 29
[Tue Feb 04 18:52:11 2014] [error] [client 192.168.1.46] PHP Parse error: syntax error, unexpected ‚Sofa‘ (T_STRING), expecting ‚)‘ in /var/www/config.php on line 29
[Tue Feb 04 18:52:20 2014] [error] [client 192.168.1.46] PHP Parse error: syntax error, unexpected ‚Sofa‘ (T_STRING), expecting ‚)‘ in /var/www/remote/config.php on line 29
[Tue Feb 04 18:52:22 2014] [error] [client 192.168.1.46] PHP Parse error: syntax error, unexpected ‚Sofa‘ (T_STRING), expecting ‚)‘ in /var/www/remote/config.php on line 29
[Tue Feb 04 18:52:24 2014] [error] [client 192.168.1.46] PHP Parse error: syntax error, unexpected ‚Sofa‘ (T_STRING), expecting ‚)‘ in /var/www/remote/config.php on line 29
[Tue Feb 04 18:57:20 2014] [error] [client 192.168.1.28] File does not exist: /var/www/favicon.ico, referer: http://192.168.1.28/
[Tue Feb 04 18:57:32 2014] [error] [client 192.168.1.28] PHP Parse error: syntax error, unexpected ‚Sofa‘ (T_STRING), expecting ‚)‘ in /var/www/remote/config.php on line 29, referer: http://192.168.1.28/
[Tue Feb 04 18:57:52 2014] [error] [client 192.168.1.46] PHP Parse error: syntax error, unexpected ‚Sofa‘ (T_STRING), expecting ‚)‘ in /var/www/remote/config.php on line 29, referer: http://192.168.1.28/
[Tue Feb 04 19:14:58 2014] [notice] caught SIGTERM, shutting down
[Tue Feb 04 19:15:26 2014] [notice] Apache/2.2.22 (Debian) PHP/5.4.4-14+deb7u7 configured — resuming normal operations
[Tue Feb 04 19:17:51 2014] [error] [client 192.168.1.46] PHP Warning: socket_connect(): unable to connect [111]: Connection refused in /var/www/remote/index.php on line 98
[Tue Feb 04 19:20:55 2014] [error] [client 192.168.1.46] PHP Warning: socket_connect(): unable to connect [111]: Connection refused in /var/www/remote/index.php on line 98
[Tue Feb 04 19:22:12 2014] [notice] caught SIGTERM, shutting down
[Tue Feb 04 19:22:37 2014] [notice] Apache/2.2.22 (Debian) PHP/5.4.4-14+deb7u7 configured — resuming normal operations
[Tue Feb 04 19:27:22 2014] [error] [client 192.168.1.46] PHP Warning: socket_connect(): unable to connect [110]: Connection timed out in /var/www/remote/index.php on line 98
[Tue Feb 04 19:27:31 2014] [error] [client 192.168.1.46] PHP Warning: socket_connect(): unable to connect [110]: Connection timed out in /var/www/remote/index.php on line 98, referer: http://192.168.1.28/
[Tue Feb 04 19:27:57 2014] [error] [client 192.168.1.46] PHP Warning: socket_connect(): unable to connect [110]: Connection timed out in /var/www/remote/index.php on line 98, referer: http://192.168.1.28/
[Tue Feb 04 19:32:39 2014] [notice] caught SIGTERM, shutting down
[Tue Feb 04 19:33:04 2014] [notice] Apache/2.2.22 (Debian) PHP/5.4.4-14+deb7u7 configured — resuming normal operations
[Tue Feb 04 19:41:52 2014] [notice] caught SIGTERM, shutting down
[Tue Feb 04 19:42:19 2014] [notice] Apache/2.2.22 (Debian) PHP/5.4.4-14+deb7u7 configured — resuming normal operations
[Tue Feb 04 19:48:45 2014] [error] [client 192.168.1.27] PHP Warning: socket_connect(): unable to connect [110]: Connection timed out in /var/www/remote/index.php on line 98, referer: http://192.168.1.28/remote/index.php?delay=0
[Tue Feb 04 19:50:57 2014] [error] [client 192.168.1.27] PHP Warning: socket_connect(): unable to connect [110]: Connection timed out in /var/www/remote/index.php on line 98, referer: http://192.168.1.28/remote/index.php?delay=0
[Tue Feb 04 19:52:06 2014] [error] [client 192.168.1.27] PHP Warning: socket_connect(): unable to connect [110]: Connection timed out in /var/www/remote/index.php on line 98, referer: http://192.168.1.28/remote/index.php?delay=0
[Tue Feb 04 20:00:22 2014] [error] [client 192.168.1.28] File does not exist: /var/www/favicon.ico, referer: http://192.168.1.28/
[Tue Feb 04 20:17:33 2014] [notice] Apache/2.2.22 (Debian) PHP/5.4.4-14+deb7u7 configured — resuming normal operations
[Tue Feb 04 21:04:11 2014] [notice] caught SIGTERM, shutting down
[Tue Feb 04 21:04:37 2014] [notice] Apache/2.2.22 (Debian) PHP/5.4.4-14+deb7u7 configured — resuming normal operations
[Tue Feb 04 21:18:04 2014] [error] [client 192.168.1.27] File does not exist: /var/www/VoiceControl/VoiceControl
[Tue Feb 04 21:18:22 2014] [error] [client 192.168.1.27] File does not exist: /var/www/VoiceControl/VoiceControl
[Tue Feb 04 21:22:16 2014] [notice] caught SIGTERM, shutting down
[Tue Feb 04 21:22:42 2014] [notice] Apache/2.2.22 (Debian) PHP/5.4.4-14+deb7u7 configured — resuming normal operations
[Wed Feb 05 11:24:49 2014] [error] [client 192.168.1.27] PHP Warning: socket_connect(): unable to connect [111]: Connection refused in /var/www/remote/index.php on line 98
“
Sorry wegen dem vielen Quelltext, aber ich denke, dass ein Log viel präziser dem Fehler finden lässt als die eigenen Worte.
Vielen Dank im Vorraus!
Gruß Tim
Hi Tim,

da hast du vollkommen recht – den chmod-Befehl sollte man besser als sudo ausführen, um Probleme damit auszuschließen.
Die Berechtigungen sehen soweit sehr gut aus. Auf meinem Pi läuft es mit den selben Berechtigungen und gibt auch keine Probleme. Auch im Apache-Log konnte ich jetzt keine Berechtigungsprobleme bei dir rauslesen.
Jetzt mal zu deinem Apache-Log:
Dieser ist so lange, weil sowohl „notice“, als auch „error“-Meldungen erfasst wurden. Das ist soweit auch in Ordnung. Besonders interessant sind die Meldungen „PHP Parse error: syntax error, unexpected ‘Sofa’ (T_STRING), expecting ‘)’ in /var/www/remote/config.php“. Das hat aber mit dem Webinterface und nicht mit der Android-Sprachsteuerung zu tun. Anscheinend hast du hier einen kleinen Syntax-Fehler in die Datei reinbekommen. Dazu vielleicht einfach nochmal mit meinem geposteten Beispielcode vergleichen:
Da diese Fehlermeldung bei dir aber seit gestern Nachmittag anscheinend nicht mehr aufgetreten ist, kann es auch gut sein, dass du diesen Fehler schon behoben hast ;)
Die Meldungen „PHP Warning: socket_connect(): unable to connect [110]: Connection timed out in /var/www/remote/index.php“ stammen auch vom Webinterface. Höchstwahrscheinlich hast du da ein paar mal die Seite aufgerufen, ohne dass der Daemon lief.
Das einzige, was ich im Log zur Android-Sprachsteuerung gerade finden kann ist „File does not exist: /var/www/VoiceControl/VoiceControl“. Interessant ist hier, dass der Ordner „VoiceControl“ im Ordner „VoiceControl“ aufgerufen wird. Kannst du die Dateien im Ordner VoiceControl unter /var/www denn vom Browser aus aufrufen? Also gleichbleibender IP-Adresse des Pi über 192.168.1.27/VoiceControl.
Ich denke der Fehler liegt irgendwo in der Dopplung des Ordners.
So, habe es nun hinbekommen.
Ich wusste auch nicht so genau, woran es lag, also habe ich sowohl apache2 als auch php5 entfernt und neu installiert.
Daraufhin habe ich mir die Ordnerrechte unter /var/www noch einmal mittels ls -l angeschaut und siehe da, der Ordner VoiceControl war nur für root beschreibbar.
Also habe ich eine neue Gruppe erstellt mit folgenden Befehlen:
“
1. addgroup stuff
2. adduser tim stuff
3. adduser root stuff
bin in das Verzeichnis gegangen und habe
4. chgrp -R stuff *
5. chmod -R 777 *
“
Und direkt danach bekam ich eine Sprachausgabe auf meinem Handy und die Dateien wurden in den Ordner uploads vom Raspberry gelegt =)
Danke für deine Hilfe!
Gruß Tim
Hallo echt gute Arbeit finde ich!
Aber ist das Normal das man ein Delay von ca 10 Sekunden hat?
Hi Gschisi,
10 Sekunden sind schon etwas viel, das kann allerdings mit mehreren Dingen zusammenhängen:
– der WLAN-Verbindung (die App überträgt die Sprachdatei als .3gp-Datei auf den Raspberry)
– die Anbindung des Raspberry ans Intranet (Wenn er direkt über Kabel am Router hängt ist das allerdings zu vernachlässigen, ist er allerdings auch per WLAN verbunden, kann hier noch ein zusätzliches Delay entstehen)
– die Anbindung des Raspberry ans Internet (die recodierte Sprachdatei wird zur Analyse an Google gesendet, kann je nach Upstream-Geschwindigkeit auch etwas dauern)
– die Antwortzeit der Google-Server (sollte allgemein kein Problem sein, aber die können unter umstenden zu Stoßzeiten auch mehr ausgelastet sein)
– der Auslastung des Raspberry Pi (die Datei muss erst umgewandelt werden, das kann unter Umständen auch etwas dauern, besonders wenn die Befehle länger sind)
Das wären mal die Hauptverursacher von Problemen mit der Geschwindgikeit würde ich mal sagen. Bei mir dauert eine Antwort auch etwas, kurze Befehle wie „Hallo Welt“ ca. 3 Sekunden und Dinge wie „Wie ist das Wetter“ (aus dem Beispiel von meinem weiterführenden Beitrag zur Erweiterung von VoiceControl, das ein Python-Script aufruft, das wiederum erst Daten von einem Server holt) ca. 7 Sekunden.
Gibts die App auch für iOS Geräte?
Nein, Apple verlangt leider knapp 80€/Jahr, um Apps anbieten zu dürfen und auf eigenen Geräten testen zu dürfen. Prinzipiell kann die App sollte sich eine entsprechende App aber auch leicht für iOS basteln lassen bzw. ein Webinterface dazu, dass dann OS-unabhängig ist.
Ansonsten kann man natürlich noch auf SiriProxy für iOS 7 warten ;)
Ist es normal, dass das Ding so gut wie garnichts richtig versteht? Von 20mal Anweisung sagen wird es 1mal richtig verstanden (habe keinen Sprachfehler ;) )
Hi Marc,
so schlecht sollte die Speech-to-Text-Engine von Google eigentlich nicht arbeiten. Gelegentlich brauche ich auch 2 Versuche – in der Regel aber wird alles beim ersten mal verstanden. Vielleicht noch ein paar kleine Tipps:
– englische Begriffe meiden, da die deutsche Sprachumwandlung genutzt wird
– deutlich Sprechen, laute Hintergrundgeräusche vermeiden
– besonders Worte wie „deine“ oder „meine“ wird oft falsch interpretiert (das jew. Gegenteil)
– am Besten Schlagworte verwenden, die eindeutig sind
Oh ok. Kann man denn irgendwie die Englische Sprachengine aktivieren? Oder müsste man das in der App selber ändern..
gruß und danke
Wenn du komplett auf Englisch umstellen willst, musst du den Quellcode der App abändern. Hierzu ist folgender Bereich interessant/wichtig:
if (initStatus == TextToSpeech.SUCCESS) {
if (myTTS.isLanguageAvailable(Locale.GERMANY) == TextToSpeech.LANG_AVAILABLE)
myTTS.setLanguage(Locale.GERMANY);
Allerdings versteht es dann nur noch Englisch ;) Für einen „Mischbetrieb“ (also für Sätze, die sowohl englische, als auch deutsche Worte enthalten) fehlt mir gerade eine passende Idee.
Wenn aber einige Befehle auf Englisch, andere auf Deutsch sind, könntest du einen Menüpunkt in der App hinzufügen, der die Sprachen switcht.
Danke :) dann bleibe ich vorerst doch mal bei deutsch :D
Hi ist ne ttolle sache.
mal ne Frage kann man den Text(Sprache) der auf dem Handy ausgibt auch gleich auf dem Pi ausgeben
Gruß Paul
Hi Paul,
ich habe es selbst noch nicht getestet, aber auf dieser Seite werden einige Möglichkeiten aufgezeigt, Text to Speech auch direkt am Pi zu betreiben.
Super! Genau was wir gesucht haben :-) Die Anleitung ist auch sehr leicht verständlich… so versteht selbst ein Anfänger wie ich das!
Gruß Peter
Auch ganz nett ;) :
if ($results == „computer an“){
echo „Computer wird angeschaltet“;
echo exec(„sudo etherwake B8:AC:6F:D6:9C:55“);
}
vorher auf dem Rpi
sudo apt-get install etherwake
Oder auch:
if ($results == “bitcoin”){
$asd = file_get_contents(‘https://blockchain.info/rawaddr/1FfmbHfnpaZjKFvyi1okTjJJusN455paPH’);
$teile = explode(“:”, $asd);
$teile2 = explode(“,”, $teile[6]);
$bal = $teile2[0]/1000000000;
echo “Du hast “.$bal.” Bitcoins”;
}
Ich habe mal einen alternativen „Client“ für iOS Geräte (iOS 7 kompatibel, ohne Jailbreak) geschrieben. Client nicht wirklich weil es eine WebApp ist.
https://www.youtube.com/watch?v=iXWFCMMDEXw
Würde mich auf euer Feedback freuen.
Hi, irgenwie funktionier es nicht, brauche hile, was der apache log ausspuckt weiß ich nicht verstehe es leider nicht. Kann mir jemand helfen?
Für alle die das „File ‘voice.flac’ already exists. Overwrite ? [y/N] Not overwriting – exiting“ Problem haben:
In der Datei speechdetect.sh muss ein -y zum automatischen überschreiben eingefügt werden, also muss die Zeile 4 so aussehen:
ffmpeg -y -i $1 voice.flac
Vielen Dank für das Tut, ich warte leider noch auf meinen 433MHz Sender :(
Hi Gustav,
eigentlich sollte dieser Parameter nicht notwendig sein, da im Befehl darüber die Datei gelöscht werden sollte (sudo rm voice.flac).
Das habe ich mir fast gedacht, bin leider nicht sehr erfahren mit Linux.
Jedenfalls wurde bei mir die Datei nicht automatisch gelöscht. Wenn ich den Parameter -y wieder entferne wird die Datei voice.flac gelöscht, ffmpeg weigert sich aber eine neue zu erstellen:
„voice.flac: Permission denied
Warning: Couldn’t read data from file „voice.flac“, this makes an empty POST.“
Die Lese und Schreibrechte sind aber gesetzt…
Du könntest noch versuchen ein „sudo“ vor den ffmpeg-Befehl zu setzen, damit müsste es auch funktionieren. Aber die Lösung mit dem „-y“-Parameter passt natürlich auch, wenn das bei dir funktioniert ;)
Ich habe alles gemacht wie in der Anleitung gemacht bekomme vom Handy aber keine Antwort. Das ist das was die Error.log ausgibt:
sudo: no tty present and no askpass program specified
ffmpeg version 0.8.10-6:0.8.10-1+rpi1, Copyright (c) 2000-2013 the Libav developers
built on Mar 22 2014 02:13:15 with gcc 4.6.3
*** THIS PROGRAM IS DEPRECATED ***
This program is only provided for compatibility and will be removed in a future release. Please use avconv instead.
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from ‚uploads/voice.3gp‘:
Metadata:
major_brand : 3gp4
minor_version : 768
compatible_brands: 3gp43gp6
creation_time : 2014-05-08 21:52:25
copyright :
copyright-eng :
Duration: 00:00:02.68, start: 0.000000, bitrate: 15 kb/s
Stream #0.0(eng): Audio: amrnb, 8000 Hz, 1 channels, flt, 12 kb/s
Metadata:
creation_time : 2014-05-08 21:52:25
Incompatible sample format ‚flt‘ for codec ‚flac‘, auto-selecting format ’s16′
Output #0, flac, to ‚voice.flac‘:
Metadata:
major_brand : 3gp4
minor_version : 768
compatible_brands: 3gp43gp6
creation_time : 2014-05-08 21:52:25
copyright :
copyright-eng :
encoder : Lavf53.21.1
Stream #0.0(eng): Audio: flac, 8000 Hz, 1 channels, s16, 200 kb/s
Metadata:
creation_time : 2014-05-08 21:52:25
Stream mapping:
Stream #0.0 -> #0.0
Press ctrl-c to stop encoding
size= 23kB time=2.74 bitrate= 70.2kbits/s
video:0kB audio:15kB global headers:0kB muxing overhead 53.696000%
./speechdetect.sh: line 6: curl: command not found
[Thu May 08 23:52:30 2014] [error] [client 192.168.2.100] PHP Notice: Undefined offset: 1 in /var/www/VoiceControl/detect.php on line 23
Hallo Christoph,
das sieht für mich danach aus, als ob curl nicht auf dem Pi installiert ist („curl: command not found“).
Installiere mal curl (via „sudo apt-get install curl“) und versuche es dann noch einmal.
Und ich probier und mach :D
Vielen Danke! Klappt jetzt :)
Hi, super nach mehrmaligen (Anfänger) Versuchen klappt alles super!
Brauche aber für eine Idee einen anstupster:
Idee:
den Raspberry per Sprache neustarten, aber so das er mich erstmal fragt: „Sind sie sich sicher…..“ und dann erst nach meinem go den neustart macht.
wie könnte das aussehen?
Danke im voraus.
Hi BerlinK36,
Idee hätte ich, aber wohl nicht die eleganteste Lösung ;)
1. Du sagst „ausschalten“
2. der Pi gibt über echo „sicher?“ zurück und legt eine Datei mit Inhalt von z.B. „1“ an
3. Wenn du nun „ja“ sagst, soll der Pi prüfen, wie der Inhalt der Datei ist und dementsprechend den Befehl ausführen und über echo etwas zurückgeben
Der Inhalt der Datei ist wichtig, um das „ja“ der richtigen Frage zuzuordnen.
Hoffe, das war verständlich ;)
Moin Moin,
Bin der dem du im Raspberry-Forum schon mal geantwortet hast.
Der Key für die speech api ist nicht mehr gültig.
Hab mir Jetzt selbst einen gemacht. Der hat nur das Prob das er am Tag nur 50 Anfragen zulässt.
Gibts ne andere möglichkeit um das zu umgehen.
Gruß Paul
———————————————-
Hi, ich nochmal.
Was ist die “inofizielle API” von Google ??
Gruß Paul
Hi Paul,
danke für die Rückmeldung! Leider hat Google wohl im Laufe der Nach diesen API-Key schon wieder deaktiviert. Der selbst-erstellte API-Key scheint momentan die einzige Möglichkeit zu sein, die Speech-API zu nutzen. Das ist vermutlich auch die vernünftigste Lösung, da wohl auch in Zukunft die extrahierten Keys nur kurze Zeit halten :(
Das mit den 50 Aufrufen ist natürlich eine blöde Sache, aber momentan wohl nur durch Erweitern des Kontingents bei Google (habe ich bislang nicht geschafft) oder Anlegen mehrerer Accounts zu erweitern.
Das Umgehen meinte ich, als ich von der „inoffiziellen API“ sprach, da V1 der API keinen Key verlangt hat ;) Leider wurde der Service aber abgeschalten, sodass man jetzt auf V2 und Key angewiesen ist.
[Update 19:50 Uhr]: Es gibt wieder einen extrahierten Key. Wer mehr als 50 Anfragen/Tag braucht, sollte evtl. diese GitHub-Seite im Auge behalten. Man sollte allerdings darauf gefasst sein, den Key des Öfteren ändern zu müssen, aber das habe ich ja schon beschrieben.
hallo alex!
Bisher hat das alles Super funktioniert. Ich hatte 3 Leuchtdioden angeschlossen, die ich mit Schlüsselworten (rot ein, grün ein und gelb ein)
einschalten konnte. Auch eine Ampelschaltung konnte ich per „ampel ein“ einschalten.
Dann habe ich den Pi mal 3 Monate nicht benutzt. Heute funktioniert die Verbindung zu google nicht mehr. in Speech.Results finde ich nur:
Error 400 (Bad Request)!!1 – Your client has issued a malformed or illegal request. Missing parameter: key
OK – Anscheinend muss man jetzt eine API Key generieren. Aber bei Google Developers gibt es keine speech-Api mehr.
Kannst du irgendwie weiterhelfen?
Hi!
Ich habe den Blog-Artikel schon vor einiger Zeit dazu aktualisiert. Google hat wohl die v1 der speech-API abgeschaltet, mit der neuen V2 sollte aber alles klappen.
Einen Artikel, wie man an den API-Key kommt, habe ich verinkt. Wenn du die Speech-API nicht siehst, bist du wahrscheinlich noch kein Mitglied von „[email protected]“. Wie das geht steht in dem verlinkten Artikel – das sind nur ein paar Klicks ;)
Den Server-Teil der Speech-API habe ich auch bereits aktualisiert. Wenn du deine bestehene Installation weiter verwenden möchtest, musst du nur die entsprechenden Zeilen in der speechtdetect.sh und detect.php ändern, dann sollte alles wieder so funktionieren wie zuvor. Einziger Unterschied: Mit einem API-Key kann man nur noch 50 Abfragen/Tag bei Google machen. Für private Zwecke sollte das aber in den meisten Fällen ausreichen.
vielen dank!
mal sehen, ob ich das am wochenende hinbekomme ;)
LG
Michael
Hallo Zusammen,
ich habe ein Problem mit der Spracherkennung. Ich habe Voice Control bereits erfolgreich eingesetzt und so manche Fehler auch eigenständig erkennen können. Hier bin ich aber an einer Stelle, an der ich nicht weiter weiß. Ich habe erkannt, dass ein KEY notwendig wurde und mir diesen bei Google erstellen lassen: API key (Key for browsers application): AIzaSyxxxxxxxxxxxxx-xxxxxxxxxxxxxxxxhlg; Referers: Any referer allowed. Auch den neuen Quellcode der detect.sh habe ich geladen.
Anscheinend wird der Upload der voice.3gp durchgeführt, aber die Auswertung bzw. Antwort seitens Google bleibt aus.
_____________
Meine detect.php:
speech.results“);
$results = file_get_contents(„speech.results“);
$results = explode(„\“transcript\“:\““,$results);
$results = $results[1];
$results = explode(„\“,\““,$results);
$results = $results[0];
$results = strtolower($results);
$myFile = „testFile.txt“;
$fh = fopen($myFile, ‚w‘) or die(„can’t open file“);
$stringData = $results;
fwrite($fh, $stringData);
fclose($fh);
$results = trim($results);
if ($results == „Licht“){
echo „Lautsprecher wird eingeschaltet“;
exec(„sudo /root/wiringPi/rcswitch-pi/send 01000 1 1“);
}
if ($results == „Dunkel“){
echo „Lautsprecher wird ausgeschaltet“;
exec(„sudo /root/wiringPi/rcswitch-pi/send 01000 1 0“);
}
if ($results == „hallo welt“){
echo „Hallo du!“;
}
?>
_________________
Meine speechdetect.sh:
#!/bin/bash
sudo rm voice.flac
# FLAC encoded example
sudo ffmpeg -y -i $1 voice.flac
curl \
–data-binary @voice.flac \
–header ‚Content-type: audio/x-flac; rate=8000‘ \
‚https://www.google.com/speech-api/v2/recognize?xjerr=1&client=chromium&pfilter=0&lang=de-de&key=AIzaSy….hlg‘
________________
Meine speech.results:
Error 403 (Forbidden)!!1
*{margin:0;padding:0}html,code{font:15px/22px arial,sans-serif}html{background:#fff;color:#222;padding:15px}body{margin:7% auto 0;max-width:390px;min-height:180px;padding:30px 0 15px}* > body{background:url(//www.google.com/images/errors/robot.png) 100% 5px no-repeat;padding-right:205px}p{margin:11px 0 22px;ov$
403. Thatâ^À^Ùs an error.
Your client does not have permission to get URL
/speech-api/v2/recognize?xjerr=1&client=chromium&pfilter=0&lang=de-de&key=AIxxxxxxxxxxxxxxxxlg
from this server. Thatâ^À^Ùs all we know.____________
und die error.log:
[Wed Jun 18 21:58:06 2014] [error] [client 10.100.0.10] PHP Warning: unlink(voice.flac): Permission denied in /var/www/VoiceControl/detect.php on line 7
ffmpeg version 0.8.10-6:0.8.10-1+rpi1, Copyright (c) 2000-2013 the Libav developers
built on Mar 22 2014 02:13:15 with gcc 4.6.3
*** THIS PROGRAM IS DEPRECATED ***
This program is only provided for compatibility and will be removed in a future release. Please use avconv instead.
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from ‚uploads/voice.3gp‘:
Metadata:
major_brand : 3gp4
minor_version : 0
compatible_brands: isom3gp4
creation_time : 2014-06-18 21:58:31
Duration: 00:00:02.96, start: 0.000000, bitrate: 14 kb/s
Stream #0.0(eng): Audio: amrnb, 8000 Hz, 1 channels, flt, 12 kb/s
Metadata:
creation_time : 2014-06-18 21:58:31
Incompatible sample format ‚flt‘ for codec ‚flac‘, auto-selecting format ’s16′
Output #0, flac, to ‚voice.flac‘:
Metadata:
major_brand : 3gp4
minor_version : 0
compatible_brands: isom3gp4
creation_time : 2014-06-18 21:58:31
encoder : Lavf53.21.1
Stream #0.0(eng): Audio: flac, 8000 Hz, 1 channels, s16, 200 kb/s
Metadata:
creation_time : 2014-06-18 21:58:31
Stream mapping:
Stream #0.0 -> #0.0
Press ctrl-c to stop encoding
size= 31kB time=3.02 bitrate= 84.6kbits/s
video:0kB audio:23kB global headers:0kB muxing overhead 35.345375%
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 33568 100 1571 100 31997 1217 24799 0:00:01 0:00:01 –:–:– 25866
[Wed Jun 18 21:58:08 2014] [error] [client 10.100.0.10] PHP Notice: Undefined offset: 1 in /var/www/VoiceControl/detect.php on line 23
Ich hoffe ich habe keinen zu sehr geschockt. Diese Informationen sind jedoch für eine Analyse meiner Meinung nach notwendig. Vielleicht findet sich eine helfende Hand?! :)
Aus der detect.sh, Zeile 13, kommt auf dem Smartphone die Antwort, dass die voice.3gp erfolgreich hochgeladen wurde. In der speech.results steht dass der CLient keine Berechtigungen hat auf die URL zuzugreifen. Also möglicherweiße ein Problem mit dem Api Key. Vor dem Einfügen des Api Keys, kam jedoch auch die Ansage des erfolgreichen Hochladens nicht….
Ich hoffe dies waren genügend Informationen.
MfG
Hendrik
Hi Hendrik,
also der Fehler liegt definitiv an der Berechtigung des Google-Dienstes. Meine speechdetect.sh sieht bis auf den Key genauso aus und bei mir funktioniert es momentan ohne Probleme.
Du scheinst aber nicht der einzige mit dem Problem derzeit zu sein. In einer Google-Gruppe wurde vorgeschlagen, die IP „127.0.0.1“ in die Liste der erlaubten IPs in der Speech-API von Google einzutragen – ob das was bringt, kann ich dir leider nicht sagen.
P.S.: Die API ist eigentlich nur für Chrome-Apps gedacht. Möglicherweiße sperrt Google wieder andere Anfragen aus.
hmm das ist schade…
gibt es die Möglichkeit einen TestKey zu verwenden der funktioniert?
Hi Hendrik,
ich habe gerade gesehen, dass du aus versehen oben deinen Key in der URL mitgepostet hast. Ich habe ihn nun entfernt. Testweise habe ich es mit diesem Key auch mal versucht und siehe da – bei mir funktioniert er auch nicht. Irgendetwas scheint damit nicht zu passen. Lösche mal dein Projekt in der Google Developer-Konsole, leg ein neues an und fordere einen neuen Key an.
Ich hab das Programm wie beschrieben installiert, nur ich habe das Problem, dass immer nur die detect.php Datei vorgelesen wird. Einen neuen Key habe ich eintragen lassen und sonst ist auch kein Error vorhanden.
Ich hoffe jemand kann mein Problem lösen.