Компонент генерирует события в Home Assistant на конкретные голосовые команды, адресованные Яндекс.Станции (или колонкам с Алисой). Как это работает: вы говорите "Алиса, сделай действие" и в Home Assistant появляется событие с текстом "сделай действие", именем колонки и комнаты. Такие события очень удобно использовать в автоматизациях.
Компонент адресован продвинутым пользователям, которые не боятся поредактировать YAML, и является продолжателем функции "Получение команд от станции" из компонента Yandex.Station от AlexxIT.
Основные преимущества и отличия:
text
в событиях (вместо Сделай громче на 0???!!!
)yandex_station_intents.clear_scenarios
Компонент "Yandex.Station Intents" никак не связан с компонентом "Yandex.Station" и его авторами!
Способ 1: HACS
HACS > Интеграции > 3 точки (правый верхний угол) > Пользовательские репозитории > URL: dext0r/ha-yandex-station-intents
, Категория: Интеграция
> Нажать Добавить
> Подождать > Выбрать Yandex.Station Intents
в списке новых репозиториев > Нажать Скачать
Способ 2:
Вручную скопируйте папку custom_components/yandex_station_intents
из latest release в директорию /config/custom_components
После установки перезапустите Home Assistant.
Настройки
> Устройства и службы
> Интеграции
> Нажать Добавить интеграцию
> Yandex.Station Intents
(если интеграции нет в списке - обновите страницу)Панель разработчика
> 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 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_intents.clear_scenarios
, в противном случае - удалите сценарии вручную.Yandex.Station
yandex_station
на yandex_station_intents
(при условии, что у вас в yandex_station
есть только блок intents
)Yandex.Station Intents
сценарии будут созданы автоматическиКомпонент позволяет удалить абсолютно все сценарии из УДЯ через сервис yandex_station_intents.clear_scenarios
. Будут удалены в том числе и сценарии, созданные вручную.
Для удаления вызовите сервис через Панель разработчика
> Сервисы
:
service: yandex_station_intents.clear_scenarios
data:
confirm: Я действительно хочу удалить ВСЕ сценарии из УДЯ