Статья

Добавляем Home Assistant в Умный Дом Яндекса

Необходимое для начала

  •  Аккаунт в Яндексе (он же у Вас есть, верно?)
  •  Настроенный Home Assistant, с подключенным внешним IP и ssl на домене, или настроенным dDNS (я использую duckdns.org). Описывать первоначальную настройку HA я не буду, здесь на sprut.ai написано об этом (и немного больше) уже очень много.

Сам процесс настройки подключения сервисов

Для начала необходимо создать новый каталог с именем "custom_components" , если у Вас его нет (как у меня ранее), путь ~/.homeassistant/custom_directory/ или ~/config/custom_components/ в зависимости от места и версии HA).

Далее нужно склонировать туда гит, на котором вся система и работает - GitHub (все лайки именно туда, писал его не я) или же создать вручную папку yandex_smart_home и туда скопировать файлы из архива, которые были скачаны из гитхаба оттуда.

Я в Хассио в конфигураторе в web загружал каждый из 10 файлов с указанного выше гита по одному. 

Но вы можете подключиться к малине по ssh, перейти в папку с конфигом вашей ХА сборки, перейти в папку custom_components (если ее нет - надо создать). И там сделать следующее:

git clone https://github.com/dmitry-k/yandex_smart_home.git

Далее прописываем в configuration.yaml этот самый компонент:

  • как я, просто добавляем в конце файла "yandex_smart_home:" (без кавычек, конечно);
  • или же "курим" расширенный мануал от создателя компонента этого: ReadMe.

После, проверяем, на всякий случай, конфигурацию в настройках, и перезагружаем HA.

После этого уже переходим на сам процесс подключения всего, что сделали, в Умный дом Яндекса:

  •  Создаём Навык Умный Дом на https://dialogs.yandex.ru/developer/  (Очень важно создавать навык именно залогинившись с того аккаунта, в котором будем будем устройства использовать в Яндексе).
  •  Заполняем все поля, отмеченные звездочкой.
Название - указывем любое вам понравившееся, которое не будет занято. В пункте Endpoint URL пишем https://[внешний_адрес_HA:порт]/api/yandex_smart_home.Включаем приватность "Не показывать в каталоге".Имя разработчика - пишем свой ник или что душе угодно. Ни на что не влияет.

Не закрываем страничку и переходим пока на https://dialogs.yandex.ru/developer/settings/oauth , где добавляем новую связку аккаунтов:

НазваниеИдентификатор приложения/Client identifier : https://social.yandex.net/Секрет приложения/Client Password (без него сохранить не получилось связку, но в итоге она из неё сама удалилась. Я вписал туда стандартный, видимо, пароль из файла secrets.yaml. Может можно вообще что угодно вписать, или этот "секрет" где-то настраивается и это важно - но я об этом не знаю хD): passwordURL авторизации/API authorization endpoint: https://[внешний_адрес_сервера_HA:порт]/auth/authorizeURL для получения токена/Token Endpoint: https://[внешний_адрес_сервера_HA:порт]/auth/tokenURL для обновления токена/Refreshing an Access Token: https://[внешний_адрес_сервера_HA:порт]/auth/token

Сохраняем связку, и выбираем её на страничке из списка, где мы настраивали сам навык ранее.

После, справа жмем кнопку "На модерацию" (она проходит мгновенно, так как мы выбрали ранее "приватный навык") и "Опубликовать".

По сути все: осталось в приложении Яндекс на Android/iOS или на ПК в браузере  добавить нашего нового "производителя". Покажу на примере мобильного приложения.

Открываем левое меню в приложении Яндекс и выбираем пункт Устройства.
Здесь открывается список с устройствами, которые можно подключить. Нам нужен пункт Умный дом.
Попадаем непосредственно в окно самого Умного Дома Яндекс, где и происходит управление устройствами, и создание сценариев. Сейчас нажимаем на плюс для добавления.
Помимо "официально" поддерживаемых производителей, у нас появится пункт, который мы ранее и создавали - выбираем его.
Откроется страничка созданного навыка - его описание. Нажимаем на "Объединить аккаунты", нас перебрасывает на страницу входа в Home Assistant: вводим логин\пароль от своего аккаунта там.
Нас возвращает после этого на страничку самого "навыка", где уже нажимаем на "Обновить список устройств". Немного ждем..

И все доступные устройства из HA добавляются в список устройств.
Надписей красным цветом и восклицательных знаков не пугаемся: необходимо лишь переназвать каждое устройство, используя "кириллицу, без пунктуации и спецсимволов; между словами и числами ставьте пробелы".

