Photo by Find Experts at Kilta.com on Unsplash

Cómo integrar Alexa en Home Assistant

Con este artículo aprenderas las diferentes maneras que existen sobre cómo integrar Alexa en Home Assistant para que puedas combinar estos dos sistemas, con multitud de pantallas y paso a paso para no perdernos.

Aunque Amazon no para de potenciar Alexa y todo lo que gira a su alrededor, todavía no existe una integración única, oficial, gratuita y robusta para exponer en el ecosistema de Amazon los dispositivos ya dados de alta en Home Assistant.

Pero alternativas no faltan. Existen básicamente 3 métodos principales a día de hoy y que vamos a analizar uno a uno

INTEGRACIÓN DE ALEXA A TRAVÉS DE EMULACIÓN

Quizás no sea la forma más elegante, pero si una de las más sencillas.

En resumen haremos uso de la integración Emulated Hue para crear un Philips Hue Bridge virtual (Puente para control de luces inteligentes de Philips). Alexa pensará que está controlando una serie de bombillas inteligentes, pero realmente serán entidades de nuestro sistema Home Assistant.

Para activar Emulated Hue simplemente añadiremos las siguientes líneas a nuestro fichero configuration.yaml:

emulated_hue:
  listen_port: 80
  entities:
    media_player.tv_salon:
      name: "television del salon"

Aquí hay que tener en cuenta algunas consideraciones:

  • El puerto debe ser 80 para que la aplicación Alexa lo detecte.
  • La IP del equipo donde corre Home Assistant debe ser fijo, para que Alexa lo detecte siempre igual y no tengamos que iniciar el proceso cada vez que cambie.
  • En la sección entities debñeis poner vuestros propios sensores y un nombre amigable con el que aparecerá en Alexa

Y en la parte de Home Assistant eso es todo. Ahora vamos a ver cómo detectará Alexa este falso bridge de Philips.

Instalaremos la aplicación Amazon Alexa en nuestro móvil, bien sea en la versión Android o IOS:

Amazon Alexa

El proceso de instalación es sencillo. Deberemos tener previamente una cuenta de Amazon (sí, la misma que usas para hacer las compras).

Elegiremos la opción de configurar la app Alexa y seleccionaremos el perfil de usuario de Amazon (sí, el mismo que eliges al iniciar Prime TV), confirmando tu nombre y apellidos para aceptar las condiciones:

Alexa elección perfil

Entrenar al asistente para que no tenga problemas en reconocer nuestra voz será también muy sencillo pues solo tendremos que repetir la palabra Alexa varias veces cuando nos lo pida en un ambiente silencioso:

Alexa entrenamiento voz

Permitiremos el acceso a los contactos por si queremos ordenarle hacer una llamada, persmisos para usar el micrófono, ubicación y grabar audio mientras se use la aplicación si nos lo pide. Todo normal.

Llegaremos al menú principal con todas las opciones de la aplicación:

App Alexa. Menú principal

Ahora es cuando vamos a «engañar» a Alexa para que crea que Home Assistant es un dispositivo HUE Bridge.

En la aplicación, en la sección «Dispositivos», le damos a añadir dispositivo:

Alexa. Añadir dispositivo

Elegimos Controlador>Philips Hue> Puente Philips Hue V1 (con forma circular):

Alexa. Selección de controlador

Y seleccionamos detectar dispositivos directamente. (indicará que le demos al botón físico del puente para emparejarlo, pero ni caso porque estamos engañando a la aplicación):

Alexa. Detección de controlador

Y ya lo tendremos emparejado. Para comprobar que funciona correctamente solo tendremos que acceder a esta url desde cualquier equipo de la misma red: http://ip_de_home_assistant:80/api/pi/lights

Nos debería aparecer el listado de dispositivos que hemos definido en nuestro fichero configuration.yaml como si fueran luces:

{"1": {"state": {"on": true, "reachable": true, "mode": "homeautomation", "bri": 38}, "name": "television del salon", "uniqueid": "00:bc:97:a8:36:b4:0f:3d-59", "manufacturername": "Home Assistant", "swversion": "123", "type": "Dimmable light", "modelid": "HASS123"}}

Si en el proceso el log de Home Assistant os muestra este tipo de error, es que otro proceso está usando ya ese puerto en esa misma IP, y a día de hoy no podemos elegir el puerto en el que transmite la aplicación de Alexa. Solo nos quedaría identificar ese otro proceso y quitarlo si no es crítico:

