Home Assistant: condition template vs choose en YAML
La diferencia no es estética: condition: template es una puerta. choose es un selector de rutas. La primera detiene o deja pasar; la segunda ejecuta la primera ruta que encaja. Aquí ves cuándo usar cada uno, con YAML que puedes copiar.
condition: template como guarda
La documentación oficial define la condición template como aquella que comprueba si una plantilla renderiza true. En la lista condition de una automatización actúa igual que una condición nativa: si no se cumple, no se ejecuta la acción.
automation:
- alias: "Luz solo si hay alguien y es de noche"
trigger:
- platform: state
entity_id: binary_sensor.presencia
to: "on"
condition:
condition: template
value_template: "{{ is_state('sun.sun', 'below_horizon') and is_state('binary_sensor.presencia', 'on') }}"
action:
- service: light.turn_on
target:
entity_id: light.salon
Uso is_state() para devolver booleano. Si tu expresión compara números, asegúrate de que el resultado sea true o false; un número suelto no es una condición válida.
choose para ramificar acciones
choose no es una condición: es una acción. Por eso va dentro de action, no de condition. Evalúa sus ramas en orden y ejecuta la primera secuencia cuya condición se cumpla. Si ninguna se cumple y hay default, ejecuta default.
action:
- choose:
- conditions:
- condition: template
value_template: "{{ states('sensor.temperatura') | float > 25 }}"
sequence:
- service: climate.set_temperature
target:
entity_id: climate.salon
data:
temperature: 22
- conditions:
- condition: template
value_template: "{{ states('sensor.temperatura') | float < 18 }}"
sequence:
- service: climate.set_temperature
target:
entity_id: climate.salon
data:
temperature: 23
default:
- service: notify.mobile_app_telefono
data:
message: "Temperatura en rango, no toco el clima"
Cuándo no complicarlo con choose
| Situación | Herramienta | Por qué |
|---|---|---|
| Frenar la automatización si una condición compleja no se cumple | condition: template |
Actúa como guarda y no ejecuta nada si la plantilla no devuelve true. |
| Ejecutar una secuencia distinta según el valor de un sensor | choose dentro de action |
Permite varias ramas y un default. |
| La automatización solo tiene un camino y una condición de paso | condition: template |
Menos YAML para el mismo comportamiento. |
| Necesitas un comportamiento de respaldo cuando nada encaja | choose con default |
choose sin default no hace nada si no hay coincidencia. |
YAML completo para copiar
Esta automatización usa una plantilla como guarda y choose para decidir qué hacer según la temperatura. Es la combinación más común en domótica local.
automation:
- alias: "Clima según temperatura"
trigger:
- platform: numeric_state
entity_id: sensor.temperatura
above: 0
condition:
condition: template
value_template: "{{ states('sensor.temperatura') | is_number }}"
action:
- choose:
- conditions:
- condition: template
value_template: "{{ states('sensor.temperatura') | float > 25 }}"
sequence:
- service: climate.set_temperature
target:
entity_id: climate.salon
data:
temperature: 22
- conditions:
- condition: template
value_template: "{{ states('sensor.temperatura') | float < 18 }}"
sequence:
- service: climate.set_temperature
target:
entity_id: climate.salon
data:
temperature: 23
default:
- service: notify.mobile_app_telefono
data:
message: "Temperatura en rango, no toco el clima"