• Stars
    star
    128
  • Rank 271,251 (Top 6 %)
  • Language
    Python
  • Created almost 4 years ago
  • Updated 8 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Компонент для управления Home Assistant через Яндекс.Диалоги

Яндекс.Диалоги для Assistant через

hacs_badge Donate Donate

Компонент позволяет управлять Home Assistant из Яндекс Алисы через собственный навык в Яндекс.Диалогах.

С помощью Яндекс.Диалогов вы можете настроить реакцию Алисы на абсолютно любые фразы. А не только те, что заложили разработчики. Яндекс Алиса работает на колонках, мобильных приложениях Яндекса и на компьютере в браузере Яндекса.

Особенностью управления через Диалоги является необходимость называть имя навыка в фразе с командой.

  • Алиса узнай у Умного дома температуру в спальне
  • Алиса попроси Мой дом включить Ютуб на телевизоре в зале
  • Алиса узнай у Домашнего ассистента когда было последнее движение у входной двери

Для начала диалога без использования имени навыка есть два метода:

  • Создать сценарий Яндекса, например: если я скажу "включи мультики на телевизоре", умная колонка выполнит команду "скажи навыку умный дом включи мультики на ТВ"
  • Начинать диалог из Home Assistant с помощью компонента Yandex.Station

Для работы компонента нужен рабочий внешний доступ к вашему Home Assistant по протоколу HTTPS. Его можно получить через другой мой компонент - Dataplicity.

Не стоит путать Яндекс.Диалоги с Умным домом Яндекса. Это разные технологии, не связанные между собой.

Установка

Способ 1. HACS > Интеграции > 3 точки (правый верхний угол) > Пользовательские репозитории > URL: AlexxIT/YandexDialogs, Категория: Интеграция > Добавить > подождать > YandexDialogs > Установить

Способ 2. Вручную скопируйте папку yandex_dialogs из latest release в директорию /config/custom_components.

Настройка

Способ 1. GUI

Настройки > Интеграции > Добавить интеграцию > Yandex Dialogs

Если интеграции нет в списке - очистите кэш браузера.

Способ 2. YAML

yandex_dialogs:

Использование

Если у вас уже работает компонент YandexStation и есть внешний доступ по HTTPS - этот компонент может автоматически создать и настроить навык в Яндекс.Диалогах.

Для этого ещё раз добавьте интеграцию:

Настройки > Интеграции > Добавить интеграцию > Yandex Dialogs

И укажите:

  • аккаунт Яндекса, от имени которого создавать Диалог
  • публичную HTTPS-ссылку на ваш сервер Home Assistant
  • имя навыка (Яндекс требует имя из двух слов)

Компонент автоматически создаст новый приватный диалог, опубликует его и сохранит идентификатор вашего пользователя в настройки интеграции. Навык публикуется в течение нескольких минут!

По умолчанию приватный навык доступен только вашему пользователю. Но для дополнительной безопасности компонент будет обрабатывать команды только от указанных идентификаторов пользователей.

Идентификаторы пользователей уникальны для связки пользователь+навык и выглядят примерно так: ABCDEF01234567890ABCDEF01234567890ABCDEF01234567890ABCDEF0123456.

При необходимости вы можете создать несколько диалогов с разными именами.

PS: При желании можете самостоятельно создать приватный навык с Webhook на ваш Home Assistant: https://myhome.duckdns.org/api/yandex_dialogs

Управление через автоматизации на событиях

Внимание: у вас пара секунд, чтоб вызвать событие с текстовым результатом ответа.

Этот подход можно использовать в Node-RED.

При обращении к навыку создаётся событие yandex_intent с параметрами:

  • text - произнесённая фраза
  • command - фраза, почищенная от знаков препинания и числетельные преобразованы в числа
  • intent - интент это обозначение "типовой" фразы. Например, для ответов "да" или "хорошо" здесь будет значение YANDEX.CONFIRM. При желании вы можете настраивать свои интенты (описано ниже)
  • session, user, application - "хранилище" состояний диалога
  • ... - другие переменные, которые вы прописали в Интенте в Яндекс.Диалогах

Для ответа вы должны сами вызвать событие yandex_intent_response с параметрами:

  • text - опциональный, текст ответа
  • tts - опциональный, ответ в формате TTS
  • end_session, опциональный, по умолчанию True, "выйти" из диалога после ответа
  • session, user, application - опциональные, новое значение "хранилища" состояний. Состояния session и application не переносятся между разными шагами диалога автоматически!

Для ответа вы можете заполнить или text или tts в зависимости от того, нужно ли вам произнести ответ со спецэффектами TTS.

