Come usare Home Assistant con Alexa gratuitamente (metodo aggiornato senza NabuCasa e Token)

Leggi questo articolo grazie alle donazioni di Andrea Ippolito, Stefano Maria Meconi, Andrea Giuseppe Calabrò, Cesare Munari, Carlo Scian, Carlo Rapisarda, Mattia Facchini, Antonio D'Agostino, Maurizio Bigalli, Simone Salucci, Matteo Nascimben.
♥ Partecipa anche tu alle donazioni: sostieni SaggiaMente, sostieni le tue passioni!

La domotica è sempre più diffusa nelle nostre case ma non ci sono ancora degli standard universali e compatibili tra di loro. Dunque scegliere una piattaforma diventa una questione importante, soprattutto quando l’utente non ha la voglia e le capacità per creare dei “ponti di comunicazione”. Quindi chi comprerà un Amazon Echo tenderà poi ad aggiungere dispositivi compatibili nativamente, stessa cosa per le case intelligenti di Apple, Google o Samsung (che sono i player attualmente più noti e diffusi).

L’approccio basato su Home Assistant è differente, in quanto ci offre la possibilità di creare una smart home potenzialmente in grado di comunicare e di essere controllata attraverso tutti questi sistemi, anche con la voce. Non è sempre facile, però, difatti per portare i dispositivi presenti sulla nostra installazione di HA su Alexa si può usare la skill nativa ma richiede l’abbonamento a NabuCasa ($5 al mese) oppure seguire una delle complesse guide basate sul plugin Haaska. Nel nostro gruppo alcuni hanno scelto la via più semplice a pagamento, mentre altri hanno sperimentato Haaska come me, che tuttavia richiede di mantenere un token di lunga vita sempre attivo. Questo non è necessariamente negativo ma sul sito di HA viene descritto un procedimento per realizzare la stessa cosa in modo più sicuro, cioè senza lasciare in giro una chiave libera di accesso alla nostra casa.

Non vi mentirò dicendo che si tratta di un sistema semplice o veloce, tuttavia il risultato finale appare solido e non richiede il mantenimento del token poiché usa il login nativo di HA. Dovremo barcamenarci tra quattro ambienti che conviene tenere bene a mente ed in molti casi aprire insieme su diversi tab dello stesso browser:

  • Home Assistant (di seguito solo HA) del quale è necessario avere un indirizzo sempre valido per poterlo raggiungere via web con accesso libero sulla porta 443
  • Portale Amazon Developer (di seguito solo AzD) sul quale si dovrà creare un profilo di sicurezza
  • Portale Amazon Web Services (di seguito solo AWS) del quale servirà un account attivo con informazioni di pagamento valide (anche se in realtà useremo la versione gratuita)
  • Alexa Developer Console (di seguito solo AxDC) dove andrà creata la skill che comunicherà con la nostra installazione di Home Assistant

Cercherò di evitare approfondimenti o divagazioni se non strettamente necessari. Il procedimento è già piuttosto lungo dunque ricorrerò a dei punti elenco sintetici ogni volta che sarà possibile.


Passo 1: preparazione su AzD

  1. Loggatevi su AzD con il vostro Account Amazon
  2. Se non lo avete mai fatto verrà proposto subito di creare un nuovo profilo di sicurezza, altrimenti lo stesso pulsante si trova in Settings / Security Profiles
  3. Compilate i campi del modulo a vostra scelta dato che non sono vincolanti. Ad esempio:
    • “Nome”: Home Assistant
    • “Descrizione”: Integrazione HA e Alexa
  4. Salvate

Per adesso qui non bisogna fare altro, ma lasciate la pagina aperta ed aprite un altro tab per le operazioni successive.


Passo 2: preparazione su AWS

  1. Recatevi su AWS ed eseguite il login (create un account se già non lo avete)
  2. Entrate nell’area Il mio account cliccando sul vostro nome nel menu in alto
  3. Sempre nella pagina Il mio account scegliete la voce Metodi di pagamento nel menu a sinistra, sotto l’area Preferenze
  4. Cliccate sul pulsante Aggiungi una carta ed inserite dei dati validi (verrà prenotato solo $1 per l’attivazione che poi non sarà addebitato)

