Domotica - Integrare Home Assistant con Alexa

Posted by RedBlue on August 30, 2021 · 9 mins read

Oggi vediamo come integrare Home Assistant con Alexa.

Finora abbiamo un sistema controllabile unicamente dall'interfaccia del PC o dall'app, ma la possibilità di usare tutto solo con la voce non può essere trascurata.

Diciamo subito che esistono almeno due modi di realizzare questa integrazione: il primo, più semplice, prevede di far apparire tutto come fosse una lampadina, il secondo invece prevede una vera e propria integrazione mediante una skill realizzata apposta.

Ho scelto il secondo metodo, all'apparenza molto complesso, ma in realtà vedremo come integrare Home Assistant con Alexa sia più semplice del previsto, basta procedere con calma e seguire le istruzioni che scriverò.



Premessa: è necessario che Home Assistant sia raggiungibile dall'esterno.

Primo passo. Iniziamo col creare un token di accesso a lunga vita dal menu relativo al nostro utente (in basso a sinistra), basterà crearlo, indicare un nome e copiarlo da qualche parte, servirà successivamente.

Secondo passo, editiamo il file configuration.yaml ed inseriamo le seguenti righe di codice:

alexa:
  smart_home:
    filter:
      include_domains:
        - light

In questo modo stiamo indicando che useremo solo il dominio lights, ovvero controlleremo con Alexa solo le luci (ma ovviamente possiamo estendere il tutto in un secondo momento a qualsiasi dominio consentito).

Adesso è il momento di iscriverci alla Developer Console di Amazon, basterà loggarsi in questa pagina col proprio account Amazon, cliccare su Developer Console (in alto a destra) e creare un Nuovo profilo di Sicurezza cliccando su Impostazioni -> Profili di sicurezza, assegnamo come nome ad esempio Domotica e come descrizione scegliamo Dialogo tra Home Assistant e Alexa, infine salviamo.

Ora è il momento di creare un account su Amazon Web Services, dovremo registrarci con un account non professionale, inserendo i dati di una carta di credito (necessari per la verifica dell'identità) dalla quale verrà prelevata una piccola somma (poi restituita). Ovviamente, l'uso che faremo di questo account non prevederà alcun pagamento in futuro.

Dopo la registrazione, andiamo sulla console, clicchiamo a sinistra su Ruoli e poi su Crea ruolo. A questo punto scegliamo Servizio AWS, nella stessa pagina clicchiamo su Lambda e vedremo in basso a destra abilitarsi il pulsante Successivo: Autorizzazioni, sul quale dovremo cliccare.

Nella successiva schermata, selezionare AWSLambdaBasicExecutionRole (se non è immediatamente visualizzato basta cercarlo nel box in cima all'elenco), poi cliccare su Successivo: Tag.

Nella successiva schermata non c'è bisogno di modificare alcunchè, si può direttamente cliccare in basso su Successivo: Verifica.

A questo punto, inseriamo come nome ruolo AWSLambdaBasicExecutionRole-SmartHome, lasciando pure vuota la descrizione e clicchiamo finalmente su Crea Ruolo.

Ci siamo quasi, è il momento di creare la funzione che permette di integrare Home Assistant con Alexa!

Andiamo nella dashboard relativa alle funzioni e clicchiamo su Crea Funzione. Proseguiamo con Crea da zero e inseriamo un nome (Domotica), scegliamo Python 3.8 come linguaggio, in Modifica del ruolo di esecuzione predefinito scegliamo Utilizza un ruolo esistente e selezioniamo quello creato in precedenza.

Clicchiamo su Crea Funzione.

A questo punto raggiungiamo questa pagina, clicchiamo su Crea Skill, assegnamo un nome, scegliamo Italiano come lingua, Smart Home come Model e infine Provision your own. In alto a destra c'è il pulsante Create skill.

Nella successiva schermata scegliamo (se non già selezionata) la versione 3 del payload e copiate da qualche parte lo skill-ID che trovate subito sotto.

Possiamo tornare sulla dashboard delle funzioni che abbiamo visto in precedenza e selezionare la funzione Domotica (se l'avete chiamata così), clicchiamo poi su Aggiungi trigger e selezioniamo nella schermata successiva Alexa Smart Home, inserendo come ID Applicazione lo skill-ID che abbiamo copiato al passo precedente, infine clicchiamo su Aggiungi.

Torneremo indietro di una schermata, basta cliccare su Domotica (vedremo un'icona arancione a sinistra) e in basso, nella scheda Codice, bisognerà cancellare quello che viene proposto e copiare il codice che si trova in questa pagina.

Clicchiamo su File -> Salva e poi su Deploy (si trova tutto nella scheda Codice), poi andiamo nella scheda Configurazione -> Modifica -> Aggiungi Variabili d'ambiente. Dovremo aggiungere le seguenti 4 variabili:

  • BASE_URL: https://nomedominio.duckdns.org
  • DEBUG: True
  • NOT_VERIFY_SSL: True
  • LONG_LIVED_ACCESS_TOKEN: il token creato inizialmente su Home Assistant

Attenzione perchè ad ogni variabile occorre cliccare su Aggiungi variabile d'ambiente.

Salviamo il tutto e clicchiamo su Copia ARN in alto a destra, mettiamo da parte anche questo codice che ci servirà a breve.

Testiamo ora il tutto, basta cliccare su Test -> Configure test event -> Crea un nuovo evento di test. Diamo un nome e inseriamo le seguenti righe di codice:

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

Clicchiamo su Crea, poi su Test. Se tutto è andato bene, la risposta sarà affermativa.

Torniamo adesso alla console di AWS, selezionando la skill creata in precedenza. Come Default Endpoint occorre inserire il codice ARN copiato in precedenza. Salviamo e poi clicchiamo su Setup Account Linking in basso, nella schermata successiva compiliamo i campi come segue:

  • Your Web Authorization URI: https://nomedominio.duckdns.org/auth/authorize
  • Access Token URI: https://nomedominio.duckdns.org/auth/token
  • Your Client ID: https://layla.amazon.com
  • Client Secret: Home Assistant HDJ
  • Your Authentication Scheme: Credentials in request body
  • Scope: cliccate su add scope e inserite smart_home

Lasciate invariato il resto e cliccate su Save.

A questo punto per integrare Home Assistant con Alexa non resta che collegare il tutto all'app Alexa! Andiamo in questa pagina, facciamo il login con le credenziali del nostro dispositivo Alexa, poi su Skill -> Le tue skill -> Skill per sviluppatori: dovremmo vedere la skill Domotica che abbiamo creato e, cliccando su Attiva, dovrebbe segnalare che la skill è collegata con successo.

Andando infine su Scopri i dispositivi dovrebbero magicamente apparire in lista tutti i dispositivi (per ora solo le luci, ve lo ricordo) gestiti da Home Assistant! Se tutto è andato bene, siamo riusciti ad integrare Home Assistant con Alexa.

Non resta che limare la configurazione creata per aumentare la sicurezza, torniamo in questa pagina, e cancelliamo le due variabili d'ambiente DEBUG e LONG_LIVED_ACCESS_TOKEN create in precedenza, non serviranno ulteriormente.

Il token di accesso a lunga vita a questo punto può essere cancellato anche da Home Assistant.

So che integrare Home Assistant con Alexa può sembrare un processo piuttosto complesso, ma seguendo il tutto con calma vi assicuro che il risultato è estremamente soddisfacente.

Alla prossima..