Статья

Подключение Яндекс Станции к Home Assistant

Актуально для Home Assistant 113.3 и версии компонента 2.7.

Основано на Readme оригинального репозитория.

Содержание

  • Подготовка: Установка File Editor, Samba, HACS
  • Установка компонента Яндекс Станции
  • Настройка Lovelace и скриптов

Подготовка: Установка File Editor, Samba, HACS

В случае, если у вас установлены эти компоненты, данный шаг можно пропустить.

В первую очередь, для редактирования файлов конфигурации нам понадобится дополнение «File Editor», оно позволяет выполнять редактирование файлов конфигурации непосредственно в браузере.

Для его установки нажимаем в левом нижнем углу браузера иконку Supervisor, затем, в открывшемся окне вверху нажимаем кнопку Add-on Store, В окне поиска набираем «File Editor» (без кавычек).

В поиске появится плашка File Editor (Рисунок 1)

В открывшемся окне нажимаем на кнопку INSTALL. После установки дополнения, переводим переключатель «Show in Sidebar» в правое, активное, положение. Таким образом доступ к аддону будет возможен с боковой панели.

Аддон запустится автоматически, если этого не произошло, нажимаем START (Рисунок 2).

Далее нам понадобится аддон SAMBA (пользователи Linux могут примонитровать каталоги Home Assistant без этого раздела, установив на хост NFS сервер. Если вы не знаете как это сделать, используйте Samba, доступ через адресную строку по ссылке smb://usrname@server_ip/). Инструкция по установке и настройке.

После этого, следуя инструкции расположенной на сайте, устанавливаем HACS (Home Assistant Community Store). Данная интеграция(?) позволяет устанавливать дополнения, интеграции, темы оформления, которые не включены в стандартную поставку Home Assistant

Установка компонента Яндекс Станции

После перезагрузки сервера, в боковом меню выбираем HACS и в открывшемся окне нажимаем на три вертикальных точки (расположены в правом верхнем углу), выбираем Custom repositories.


В открывшееся поле вводим ссылку на репозиторий: AlexxIT/YandexStation, выбираем раздел Integration, нажимаем на кнопку ADD.

HACS выполнит поиск репозитория и покажет его название, нажимаем на появившееся название.

В открывшемся окне нажимаем на кнопку INSTALL THIS REPOSITORY IN HACS.

Выбираем последнюю версию (отобразится по умолчанию) и нажимаем на кнопку INSTALL.

После установки без перезагрузки открываем на боковой панели File Editor и в нём открываем файл configuration.yaml и соблюдая пробелы вносим следующе:

yandex_station: username: myuser # Ваше имя пользователя Яндекс password: mypass # Ваш пороль Яндекс

Перезагружаем сервер: Настройки (боковая панель) > Сервер > Перезагрузить.

Настройка Lovelace и скриптов

После перезагрузки, если всё прошло хорошо, то на главном экране Lovelace появятся карты медиаплеера, где отобразятся все ваши станции.

Уже на этом этапе устройства готовы к использованию, но есть и дополнительные функции.

Добавим скрипт для нашей колонки. В первую очередь, узнаем идентификатор устройства. Для этого нажимаем на три горизонтальных точки в правом верхнем углу медиаплеера, а затем - на шестерёнку в верхнем правом углу открывшейся карточки. Из поля «ID объекта» копируем идентификатор станции, можно пока сохранить в блокнот, он пригодится нам несколько позже.

А теперь давайте сделаем скрипт (последовательность действий), при нажатии на который Яндекс станция должна произнести текст, в котором скажет округлённое значение температуры в зале.

Открываем File Editor и файл scripts.yaml Вствляем в него следующее:

yandex_tts1: alias: TTS зависит от настройки "Режим звука"! sequence: - service: tts.yandex_station_say entity_id: сюда_вставляем_идентификатор_станции data_template: message: Температура в комнате {{ states("sensor.temperature_hall")|round }} градуса.

Разберём данный скрипт подробней:

  • yandex_tts1 — тип TTS, все доступные типы можете посмотреть в Readme репозитория.
  • alias — то, как будет называться скрипт в вашем Lovelace
  • sequence — последовательность действий
  • entity_id — идентификатор устройства (сущности)
  • data_template — шаблон данных
  • message — тип данных (сообщение), где states — состояние, sensor.temperature_hall — устройство (сущность), | - «и», round — округление.

NB: TTS зависит от настройки "Режим звука"! (произнести или выполнить команду). Настроить вывод можно также в карточке медиаплеера.

Если вы поняли эту логику, то без труда сможете освоить и другие скрипты, указанные в Readme или даже реализовать свои.

Со скриптами разобралсь, но давайте теперь добавим немного больше интерактива, а именно, будем общаться с нашим умным домом через телеграм, при помощи Алисы. Для этого нам нужно в configuration.yaml добавить следующее:

telegram_bot: - platform: polling api_key: TELEGRAM_BOT_API_KEY # создайте своего Телеграм бота allowed_chat_ids: - TELEGRAM_USER1_ID # укажите ID своего аккаунта - TELEGRAM_USER2_ID # при желании поддерживается несколько аккаунтов

Где:

telegram_bot — собственно говорим нашем серверу, что дальше идёт описание интеграции с Telegram;platform — тип обмена сообщениями, в данном случае pooling (бот будет всё время слушать наличие новых сообщений), есть ещё webhook, но это другая история, да и учёные ещё спорят о том, что лучше;api_key — мы получим у BotFather при создании бота, инструкций очень много;allowed_chat_ids — в какие чаты разрешено посылать сообщения, тут надо указать ваш ID, сделать это можно, например, написав боту @username_to_id_bot.

Затем добавляем возможность получения уведомлений от Home Assistant в Telegram:

notify: - name: telega platform: telegram chat_id: 123456789 #замените на свой

Где:

notify — активируем сервис уведомлении;name — название уведомления;platform — платформа, при помощи которой будут отправляться уведомления;chat_id — ваш Telegram ID.

Отлично, всё сделано, перегружаем сервер: Настройки > Сервер > Перезагрузить.

Добавляем автоматизации. Для этого , при помощи File Editor, открываем файл automations.yaml и вносим в него следующее:

alias: Яндекс станция получен текст - 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 }}" alias: Яндекс станция получен ответ - 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 }}"

