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:

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

nota: questo post non è sponsorizzato in nessuna maniera da IKEA, la quale è proprietaria del marchio "Trådfri"