Passo 3: configurazione AWS lambda

  1. Sempre sulla Console di gestione AWS cliccate sul menu Servizi in alto a sinistra
  2. Aiutandovi con la ricerca in alto nel grande popup che si apre, entrate nella sezione IAM sotto “Sicurezza, Identità, Conformità”
  3. Dal menu laterale entrate nell’area Ruoli e cliccate sul pulsante Crea ruolo
  4. Qui compilate in questo modo:
    • “Seleziona il tipo di entità attendibile”: Servizio AWS
    • “Scegli il servizio che utilizzerà questo ruolo”: Lambda
    • Cliccate sul pulsante Successivo: Autorizzazioni
    • Usando il campo “Filtra policy” cercate e selezionate DatabaseAdministrator
    • Cliccate sul pulsante Successivo: Tag
    • Cliccate sul pulsante Successivo: Verifica
    • “Nome ruolo”: lambda_basic_execution
    • Cliccate sul pulsante Crea ruolo

Pausa

In realtà ora c’è poco da fare perché quasi sicuramente dovrete fermarvi qui finché su AWS Lambda (raggiungibile dal menu Servizi in alto a sinistra sotto la voce “Calcolo”) vi uscirà una pagina dal titolo “Your service sign-up is almost complete”. Di solito servono 24h per sbloccare la situazione, derivante dal fatto che avete attivato di recente il profilo AWS o aggiunto solo ora il metodo di pagamento. Usate questo tempo per accertarvi di aver fatto tutto correttamente seguendo le indicazioni presenti in quella stessa pagina, che suggeriscono di completare la registrazione AWS e verificare i dati della carta di credito (troverete i link diretti alle due procedure nel testo).


Passo 4: creazione della Skill

  1. Accedete ad AxDC con le vostre credenziali
  2. Dalla prima voce di menu “Skill Biulders” selezionate la voce Developer Console
  3. Premete sul pulsante Create Skill
  4. Qui compilate in questo modo:
    • “Skill name”: SaggiaCasa
    • “Default language”: Italian (IT)
    • “Choose a model to add to your skill”: Smart Home
    • Confermate cliccando sul pulsante Create Skill

A questo punto vi troverete all’interno delle impostazioni relative alla skill. Lasciate la pagina aperta in stand-by perché ci servirà a breve ed aprite un nuovo tab o pagina del browser per i successivi passaggi.


Passo 5: creazione funzione Lambda

  1. Ritornate nella Console di gestione AWS e cliccate sul menu Servizi in alto a sinistra
  2. Aiutandovi con la ricerca in alto nel grande popup che si apre, entrate nella pagina Lambda sotto la sezione “Calcolo”
  3. Dal menu in alto, a destra del vostro nome, accertatevi che compaia la regione Irlanda (altrimenti cliccateci sopra e selezionatela del menu che apparirà)
  4. Dal menu a sinistra accertatevi di essere nella pagina Funzioni sotto “AWS Lambda”
  5. Cliccate sul pulsante Crea Funzione
  6. Qui compilate come segue:
    • “Scegli una delle seguenti opzioni per creare la funzione”: Crea da zero
    • “Nome Funzione”: SaggiaCasa
    • “Runtime”_ Python 3.7
    • In “Autorizzazioni” aprite la sezione “Scegli o crea un ruolo di esecuzione”
    • Cliccate su “Utilizza un ruolo esistente” e scegliete dall’elenco lambda_basic_execution
    • Confermate cliccando sul pulsante Crea Funzione

Passo 6: configurazione della funzione Lambda

  1. Nella pagina della Funzione Lambda SaggiaCasa appena creata su AWS, scorrete in basso fino alla sezione “Codice della funzione”
  2. Accertatevi che sia selezionato sempre Python 3.7 nella voce Runtime
  3. Aprite la pagina con il codice della funzione lambda_function.py sul Github di Matthew Hilton, selezionate tutto, copiate ed incollate all’interno dell’editor “Codice della funzione” sostituendo quello di default
  4. Scorrete poco sotto fino alla sezione “Variabili di ambiente” ed aggiungete queste:
    • “Chiave”: BASE_URL
      “Valore”: https://dominiohassio.ext
      Variabile necessaria ed è l’indirizzo della vostra installazione di HA raggiungibile dall’esterno sulla porta 443
    • “Chiave”: NOT_VERIFY_SSL
      “Valore”: True
      Variabile opzionale che va impostata così solo se non avete un certificato SSL valido per l’accesso via https
    • “Chiave”: DEBUG
      “Valore”: True
      Variabile opzionale utile soprattutto nella fase di test per verificare il log completo delle richieste. Si può lasciare attiva sempre oppure cancellarla dopo il completamento della procedura
    • “Chiave”: LONG_LIVED_ACCESS_TOKEN
      “Valore”: token del vostro utente HA
      Variabile opzionale ma necessaria per poter eseguire un test di funzionamento. Subito dopo la verifica la cancelleremo per sicurezza. Per ottenerla accedete ad HA, cliccate sul vostro nome utente, scorrete in basso fino a “Token di accesso a lunga vita” e poi cliccate su “Crea Token”. Mettete come nome “Test”, confermate con “OK” e prelevate il codice alfanumerico che comparirà
  5. Scorrete poco sotto nella sezione “Ruolo di esecuzione”, accertati che sia attivo “Utilizza un ruolo esistente” e che sia selezionato lambda_basic_execution
  6. Salite in alto e memorizzate le modifiche con il pulsante Salva
  7. Ora nella sezione “Designer” cliccate su Aggiungi trigger che trovate a sinistra nella sezione Designer
    • Aprite l’elenco sotto “Configurazione del trigger” e selezionate Alexa Smart Home
    • Nel campo “ID applicazione” incollate il contenuto di Your Skill ID che si trova nella pagina della Skill SaggiaCasa lasciata aperta nel passo 4 (se l’avete chiusa la ritrovate qui)
    • Assicuratevi che ci sia la spunta su “Abilita trigger” e confermate cliccando sul pulsante Aggiungi

