Cuando instalamos el sistema de domótica de Home Assistant, aunque la mayoría de configuraciones que podemos realizar son a través de la interfaz gráfica de usuario, también es cierto que podemos realizar configuraciones muy avanzadas a través de los archivos de configuración internos. Hay muchas cosas que podemos hacer a través de estos archivos de configuración, como crear sensores virtuales e incluso automatizaciones realmente avanzadas si sabes programar. Si quieres saber cómo organizar correctamente todos los archivos de configuración para no tener problemas con la sintaxis, a continuación, os vamos a explicar todo lo que debes tener en cuenta.
El archivo de configuración general de Home Assistant es el configuration.yaml, aquí es donde podemos configurar de manera general el comportamiento y también decirle al sistema dónde están los archivos de configuración de los sensores, automatizaciones, scripts y mucho más.
Organizar los archivos es fundamental
Cuando instalamos un sistema de domótica como Home Assistant, es muy importante la organización. Desde el nombre de los dispositivos que damos de alta con sus entidades, como también el nombre de las automatizaciones y, por supuesto, la organización de dichos archivos de configuración. Hay que tener en cuenta que, todos los sensores, plantillas y la configuración de MQTT lo podemos poner directamente en el archivo de configuración general, pero no es lo recomendable porque tendríamos un archivo de configuración extremadamente largo y muy difícil de manejar.
Por este motivo, lo mejor es crear archivos de configuración separados, y unidos todos en el configuration.yaml principal, porque de lo contrario, este archivo se haría demasiado grande como para poder mantenerlo correctamente. En nuestro caso, tenemos el siguiente fichero de configuración:
#Configuracion de todas las carpetas para los archivos de configuracion.
group: !include AA_groups.yaml
automation: !include automations.yaml
script: !include scripts.yaml
scene: !include AA_scenes.yaml
sensor: !include AA_sensors.yaml
cover: !include AA_covers.yaml
template: !include AA_templates.yaml
mqtt: !include AA_todomqtt.yaml
binary_sensor: !include AA_binarysensors.yaml
Es muy importante que el nombre de «automations.yaml» y «scripts.yaml» no los cambiemos del original, porque si lo hacemos, cuando nos vayamos a la sección de «Ajustes / Automatizaciones» nos saldrá un aviso con un error, indicándonos que todas las configuraciones deberíamos hacerlas en el fichero de configuración manualmente, y no usando la interfaz gráfica de usuario. En el caso de que quieras mantener dos archivos diferentes, uno que sea manual y otro a través de la interfaz gráfica de usuario, entonces tendrás que poner dos etiquetas para diferenciarlos en el configuration.yaml.
automation manual: !include_dir_merge_list automatizaciones/
automation ui: !include automations.yaml
Con esta configuración, todas las automatizaciones que quieras añadir de forma manual, deberán estar en la carpeta de automatizaciones. Las que creemos a través de la interfaz gráfica de usuario estarán en «automations.yaml» y no debes cambiarle el nombre, de lo contrario, dará error al abrir la sección de «Automatizaciones», aunque seguirán funcionando sin ningún problema si la sintaxis es correcta, es simplemente un aviso indicando que no podemos hacer las dos cosas. De hecho, también podríamos configurarlo de la siguiente forma:
automation manual: !include automatizaciones_manual.yaml
automation ui: !include automations.yaml
Y en el archivo de automatizaciones_manual.yaml poner todas nuestras automatizaciones en el mismo archivo de configuración, sin necesidad de crear uno por cada automatización que queramos.
Una vez que hemos visto el código a usar, a continuación, podéis ver nuestro archivo de configuración que tenemos ahora mismo en producción:
Los archivos de configuración con todos los «group», «automation», «script», «scene» y el resto, vienen con la siguiente directiva:
!include archivo_configuracion.yaml
Esto significa que toda la configuración relacionada con «group», «automation», «script», «scene» y el resto está en el archivo que tiene con ese nombre. De esta forma, cada archivo podemos configurarlo de forma individual para tener una mejor organización.
Si nos vamos a la sección de «File Editor«, podemos ver todo el listado completo de archivos de configuración que ya están creados, algunos de ellos están vacíos porque no los usamos, y otros disponen de sensores virtuales y diferentes plantillas.
Por ejemplo, tenemos un sensor virtual que nos indica si la puerta del garaje está abierta o cerrada, dependiendo del estado de dos sensores diferentes. Este código en yaml tendríamos que ponerlo en el configuration.yaml si no tuviéramos la organización de los archivos de configuración.
También tenemos la posibilidad de que en «configuration.yaml» apunte a una carpeta en concreto, y que importe todos los archivos de configuración, en lugar de usar solamente un fichero de configuración. En el caso de que tengamos archivos de configuración de «sensors» demasiado grande, es posible que creemos varios archivos de configuración individuales. Las opciones que tenemos disponibles son las siguientes:
- !include_dir_list: esta opción devolverá el contenido del directorio como una lista y el contenido de cada archivo es una entrada en la lista.
- !include_dir_named: esta opción devuelve el contenido de un directorio como un diccionario que asigna nombre de archivo y contenido del archivo.
- !include_dir_merge_list: devuelve el contenido del directorio como una lista fusionando todos los archivos en una lista más grande.
- !include_dir_merge_named: devuelve el contenido de un directorio como un diccionario cargando cada archivo y fusionándolo en uno más grande.
Dependiendo de cómo sean tus archivos de configuración, podrás configurar una opción u otra.
En el ejemplo anterior donde tenemos todos los sensores en el archivo «AA_sensors.yaml«, tenemos la posibilidad de crear una carpeta llamada «sensores» donde tengamos todos los sensores. El archivo de configuración configuration.yaml quedaría de la siguiente forma:
!include_dir_merge_named sensores/
Y ahora cada archivo de configuración individual, quedaría de la siguiente forma:
#Sensor virtual con el estado de la puerta del garaje
- platform: template
sensors:
sensor_puerta_estado_garaje:
friendly_name: "Estado Puerta Garaje"
value_template: >-
{% if is_state('binary_sensor.shellydw2_puerta_garaje_cerrado', 'off') %}
Cerrada
{% elif is_state('binary_sensor.shellydw2_puerta_garaje_abierto', 'off') %}
Abierta
{% else %}
Entre-Abierta
{% endif %}
icon_template: >-
{% if is_state('binary_sensor.shellydw2_puerta_garaje_cerrado', 'off') %}
mdi:garage-variant-lock
{% elif is_state('binary_sensor.shellydw2_puerta_garaje_abierto', 'on') %}
mdi:garage-alert-variant
{% else %}
mdi:garage-open-variant
{% endif %}
Otro sensor sería el siguiente:
#Sensor virtual con la actualización de datos del edata.
- platform: template
sensors:
last_registered_kwh_date:
friendly_name: "Edata actualizacion datos"
value_template: >-
{{ state_attr('sensor.edata_99nk', 'last_registered_kWh_date') }}
Y el último sensor sería este:
- platform: edata
debug: true
De esta forma, podemos dividir todos los sensores que tenemos en el mismo archivo específico, en varios archivos diferentes y todos ellos en una misma carpeta, para mejorar aún más la organización de todos los archivos de Home Assistant.
Conclusiones
Cuando instalamos un sistema de domótica como Home Assistant, es fundamental organizar correctamente todos los sensores que creamos de manera manual, porque de lo contrario, nos encontraremos con un archivo general de configuración (el configuration.yaml) realmente grande e imposible de mantener. Lo mejor que puedes hacer es separar los diferentes sensores, sensores binarios, scripts y otros tipos, para posteriormente mantenerlos adecuadamente y que no empiece a crecer exponencialmente. Además, también tenemos la posibilidad de separar el fichero de sensores en varios diferentes, un fichero por cada sensor que nosotros queramos configurar, perfecto para editar solamente el que necesitamos y no todo, así tendremos localizados los posibles errores de sintaxis o funcionamiento de dicho sensor.
A medida que vamos cogiendo experiencia con Home Assistant, además de usar la interfaz gráfica de usuario para realizar las automatizaciones, es muy habitual crear sensores virtuales en base a sensores que ya hay presentes en el sistema de domótica. De hecho, podríamos incluso programar diferentes sensores en Python y hacer automatizaciones muy avanzadas, aunque esto último suele ser solo para personas que sepan programar, hay mucho código fuente de ejemplo en los foros oficiales que podrás usar para adaptarlo a tus entidades y las automatizaciones que quieras realizar. Este sistema operativo de domótica tiene una curva de aprendizaje algo elevada al principio, pero una vez que aprendes bien sobre las entidades, estados que pueden tener, automatizaciones que puedes realizar y un largo etcétera, todo es exactamente igual que siempre. No obstante, hay add-ons de terceros a través de HACS que nos permitirán añadir gráficos realmente interesantes para mostrar diferentes datos, como la producción solar, el consumo que tengamos en nuestra vivienda etc.