Controllo vocale delle luci di casa
Avendo in casa una lampada "smart" della serie Trådfri di IKEA a fare poco di "smart", un computer con linux, ed essendo capitato sul sito di voice2json.org mi son detto: perchè non fare due più due più due?
Ed ecco il risultato! (cinque... oh no.)
Step 1: controllare le luci
Cominciamo col poter controllare le luci da riga di comando.
Cosa serve:
- Una lampadina "smart" della serie Trådfri di IKEA
- Il suo gateway, già accoppiato e testato
- Un computer con linux
- bash, grep, sed
- coap-client (debian: libcoap2-bin, AUR: coap-client)
- lo script "tradfri" che trovate qui https://git.sr.ht/~fabrixxm/tradfri-cli/blob/master/tradfri
Salviamo lo script in una cartella appropriata, p.e. ~/tradfri/
e lo rendiamo
eseguibile.
Da console lo eseguiamo una prima volta per fargli creare il file di
configurazione vuoto: ~/tradfri/tradfri.rc
.
Editiamo il file di configurazione e inseriamo l'ip e il codice del gateway. Possiamo anche inserire un nome utente a scelta, o lasciare che lo script ne generi uno a caso.
Eseguiamo ancora lo script per fare login. Teoricamente dovrebbe salvare in automatico la chiave di sessione nel file di configurazione, ma non funziona. La chiave viene stampata a terminale e dovremmo copiarla nel file di configurazione a mano.
Ora possiamo verificare che funzioni:
$ ~/tradfri/tradfri info
per avere informazioni sul gateway
$ ~/tradfri/tradfri devicelist
per avere un elenco degli id dei devices collegati al gateway
$ ~/tradfri/tradfri deviceinfo <id>
per avere i dettagli di ogni device. Cerchiamo quello che corrisponde alla lampadina.
Nel mio caso è il device con id 65538
Proviamo ad accendere e spegnere la lampadina:
$ ~/tradfri/tradfri light <id> on
$ ~/tradfri/tradfri light <id> off
Se tutto funziona ora dovremmo poter controllare la lampadina.
Impostiamo un alias, un nome, per la lampadina. Diciamo che è la lampadina del salotto. La chiameremo quindi "salotto".
Per impostare l'alias creiamo il file ~/tradfri/aliases.rc
e ci scriviamo dentro:
salotto=<id>
sostituendo l'id con quello della nostra lampadina. p.e:
salotto=65538
Ora possiamo controllare la lampadina riferendoci al suo nome:
$ ~/tradfri/tradfri light salotto on
$ ~/tradfri/tradfri light salotto off
Step 2: controllo vocale
serve:
- lo stesso computer dello step 1
- microfono e (opzionalmente) casse
- aplay
- python
- pazienza
Installiamo voice2json seguendo la guida qui: http://voice2json.org/install.html
è disponibile un pacchetto debian che non ho provato, ma la compilazione da sorgente non è complicata.
Il profilo in italiano da scaricare è qui https://github.com/synesthesiam/it_pocketsphinx-cmu/releases
Possiamo seguire la guida di voice2json per vedere che funzioni.
Ho trovato che nel profilo in italiano il frasario (il contenuto del file senteces.ini) non funziona benissimo, in particolare la parola "lampada" non viene riconosciuta. Si puo' sostituirla con la parola "luce" e rilanciare il training per avere risultati migliori.
Una volta che voice2json
funziona, possiamo mettere assieme i pezzi.
Innanzitutto modifichiamo il file senteces.ini
per adeguarsi alle nostre esigenze.
Cambiamo il contenuto in:
[ChangeLightState]
light_state = (accendi | spegni){state}
light_name = (soggiorno | garage){name}
<light_state> [la] luce (in|del) <light_name>
Il nuovo file imposta quindi un solo "intent" (ChangeLightState
) e definisce
il nome delle lampade con una sola parola.
Perchè l'accrocchio funzioni, i nomi delle lampade in questo file devono
corrispondere ad almeno un alias del file ~/tradfri/aliases.rc
.
Seguendo questa guida abbiamo definito l'alias soggiorno
e quindi potremmo dire
"accendi la luce del soggiorno" o "spegni la luce in soggiorno".
Scarichiamo lo script listen.sh, lo salviamo in ~/tradfri/
e lo rendiamo eseguibile.
Lo apriamo con un editor di testo per modificare i primi due percorsi:
- il percorso all'eseguibile di
voice2json
- il percorso allo script
tradfri
Ci servono anche tre file di suoni, che troviamo qui che vanno salvati in ~/tradfri/sounds/
nota: vi sarete accorti che arriva tutto da un repo git. Per fare più in fretta, possiamo clonare il repo https://git.sr.ht/~fabrixxm/tradfri-voice e scaricare così lo script, i suoni e il file
senteces.ini
da copiare nel profilo.
E lo eseguiamo.
Lo script resterà in attesa della frase di attivazione ("Hey, Mycroft"),
stampando a terminale "Waiting for wake word...".
Quando riconosce la frase di attivazione, esegue un suono di notifica e resta in
ascolto del comando (p.e. "accendi la luce del soggiorno").
Terminato l'ascolto del comando, emette un nuovo suono di notifica e tenta di
riconosce ed eseguire il comando.
Se l'operazione va a buon fine vedremo accendersi la luce del soggiorno!
Altrimenti un nuovo suono di notifica che segnala un errore viene emesso.
Il ciclo poi si ripete e lo script si rimette in attesa della frase di
attivazione.
Link e riferimenti
- voice2json.org : Command-line tools for speech and intent recognition on Linux
- tradfri-cli : a WiP commandline client for tradfri gateway
- tradfri-voice : Experimental tradfri light voice control
- ikea-tradfri-coap-docs
nota: questo post non è sponsorizzato in nessuna maniera da IKEA, la quale è proprietaria del marchio "Trådfri"