[homeassistant.components.emulated_hue] Failed to create HTTP server at port 80: [Errno 98] error while attempting to bind on address ('192.168.0.200', 80): address in use

En resumen y como conclusion de la integración a través de emulación:

Ventajas
FÁCIL DE IMPLEMENTAR
COSTE GRATUITO
Inconvenientes
Puerto TCP 80 usado en exclusividad
Dispositivos aparecen como bombillas para Alexa
Excasa flexibillidad



INTEGRACIÓN DE ALEXA A TRAVÉS DE NABU CASA

Definitivamente la opción más directa. Dependeremos de un servicio externo, pero nos quitaremos muchos dolores de cabeza. No tendremos que configurar nada avanzado. Los asistentes de voz Google Home y Alexa estarán accesibles. Y todo tiene un coste, en este caso 5$ cada mes de suscripción tras los 30 días de prueba.

El proceso es muy sencillo y lo podemos encontrar aquí, pero como resumen estos serán los pasos:

  • Activar el componente Cloud si no lo está ya (lo normal es que esté por defecto). Si fuera necesario añadir la siguiente línea al fichero configuration.yaml:
cloud:
  • Logearnos en Home Assitant Cloud desde el menú Configuration:
Home Assistant Cloud login
  • Añadimos la skill de Home Assistant desde la aplicación Alexa en el móvil:
Skills Alexa
Home Assistant Skill
  • Una vez instalado el skill, le ordenamos a Alexa que descubra nuevos dispositivos.
  • Y eso es básicamente todo. Luego podremos definirle qué dispositivos compartir y cuales no.

Sencillo, ¿verdad?

De nuevo dejamos un resumen de los pros y contras de esta opción con Nabu Casa

Ventajas
Muy fácil de implementar
Conexión remota segura

Inconvenientes
Coste: 5$ / mes



INTEGRACIÓN DE ALEXA CREANDO UNA SKILL

Esta es quizás la opción más compleja, pues nos ponemos en la piel de desarrollador en la plataforma de Amazon.

Aprenderemos cómo integrar Alexa en Home Assistant de la manera menos fácil, pero con la que más aprenderemos en el proceso.

Nos hemos basado en la propia documentación, pero variando algunos pasos y aclarando otros. Aun así es un viaje largo.

Son muchos pasos en varias plataformas (App alexa, Home Assistant, Developer Console y AWS Console), así que para no liarnos iremos poniendo muchas pantallas y paso a paso hasta llegar a la meta. Preparad un café y vamos a empezar.

Lo primero que tendremos que cumplir son los siguientes requisitos:

Requisitos

Son varios los pasos previos que debemos realizar antes de empezar con el procedimiento:

Home Assistant accesible desde Internet

Tener nuestro sistema Home Assistant accesible desde Internet tiene ciertos beneficios pero también conlleva riesgos si no se hace correctamente. Para ello os dejo este enlace donde explicamos con detalle cómo se hace.

Cuenta de desarrollo de Amazon

Debemos tener asimismo una cuenta de desarrollo de Amazon aquí. Si tenemos ya cuenta en Amazon para compras podremos entrar con esas mismas credenciales:

Amazon Alexa Desarrollo Alexa
Amazon cuenta desarrollador

Y nos daremos de alta como desarrolladores:

Registro Amazon desarrollador

Si no queremos completar ahora el perfil con más datos, seleccionamos «Start exploring the console»:

Amazon cuenta desarrollo. Perfil

Cuenta en servicios web de Amazon (AWS)

Por último nos hará falta crear también una cuenta en los servicios web de Amazon (AWS) , ya que hay partes de la skill que se guardarán allí.

Si en algún momento he de aconsejaros sobre seguridad es ahora, pues en el proceso deberemos facilitar información de nuestra tarjeta y nos harán un pequeño cargo de 1$.

En este caso pensad que es muy probable que Amazon ya tenga esta información de cobro si solemos comprar en su plataforma, pero son «departamentos» independientes dentro de Amazon, por lo que no nos queda otra que dar estos datos de nuevo para continuar en el proceso. El coste del servicio que usaremos es gratis hasta 1 millón de llamadas/mes, así que tranquilos. El proceso de creación de cuenta en AWS se hace en varios pasos sencillos:

  • En el primero paso nos pedirán email y una clave, así como un nombre identificativo de la cuenta AWS.
  • En el segundo paso Amazon se asegura de que somos humanos con un captcha.
  • En el tercer paso nos pedirán información de contacto:
