Da ich mittlerweile eine eigene kleine Sprachbox in meinem Beitrag Offline Sprachassistent mit Python erstellt habe, sollte diese natürlich auch Aktionen ausführen. Als erste Aktion wollte ich meine LED-Streifen mit dem offline Sprachassistenten steuern. Dafür habe ich in dem oben genannten Beitrag schon viel Arbeit davon erklärt. Anstatt des Klemmbretts habe ich jetzt eine kleine Platine benutzt und die benötigten Komponenten verlötet. Die Platine habe ich dann in einem alten Raspberry PI Gehäuse verbaut. Bei den LED-Streifen habe ich darauf geachtet, das diese über USB und dementsprechend 5V laufen. Zum Einsatz kommen die Govee LED Streifen mit 3m, die ich bei dem Amazon Prime Days günstig geschossen hatte. Mit meiner Steuerung kann ich den Steifen an und aus schalten. Die Farbe kann ich entweder mit der App oder der Fernbedienung ändern.
Automatischer Start beim Boot
Damit ich die Sprachsteuerung nicht dauerhaft eigenhändig starten muss, habe ich mich dazu entschlossen, dass überprüft wird, ob das Startup Skript läuft und falls nicht, dass es automatisch gestartet wird. Dafür existieren die beiden Skripte run_speech.sh und speech.sh. Beide liegen im /etc/ Verzeichnis und sind ausführbar.
run_speech.sh ist als Cronjob angelegt, der jede 5 Minuten überprüft, ob speech.sh läuft. Sollte dieses aus irgendeinen Grund nicht laufen, startet run_speech.sh speech.sh und schiebt es in Hintergrund.
run_speech.sh #!/bin/bash proc='speech.sh' pid=`ps aux | grep -w ${proc} | grep -v grep` rc=$? if [ ! $rc -eq 0 ] then echo "starte speech" /etc/speech.sh &>> /var/log/speech/speech`date +%V`.log & fi exit
In speech.sh läuft eine Dauerschleife, die dauerhaft überprüft, ob das Python Skript für den Sprachassistenten läuft. Auch hier ist es der Fall, dass speech.py gestartet wird, falls es nicht läuft.
speech.sh #!/bin/bash name="speech.py" waittime=5 if [ ! -d "/var/log/speech" ] then mkdir "/var/log/speech" fi while true do process=`ps aux | grep "${name}" | grep -v grep` rc=$? if [ ! $rc -eq 0 ] then echo "`date +%Y-%m-%d\ %T` INFO `basename $0` :: starting speech.py..." >> /var/log/speech/speech`date +%V`.log cd /home/pi/vosk-api/python/example /usr/bin/python3 /home/pi/vosk-api/python/example/speech.py &>> /var/log/speech/speech-detail`date +%V`.log & echo "`date +%Y-%m-%d\ %T` INFO `basename $0` :: speech.py was started" >> /var/log/speech/speech`date +%V`.log fi sleep ${waittime} done
Den Quellcode, für den Sprachassistenten findet ihr im oben genannten Beitrag.
Video
Zum Schluss noch ein Video, das genau zeigt, wie ich die LED-Streifen mit dem offline Sprachassistenten steuern kann. Klar zu sehen ist, dass der Assistent nur dann reagiert, wenn er das Codewort herausgehört hat. In der speech-detail.log schreibt der Prozess die erkannten Wörter/Sätze nieder. Der Sprachassistenten ist soweit aufgebaut, dass dieser das Codewort nicht aus einem Satz herausfiltert. Dies macht ihn ein wenig anfällig auf im Hintergrund getätigte Gespräche, die das Mikrofone eventuell mit aufzeichnet.
Ein Gedanke zu „LED-Streifen mit offline Sprachassistenten steuern“