Integrar Alexa en Home Assistant

Hoy vamos a integrar Alexa en Home Assistant para controlar tus dispositivos con la voz desde tus altavoces.

Controlar Home Assistant desde Alexa

Antes de empezar…

Te interesa saber que no hay una sola forma de integrar Alexa en Home Assistant, y que estas varían en complejidad, versatilidad y coste:

  • La forma más sencilla es contratar Home Assistant Cloud. Este servicio lo proporciona Nabu Casa (la empresa que esponsoriza Home Assistant), por lo que estarás apoyando el proyecto. Además de poder acceder a tu instancia desde fuera de casa, te permite configurar fácilmente tus asistentes de voz. La desventaja es que los precios no son para todos los públicos.
  • La opción más completa es a través de la integración Amazon Alexa Smart Home Skill. El proceso está perfectamente detallado en la documentación de Home Assistant, pero ya te avisa de que requiere un esfuerzo considerable.
  • Hay una forma alternativa que es gratis y mucho más sencilla que la anterior, utilizando la integración oficial Emulated Hue. Esta consiste en crear un ‘Philips Hue hub’ virtual (que es, en realidad, nuestra instancia de Home Assistant) para que Alexa lo detecte e interactúe con él. Esta opción tiene algunas limitaciones, ya que la forma de controlar nuestras entidades es darlos de alta como bombillas (por lo que básicamente nos permitirá encender y apagar los dispositivos, y cambiar el brillo de las bombillas).
*Algún precio puede haber cambiado desde la última revisión

Amazon Alexa Smart Home Skill

Si quieres tener un control avanzado de tus dispositivos o no has conseguido integrar Alexa en Home Assistant de otra forma, en este apartado te voy a guiar paso a paso para hacerlo mediante este método. Puede que sea un poco laborioso, pero te prometo que merecerá la pena 🙂

Requisitos previos

Para llevar a cabo este método necesitas lo siguiente:

  • Habilitar el acceso externo a Home Assistant, vía HTTPS al puerto 443 usando un certificado SSL/TLS.
  • Crear una cuenta gratuita en Amazon Developers (utilizando tu cuenta habitual de Amazon).
  • Crear una cuenta gratuita en AWS Management Console. Aunque te va a solicitar que introduzcas una tarjeta de crédito, AWS Lambda es de uso gratuito hasta 1 millón de solicitudes y 1 GB de transferencia de datos salientes al mes.

Además, antes de empezar, te sugiero que te planifiques para tener un rato tranquilo para poder llevar a cabo el proceso leyendo con atención y siguiendo todos los pasos. Opcionalmente puedes seguir en paralelo la documentación oficial o este video, ya que me he basado en ambos para elaborar esta guía.

No obstante, apreciarás algunas diferencias en el proceso, la interfaz y el idioma, ya que esta guía se ha realizado a fecha de su publicación.

Creación de la Skill de Alexa

El primer paso para integrar Alexa en Home Assistant es crear la ‘skill’ que más tarde vamos a utilizar para controlar nuestros dispositivos con el altavoz.

  1. Accede a Alexa Developer Console y pulsa sobre “Crear skill”.
  2. En “Skill name” indica “HomeAssistant“, después selecciona tu idioma y pulsa en “Next”.
  3. En “Choose a type of experience” selecciona “Smart home”, en “Choose a model” selecciona “Smart Home”, pulsa en “Next” y en “Create Skill”.
  4. En la siguiente pantalla verás una serie de datos sobre tu ‘skill’. En concreto fíjate en el campo que indica “Your Skill ID”. Copia y conserva este código, ya que lo vas a necesitar a continuación.

Creación de la función Lambda

El siguiente paso es crear la “función Lambda” que va a ser la que haga de intermediaria entre nuestra instancia de Home Assistant y la plataforma de Alexa.

  1. Accede a AWS Management Console, y utiliza el buscador de la barra superior para buscar “IAM”. Pulsa sobre el primer resultado que indica “Administrar el acceso a los recursos de AWS”.
  2. En la siguiente pantalla verás una serie de bloques. Baja hasta el que indica “Recursos de IAM” y pulsa sobre el número bajo el título de “Roles” (por defecto verás un ‘2’).
  3. Pulsa sobre el botón “Crear rol”. Selecciona la opción “Servicio de AWS” y bajo el apartado de caso de uso selecciona “Lambda”. Después pulsa en “Siguiente”.
  4. Introduce la palabra “Lambda” en el buscador y marca la casilla correspondiente a la opción “AWSLambdaBasicExecutionRole”. Después baja hasta el final de la página y pulsa en “Siguiente”.
  5. Como nombre de rol indica “HomeAssistant” y baja hasta el final de la página para pulsar sobre “Crear rol”.
  6. Utiliza de nuevo el buscador con la palabra “Lambda” y pulsa sobre el primer resultado que indica “Ejecute código sin tener que pensar en los servidores”.
  7. En este momento debes fijarte en la esquina superior derecha de la consola. A la izquierda del nombre de tu cuenta aparecerá una localización, que corresponde al servidor. Asegúrate de seleccionar aquel más cercano a tu ubicación (para España, selecciona el servidor de Irlanda), o de lo contrario no funcionará!
