Forked from DivanX10/Список покупок. Home Assistant + Яндекс
Last active
November 3, 2023 16:53
-
-
Save vvv279/b9265e0425b85944d2dd19385020855f 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
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__)) | |
4) Создаем в папке packages | |
# /.homeassistant/includes/packages/shopping/sensor_shopping_list.yaml | |
# https://sprut.ai/client/article/4232 | |
# https://gist.github.com/DivanX10/9f7bb76cd08516553b8a92dea278afd6 | |
# https://gist.github.com/AlexxIT/6a3a1a5ba4c4ebe1fabbec639542d446 | |
# https://www.youtube.com/watch?v=DbYjGb4c-Oo | |
################################################################################ | |
# YandexStation shopping | |
################################################################################ | |
shopping_list_sensor: | |
sensor: | |
- platform: command_line # https://www.home-assistant.io/integrations/sensor.command_line/ | |
name: "Список покупок - сенсор" | |
command: python3 /home/homeassistant/.homeassistant/python_scripts/shopping_list.py # Указываем свой путь к файлу shopping_list.py | |
json_attributes: | |
- not_complete | |
- content | |
value_template: '{{ value_json.state }}' | |
scan_interval: 1 | |
# ------------ | |
yandex_station: | |
intents: | |
обнови список: | |
обнови список продуктов: | |
отправь на телефон: | |
отправь на телеграм: | |
да: | |
нет: | |
хватит: | |
отбой: | |
список продуктов: | |
что там в списке: | |
что там в корзине: | |
что там: | |
script: | |
# ------------ | |
shopping_list_yandex_dialog: | |
alias: Список покупок Алиса. Диалог | |
sequence: | |
- service: media_player.play_media | |
entity_id: !secret media_player_yandex_station | |
data: | |
media_content_id: >- | |
{{ ['Список покупок обновлен, что будем делать?','Шеф. Отправить список | |
к вам на телефон?','Хозяин. Отправить список покупок на | |
телефон?']|random }} | |
media_content_type: dialog | |
mode: single | |
icon: mdi:cart-variant | |
# shopping_list_yandex_dialog: | |
# 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 | |
# ------------ | |
update_shopping_list_yandex: | |
alias: Яндек Обновить список покупок | |
sequence: | |
- service: media_player.play_media | |
entity_id: !secret media_player_yandex_station | |
data: | |
media_content_id: update | |
media_content_type: shopping_list | |
icon: mdi:cart-arrow-down | |
# update_shopping_list_yandex: | |
# alias: Яндек Обновить список покупок | |
# sequence: | |
# - service: media_player.play_media | |
# data: | |
# media_content_id: update | |
# media_content_type: shopping_list | |
# target: | |
# entity_id: '{{ states.input_text.active_station.state }}' # переменная, последняя активная колонка | |
# mode: single | |
# icon: mdi:cart-arrow-down | |
# ------------ | |
input_boolean: | |
shopping_list: | |
name: Список покупок | |
automation: | |
# ------------ | |
- alias: Список покупок Алиса. Диалог | |
description: >- | |
Когда просим Алиса обновить список покупок, то срабоатет автоматизацию и | |
запустится скрипт обновления списка | |
trigger: | |
- platform: event | |
event_type: yandex_intent | |
event_data: {} | |
- platform: state | |
entity_id: !secret media_player_yandex_station | |
# 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: !secret media_player_yandex_station #'{{ 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: '*Список покупок:*' | |
- service: notify.telegram_id_1 | |
data: | |
message: '{{ states.sensor.spisok_pokupok_sensor.attributes.content }}' | |
title: '*Список покупок:*' | |
- service: notify.telegram_id_3 | |
data: | |
message: '{{ states.sensor.spisok_pokupok_sensor.attributes.content }}' | |
title: '*Список покупок:*' | |
mode: single | |
# ------------ | |
- alias: Поляна | |
description: '' | |
trigger: | |
- platform: zone | |
entity_id: device_tracker.sm_g930f | |
zone: zone.poliana | |
event: enter | |
condition: | |
- condition: state | |
entity_id: sensor.spisok_pokupok_sensor | |
state: Список полон | |
action: | |
- service: notify.telegram_id_1 | |
data: | |
message: '{{ states.sensor.spisok_pokupok_sensor.attributes.content }}' | |
title: '*Список покупок:*' | |
mode: single | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment