Integriamo Amazon Alexa in Home Assistant

L'angolo dei lettori

Scritto da Vincenzo Caputo

Benvenuti nella rubrica "l'angolo dei lettori". Questo spazio è una sezione del blog che permette a chiunque di scrivere un articolo o realizzare un video, effettuare prove e test che riguardano il mondo della tecnologia e proporne la pubblicazione su queste pagine.

Oggi Gabriele Bosco, che ringraziamo per questa splendida guida, ci spiegherà come integrare Alexa all'interno dell'ambiente Home Assistant senza usare Home Assistant CLOUD, quindi a costo zero.

Ai seguenti link potete trovare tutti i dispositivi della famiglia Echo  

Amazon Echo Dot (sconto del 42%)

Amazon Echo (sconto del 40%)

Amazon Echo Plus (sconto del  32%) 

Amazon Echo Spot (sconto del 30%)

Home Assistant è un buon prodotto anche se si porta dietro i suoi piccoli difetti di gioventù.

O meglio, lo era completamente fino a qualche tempo fa, prima che Nabu Casa decidesse di far pagare 5 dollari al mese per il servizio di cloud.

Non voglio assolutamente aprire una discussione sul discorso costi/sviluppi/supporto e quant’altro in quanto ognuno è libero di trarre le proprie conclusioni, ma personalmente - per l'utilizzo che ne faccio di HA al momento - la cifra è tutt'altro che irrisoria.

Home Assistant cloud è gratis per un mese, poi ha un costo mensile. Tenendo conto che per i prossimi mesi, il mio sistema sarà sempre in sviluppo e mai operativo, ho ritenuto quindi troppo oneroso percorrere questa strada.

Ho cercato quindi una possibile soluzione sul web, e dopo tanto cercare, mi sono imbattuto in alcuni articoli su haaska; purtroppo tutti gli articoli che trovavo erano vaghi, o trattavano l'argomento in maniera superficiale, lasciando troppi passi come scontati, rendendo così difficile il capire cosa si doveva fare.

Ho trovato dopo tanto cercare, un articolo che ho seguito sia per integrare Alexa nel mio HA, che per stendere questa guida, anche perché inizialmente l'articolo espone le stesse criticità che Colling ha evidenziato nel suo blog.

Visto che il lavoro principale è stato suo, vi riporto per correttezza la fonte: http://collingwood.me.uk/blog/index.php/hass-io-and-alexa/

Arriviamo quindi alla guida tradotta con l'aggiunta di immagini per rendere ancora più comprensibili i passaggi da fare.

1) HA 0.62 o superiore in esecuzione

2) Visto che dovrai esporre l'HA su internet, DEVI assolutamente utilizzare come protocollo l'HTTPS e per rendere le cose ancora più semplici, utilizzare un DDNS visto che la maggior parte degli IP pubblici utilizzati per utenti privati, non è un IP statico.

3) Ipotizzando che hai già quindi installato e configurato Duck DNS e Let's Encrypt (altrimenti puoi seguire questa guida QUI) non resta che aggiungere le seguenti righe sul file configuration.yaml:

api:
alexa:
  smart_home:

in questo modo esponiamo tutte le entry su Alexa, ma almeno possiamo verificarne il corretto funzionamento.

4) A questo punto, salvare il file e riavviare Hass.io

5) Creare il file zip da caricare in AWS come segue:

dal tuo browser accedi a Home Assistant. In alto a sinistra, dopo il titolo "Home Assistant" ci sarà un logo circolare azzurro che mostrerà l'iniziale del nome del tuo profilo, premi su di esso in modo da accedere al profilo e al fondo della pagina seleziona dalla finestra Token di accesso a lunga vita, il pulsante "crea token".

5.1) Inserisci come nome haaska e copiati il token di accesso che viene automaticamente generato su un file di appunti, ti servirà successivamente.

5.1.1) PER CHI HA UNA DISTRIBUZIONE LINUX RASPBIAN

Se hai una distribuzione raspbian o altra distribuzione che supporta il comando apt-get, continua la lettura.

Se hai una distribuzione che utilizza invece il comando APK (ad esempio Alpine che è la distro di Hassio, vai al punto “5.1.1) PER CHI HA UNA DISTRIBUZIONE LINUX ALPINE (chi usa l’immagine HASSIO)” poco più in basso.

