Home Assistant список покупок, уведомление с Shopping List в телеграм

18 апреля 2021, 12:47
Добрый день. Статья о том, как получать оповещения о списке покупок в телеграм с интеграцией Shopping List. Отправлять уведомление, конечно же, можно в любой удобный для вас мессенджер (telegram, slack и т.д.) или уведомлением в приложение Home assistant на телефон, сути это не меняет.

Установка интеграции

  • Заходим в настройки Home assistant.
  • Выбираем пункт интеграции, добавить интеграцию.

  • В поиске вписываем Shopping List (или Список покупок).

  • Добавляем интеграцию, настраивать ее не нужно.

1600x_image.png?1618511225

Для удобства заполнения списка покупок, предлагаю добавить карточку в lovelace.
Находим карточку, находится она в самом конце списка. Даем название для карточки и сохраняем.

Примечание: Создать несколько разных списков невозможно,
интеграция создает один единый список, который могут редактировать все пользователи HA. Дополнительные карточки только дублируют основной список.

k01-1.jpg

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

Элементы в списке можно менять местами, а также отмечать. Отмеченные элементы можно удалять из списка.



1600x_image.png?1618513145

Сенсор покупок

Тот, кто использует интеграцию, пожалуй замечал, что в системе нет никакого объекта, связанного с этим списком. Это нам придется исправлять. Для этого нам нужно создать сенсор, состояние которого будет соответствовать пунктам нашего списка. Добавляем новый сенсор в configuration.yaml или во внешний файл sensor.yaml (зависит от вашей конфигурации).

  - platform: command_line
    name: shopping_list
    command: "jq '.[] | select(.complete==false) | .name' .shopping_list.json "

  • Сохраняем, проверяем конфигурацию на ошибки и перезагружаем сервер Home assistant.
  • Заходим в панель разработчика, ищем наш созданный сенсор.
  • Проверяем состояние объекта, он должен совпадать с ранее заполненным нами списком.
Обновления сенсора происходит раз в минуту.

1600x_image.png?1618513146

Автоматизация

Список готов для добавления в автоматизации. Остается определить, в каком случае мы будем его получать. Я выбрал для этого стандартный функционал отслеживания нахождения пользователей в определенной зоне. Для этого заходим в Настройки -> Зоны, добавляем новую зону, соответствующую магазину или супермаркету, который чаще всего используется для закупок.

1600x_image.png?1618514478

Выбираем точку на карте, задаем радиус зоны и назначаем название. Для базовой автоматизации этого будет достаточно. Триггером буду использовать именно момент, когда я буду заходить в созданную зону, уведомление буду отправлять с помощью бота в телеграм.

- alias: buy_list_new
  trigger:
  - platform: zone
    zone: zone.supermarket
    entity_id: person.admin
    event: enter
  action:
   - service: telegram_bot.send_message
     data:
      target: 'xxxxxxxxx'
      parse_mode: html
      message:  >
       {{states('sensor.shopping_list')}}

В результате, получаем оповещения в таком виде:

1600x_image.png?1618515281

Все отлично, все работает! Как дополнение надо добавить условие, которое будет проверять, есть ли что-то в нашем списке, чтобы не получать пустых сообщений при каждом посещении магазина. Для этого можно использовать определение количества элементов в списке. Чтобы это было возможно, добавляем еще один сенсор:

  - platform: command_line
    name: shopping_list_number
    command: "jq length .shopping_list.json"
Проверяем, есть ли в списке как минимум 1 пункт:
  condition:
  - condition: template
    value_template: "{{states('sensor.shopping_list_number') | int >= 1 }}"
Автоматизация полностью:
- alias: buy_list_new
  trigger:
  - platform: zone
    zone: zone.supermarket
    entity_id: person.admin
    event: enter
  condition:
  - condition: template
    value_template: "{{states('sensor.shopping_list_number') | int >= 1 }}"
  action:
   - service: telegram_bot.send_message
     data:
      target: 'xxxxxxxxx'
      parse_mode: html
      message:  >
       {{states('sensor.shopping_list')}}

Так же, как условие, можем использовать длину символов в нашем списке:

  condition:
  - condition: template
    value_template: "{{ states('sensor.shopping_list') | length >= 3 }}"

Дальнейшее улучшение автоматизации уже зависит от потребностей и фантазии.


Все новости мира умных домов - t.me/SprutAI_News или Instagram
Остались вопросы? Мы в Telegram - @SprutAI

