Найти в Дзене
DigitalComfort

Home Assistant - how to do?

При написании автоматизаций в 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, условие будет выполняться с восхо
Оглавление

При написании автоматизаций в Home Assistant постоянно приходится искать ответы на вопросы "как это сделать?" и потом снова и снова к ним возвращаться, так как всё упомнить невозможно. Решил создать и вести некий справочник - ответы на вопросы, которыми я так или иначе задавался. Возможно, это окажется полезным ещё кому-то, кроме меня. Часть ответов описана в официальной документации, часть найдена на форуме комьюнити.

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

Триггер завершения таймера в автоматизации

- trigger: event
event_type: timer.finished
event_data:
entity_id: timer.my_timer_name

-2
-3

Логика работы условий восхода и захода солнца

Если используется только ключ before, условие будет выполняться с полуночи до восхода/заката. Если используется только ключ after, условие будет выполняться с заката/восхода до полуночи. Если используются оба ключа before: sunrise и after: sunset, условие будет выполняться с полуночи до восхода и с заката до полуночи. Если используются оба ключа after: sunrise и before: sunset, условие будет выполняться с восхода до заката.

-4

Получение случайного значения из диапазона или элемента из списка

{{ range(-20,85) | random }}
{{ range(255) | random }}
{{ (range(1000) | random) / 1000 }}
{{ ['налево','направо','прямо'] | random }}

-5

Вывод элементов списка в случайном порядке без повторов

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

-6

Получить длину строки

{{ "строка"|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,..

-7

Чтобы получить регулярный интервал, не кратный минутам часа, нужно использовать шаблонный триггер, где 660 = 60 секунд * 11 минут:
{{ now() | as_timestamp | int %660 < 60 }}

-8

Этот интервал будет кратен началу UNIX-времени (1 января 1970 года).

Уменьшить межстрочный интервал в entities card

В текстовом редакторе карточки дописать в конец:

card_mod:
style: |
#states * {
margin: -10px 0px !important
} h1 {
font-size: 100%;
font-weight: bold;
font-family: Tahoma
}

Здесь же меняется стиль шрифта заголовка карточки.

-9

Отобразить в entities card результат шаблона без создания сенсора

В HACS компонент template-entity-row:

-10

Уменьшить расстояние между секциями на панелях в режиме "Разделы" ("Sections")

В configuration.yaml добавить:

frontend:
themes:
my_theme:
ha-view-sections-column-gap: 7px

-11

Перезагрузить HA. В настройках пользователя выбрать эту тему:

-12

Табличное отображение данных в карточке на панели

Самый простой способ - воспользоваться карточкой Markdown:

-13

Эта карточка частично поддерживает разметку HTML, и таблицу можно просто создать соответствующими тегами в текстовом режиме редактирования карточки. Данные с сенсоров выводятся с помощью шаблонов:

-14

Получение текста уведомления из триггера календаря

{{ trigger.calendar_event.summary }}
Время срабатывания события календаря в читабельном формате:
{{ (trigger.calendar_event.start | as_datetime).strftime('%H:%M') }}.

-15

Изменение числа трассировок в автоматизации

В тексте автоматизации добавить в конце:

trace:
stored_traces: 20

-16