Где:

alias — название автоматизации;trigger — условие, при котором сработает автоматизация;platform — платформа условия, в данном случае - event (событие);event_type — тип события, в данном случае получен текст;action — действия;service — тип действия (вызов службы);entity_id — идентификатор устройства (сущности);data_template — шаблон данных.

Практически всё, осталось настроить красивую карточку нашей станции. Через HACS устанавливаем Mini Media Player. В боковом меню выбираем HACS и в открывшемся окне - Frontend. Нажимаем на большой оранжевый плюс и в поле поиска вводим mini media player. Нажимаем на него и устанавливаем, при помощи кнопки INSTALL THIS REPOSITORY IN HACS, выбираем последнюю версию (отобразится по умолчанию) и нажимаем на кнопку INSTALL.

NB: Если после установки в HACS вы видите, что карточка горит красным цветом, нажмите на неё, затем на три точки и выберете пункт Reinstall.

Перегружаем сервер: Настройки > Сервер > Перезагрузить.

Дальше переходим в Lovelace и добавляем карточку. Для этого нажимаем на три горизонтальных точки в правом углу и нажимаем Настройка интерфейса, затем - большой жёлтый плюс и в открывшемся окне прокручиваем карточки до самого низа, выбираем нажимаем Ручная настройка.

Вносим следующее:

entity: media_player.yandex_station_ff98f0295bb0d99d3070f92a 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 — устройство (сущность), тут вносим идентификатор станции (он у вас где-то в блокноте :));shortcuts — быстрый доступ;attribute — аттрибут, необходимый для идентификации выбранной кнопки;buttons — cобственно сами кнопки, и их типы/действия;columns — колличество колонок;tts — источник TTS;type — тип карточки.

Больше возможных значений в репозитории карточки.

Сохраняемся и получаем что-то вот такое:

Добавляем прочие устройства.

В configuration.yaml добавляем под полем слова password, слово include, и перечисляем устройства, должно получится что-то такое:

yandex_station: username: myuser password: mypass include: - Кондиционер

NB: Следите за отступами

Перегружаем сервер: Настройки > Сервер > Перезагрузить.

И снова переходим в Lovelace и добавляем карточку, для этого нажимаем на три горизонтальных точки в правом углу и нажимаем «Настройка интерфейса», затем - большой жёлтый плюс и в открывшемся окне ищем слово Термостат. Выбираем эту карточку в выпадающем списке поля «Объект» выбираем устройство climate.yandex….

Сохраняем и используем!


Спасибо за статью!

>> yandex_tts1 — тип TTS, все доступные типы можете посмотреть в https://github.com/AlexxIT/YandexStation">Readme репозитория. 

yandex_tts1 это название скрипта
тип TTS определяется используемым сервисом 

service: tts.yandex_station_say
# OR
service: media_player.play_media

и, как я понимаю, типом данных для этого сервиса 

Да, вы правы, ошибся немного с описанием.

Игнат, приветствую!

Спасибо за прекрасную статью!

Маленькая неточность (ошибка в файле автоматизации - 

automations.yaml):

  alias: Яндекс станция  получен текст
- trigger:
  alias: Яндекс станция  получен ответ
- trigger:

а нужно:

- alias: Яндекс станция  получен текст
trigger:
- alias: Яндекс станция  получен ответ
trigger:


И снова забыта недокументированная особенность "Алисы": вместо слов "градуса", "градусов" можно поставить значок °C и "Алиса" сама поймет, когда ей произнести слово "градуса", а когда "градусов".