На данный момент поддерживаются только вот эти domains в HA:

  • group (on/off)
  • input_boolean (on/off)
  • switch (on/off)
  • fan (on/off)
  • light (on/off)
  • cover (on/off)
  • media_player (on/off, mute/unmute)

В дальнейшем будет также добавлена возможность проброса из Home Assistant в Яндекс:

  • поддержка громкости в media_player;
  • яркость/цвет ламп;
  • скорость увлажнителя/вентилятора.

На этом все, мы вместе смогли подключить те устройства, которые "нативно" не поддерживаются пока в Умном Доме Яндекс.
Кроме того, это позволяет избежать возможных лагов из-за cloud-2-cloud системы, когда Яндекс обращается в облако производителя, который обращается в облако подключенного к нему производителя, который.... - и все они лагают =)
Остаются, по сути, только Ваш сервер, за который Вы и в ответе, и облако самого Яндекса, куда все и интегрируется.

Текст составлен с неоценимой помощью @OXOTH1K , а также всего сообщества, которые и двигают весь прогресс на основе "ступенек" от компаний, подобных Яндексу.


Голосовое управление для всех членов семьи, а не только на кого настроена привет сири. 

Спасибо!

Спасибо 👍

Есть кто уже настроил? Я столкнулся с проблемой на этапе "обновления" списка устройств, яндекс сообщает что "что-то пошло не так". 

Та же ерунда. При обновлении пишет "internal server error".... ил это на яндексе беда какая-то?....

Удобнее сразу прописать entity_config. В яндекс влетает с нужными именами и по нужным комнатам. 

Не одскажете на какой версии ХА должен работать этот кастомный компонент?

после переноса файлов с гитхаба в папку yandex_smart_home в custom_components и добавления нескольких строк в конфиг у меня в ХА версии 0.92.2 в докере на synology даже проверка конфигурации не проходит :( . причем веб морда ХА зависает на этом и приходится перегружать контейнер средствами докера. Если же пробовать запустить, то получаю в логе следующую ошибку (про атрибут медиа плеера):

2019-05-30 00:26:05 ERROR (MainThread) [homeassistant.setup] Error during setup of component cloud


Traceback (most recent call last):


  File "/usr/local/lib/python3.7/asyncio/runners.py", line 43, in run return loop.run_until_complete(main)



  File "uvloop/loop.pyx", line 1451, in uvloop.loop.Loop.run_until_complete


  File "/usr/src/app/homeassistant/__main__.py", line 283, in setup_and_run_hass


    log_no_color=args.log_no_color)


  File "/usr/src/app/homeassistant/bootstrap.py", line 180, in async_from_config_file


    config_dict, hass, enable_log=False, skip_pip=skip_pip)


  File "/usr/src/app/homeassistant/bootstrap.py", line 91, in async_from_config_dict


    await _async_set_up_integrations(hass, config)


  File "/usr/src/app/homeassistant/bootstrap.py", line 394, in _async_set_up_integrations


    for domain in domains_to_load


  File "/usr/src/app/homeassistant/setup.py", line 50, in async_setup_component


    return await task  # type: ignore


  File "/usr/src/app/homeassistant/setup.py", line 126, in _async_setup_component


    hass, config, integration)


  File "/usr/src/app/homeassistant/config.py", line 756, in async_process_component_config


    component = integration.get_component()


  File "/usr/src/app/homeassistant/loader.py", line 130, in get_component


    cache[self.domain] = importlib.import_module(self.pkg_path)


  File "/usr/local/lib/python3.7/importlib/__init__.py", line 127, in import_module


    return _bootstrap._gcd_import(name[level:], package, level)


  File "<frozen importlib._bootstrap>", line 1006, in _gcd_import


  File "<frozen importlib._bootstrap>", line 983, in _find_and_load


  File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked


  File "<frozen importlib._bootstrap>", line 677, in _load_unlocked


  File "<frozen importlib._bootstrap_external>", line 728, in exec_module


  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed


  File "/config/custom_components/yandex_smart_home/__init__.py", line 12, in <module>


    from .const import (


  File "/config/custom_components/yandex_smart_home/const.py", line 73, in <module>


    (media_player.DOMAIN, media_player.DEVICE_CLASS_TV): TYPE_MEDIA_DEVICE_TV,


AttributeError: module 'homeassistant.components.media_player' has no attribute 'DEVICE_CLASS_TV'


During handling of the above exception, another exception occurred:


Traceback (most recent call last):


  File "/usr/src/app/homeassistant/setup.py", line 153, in _async_setup_component


    hass, processed_config)


  File "/usr/src/app/homeassistant/components/cloud/__init__.py", line 156, in async_setup


    await prefs.async_initialize()


  File "/usr/src/app/homeassistant/components/cloud/prefs.py", line 25, in async_initialize


    prefs = await self._store.async_load()


  File "/usr/src/app/homeassistant/helpers/storage.py", line 81, in async_load


    return await self._load_task


