Решил написать небольшую заметку по номерам недели в Home Assistant. Зачем оно надо? У меня, например, настроен сенсор для индикации четных/нечетных недель, который используется в некоторых автоматизациях: по четным субботам умный дом напоминает почистить увлажнитель, а по нечетным робот-пылесос.
Но возможно вы найдете какое-то другое применение номерам недели. Вообще четность недель последний раз меня волновала только, когда я учился в универе. Наверное, можно было бы как-то настроить Home Assistant, чтобы он адаптировался под расписание занятий, но тогда у меня не было умного дома 🙂
Настройка Home Assistant
Получить номер недели, можно используя следующий шаблон:
И в принципе эту строчку уже можно использовать в автоматизациях:
automation:
- alias: "Выполнять каждый день в полночь по четным неделям"
trigger:
platform: time
at: "00:00:00"
condition:
condition: template
value_template: "{{ (now().strftime('%W') | int) % 2 == 0 }}"
...
Но чтобы не копипастить этот шаблон из раза в раз, можно создать бинарный сенсор и уже его использовать в автоматизациях.
Сенсор для индикации четных/нечетных недель
Для добавления сенсора достаточно в configuration.yaml
прописать:
template:
- binary_sensor:
- name: Even week
state: "{{ (now().strftime('%W') | int) % 2 == 0 }}"
icon: 'mdi:calendar'
И перезапустить Home Assistant. Получившийся сенсор будет on
по четным неделям и off
по нечетным.
Применение в автоматизациях
В Home Assistant недавно появилась поддержка списков дел. Собственно их я и использую для напоминания о домашних делах. Например, вот так раз в 2 недели добавляется напоминание про увлажнитель:
automation:
- id: routine_humidifier_maintenance_reminder
alias: "Humidifier maintenance reminder"
trigger:
platform: time
at: "00:00:00"
condition:
- condition: state
entity_id: binary_sensor.even_week
state: "on" # каждую четную неделю
- condition: time
weekday: ["sat"] # в субботу
action:
service: o365.new_task
target:
entity_id: sensor.dom_roland
data_template:
subject: "Почистить увлажнитель"
reminder: "{{ today_at('10:00') }}" # напомнить в 10 утра
description: "Фитиль необходимо поместить в 2.5% раствор уксуса на час."
И точно так же добавляется задача «Почистить робот-пылесос», но уже по нечетным субботам.
В качестве планировщика задач я использую Microsoft To Do, который интегрируется с Home Asssitant через O365-HomeAssistant.
Альтернативы
Похожим образом можно использовать и календарь, причем календарь дает больше гибкости.
Вместо того чтобы задавать фиксированное расписание в конфигурации триггера, можно создать повторяющееся событие в календаре и настроить запуск автоматизации при наступлении этого события:
automation:
- alias: Уведомление о календарном событии
trigger:
- platform: calendar
event: start
entity_id: calendar.local
action:
- service: persistent_notification.create
data:
message: >-
Событие: {{ trigger.calendar_event.summary }}
Начало: {{ trigger.calendar_event.start }}
Заключение
Идея этой статьи появилась благодаря Яндекс.Метрике — на сайт почему-то были переходы из поиска по запросу «номер недели в Home Assistant». Но в моем блоге ничего не было на эту тему! Теперь есть 🙂
P.S.
Если вдруг захотите повторить такую же карточку:
То вам понадобятся Mushroom Cards и вот такой YAML:
type: custom:mushroom-template-card
entity: binary_sensor.even_week
primary: "{{ 'Четная' if is_state(entity, 'on') else 'Нечетная' }}"
secondary: |-
{% set week_start = now() - timedelta(days=now().weekday()) %}
{% set week_end = week_start + timedelta(days=6) %}
{{ week_start.strftime('%d.%m') }} – {{ week_end.strftime('%d.%m') }}
icon: mdi:calendar-week
icon_color: var(--rgb-cyan)
tap_action:
action: more-info