А в целом статья хорошая - новичкам такой подробный гайд должен сильно помочь. Автору благодарность!

А у меня почему то не озвучивает температуру,говорит,что устройство не найдено... 

Проверьте, что сенсор указан корректно. Xiaomi обычно по умолчанию пишутся как-то так sensor.0x00158d0003590eb4_temperature

Как подключить два аккаунта со станциями к одному homeassistant? Существует такая возможность?

А нет возможности управлять яркостью экрана? ( для Яндекс Станции Макс)

Прошёл мануал, в интеграциях HACS появилась Yandex.Station. Далее зашёл в configuration.yaml, ввел логин и пароль, сохранил, проверил сервер на ошибки в конфиге и перезагрузил. В результате в LoveLace ничего не появилось, а в логах сервера следующее:

Logger: homeassistant
Source: custom_components/yandex_station/config_flow.py:78
First occurred: 12:38:10 (1 occurrences)
Last logged: 12:38:10

Error doing job: Task exception was never retrieved
Traceback (most recent call last):
File "/usr/src/homeassistant/homeassistant/data_entry_flow.py", line 133, in async_init
result = await self._async_handle_step(
File "/usr/src/homeassistant/homeassistant/data_entry_flow.py", line 216, in _async_handle_step
result: Dict = await getattr(flow, method)(user_input)
File "/config/custom_components/yandex_station/config_flow.py", line 44, in async_step_import
return await self.async_step_auth(data)
File "/config/custom_components/yandex_station/config_flow.py", line 78, in async_step_auth
resp = await self.yandex.login_username(user_input['username'],
AttributeError: 'NoneType' object has no attribute 'login_username'

Как побороть?

Добрый день. У меня похожая проблема. После установки по мануалу и перезагрузки в интеграциях обнаружилась моя яндекс станция, но при нажатии кнопки Настроить выдаётся ошибка -
Не удалось загрузить мастер настройки.
В логах сервера следующая ошибка:

Logger: aiohttp.server

Source: custom_components/yandex_station/config_flow.py:79

First occurred: 12:45:39 (2 occurrences)

Last logged: 13:09:50

Error handling request

Traceback (most recent call last):

File "/usr/local/lib/python3.8/site-packages/aiohttp/web_protocol.py", line 422, in _handle_request
resp = await self._request_handler(request)

File "/usr/local/lib/python3.8/site-packages/aiohttp/web_app.py", line 499, in _handle
resp = await handler(request)

File "/usr/local/lib/python3.8/site-packages/aiohttp/web_middlewares.py", line 119, in impl
return await handler(request)

File "/usr/src/homeassistant/homeassistant/components/http/security_filter.py", line 56, in security_filter_middleware
return await handler(request)

File "/usr/src/homeassistant/homeassistant/components/http/request_context.py", line 18, in request_context_middleware
return await handler(request)

File "/usr/src/homeassistant/homeassistant/components/http/ban.py", line 74, in ban_middleware
return await handler(request)

File "/usr/src/homeassistant/homeassistant/components/http/auth.py", line 129, in auth_middleware
return await handler(request)

File "/usr/src/homeassistant/homeassistant/components/http/view.py", line 131, in handle
result = await result

File "/usr/src/homeassistant/homeassistant/components/config/config_entries.py", line 146, in get
return await super().get(request, flow_id)
File "/usr/src/homeassistant/homeassistant/helpers/data_entry_flow.py", line 93, in get
result = await self._flow_mgr.async_configure(flow_id)

File "/usr/src/homeassistant/homeassistant/data_entry_flow.py", line 156, in async_configure
result = await self._async_handle_step(flow, cur_step["step_id"], user_input)

File "/usr/src/homeassistant/homeassistant/data_entry_flow.py", line 214, in _async_handle_step
result: dict = await getattr(flow, method)(user_input)

File "/config/custom_components/yandex_station/config_flow.py", line 100, in async_step_external
return await self.async_step_auth(user_input)

File "/config/custom_components/yandex_station/config_flow.py", line 79, in async_step_auth
resp = await self.yandex.login_username(user_input['username'],

TypeError: 'NoneType' object is not subscriptable

Как починить?

Добрый день. Столкнулся с той же проблемой. Вы нашли решение?



Да. Тут устаревшая инструкция. Связался с разработчиком напрямую, вот его ответ:

Сейчас уже не надо руками ставить интеграцию в конфигах, устанавливаете через HACS потом в интеграции и выбираете Yandex.Station

https://sprut.ai/static/media/cache/00/81/87/5/8049924/77649/1000x_image.png?1619523334" alt="1000x_image.png?1619523334" />

И в
configuration.yaml не нужно ничего прописывать.

Спасибо, получилось)

Mini Media Player не могу в HACS найти. Может надо респозиторий добавить? Может кто-то ссылку дать?


Вернуться назад

Устройства


Яндекс

Яндекс.Станция

(16 отзывов)

Яндекс

Яндекс.Станция Мини

(14 отзывов)

Вернуться назад