🌍 La relación de servidores y regiones es la siguiente:
- US East (N.Virginia) para skills en inglés (US) o inglés (CA)
- EU (Irlanda) para skills en inglés (UK), inglés (IN), alemán (DE), español (ES) o francés (FR)
- US West (Oregon) para skills en japonés e inglés (AU)
  1. Pulsa sobre “Crear una función”. En el nombre de la función indica “HomeAssistant”, en tiempo de ejecución selecciona “Python 3.9” y pulsa en “Crear una función”.
  2. En la siguiente pantalla pulsa sobre “Agregar desencadenador”, selecciona “Alexa” en el desplegable de “Seleccionar un origen” y marca la opción de “Alexa Smart Home”. En el campo que indica “Skill ID” tienes que copiar la ID de la ‘skill’ que has creado en el apartado anterior y después pulsa en “Agregar”.
  3. A continuación baja un poco por la pantalla y pulsa sobre el apartado “Código” del menú horizontal (ver imagen inferior). Al hacerlo aparecerá una especie de editor de código, con una pestaña llamada “lambda_function”. Esta pestaña contiene un código que tienes que eliminar, y en su lugar tendrás que pegar el código que encontrarás en este enlace. Una vez pegado pulsa el botón de “Deploy”. Tras unos segundos verás un mensaje indicando “Se ha actualizado correctamente la función HomeAssistant”.

Probando la función Lambda

  1. Sube de nuevo un poco hasta el menú horizontal anterior y pulsa sobre “Probar”.
  2. En el campo nombre del evento escribe “TestHomeAssistant”. Baja un poco hasta el apartado “Evento JSON”, elimina el código que viene por defecto y en su lugar copia el siguiente.
{
  "directive": {
    "header": {
      "namespace": "Alexa.Discovery",
      "name": "Discover",
      "payloadVersion": "3",
      "messageId": "1bd5d003-31b9-476f-ad03-71d471922820"
    },
    "payload": {
      "scope": {
        "type": "BearerToken"
      }
    }
  }
}
  1. Sube de nuevo a la cabecera de apartado (“Evento de prueba”) y pulsa sobre el botón “Guardar”.
  2. Ve a Home Assistant, abre tu fichero ‘configuration.yaml’, añade el siguiente código y después reinicia HA.
