time триггер в автоматизациях Home Assistant

time — это один из триггеров которые можно использовать в автоматизациях Home Assistant (список всех триггеров).

С помощью этого триггера можно запустить автоматизацию в определенное время. Есть несколько вариантов как можно использовать триггер:

  • указать точное время
  • использовать input_datetime
  • использоваь сенсор в котором хранится время
  • указать несколько разных объектов

Важный момент — чтобы этот триггер правильно работал нужно чтобы в Home Assistant был указан правильный часовой пояс.

Кроме триггера time еще есть триггер time_pattern с помощью которого можно настраивать регулярный запуск автоматизаций.

Если вам нужна базовая информация про автоматизации в Home Assistant — прочитайте этот текст.

Использование точного времени

Вот пример автоматизации:

automation:
  - trigger:
      platform: time
      at: "09:38:00"
    action:
      service: system_log.write
      data:
        message: "time is 09:38:00"

Это автоматизация будет запускаться каждый день в 9 часов утра 38 минут.

Если посмотреть в лог после запуска этой автоматизации то можно увидеть сообщение:

Если сервер Home Assistant в момент наступления этого времени будет выключен, то запуска не произойдет.

Значение at записывается в формате ЧЧ:ММ:СС (две цифры которые означают час, потом двоеточие, потом две цифры которые означают минуты, потом двоеточие и две цифры которые означают секунды).

Секунды можно не указывать. Запись at: "09:38" означает то же самое что и at: "09:38:00" — 9 часов утра 38 минут.

В поле at можно указать только время, там нельзя указать дату и время. Если написать at: "2021-02-07 09:42:00", то проверка конфигурации Home Assistant пройдет успешно, но в логе будет ошибка:

Invalid config for [automation]: Expected HH:MM, HH:MM:SS or Entity ID with domain 'input_datetime' or 'sensor' @ data['at'][0]. Got None. (See /config/configuration.yaml, line 10).

Указание точного времени в автоматизации используется редко. Это не особо удобно. Чтобы поменять время запуска автоматизации нужно менять код и нажимать кнопку чтобы Home Assistant узнал про изменение. Более гибкие способы указания времени — это использование input_datetime или использование сенсора.

Использование input_datetime

Вот пример автоматизации:

automation:
  - trigger:
      platform: time
      at: input_datetime.sample
    action:
      service: system_log.write
      data:
        message: time

Это автоматизация выполнится в момент времени который указан в input_datetime.sample.

input_datetime может быть определен тремя разными способами:

  • только время
  • только дата
  • есть и время, и дата

Вот пример описания input_datetime в котором есть и время, и дата:

input_datetime:
  sample:
    name: Sample
    has_time: true
    has_date: true
  • Если в input_datetime есть только время, то автоматизация будет запускаться каждый день в это время
  • Если в input_datetime есть только дата, то автоматизация запустися в 00:00:00 в эту дату
  • Если в input_datetime есть и время и дата, то автоматизация запустится в указанную дату в указанное время

Использование сенсора

В качестве значения at можно указать сенсор у которого device_class timestamp:

automation:
  - trigger:
      platform: time
      at: sensor.phone_next_alarm
    action:
      service: system_log.write
      data:
        message: alarm

Использовать несколько разных объектов

В значении at триггера time можно указать одноврменно несколько разных объектов, пример:

automation:
  - trigger:
      platform: time
      at:
        - "09:38:00"
        - input_datetime.sample
        - sensor.phone_next_alarm
    action:
      service: system_log.write
      data:
        message: time

Эта автоматизация будет выполняться во все моменты времени которые перечислены в at.

Переменная trigger

После того как триггер сработал в блоках condition и action становится доступна специальная переменная с именем trigger. Вот пример того что может находиться в этой переменной при использвании input_datetime:

{
    'platform': 'time',
    'now': datetime.datetime(2021, 2, 7, 10, 33, 0, 2986, tzinfo=<DstTzInfo 'Europe/Moscow' MSK+3:00:00 STD>),
    'description': 'time set in input_datetime.sample',
    'entity_id': 'input_datetime.sample'
}

Запуск автоматизации один раз в месяц

Иногда необходимо запустить автоматизацию один раз в месяц в какое-то число. Это можно сделать с помощью триггера time и дополнительного условия (condition).

В триггере time указываем время когда нужно запустить автоматизацию, например, час дня. Так автоматизация будет запускаться каждый день в час дня. Но кроме этого указываем еще и блок condition в котором проверяем что текущая дата — это именно тот день который нам нужен.

Вот пример автоматизации которая запускается каждый месяц, 17-ого числа в 13:00:

automation:
  - trigger:
      platform: time
      at: "13:00:00"
    condition:
      condition: template
      value_template: >
        {{ now().day == 17 }}
    action:
      service: system_log.write
      data:
        message: "Today is 17"

Внимание, если сервер Home Assistant будет выключен 17-ого числа в час дня, то запуск этой автоматизации не произойдет. Автоматизация сработает только если сервер работает в указанное время.

Редактировать страницу на GitHub