Una automatización es una regla que ejecuta acciones cuando ocurre un evento y se cumplen unas condiciones.
El objetivo final de toda la infraestructura de red, servidores y protocolos que hemos montado es precisamente este: que la casa tome decisiones por nosotros.
Para lograr este nivel de autonomía, necesitamos programar el motor lógico de nuestro servidor. En Home Assistant, el comportamiento autónomo se rige mediante un sistema de reglas estrictas llamadas Automatizaciones (Automations).
A nivel de arquitectura de software, el núcleo de Home Assistant opera como un sistema impulsado por eventos (event-driven). Esto significa que está constantemente escuchando un bus de eventos interno. Para interactuar con este bus, las automatizaciones se dividen siempre en tres bloques fundamentales: Disparadores (Triggers), Condiciones (Conditions) y Acciones (Actions).
Si dominamos la lógica booleana de estos tres bloques, podremos programar prácticamente cualquier comportamiento útil de la casa.
Disparadores: el inicio de la ejecución
El Disparador es el evento que “despierta” a la automatización. Es la chispa que le dice al sistema: “Oye, acaba de pasar algo, ponte a evaluar esta regla”.
Una automatización puede tener múltiples disparadores, y funcionan siempre con lógica OR. Si ocurre el disparador A o el disparador B, la automatización arranca.
Existen docenas de tipos de disparadores, pero los más importantes a nivel técnico son:
- Estado (
state): Es el más utilizado. Se dispara cuando una Entidad concreta cambia de estado. Por ejemplo, cuando un sensor de puerta (binary_sensor) pasa deoff(cerrado) aon(abierto). Podemos incluso especificar cuánto tiempo debe mantenerse ese estado con el atributofor(ej: “si la puerta lleva abierta más de 5 minutos”). - Estado Numérico (
numeric_state): A diferencia del anterior, este evalúa un umbral matemático. Se dispara cuando el valor de un sensor cruza una frontera hacia arriba o hacia abajo. Por ejemplo, “cuando la potencia consumida por la lavadora caiga por debajo de 5W” (señal de que ha terminado). - Tiempo (
time/time_pattern): Disparadores basados en el reloj del sistema. Puede ser una hora exacta (14:30:00) o un patrón repetitivo (cron) como “cada 5 minutos”. - Sol (
sun): Basado en el cálculo astronómico del amanecer (sunrise) o atardecer (sunset), permitiendo incluso un desplazamiento o offset (ej: “45 minutos antes de que se ponga el sol”). - Webhook / MQTT: Disparadores avanzados que reaccionan cuando Home Assistant recibe una petición HTTP externa (un POST a una URL específica) o un mensaje en un topic (tema) de nuestro broker MQTT.
Un error de diseño muy común en principiantes es confundir un Disparador con una Condición. El disparador es un instante, no un estado continuo. El evento “ser de noche” no es un disparador válido; el disparador es “el instante exacto en el que el sol cruza el horizonte”.
Condiciones: los filtros lógicos
Una vez que el Disparador ha lanzado la automatización, el flujo de ejecución pasa al bloque de Condiciones.
Las condiciones actúan como un filtro o compuerta lógica. Su trabajo es evaluar el estado actual de la casa y decidir si la automatización debe continuar hacia las acciones o debe detenerse y abortar inmediatamente.
A diferencia de los disparadores, varias condiciones se evalúan por defecto con lógica AND: todas deben cumplirse para continuar.
Tipos comunes de condiciones:
- Estado (
state): Comprueba si una entidad está en un estado concreto en ese preciso instante. (Ej: ¿Está la televisión apagada?). - Zona (
zone): Evalúa la geolocalización de un usuario. (Ej: ¿Está el usuario ‘Luis’ dentro de la zona ‘Casa’?). - Bloques lógicos (
and,or,not): Nos permiten construir expresiones booleanas complejas. Podemos anidar un bloqueORdentro delANDgeneral para decir: “Continúa si es de noche, Y además (hay alguien en el salón O la alarma está desarmada)”.
Es una buena práctica de programación añadir tantas condiciones como sean necesarias para acotar al máximo el alcance de la automatización. Evitará encendidos fantasma y comportamientos erráticos de la casa.
Acciones: qué debe hacer Home Assistant
Si el disparador arranca el proceso y las condiciones son verdaderas (evalúan a true), el sistema ejecuta el bloque de Acciones. Es aquí donde alteramos físicamente el entorno o enviamos notificaciones.
Una acción suele consistir en ejecutar una operación proporcionada por una integración. En tutoriales antiguos veréis el término “llamar a un servicio”; la interfaz y la documentación actuales hablan de acciones.
light.turn_on/light.turn_off: Enciende o apaga luces. Permite pasar parámetros (datos) como el brillo, el color o el tiempo de transición.switch.turn_on: Activa un relé genérico.notify.notify: Envía un mensaje push a nuestro teléfono móvil.delay: Pausa la ejecución del código durante los segundos especificados antes de pasar a la siguiente acción.
Anatomía de una automatización en YAML
La interfaz permite construir automatizaciones de forma visual y las guarda en formato YAML dentro de automations.yaml.
Saber leer este código nos da mucho más control sobre la lógica. Veamos un ejemplo clásico y robusto: Encender la luz del pasillo si detecta movimiento, pero solo si es de noche, y apagarla a los 2 minutos.
alias: "Iluminación: Pasillo Automático Noche"
mode: restart # Modo de ejecución (explicado abajo)
# 1. DISPARADORES
triggers:
- trigger: state
entity_id: binary_sensor.movimiento_pasillo
to: "on"
# 2. CONDICIONES
conditions:
- condition: state
entity_id: sun.sun
state: "below_horizon" # Solo si es de noche
# 3. ACCIONES
actions:
- action: light.turn_on
target:
entity_id: light.luz_pasillo
data:
brightness_pct: 30 # Encendemos al 30% para no deslumbrar
- delay:
minutes: 2 # Esperamos 2 minutos
- action: light.turn_off
target:
entity_id: light.luz_pasillo
Modos de ejecución
En el código anterior hemos incluido un parámetro fundamental que a menudo se pasa por alto: mode: restart.
¿Qué ocurre si el sensor detecta movimiento, enciende la luz, empieza a contar el delay de 2 minutos y, en el minuto 1, alguien vuelve a pasar por el pasillo (volviendo a disparar la automatización)?
Home Assistant define varios modos de concurrencia:
single(Por defecto): Si la automatización ya está en ejecución (contando el delay), ignora el nuevo disparador. La luz se apagará inexorablemente al cumplirse los 2 minutos del primer evento.restart: Si ocurre un nuevo disparo, cancela la ejecución actual y vuelve a empezar desde el principio. Es el modo correcto para luces por movimiento, ya que reinicia el contador de 2 minutos a cero.queued/parallel: Ponen las ejecuciones en cola o las ejecutan en hilos paralelos (útil para sistemas de notificaciones masivas).
Entender los modos de ejecución separa a un principiante que se frustra porque “las luces se le apagan solas”, de un integrador que controla el flujo de su máquina de estados.
Trazas: ver qué ha pasado de verdad
Cuando una automatización no hace lo que esperábamos, no hay que empezar a tocar cosas al azar. Home Assistant guarda trazas de ejecución (Traces) que permiten ver paso a paso qué disparador se activó, qué condiciones se evaluaron y en qué acción se detuvo el flujo.
Esto es especialmente útil cuando tenemos condiciones múltiples. Muchas veces pensamos “la automatización no se ha disparado”, pero en realidad sí se ha disparado y se ha parado porque una condición devolvió false. Y claro, sin mirar la traza, nos ponemos a cambiar YAML como quien mueve muebles a oscuras.
Después de crear una automatización importante, provocad el caso de prueba manualmente y revisad su traza. Si no sabéis explicar por qué ha pasado por cada bloque, todavía no está terminada.
También ayuda muchísimo ponerles nombres muy descriptivos. Un alias como Pasillo noche con movimiento se entiende de un vistazo. Uno como Luz 3 obliga a abrir la automatización cada vez que queramos tocar algo.