5.2) posizionati in una cartella di tua preferenza e all'occorrenza creane una se vuoi avere un ambiente pulito

cd ~

mkdir temp && cd temp

5.3) Scarica il file zip dalla repository su GitHub

wget https://github.com/mike-grant/haaska/archive/master.zip

unzip master.zip

Attenzione: in caso di errori, è probabile che tu non abbia ancora installato wget e unzip, per installarli digita

sudo apt-get update

sudo apt-get install zip wget -y

5.4) accedere quindi alla nuova cartella che il tool zip ha creato

cd haaska-master/config

5.5) copia il file sample in questo modo

cp config.json.sample config.json

5.6) utilizza il tuo editor predefinito, ad esempio io uso nano, ed edita il file appena copiato config.json

nano config.json

e da file simple così:

{
  "url": "http://localhost:8123/api",
  "bearer_token": "",
  "debug": false,
  "ssl_verify": true,
  "ssl_client": []
}

dovrai semplicemente modificare i due campi url e bearer_token (token che avete creato al punto 5.1)

{
  "url": "https://test.duckdns.org:8123/api",
  "bearer_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiIxMGQwM2ZiNDZhNDM0NTJhODNlY2Q1ZWNmYzY3M2IzNSIsImlhdCI6MTU0MTc5NDcyNiwiZXhwIjoxODU3MTU0NzI2fQ.FXiI7SbMF1Z1ANa-86zCoTBTn_ctpOtNtDt6jFLZpI",
  "debug": false,
  "ssl_verify": true,
  "ssl_client": []
}

Attenzione, come avete visto anche il protocollo è stato cambiato. Da http:// è diventato https://

una volta fatto, salvare con CTRL+O, invio, ctrl+X (se si usa nano, per il VI editor usare il comando :wq!)

5.7) torna al livello precedente di directory

cd ..

5.8) compila

make

vedrai delle linee con voci di adding se hai tutte le librerie necessarie

Salta quindi al punto 6, poiché i passi successivi ti servono solo se stai usando un’immagine Hassio

5.1.1) PER CHI HA UNA DISTRIBUZIONE LINUX ALPINE (chi usa l’immagine HASSIO)

5.2) accedi in SSH, posizionati in una cartella di tua preferenza e all'occorrenza creane una se vuoi avere un ambiente pulito

mkdir temp

cd temp

5.2.1) Installa i requisiti necessari per la compilazione

apk add make

apk add py-pip

apk add zip

apk add wget

apk add nano

5.3) Scarica il file zip dalla repository su GitHub

wget https://github.com/mike-grant/haaska/archive/master.zip

unzip master.zip

5.4) accedere quindi alla nuova cartella che il tool zip ha creato

cd haaska-master/config

5.5) copia il file sample in questo modo

cp config.json.sample config.json

{
  "url": "http://localhost:8123/api",
  "bearer_token": "",
  "debug": false,
  "ssl_verify": true,
  "ssl_client": []
}

dovrai semplicemente modificare i due campi url e bearer_token (token che avete creato al punto 5.1)

{
  "url": "https://test.duckdns.org:8123/api",
  "bearer_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiIxMGQwM2ZiNDZhNDM0NTJhODNlY2Q1ZWNmYzY3M2IzNSIsImlhdCI6MTU0MTc5NDcyNiwiZXhwIjoxODU3MTU0NzI2fQ.FXiI7SbMF1Z1ANa-86zCoTBTn_ctpOtNtDt6jFLZpI",
  "debug": false,
  "ssl_verify": true,
  "ssl_client": []
}

Attenzione, come avete visto anche il protocollo è stato cambiato. Da http:// è diventato https://

una volta fatto, salvare con CTRL+O, invio, ctrl+X (se si usa nano, per il VI editor usare il comando :wq!)

5.7) torna al livello precedente di directory

cd ..

5.8) compila

make

vedrai delle linee con voci di adding se hai tutte le librerie necessarie

6) FINE PROCEDURA DI COMPILAZIONE FILE HAASKA.ZIP

A questo punto - se tutto è andato a buon fine – ti troverai un nuovo archivio compresso con il nome di haaska.zip che dovrai recuperare (spostandolo ad esempio nella cartella di share, tramite samba, via ftp se hai un ftp server o in qualsiasi altro modo tu voglia)

Io ho usato samba ed ho configurato il raspberry come file server per accedere ai file in maniera più comoda, perché il resto delle operazioni le ho effettuate da pc con os Windows 10.

