Creando un componente para HomeAssistant


Desarrollar para HomeAssistant es fácil a pesar de la poca documentación existente, eso me ha llevado a tener que realizar un poco de ingeniería inversa sobre el código fuente en su repositorio git. En diversos posts iré indicando como he ido realizando mis componentes.

Empezará esta saga con el «Hola Mundo», para variar …

Hola Mundo en HomeAssistant

El primer ejemplo sorprende ¿Cómo desarrollar un componente? [enlace]. Lo único que queda claro es que hay crear el código en el directorio .homeassistant/custom_components y poco más…

La forma más rápida comenzar es conseguir que HomeAssistant cargue nuestro código python, independientemente de si es una entidad, componente o automatización. El fichero de configuración .homeassistant/configuration.yaml añadiendo una entrada de primer nivel:

hola_mundo:

Si intentas iniciar HomeAssistant así, indicará con un error que no encuentra el componente. Para realizar experimentos se debe crear una nueva carpeta llamada custom_components dentro de la carpeta .homeassistant. Así se debe crear un fichero python con el mismo nombre en la siguiente ruta: .homeassistant/custom_components/hola_mundo.py. En este fichero pondremos lo mínimo para comprobar que HomeAssistant está incluyendo los ficheros:

DOMAIN = 'hola_mundo'

print('Hola mundo')

async def async_setup(hass, config):
    """ Probando setup """
    print('Hola setup')
    return True

Evidentemente ese par de print son un disparate, pero si ejecutamos HomeAssitant con este código veremos como aparece por la consola tanto “hola mundo” como “hola setup”. Esto indica que se ha cargado correctamente el código. Conclusión, el mínimo código es en este fichero es:

DOMAIN = 'hola_mundo'

async def async_setup(hass, config):
    return True

y las siguientes consideraciones son las que se deben tener en cuenta:

  • La definición DOMAIN es obligatoria y debe coincidir con la clave escrita en el fichero YAML de configuración, es decir “hola_mundo
  • La inicialización es asíncrona y la tarea que se pone en cola es async_setup.
#HomeAssistant