Сейчас будет немного домашнего занудства и перфекционизма. Мне всегда нравилось в фантастических фильмах момент, где человек просыпается или приходит домой и ему ИИ ассистент вываливает список его задач. Я подумал, а почему и не провернуть все на базе Home Assistant. Получилось даже лучше чем ожидал, ведь у меня есть вся мощность home assistant и гибкость автоматизаций.
Мой телеграм канал, там все быстрее обновляется телеграм.
не забудем про Поддержать автора
Попытки организации (планировщик курильщика)
Организовать рутинные задачи у меня были и раньше. Я пробовал вести их в своем любимом notion. Создал календарь с датами, шаблоны с делами и заполнял на каждый месяц … сейчас проверил, меня хватило не несколько месяцев. Конечно notion мощный инструмент, думаю может многое, но я не стал глубоко копать ради такой простой задачи.
Вторым на ум приходит todoist и ему подобные. Вот тут уже удобно создавать задачи, можно сразу записывать периодичность, вывести виджет на один из экранов. Если задача не выполнена, тогда онаН переносится на следующий день выполнения. Подвинул задачу и вся периодичность тоже подвинулась - кайф. Только все дела нужно заносить вручную, а сами уведомления только в платной версии. Как планировщик вещь отличная, но в интеграции с Home Assistant будет ещё лучше.
Попадались мне другие интеграции для Home Assistant, вроде https://github.com/bmcclure/ha-chore-helper создает вспомогательные сущности и заносит в календарь … нормально настроить у меня не удалось. Да и не дает синхронизации с телефоном. Значит не берм.
Задачи которые должен решать здоровый планировщик.
Когда я искал способ объединить все инструменты для управления делами, передо мной встал ряд насущных задач и требований:
- Единая платформа для создания и управления задачами на телефоне и в умном доме.
Мне нужна возможность создавать задачу с мобильного устройства, отмечать её выполненной, видеть её статус в Home Assistant и синхронизировать с основным списком дел в Todoist. - Лёгкость и гибкость повторяющихся задач.
Примером может служить смена насадки для зубной щётки каждые два месяца или использование нового средства для посудомоечной машины раз в три месяца. Эти задачи должны задаваться легко, без необходимости вручную пересоздавать календарь на месяц – хотелось, чтобы система сама напоминала о повторении по заданному циклу. Один раз занес и забыл, а система сама напомнит в нужное время. - Возможность добавлять задачу «на лету» на конкретную дату.
Чтобы не тратить время на долгую настройку, система должна позволять быстро зафиксировать срочную задачу с телефона и уже потом напомнить через телеграм. Закончилась соль в системе умягчения - быстро ставим задачу и выбираем день когда заменить. - Автоматическое формирование ежедневного списка задач.
Я хотел получать каждое утро в Telegram полный список дел – на сегодня, завтра, просроченные или те, у которых ещё нет заданной даты. Это позволило бы не забыть сделать дело, если все же я забыл, тогда оно попадает в список просроченных дел с датой когда должно было быть сделано. - Автоматизация рутинных процессов умным домом.
Мне хотелось, чтобы мой умный дом сам следил за определёнными показателями – например, оповещал о необходимости полить цветы или напоминал об оплате счетов за электричество, автоматически добавляя такие задачи в список дел. А что, сенсоры есть на этот случай - так пусть тригерят события по добавлению в календарь.
Мне нужно было, чтобы система работала без постоянного моего ручного вмешательства, и чтобы все задачи создавались, обновлялись и удалялись автоматически в соответствии с изменениями в моем умном доме. Некоторые задачи конечно придется вести вручную, но остальные можно сбросить на автоматизации Home Assistant.
Идея взаимодействия.
В очередной раз пишу, что Home Assistant это офигенный комбайн, который перемалывает кучу информации от датчиков и разных интеграций.
- Сбор данных и обработка событий
Home Assistant получает данные от различных датчиков и источников – это могут быть финансовые показатели (например, баланс для оплаты счёта), данные о состоянии бытовых приборов или расписание, а также напоминания о регулярном уходе (например, напоминание полить цветы или заменить батарейки). На основе полученных данных и заданных условий срабатывают автоматизации. Например, если баланс становится отрицательным, система решает, что пора оплатить счёт; если пришло время полить цветы или если уровень заряда жатчика движения падает ниже нужного, Home Assistant формирует соответствующие задачи. - Создание и обновление задач в Todoist
Автоматизации в Home Assistant используют API для взаимодействия с Todoist. Если обнаружена ситуация, требующая внимания (например, отрицательный баланс, необходимость полить цветы или заменить батарейки), автоматически создаётся задача в Home Assistant с подробным описанием (например, сумма к оплате, дата или примечание для регулярной работы) и синхронизируется с Todoist. При изменении условий задачи автоматически обновляются – например, если оплаченный счёт делает баланс положительным, то задача закрывается, а если не оплатил и долг растет - описание задачи дополняется. - Уведомления и интерактивное управление через Telegram
Параллельно Home Assistant отправляет уведомления через Telegram-бота. Приходят сообщения с информацией о созданных или обновлённых задачах – будь то оплата счёта, напоминание полить цветы или заменить батарейки. Список дел можно запросить из Telegram, автоматизация обновит данные по сенсорам и вышлет актуальный список задач. - Автоматическое закрытие задач
Некоторые задачи отмечаются как выполнённые автоматически, если условия изменяются. Например, после оплаты счёта, если баланс становится положительным, задача автоматически удаляется или помечается как завершённая. Аналогичным образом, если через датчики подтверждается, что цветы политы, задача по уходу может закрываться по условию. При замене батареек, если устройство получает сигнал об удовлетворительном уровне заряда, автоматически происходит обновление статуса задачи.
Таким образом, данные от датчиков поступают в Home Assistant, где срабатывают сценарии, создающие и обновляющие задачи в Todoist и в списке дел Home Assistant. Одновременно Telegram-бот информирует по текущему статусу задач при запросе. Такой подход превращает разрозненные сигналы умного дома в единый удобный планировщик домашних дел, освобождая от рутины.
Установка todoist интеграции
Никаких репозиториев вносить не нужно, сама интеграция есть уже в Настройки - Устройства и службы - Добавить интеграцию. Следуем инструкции и устанавливаем).
Нам потребуется установка телеграма на Home Assistant, подробнее в статье по начальным настройкам. В статье есть некоторые автоматизации для тренировки с кодом и обменом сообщений между ТГ и ХА:
Интерфейс и задачи todoist
Заводить и управлять задачами через ХА это ад и боль, поэтому и нужен todoist в котором и будем управлять задачами. В нем по умолчанию есть Inbox — временное хранилище, куда попадают все новые задачи, пока не распределите их по проектам. При добавлении задач с указанными датами и временем они автоматически синхронизируются с календарем Home Assistant, что позволяет интегрировать задачи с автоматизацией.
Например, можно создать проект «Домашние дела» для задач вроде «Оплатить счёт», «Полить цветы» или «Сменить батарейки». Эти задачи, добавленные через Home Assistant, сразу появляются в Todoist, и их можно легко редактировать или закрывать. Изменения, внесённые в Todoist, также обновляют статус задач в Home Assistant.
Если уже есть список «Работа», который вы используете для профессиональных задач (но не для автоматизаций дома), можно добавить дополнительные проекты, например «Личные» или «Покупки», чтобы структурировать задачи по категориям.
Новые задачи создаются напрямую через интерфейс Todoist — если задача сначала попадает в Inbox, её всегда можно переместить в соответствующий проект. Благодаря API-интеграции все изменения (создание, редактирование или закрытие задач) автоматически синхронизируются с Home Assistant, обеспечивая актуальный и единый список дел для автоматизированного и ручного управления.
Одной из самых классных возможностей Todoist является ввод задач с помощью естественного языка. Достаточно написать фразу, и система автоматически распознает дату, время и режим повторения. Например, написав «купить хлеб завтра», Todoist установит задачу с дедлайном на следующий день.
Еще одна удобная функция — создание повторяющихся задач. Команда «позвонить маме каждый понедельник» автоматически настроит задачу на выполнение каждую неделю в понедельник, избавляя от необходимости вручную задавать повторения. Ограничить количество повторений можно добавив до какого года/месяца/дня.
Также можно добавлять задачи с указанием конкретного времени. При вводе фразы «сделать уборку сегодня в 18:00» система оформит задачу с точной привязкой ко времени. Вот только воспользоваться временем такой задачи в качестве триггера не получится. Для долгосрочных задач предусмотрена возможность установки дедлайнов. Фраза типа «сдать отчёт до 15 декабря 2025» создаст задачу с конечным сроком, позволяя лучше расставлять приоритеты для крупных проектов. Как я понял, эта функция относится к платной части Дедлайны, а оплатить пока “сложно”.
Умные автоматизации
****** Все автоматизации дублирую на гите, так как дзен не может нормально отображаться код. Ссылка на гит
Интеграция To‑do list в Home Assistant предоставляет возможность организации и управления списками дел. Каждый список представлен отдельной сущностью (например, todo.vacation_prep для подготовки к отпуску или todo.personal_tasks для личных дел), а состояние сущности отражает количество невыполнённых задач.
Доступные действия с задачами включают получение, добавление, обновление и удаление пунктов.
Получение задач (todo.get_items)
В этом действии через параметр target.entity_id указывается нужная сущность, а в data можно задать статус для фильтрации, например, "needs_action" для невыполненных задач. Статусы используются следующие: "needs_action" — задача требует выполнения, "completed" — задача выполнена. Ссылка на гит
Добавление задачи (todo.add_item)
При добавлении новой задачи указывают её имя через параметр item, дедлайн можно задать с помощью due_date (только дата) или due_datetime (дата и точное время), а также добавить подробное описание через description. Интерфейс позволяет вставлять дополнительные данные, например, метки (напишите их в описании, если отдельное поле не предусмотрено). Ссылка на гит
Обновление задачи (todo.update_item)
Позволяет изменить параметры уже существующей задачи. Через item указывают задачу, которую нужно обновить, посредством параметра rename можно изменить название, а с помощью status — задать статус, например, перевести задачу в статус "completed" после выполнения. Ссылка на гит
Если переименовывать
Удаление задачи (todo.remove_item)
Для удаления задачи указывают её имя в параметре item (при наличии нескольких задач с одинаковым именем можно использовать UID). Ссылка на гит
Удаление выполненных задач (todo.remove_completed_items)
Этот оператор очищает список, удаляя все задачи со статусом "completed". Ссылка на гит
При добавлении дедлайнов с помощью due_date или due_datetime Home Assistant учитывает формат даты (YYYY-MM-DD) или дату с временем (YYYY-MM-DD HH:MM:SS) для точного планирования выполнения задач. Метки, например «срочно» или «важно», можно добавить в описание, что помогает классифицировать задачи в интерфейсе Todoist.
Таким образом, используя перечисленные операторы с их параметрами (обязательно указывая нужную сущность через target.entity_id), можно гибко управлять списками дел, назначать дедлайны, менять статусы и добавлять дополнительные данные, что позволяет интегрировать эти задачи в автоматизации и дашборды Home Assistant.
Добавление дел через автоматизации
Добавление задачи по триггеру
Начнем с простого - добавить задачу на завтра по триггеру влажности почвы растений. Если меньше 70% добавить задачу полить завтра цветы. Ссылка на гит
Триггер:
Автоматизация срабатывает при изменении показаний датчика влажности (сущность sensor.ddzh_2_datchik_pochvy_2_soil_moisture), если значение становится ниже 70.
Действие:
Вызывается сервис todo.add_item, который добавляет новую задачу в список дел (сущность todo.domashnie_dela).
- Параметр item формируется динамически: в него включается «дружественное имя» датчика и текущее значение влажности.
- due_date рассчитывается как завтрашняя дата (с использованием шаблона now() + timedelta(days=1) и форматированием в YYYY-MM-DD).
- description содержит пояснение, что влажность ниже 70% и требуется проверить состояние растения, запланировать полив.
Отправка списка дел в телеграм
Я настроил отправку дел с утра пораньше в 8 утра. Еще можно запросить через команды из телеграма, полный код: Ссылка на гит
Тут очень длинный код - его можно взять с гита, а пояснения ниже.
Использование YAML-блока с литеральным стилем
Чтобы сохранить переносы строк в итоговом сообщении, мы используем литеральный блок YAML, который обозначается символом |. Я раньше пробовал делать через \\n, но перенос не срабатывал.
Пример: Ссылка на гит
При таком определении итоговое сообщение сохранит все переводы строк. Таким образом, каждый пункт задачи можно разместить на своей строке, и сообщение будет выглядеть красиво и читаемо.
Применение Jinja2 для динамического контента
В коде поле message — это шаблон на языке Jinja2, который обрабатывается Home Assistant перед отправкой сообщения. Мы динамически создаём переменные, отбираем задачи по категориям (на сегодня, завтра, просроченные, без срока) и затем выводим их с помощью циклов.
Что мы делаем:
Определение переменных:
Сначала мы создаём переменные для сегодняшней и завтрашней дат, а потом получаем список всех задач.
Фильтрация задач:
С помощью фильтров selectattr и rejectattr мы разделяем задачи по категориям. Это позволяет потом выводить их в нужные разделы.
Берёт список всех элементов – переменная all_items содержит задачи или записи.
Отбирает только те задачи, у которых дата выполнения равна сегодняшней – фильтры
- selectattr('due', 'ge', today.isoformat()) выбирают задачи с датой не меньше сегодняшней
- selectattr('due', 'le', today.isoformat()) – задачи с датой не больше сегодняшней
Таким образом, остаются только задачи, дата которых точно совпадает с сегодняшним днем.
Преобразует результат в список – | list.
Результат сохраняется в переменную today_tasks.
ge означает «больше или равно», а le — «меньше или равно». Эти операторы используются для сравнения значений (в данном случае даты) при фильтрации списка задач.
- Вывод списков с переносами строк:
Каждый раздел (например, «🟢 СЕГОДНЯ») выводится с заголовком, после которого идут задачи. Внутри цикла мы просто переходим на новую строку, нажав Enter в самом YAML-блоке. Не нужно вставлять \\n – переносы строк задаются тем, как вы оформляете текст.Пример вывода задач:
<b>🟢 СЕГОДНЯ ({{ today.strftime('%d.%m.%Y') }})</b>:
{%- if today_tasks %}
{%- for task in today_tasks %}
➡️ <u>{{ task.summary }}</u>{% if task.get('description') %} <i>({{ task.description }})</i>{% endif %}
{%- endfor %}
{%- else %}
➡️ <i>Нет задач</i>
{%- endif %}
Здесь после заголовка стоит пустая строка (простой перевод строки), затем идёт блок с задачами. Если задач несколько, каждое новое значение выводится со своим переводом строки – поскольку каждая строка в YAML-блоке воспринимается как отдельная строка текста.
Удаление лишних пробелов и символов
Чтобы убрать ненужные пробелы и сохранение аккуратного формата, мы используем знаки минуса в Jinja-тегах: {%- ... -%}. Это говорит шаблонизатору Jinja2 «обрезать» пробельные символы до и после тега.
Пример: Ссылка на гит
Такая запись предотвращает появление лишних пробелов или переводов строк там, где они не нужны, что делает итоговое сообщение компактным, но при этом каждое условие и блок остаётся читаемым.
Заключение
Ключевые моменты:
- YAML literal block (|): позволяет использовать настоящие переносы строк вместо вставки \\n.
- Jinja2 шаблоны: дают возможность динамически формировать сообщение, фильтровать данные и выводить их по нужным разделам.
- Управление пробелами в Jinja2: синтаксис {%- ... -%} помогает убрать лишние пробелы и получить компактное форматирование.
Надеюсь, это объяснение поможет вашим читателям понять, как можно красиво форматировать вывод в Home Assistant и Telegram. Если будут вопросы или нужен дополнительный пример – с радостью расскажу подробнее!
Добавляем список батареек на замену, после замены удаляем задачу.
Этот пример будет посложнее, так как требует отдельный блупринт для проверки статуса батареек. https://community.home-assistant.io/t/low-battery-notifications-actions/653754
В блупринте есть ручные действия (Custom Actions) который позволит нам “складываться” список батареек к замене во Вспомогательный текст. Вспомогательный текст можно создать в Устройства и сервисы - Вспомогательное. Вот наша сущность вспомогательного текста:
input_text.dannye_o_zamene_batareek
В блупринте в кастомных действиях отсылаем список. Ссылка на гит
Обновление задачи замены батареек (без флага)
Задача автоматически создается если input_text.dannye_o_zamene_batareek не пусто, обновляется если описание обновляется, а вот если input_text.dannye_o_zamene_batareek становится пустым - тогда задача удаляется. Получается что мы получаем список батареек на замену, как только заменили - задача удаляется. Если часть заменили - удаляется часть описания, остается то что нужно заменить. Ссылка на гит
Вот прям очень длинный код и надо смотреть на гите.
А вот код для добавления замены батареек на Завтра, указание даты позволяет видеть сразу в виджете задачу Todoist. Не знаю почему, но todoist не показывает просто так задачи без даты если выбрать список Предстоящие (как самое удобное). Если выбрать список Домашние дела, тогда покажет в конце списка задачи без даты. Проще если замена батареек будет назначена на завтра, и будет висеть в просроченных если не заменили.
Ранее мы высылали список дел в телеграм, теперь добавим что бы проверял статус батареек перед отправкой. Для этого “нажимаем” на кнопку input_button.proverit_batareiku и делаем таймер на пару секунд что бы задача успела синхронизироваться. Ссылка на гит
Подход тот же, но для оплаты электричества.
У меня поселок сам снимает показания и отправляет в электросбыт где у меня есть лицевой счет. Через интеграцию https://github.com/alryaz/hass-lkcomu-interrao можно забрать данные о “задолжности” и информацию по предыдущей квитанции. Изменение этих сенсоров является триггером, который запускает действия по добавлению, обновлению и удалению задачи в зависимости от условий.
Вот сенсоры, а в атрибутах можно посмотреть какие передаются данные:
Сам код автоматизации : Ссылка на гит
Вот краткое объяснение работы этой автоматизации:
- Запуск по изменению счета:
Автоматизация срабатывает всякий раз, когда меняется значение сенсора sensor.mes_04481_548_26_account. Этот сенсор получает показания вашего счёта. - Получение текущих задач:
Сначала автоматизация запрашивает все активные задачи из календаря «Домашние дела» (сущность todo.domashnie_dela) с помощью сервиса todo.get_items и сохраняет их в переменной existing_tasks. - Создание или обновление задачи на оплату:
Если значение счёта отрицательное (то есть появляется новый счёт на оплату), автоматизация делает следующее:Если в текущих задачах нет элемента с заголовком «💡 Оплатить счет в Мособлэнерго», то создаётся новая задача с помощью todo.add_item. В описании задачи указывается сумма к оплате (взятие абсолютного значения отрицательного числа с округлением до двух знаков), а срок исполнения (ключ due_date) устанавливается на сегодняшний день.
Если задача с этим заголовком уже существует, то она обновляется через todo.update_item — изменяется описание (новая сумма к оплате) и снова устанавливается срок исполнения на сегодняшний день. - Удаление задачи при оплате счёта:
Если значение счёта становится 0 или положительным (то есть счёт оплачен), и если задача с заголовком «💡 Оплатить счет в Мособлэнерго» найдена среди активных задач, то эта задача удаляется через сервис todo.remove_item.
Таким образом, автоматизация следит за изменением показаний вашего счёта. Пока появляется новый счёт (отрицательное значение), создаётся или обновляется задача по его оплате. А как только счёт оплачен (значение становится 0 или больше), задача на оплату удаляется. Это позволяет всегда иметь актуальную задачу с информацией о сумме, которую требуется оплатить.
Вот код с более подробной информацией, добавлена инфа по предыдущему счету. Ссылка на гит
Объяснение
- Сбор активных задач:
При изменении состояния счёта (sensor.mes_04481_548_26_account) автоматизация запускается и получает список активных задач из списка дел (todo.domashnie_dela) с помощью todo.get_items. Результат сохраняется в переменной existing_tasks. - Создание задачи:
Если баланс счета меньше 0 (требуется доплатить) и задача с заголовком «💡 Оплатить счет в Мособлэнерго» отсутствует, автоматизация создаёт новую задачу (сервис todo.add_item). В описании вывoдятся:Текущий баланс,
Сумма к оплате (абсолютное значение отрицательного баланса, округленное до 2 знаков),
Данные последней квитанции (период, инвойс, итоговая сумма, оплачено) – с проверкой на наличие данных,
Данные о потреблении (если доступны, для дневного и ночного тарифов; иначе вывод «нет данных»).
Срок исполнения (due_date) устанавливается на текущую дату. - Обновление задачи:
Если баланс меньше 0, но задача уже существует, то обновляется её описание аналогичным образом с помощью todo.update_item. - Удаление задачи:
Если баланс становится 0 или положительным (т.е. счёт оплачен) и задача присутствует, она удаляется через todo.remove_item.
Зависит от сенсоров
Многое можно автоматизировать в задачи, главное что бы были подходящие сенсоры и атрибуты у этих сенсоров - то есть, будут данные тогда будут задачи.
Способ 1 Поддержать автора
Способ 2 https://donate.stream/yoomoney410013774736621
или через криптокошелёк (Только USDT) TCHekdJZFndXpDrHZGuTmqFNcqhWBTTzPr
Связаться со мной. (Консультации, проектирование и обучение)
Новый подход к электрике и дизайну помещений. Некоторые провода уже не нужно тянуть, какие-то решения можно принять после ремонта. Перенести выключатель, запустить кондиционер с телефона - возможно автоматизировать любую рутину.
Мой телеграм канал, там все быстрее обновляется телеграм.
Сайт smart4home.ru и альтернативный Умный дом на любом этапе
Соц сети: RuTube канал Удобный дом / You Tube канал Удобный дом Яндекс Дзен: Удобный дом / InGram
Платформы специалистов: Авито / Профи.ру / Яндекс Услуги https://uslugi.yandex.ru/profile/EgorSmirnov-2294380?from=telek