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.

La integración es un poco liosa y nos basaremos en la documentación oficial de Google Assistant y la configuración manual así que, paciencia.

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 OverviewSetup 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.

Seleccionamos Save y después de unos segundos nos aparece en la parte superior derecha Test. Lo seleccionamos y después de unos segundo y permitir nuestra geolocalización nos aparece el mensaje Test enabled.

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

Seleccionamos en el menú lateral Credenciales y, en esta página, Crear credenciales - Cuenta de servicio.

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:

google_assistant:   
  project_id: PROJECT ID
  service_account: !include SERVICE_ACCOUNT.JSON
  report_state: true
  exposed_domains:
    - group
    - scene
    - script
    - light
    - alarm_control_panel
    - camera
    - switch
    - cover

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:

google_assistant:
  project_id: PROJECT ID
  service_account: !include SERVICE_ACCOUNT.JSON
  report_state: true
  exposed_domains:
    - light
  entity_config:
    light.nombre_del_dispositivo:
      expose: false

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:

google_assistant:
  project_id: PROJECT ID
  service_account: !include SERVICE_ACCOUNT.JSON
  report_state: true
  exposed_domains: []
  entity_config:
    light.nombre_del_dispositivo:
      expose: true

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

Entradas populares de este blog

Proyecto: Domotizar una luz conmutada

Proyecto: Controla la carga de un móvil