Компонент Yandex.Station Intents для Home Assistant генерирует события или запускает действия на конкретные голосовые команды, адресованные Яндекс.Станции (или колонкам с Алисой). Когда вы говорите «Алиса, сделай действие», в Home Assistant появляется событие с текстом «сделай действие», именем колонки и комнаты. Такие события удобно использовать в автоматизациях, либо вместо автоматизации можно сразу выполнить нужное действие.
Компонент адресован продвинутым пользователям, которые не боятся поредактировать YAML, и является продолжателем функции «Получение команд от станции» из компонента Yandex.Station от AlexxIT.
Основные преимущества и отличия:
- Автоматическое создание/удаление/синхронизация сценариев в УДЯ (без перезагрузки HA!)
- Понятная и однозначная переменная
textв событиях (вместоСделай громче на 0???!!!) - Возможность удалить все сценарии из УДЯ одним вызовом действия
yandex_station_intents.clear_scenarios
Компонент «Yandex.Station Intents» никак не связан с компонентом «Yandex.Station» и его авторами!
Похожие компоненты
- Yandex.Station: управляет Яндекс.Станцией (воспроизведение, громкость, синтез текста), также позволяет получать команды от Яндекс.Станции (с ручным созданием сценариев и в чуть менее удобной форме).
- YandexDialogs: обрабатывает любые фразы, адресованные Алисе, через NLU (Natural Language Processing). При использовании обязательно называть имя навыка, например «Алиса, попроси мой_навык сделать что нибудь».
- Yandex Smart Home: позволяет управлять устройствами, подключёнными к Home Assistant, через Алису и веб-интерфейс. Используйте его для «Алиса, включи лампочку зелёным на 50% яркости» или «Алиса, прибавь громкость на телевизоре».
Установка
Способ 1: HACS
- Установите компонент HACS > Перезагрузите Home Assistant > Добавьте интеграцию HACS
- Откройте HACS через боковую панель
- В поиске введите
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, вНастройки>Система>Журнал серверапоявятся ошибки, если что-то пошло не так
Список фраз (интенты)
Интеграция работает с заранее сформированным списком фраз, на основе которых будут автоматически созданы сценарии в УДЯ. Активационные фразы могут содержать только кириллицу, цифры и пробелы. Максимальное количество сценариев в УДЯ — 200.
Настройка выполняется через основной файл конфигурации configuration.yaml. Пример конфигурации:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
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) Запусти отсчёт: # (9) action: action: timer.start entity_id: timer.countdown |
В данном случае интеграция автоматически создаст в УДЯ девять сценариев, каждый из которых начинается с символов ---. Не удаляйте эти символы и не модифицируйте никак название! По ним компонент понимает, что это его сценарий, и в случае необходимости синхронизирует/удалит его.
Дополнительные параметры say_phrase, extra_phrases, execute_command, account, action являются необязательными и могут использоваться в любых вариациях.
Как работает:
- Срабатывает от
Алиса, как дела, генерирует событие сtext: Как дела, колонка ничего не скажет в ответ - Срабатывает от
Алиса, кто нибудь дома, генерирует событие сtext: Кто нибудь дома, колонка, которая нас услышала, ответитСейчас проверю - Срабатывает от
Алиса, время кушать(илиАлиса, время ужина, илиАлиса, давай ужинатьи т.п.), генерирует событие сtext: Время ужинать, колонка ничего не скажет в ответ - Срабатывает от
Алиса, не выключай свет в прихожей(илиАлиса, не выключай свет в коридоре), генерирует событие сtext: Не выключай свет в прихожей, колонка, которая нас услышала, ответит случайной фразой из списка - Срабатывает от
Алиса, давай попьем чаю, генерирует событие сtext: Давай попьем чаю, колонка, которая нас услышала, ответитОтличная идея, сейчас включу свет на кухне, после этого колонка выполнит командуВключи свет на кухне - Срабатывает от
Алиса, очень холодно, генерирует событие сtext: Очень холодно, колонка выполнит командуПрибавь температуру кондиционера на 1 градус в КОМНАТА(вместоКОМНАТАбудет подставлена комната, в которой находится колонка) - Срабатывает от
Алиса, точная температура в комнате, генерирует событие сtext: Точная температура в комнате, колонка, которая нас услышала, ответит вычисленным шаблоном изsay_phrase - Срабатывает от
Алиса, давай поиграем. Сценарий будет создан и работать только на аккаунтеvasya(можно указать несколько аккаунтов через запятую). Аккаунт указывается в том же виде, как отображается в списке интеграций Yandex.Station Intents. Если аккаунты не указаны — сценарии будут созданы для всех активных интеграций. - Срабатывает от
Алиса, запусти отсчёт, запустит действиеtimer.startна таймереtimer.countdown. В блокеactionзадаются параметры действия, которые можно сформировать черезНастройки->Инструменты разработчика->Действия.
Обработка событий
После того как колонка услышит ключевую фразу, в Home Assistant сгенерируется событие yandex_intent с параметрами:
text: Основная фраза (смотрите примеры)entity_id: ID колонки, которая услышала фразу активации (толькоmode: websocket)room: Комната, в которой находится колонка (толькоmode: websocket)account: Аккаунт, к которому привязана колонка
Пример обработки:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
automation: — alias: Кто нибудь дома triggers: — trigger: event event_type: yandex_intent event_data: text: Кто нибудь дома # пример (2) actions: — action: media_player.play_media target: entity_id: ‘{{ trigger.event.data.entity_id }}’ # ответит колонка, которая услышала «Алиса, кто нибудь дома» data: media_content_type: text media_content_id: Я не знаю, ха—ха — alias: Как дела triggers: — trigger: event event_type: yandex_intent event_data: text: Как дела # пример (1) room: Кухня # сработает, если спросили колонку в комнате «Кухня» actions: — action: 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.
Пример:
|
1 2 3 4 |
yandex_station_intents: autosync: false intents: Тест: |
При синхронизации обновляются только изменённые сценарии: если сценарий в УДЯ уже соответствует интенту, он пропускается. Это уменьшает количество запросов к УДЯ и ускоряет синхронизацию.
Запустить синхронизацию вручную можно действием yandex_station_intents.sync. Опция full управляет режимом:
full: false(по умолчанию) — обычная синхронизация, обновляются только изменённые сценарии;full: true— принудительная полная синхронизация, обновляются все сценарии, в том числе неизменённые (например, если по какой-то причине компонент считает сценарий идентичным, хотя это не так).
Пример вызова через Инструменты разработчика > Действия:
|
1 2 3 |
actions: yandex_station_intents.sync data: full: true |
Важно: yandex_station_intents.sync синхронизирует уже загруженную конфигурацию и не учитывает изменения в YAML конфигурации.
Режимы работы (для продвинутых)
Интеграция поддерживает два режима работы: 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
- Параметр
Вопросы и ответы
Зачем это всё, если можно отдать скрипты через Yandex Smart Home?
- При активации скриптов Алиса много болтает («хорошо», «сделала» и т.п.). Болтовню можно отключить только для всего умного дома целиком, что не всегда удобно
- Невозможно достоверно определить колонку, которая активировала скрипт (только с некоторой вероятностью через мониторинг
alice_state: BUSY) - События очень удобно использовать в качестве триггера в автоматизациях
Как управлять светом и другими штуками?
Используйте интеграцию Yandex Smart Home
Миграция с YAML интентов Yandex.Station
- Установите и настройте интеграцию
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. Будут удалены в том числе и сценарии, созданные вручную.
Для удаления вызовите действие через Инструменты разработчика > Действия:
|
1 2 3 |
action: yandex_station_intents.clear_scenarios data: confirm: Я действительно хочу удалить ВСЕ сценарии из УДЯ |
Ссылки
- Репозиторий: https://github.com/dext0r/ha-yandex-station-intents




Добавить комментарий