Компонент для управления Яндекс.Станцией и другими колонками с Алисой из Home Assistant.
- Установка
- Настройка
- Примеры использования
- Внешний вид
- Продвинутое использование команд
- Звук Яндекс.Станции по HDMI
- Статический IP для локального режима
- Получение команд от станции
- Управление умным домом Яндекса
- Полезные автоматизации
- Полезные ссылки
Новые фичи в версии 2.0:
- Поддержка всех колонок через облачное управление (не все протестированы!)
- Одновременное управление колонками по локальной сети и через облако
- Проигрывание медиа по ссылкам (подробнее)
- Яндекс Алиса в Telegram (подробнее)
Внимание. В тексте часто используются термины локальная колонка, локальный режим и локальное управление (они несут одинаковый смысл). Внимательно изучите какие колонки его поддерживают. Функции и возможности локального управления сильно превосходят облачное управление. Локальный режим включается автоматически на поддерживаемых колонках, поробнее тут.
Список устройств
Устройство | Локальное управление | Облачное |
---|---|---|
Яндекс.Станция (большая) | Поддерживается | Поддерживается |
Яндекс.Станция Макс | Поддерживается | Поддерживается |
Яндекс.Станция Мини | Поддерживается | Поддерживается |
Яндекс.Модуль | Поддерживается | Поддерживается |
DEXP Smartbox | Нет | Поддерживается |
Elari SmartBeat | Нет | Поддерживается |
Irbis A | Нет | Поддерживается |
LG XBOOM AI ThinQ WK7Y | Нет | Поддерживается |
Prestigio Smartmate Mayak Edition | Нет | Поддерживается |
JBL Link Music | Поддерживается | Поддерживается |
JBL Link Portable | Поддерживается | Поддерживается |
Локальное управление не поддерживаются на стороне Яндекса. Если на колонку "прилетит" новая прошивка с поддержкой управления - она с высокой вероятностью "подхватится" без доработки компонента.
Внимание: у облачного управления нет обратной связи от колонки. Неизвестно играет ли колонка что-то или стоит на паузе и какая у неё актуальная громкость. Так что состояние колонки в Home Assistant может отличаться от актуального состояния колонки, если вы давали ей команды не из компонента.
Возможности локального и облачного управления:
- управление воспроизведением и громкостью станции
- отправка TTS на станцию из окна медиаплеера и через сервисы (голосом Алисы!)
- отправка любых текстовых команд на станцию из окна медиаплеера и через сервисы (например, включи мою музыку)
- спецэффекты в TTS (библиотека звуков и наложение эффектов на голос Алисы)
Дополнительные возможности локального управления:
- просмотр что играет на станции, включая обложку (только для музыки)
- перемотка треков
Обложки работают только при локальном управлении
В. Какой компонент лучше YandexStation или Yandex Smart Home?
О. Это разные компоненты для разных задач. Первый позволяет управлять вашими колонками с Алисой из Home Assistant, отправлять на них голосовые уведомления и много чего ещё. Второй позволяет добавить ваши умные устройства из Home Assistant в умный дом Яндекса и управлять ими с любого устройства с Алисой, в том числе с колонок.
Ставится через кастомный репозиторий HACS - AlexxIT/YandexStation
Или через копирование папки yandex_station
из последнего релиза в папку custom_components
(создать при необходимости) директории с конфигами.
Через GUI (рекомендуется)
Настройки > Интеграции > Плюс > Yandex.Station.
Для авторизации используйте ваши Логин и пароль Яндекса или одноразовый пароль из приложения Яндекс.Ключ, при включенной двухфакторной авторизации.
В итоге компонент получит токен Яндекса и сохранит именно его, ваш пароль нигде не сохраняется.
Если Яндекс посчитает авторизацию подозрительной - он может потребовать ввести капчу или подтвердить ваш аккаунт в серсисе Яндекс Паспорт. Подтверждать аккаунт необходимо используя тот же Интернет/VPN, что и сервер Home Assistant.
В случае проблем с авторизацией по паролю, можно зайти в Яндекс в обычном браузере и скопировать оттуда Cookies. Компонент подскажет что нужно сделать на этапе настройки.
Так же можно перенести токен Яндекса с другого сервера Home Assistant, где уже была пройдена авторизация. Компонент подскажет что нужно сделать на этапе настройки.
Через YAML (устаревший способ)
yandex_station:
username: myuser
password: mypass
Если у вас в конфиге есть другие TTS, например от Google - читайте это.
Для шаблонов не забывайте указывать data_template
, для остальных команд хватит просто data
.
Поддерживаются команды на несколько станций одновременно (как TTS, так и media_player).
Внимание: Для каждой вашей колонки в мобильном приложении Яндекса будет создан служебный сценарий. Не трогайте его. Если случайно удалили - перезапустите Home Assistant.
Работает на всех колонках
Зависит от настройки "Режим звука" (из окна медиа-плеера). Будет или произносить текст или выполнять команду. Он же вызывается из окна медиа-плеера.
Из-за зависимости от "Режим звука" - не рекомендуется к использованию в автоматизациях. Используйте Второй способ.
script:
# TTS зависит от настройки "Режим звука"! (произнести или выполнить команду)
yandex_tts1:
alias: TTS зависит от настройки "Режим звука"!
sequence:
- service: tts.yandex_station_say
entity_id: media_player.yandex_station
data_template:
message: Температура в комнате {{ states("sensor.temperature_hall")|round }} градуса.
Работает на всех колонках
Не зависит от настройки "Режим звука".
Внимание. Команда всегда отправляется через облако, даже на локальный колонках, потому что это единственно известный способ, чтоб станция НЕ продолжала слушать после TTS.
В облачном режиме есть два ограничения:
- Команда Алисе может содержать только кириллицу, латиницу, цифры и спецсимволы: "-,!.:=?".
- Команда Алисе должна быть не длиннее 100 символов
Компонент автоматически удалит из текста запрещенные символы и ограничит длинну текста до допустимой.
script:
# TTS не зависит от настройки "Режим звука"! и всегда будет произносить фразу
yandex_tts2:
alias: TTS не зависит от настройки "Режим звука"
sequence:
- service: media_player.play_media
entity_id: media_player.yandex_station
data:
media_content_id: Повторяю вашу фразу
media_content_type: text
Только для локального режима!
Не зависит от настройки "Режим звука", но продолжает слушать после произнесения текста! Зато нет ограничения на количество символов. Поддерживает спецэффекты.
script:
yandex_tts3:
alias: TTS только для локального режима
sequence:
- service: media_player.play_media
entity_id: media_player.yandex_station
data:
media_content_id: <speaker effect="megaphone">Объявление погоды на сегодня...
media_content_type: dialog
Только для локального режима!
Все колонки поддерживают эффекты, библиотеку звуков и настройка речи:
-
media_content_id: смелость sil <[500]> город+а берёт
-
media_content_id: <speaker effect="megaphone">Ехал Грека через реку <speaker effect="-">видит Грека в реке рак
-
media_content_id: <speaker audio="alice-sounds-game-win-1.opus"> У вас получилось!
script:
yandex_tts4: # работает и в локальном и в облачном режиме
alias: TTS c эффектами
sequence:
- service: media_player.play_media
entity_id: media_player.yandex_station
data:
media_content_id: <speaker audio="alice-sounds-game-win-1.opus"> sil <[500]> Объявление погоды на сегодня...
media_content_type: dialog
Только для локального режима!
Можно использовать не только голос Алисы. Разные голоса можно посмотреть тут.
Внимание: Работают не все голоса. Если указать неправильный голос - колонка заглючит. Тогда на неё нужно отправить команду стоп или перезагрузить.
script:
yandex_tts5: # работает и в локальном и в облачном режиме
alias: другой голос TTS
sequence:
- service: media_player.play_media
entity_id: media_player.yandex_station
data:
media_content_id: <speaker voice="zahar">Всем привет. Меня зовут Захар...
media_content_type: dialog
Только для локального режима!
Поддерживаются только ссылки, которые умеют устройства Яндекса!
- Песня на Яндекс.Музыке - пример
- Альбом на Яндекс.Музыке - пример
- Исполнитель на Яндекс.Музыке - пример
- Плейлист на Яндекс.Музыке - пример
Только на устройствах с экраном (большая Станция или Модуль)
Это работает в том числе из GUI, если вставить ссылку в поле "воспроизвести текст".
script:
yandex_play_url:
alias: Проигрывание медиа по ссылке
sequence:
- service: media_player.play_media
entity_id: media_player.yandex_station
data:
media_content_id: https://music.yandex.ru/album/2150009/track/19174962
media_content_type: xxx # тип не важен, но должен быть!
Только для локального режима!
Вы можете общаться со своей Алисой через Telegram. И она вам будет отвечать в Telegram! Можете спросить погоду, вызвать такси, включить песню, поиграть в города или управлять вашим умным домом (если настроили интеграцию с умным домом Яндекса). Никаких слеш-команд Telegram, общайтесь с Алисой обычным текстом.
При этом Home Assistant не обязательно "прокидывать" в Интернет. Telegram в режиме polling
может работать без внешнего доступа.
При этом проигрывание медиа по ссылкам тоже будет работать. Просто поделитесь со своим Telegram ботом ссылкой на фильм Кинопоиска, ролик YouTube или песню/альбом/плейлист на Яндекс Музыке - и они запустятся на вашей колонке!
telegram_bot:
- platform: polling
api_key: TELEGRAM_BOT_API_KEY # создайте своего Телеграм бота
allowed_chat_ids:
- TELEGRAM_USER1_ID # укажите ID своего аккаунта
- TELEGRAM_USER2_ID # при желании, поддерживается несколько аккаунтов
automation:
- trigger:
platform: event
event_type: telegram_text
action:
service: media_player.play_media
entity_id: media_player.yandex_station_mini # замените на вашу станцию
data_template:
media_content_id: "{{ trigger.event.data.text }}"
media_content_type: "question:{{ trigger.event.data.chat_id }}"
- trigger:
platform: event
event_type: yandex_station_response
action:
service: telegram_bot.send_message
data_template:
target: "{{ trigger.event.data.request_id }}"
message: "{{ trigger.event.data.text }}"
Для отправки Telegram сообщений разным станциям @ProstoMaksks предложил такое решение.
Только для локального режима!
Вы можете общаться со своей Алисой через GUI Home Assistant (lovelace). Это работает в любом браузере на любой платформе, включая смартфоны и официальные мобильные приложения.
При включении компонента Conversation в правом верхнем углу интерфейса Home Assistant появляется микрофон. Сам компонент позволяет общаться в режиме диалога.
Работает аналогично добавлению Алисы в Телеграм. Вы фактически общаетесь в текстовом режиме с одной из ваших колонок. Отправка ссылок на медиа тоже работает!
conversation:
intents:
media_player.yandex_station_mini: [.+] # замените на вашу станцию
Компонет поддерживает не только текстовый, но и голосовой ввод при следующих условиях:
- Home Assistant открыт в браузере Google Chrome на Windows, macOS, Linux, Android или в мобильном приложении Android - потому что для распознования голоса используются API Google
- Home Assistant открыт по HTTPS-ссылке или localhost-ссылке - потому что микрофон в браузере Google Chrome доступен только в этом случае
По умолчанию в Home Assistant включен голосовой ввод только на английском языке. Чтоб это исправить - добавьте в конфиг такую настройку. Если у вас голосовой ввод не работает или он вам не нужен - настройку добавлять не надо! Общаться текстом с Алисой вы можете и без неё. После изменения вероятно потребуется сбросить кэш браузера (включая cookies and other site data).
yandex_station:
recognition_lang: ru-RU
Текстовый ввод работает в любом браузере на любой платформе, включая мобильные приложения.
Для правильного произношения числительных в TTS, ознакомьтесь с другим моим компонентом - MorphNumbers.
Работает на всех колонках
script:
yandex_command: # работает и в локальном и в облачном режиме
alias: Выполнить команду
sequence:
- service: media_player.play_media
entity_id: media_player.yandex_station
data:
media_content_id: Включи мою любимую музыку вперемешку
media_content_type: command
Работает на всех колонках
script:
yandex_volume_set: # в локальном или облачном режиме
alias: Меняем громкость нескольких станций
sequence:
- service: media_player.volume_set
data:
entity_id:
- media_player.yandex_station_12345678901234567890
- media_player.yandex_station_98765432109876543210
volume_level: 0.5
Только для локального режима!
script:
yandex_play_album: # только в локальном режиме!!!
alias: Включить Би-2 на Станции
sequence:
- service: media_player.play_media
entity_id: media_player.yandex_station
data:
media_content_id: 60062 # ID альбома в Яндекс.Музыка
media_content_type: album # album, track or playlist
Только для локального режима!
Поддерживается двухсторонняя синхронизация списка покупок Алисы и стандартного компонента Shopping List. Можно добавлять и удалять элементы списка как из ХА, так и голосом с колонки.
Предварительно необходимо добавить стандартный компонент, через GUI или YAML.
Для синхронизации списков необходимо вызвать следующий сервис. При желании, вызов этого сервиса можно выполнять голосом с колонки, настроив интеграцию с Умным домом Яндекса.
script:
update_shopping_list:
alias: Обновить список покупок
sequence:
- service: media_player.play_media
entity_id: media_player.yandex_station_mini # замените на вашу колонку
data:
media_content_id: update
media_content_type: shopping_list
После синхронизации вы можете удалять элементы голосом на колонке. Такие элементы будут удалены из ХА при следующей синхронизации, даже если на них не стоит галка.
Или вы можете отмечать элементы как завершенные в интерфейсе ХА. Такие элементы будут удалены из Яндекса при следующей синхронизации. Только не очищайте вручную список завершенных элементов в ХА до синхронизации! Иначе синхронизация нарушится.
Синхронизация происходит по следующим правилам:
- Завершенные (отмеченные) элементы списка ХА - удаляются из Яндекса (если они там были)
- Новые элементы, созданные именно из ХА - добавляются в Яндекс (если их там не было)
- Список ХА полностью заменяется тем, что получилось в Яндексе после 1 и 2
- Список завершенных элементов ХА очищается
Нужно учитывать, что некоторые названия Яндекс не может добавить в свой список. Поэтому они могут бесследно пропасть.
Красивые иконки Яндекс устройств можно установить через HACS.
Внимание. Ниже пример нестандартной карточки медиалеера. Её нет в Home Assistant по умолчанию. Она легко ставится через HACS. Если у вас сложности с установкой - просто используйте стандартную карточку. Она тоже работает.
entity: media_player.yandex_station_mini # поменяйте на вашу колонку
artwork: cover
sound_mode: icon
shortcuts:
attribute: sound_mode
buttons:
- icon: 'mdi:account-voice'
id: Произнеси текст
type: sound_mode
- icon: 'mdi:robot'
id: Выполни команду
type: sound_mode
- icon: 'mdi:playlist-star'
id: включи мою любимую музыку вперемешку
type: command
- icon: 'mdi:playlist-music'
id: включи плейлист дня
type: command
- icon: 'mdi:heart'
id: лайк
type: command
- icon: 'mdi:heart-off'
id: снять лайк
type: command
columns: 6
hide:
sound_mode: false
runtime: false
tts:
platform: yandex_station
type: 'custom:mini-media-player'
Только для локального режима!
Компонент создаёт сервис yandex_station.send_command
, которому необходимо передать команду.
Полезные команды станции можно узнать тут.
Самая универсальная - это sendText
. Станция выполнит посланную фразу, как буд-то услышала команду голосом.
Выбрать станцию можно указав entity_id
или device
(для обратной совместимости). В качесте device
может быть название станции или идентификатор. Можно посмотреть в приложении Яндекс или в веб интерфейсе.
Если станция одна - можно ничего не указывать.
script:
yandex_tts:
alias: TTS на Яндекс.Станции
sequence:
- service: yandex_station.send_command
data:
entity_id: media_player.yandex_station_12345678901234567890
command: sendText
text: Повтори за мной 'Привет, человек!'
Только для большой Яндекс.Станции!
Функция переключения выхода звука находится у Яндекса в бете. На телевизор выводится только звук видео (например YouTube). Звук музыки и голос Алисы остаются на Станции.
Раньше функция включалась в конфиге. Теперь включена по умолчанию для всех владельцев больших Станций.
script:
yandex_hdmi_sound:
alias: Звук Станции на HDMI
sequence:
- service: media_player.select_source
entity_id: media_player.yandex_station # поменяйте на вашу станцию
data:
source: HDMI
Только для локального режима!
Проще всего проверить работу локального режима - запустить на колонке песню и посмотреть, отображается ли обложка в Home Assistant.
Локальные устройства ищутся автоматически по протоколу mDNS (zeroconf). Если у вас есть с этим какие-то проблемы - можно указать для них статический IP адрес на роутере.
mDNS не будет работать, если вы открыли только один порт для Home Assistant. Например установка в Docker без настройки network=host
(в Hass.io всё хорошо) или виртуальная машина с NAT.
В конфиге нужно указывать device_id
вашей колонки. Он есть на конце entity_id
после media_player.yandex_station_
. Ещё его можно посмотреть в debug логах компонента и в мобильном приложении Яндекса.
yandex_station:
devices:
12345678901234567890: # device_id вашей колонки
host: 192.168.1.123
name: Яндекс Станция # имя можно задать и тут
Только для продвинутых пользователей
Для работы функционала должна быть настроена интеграция Home Assistant с умным домом Яндекса!
- Настройте список фраз, на которые ваши станции должны реагировать и ответы на них. Если не хотите ответ - оставьте его пустым (двоеточие обязательно). При первом запуске копонент создаёт служебный медиа-плеер
media_player.yandex_intents
. - Синхронизируйте ваши устройства в мобильном приложении Яндекса, чтоб этот плеер появился и там. Не нужно его переименовывать и перемещать в комнаты.
- Перезапустите Home Assistant. В мобильном приложении Яндекса должны появиться ваши сценарии.
В ответ на эти фразы в Home Assistan будет генерироваться событие типа yandex_intent
с произнесённым текстом. Теперь можете писать свои автоматизации на YAML или Node-RED.
yandex_station:
username: myuser
password: mypass
intents:
Покажи сообщение: ага
Какая температура в комнате:
Какая влажность в комнате:
automation:
- trigger:
platform: event
event_type: yandex_intent
event_data:
text: Покажи сообщение
action:
service: persistent_notification.create
data:
title: Сообщение со станции
message: Шеф, станция чего-то хочет
На данный момент поддерживаются:
- Кондиционеры - добавленные как через ИК-пульт, так и напрямую (например LG с Wi-Fi)
- Телевизоры - добавленные как через ИК-пульт, так и напрямую
- Обученные вручную ИК-команды - обученные вручную команды ИК-пульта (Пульт => Добавить устройство => Настроить вручную)
- Розетки - включая энергопотребление
- Лампочки - включая настройку яркости и цвета
- Обогреватели
В качестве ИК-пультов можно использовать Яндекс Пульт или более дешевую версию от Tuya (добавляется напрямую как родной пульт Яндекса).
В конфиге нужно перечислить имена ваших устройств:
yandex_station:
username: myuser
password: mypass
include:
- Кондиционер # имя вашего кондиционера
- Приставка # имя не ИК-пульта, а устройства, настроенного вручную
Кондиционер будет добавлен как термостат:
Настроенное вручную ИК-устройство будет добавлено как Remote. Команды отправляются через сервис remote.send_command
. Можно отправить несколько команд за раз, настроить задержку и количество повторов.
script:
volume_up:
alias: Сделай громче
sequence:
- service: remote.send_command
entity_id: remote.yandex_station_remote # поменяйте на ваше устройство
data:
command: Сделай громче # имя кнопки в интерфейсе
num_repeats: 5 # (опционально) количество повторов
delay_secs: 0.4 # (опционально) пауза между повторами в секундах
turn_on:
alias: Включи телевизор
sequence:
- service: remote.send_command
entity_id: remote.yandex_station_remote # поменяйте на ваше устройство
data:
command: [Включи, Смени вход, Ниже, Ниже, ОК] # можно несколько кнопок
delay_secs: 0.4 # (опционально) пауза между повторами в секундах
- Отображаем статус Яндекс Станции с помощью умных ламп, так же эту автоматизацию можно переделать в "Приглушаем звук телевизора, когда Алиса слушает", Только для локального режима!
- Звонок на колонку с Алисой
- Перехват фраз с локальных колонок, Только для локального режима!
- Отвечать на intents с последней активной колонки, Только для локального режима!
- Управление разными станциями из Telegram, Только для локального режима!
- Действие по таймеру в Яндекс Алисе
- Список радиостанций для колонок Яндекса