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

08 августа 2020, 08:35

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

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

Содержание 

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

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

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

1600x_image.png?1596817330

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

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

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

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

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

1600x_image.png?1596817330

Далее нам понадобится аддон 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 выполнит поиск репозитория и покажет его название, нажимаем на появившееся название.

1600x_image.png?1596826680
1600x_image.png?1596826681

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

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

1600x_image.png?1596826680

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

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

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

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

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

1600x_image.png?1596821905

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

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

1600x_image.png?1596821905
1600x_image.png?1596821905

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

Открываем 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 — тип карточки.

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

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

1600x_image.png?1596821905

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

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

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

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

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

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

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


Все новости мира умных домов - t.me/SprutAI_News или Instagram
Остались вопросы? Мы в Telegram - @SprutAI

Хочешь умный дом но нет времени разбираться?
Посмотри примеры работ и выбери себе интегратора.
  1. (VGoR)
    (VGoR) 11 месяцев назад

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

  2. (ryadnov)
    (ryadnov) 11 месяцев назад

    >> yandex_tts1 — тип TTS, все доступные типы можете посмотреть в Readme репозитория

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

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

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

  3. (Alexander_Znamensky)
    (Alexander_Znamensky) 11 месяцев назад

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

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

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

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

    а нужно:

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


  4. Leader Leader (Alting)
    Leader Leader (Alting) 11 месяцев назад

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

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

  5. (BeAngel)
    (BeAngel) 11 месяцев назад

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

    • Игнат Вакорин (werewolfe)
      Игнат Вакорин (werewolfe) 11 месяцев назад

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

  6. (Karsak)
    (Karsak) 7 месяцев назад

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

  7. (agamemnen)
    (agamemnen) 5 месяцев назад

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

  8. (Gonochnik)
    (Gonochnik) 4 месяца назад

    Прошёл мануал, в интеграциях 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'

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

  9. (ksv_)
    (ksv_) 3 месяца назад

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

    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

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

    • (LeVbIbI4)
      (LeVbIbI4) 3 месяца назад

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

      • (ksv_)
        (ksv_) 3 месяца назад

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

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

        1000x_image.png?1619523334

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

        • (LeVbIbI4)
          (LeVbIbI4) 3 месяца назад

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

  10. Павел Кардаков  (RARog)
    Павел Кардаков (RARog) отредактировано месяц назад
    Комментарий удален
К списку статей

Устройства в материале

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

Производитель: Яндекс

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

Производитель: Яндекс

Скидки для сообщества

Интернет-магазин yourhomekit.ru

+7 914 550-51-11
Промокод:
SPRUT-BLG
Размер скидки:
8%
Cамый большой ассортимент в России аксессуаров Apple HomeKit

Похожие статьи

17 декабря 2019, 17:49
Универсальный привод для автоматического удаленного открытия окон с простой интеграцией в умные дома.
20 октября 2018, 22:57
Теоретические основы протокола MQTT и описание того, как он работает и для чего используется
24 августа 2018, 12:18
Пошаговая установка HomeAssistant
15 ноября 2018, 13:11
Xiaomi Mi Remote 360 добавляем Apple HomeKit
15 ноября 2018, 09:42
Способы автоматизации механических ворот
28 августа 2018, 09:48
От голого Raspbian до веб-интерфейса homebridge за четыре команды в терминале.
27 августа 2018, 10:14
Интегрируем ХА в HomeKit
03 октября 2018, 22:03
Как собрать и настроить Hyperion Ambilight - адаптивную подсветку ТВ.
29 октября 2019, 07:59
Умный домофон на базе nodeMCU с прошивкой ESPHome.
01 ноября 2018, 09:27
Настройка Deconz USB стика ConBee от Dresden Elektronik в Hass.io и некоторые особенности эксплуатации