alexa:
  smart_home:
  1. Una vez completado el reinicio, vuelve a la consola de AWS y, en el mismo menú horizontal, pulsa sobre “Configuración”. En el menú lateral pulsa sobre la opción “Variables de entorno” y después pulsa sobre “Editar”.
  2. Pulsa sobre “Agregar variable de entorno” en el campo “Clave” indica ‘BASE_URL (sin comillas) y en el campo “Valor” la dirección URL con la que accedes a Home Assistant desde el exterior (por ejemplo, ‘https://aguacatec.es/’). Después pulsa en “Guardar”.
  3. Vuelve de nuevo al menú horizontal, entra al apartado “Probar” y pulsa sobre el botón “Probar”. Tras un par de segundos deberías ver un mensaje con un ‘check’ verde indicando que se ha ejecutado sin errores.
  1. Ve a Home Assistant y, en el menú lateral, pulsa sobre tu nombre de perfil. Baja hasta el final de la página y pulsa sobre “Crear token”. En el nombre indica “Alexa” y pulsa en “Aceptar”. A continuación aparecerá en pantalla un código que tienes que copiar y conservar.
  2. Vuelve a la consola de AWS y baja hasta el apartado “Evento JSON”, donde habíamos copiado un código previamente. Justo a continuación de la línea que indica “type”: “BearerToken” tienes que añadir una coma (‘,’) y en una nueva línea pegar el token generado en HA, de forma que el código quede la siguiente forma.
{
  "directive": {
    "header": {
      "namespace": "Alexa.Discovery",
      "name": "Discover",
      "payloadVersion": "3",
      "messageId": "1bd5d003-31b9-476f-ad03-71d471922820"
    },
    "payload": {
      "scope": {
        "type": "BearerToken",
        "token": "PEGA_AQUI_TU_TOKEN"
      }
    }
  }
}
  1. Sube un poco por la pantalla y pulsa en “Guardar”. Ahora pulsa de nuevo en “Probar” y verás que esta vez te devuelve el mismo mensaje en verde, pero desplegando información relacionada con tu instancia de Home Assistant.
  2. Si continúas subiendo por esta misma página, a la derecha del bloque “Información general de la función” encontrarás el código “ARN de la función”. Cópialo y consérvalo.
  3. Ahora regresa a la Alexa Developer Console y, en el campo “Default endpoint” pega el código ARN que has obtenido en el paso anterior. Después pulsa en el botón “Save”.
  4. Desde el menú lateral accede al apartado “Account linking” y añade la siguiente información en el apartado “Security Provider Information”.
    • Your Web Authorization URI. Indica tu URL con la que accedes a Home Assistant desde el exterior, añadiendo al final ‘/auth/authorize’ (por ejemplo, “https://aguacatec.es/auth/authorize”)
    • Access Token URI. Indica tu URL con la que accedes a Home Assistant desde el exterior, añadiendo al final ‘/auth/token’ (por ejemplo, “https://aguacatec.es/auth/token”)
    • Your Client ID. Aquí tienes que pegar una de las 3 URL’s que encontrarás más abajo en el apartado “Alexa Redirect URLs”. En caso de encontrarte en Europa utiliza la primera (https://layla.amazon.com…”)
    • Your Secret. Introduce cualquier texto (por ejemplo “aguacatec”) ya que es un campo obligatorio, pero no se utiliza.
    • Your Authentication Scheme. Selecciona la opción “Credentials in request body”.
    • Scope. Pulsa sobre “Add scope” e introduce ‘smart_home’ (sin comillas) en el campo “Enter scope…”
    • Sube hasta la parte superior y pulsa en “Save”.

Configuración en la aplicación de Alexa

Para terminar, abre la aplicación de Alexa en tu dispositivo móvil y haz lo siguiente:

  1. Pulsa sobre el apartado “Más” del menú inferior y selecciona “Skills y juegos”. Baja hasta el final y pulsa sobre “Mis Skills”
  2. Verás que aparece una ‘skill’ en el apartado “Desarrollador”. Al pulsa sobre ella te indicará que es necesario vincular una cuenta de Home Assistant. Cuando pulses sobre este texto te llevará a una nueva pantalla y tendrás que pulsar sobre “Permitir su uso”.
  3. Automáticamente te llevará a la página de inicio de sesión de Home Assistant, donde tendrás que iniciar sesión con tu usuario habitual de HA.
  4. Hecho esto, verás un mensaje que indica que la cuenta de HomeAssistant se ha vinculado correctamente. Pulsa en “Siguiente” y Alexa empezará a buscar y encontrar tus dispositivos de Home Assistant.
  5. Enhorabuena!! Has conseguido integrar Alexa en Home Assistant!!

Integración Emulated Hue

Como te he comentado, esta es una buena opción para empezar a controlar tus dispositivos con Alexa, ya que para empezar a pagar o meterte en proyectos más complejos, siempre hay tiempo.

Sólo hay un requisito para integrar Alexa en Home Assistant con este método. Puesto que va a detectar a Home Assistant rastreando su IP, para evitar que esta cambie y deje de funcionar, debes asignar una IP fija a tu instancia de HA. Hecho esto, ve a tu fichero ‘configuration.yaml’ y pega el siguiente código, haciendo las siguiente modificaciones:

  • host_ip. Indica aquí la IP de tu instancia de Home Assistant.
  • listen_port. Este puerto depende de si tu altavoz Alexa es un dispositivo nuevo (’80’), o se trata de un dispositivo antiguo (‘8300’).
  • expose_by_default. Si indicases ‘true’ en este apartado, se expondrían a Alexa todos tus dispositivos y entidades (con un límite de 63), por lo que probablemente no sea lo más adecuado. Vamos a indicar ‘false’ y a especificar qué dispositivos quieres exponer como verás a continuación.
  • entities. En este apartado debes indicar el id concreto de cada entidad específica que quieras exponer y el nombre con el que quieras identificarlo a través de Alexa. Asegúrate que has indicado el atributo ‘hidden: false’.
  • Cuando termines de editar el código, guarda la confinguración y reinicia Home Assistant.
emulated_hue:
  host_ip: 192.168.1.186
  listen_port: 80
  expose_by_default: false
  entities:
    light.bedroom_light:
      name: "Bedside Lamp"
      hidden: false
💡 Puedes verificar que la integración Emulated Hue se ha cargado correctamente buscando en tu navegador lo siguiente 'http://TU-IP-DE-HOME-ASSISTANT:80/api/v2/lights'. Esto te mostrará las entidades que han sido expuestas.

Ahora abre la aplicación de Alexa en el dispositivo móvil donde la tengas configurada y dile “Buscar dispositivos”. Alternativamente también puedes pulsar sobre el icono “+” de la esquina superior derecha, y seleccionar la opción Dispositivo > Philips Hue > Puente Philips Hue V1.

⚠️ Si has comprobado que tus entidades se han expuesto correctamente, pero Alexa no encuentra tus dispositivos, entonces se trata de un problema de red. Otros usuarios han reportado haberlo resuelto realizando la integración UPNP y desconectando durante un rato prolongado sus dispositivos echo para hacer un 'soft reset'.
🥑 Si quieres ver cómo ha llevado a cabo este método nuestro amigo Héctor de la comunidad de Aguacatec, echa un vistazo a este video!

Controlar los dispositivos Alexa desde HA

Para terminar de integrar Alexa en Home Assistant vamos a hacer el proceso contrario. Es decir, vamos a controlar los dispositivos de Alexa desde HA para poder emitir notificaciones de audio, contenido multimedia, etc. Para ello sigue estos pasos:

  1. Ve a HACS > Integraciones > Explorar y descargar repositorios, busca “Alexa Media Player”, pulsa en “Descargar” y reinicia HA.
  2. Ve a Ajustes > Dispositivos y servicios > Añadir integración > Alexa Media Player, dale unos segundos para que se incie el asistente de configuración e indica los siguientes datos:
    • El correo y contraseña de tu cuenta de Amazon.
    • Adapta el dominio de Amazon a tu región (por ejemplo, “amazon.es” para España).
    • Indica tu url de acceso a Home Assistant local (por ejemplo, “http://homeassistant.local:8123/”) o externa (“https://aguacatec.es/”).
    • Deja el resto de campos como aparecen y pulsa en “Enviar”.
  3. Tras unos segundos te pedirá que abras una nueva ventana pulsando en el botón “Abrir sitio web”. En esta ventana tendrás que iniciar sesión con tu cuenta de Amazon y completar un ‘captcha’.
⚠️ Si no puedes iniciar sesión y aparece el error "500 Internal Server Error", avanza hasta el apartado correspondiente para encontrar la solución.
  1. Finalizada la integración, asigna una estancia y pulsa en “Terminar”.

Envío de comandos a Alexa

Para enviar comandos a Alexa tienes que utilizar el servicio ‘media_player.play_media’ y seleccionar como entidad al altavoz correspondiente. Después indica el comando que darías con la voz en el campo “ID de contenido” (por ejemplo, “dime la hora”) y en tipo de contenido indica ‘custom’.

Puedes hacer la prueba desde Herramientas para desarrolladores > Servicios, pegando el siguiente código, reemplazando tu dispositivo y pulsándo en “Llamar servicio”.

service: media_player.play_media
target:
  entity_id: media_player.DISPOSITIVO
data:
  media_content_type: custom
  media_content_id: dime la hora

Notificaciones a través de Alexa

Si lo único que quieres es emitir una notificación a través de tus altavoces, por ejemplo cuando te llega una carta al buzón o cuando termina la lavadora, tienes que utilizar el servicio ‘notify.alexa_media_DISPOSITIVO’ e indicar en el campo ‘message’ el texto de tu notificación.

Puedes hacer la prueba desde Herramientas para desarrolladores > Servicios, pegando el siguiente código, reemplazando tu dispositivo y pulsándo en “Llamar servicio”.

service: notify.alexa_media_DISPOSITIVO
data:
  message: ¿Qué tal aguacatero?

500 Internal Server Error

Si obtienes este error cuando intentas iniciar sesión con tu cuenta de Amazon (paso 3) lo puedes solucionar de la siguiente forma:

  1. Accede a tu cuenta de Amazon, y entra en los ajustes de “Inicio de sesión y seguridad”.
  2. Ve al apartado de “Configuración de verificación en dos pasos (2SV)” y pulsa sobre “Añadir nueva app”.
  3. Pulsa sobre el enlace que figura debajo del QR que indica “¿No puedes escanear el código de barras?”. Al hacerlo te proporcionará una clave alfanumérica que tienes que copiar.
  4. Vuelve al paso 2 del apartado anterior, y esta vez pega la clave alfanumérica que acabas de obtener en el campo “Clave de aplicación 2FA incorporada” y pulsa en “Enviar”.
  5. Antes de continuar, escanea el QR proporcionado por Amazon en tu dispositivo móvil con la aplicación de autenticación (por ejemplo, Google Authenticator) para disponer del código de acceso.
  6. Copia el ‘OTP Code’ proporcionado por Home Assistant, y pégalo en la página de Amazon dónde pone “Indica la contraseña de un solo uso” y pulsa el botón a su derecha.
  7. En Home Assistant, marca la casilla que indica “OTP from the Built-in 2FA App Key confirmed successfully” y pulsa en “Enviar”.
  8. De nuevo te pedirá que abras una página web donde tendrás que iniciar sesión, esta vez indicando tu código de acceso proporcionado por tu aplicación de autenticación.

¿Dudas?¿necesitas ayuda? entra aquí
Y si te ha gustado, compártelo! 🙂
Send this to a friend