Integrare Raspberry Pi con Google Assistant

raspberry pi ifttt

Raspberry e Google Assistant insieme!

Da poco tempo è sbarcato anche in Italia Google Home, lo speaker intelligente prodotto da Google che integra al suo interno Google Assistant, e molte persone si staranno chiedendo come poterlo utilizzare per controllare dispositivi smart per rendere la propria casa un po’ più intelligente.

In commercio esistono già diverse soluzioni pronte all’uso che si integrano con l’assistente di Google, come Philips Hue o le Xiaomi Yeelight, che comprendono lampadine e prese elettriche connesse, ma costano svariate decine di euro. Per questo motivo mi sono chiesto come poter realizzare una casa domotica economica utilizzando il Raspberry che avevo in casa per comandare luci e prese della corrente semplicemente con l’uso della voce.

Tuttavia questa guida è più generale e ti mostrerà come controllare un qualsiasi relè tramite Google Assistant, usando Node.js e il servizio IFTTT.

Step 1: che cosa ti serve

Tutto il resto è software. Se sei completamente nuovo sul mondo del Raspberry, ti consiglio di dare una letta su come installare Raspbian e come connetterlo ad internet.

Step 2: Preparazione del Raspberry e della rete

Per prima cosa bisogna connettere il Raspberry ad Internet, o via Wi-Fi o tramite Ethernet, e successivamente configurare il router in modo tale da avere un server sempre disponibile e raggiungibile esternamente.

Adesso occorre configurare il router (o se lo avete, il firewall) per permettere a Google Assistant di raggiungere il Raspberry dall’esterno della LAN. Per fare ciò non esiste una guida perché dipende da quale router o firewall si utilizza, comunque ti farò vedere due esempi:

Router TP-LINK:

Tp-Link router image

Firewall Pf-Sense:

PfSense image

Molte cose possono andare storte in questo processo le prime volte. Rimani paziente e cerca le cose su Google. La comunità è molto attiva, e probabilmente troverai qualcuno che abbia già avuto il tuo problema!

Step 3: Installazione del software

Innanzitutto bisogna aggiornare le liste dei pacchetti all’ultima versione con il comando:

sudo apt-get update

In questo progetto viene utilizzato Node.js, una piattaforma open-source che permette di eseguire applicazioni scritte in Javascript al di fuori del browser.

Per scaricare e installare la versione più recente di Node.js, utilizzare il seguente comando:

curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash –

sudo apt-get install -y nodejs

Una volta installato Node.js bisogna creare il server che permette l’esecuzione dei comandi e che si interfacci con IFTTT.

Step 4: Creazione del server

Per creare il server Node.js digita:

cd /home git clone https://github.com/krpeacock/google_home_starter.git 

cd google_home_starter

npm install

touch .env

nano .env

Adesso devi copiare questo nel file:

DEV=FALSE

PORT=8000

PASS=yourpasswordhere

Imposta la porta che vuoi utilizzare in PORT (io per test ho usato la porta 8000) e imposta la password dopo la voce PASS.

Infine per avviare il server scrivi npm start

Step 5: Adattare il server alle tue esigenze

Ogni GPIO da controllare ha uno script python dedicato simile a questo:

import RPi.GPIO as GPIO

GPIO.setwarnings(False)

GPIO.setmode(GPIO.BCM)

GPIO.setup(23, GPIO.OUT)

GPIO.output(23, False)

Per aggiungere altri GPIO da controllare al server recati nella cartella con il comando:

cd ./public/python

Adesso basterà copiare il file “sw1_on.py” situato in questa cartella con il comando:

sudo cp sw1_on.py sw2_on.py

rinominarlo e modificarlo cambiando il numero del GPIO (in questo caso 23) con quello che si necessita controllare.

Infine bisogna aggiungere il nuovo file python alla lista dei file conosciuti al server. Per fare questo occorre aprire il file “saveState.json” situato nella directory google_home_starter. Digita:

sudo nano saveState.json

e aggiungi tante righe quanti sono i GPIO da controllare con i relativi file python.

Questo è un esempio di due GPIO da controllare.

{"switches":[

                {"id":"sw1","state":"off","name":"Lamp"},

                {"id":"sw2","state":"off","name":"Lamp2"},

]}

Riflettendo, può sembrare un po’ complicato per un non sviluppatore. Tuttavia spero di essere stato abbastanza chiaro sulla procedura da svolgere per creare un server Node.js su Raspberry e utilizzarlo per comandare i GPIO (o, ad esempio, un relè ad esso collegato) tramite Google Assistant. In presenza di dubbi o domande non esitate a inviarmi una email per chiedere informazioni.

Step 6: Connessione a Google Assistant

Se sei riuscito ad arrivare a questo punto, i prossimi passaggi sono probabilmente l’unica ragione per cui sei qui. Va bene! Adesso arriva il bello.

Il server è in esecuzione e può controllare i GPIO. Esso è strutturato in modo che una richiesta POST possa modificare lo stato del GPIO. Ora tutto ciò che ti serve è ottenere che Google Assistant possa inviare una richiesta POST al tuo dispositivo. Infine, si potrebbe aggiungere qualche autorizzazione in modo che gli estranei non possano controllare i tuoi dispositivi, ma non complichiamo troppo le cose.

  1. Vai su www.ifttt.com e collegalo al tuo account Google;
  2. Poi recati al seguente indirizzo: www.ifttt.com/create e fai clic sul +this;
  3. Cerca e seleziona Google Assistant;
  4. Poi scegli “Say a simple phrase”;
  5. Ora dì a Google cosa dovrebbe fare l’azione (esempio: Accendi la luce in camera);
  6. Indica una risposta (esempio: Accensione della luce in camera);
  7. Imposta la lingua su: Italiano;
  8. Fai clic su “Create Trigger” e procedi;
  9. Fai clic sul link +that;
  10. Cerca “Webhooks”;
  11. Seleziona “Make a web request”;

Ora c’è il punto importante. Identifica il tuo indirizzo IP pubblico (o dominio) e inseriscilo nella porzione dell’URL. Se hai seguito la mia struttura nel progetto, dovrebbe essere simile a questo:

http://youripaddress/API/switches/sw1?password=yourpasswordhere

Piccola precisazione: l’indirizzo IP pubblico deve essere statico, altrimenti periodicamente o ad ogni riavvio del router cambierà. Pertanto, nel caso tu non abbia l’indirizzo l’IP pubblico, è consigliato usare servizi di DDNS come “no-ip” o “dyndns”.

  1. Imposta il Method su POST
  2. Il Content Type dovrebbe essere: “text/plain”;
  3. Il Body può essere lasciato vuoto.
  4. Crea la tua azione e scegli Finish.

ifttt raspberry e google

Congratulazioni!

Ce l’hai fatta! Ora il tuo Google Assistant sa come comunicare con il tuo Raspberry.

Dato che questo script ha la funzione di un interruttore, potresti continuare a dire “Accendi la luce in camera” sia per accenderla sia per spegnerla. Comunque ho preferito aggiungere un altro comando per lo spegnimento della luce in modo tale da rendere tutto più confortevole.

Se desideri contribuire a questa guida o collaborare con me, sentiti libero di scrivermi! Grazie

Scopri com ecreare un raid

Previous Entries UniFi controller on any version of Ubuntu or Debian Next Entries How to install self hosted speedtest on your server