-
-
Save DivanX10/9f7bb76cd08516553b8a92dea278afd6 to your computer and use it in GitHub Desktop.
| Создаем python файлик shopping_list.py | |
| 1) Создаем папку python_scripts в config | |
| 2) Создаем текстовый файлик с именем shopping_list.txt и переименовываем расширение с txt на py. Должно получиться shopping_list.py | |
| 3) Вставляем этот код, который будет считывать данные с файлика .shopping_list.json | |
| #!/usr/local/bin/python | |
| # coding: utf8 | |
| import json | |
| with open('/config/.shopping_list.json') as data_file: | |
| shoppingListData = json.load(data_file) | |
| class shoppingList: | |
| content = u"" | |
| not_complete = 0 | |
| state = u"" | |
| myList = shoppingList() | |
| myList.not_complete = 0 | |
| myList.state = "" | |
| myList.content = "" | |
| for entry in shoppingListData: | |
| if not entry['complete']: | |
| myList.content += u"- %s\n" % entry['name'] | |
| myList.not_complete += 1 | |
| if myList.not_complete == 0: | |
| myList.state = u"Список пуст" | |
| else: | |
| myList.state = u"Список полон" | |
| print(json.dumps(myList.__dict__)) | |
| ####################################### | |
| Создаем сенсор Список покупок - сенсор. sensor_shopping_list.yaml | |
| 1) Создаем текстовый файлик с именем sensor_shopping_list.txt и переименовываем расширение с txt на yaml. Должно получиться sensor_shopping_list.yaml | |
| 2) Вставляем этот код | |
| sensor: | |
| - platform: command_line | |
| name: "Список покупок - сенсор" | |
| command: python3 /config/python_scripts/shopping_list.py | |
| json_attributes: | |
| - not_complete | |
| - content | |
| value_template: '{{ value_json.state }}' | |
| scan_interval: 1 | |
| ####################################### | |
| Создаем скрипт "Список покупок: Алиса. Диалог" | |
| Внимание!!! {{ states.input_text.active_station.state }} - это переменная, последняя активная колонка. Читаем здесь https://gist.github.com/AlexxIT/6a3a1a5ba4c4ebe1fabbec639542d446 | |
| alias: 'Список покупок: Алиса. Диалог' | |
| sequence: | |
| - service: media_player.play_media | |
| target: | |
| entity_id: '{{ states.input_text.active_station.state }}' # переменная, последняя активная колонка | |
| data: | |
| media_content_id: >- | |
| {{ ['Список покупок обновлен, что будем делать?','Шеф. Отправить список | |
| к вам на телефон?','Хозяин. Отправить список покупок на | |
| телефон?']|random }} | |
| media_content_type: dialog | |
| mode: single | |
| icon: mdi:cart-variant | |
| ####################################### | |
| Перед тем как скопируете код для автоматизации, сперва нужно создать вспомогательный элемент преключатель "список покупок" - input_boolean.shopping_list | |
| Внимание в коде указываются эти объекты и эти объекты нужно заменить на свои яндекс станции, сколько яндекс станции, столько и указывайте | |
| media_player.yandex_station_000000000000000000000000, | |
| media_player.yandex_station_111111111111111111111111, | |
| media_player.yandex_station_222222222222222222222222 | |
| alias: 'Список покупок: Алиса. Диалог.' | |
| description: >- | |
| Когда просим Алиса обновить список покупок, то срабоатет автоматизацию и | |
| запустится скрипт обновления списка | |
| trigger: | |
| - platform: event | |
| event_type: yandex_intent | |
| event_data: {} | |
| - platform: state | |
| entity_id: >- | |
| media_player.yandex_station_000000000000000000000000, | |
| media_player.yandex_station_111111111111111111111111, | |
| media_player.yandex_station_222222222222222222222222 | |
| to: IDLE | |
| id: yandex station idle | |
| attribute: alice_state | |
| from: LISTENING | |
| condition: [] | |
| action: | |
| - choose: | |
| - conditions: | |
| - condition: template | |
| value_template: >- | |
| {{ trigger.event.data.text in ["список продуктов", "что там в | |
| списке","что там в корзине"] }} | |
| sequence: | |
| - service: input_boolean.turn_on | |
| target: | |
| entity_id: input_boolean.shopping_list | |
| - service: script.update_shopping_list_yandex | |
| - conditions: | |
| - condition: state | |
| entity_id: sensor.spisok_pokupok_sensor | |
| state: Список полон | |
| - condition: state | |
| entity_id: input_boolean.shopping_list | |
| state: 'on' | |
| - condition: template | |
| value_template: '{{ trigger.event.data.text in ["хватит", "отбой"] }}' | |
| sequence: | |
| - service: input_boolean.turn_off | |
| target: | |
| entity_id: input_boolean.shopping_list | |
| - delay: | |
| hours: 0 | |
| minutes: 0 | |
| seconds: 3 | |
| milliseconds: 0 | |
| - service: script.shopping_list_yandex_dialog | |
| - conditions: | |
| - condition: template | |
| value_template: >- | |
| {{ trigger.event.data.text in ["обнови список", "обнови список | |
| продуктов"] }} | |
| sequence: | |
| - service: script.update_shopping_list_yandex | |
| - conditions: | |
| - condition: trigger | |
| id: yandex station idle | |
| - condition: state | |
| entity_id: input_boolean.shopping_list | |
| state: 'on' | |
| - condition: state | |
| entity_id: sensor.spisok_pokupok_sensor | |
| state: Список пуст | |
| sequence: | |
| - service: input_boolean.turn_off | |
| target: | |
| entity_id: input_boolean.shopping_list | |
| - conditions: | |
| - condition: trigger | |
| id: yandex station idle | |
| - condition: state | |
| entity_id: sensor.spisok_pokupok_sensor | |
| state: Список полон | |
| - condition: state | |
| entity_id: input_boolean.shopping_list | |
| state: 'on' | |
| sequence: | |
| - service: input_boolean.turn_off | |
| target: | |
| entity_id: input_boolean.shopping_list | |
| - delay: | |
| hours: 0 | |
| minutes: 0 | |
| seconds: 3 | |
| milliseconds: 0 | |
| - service: script.shopping_list_yandex_dialog | |
| default: [] | |
| mode: single | |
| ####################################### | |
| Автоматизация для отправки списка в телеграмм | |
| alias: 'Список покупок: Алиса. Диалог. Отправить список в телеграмм' | |
| description: >- | |
| Когда просим Алиса обновить список покупок, то срабоатет автоматизацию и | |
| запустится скрипт обновления списка | |
| trigger: | |
| - platform: event | |
| event_type: yandex_intent | |
| event_data: {} | |
| condition: [] | |
| action: | |
| - choose: | |
| - conditions: | |
| - condition: or | |
| conditions: | |
| - condition: template | |
| value_template: >- | |
| {{ trigger.event.data.text in ["отправь на телефон", "отправь | |
| в телеграм","да"] }} | |
| sequence: | |
| - service: tts.yandex_station_say | |
| data: | |
| entity_id: '{{ states.input_text.active_station.state }}' | |
| message: >- | |
| {{ ['Готово. Отправила к вам на телефон список продуктов ', 'Как | |
| скажешь хозяин. Список продуктов отправлен в телеграм', 'Есть | |
| сэр. Список продуктов отправлен в телеграм', 'Не вопрос. | |
| Отправила к вам на телефон список продуктов']|random }} | |
| - delay: | |
| hours: 0 | |
| minutes: 0 | |
| seconds: 3 | |
| milliseconds: 0 | |
| - service: notify.notify | |
| data: | |
| message: '{{ states.sensor.spisok_pokupok_sensor.attributes.content }}' | |
| title: '*Список покупок:*' | |
| mode: single |
Как я понял, после обновлений, этот метод не рабочий? Будет обновлена информация? Хочется настроить синхронизацию списка покупок.
Как я понял, после обновлений, этот метод не рабочий? Будет обновлена информация? Хочется настроить синхронизацию списка покупок.
Прежде чем вам дать ответ, я проверил как у меня работает список покупок. Работает исправно. Я сообщил Алисе перечень продуктов, далее попросил отправить список продуктов мне на телефон и в телеграм я получил список продуктов
Возможно вы не обновили сенсор по новому как указано в документации Home Assistant.
Документация https://www.home-assistant.io/integrations/command_line/
Документация https://www.home-assistant.io/integrations/template/
Вот так выглядит новый образец кода shopping_list_sensor.yaml
command_line:
#Список покупок - сенсор
#Объект: sensor.shopping_list_sensor
- sensor:
name: 'Список покупок - сенсор'
unique_id: shopping_list_sensor
command: 'python3 /config/python_scripts/send_shoppinglist.py'
json_attributes:
- not_complete
- content
value_template: '{{ value_json.state }}'
scan_interval: 60
#Список покупок. Кол-во не завершенных
#Объект: sensor.shopping_list_not_complete
template:
- sensor:
name: 'Список покупок. Кол-во не завершенных'
unique_id: shopping_list_not_complete
state: '{{ state_attr("sensor.shopping_list_sensor","not_complete") }}'
icon: mdi:cart-variant


Вероятно у вас не настроен packages. Рекомендую почитать документацию про packages, а еще можете почитать статью от AlexxIT по настройке удобной конфигурации или почитайте эту статью про Home Assistant Пакеты или Packages
У меня в configuration.yaml прописано так
Далее я создал папку includes внутри сетевой папки config и подпапку packages, куда я складываю другие файлы с различными конфигурациями
Есть навык "Список покупок", а есть интеграция "Список покупок" и оба работают через Алису, но это совершенно разные платформы. Если запускаете навык "Список покупок", то не будет работать "Список покупок" через Home Assistant
Сенсор "Список покупок" обновляется раз в минуту - строка
scan_interval: 60. Можете сократить период обновления сенсора до 10 секунд и указатьscan_interval: 10, тогда ускорите время работы сенсора или ждите минуту. Сперва должен отработать сам сенсор, чтобы в сенсоре "Список покупок" были товары, только после этого можно делать обновление через Алису и все будет работать исправноЯ не пользуюсь списком покупок или пользуюсь очень редко, в основном для проверки, когда меня спрашивают про "Список покупок". Мне эта интеграция стала не нужной. Я заказываю продукты онлайн. Когда надо что-то купить, я добавляю в корзину и как соберу что нужно, оформляю заказ.
Для того, чтобы понять как это должно работать, требуется время, терпение и желание во всем разобраться, только так вы сможете решить свою задачу.