Google Home: Integración con Home Assistant
En este artículo voy a integrar Home Assistant en Google Home para poder controlar desde Google aquellos dispositivos que son compatibles con HA pero no con Google Home como pueden ser los dispositivos ESPHome.
Es necesario poder acceder remotamente a Home Assistant. Para ello puedes seguir los pasos descritos en el artículo Acceso remoto.
Configuración en Actions Console
En primer lugar accedemos a Actions Console de Google y seleccionamos New Project. Si es la primera vez que accedes te mostrará una ventana con los términos del servicio (Terms of Service). Marcamos las tres casillas y seleccionamos Agree and continue.
Le ponemos un nombre a nuestro proyecto, seleccionamos idioma, país y Create project.
A continuación seleccionamos Smart Home y Start Building.
Después de unos segundos nos aparece una pantalla. Seleccionamos Name your Smart Home action, indicamos el nombre que queremos que aparezca en la aplicación de Google Home y Save (en la aplicación de Google Home aparecerá como [test] nombre_de_la_acción). A continuación seleccionamos Overview en el menú superior y en Build your Action seleccionamos Add action(s).
En el campo Fulfillment URL indicamos la siguiente url:
https://[DOMAIN].duckdns.org[:PUERTO]/api/google_assistant
sustituyendo [DOMAIN] por tu nombre de dominio obtenido de duckdns. Si para el acceso remoto utiliza un puerto diferente al puerto 443 debe indicarlo como :PUERTO (por ejemplo :1443). Si no debe ignorarlo. Seleccionamos Save y Overview.
Seleccione el ícono de tres pequeños puntos (más) en la esquina superior derecha y seleccione Project settings. Tome nota del ID del proyecto que aparece en la pestaña General de la página Settings.
A continuación vamos a vincular esta cuenta a Home Assistant. Para ello seleccionamos en el menú superior Overview - Setup account linking.
En Client ID issued by your Actions to Google indicamos:
https://oauth-redirect.googleusercontent.com/r/[YOUR_PROJECT_ID]
sustituyendo [YOUR_PROJECT_ID] por la ID del proyecto que obtuvimos en el paso anterior.
En Client secret introducimos una password, la que sea, ya que realmente Home Assistant no lo necesita.
En Authorization URL introducimos:
https://[DOMAIN].duckdns.org[:PUERTO]/auth/authorize
sustituyendo [DOMAIN] por tu nombre de dominio obtenido de Duck DNS y [:PUERTO] en caso necesario.
En Token URL introducimos:
https://[DOMAIN].duckdns.org[:PUERTO]/auth/token
sustituyendo [DOMAIN] por tu nombre de dominio obtenido de Duck DNS y [:PUERTO] en caso necesario.
En Configure your client (optional) - Scopes introducimos email . Seleccionamos Add scope, introducimos name. y seleccionamos otra vez Add scope.
Nota: no marque la opción Google to transmit clientID and secret via HTTP basic auth header.
Nota: Si no ve esta opción, vaya a la pestaña Test, seleccione el botón Settings en la parte superior derecha debajo del encabezado y asegúrese de que la opción On device testing esté habilitada (si no lo está, habilítela).
Configuración en Google Cloud
Ahora nos vamos a Google Cloud. Vaya a seleccionar un proyecto. En la ventana que apareció, seleccione el proyecto recién creado en el primer paso (Actions Console). A mi inicialmente no me apareció en el listado, así que busqué por el nombre del proyecto, en mi caso, busqué por home. Si es la primera vez que accedes supongo que tendrás que registrarte (no lo recuerdo porque yo tengo varios proyectos creados desde hace años).
En Acceso rápido seleccionamos Apis y servicios
Añadimos un nombre y Crear y continuar. En Selecciona un rol buscamos por token, seleccionamos Creador de tokens de cuentas de servicio y Continuar.
Por último seleccionamos Listo. Después de unos segundos nos aparecerá un pantalla con la cuenta que hemos creado. Seleccionamos el lápiz para editarla
En la nueva pantalla seleccionamos Claves - Agregar clave - Crear clave nueva.
Seleccionamos que sea del tipo JSON y Crear. Guardaremos el fichero en nuestro ordenador con el nombre SERVICE_ACCOUNT.JSON y Guardar.
Volvemos a la página principal de Google Cloud y, en buscar, indicamos Homegraph API y lo seleccionamos.
Seleccionamos Habilitar. Esperamos unos segundos y listo, pasamos a configurar HA.
Configuración en Home Assistant
Terminado este proceso nos vamos a nuestro Home Assistant y seleccionamos File editor. Si no tienes instalado este complemento puedes hacerlo siguiente los pasos de este artículo.
En el menú superior seleccionamos el icono de la carpeta (Browse Filesystem) y Upload File.
Seleccionamos el fichero que descargamos anteriormente y OK.
A continuación editamos el fichero configuration.yaml y añadimos las siguientes líneas de código:
Siendo PROJECT ID el id de proyecto que obtuvimos anteriormente en la consola de acciones de Google, en mi caso homeassistant-xxxxx.
Podemos eliminar aquellos dominios que no queremos que sean expuestos a Google Home. En mi caso, por ahora, solo voy a incluir light y switch.
Seleccionamos Herramienta para desarrolladores - Verificar configuración y reiniciamos Home Assistant.
Una vez se ha completado el reinicio, ejecutamos en nuestro móvil la app de Google Home. Seleccionamos Dispositivos - Añadir - Funciona con Google Home y seleccionamos [test] y el nombre de nuestro proyecto, en mi caso [test] HomeAssistant.
Seleccionamos Continuar y nos abrirá una página web de Duck DNS para introducir nuestro usuario y password para acceder remotamente a Home Assistant. Seleccionamos Iniciar sesión y, después de unos segundos nos muestra los dispositivos.
Por último, le decimos a Google:
OK Google, sincroniza mis dispositivos
En ese momento, Google me informa que ha sincronizado Home Assistant.
Acelerando la sincronización de Google Home y Home Assistant
Si tenemos conectados nuestros altavoces de Google y nuestro servidor de Home Assistant en la misma red local, que sería lo normal, podemos mejorar el tiempo de respuesta de los comandos que le pidamos a Google Home sobre dispositivos de Home Assistant.
Primero nos descargamos el archivo app.js desde el GitHub de Nabucasa. En Assets descargamos dicho archivo y lo guardamos (botón derecho del ratón sobre el enlace - Guardar enlace como...).
Para ello, volvemos a la consola de acciones de Google y seleccionamos Develop. En el menú lateral seleccionamos Actions. En la sección Upload Javascript files seleccionamos el botón Upload JavaScript files y en las dos opciones añadimos el fichero que hemos descargado anteriormente. Por último seleccionamos Upload.
A continuación marcamos el check Support local query y seleccionamos el botón New scan config.
En Select a discovery protocol seleccionamos MDNS. En el campo MDNS service name introducimos:
_home-assistant._tcp.local
Ahora seleccione Add field y en Select a field seleccione Name.
En el campo del nombre indicamos:
.*\._home-assistant\._tcp\.local
Por último seleccionamos el botón Save en la esquina superior derecha y debemos esperar unos 30 minutos o reiniciar todos los dispositivos Google Home. A continuación, reiniciamos Home Assistant.
Para asegurarnos de que está funcionando correctamente seguiremos las instrucción que se muestran en esta página web, siempre y cuando tengamos instalado el navegador web Chrome.
Con Chrome accedemos a la siguiente dirección: chrome://inspect#devices.
Esperamos unos segundos y deberán aparecer todos los dispositivos que tenemos configurados en Home Assistant.
Ajustes finales
Al integrar los dispositivos registrados en Home Assistant en Google Home, pueden aparecer duplicados en la app de Google Home. Esto es porque en configuration.yaml indiqué que publicara todos los dispositivos swichs y light.
Esto no resulta nada cómodo así que voy a restringir los dispositivos que ya los tenía registrados en Home Assistant, como son los dispositivos de Shelly.
Para ello, voy a especificar en configuration.yaml solo aquellos dispositivos que no están integrados en Google Home y sí en Home Assistant. En mi caso, basta con eliminar la integración de los dispositivos tipo switch pero en tu caso quizás tengas que hacer otros cambios o definir una a una las entidades de los dispositivos que quieres que se publiquen en Google Home.
Modifico configuration.yaml y reinicio HA. Una vez ha finalizado el reinicio, le digo a Google que sincronice mis dispositivos.
Nota: cada vez que añado un nuevo dispositivo le tengo que indicar a Google que sincronice mis dispositivos.
Si aun así alguno se duplica podemos definir explícitamente que algún dispositivo no se publique a Google Home. Para ello modifico configuration.yaml:
donde con entity_config: defino configuraciones específicas para las entidades que deseo personalizar y con expose: false aseguro que este dispositivo específico no sea expuesto a Google Assistant.
Del mismo modo, si solo queremos que se publique una serie de dispositivos podemos modificar el código de la siguiente forma:
donde con exposed_domains: [] indicamos que no se expone ningún dominio completo y expose: true asegura que este dispositivo se exponga a Google Assistant.
Pruebo el led que tengo asociado a un dispositivo ESPHome (Led ESP) y funciona correctamente, tanto seleccionando el botón desde la app como indicándole a Google que lo encienda/apague
Resumen
La integración de los dispositivos registrados en Home Assistant en Google Home es un poco complicado. Son muchos pasos los que hay que seguir pero si los ejecutamos uno a uno y en orden no tendrás ningún problema.
Esta integración para mi es fundamental ya que me permite acceder a dispositivos que no son compatibles con Google Home y si lo son con Home Assistant. Además, al tener integrado también Alexa puedo controlar desde Google Home los dispositivos asociados a Alexa por zegbee.
Comentarios
Publicar un comentario