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
или
использование сенсора.
Вот пример автоматизации:
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-ого числа в час дня, то запуск этой автоматизации не произойдет. Автоматизация сработает только если сервер работает в указанное время.