В последних версиях Home Assistant произошли изменения, из-за которых старые конфигурации списков дел (to-do) и покупок могут не работать:
- В Home Assistant 2023.11 появился новый домен
todo
специально для списков дел. Раньше использовался доменcalendar
. - Список покупок (
shopping_list
) теперь является частьюtodo
. - Отдельные записи списка дел больше нельзя получить из атрибутов сенсора (так же как и, например, события календаря и прогноз погоды).
Поэтому если раньше у вас были шаблоны, в которых выводился список покупок, используя state_attr('sensor.shoppinglist', 'list')
, то теперь такое работать не будет.
Как теперь подставить список покупок в шаблон?
Теперь предварительно нужно вызывать службу todo.get_items
для получения всех элементов списка.
Например, если вы хотите отправить список покупок в Telegram, то можно использовать вот такую автоматизацию:
automation:
- alias: "Send shopping list to Telegram daily"
trigger:
- platform: time
at: "18:00:00"
action:
- service: todo.get_items # запрашиваем все элементы…
target:
entity_id: todo.shopping_list # …из списка покупок…
response_variable: shopping_list # …и сохраняем в переменную shopping_list
- service: notify.telegram_roland
data:
message: "Список покупок: {{ shopping_list['todo.shopping_list']['items'] | map(attribute='summary') | join(', ') }}."
Со списками дел принцип тот же, нужно только заменить todo.shopping_list
на нужный объект.
Хочу как раньше!
Можно настроить специальный сенсор, в значении которого будут перечисляться все элементы списка покупок через запятую. Для этого в configuration.yaml
достаточно добавить:
template:
- trigger:
- platform: event
event_type: shopping_list_updated
action:
- service: todo.get_items
target:
entity_id: todo.shopping_list
response_variable: shopping_list
sensor:
- name: Shopping list
unique_id: shopping_list
state: "{{ shopping_list['todo.shopping_list']['items'] | map(attribute='summary') | join(', ') }}"
После перезапуска Home Assistant появится новый сенсор:
Который можно использовать вот так:
automation:
- alias: "Send shopping list to Telegram daily"
trigger:
- platform: time
at: "18:00:00"
action:
- service: notify.telegram_roland
data:
message: "Список покупок: {{ states('sensor.shopping_list') }}."
Правда, если вам нужен такой же сенсор для списка дел, а не для списка покупок, то тут есть нюансы:
- В Home Asssitant для to-do нет события похожего на
shopping_list_updated
. То есть, не получится повесить какой-то общий триггер, который бы вызывался при любом изменении списка дел. - Можно использовать триггер по состоянию:
Но такой триггер срабатывает только при изменении количества элементов в списке и не вызывается при обновлении отдельных элементов.- platform: state entity_id: - todo.tasks
- Можно повесить триггер на событие
call_service
с доменомtodo
, но это событие вызывается до того, как to-do реально обновится.
Поэтому с учетом всех ограничений, рабочий вариант сенсора для списка дел выглядит так:
Да, вариант кривенький, но рабочий. Если вдруг найду решение получше, то обязательно сообщу.