Operazioni da effettuare su browser, saranno necessarie tre tab che non dovranno essere chiuse ma che dovranno rimanere aperte per scambio di informazioni.

7) registrati con "login con Amazon" come segue:

7.1) vai su Amazon Developer Console  . Se hai un account accendi, altrimenti creane uno nuovo

7.2) Una volta effettuato l'accesso, fai clic sul link "Accedi con Amazon" dal menu in alto

7.3 seleziona "Create a New Security Profile"

e dare al profilo un qualsiasi nome di vostra preferenza, io utilizzerò hassio e nel campo consent privacy notice url digitare qualsiasi indirizzo, quindi salvare.

7.4) Fai clic sul menu a discesa accanto al profilo (icona a forma di ingranaggio) e fai clic su "web settings".

IMPORTANTE: Lascia questa scheda aperta, perché dovremo tornarci

7.5) apri una seconda scheda nel tuo browser e vai alla console degli sviluppatori e crea una nuova skill dall'apposito pulsante azzurro "Create Skill"

7.6)  Inserisci il nome della skill (ti suggerisco "haaska"), la lingua predefinita ( Italian (IT) se hai impostato su Alexa l'italiano) e fai clic sul riquadro "Smart Home" per selezionarlo. Quindi fare clic sul pulsante in alto "Create Skill"

7.7) seleziona dal primo tab su Payload version la versione preferita: V3 (preferred)

ATTENZIONE: lascia aperta anche questa TAB perché abbiamo la necessità di aprire una nuova tab sul tuo browser, torneremo qui successivamente.

8. Lascia aperta la scheda Abilità e accedi al tuo account AWS . Se non ne hai uno, crealo e accedi.

ATTENZIONE: ti verrà richiesto di fornire i dati della carta di credito quando crei il tuo account ma la procedura è completamente gratuita.

Tieni sempre sott'occhio eventuali mail in futuro da Amazon, caso mai dovessero cambiare idea in un futuro.

8.1) Vai su Services, nel campo di ricerca digita IAM e seleziona l'unica voce che ti trova

8.2) sul lato sinistro della nuova schermata, selezionare il menu Roles e dalla nuova tab selezionare il pulsante Create role.

8.3) assicurati che sia evidenziata la prima voce AWS service e seleziona il servizio Lambda

8.4) quindi premere sul pulsante azzurro in basso a destra NEXT: Permissions

8.5) nel campo Filter policies digita base, quindi spunta l'unica policy che ti ha trovato che si chiama DatabaseAdministrator, quindi seleziona sempre l'utimo pulsante in basso a destra della schermata che si chiama NEXT: Review

8.6) Digita lambda_basic_execution nella casella Role name e fai clic sul pulsante Create role

8.7) Dal menu in alto, seleziona Services, quindi dal gruppo Compute seleziona Lambda

8.7.1) Dal Menu in alto a destra, DOVETE selezionare EU (IRLANDA)

8.8) Crea una nuova funzione da pulsante arancio Crea funzione

8.8.1) Seleziona il riquadro Crea da zero.

8.8.2) Nel campo Nome inserisci haaska

8.8.3) Dalla casella delle Runtime seleziona Python 3.6

8.8.4) Come Ruolo lasciare la voce Seleziona un ruolo esistente

8.8.5) Dalla casella Ruolo esistente selezionare lambda_basic_execution

8.8.6) quindi crea la funzione premendo sul pulsante arancio in basso a destra Crea funzione

8.9) nella parte centrale della schermata, alla voce Codice della funzione

8.9.1) Tipo di voce del codice, selezionare Carica un file .zip e carica il file che hai generato al punto 6 (haaska.zip) premendo sul pulsante carica subito sotto la casella che hai appena modificato.

8.9.2) La Runtime dovrebbe essere già settata su Python 3.6, ma se così non fosse modificala.

8.9.3) nel campo Gestore invece devi cancellare la voce che c'è e scrivere haaska.event_handler

8.9.4 scendi più sotto di pagina e nella finestra Ruolo di esecuzione verifica di avere le informazioni come avevi impostato ai punti 8.8.4 e 8.8.5

8.9.5) Torna all'inizio della pagina, nella zona Designer

8.9.5.1) Nella scheda Designer, seleziona Alexa Smart Home dall'elenco a sinistra.

