Last active
August 23, 2024 06:53
-
-
Save DivanX10/9f7bb76cd08516553b8a92dea278afd6 to your computer and use it in GitHub Desktop.
Список покупок. Home Assistant + Яндекс
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Создаем 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
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Как я понял, после обновлений, этот метод не рабочий? Будет обновлена информация? Хочется настроить синхронизацию списка покупок.