-
-
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
, тогда ускорите время работы сенсора или ждите минуту. Сперва должен отработать сам сенсор, чтобы в сенсоре "Список покупок" были товары, только после этого можно делать обновление через Алису и все будет работать исправноЯ не пользуюсь списком покупок или пользуюсь очень редко, в основном для проверки, когда меня спрашивают про "Список покупок". Мне эта интеграция стала не нужной. Я заказываю продукты онлайн. Когда надо что-то купить, я добавляю в корзину и как соберу что нужно, оформляю заказ.
Для того, чтобы понять как это должно работать, требуется время, терпение и желание во всем разобраться, только так вы сможете решить свою задачу.