Automatyzacje w ESPHome dostają rozgałęzienia podobne do tych, które znasz z Home Assistanta. Zgłoszenie zmian #20547 Clyde'a Stubbsa scalono do gałęzi rozwojowej 17 października 2026 o 12:23 czasu polskiego. Wprowadza ono cztery nowości w skryptach i akcjach. Dokumentację (esphome.io #7648) scalono jeszcze tego samego dnia. Kod jest w wersji rozwojowej 2026.11.0-dev, więc do użytkowników trafi z wydaniem 2026.11. Samo wydanie 2026.10.0 było wtedy jeszcze w fazie testów (czwarta beta wyszła 13 października).

Akcja choose

Żeby wybrać jedną z kilku ścieżek, trzeba było dotąd zagnieżdżać if w else. Nowa akcja choose przyjmuje listę wariantów, z których każdy ma if: i then:, i wykonuje akcje pierwszego wariantu ze spełnionym warunkiem. Opcjonalny ostatni wpis else: wykona się, gdy żaden warunek nie pasuje. Pod spodem choose to po prostu połączone w łańcuch zwykłe akcje if/else, więc zmienia się czytelność konfiguracji, a nie jej działanie.

- choose:
    - if:
        lambda: 'return id(temperature).state < 20;'
      then:
        - switch.turn_off: fan
    - if:
        any:
          - lambda: 'return id(temperature).state < 25;'
          - binary_sensor.is_on: window_open
      then:
        - switch.turn_on: fan
        - delay: 5min
    - else:
        - switch.turn_on: fan

Jeden warunek od razu pod if:

Pojedynczy warunek można teraz wpisać bezpośrednio pod if:, bez obejmowania go kluczem condition:. Jeśli wpiszesz tam kilka warunków albo połączysz jeden z condition:, all: lub any:, sprawdzanie konfiguracji zatrzyma się z komunikatem, który mówi, co poprawić.

script.stop bez identyfikatora i wyzwalacz on_stop

Wewnątrz skryptu samo script.stop zatrzymuje teraz ten właśnie skrypt. Poza skryptem identyfikator nadal jest wymagany.

Nowy wyzwalacz on_stop uruchamia się, gdy skrypt zostanie zatrzymany przed końcem: przez script.stop albo dlatego, że skrypt w trybie restart uruchomiono ponownie. Nie uruchamia się, gdy skrypt normalnie dojdzie do końca.

Tego brakowało nawet w prostych automatyzacjach. Jeśli skrypt włącza wentylator, czeka i potem go wyłącza, a ktoś w trakcie czekania wywoła script.stop, wentylator będzie dalej pracował. Z on_stop sprzątanie masz w jednym miejscu:

script:
  - id: fan_control
    mode: restart
    on_stop:
      - switch.turn_off: fan
    then:
      - switch.turn_on: fan
      - delay: 5min
      - switch.turn_off: fan

Jest też jedna zmiana w działaniu kodu C++: Script::stop() nadal nic nie robi, gdy skrypt nie działa, ale w takim przypadku nie wywołuje już stop_action(). Zgłoszenie jest oznaczone jako nowa funkcja zgodna wstecz, więc istniejące konfiguracje dalej działają.