Passo 7: collegamento tra Funzione Lambda e Skill

  1. Sempre nella pagina della funzione Lambda copiate il codice ARN che si trova in alto (se cliccate sull’icona alla destra verrà messo negli appunti)
  2. Ritornate sul tab già aperto della Skill e compilate in questo modo:
    1. “Payload version”: v3 (preferred)
    2. “Default endpoint”: incollate qui il codice ARN
    3. “Europe, India”: cliccate sul checbox per abilitare il campo ed incollate di nuovo lo stesso codice ARN
    4. Cliccate in alto su Save per memorizzare
  3. Nella stessa pagina scorrete in basso e cliccate su Setup Account Linking e compilate come segue sostituendo a “https://dominiohassio.ext” quello relativo alla vostra installazione di HA raggiungibile dall’esterno:
    • “Authorization URI”: https://dominiohassio.ext/auth/authorize
    • “Access Token URI”: https://dominiohassio.ext/auth/token
    • “Your Client ID”: https://layla.amazon.com/
      È così per tutti nell’Unione Europea
    • “Your Secret”: codice segreto del profilo di sicurezza
      Aprite una nuova pagina, andate su AzD nella sezione Settings / Security Profiles / Nome profilo creato / Impostazioni Web cliccando sul pulsante “Mostra codice segreto” (lasciate la pagina aperta)
    • “Your Authentication Scheme”: Credentials in request body
    • “Scope”: smart_home
    • Confermate cliccando su Save in alto a destra
  4. Copiate ad uno ad uno i tre indirizzi che trovate in fondo alla pagina ed identificati dal testo Alexa Redirect URLs, spostatevi sul Profilo di sicurezza AzD che avete lasciato aperto ed incollateli uno per riga nella sezione “URL di ritorno consentiti” dopo aver premuto sul bottone Modifica. Poi confermate con Salva.
  5. A questo punto potete chiudere sia il tab con il Profilo di sicurezza AzD che quello con la Skill su AxDC

