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
Hallo zusammen,
ich habe dieses wunderbare Tutorial heute auch einmal ausprobiert. Es schien auch alles ganz gut zu funktionieren. Die Voice-Dateien werden auch in den uploads Ordner hochgeladen. Diese werden nur leider nicht weiter verarbeitet, da die voice.flac Datei fehlt. Woran könnte dies liegen?
_______________
Meine error.log Datei:
[Sat Jul 12 20:50:53 2014] [error] [client 192.168.178.46] PHP Warning: unlink(voice.flac): No such file or directory in /var/www/VoiceControl/detect.php on line 7
rm: cannot remove `voice.flac‘: No such file or directory
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-07-12 20:50:52
Duration: 00:00:01.78, start: 0.000000, bitrate: 26 kb/s
Stream #0.0(eng): Audio: amrnb, 8000 Hz, 1 channels, flt, 12 kb/s
Metadata:
creation_time : 2014-07-12 20:50:52
voice.flac: Permission denied
Warning: Couldn’t read data from file „voice.flac“, this makes an empty POST.
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 14 0 14 0 0 60 0 –:–:– –:–:– –:–:– 84
[Sat Jul 12 20:50:54 2014] [error] [client 192.168.178.46] PHP Notice: Undefined offset: 1 in /var/www/VoiceControl/detect.php on line 23
____________
Die speech.results Datei ist auch komplett leer.
Ich würde mich über ein Wenig Hilfe sehr freuen.
============================================
so, mit dem Hinweis aus den vorherigen Kommentaren, dass ein sudo vor ffmpeg -y -i muss, funktioniert jetzt auch alles wunderbar!
Danke für die super Anleitung! :)
Danke!!
Florian
Hallo ich habe ein Proplem und zwar liest mir die Stimme alles vor was in der detect PHP datei steht was kann ich tuen?
Hi,
ein komischer Fehler :/
Klappt es denn mit der Standard-detect.php-Datei aus meinem Paket?
Sehr cooles Projekt :)
Hab nur ein Problem undzwar läd er die datein nicht hoch sie sind in upload aber ich bekomm auch keine antwort hoffe auf lösung
MfG Max
Hi Max,
danke, dass dir das Projekt gefällt :)
Zu deinem Problem: Ist nur die voice.3gp im Ordner „uploads“ oder auch die voice.flac im VoiceControl-Ordner? Letztere ist die umcodierte .3gp-Datei, die für den Upload an Google benötigt wird.
Falls die flac-Datei nicht existiert gab es wohl ein Problem beim umwandeln, ansonsten wäre der Inhalt von speech.results interessant.
Gruß,
Alex
Vielen Dank für das tolle Programm! :)
Bei mir funktioniert soweit alles prima.
Gibt es eventuell die Möglichkeit das ganze im Hintergrund laufen zu lassen und über eine Verknüpfung zu starten?
Mein Tablet stellt im Vollbild die Oberfläche meiner Heimsteuerung dar, ein kleiner Button für Spracheingaben wäre top!
Gibt es da eine Lösung?
Hi Tom,
ich bin was Android-Programmierung angeht leider auch „blutiger Anfänger“ ;)
Was mir einfallen würde, wäre ein floating Widget, wie man es z.B. vom FB-Messenger kennt, dass diesen Button ständig einblendet. Wie das allerdings realisierbar ist, kann ich dir nicht sagen.
VG
Hallo,
also ich habe mal versucht das ganze mit Lighttpd umzusetzen, es scheint soweit zu funktionieren. Ich habe noch keine API eingetragen und bekomme immer ein „Cant open file“ zurück. Ich gehe da nochmals tiefer auf suche.
Im Übrigen ein feines Projekt ;)
LG Dom
Hi Alex,
habe es soweit hinbekommen, dass er ein „Hallo du“ nach „Hallo Welt“ ausgibt.
Sobald es aber darum geht, exec-Befehle zu verarbeiten, kommt nichts mehr.
Eine Idee woran das liegen könnte?
Ansonsten muss ich sagen: Respekt vor deiner Arbeit und dem Wissen! Sehr geil!
Hi Mikel,
das klingt verdächtig nach einem Rechte-Problem.
Für das Beispiel mit „Hallo Welt“ werden nämlich im Gegensatz zum send-Befehl keine root-Rechte benötigt. Normalerweise findet sich ein entsprechender Fehler dann auch im Apache-Error-Log wieder.
Hast du die Geschichte mit der sudoers-Datei wie beschrieben durchgeführt und funktioniert der send-Befehl vom Terminal aus?
P.S.: Wissen und Arbeit halten sich bei mir sehr in Grenzen ;)
Ja die sudoers passt soweit.
Den Apache-log lade ich (diesmal auch richtig :)) morgen früh mal hoch.
Werde auch gleich noch dazuschreiben was ls-l ausgibt.
Danke schon mal für die Hilfe :)
OK, was du noch versuchen könntest: Statt dem „sudo send […]“ einfach mal „sudo touch blabla“ in die entsprechende exec-Funktion. Dadurch müsste im Ordner „VoiceControl“ eine Datei namens „blabla“ angelegt werden. Funktioniert das, kann man die Berechtigungen schon mal ausschließen.
Was vll noch hilfreich wäre, ist der entsprechende Quellcode aus der detect.php. Syntaxfehler schleichen sich nämlich auch gerne ein ;)
Habe noch etwas interessantes: alle Dateien und Ordner haben laut ls -l www-Data R/w Rechte -> außer die Voice.flac
Erklärt vieles… Nur die Lösung habe ich noch nicht.
Detect.php (testweise noch nicht voll ausgefüllt):
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 == „Wohnzimmerlicht einschalten“){
echo „ok, ich habe das Wohnzimmerlicht eingeschalten“;
exec(„sudo /home/pi/raspberry-remote/ ./send 01000 3 1“);
}
if ($results == „Brunnen einschalten“){
echo „Lass es sprudeln“;
exec(„sudo /home/pi/raspberry-remote/./send 01000 4 1“);
}
if ($results == „hallo welt“){
echo „Hallo du Nase“;
}
if ($results == „drucker an“){
echo „Drucker wird eingeschaltet“;
exec(„sudo /home/pi/raspberry-remote/./send 11010 1 1“);
}
if ($results == „drucker an“){
echo „Drucker wird eingeschaltet“;
exec(„sudo /home/pi/raspberry-remote/./send 11010 1 1“);
}
if ($results == „drucker an“){
echo „Drucker wird eingeschaltet“;
exec(„sudo /home/pi/raspberry-remote/./send 11010 1 1“);
}
?>
und der Errorlog:
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-12-03 20:07:11
Duration: 00:00:01.76, start: 0.000000, bitrate: 17 kb/s
Stream #0.0(eng): Audio: amrnb, 8000 Hz, 1 channels, flt, 12 kb/s
Metadata:
creation_time : 2014-12-03 20:07:11
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-12-03 20:07:11
encoder : Lavf53.21.1
Stream #0.0(eng): Audio: flac, 8000 Hz, 1 channels, s16, 200 kb/s
Metadata:
creation_time : 2014-12-03 20:07:11
Stream mapping:
Stream #0.0 -> #0.0
Press ctrl-c to stop encoding
Multiple frames in a packet from stream 0
size= 24kB time=1.80 bitrate= 110.9kbits/s
video:0kB audio:16kB global headers:0kB muxing overhead 50.316132%
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 25203 0 240 100 24963 99 10377 0:00:02 0:00:02 –:–:– 10663
rm: cannot remove `voice.flac‘: No such file or directory
ffmpeg version 0.8.13-6:0.8.13-1+rpi1, Copyright (c) 2000-2014 the Libav developers
built on Jul 29 2014 02:09:52 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.
[…]
& ls -l:
-rwxrwxrwx 1 www-data www-data 1947 Dec 3 06:43 detect.php
-rwxrwxrwx 1 www-data www-data 317 Dec 3 06:03 speechdetect.sh
-rwxrwxrwx 1 www-data www-data 192 Dec 3 21:22 speech.results
-rwxrwxrwx 1 www-data www-data 28 Dec 3 21:22 testFile.txt
drwxrwxrwx 2 www-data www-data 4096 Dec 3 21:22 uploads
-rw-r–r– 1 root root 33741 Dec 3 21:22 voice.flac (hier ist der Fehler)
[email protected]:/var/www/VoiceControl#
Hi Mikel,
also das mit den Rechten der Voice.flac ist in Ordnung, bei mir sieht es nicht anders aus ;)
Würde das schon nicht passen, würdest du das „Hallo Welt“-Beispiel auch nicht ausführen können.
Zu deiner detect.php:
Hier sehe ich auf die Schnelle keinen Fehler. Das „./“ vor send kannst du auch weglassen, da du den kompletten Pfad angibst (hab ich bei mir auch drin, sollte also eigentlich kein Problem darstellen). Was du evtl noch versuchen kannst, ist, alles nach „$results=“ klein zu schreiben.
Zum Error-Log:
Ich habe ihn mal um die redundanten Stellen gekürzt, um die Kommentarlänge nicht zu sprengen ;)
Leider ist im geposteten Log nur die Ausgabe der speechdetect.sh, nicht aber der detect.php. Oder gibt es sonst keine Fehler? Die entsprechenden Einträge im Log sind normal soweit ich das sehe.
Zur Fehlerfindung:
Hast du das mit dem „sudo touch blabla“ schon mal probiert? Wäre interessant zu wissen, um ein Rechteproblem auszuschließen und den Fehler an anderer Stelle zu suchen.
Was noch möglich wäre: Stimmt dein Pfad zur send-Datei mit dem von mir überein? Also um z.B. bei deinem Brunnen zu bleiben: Wenn du im Terminal „sudo /home/pi/raspberry-remote/./send 01000 4 1“ ausführst, geht dann der Brunnen ein?
Und: Bekommst du Feedback von der App, also antwortet sie dir „Lass es sprudeln“ wenn du den Brunnen einschalten willst oder tut sich gar nichts? Auch in der Datei „speech.results“ müsste nun irgendwo deine gestellte Frage auftauchen. Überprüfe evtl. auch, ob dich die Google Sprachanalyse richtig verstanden hat.
Ist bestimmt nur ein kleinerer Fehler, denn wenn das Beispiel mit „Hallo Welt“ schon mal funktioniert, sind die größten Fallstricke genommen.
Viel Glück!
Funktioniert :)
Vielen Dank! Lag tatsächlich an der groß-Schreibung in den results.
Jetzt muss ich nur noch rausbekommen, warum er immer vor jedem Sprachfeedback ein „doppelkreuz“ setzt.
Also „Doppelkreuz wohnzimmerbeleuchtung ist eingeschaltet“ :))
Schon mal vielen Dank :)
Jetzt läuft alles :)
Schön, dass es nun funktioniert!
Das mit dem Kleinschreiben ist eigentlich auch logisch, da ich das von Google zurückgegebene Ergebnis mit „strtolower“ in Kleinbuchstaben umwandle und in der if-Abfrage „==“ verwende – hätte mir eigentlich gleich auffallen müssen. Sorry! ;)
Hätte mir ebenfalls auffallen müssen -> ich schreibe viel in powershell (wenn auch noch nicht lange -> 1. Jahr fachinformatiker).
Vielen Dank nochmal für das geile Tutorial!
Hallo,
bei mir funk. es leider nicht es scheint an sich alles zu arbeiten die Datein werden gelöscht und durch neue replacet sobald ich was neues spreche jedoch bekomme ich diese Meldung wenn ich mal ./speechdetect.sh eingebe
*** THIS PROGRAM IS DEPRECATED ***
This program is only provided for compatibility and will be removed in a future release. Please use avconv instead.
voice.flac: No such file or directory
Warning: Couldn’t read data from file „voice.flac“, this makes an empty POST.
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;overflow:hidden}ins{color:#777;text-decoration:none}a img{border:0}@media screen and (max-width:772px){body{background:none;margin-top:0;max-width:none;padding-right:0}}#logo{background:url(//www.google.com/images/errors/logo_sm_2.png) no-repeat}@media only screen and (min-resolution:192dpi){#logo{background:url(//www.google.com/images/errors/logo_sm_2_hr.png) no-repeat 0% 0%/100% 100%;-moz-border-image:url(//www.google.com/images/errors/logo_sm_2_hr.png) 0}}@media only screen and (-webkit-min-device-pixel-ratio:2){#logo{background:url(//www.google.com/images/errors/logo_sm_2_hr.png) no-repeat;-webkit-background-size:100% 100%}}#logo{display:inline-block;height:55px;width:150px}
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=AIzaSyCnl6MRydhw_5fLXIdASxkLJzcJh5iX0M4
from this server. Invalid key. That’s all we know.Nachdem ich die rechte gesetzt habe haben andere User zugriff auf die voice.flac jedoch bei einer neugenerierten nur der root ist das ok so ?
Ich bitte um Hilfe.
Vielen Dank.
Hi Niklas,
schau mal das Update oben vom 14.5. an. Du verwendest noch den alten „Universalkey“, den Google schon seit einiger Zeit deaktiviert hat. Folge einfach dem Link in dem Update und erstelle dir einen eigenen Key. Dann sollte alles funktionieren.
Vielen Vielen Dank.
War schon verzweifelt bis dann doch nach 5-6 sekunden verzögerung die Antwort Hallo du angekommen ist HAHA :D.
Dauert recht lang kann man das noch verküzen ?
Hi Niklas,
das mit der Verzögerung liegt an der aktuellen Funktionsweise der App. Normal sollte die Verzögerung allerdings geringer ausfallen bei diesem Beispiel.
Ohne an der Software und damit der Funktionsweise etwas zu ändern, kann man die Verzögerung höchstens durch eine bessere WLAN-Verbindung und Internetanbindung verkürzen oder durch ein Übertakten des Pis. Grund ist, dass viele Schritte durchlaufen werden, bis man die Antwort erhält.
Erst nimmt man am Gerät die Sprache auf. Dann wird die aufgenommene Datei an den Pi gesendet. Der wandelt sie um und schickt sie an den Google-Server. Der macht Speech-to-Text, sendet das Ergebnis an den Pi, dieser ließt es aus und sendet die Antwort an das Handy.
Um eine wirkliche Verbesserung zu erzielen, müsste man das Konzept umwerfen. Evtl. finde ich dazu mal die Zeit.
Das wär sehr geil Danke Danke.
Ich probiere mich gerade mal aus
unter anderem versuche ich auch was an der Sicherheit zu schrauben da ich meinen pi bald öffentlich laufen lassen will und mir das dann so ganz und garnicht gefällt .
Das Webinterface vom raspberry remote hatte ich auch über mit login und allem drum und dran gesichert jedoch sollte das jetzt schwerer werden.
Geil wäre es sich evtl erst per Sprachbefehl einloggen zu müssen bevor man Commands abgeben kann.
Mal sehen ;)
Hallo, wollte nach längerer Pause mal wieder die Voice Control App benutzen. Nur leider speichert sie die IP des pi nicht mehr. Bei jedem öffnen muss man sie erneut eingeben.
Nexus 5 mit Stock Android 5.0.1 Lollipop
Hallo Peter,
hast du irgendwelche „Reinigungs“ Apps o.ä. laufen?
Bei mir wird die IP auch unter Stock 5.0.1 gespeichert.
Es lief nur Avira im Hintergrund, aber auch ohne funktioniert es leider nicht.
Habe bereits versucht:
App Daten löschen
App neu installiert
raspberrypi.fritz.box als IP
Hallo mir fehlt wie schonmal genannt die datei mit dem namen voice.flac. Habe alles schon mal deinstalliert und wieder installiert hag aber nichts geholfen. Wenn ich in det app Hallo Welt sage sehe ich beim Pi unten das er etwas bekommt und auch in der datei aber die datei voice.flac fhelr9mir wie kann ich dies beheben?
Lg Fabio
Hi Fabio,
wirft der Apache-Fehler-Log etwas aus? Klingt nach einem Berechtigungsproblem.
Hallo nochmal,
da ich noch ein Anfänger bin weis ich nicht genau was dieser Apache-Fehler-Log ist. Kann ich diesen über einen befehl finden oder was muss ich tun?
Lg Fabio
Hi Fabio,
der Apache-Fehler-Log ist eine Logdatei des Webservers „Apache“, in der Fehler und je nach Einstellung auch Warnungen aufgezeichnet werden. Er hilft bei der Fehlersuche, z.B. bei Syntaxfehlern im PHP-Code oder eben auch wenn Berechtigungen nicht richtig gesetzt wurden und daraus Fehler resultieren.
Du kannst findest ihn unter „/var/log/apache2/error.log“ und kannst ihn mit einem Programm deiner Wahl öffnen, z.B. „nano /var/log/apache2/error.log“, um ihn mit dem Editor nano zu öffnen, „cat /var/log/apache2/error.log“, um ihn mit cat zu öffnen oder „tail /var/log/apache2/error.log“, um nur die letzten paar Zeilen auszugeben. Am Einfachsten ist es wohl, wenn du die App mal öffnest und einen Befehl sagst und dann gleich „tail /var/log/apache2/error.log“. Dort sollte dann der aktuelle Fehler enthalten sein.
Wenn ich den Befehl mit tail ausführe dann sagt er mir in einer Zeile dies:
Warning: Couldn’t read data from file „voice.flac“, this makes an empty POST.
Was soll ich nun tun?
Lg Fabio
Hi Fabio,
wird denn die Datei „voice.flac“ im VoiceControl-Ordner auf dem Raspberry Pi überhaupt angelegt?
welche änderungen müsst ich vornehmen um mit nginx zu arbeitn?
die app funktionert soweit .. er recordet .. upload findet keiner statt ..
die apache headers mayb ? …
Hi,
leider habe ich bisher noch nicht mit nginx gearbeitet. Gibt denn der Error-Log von nginx etwas aus?
Hi
Ich hab ja mal die Datei nochmals installiert aber da ist nirgends eine Datei mit voice.flag.
Hallo Fabio,
nein, diese Datei ist auch nicht nach einer Installation gleich vorhanden, sondern wird erst erstellt. Ist denn im Ordner „uploads“ eine Datei namens „voice.3gp“?
Ja diese Datei ist vorhanden!
Das ist schon einmal gut, dann hat der Upload vom Handy funktioniert.
Schau noch mal in den Apache-Fehler-Log (jetzt am Besten mit nano). Dort sollte auch ein (etwas längerer) Abschnitt mit ffmpeg vorhanden sein. Kannst du den Teil mal hier posten?
Hintergrund: Um die Sprachdatei an Google zu senden zur Auswertung, muss sie erst noch umgewandelt werden. ffmpeg erstellt aus der .3gp-Datei eine .flac-Datei und diese wird dann hochgeladen. Scheinbar wird bei dir diese Datei nicht erstellt, sodass nichts an Google übermittelt wird.
Das ist alles ab ffmpeg:
ffmpeg version 0.8.13-6:0.8.13-1+rpi1, Copyright (c) 2000-2014 the Libav develop$
built on Jul 29 2014 02:09:52 with gcc 4.6.3
*** THIS PROGRAM IS DEPRECATED ***
This program is only provided for compatibility and will be removed in a future $
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from ‚uploads/voice.3gp‘:
Metadata:
major_brand : 3gp4
minor_version : 0
compatible_brands: isom3gp4
creation_time : 2015-01-07 19:07:38
Duration: 00:00:02.30, start: 0.000000, bitrate: 223 kb/s
Stream #0.0(eng): Audio: amrnb, 8000 Hz, 1 channels, flt, 12 kb/s
Metadata:
creation_time : 2015-01-07 19:07:38
voice.flac: Permission denied
Warning: Couldn’t read data from file „voice.flac“, this makes an empty POST.
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
^M 0 0 0 0 0 0 0 0 –:–:– –:–:– –:–:– 0$
[Wed Jan 07 19:07:42 2015] [error] [client 192.168.1.103] PHP Notice: Undefined$
[Wed Jan 07 19:08:13 2015] [error] [client 192.168.1.103] PHP Warning: unlink(v$
sudo: no tty present and no askpass program specified
ffmpeg version 0.8.13-6:0.8.13-1+rpi1, Copyright (c) 2000-2014 the Libav develop$
Hi Fabio,
also die Zeile „voice.flac: Permission denied“ besagt, dass www-data (sprich Apache) nicht in den Ordner „VoiceControl“ schreiben darf. Hast du denn die Rechte wie beschrieben mit „chmod 777 * -R“ gesetzt? Wechsle mal in den Ordner „/var/www“ und gib den Output von „ls -l“ an (die Zeile mit „VoiceControl“ reicht).
so das habe ich nun getan soll ich nun noch einmal es mit der app probieren zu sprechen?
Nach dem chmod? Ja klar ;)
habe dies nun ausgeführt nun ist auch die datei erschienen die voice.flac aber mein handy antwortet mir nochnicht mit „Hallo Du“
Wie ist denn der Inhalt der Datei „speech.results“?
Es ist nur die datei voice.flac erschienen auserdem ist im ordner voice control (wo auch die voice.flac datei ist) die datei speech.results vorhanden
Ja, die meine ich ;) Was steht denn da drin?
soll ich diese übers terminal ausführen?
Du kannst sie z.B. mit nano öffnen: nano speech.results. Den Inhalt kannst du hier posten.
<meta name=viewport content="initial-scale=1, minimum-scale=1, width=device-wi$
Error 403 (Forbidden)!!1
*{margin:0;padding:0}html,code{font:15px/22px arial,sans-serif}html{backgrou$
403. That’s an error.
Your client does not have permission to get URL
/speech-api/v2/recogn$
OK, das bedeutet, dass etwas mit deinem API-Key nicht stimmt. Hast du dir wie beschrieben einen erstellt und diesen in die speechdetect.sh eingetragen?
Hatte dies übersehen wollte es jetzt tun aber der API-Key speech ist nicht vorhanden!
Bitte schau dir die verlinkte Anleitung genau an, dort wird alles Schritt für Schritt beschrieben. Die entsprechende API wird bei Befolgung der Schritte in der Anleitung garantiert angezeigt:
Ich befinde mich unter der gleichen Rubrik wenn ich aber das API speech oben suchen will werden mir null treffer angezeigt.
Bist du auch wirklich Mitglied der Chromium-Entwickler-Gruppe bei Google?
Habe es nun gemacht hat nun alles perfekt geklappt licht geht an auch wenn die sprachwiedergabe etwas komisch ist aber es funktioniert einwandfrei.
Danke für die Hilfe und für dieses super erklärte tutorial
Lg Fabio
Grüß dich Alexander
Ich habe alles wie beschrieben gemacht un mir auch einen API Key besorgt aber ich bekomme von meinem pi diese Meldung
das ich keine Rechte für voice.flac habe.
voice.flac: Permission denied
Warning: Couldn’t read data from file „voice.flac“, this makes an empty POST.
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
Ich selber kann damit nicht viel anfangen hoffe du kannst mir dabei helfen.
Lg David
Hi David,
was sagt denn „ls -l“ im Ordner „/var/www/VoiceControl“?
insgesamt 16
-rwxrwxrwx 1 root root 1523 Mär 8 13:08 detect.php
-rwxrwxrwx 1 root root 294 Mär 8 13:44 speechdetect.sh
-rwxrwxrwx 1 root root 1583 Mär 8 13:03 speech.results
-rwxrwxrwx 1 root root 0 Mär 8 13:03 testFile.txt
drwxrwxrwx 2 root root 4096 Mär 8 13:03 uploads
Das sagt es dazu. Mir sagt es nichts aber du kannst doch sicher was damit anfangen
Hi David,
das sieht soweit ganz gut aus (auch wenn hier der Besitzer überall „root“ ist).
Wird denn die voice.3gp in den Ordner „uploads“ hochgeladen?
[email protected] /var/www/VoiceControl/uploads $ ls -l
insgesamt 8
-rw-r–r– 1 www-data www-data 4329 Mär 8 13:03 voice.3gp
Müsste so passen
Hi David,
merkwürdig – auf den ersten Blick sollte eigentlich alles passen.
Du könntest noch mal versuchen, den chmod-Befehl abzusetzen. Ansonsten könnte es ein Problem mit ffmpeg sein, das die Datei (warum auch immer) nicht konvertieren kann.
Hi Alexander
Ich werde ffmpeg mal neuinstalieren und nochmal den chmod befehl eingeben
Hi @all!
Mir gefällt die Idee mit einer eigenen App eigentlich sehr gut, sodass ich lieber das hier als die am Anfang beschriebene Fertiglösung einsetzen möchte. Bevor ich aber alles einrichte wollte ich mal fragen, ob das Projekt hier noch weiterentwickelt und eventuell auch erweitert wird? Bzw. funktioniert die Anleitung so noch?
Hallo, cooles Projekt
Bekomme aber immer folgende Fehler:
cat /var/log/apache2/error.log
[Wed Apr 06 06:25:15.105044 2016] [mpm_prefork:notice] [pid 733] AH00163: Apache /2.4.10 (Raspbian) configured — resuming normal operations
[Wed Apr 06 06:25:15.105345 2016] [core:notice] [pid 733] AH00094: Command line: ‚/usr/sbin/apache2‘
[Wed Apr 06 20:22:28.132540 2016] [mpm_prefork:notice] [pid 733] AH00169: caught SIGTERM, shutting down
[Wed Apr 06 20:23:00.718807 2016] [mpm_prefork:notice] [pid 743] AH00163: Apache /2.4.10 (Raspbian) configured — resuming normal operations
[Wed Apr 06 20:23:00.720597 2016] [core:notice] [pid 743] AH00094: Command line: ‚/usr/sbin/apache2‘
[Wed Apr 06 20:23:00.468567 2016] [mpm_prefork:notice] [pid 742] AH00163: Apache /2.4.10 (Raspbian) configured — resuming normal operations
[Wed Apr 06 20:23:00.474241 2016] [core:notice] [pid 742] AH00094: Command line: ‚/usr/sbin/apache2‘
[Wed Apr 06 20:49:23.763496 2016] [mpm_prefork:notice] [pid 742] AH00169: caught SIGTERM, shutting down
[Wed Apr 06 20:49:57.142191 2016] [mpm_prefork:notice] [pid 744] AH00163: Apache /2.4.10 (Raspbian) configured — resuming normal operations
[Wed Apr 06 20:49:57.172232 2016] [core:notice] [pid 744] AH00094: Command line: ‚/usr/sbin/apache2‘
[Wed Apr 06 21:31:32.997980 2016] [:error] [pid 755] [client 192.168.178.29:3477 1] PHP Warning: unlink(uploads/voice.3gp): No such file or directory in /var/ww w/html/VoiceControl/detect.php on line 5
[Wed Apr 06 21:31:32.998564 2016] [:error] [pid 755] [client 192.168.178.29:3477 1] PHP Warning: unlink(voice.flac): No such file or directory in /var/www/html/ VoiceControl/detect.php on line 7
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:
#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.
sudo: no tty present and no askpass program specified
./speechdetect.sh: line 4: ffmpeg: command not found
Warning: Couldn’t read data from file „voice.flac“, this makes an empty POST.
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 1719 100 1719 0 0 5444 0 –:–:– –:–:– –:–:– 5474
[Wed Apr 06 21:31:33.643576 2016] [:error] [pid 755] [client 192.168.178.29:3477 1] PHP Notice: Undefined offset: 1 in /var/www/html/VoiceControl/detect.php on line 23
[Wed Apr 06 21:31:47.001191 2016] [:error] [pid 761] [client 192.168.178.29:5049 5] PHP Warning: unlink(voice.flac): No such file or directory in /var/www/html/ VoiceControl/detect.php on line 7
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:
#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.
sudo: no tty present and no askpass program specified
./speechdetect.sh: line 4: ffmpeg: command not found
Warning: Couldn’t read data from file „voice.flac“, this makes an empty POST.
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 1719 100 1719 0 0 6246 0 –:–:– –:–:– –:–:– 6273
[Wed Apr 06 21:31:47.567117 2016] [:error] [pid 761] [client 192.168.178.29:5049 5] PHP Notice: Undefined offset: 1 in /var/www/html/VoiceControl/detect.php on line 23
[Wed Apr 06 21:38:22.521223 2016] [:error] [pid 751] [client 192.168.178.29:3553 8] PHP Warning: unlink(voice.flac): No such file or directory in /var/www/html/ VoiceControl/detect.php on line 7
rm: cannot remove ‚voice.flac‘: No such file or directory
./speechdetect.sh: line 4: ffmpeg: command not found
Warning: Couldn’t read data from file „voice.flac“, this makes an empty POST.
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 1719 100 1719 0 0 5295 0 –:–:– –:–:– –:–:– 5321
[Wed Apr 06 21:38:23.173936 2016] [:error] [pid 751] [client 192.168.178.29:3553 8] PHP Notice: Undefined offset: 1 in /var/www/html/VoiceControl/detect.php on line 23
[Wed Apr 06 21:38:29.973276 2016] [:error] [pid 752] [client 192.168.178.29:3888 1] PHP Warning: unlink(voice.flac): No such file or directory in /var/www/html/ VoiceControl/detect.php on line 7
rm: cannot remove ‚voice.flac‘: No such file or directory
./speechdetect.sh: line 4: ffmpeg: command not found
Warning: Couldn’t read data from file „voice.flac“, this makes an empty POST.
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 1719 100 1719 0 0 8057 0 –:–:– –:–:– –:–:– 8108
[Wed Apr 06 21:38:30.515245 2016] [:error] [pid 752] [client 192.168.178.29:3888 1] PHP Notice: Undefined offset: 1 in /var/www/html/VoiceControl/detect.php on line 23
Versteh ich nicht wirklich. Jemand eine Idee?
Danke!
HI,
ist irgendwas geändert worden von Google oder so. Habe den Pi jetzt paar Monate ausser Betrieb gehabt wegen Umzug. Leider geht nu nix mehr.