Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save DivanX10/9f7bb76cd08516553b8a92dea278afd6 to your computer and use it in GitHub Desktop.
Save DivanX10/9f7bb76cd08516553b8a92dea278afd6 to your computer and use it in GitHub Desktop.
Список покупок. Home Assistant + Яндекс
Создаем 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
@DivanX10
Copy link
Author

Как я понял, после обновлений, этот метод не рабочий? Будет обновлена информация? Хочется настроить синхронизацию списка покупок.

Прежде чем вам дать ответ, я проверил как у меня работает список покупок. Работает исправно. Я сообщил Алисе перечень продуктов, далее попросил отправить список продуктов мне на телефон и в телеграм я получил список продуктов

image
image

Возможно вы не обновили сенсор по новому как указано в документации 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