Компонент для управления Яндекс.Станцией и другими колонками с Алисой из Home Assistant.
- Установка
- Настройка
- Примеры использования
- Внешний вид
- Продвинутое использование команд
- Звук Яндекс.Станции по HDMI
- Несколько TTS в конфиге
- Статический IP для локального режима
- Получение команд от станции
- Управление умным домом Яндекса
- Локальное управление по токену
- Полезные ссылки
Новые фичи в версии 2.0:
- Поддержка всех колонок через облачное управление (не все протестированы!)
- Одновременное управление колонками по локальной сети и через облако
- Проигрывание медиа по ссылкам (подробнее)
- Яндекс Алиса в Telegram (подробнее)
Список устройств
- Яндекс.Станция (большая) - поддерживается локальное и облачное управление
- Яндекс.Модуль - поддерживается локальное и облачное управление
- Яндекс.Станция Мини - поддерживается локальное и облачное управление
- Irbis A - только облачное управление
- DEXP Smartbox - только облачное управление
- Elari SmartBeat - не тестировалась
- LG XBOOM AI ThinQ WK7Y - не тестировалась
- Prestigio Smartmate Mayak Edition - не тестировалась
Локальное управление не поддерживаются на стороне Яндекса. Если на колонку "прилетит" новая прошивка с поддержкой управления - она с высокой вероятностью "подхватится" без доработки компонента.
Внимание: у облачного управления нет обратной связи от колонки. Неизвестно играет ли колонка что-то или стоит на паузе и какая у неё актуальная громкость. Так что состояние колонки в Home Assistant может отличаться от актуального состояния колонки, если вы давали ей команды не из компонента.
Возможности локального и облачного управления:
- управление воспроизведением и громкостью станции
- отправка TTS на станцию из окна медиаплеера и через сервисы (голосом Алисы!)
- отправка любых текстовых команд на станцию из окна медиаплеера и через сервисы (например, включи мою музыку)
- спецэффекты в TTS (библиотека звуков и наложение эффектов на голос Алисы)
Дополнительные возможности локального управления:
- просмотр что играет на станции, включая обложку (только для музыки)
- перемотка треков
Обложки работают только при локальном управлении
Ставится через кастомный репозиторий HACS - AlexxIT/YandexStation
Или через копирование папки yandex_station
из последнего релиза в папку custom_components
(создать при необходимости) директории с конфигами.
Нужны имя и пароль аккаунта Яндекс, к которому привязаны колонки. Изучите код, если думаете, что это небезопасно.
Двухфакторная авторизация работает по одноразовому паролю из приложения Яндекс.Ключ. Главное успеть за 30 секунд :)
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 символов для TTS через облачное управление! Включая спец.символы из раздела "Спецэффекты в TTS".
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: text
Можно использовать не только голос Алисы. Разные голоса можно посмотреть тут.
Внимание: Работают не все голоса. Если указать неправильный голос - колонка заглючит. Тогда на неё нужно отправить команду стоп или перезагрузить.
Помните про ограничение в 100 символов при облачном управлении. Для колонок с локальным управленим можно использовать 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: text
Поддерживается только на колонках (или модуле) с локальным управлением!
Поддерживаются только ссылки, которые умеют устройства Яндекса!
- Песня на Яндекс.Музыке - пример
- Альбом на Яндекс.Музыке - пример
- Исполнитель на Яндекс.Музыке - пример
- Плейлист на Яндекс.Музыке - пример
Только на устройствах с экраном (большая Станция или Модуль)
Это работает в том числе из 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
Текстовый ввод работает в любом браузере на любой платформе, включая мобильные приложения.
Ознакомьтесь с другим моим компонентом - 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
Красивые иконки Яндекс устройств можно установить через HACS.
Красивый медиа плеер можно установить через HACS.
Внимание: правильно указывайте название вашего TTS сервиса. По умолчанию он yandex_station
. Если вы его не изменили на alice
по инструкции про несколько TTS. Тут _say
на конце не нужно указывать.
Пример как настроить карточку Яндекс Мини:
entity: media_player.yandex_station_mini
shortcuts:
attribute: sound_mode
buttons:
- icon: 'mdi:voice'
id: Произнеси текст
type: sound_mode
- icon: 'mdi:google-assistant'
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
tts:
platform: yandex_station
type: 'custom:mini-media-player'
Пример как настроить карточку Яндекс Станции:
entity: media_player.yandex_station
artwork: full-cover
sound_mode: icon
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
TTS Яндекса работает только с их колонками и не работает с другими, например Google Mini. Так и другие TTS не работают с колонками Яндекса.
В этом случае вы можете настроить несколько TTS сервисов. Из окна медиа плеера
всех колонок всегда будет стартовать первый повавшийся сервис (в алфавитном
порядке). Поэтому название TTS сервиса Яндекса можно переименовать, например, в
alice_say
(слово say
на конце обязательно!).
yandex_station:
username: myuser
password: mypass
tts_service_name: alice_say
tts:
- platform: google_translate
language: ru
Локальные устройства ищутся автоматически по протоколу mDNS (zeroconf). Если у вас есть с этим какие-то проблемы - можно указать для них статический IP адрес на роутере.
В конфиге нужно указывать 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 # (опционально) пауза между повторами в секундах
Если есть Oauth-токен с правами на Яндекс.Музыку, можно так. Не спрашивайте как его достать.
Но в этом случае будет работать только локальное управление на тех колонках, кто его поддерживает.
yandex_station:
token: abcdefghijklmnopqrstuvwxyz