concurrent.futures._base.CancelledError

У меня 93.2 версия, последняя что доступна из вебморды, под крайней мере.

Я когда сам разбирался, узнал что на последних версиях HA уже несколько раз менялась папка компонентов: когда-то ранее это была custom_component, и даже custom_directory


Но судя по документации на https://developers.home-assistant.io/docs/en/creating_component_loading.html">https://developers.home-assistant.io/docs/en/creating_component_loading.html

сейчас надо размещать в 
<config directory>/custom_components/<component name>. Так что для моего варианта в докере config/custom_components/yandex_smart_home выглядит правильной папкой.

Для меня гораздо актуальнее другое -- как добавить устройства от яндекса в HA? А то подарили лампочку, но что с ней пока делать -- не понятно. 

Homebridge интересно получится добавить когда-нибудь? Не хотелось бы еще и Home Assistant заводить.


Прошу помощи. Дошел до пункта "объединить аккаунты" в приложении яндекса, 

перебрасывает на страницу входа в Home Assistant:  логин\пароль от своего аккаунта.

Но ругается на провайдера аутентификации. 
Выдаёт надпись красного цвета: "Error. Invalid client id or redirect uri

Не могу зайти ни через Home assistant local, ни через Legacy API Password

Настройка через duckdns,белый IP, так же через него проброшена GHmini и она спокойно работает. Через duckdns спокойно захожу к себе в умный дом.
Я так понимаю что проблема в доступе именно яндекса к моему duckdns. Где это можно поглядеть или как его докинуть в доверенные источники?!

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

Разработчик кастомного компонента мне уточнил, что нужна версия ХА не ниже 0.93 (он добавил это в readme). После обновления моего hass удалось настроить связку с Яндексом как описано в статье.

У меня самая последняя версия, 0.93.2
И всё-равно не даёт пароли к учетной записи HA ввести, ругается:

 "Error. Invalid client id or redirect uri

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

Спасибо за статью, пришлось использовать приложение на телефоне, чтобы объеденить аккаунты, в браузере никак не получалось. еще б команды можно было переименовывать, например - Алиса, пусти/выпусти кота. )

Я сделал отдельные сценарии, где лишь одна команда, которая как раз и делает более удобным "живым" использовании устройств

А кто-то может подскажет как настроить https без убийства 80го порта и на белом IP?)

P.S. нашел решение с помощью других аддонов hass.io


DuckDNS+Nginx, инструкция здесь:  https://help.konnected.io/support/solutions/articles/32000023964-set-up-hass-io-with-secure-remote-access-using-duckdns-and-nginx-proxy">https://help.konnected.io/support/solutions/articles/32000023964-set-up-hass-io-with-secure-remote-access-using-duckdns-and-nginx-proxy

А кто-то может подскажет как настроить https без убийства 80го порта и на белом IP?)

Спасибо за статью. После нажатия на объединить идет переадресация на мой домен и тут же ошибка 404, хотя через браузер hass доступен по https. Подскажите в чем может быть дело?

