# Time trigger

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

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

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

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

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

## `time` - точное время

!!! example

    ```yaml
    automation:
      - trigger:
        platform: time
        at: "07:00:00"
        action:
        service: system_log.write
        data:
          message: "время 07:00:00"
    ```
    Эта автоматизация будет запускаться каждый день в 7 утра. Если сервер в момент запуска будет выключен, то запуска автоматизации не будет

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

Секунды или минуты, равные 00 можно не указывать. Запись `at: "01:58"` означает то же самое что и `at: "01:58:00"`.

В поле `at` можно указать только время, там нельзя указать дату и время. Если написать `at: "2023-10-20 01:58:00"`, то проверка конфигурации Home Assistant пройдет успешно, но в логе будет ошибка

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

## `input_datatime`

!!! example "Пример автоматизации"

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

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

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

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

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

```yaml
input_datetime:
  sample:
    name: Sample
    has_time: true
    has_date: true
```

- в `input_datetime` есть только время - автоматизация будет запускаться каждый день в это время
- в `input_datetime` есть только дата - автоматизация запустися в `00:00:00` в эту дату
- в `input_datetime` есть время и дата - автоматизация запустится в указанную дату в указанное время

## Сенсор

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

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

## Комбинирование разных объектов

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

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

```

## Запуск раз в месяц

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

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

Запуск произойдет 20 числа в 21:40, при условии, что сервер работает в указанное время