При написании автоматизаций в Home Assistant постоянно приходится искать ответы на вопросы "как это сделать?" и потом снова и снова к ним возвращаться, так как всё упомнить невозможно. Решил создать и вести некий справочник - ответы на вопросы, которыми я так или иначе задавался. Возможно, это окажется полезным ещё кому-то, кроме меня. Часть ответов описана в официальной документации, часть найдена на форуме комьюнити.
Эту статью я буду время от времени пополнять новыми заметками.
Триггер завершения таймера в автоматизации
- trigger: event
event_type: timer.finished
event_data:
entity_id: timer.my_timer_name
Логика работы условий восхода и захода солнца
Если используется только ключ before, условие будет выполняться с полуночи до восхода/заката. Если используется только ключ after, условие будет выполняться с заката/восхода до полуночи. Если используются оба ключа before: sunrise и after: sunset, условие будет выполняться с полуночи до восхода и с заката до полуночи. Если используются оба ключа after: sunrise и before: sunset, условие будет выполняться с восхода до заката.
Получение случайного значения из диапазона или элемента из списка
{{ range(-20,85) | random }}
{{ range(255) | random }}
{{ (range(1000) | random) / 1000 }}
{{ ['налево','направо','прямо'] | random }}
Вывод элементов списка в случайном порядке без повторов
alias: Элементы спика в случайном порядке без повторов
variables:
list: |
{% set words = [
'слово1',
'слово2',
'слово3'
] -%}
{%- set ns = namespace(x = words) -%}
{%- for i in range(ns.x | length - 1, 0, -1) -%}
{%- set j = range(0, i + 1) | random -%}
{%- if j != i %}
{%- set ns.x = ns.x[:j]+[ns.x[i]]+ns.x[j+1:i]+[ns.x[j]]+ns.x[i+1:] -%}
{%- endif -%}
{%- endfor -%} {{ ns.x }}
sequence:
- repeat:
count: "{{list|count}}"
sequence:
- data:
message: "{{ list[repeat.index-1] }}"
action: notify.my_phone
mode: single
Получить длину строки
{{ "строка"|count }}
Время и дата
Текущее время и дата:
{{ now().strftime("%d.%m.%Y %A - %H:%M:%S") }}
День недели по-русски:
{% set days = ["понедельник", "вторник","среда","четверг","пятница","суббота","воскресенье"] %}
{{ days[now().weekday()] }}
Дата и время с текущим днём недели по-русски:
{{ now().strftime("%d.%m.%Y, ") }}{{days[now().weekday()]}}{{ now().strftime(" - %H:%M:%S") }}
Дельта времени относительно заданной (разные способы)
+ 60 секунд:
{{(((state_attr('input_datetime.budilnik' , 'timestamp')) + 60) | timestamp_custom('%H:%M', true))}}
+ 15 минут:
{{ (today_at(states('input_datetime.budilnik')) + timedelta(minutes=15)).strftime('%H:%M:%S') }}
вчерашняя дата:
{{ (now() - timedelta(hours=24)).strftime('%d.%m.%Y') }}
Время последнего обновления объекта больше заданного (сек):
{{ as_timestamp(now()) - as_timestamp(states.sensor.sens1.last_updated) > 125 }}
Триггер некратного интервала времени
Триггер "Временной цикл" (time_pattern) срабатывает с регулярной периодичностью только если задан цикл, кратный максимальному числу секунд в минуте, минут в часе или часов в сутках. То есть, например, для минут правильно будут работать интервалы в 1, 2, 3, 4, 5, 6, 10, 12, 15, 20, 30 и 60 минут, так как только эти значения кратны 60-ти минутам. Любые другие значения интервала минут будут срабатывать верно только в пределах часа, но они всегда сработают и в 0 минут каждого часа, так как любое число кратно нулю. И если задать таким образом интервал в 11 минут, то он сработает в 11, 22, 33, 44, 55 минут часа, а затем через 5 минут в 0 минут часа, и далее снова в 11, 22,..
Чтобы получить регулярный интервал, не кратный минутам часа, нужно использовать шаблонный триггер, где 660 = 60 секунд * 11 минут:
{{ now() | as_timestamp | int %660 < 60 }}
Этот интервал будет кратен началу UNIX-времени (1 января 1970 года).
Уменьшить межстрочный интервал в entities card
В текстовом редакторе карточки дописать в конец:
card_mod:
style: |
#states * {
margin: -10px 0px !important
} h1 {
font-size: 100%;
font-weight: bold;
font-family: Tahoma
}
Здесь же меняется стиль шрифта заголовка карточки.
Отобразить в entities card результат шаблона без создания сенсора
В HACS компонент template-entity-row:
Уменьшить расстояние между секциями на панелях в режиме "Разделы" ("Sections")
В configuration.yaml добавить:
frontend:
themes:
my_theme:
ha-view-sections-column-gap: 7px
Перезагрузить HA. В настройках пользователя выбрать эту тему:
Табличное отображение данных в карточке на панели
Самый простой способ - воспользоваться карточкой Markdown:
Эта карточка частично поддерживает разметку HTML, и таблицу можно просто создать соответствующими тегами в текстовом режиме редактирования карточки. Данные с сенсоров выводятся с помощью шаблонов:
Получение текста уведомления из триггера календаря
{{ trigger.calendar_event.summary }}
Время срабатывания события календаря в читабельном формате:
{{ (trigger.calendar_event.start | as_datetime).strftime('%H:%M') }}.
Изменение числа трассировок в автоматизации
В тексте автоматизации добавить в конце:
trace:
stored_traces: 20