Компонент генерирует события в Home Assistant на конкретные голосовые команды, адресованные Яндекс.Станции (или колонкам с Алисой). Как это работает: вы говорите "Алиса, сделай действие" и в Home Assistant появляется событие с текстом "сделай действие", именем колонки и комнаты. Такие события очень удобно использовать в автоматизациях.
Компонент адресован продвинутым пользователям, которые не боятся поредактировать YAML, и является продолжателем функции "Получение команд от станции" из компонента Yandex.Station от AlexxIT.
Основные преимущества и отличия:
- Автоматическое создание/удаление/синхронизация сценариев в УДЯ (без перезагрузки HA!)
- Понятная и однозначная переменная
textв событиях (вместоСделай громче на 0???!!!) - Возможно удалить все сценарии из УДЯ одним вызовом сервиса
yandex_station_intents.clear_scenarios
Компонент "Yandex.Station Intents" никак не связан с компонентом "Yandex.Station" и его авторами!
- Похожие компоненты
- Установка
- Настройка
- Вопросы и ответы
- Миграция с YAML интентов Yandex.Station
- Благодарности
- Yandex.Station: управляет Яндекс.Станцией (воспроизведение, громкость, синтез текста), так же позволяет получать команды от Яндекс.Станции (с ручным созданием сценариев и в чуть менее удобной форме).
- YandexDialogs: обрабатывает любые фразы, адресованные Алисе, через NLU (Natural Language Processing). При использовании обязательно называть имя навыка, например "Алиса, попроси мой_навык сделать что нибудь".
- Yandex Smart Home: позволяет управлять устройствами, подключенными к Home Assistant через Алису и веб-интерфейс. Используйте его для "Алиса, включи лампочку зелёным на 50% яркости" или "Алиса, прибавь громкость на телевизоре".
Способ 1: HACS
- Установите и настройте HACS
- Откройте HACS --> Три точки в верхнем правом углу -> Пользовательские репозитории
- Добавьте репозиторий
dext0r/ha-yandex-station-intents(типИнтеграция) - В поиске найдите и откройте
Yandex.Station Intents-> Скачать - Перезагрузите Home Assistant
Способ 2: вручную, не рекомендуется
- Скачайте архив
yandex_station_intents.zipиз последнего релиза - Создайте подкаталог
custom_components/yandex_station_intentsв каталоге где расположен файлconfiguration.yaml - Распакуйте содержимое архива в
custom_components/yandex_station_intents - Перезагрузите Home Assistant
- Добавьте интеграцию в Home Assistant:
Настройки>Устройства и службы>Интеграции> НажатьДобавить интеграцию>Yandex.Station Intents(если интеграции нет в списке - обновите страницу) - Настройте список фраз или мигрируйте с yaml интентов компонента Yandex.Station
- Перезагрузите YAML конфигурацию через
Панель разработчика>YAML, вНастройки>Система>Журнал серверапоявятся ошибки если что-то пошло не так
Интеграция работает с заранее сформированным списком фраз, на основе которых будут автоматически созданы сценарии в УДЯ. Активационные фразы могут содержать только кириллицу, цифры и пробелы.
Настройка выполняется через основной файл конфигурации configuration.yaml. Пример конфигурации:
yandex_station_intents:
intents:
Как дела: # (1), символ : обязателен
Кто нибудь дома: Сейчас проверю # (2)
Время ужинать: # (3)
extra_phrases: # альтернативные фразы, максимум три, не должны совпадать с основной фразой
- Давай кушать
- Давай ужинать
- Время ужина
Не выключай свет в прихожей: # (4)
extra_phrases:
- Не выключай свет в коридоре
say_phrase: "{{ ['Договорились', 'Хорошо', 'Я тебя услышала', 'Оки-доки']|random }}"
Давай попьем чаю: # (5)
say_phrase: Отличная идея, сейчас включу свет на кухне
execute_command: Включи свет на кухне
Очень холодно: # (6)
execute_command: Прибавь температуру кондиционера на 1 градус в {{ event.room }}
Точная температура в комнате: # (7)
say_phrase: "Точная температура {{ states('sensor.room_temperature') }} в {{ event.room }}"
Давай поиграем:
accounts: [vasya] # (8)В данном случае интеграция автоматически создаст в УДЯ восемь сценариев, каждый из которых начинается с символов ---. Не удаляйте эти символы и не модифицируйте никак название! По ним компонент понимает, что это его сценарий и в случае необходимости синхронизирует/удалит его.
Дополнительные параметры say_phrase, extra_phrases, execute_command, account являются необязательными и могут использоваться в любых вариациях.
Как работает:
- Срабатывает от
Алиса, как дела, генерирует событие сtext: Как дела, колонка ничего не скажет в ответ - Срабатывает от
Алиса, кто нибудь дома, генерирует событие сtext: Кто нибудь дома, колонка, которая нас услышала ответитСейчас проверю - Срабатывает от
Алиса, время кушать(илиАлиса, время ужина, илиАлиса, давай ужинатьи т.п.), генерирует событие сtext: Время ужинать, колонка ничего не скажет в ответ - Срабатывает от
Алиса, не выключай свет в прихожей(илиАлиса, не выключай свет в коридоре), генерирует событие сtext: Не выключай свет в прихожей, колонка, которая нас услышала ответит случайной фразой из списка - Срабатывает от
Алиса, давай попьем чаю, генерирует событие сtext: Давай попьем чаю, колонка, которая нас услышала ответитОтличная идея, сейчас включу свет на кухне, после этого колонка выполнит командуВключи свет на кухне - Срабатывает от
Алиса, очень холодно, генерирует событие сtext: Очень холодно, колонка выполнит командуПрибавь температуру кондиционера на 1 градус в КОМНАТА(вместоКОМНАТАбудет подставлена комната, в которой находится колонка) - Срабатывает от
Алиса, точная температура в комнате, генерирует событие сtext: Точная температура в комнате, колонка, которая нас услышала ответит вычисленным шаблоном изsay_phrase - Срабатывает от
Алиса, давай поиграем. Сценарий будет создан и работать только на аккаунтеvasya(можно указать несколько аккаунтов через запятую). Аккаунт указывается в том же виде, как отображается в списке интеграций Yandex.Station Intents. Если аккаунты не указаны - сценарии будут созданы для всех активных интеграций.
После того как колонка услышит ключевую фразу в Home Assistant сгенерируется событие yandex_intent с параметрами:
text: Основная фраза (смотрите примеры)entity_id: ID колонки, которая услышала фразу активации (толькоmode: websocket)room: Комната, в которой находится колонка (толькоmode: websocket)account: Аккаунт, к которому привязана колонка
Пример обработки:
automation:
- alias: Кто нибудь дома
trigger:
- platform: event
event_type: yandex_intent
event_data:
text: Кто нибудь дома # пример (2)
action:
- service: media_player.play_media
target:
entity_id: '{{ trigger.event.data.entity_id }}' # ответит колонка, которая услышала "Алиса, кто нибудь дома"
data:
media_content_type: text
media_content_id: Я не знаю, ха-ха
- alias: Как дела
trigger:
- platform: event
event_type: yandex_intent
event_data:
text: Как дела # пример (1)
room: Кухня # сработает, если спросили колонку в комнате "Кухня"
action:
- service: media_player.play_media
target:
entity_id: '{{ trigger.event.data.entity_id }}'
data:
media_content_type: text
media_content_id: Здесь в комнате {{ trigger.event.data.room }} всё отлично!По умолчанию сценарии синхронизируются с УДЯ автоматически при запуске Home Assistant. Это поведение можно отключить добавлением в конфигурацию опции autosync: false. После этого сценарии будут синхронизированы только при перезагрузке YAML конфигурации компонента со страницы Панель разработчика > YAML или через сервис yandex_station_intents.reload.
Пример:
yandex_station_intents:
autosync: false
intents:
Тест:Интеграция поддерживает два режима работы: websocket (по-умолчанию) и device. Режим задаётся через параметр mode в конфигурации (менять можно в любой момент).
Режим websocket (по-умолчанию):
- Для работы желательна настроенная интеграция Yandex.Station
- Постоянное подключение к серверам Яндекса, не требует интеграцию
Yandex Smart Home - Невозможно активировать событие из интерфейса УДЯ или голосом на телефоне, активация возможна только через колонку
- Позволяет получать
entity_idиroomколонки, которая услышала активационную фразу - Использует недокументированную функцию УДЯ и в теории может быть отключен Яндексом
Режим device (условно-устаревший):
- Требует установленный компонент
Yandex Smart Home, в фильтрах необходимо разрешить плеерыmedia_player.yandex_station_intents* - Можно активировать событие кнопкой в интерфейсе или голосом на телефоне
- Невозможно определить колонку, которая услышала фразу, отсутствуют параметры
entity_idиroomв событиях - Будет работать всегда, так как активация происходит через управление виртуальным устройством в УДЯ
- В этом режиме не поддерживаются:
- Параметр
execute_command - Шаблоны в
say_phrase
- Параметр
- При активации скриптов Алиса много болтает ("хорошо", "сделала" и т.п.). Болтовню можно отключить только для всего умного дома целиком, что не всегда удобно
- Невозможно достоверно определить колонку, которая активировала скрипт (только с некоторой вероятностью через мониторинг
alice_state: BUSY) - События очень удобно использовать в качестве триггера в автоматизациях
Используйте интеграцию Yandex Smart Home
- Установите и настройте интеграцию
Yandex.Station Intents(YAML пока не меняйте) - Удалите сценарии, которые были созданы компонентом Yandex.Station. Если в УДЯ нет вручную созданных сценариев - воспользуйтесь сервисом
yandex_station_intents.clear_scenarios, в противном случае - удалите сценарии вручную. - Убедитесь, что в УДЯ не осталось сценариев, созданных компонентом
Yandex.Station - В YAML конфигурации измените
yandex_stationнаyandex_station_intents(при условии, что у вас вyandex_stationесть только блокintents) - Перезагрузите YAML конфигурацию
Yandex.Station Intentsсценарии будут созданы автоматически - Дождитесь появления всех сценариев в УДЯ (30-60 секунд), посмотрите Журнал Сервера на наличие ошибок
- Перезагрузите Home Assistant, убедитесь, что ошибок по-прежнему нет
- Проверьте работу интентов, изменения в автоматизациях не потребуются
Компонент позволяет удалить абсолютно все сценарии из УДЯ через сервис yandex_station_intents.clear_scenarios. Будут удалены в том числе и сценарии, созданные вручную.
Для удаления вызовите сервис через Панель разработчика > Сервисы:
service: yandex_station_intents.clear_scenarios
data:
confirm: Я действительно хочу удалить ВСЕ сценарии из УДЯ- AlexxIT за компонент Yandex.Station и разрешение использовать из него код для взаимодействия с Яндексом