Cuenta AWS. Datos de contacto
  • Cuarto paso: Datos de nuestra tarjeta de crédito. Nos cargarán 1$ (al cambio hoy unos 0,88 €) para confirmar que la cuenta es nuestra. Deberéis aceptar el pago desde vuestra app del banco.
  • Ahora toca el paso de confirmar el número de teléfono con el envío de un mensaje sms en el que vendrá un código que deberemos introducir para confirmar.
  • Y por último elegimos el plan gratuito de soporte, le daremos a completar y listo!
AWS Elección plan soporte
Cuenta Amazon AWS creada

Una vez hemos completado ls requisitos, vamos con el proceso de creación de la skill…

Creación básica de Skill de Alexa

Lo primero que haremos será entrar en la consola de desarrollo de Amazon con las credenciales que pusimos en la sección de requisitos y seleccionamos Alexa Skills Kit y creamos un nuevo skill:

Alexa skills kit
Alexa. Nuevo skill

Le pondremos un nombre identificativo a la nueva skill y seleccionamos el idioma apropiado. Además elegiremos el modelo «Smart Home»:

Creación Skill Alexa

En la misma pantalla dejaremos seleccionado «Provision your own» y finalmente seleccionamos la opción de crear la skill con estos datos con el botón en la parte superior:

Creación de skill

En la siguiente pantalla que nos muestra la consola en el proceso de creación, deberemos seleccionar la versión 3 de Payload, pero no nos dejará grabar la skill todavía porque no tenemos lo necesario para rellenar el campo Default endpoint. Este dato lo tendremos más adelante y se llama identificador ARN de la función Lambda, así que por ahora dejad abierta esta pantalla hasta que completemos ese paso.

Importante, copiad el ID del nuevo Skill que más tarde nos hará falta al crear la función Lambda:

Creación skill Alexa

Por tanto, dejaremos por ahora la consola de desarrollo abierta en una pestaña aparte para continuar en este punto una vez tengamos el resto de datos a instroducir.



Creación de función Lambda

La función Lambda que va a residir en AWS de Amazon hará de intermediario entre Alexa y nuestro Home Assistant, por tanto dicho sofware tendrá ese único comentido:

Como integrar alexa en home assistant

Para la creación de dicha función Lambda en AWS y ver como integrar alexa en Home Assistant, vamos a seguir los siguientes pasos:

Creación de perfil IAM para la función Lambda

Primero entraremos en la consola de AWS (ojo no confundir con la consola de la cuenta de desarrollo), en este enlace con las credenciales que pusimos enla sección de requisitos como root:

AWS acceso root

A continuación, en el menú superior de «Services» os saldrá un desplegable y tendréis que buscar la opción IAM:

Servicio IAM

En el menú lateral buscaremos Roles y seleccionaremos crear un nuevo rol:

IAM. Nuevo Rol

A partir de aquí Amazon nos lleva por un asistente de 4 pasos donde debemos configurar las propiedades del nuevo rol.

En el primer paso elegiremos obviamente la opción Lambda:

Asistente creación rol AWS. Paso 1

En el paso 2 establecemos los permisos del nuevo rol, buscando la política «AWSLambdaBasicExecutionRole»

AWS iam permisos

El siguiente paso lo podemos saltar pulsando Next: Review

AWS IAM tags

Para terminar de crear el rol IAM, le daremos un nombre representativo y seleccionamos «Create role»:

AWS IAM. Nombre

Y ya debería aparecer nuestro nuevo rol IAM:

IAM rol

Programación de la función Lambda

De nuevo desde la consola de AWS desplegaremos los difrentes servicios desde la parte superior y buscaremos la opción Lambda:

Servicio Lambda

En la página donde trabajaremos lo primero que tenemos que hacer y muy importante es elegir la región apropiada para los servidores AWS que usaremos. En nuestro caso (España), pero aquí tenéis el listado que marca la documentación por si tenéis que poner otra opción:

  • US East (N.Virginia)  para English (US) o English (CA)
  • EU (Ireland)  para English (UK), English (IN), German (DE), Spanish (ES) or French (FR)
  • US West (Oregon)  para Japanese y English (AU)