automation:
- trigger:
    platform: event
    event_type: yandex_intent  # это событие ОТ вашего навыка
    event_data:
      text: привет  # проверяем точное совпадение с фразой "привет"
  action:
    event: yandex_intent_response  # это наш ответ навыку, нужно уложиться в пару секунд
    event_data:
      text: "{{ ['слушаю', 'здесь я', 'на связи']|random }}"

- trigger:
    platform: event
    event_type: yandex_intent
    event_data:
      intent: calc  # проверяем на совпадение с Интентом калькулятора
  action:
  - service: persistent_notification.create
    data:
      title: Яндекс Калькулятор
      message: "{{ trigger.event.data.text }}"
  - event: yandex_intent_response
    event_data:  # есть все переменные, как и в примере выше
      text: >-
        {% if trigger.event.data.action == 'плюс' %}
          {{ trigger.event.data.x + trigger.event.data.y }}
        {% elif trigger.event.data.action == 'минус' %}
          {{ trigger.event.data.x - trigger.event.data.y }}
        {% elif trigger.event.data.action == 'умножить на' %}
          {{ trigger.event.data.x * trigger.event.data.y }}
        {% elif trigger.event.data.action == 'разделить на' %}
          {{ trigger.event.data.x / trigger.event.data.y }}
        {% endif %}

Управление продолжением диалога

Фраза "Алиса включи навык Умный дома" включит навык и навык будет ждать вашей команды.

Фраза "Алиса спроси у Умного дома сколько градусов в зале" - вызовет ваш навык, получит ответ и тут же выйдет из него назад к Алисе.

Чтоб изменить это поведение, используйте параметр end_session. С ним вы можете либо продолжить разговор при фразе "Алиса спроси у Умного дома...". Либо прервать диалог в любом месте.

Управление через Intent Script

Альтернативный способ управления диалогом. Более сложный и не рекомендуется к использованию.

Существует скрипт по умолчанию yandex_default. Он выполняется когда для фразы не совпал ни один Интент.

action опциональный. Он выполняется ДО генерации ответа и при желании может на него повлиять.

Внимание: у вашего скрипта пара секунд, чтоб вернуть ответ. Алиса дольше не ждёт. Если ваш скрипт выполняется дольше - запускайте его ассинхронно (читайте документацию).

Вам доступны переменные:

  • text - произнесённая фраза
  • command - фраза, почищенная от знаков препинания и числетельные преобразованы в числа
  • intent - если фраза совпала, тут будет ID Интента из Яндекс.Диалогов
  • ... - другие переменные, которые вы прописали в Интенте в Яндекс.Диалогах
intent_script:
  yandex_default:  # это скрипт по умолчанию
    action:  # действие опционально и должно уложиться в пару секунд
    - service: persistent_notification.create
      data:
        title: Команда из Яндекса
        message: "{{ text }}"
    speech:  # фраза для ответа, поддерживает шаблоны
      text: >-
        {% if text == 'привет' %}
          {{ ['слушаю', 'здесь я', 'на связи']|random }}
        {% elif text == 'какая температура в спальне' %}
          Температура {{ states("sensor.temperature_bedroom")|round }} °C
        {% else %}
          Не могу выполнить: {{ text }}
        {% endif %}

  calc:  # это Интент калькулятора (пример как настроить ниже)
    action:
    - service: persistent_notification.create
      data:
        title: Яндекс Калькулятор
        message: "{{ text }}"
    speech:  # в нём распознались переменные action, x и y
      text: >-
        {% if action == 'плюс' %}
          {{ x+y }}
        {% elif action == 'минус' %}
          {{ x-y }}
        {% elif action == 'умножить на' %}
          {{ x*y }}
        {% elif action == 'разделить на' %}
          {{ x/y }}
        {% endif %}

  temperature:  # это Интент температуры в помещении (пример как настроить ниже)
    speech:
      text: >-
        {% if room == 'в зале' %}
          Температура в зале {{ states("sensor.temperature_hall")|round }} °C
        {% elif room == 'в ванной' %}
          Температура в ванной {{ states("sensor.temperature_bathroom")|round }} °C
        {% elif room == 'на балконе' %}
          Температура на балконе {{ states("sensor.temperature_balcony")|round }} °C
        {% endif %}

Настройка Интентов в Яндекс.Диалогах

Платформа Яндекс.Диалогов позволяет гибко обрабатывать сказанные фразы через Natural Language Processing (NLU) от Яндекса.

Фраза, которую нужно распознать, называется Интентом. ID интента и все составляющие разобранной фразы прилетят в Home Assistant. И их можно использовать в автоматизациях.