ATTENZIONE: Se non lo vedi, hai una posizione incompatibile impostata nel passo 8.7.1

8.9.5.2). Nella nuova sezione Configura trigger che appare subito sotto, incolla la Skill ID (amzn1.ask.skill...…….) copiata dalla scheda lasciata aperta nel passaggio 8 nella casella di testo "ID applicazione" e fai clic sul pulsante Aggiungi

8.9.5.3) torna all'inizio della pagina e premi il pulsante in alto a destra Salva

Indovina? esatto! Lascia aperta la schermata, perché ci torneremo dopo.

8.10)  Copia l'ARN come mostrato nella parte superiore destra della pagina, quindi incollalo nella casella "Default endpoint" nella scheda precedente (per intenderci la seconda scheda che hai aperto sul browser dove sei fermo alla schermata Payload version v3 (preferred) (vedi punto 7.7)

8.11) Selezionare la checkbox Europe, India ed incollare anche qui lo stesso ARN come dal punto 8.10

E' molto importante, altrimenti l'haaska non funzionerà

8.12) premi quindi su Salva in alto a destra e andare su Setup Account Linking

8.13) Digita su Authorization URI:  https://www.amazon.com/ap/oa

8.14) Digita su Acces Token URI: https://api.amazon.com/auth/o2/token

8.15) inserisci il CLIENT ID che hai recuperato dalla prima TAB ancora aperta sul browser dove hai il security profile ancora aperto sul tab Web Settings (punto 7.4)

8.16) Inserisci il CLIENT Secret che recuperi sempre dal primo tab alla voce Client Secret

8.17) Client Authentication Scheme lascia HTTP BASIC (Recommended)

8.18) premere sul testo azzurro subito sotto + Add scope e digita profile

Dovresti quindi ritrovarti in una situazione simile a quella riportata

8.19) torna in alto e premi sul pulsante azzurro Save e lascia ancora aperta la pagina perché dobbiamo utilizzare le Redirect URLS che si sono generate a fondo pagina.

9) Ritorna al primo Tab, quello della Security Profile Management, premi sul pulsante modifica e compila i campi Allowed Return Urls (tutti e 3) andando a copiare i 3 valori della Redirect Urls che abbiamo generato al punto precedente (ultimo screenshot in basso, si notano anche se ovviamente li ho coperti in parte)

9.1 Salva

10) Come da GitHub riportato:  https://github.com/mike-grant/haaska/wiki/Testing-Haaska

10.1) Torna al terzo Tab dove hai la funzione haaska ancora aperta, quindi seleziona Configura eventi di test

10.2) Inserisci un nome evento ad esempio Test

10.3) cancella le righe di test

{
  "key1": "value1",
  "key2": "value2",
  "key3": "value3"
}

e incolla

{
  "directive": {
    "header": {
      "namespace": "Alexa.Discovery",
      "name": "Discover",
      "payloadVersion": "3",
      "messageId": "1bd5d003-31b9-476f-ad03-71d471922820"
    },
    "payload": {
      "scope": {
        "type": "BearerToken",
        "token": "access-token-from-skill"
      }
    }
  }
}

10.4) premi quindi sul pulsante salva

10.5) esegui il test, selezionando dal menu a tendina Test e premendo il pulsante Esegui il test

11) se tutto ha funzionato correttamente, avrai il risultato dei Log in verde ed espandendo la schermata dei log, vedrai che Alexa avrà identificato i tuoi payload.

12) Aggiungere la Skill che hai appena creato sul tuo profilo di Alexa

https://github.com/mike-grant/haaska/wiki/Usage

Ringraziamo ancora una volta Gabriele Bosco per questa preziosissima guida, e andiamoci a godere il solito video di fine articolo dove possiamo ammirare il sistema in azione! Buona visione!

Produrre e aggiornare contenuti su vincenzocaputo.com richiede molto tempo e lavoro. Se il contenuto che hai appena letto è di tuo gradimento e vuoi supportarmi, clicca uno dei link qui sotto per fare una donazione.

Vincenzo Caputo

Nato a Matera, il 1° novembre 1977. Sono da sempre appassionato di tecnologia e ho un'esperienza lavorativa ventennale nel settore IT. Mi piace sperimentare e cercare sempre nuove soluzioni e soprattutto mi piace comunicare le mie esperienze agli altri.


Vai ai commenti