Хочешь умный дом но нет времени разбираться?
Посмотри примеры работ и выбери себе интегратора.
  1. (adsky)
    (adsky) 3 месяца назад

    jr -r

    чтобы не было " вокруг элементов списка

    • Владимир Федоришин (Ua_aid)
      Да ,спасибо , можно и без скобок:
      - platform: command_line
        name: shopping_list
        command: "jq -r '.[] | select(.complete==false) | .name' .shopping_list.json"

  2. (adsky)
    (adsky) 3 месяца назад

    Можно еще добавить уведомление, о том что список покупок поменялся

    automation:

      - id: '1618760804002'

      alias: 'Update shopping_list sensor and notify'

      mode: single

      trigger:

        platform: event

        event_type: shopping_list_updated

      action:

        - service: homeassistant.update_entity

          entity_id: sensor.shopping_list

        - delay: 00:00:01

        - service: telegram_bot.send_message

          data:

            target: 'xxxxxxxxx'

            parse_mode: html

            message: >

              Список покупок обновлён, осталось купить:{{"\n"-}}{{states('sensor.shopping_list')}}

  3. (jo_b1ack)
    (jo_b1ack) 3 месяца назад
    отличная статья, как раз думал почему в "изкоробочной" версии нельзя дернуть список в автоматизации.

  4. (007)
    (007) 3 месяца назад

    А можно чтобы открыл список покупок в приложении Home assistant

    alias: Open shopping list 

    description: '' "

    trigger: 

      - platform: zone

        entity_id: person.admin 

       zone: zone.supermarket 

       event: enter 

    condition: 

    - condition: template 

      value_template: '{{ states(''sensor.shopping_list'') | length >= 3 }}' 

    action: 

    - service: notify.notify 

      data: 

         message: Нажмите чтобы открыть список покупок 

        data: 

           clickAction: /shopping-list 

          url: /shopping-list 

    mode: single

  5. (t3sc0)
    (t3sc0) отредактировано 3 месяца назад

    я правильно понимаю, что сценарий использования такой?
    - кто-то добавил вручную в список покупок продукты
    - я проходил мимо магазина, сработала автоматизация, мне пришло сообщение со списком

    то есть если я пошел другой дорогой или зона магазина находится в стороне от обычного маршрута, то морепродуктов на ужин не будет? обложить все подходы к дому триггерами? тогда каждый из них сработает, пока я дойду до магазина. сделать одну большую зону вокруг дома - не будет оповещений, пока не выйду из нее.
    ну и главный вопрос:
    уведомление приходит в любом случае на телефон. список покупок вносится вручную так же через телефон. почему нельзя на этих нескольких телефонах просто использовать то самое приложение со списком покупок?

    • Владимир Федоришин (Ua_aid)

      Сценарий использования подбирает каждый по его нуждам. Просто поделился идеей как это можно реализовать.
      У меня статическая жизнь, всегда одни и те же маршруты и магазины :-( Опять же можете предложить свой вариант триггера.
      Верно уведомление приходят на телефон,  список вносится вручную но не только через телефон, приложение одно и тоже Home Assistant

    • Tom Mass (tommass)
      Tom Mass (tommass) 2 месяца назад

      можно завести несколько списков на разные геолокации:

      - продукты (я обычно заезжаю в один и  тот же супермаркет)

      - хоз рынок

      - ветеринарка


      и тд и тп

  6. (maikl)
    (maikl) 3 месяца назад

    Вопрос от человека далекого от программирования. Вот эти строки -  {{"\n"-}}{{states('sensor.shopping_list')}}
    это какой язык? какой синтаксис и команды? как научится?  

  7. (frech)
    (frech) 3 месяца назад

    А есть ли возможность через телеграмм ввести новую покупку?

    • Владимир Федоришин (Ua_aid)

      Да

      - alias: shop_list_add

        trigger:

          platform: event

          event_type: telegram_text

        action

           service: shopping_list.add_item

           data:

           name: '{{ trigger.event.data.text }}'


  8. (drhellp)
    (drhellp) 4 дня назад

    Попробовал в

    data:

    title: "Список покупок:"

    добавить, перестает работать проверка condition:

К списку статей

Похожие статьи

17 декабря 2019, 17:49
Универсальный привод для автоматического удаленного открытия окон с простой интеграцией в умные дома.
15 ноября 2018, 09:42
Способы автоматизации механических ворот
20 октября 2018, 22:57
Теоретические основы протокола MQTT и описание того, как он работает и для чего используется
24 августа 2018, 12:18
Пошаговая установка HomeAssistant
15 ноября 2018, 13:11
Xiaomi Mi Remote 360 добавляем Apple HomeKit
28 августа 2018, 09:48
От голого Raspbian до веб-интерфейса homebridge за четыре команды в терминале.
27 августа 2018, 10:14
Интегрируем ХА в HomeKit
03 октября 2018, 22:03
Как собрать и настроить Hyperion Ambilight - адаптивную подсветку ТВ.
29 октября 2019, 07:59
Умный домофон на базе nodeMCU с прошивкой ESPHome.
01 ноября 2018, 09:27
Настройка Deconz USB стика ConBee от Dresden Elektronik в Hass.io и некоторые особенности эксплуатации