При желании вы можете не пользоваться Интентами, а анализовать фразы в автоматизациях Home Assistant или Node-RED.

  • $room - слово с долларом это переменная
  • [...] - квадрытные скобки означают, что слова могут идти в любом порядке
  • (какая)? - вопрос означает, что слова может не быть
  • %lemma - означает режим сравнение без учёта формы слова (например "включай свет" приравнивается к "включи свет")

Полная документация.

Интенты можно настраивать только после публикации навыка. Любые изменения в интентах требуют новой публикации (занимает пару минут).

Пример калькулятора

root:
    сколько будет $x $action $y
slots:
    x:
        source: $x
        type: YANDEX.NUMBER
    y:
        source: $y
        type: YANDEX.NUMBER
    action:
        source: $action
$x:
    $YANDEX.NUMBER
$y:
    $YANDEX.NUMBER
$action:
    плюс | минус | умножить на | разделить на

Пример тепературы в разных помещениях

root:
    [(какая)? температура $room]
    [сколько градусов $room]
slots:
    room:
        source: $room
$room:
    в зале | в ванной | на балконе

More Repositories

1

go2rtc

Ultimate camera streaming application with support RTSP, RTMP, HTTP-FLV, WebRTC, MSE, HLS, MP4, MJPEG, HomeKit, FFmpeg, etc.
Go
3,263
star
2

SonoffLAN

Control Sonoff Devices with eWeLink (original) firmware over LAN and/or Cloud from Home Assistant
Python
2,498
star
3

XiaomiGateway3

Home Assistant custom component for control Xiaomi Multimode Gateway (aka Gateway 3), Xiaomi Multimode Gateway 2, Aqara Hub E1 on default firmwares over LAN
Python
2,308
star
4

WebRTC

Home Assistant custom component for real-time viewing of almost any camera stream using WebRTC and other technologies.
JavaScript
1,264
star
5

YandexStation

Управление Яндекс.Станцией и другими устройствами умного дома с Алисой из Home Assistant
Python
1,224
star
6

HassWP

Portable version of Home Assistant for Windows (no need to install)
Python
555
star
7

StreamAssist

Home Assistant custom component that allows you to turn almost any camera and almost any speaker into a local voice assistant
Python
135
star
8

DashCast

DashCast component for Home Assistant
Python
111
star
9

PythonScriptsPro

Advanced version of python scripts for Home Assistant without limits
Python
104
star
10

Dataplicity

Public HTTPS access to Home Assistant with Dataplicity service
Python
104
star
11

MorphNumbers

Компонент Home Assistant для работы с числительными в Jinja2
Python
85
star
12

hassio-addons

Hass.io addons: go2rtc and SSH Tunnel
Shell
81
star
13

VacuumZones

Control zone cleaning for Xiaomi vacuum cleaners from voice assistants and Home Assistant
Python
68
star
14

GyverLamp

Home Assistant компонент для интеграции лампы Гайвера на оригинальной прошивке
Python
66
star
15

SSHCommand

Run any SSH command on remote server from Home Assistant service call
Python
59
star
16

yandex_smart_home_fix

Python
58
star
17

StartTime

Start Time sensor for Home Assistant
Python
53
star
18

AlexxIT

42
star
19

FasterWhisper

Faster Whisper for Home Assistant - custom integration with a local Speech-to-Text engine
Python
40
star
20

Jura

Home Assistant custom component for control Jura Coffee Machines via Bluetooth module
Python
37
star
21

Blog

AlexxIT's Blog
34
star
22

gw3

Xiaomi Gateway 3 (ZNDMWG03LM) companion application for integration with open source Smart Home platforms
Go
29
star
23

openmiio_agent

Go
24
star
24

YandexCOVID

Python
22
star
25

MediaExtractorPro

Play playlists on Chromecast devices from Home Assistant
Python
16
star
26

Updater

Python
12
star
27

YandexRoute

Python
8
star
28

Ergomotion

Home Assistant custom component for control Ergomotion Smart Beds via Bluetooth module
Python
8
star
29

rtsplog

Batchfile
7
star
30

BypassAPI

Custom component for disable Home Assistant REST API authentication
Python
6
star
31

hassio-rtsp2webrtc

Hass.io addon allows you to watch an RTSP stream in real time using WebRTC technology
JavaScript
6
star
32

AlexxIT.github.io

6
star
33

SlowSensor

Python
4
star
34

elastichandler

Python
3
star
35

git-test

3
star
36

yamlconf

Python
3
star
37

arequests

Python
3
star
38

HassDiagnostics

Diagnostics entities for Home Assistant
Python
3
star
39

pyasyncweb-tests

Python
2
star
40

SwimFitFixer

Python
1
star
41

intlist

Кодирование массива integer для передачи в качества GET-параметра
Python
1
star