Region servidores AWS

Ahora sí, seleccionamos Functions y Create function para iniciar el asistente:

Creación función lambda AWS

En el primer paso del asistente hay varias cosas que seleccionar:

  • Daremos un nombre representativo a la función. Os recomiendo un prefijo «lambda_» para no liaros luego.
  • En el campo de Runtime, podéis elegir entre varias versiones de Python. Os recomiendo elegir la más actual
  • Debemos desplegar las opciones bajo el epígrafe «Change default execution role» y seleccionar «use an existing role»
  • Ahora ya nos dejará elegir el rol IAM que hemos creado anteriormente
Creación función lambda. Información básica

En lesta sección iremos a la pestaña «Configuration» y en el menú lateral escogeremos «Triggers» para crear uno nuevo usaremos el botón:

Función lambda. Nuevo trigger

Y desplegamos las distintas opciones hasta seleccionar «Alexa Smart Home«

Trigger. Alexa Smart Home

Y nos preguntará por el identificador de la Skill que creamos en el paso de creación del Skill en la consola de desarrollo y añadimos el Trigger con el botón Add:

Skill ID

Ahora trabajaremos en la pestaña «Code» de la misma pantalla, borraremos el código de ejemplo que aparece en la página de Jason Hu y que no reproduzco aquí para que vayáis a su página y copiéis el código más reciente. Luego seleccionar «Deploy«

Código función lambda

Misma pantalla, pero esta vez en la pestaña «Configuration», seleccionamos «Environment variables» y editamos para añadir algunas que nos harán falta:

Variables de entorno función lambda
Función lambda. Añadir variable

Nosotros pondremos como mínimo estas dos variables. Podéis consultar las otras opciones en la documentación:

KeyValue
BASE_URLURL de acceso remoto a Home Assistant (sin barra final /)
DEBUGTrue
NOT_VERIFY_SSLTrue
Cuidao de no poner la barra final en BASE_URL
Variables de entorno función lambda

Una vez hemos terminado de introducir las variables, pulsaremos «Save».

Importante: En esta página tendremos por fin el código ARN de la función lambda (su identificador) que nos faltó en un paso anterior al crear la Skill desde la consola de desarrollo (developer console):

Identificación ARN función lambda

Como hemos comentado este identifiacador ARN tendremos que ponerlo en el campo «Default endpoint» de la consola de desarrollo, y ya podremos dar a Save:

ARN de la función lambda



Pruebas de la función Lambda

En la sección anterior hemos terminado de crear la función Lambda, y como dijimos al principio, esa función se encargará de hacer de conexión entre Alexa y nuestro Home Assistant, así que ahora toca enlazar lo que queda en nuestro conocido fichero configuration.yaml y ver si todo funciona correctamente desde la consola AWS.

En nuestro sistema Home Assistant, en el fichero de configuración configuration.yaml añadiremos el siguiente código por ahora y resetaremos desde Configuration > Server Controls

alexa:
  smart_home:
    filter:
      include_entities:
        - media_player.tv_salon

Antes de realizar la prueba, deberemos crear en Home Assistant un Token de vida larga (10 años) de la siguiente manera:

Desde Home Assistant, en la prte inferior del menú lateral tendremos nuestro perfil, y dentro del mismo buscaremos al final la opción «Long-Lived Access Tokens» para crear uno nuevo:

Creación de token long-lived

Le daremos un nombre (en el ejemplo hemos puesto «Alexa_token»), y nos mostrará una serie larga de caracteres que deberemos copiar en ese momento, pues por seguridad no hay forma de visualizar de nuevo:

Ahora ya tendremos el Token creado en Home Assistant:

Token long-lived creado en Home Assistant

Ahora tendremos que introducir clave «LONG_LIVED_ACCESS_TOKEN» y su valor (la cadena larga de caracteres que hemos copiado) como variable de entorno en la consola AWS. Recordad: En nuestra función Lambda, en Configuration, Environment variabes y Edit:

Añadir variable consola AWS

Y como hemos comentado añadimos como nombre de la variable (key) el string «LONG_LIVED_ACCESS_TOKEN» y en el valor la cadena de caracteres (token) generado en Home Assistant:

Desde la consola de AWS, en la pestaña Test podemos dejar el template de pruebas hello-world, le damos un nombre al evento (en nuestro caso le hemos llamado «prueba»), copiaremos el request que viene en la documentación y que reproducimos aquí, y probamos con el botón Test:

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

Si todo ha ido bien, veremos en la parte superior «Execution result: succeeded» y desplegando esa sección nos aparecerán todas las entidades de nuestro Home Assistant.

Enlazar la cuenta de Amazon con Home Assistant

Nuestra Skill recien creada ya nos aparece en la aplicación Alexa en nuestro móvil ( en mis skills de hogar inteligente), pero la manera que tenemos de exponer dispositivos y aceptar solo peticiones legítimas es que Alexa ascocie nuestra cuenta de Amazon con nuestra cuenta de Home Assistant.

Iremos a la la consola de desarrollador (developer console), elegimos nuestra skill recien creada y accedemos al apartado ACCOUNT LINKING:

Consola desarrollador. Skill alexa
Account linking alexa

En esta pantalla deberemos introducir varios datos necesarios. Vamos a asumir que tenemos habilitado el acceso externo desde internet en la dirección https://tu_subdominio.duckdns.org:8123 y pondremos los ejemplos acorde a esto, pero no olvidad particularizar para vuestro caso:

  • En el campo «Your Web Authorization URI»: https://tu_subdominio.duckdns.org:8123/auth/authorize
  • En el campo «Access Token URI»: https://tu_subdominio.duckdns.org:8123/auth/token
  • En el campo «Your Client ID» (Si no estás en Europa consulta la documentación): https://layla.amazon.com/
  • En el campo «Your Secret» pondremos cualquier cosa porque no se chequea, pero no podemos dejarlo en blanco
  • Campo «Your Authentication Scheme»: Elegimos «Credentials in request body»
  • Campo «Scope»: Añadimos y tecleamos «smart_home»

Quedará todo de la siguiente manera y haremos Save:

Account Linking. Alexa

Una vez que hemos puesto la información en Developer Console, tendremos que decirle a Alexa que vincule las cuentas.

Importante: Como nuestro móvil seguramente esté conectado a nuestra WiFi local, al intentar logear con el acceso remoto a Home Assistant, es probable que no funcione por NAT loopback (básicamente le estamos preguntando a nuestro router que salga para volver a entrar). Para solucionarlo simplemente tendremos que desconectarnos de nuestra WiFi durante estos pasos.

Desde la app de Alexa entraremos en Skills y juegos y pulsaremos en el skill creado para activarlo:

Skill app Alexa

Nos preguntará por las credenciales de nuestro sistema Home Assistant, y ya podremos descubrir los dispositivos de nuestro sistema:

Alexa. Dispositivo de Home Assistant vinculado

Posibles problemas y soluciones:

  • Si durante la activación de la Skill desde Alexa os da problemas del tipo «invalid client id or redirect uri» es posible que en algún momento por algún motivo estemos asociados como US. Deberéis de traspasar la cuenta desde Amazon a vuestra región.
  • Durante el paso de activar la skill desde la app de Alexa, también es posible que aparezcan otros errores. Si es así, probad a tener activado en el router el port forwarding desde 443 exterior a 8123 de nuestra LAN, y consecuentemente cambiad las URL en el paso de «account linking» de la skill a «https://tu_subdominio.duckdns.org/auth/authorize» y «https://tu_subdominio.duckdns.org/auth/token«. Una vez vinculadas las cuentas podéis de nuevo dejar 443–>443 en el router
Ventajas
Más flexibilidad
Coste: GRATUITO
Inconvenientes
Dificultad: ALTA
Necesarios datos bancarios

CONCLUSIONES

Hemos aprendido cómo integrar Alexa en Home Assistant de diferentes maneras, detallando los pasos y sobre todo resaltando lo bueno y lo malo de cada una.

Amazon es un gigante tecnológico y no se le escapa el negocio que hay detrás de los asistentes, por lo que cada vez veremos más skills y opciones en el ecosistema de Alexa. Eso no quiere decir que tengamos que renunciar a la opción independiente de Home Assistant donde se pone el foco en la privacidad, el código abierto y la seguridad.

Juguemos con lo mejor de cada mundo y veremos si en un futuro cercano Amazon abraza a Home Assistant.

Si te ha gustado este post, aquí tienes otros que te pueden interesar:

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *