Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save vvv279/b9265e0425b85944d2dd19385020855f to your computer and use it in GitHub Desktop.
Save vvv279/b9265e0425b85944d2dd19385020855f to your computer and use it in GitHub Desktop.
Список покупок. Home Assistant + Яндекс
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