Home Assistant: condition template vs choose en YAML

Publicado el . Última revisión: 26/09/2026.

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 Expresión booleana true → sigue la acción false → detiene la automatización choose (en action) Condición A → acción A Condición B → acción B Si ninguna se cumple → default Ejemplo guarda: "solo de noche y con presencia" Ejemplo rama: "si hace calor, refrigera; si hace frío, calienta"
La plantilla decide si la automatización continúa; choose decide qué hacer según el estado.

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

Comparación condition: template vs 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"

Fuentes