Home Assistant #12: Limpieza del código y preparando para las copias de seguridad

Home Assistant #12: Limpieza del código y preparando para las copias de seguridad

Vamos a seguir con la serie de tutoriales, en este caso, toca algo menos divertido y algo que tendría que haber hecho hace tiempo y que, aquellos que quieran llegar a editar el código para hacer cosas más avanzadas, necesitarán hacer tarde o temprano, limpieza del código.

Si habéis hecho como yo y habéis seguido los tutoriales, habréis hecho uso de manera intensa del editor de automatizaciones y, si habéis intentado editar a mano el fichero automations, habréis visto que se trata de un fichero que parece desordenado, al menos, no sigue el orden de lógico a la hora de lanzar una automatización de trigger (lo que lanza) – Condition (lo que debe suceder para que se ejecute) – Action (lo que hace si lo anterior se cumple).

Otra de las grandes recomendaciones es hacer copia de seguridad del sistema, ya que, la manera en la que está construido Home Assistant, es posible volver a poner un sistema en pie de una forma muy sencilla siempre que tengamos copia de los ficheros que tenemos en .homeassistant, eso si, si queremos hacer copia, tenemos que tener claro donde irán a parar nuestras copias, por lo que tendremos que ocultar los datos sensibles.

En este pequeño tutorial, primero os voy a indicar como ordenar el fichero automations para que sea más legible y posteriormente, como hacer uso del fichero secrets.yaml donde almacenaremos las claves y los datos sensibles para que, en nuestro próximo tutorial, podamos hacer copia de seguridad en github, ya que, nuestra configuración puede ayudar a otros igual que podemos nutrirnos de la enorme comunidad que hay alrededor de Home Assistant.

Limpieza de código y ordenación

Como he comentado, el código que saca el propio editor de Home Assistant, no entiendo porque, pero no lo saca tan legible como sería escrito a mano, por poner un ejemplo:

- action:
  - data:
      message: Puerta de la calle abierta
    service: notify.telegrambot2
  alias: Puerta
  condition: []
  id: '1513669758510'
  trigger:
  - entity_id: binary_sensor.door_window_sensor_15823123dcb47f
    from: 'off'
    platform: state
    to: 'on'

Como se puede ver, no está nada claro, ni donde empieza ni donde están las partes de las que se compone la automatización. El caso es que como están bien indentados, funcionan sin problemas, pero, cuando queremos entrar a modificar de una forma manual, se complica mucho el asunto. Vamos a mirar el código con detenimiento para analizar las partes que tiene y poder ordenarlo de una forma más lógica:

  • Tenemos que localizar el id, que es el identificador, único para cada automatización y necesario para que aparezca en el editor, ya que será lo primero que pondremos.
  • Posteriormente, pondremos el alias, que viene a ser el nombre que tiene la automatización
  • Después colocaremos el trigger con todo lo que cuelgue de él, pero, ordenando por platform, entity_id y luego el cambio de estado que disparará
  • Pasamos a condition, que, en este ejemplo, no posee condición y notifica siempre, aunque, ordenaremos de la misma forma que en el trigger
  • Por último, estaría el action (con todo lo que lleve asociado) ordenando de una forma similar a trigger y condition, mostrando primero el entity que sea y luego los datos que acompañen.

Siguiendo este pequeño guión, con el ejemplo anterior, quedaría algo así:

- id: '1513669758510'
  alias: Puerta
  trigger:
  - platform: state
    entity_id: binary_sensor.door_window_sensor_15823123dcb47f
    from: 'off'
    to: 'on'
  condition: []
  action:
  - service: notify.telegrambot2
    data:
      message: Puerta de la calle abierta

De esta forma, modificaríamos todas las automatizaciones para poder entrar a la edición a mano, ahora que conocemos mejor el sistema, permitiendo una mayor flexibilidad a la hora de crear automatizaciones.

Uso del secrets.yaml

Cuando vamos a dejar la configuración a la vista, o bien para evitar tener copia de todo mezclado, podemos hacer uso de un fichero llamado screts.yaml, dicho fichero nos sirve para poder tener una configuración, lista para compartir sin que nada quede a la vista.

De esta forma, si queremos seguir una de nuestras próximas guías, podréis hacerlo sin miedo a que vuestros datos queden comprometidos, ya que, la idea es poder publicar una guía en breve en la que podréis hacer copia de vuestra configuración en github, de forma automática con el fin de poder tener a salvo nuestros ficheros en todo momento.

Si por ejemplo hemos configurado un dominio para acceder a nuestra casa y le tenemos asignada una clave, podemos tener una configuración así en nuestro configuration.yaml:

base_url: https://domticaencasa:8123
api_password: miclave123

Como vemos, no es nada bueno, si llevamos idea de hacer copia de la configuración en github, pero, podemos configurar en el fichero secrets.yaml de esta forma:

http_password: miclave123
direccion_web: https://domticaencasa:8123

Y, entonces, necesitaremos poner dentro de nuestro configuration.yaml esto:

base_url: !secret http_password
api_password: !secret direccion_web

De esta forma, indicamos a Home Assistant que lo que va en base_url o api_password, debe buscarlo en el fichero secrets.yaml con las variables http_password y direccion_web respectivamente y, de esta forma todo quedaría listo para poder ser guardado de una forma pública.

¿Habéis podido organizar las automatizaciones?¿Queréis el tutorial para la copia con github?

IMPORTANTE: Con el fin de ayudaros de una forma más directa, he creado un grupo en Telegram donde podemos ayudarnos todos así como evitar que os quedéis atascados, si tenéis telegram podéis pulsar aquí para uniros y si no lo tenéis, os recomiendo que os lo instaléis ya que lo usaremos en el tutorial para notificarnos.

La entrada Home Assistant #12: Limpieza del código y preparando para las copias de seguridad se publicó primero en Domótica en Casa.

Eduardo Ruiz

Informático de vocación, apasionado de la tecnología y blogger desde hace mucho tiempo, escribo de lo que me entretiene y disfruto con ello. Si deseas seguirme, usa el rss del blog o en mi perfil de .