Passo 8: integrazione con HA e test

  1. Aprite con un editor il file configuration.yaml nella cartella config del vostro HA ed aggiungete quanto segue:
    # Abilita l'utilizzo di RESTful API
    # https://developers.home-assistant.io/docs/en/external_api_rest.html
    api:
    
    # Fornisce le informazioni per la Skill di Alexa
    alexa:
      # Questo è lo Scope della Skill
      smart_home:
        # Opzionalmente potete definire dei filtri con i classici
        # include_entities: elenco di ID degli unici device da esporre alla Skill
        # include_domains: elenco dei domini (light, switch, sensors, ecc...) da esporrre alla Skill
        # exclude_entities: elenco di ID degli unici device da NON esporre alla Skill
        # exclude_domains: elenco dei domini (light, switch, sensors, ecc...) da NON esporrre alla Skill
        filter: 
          include_entities:
            - light.kitchen
            - light.kitchen_left
          include_domains:
            - switch
          exclude_entities:
            - camera
        # configurazioni opzionali per entità
        entity_config:
          light.kitchen:
            name: Custom Name for Alexa
            description: The light in the kitchen
          switch.stairs:
            display_categories: LIGHT
    

    Consiglio inizialmente di esporre un numero limitato di device così da poterne controllare l’aggiunta con calma. Inoltre alcuni di questi su Alexa non vengono subito interpretati nel modo corretto ed è dunque utile utilizzare la specifica display_categories all’interno dell’entity_config (che si può aggiungere in un secondo momento dopo aver verificato eventuali incongruenze). Una lista di possibili impostazioni per Display Categories (che è una sorta di device_class di HA ma specifico di Alexa) la trovate su questa pagina.

  2. Salvate il file, eseguite un test della configurazione su “Impostazioni / Controlli del server” e poi riavviate dalla stessa pagina
  3. Attendete che HA ritorni operativo poi riaprite il tab della Funzione AWS Lambda SaggiaCasa e cliccate in alto a destra su Esegui il test configurandolo in questo modo:
    • “Modello Evento”: Hello World
    • “Nome Evento”: testSaggiaCasa
    • Nell’area inferiore con il codice JSON (identificato da variabili contenute tra parentesi graffe), sostituite con questo codice (è uguale per tutti):
      {
        "directive": {
          "header": {
            "namespace": "Alexa.Discovery",
            "name": "Discover",
            "payloadVersion": "3",
            "messageId": "1bd5d003-31b9-476f-ad03-71d471922820"
          },
          "payload": {
            "scope": {
              "type": "BearerToken"
            }
          }
        }
      }
      
    • Cliccate sul pulsante Crea
  4. Vi ritroverete così nella schermata principale della Funzione con in alto a destra l’evento “testSaggiaCasa” selezionato, dunque premete di nuovo su Esegui il test
  5. Se tutte le impostazioni sono corrette troverete un messaggio Risultato esecuzione: riuscita e aprendo i dettagli vedrete un lungo testo in JSON con le informazioni per Alexa.Discovery (scorrendo dovreste scorgere nel codice i nomi dei vostri dispositivi di HA)

Passo 9: attivazione della Skill

  1. Aprite la pagina web di Alexa https://alexa.amazon.com (su mobile rimanda all’app)
  2. Eseguite il login con il vostro account
  3. Cliccate a sinistra sulla voce di menu Skill
  4. Poi cliccate in alto a destra su Le tue Skill
  5. Infine selezionate il tab Skill per Sviluppatori
  6. Cliccate sulla Skill SaggiaCasa che apparirà nell’elenco
  7. Abilitate la Skill cliccando sul pulsante Attiva in alto a destra
  8. Verrà aperto un popup (attenzione se il browser li blocca al messaggio che consente di aprirlo comunque) per eseguire il login su HA
  9. Completata l’attivazione della Skill entrate tramite il menu laterale in Casa Intelligente / Dispositivi
  10. Scorrete fino in fondo e cliccate su Trova, attendete la conclusione e poi chiudete la pagina (potete completare l’organizzazione degli ambienti e gruppi direttamente dall’app)

Passo 10: mettere tutto in sicurezza

  1. Ora che tutto è in ordine potete ritornare sulla Funzione AWS Lambda SaggiaCasa. Se ve la siete persa è su AWS  / Servizi / Lambda
  2. Scorrete sotto fino a “Variabili di ambiente”
    • rimuovete la riga LONG_LIVED_ACCESS_TOKEN
    • rimuovete (opzionalmente) la riga DEBUG
  3. Scorrete in cima alla pagina e cliccate sul pulsante Salva
  4. Infine ritornate sul vostro HA nella pagina dell’utente e cancellate il token di test

Conclusione

I vantaggi di questo sistema sono diversi: non si deve pagare praticamente nulla, l’accesso avviene in privato tra la Skill ed il nostro HA, non si lasciano Token di lunga vita attivi su HA. A parte ovviamente il fatto che si possano comandare i dispositivi tramite Alexa, che è l’obiettivo stesso della guida. Altra cosa comoda è che si possono “mandare” da HA ad Alexa solo le entità che servono e basterà modificare il filter aggiungendo o togliendo dispositivi in caso di necessità (consiglio di non esporre subito tutto se avete tantissimi dispositivi su HA). Ovviamente ci sono anche svantaggi ma direi che a parte la complessità l’unica cosa da considerare è che il sistema potrebbe essere in qualsiasi momento limitato, ma questo non è prevedibile e può succedere anche con altri sistemi.

Autori
Giancarlo (@G-man)
Maurizio Natali (@simplemal)

Revisore
Gianluca (@gomez_85)

SmartHome Channel

Special Team - I SaggiUtenti del canale #SmartHome sul nostro Slack uniti per creare guide e recensioni dedicate all'automazione. Partecipa anche tu entrando nel gruppo effettuando una donazione dal SaggioSupporto o discutendo con noi nel Canale Telegram SmartHome Italia