Sapik, такая же ерунда((( не знаю, как починить

Только что починил. Просто удалил старый диалог и создал с нуля с такими же данными, как в старом диалоге. Но все заработало



Столкнулся с проблемой, что при попытке связать аккаунты, открывается страница авторизации, ввожу пароль от API, код из двухфакторки и после этого прилетает ошибка. Не подскажите, в какую сторону копать?

1000x_image.jpg?1565515336

В описании значится так: cover (on/off = close/open), но на практике все наоборот, что бы открыть шторы или поднять жалюзи, надо просить Алису их закрыть, а для того чтобы закрыть, надо попросить ее открыть! Так только у меня или у всех?


У меня та же беда. Прошу открыть ворота, а Алиса закрывает! Как исправить?

Как добавить компонент Яндекс.Хоум при установке хассио в докере?

АПД: разобрался. Вроде несложно.

Как?

При попытке обновить список устройств стало появляться сообщение: "Произошла ошибка, попробуйте позже. Если ошибка продолжает возникать, поищите решение проблемы на странице помощи". Никто не сталкивался?

Та же ситуация. Удалось ли победить?

Да. У меня в

configuration.yaml на тот момент появилось устройство с типом чайник (water_heater), после добавления которого все и перестало работать. Кастомный компонент не поддерживает этот тип устройств.
После того как в ручную указал импортируемые

типы - все заработало.



Спасибо. Перепробовал минимальные конфигурации, но засада оказалась в адресе ipv6, прописанном на duckdns.org. Пока удалил и заработало по ipv4 только.

Друзья, а как нонче настроить https в HA, раньше с этим спокойно duckdns справлялось, а теперь - шиш. А для яндекса и гугла требуется https. Как быть, кто чем пользуется?

все по инструкции, https работает, в папку нужную все скопировал, в конфиг добавил, в HA ошибок нет, но когда создаю навык как указано и при опубликовании выдает:


Ошибки валидации:
— Endpoint URL: Ошибка реализации протокола умного дома:
availability: Not Found
devices: Not Found
devices_action: Not Found
devices_query: Not Found
user_unlink: Not Found

Помогите, Алиса скучает и палчет!

А доступ в ХА из вне настроен?

Автор, а можно ссылку на статью по настройке SSL? Настроил все по инструкции, логинюсь через приложение яндекса НА, но после попытки обновить устройства выскакивает сообщение "Произошла ошибка попробуйте позже" Грешу на эти сертификаты, настраивал домен через роутер, а не через дюк ДНС



На шаге, где в мобильном приложении надо нажать "Обновить список устройств", возникает непонятная ошибка (см. скриншот). В HASS логах вижу только:
2020-06-29 02:32:16 DEBUG (MainThread) [homeassistant.components.http.auth] Authenticated http://37.9.68.172">37.9.68.172 for /yandex_smart_home/v1.0/user/devices using bearer token

Никак ошибок нет, ровно, как и других сообщений, связанных с Yandex.
У меня работает интеграция в Google Home, поэтому полагаю, что с доменом и SSL сертификатами всё в порядке. Что можно посмотреть?

https://sprut.ai/static/media/cache/00/56/90/5/4241012/61604/1000x_image.jpg?1593466537" alt="1000x_image.jpg?1593466537" />

такая же фигня вылезла, раньше всеработало

Детали issue https://github.com/dmitry-k/yandex_smart_home/issues/82#issuecomment-652272941">тут. У вас такая же ошибка в логе HASS?

Я почти месяц мозг ломал с этой ошибкой, ни кто не мог ответить. Сегодня внезапно узнал, что яндексу просто не нравится название диалога.. Пишите всё что угодно, только не "Home Assistant" и всё что с ним связано, подозреваю что он находит уже что-то подобное и поэтому выдает ошибку..

У меня получилось! Но всё же есть большое разочарование. 


Во-первых, Яндекс "затянул к себе" датчики температуры и влажности, а датчики давления почему-то нет (у меня все это хозяйство реализовано через Tasmota/MQTT).
Во-вторых, оказывается хвалёная Алиса может только включать и выключать, а вот озвучить температуру (или вообще любое состоние/значение/параметр) она не может. 
В-третьих, невозможно изменить логику или синтаксис голосовых команд Алисы. Вот пример - у меня в HA настроена интеграция с сигнализацией StarLine, установленной в автомобиле. Среди прочих объектов там имеется объект, изначально называемый "security". Это - состояние охраны. В русской локализации интерфейса HA на соответствующей карточке мы имеем команду "ОТКРЫТЬ" (если машина поставлена на охрану) или "ЗАКРЫТЬ" (если машина снята с охраны). Не совсем логично, но если мы дадим этому параметру дружеское имя "Машина", то станет, в принципе, логично - "машину закрыть, машину открыть". Но вот настроить Алису так, чтобы она понимала команды "Открыть/Закрыть машину" (а вообще бы, в идеале - "Снять с охраны/Поставить на охрану") нельзя - она понимает только команды Включи/Выключи". Вот и получается, что если нужно снять машину с охраны, то Алисе нужно говорить "Включи машину", а если поставить на охрану - то "Выключи машину". Если же вместо "Машина" использовать, скажем, "Сигнализация" или "Охрана", то получится вообще абсурд - для выключения сигнализации придется говорить "Включи сигнализацию", и наоборот.



Подскажите, удалил диалог, а все устройства, что были в нем - остались в моем доме. никак удалить не могу.

создал новый далок со всеми параметрами как были прежде, яндекс подцепил устройства заново, но старые так и не получается удалить. что можно сделать?

https://sprut.ai/static/media/cache/00/47/24/5/6271361/71518/1000x_image.png?1607019709" alt="1000x_image.png?1607019709" />https://sprut.ai/static/media/cache/00/47/24/5/6271361/71519/1000x_image.png?1607019709" alt="1000x_image.png?1607019709" />

Нужно удалить комнату, где находятся зависшие устройства. После этого (без комнаты) устройства можно будет удалить.

Что-то не так со связкой компонент Яндекс. Вчера вечером все работало и загрузились новые устройства. До этого то работало то не работало. Сегодня ночью все перестало работать. ((

Добро время суток!

подскажите 



Статус Ошибка проверки доступности Endpoint URL провайдера Тип ошибкиURL не найденURLhttps://blablabla.duckdns.org:8123/api/yandex_smart_homeМетод запросаHEADКод ответа404

Проверяйте пути. Какие по указанным путям идут ответы.

https://blablabla.duckdns.org:8123/api/yandex_smart_home идет ошибка 404



https://blablabla.duckdns.org:8123/auth/authorize идет 

Ошибка: Message format incorrect: required key not provided @ data['redirect_uri'] 



https://blablabla.duckdns.org:8123/auth/token ошибка  405: Method Not Allowed

Это у вас что за путь? 

В статье идут. Адрес:порт/... В точках вписали нужное для каждой строки?

по адрес порт у вас ha должен открываться. Если не открывается, значит вы не правильно настроили https.

HA открывается без проблемм по   https://blablabla.duckdns.org:81...

Что то не так настроено. Во втором запросе ответ должен содержать в скобках client id. Проверяйте настройки...

ничего не помогает! дайте идею что может не работать.

Как вариант. Чистый ha. Чистый конфиг и добавлять по 1 устройству.

не помогло.

С логами к разработчику. Просто чтобы у вас все устройства не поддерживались Яндексом я не верю... А с пустым ha и конфигом что происходит?

ставлю НА по уроку Алекса пути отличаються расположения НА может тут загвоздка.

Пути ни как не должны влиять. 

правда если вы под Алексом понимаете a.kvazis, то некоторые его уроки лучше не смотреть, а читать разработчиков. Меньше потом исправлять...


вариант следующий. Пустой ha в custom components только компонент Яндекс 


далее с нуля настраиваете диалог название нив коем случае не должно быть homeassistent или ha. 


у вас Яндекс должен подключится и сообщить что нет устройств. 

Все банально и просто оказалось. Файрволл Билайн.

Что то тогда не вяжется. А как у вас  открывалось? https://blablabla.duckdns.org:81... 

8123 порт открыт а 443 закрыт провайдером на вход.

А зачем вам 443 порт? Он вообще там не используется... Когда вы идете по https ... <номер порта> вы идете по номеру порта, а не 443. 

Эм. Там вообще про другое... Привиду свой пример. у меня контейнер у котрого на выходе только 8123 порт. Далее с использованием реверс прокси я получаю https на произвольном порту. в моем маршрутизаторе я открываю произвольный порт и только его. на него вешаю диалог яндекса. у меня нет ни 443 ни штатного 8123 порта открытого в интернет. Провайдеру (при использовании белого IP) на порты плевать. Вот если ip серый, то по любому порту зайти будет нельзя, только если у вас есть проброс через сервис типа qc от synology или keendns от кинетик и т.д.

Для всех тех, у кого ошибка при добавлении устройств. 

1. Пробуем вписывать в конфиг только инициализацию компонента.

2. Если не помогает, все устройства в исключения, кроме тех, которые точно поддерживаются и так пока не найдете, какое из устройств даёт некорректный ответ Яндексу.

Компонент и HA обновлены до последний версии. Устройства управляются из Алисы.
Открыл приложение Яндекс, хотел обновить устройства - после нажатия клавиши "обновить список устройств" получаю: "Не удалось обновить список устройств. Подождите немного и попробуйте еще раз.".
Отвязал интеграцию с удалением устройств, прикрепляю заново, авторизуюсь без проблем, жму "обновить список устройств" - и получаю прежнюю ошибку.
Вот скрин: https://prnt.sc/11itz20">https://prnt.sc/11itz20

Отправил в чат поддержки информацию - сказали передадут в поддержку, и те ответят на почту. На гите нашел еще одного пользователя с такой же проблемой. Надеюсь проблема на стороне Яндекса и в ближайшее время решится.

Приветствую!

Ни у кого, случайно, нет списка адресов Яндекса для организации access list?


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