dext0r / yandex_smart_home

Adds support for Yandex Smart Home (Alice voice assistant) into Home Assistant
https://docs.yaha-cloud.ru
MIT License
791 stars 113 forks source link

Обновить список устройств - Что-то пошло не так. Попробуйте ещё раз. #2

Closed YaLiC closed 5 years ago

YaLiC commented 5 years ago

После авторизации устройства не добавились. Обновление не помогает. На проксирующий nginx приходят вот такие запросы:

93.158.156.96 - - [29/May/2019:20:04:44 +0700] "POST /api/yandex_smart_home HTTP/1.1" 401 17 "-" "YaAlice/1.0.0.0 Chrome/19.0.1084.5409 Safari/536.5" 77.88.10.81 - - [29/May/2019:20:07:43 +0700] "POST /api/yandex_smart_home HTTP/1.1" 401 17 "-" "YaAlice/1.0.0.0 Chrome/19.0.1084.5409 Safari/536.5" 77.88.10.81 - - [29/May/2019:20:07:45 +0700] "POST /api/yandex_smart_home HTTP/1.1" 401 17 "-" "YaAlice/1.0.0.0 Chrome/19.0.1084.5409 Safari/536.5" 77.88.46.153 - - [29/May/2019:20:08:22 +0700] "POST /api/yandex_smart_home HTTP/1.1" 401 17 "-" "YaAlice/1.0.0.0 Chrome/19.0.1084.5409 Safari/536.5"

dmitry-k commented 5 years ago

Это странно. Документация яндекса не предполагает каких-либо запросов на /api/yandex_smart_home. Должны быть HEAD запросы на /api/yandex_smart_home/v1.0 для проверки работоспособности endpoint-а и GET на /api/yandex_smart_home/v1.0/user/devices для получения списка устройств.

YaLiC commented 5 years ago

Я тоже прочел документацию раза на три и не понимаю, что происходит :( Какие варианты есть, как починить? Есть ли критическая разница в версии http? (v 1.1 v 2)

skysilver-lab commented 5 years ago

Косячек в документации. )) Пинги по факту шлет на корень эндопоинта, а не на v1.0.

16:49:50 0.99605700 POST /smarthome.php 93.158.156.96 <<< {"meta":{"client_id":"ru.yandex.searchplugin\/7.16 (none none; android 4.4.2)","interfaces":{"account_linking":[],"payments":[],"screen":[]},"locale":"ru-RU","timezone":"UTC"},"request":{"command":"ping","original_utterance":"ping","type":"SimpleUtterance"},"session":{"message_id":0,"new":true,"session_id":"98e81c7f-","skill_id":"45e910a8-","user_id":"XXXXXX"},"version":"1.0"}
16:49:50 0.99790800 smarthome.php <<< PING
16:49:50 0.99976600 smarthome.php >>> PONG
16:49:51 0.00130500 smarthome.php >>> {"version":"1.0","session":{"session_id":"98e81c7f-","message_id":0,"user_id":"XXXXXXXXXXXXX"},"response":{"text":"pong"}}
dmitry-k commented 5 years ago

Пингов в документации вообще нет. А навык точно приватный, и умный дом а не обычный диалог?

YaLiC commented 5 years ago

Пингов в документации вообще нет. А навык точно приватный, и умный дом а не обычный диалог?

Пинги есть: https://tech.yandex.ru/dialogs/alice/doc/smart-home/reference/check-docpage/

Навык приватный и именно "умный дом"

skysilver-lab commented 5 years ago

Пинги они шлют по инерции как и для классических навыков https://tech.yandex.ru/dialogs/alice/doc/health-check-docpage/

HEAD https://endpoint_url/v1.0 я у себя не ловил ни разу.

tayanov commented 5 years ago

Как утверждают в документации ошибка

По документации запрос: HEAD https://endpoint_url/v1.0 По факту https://endpoint_url без v1.0 и method: "POST"

dmitry-k commented 5 years ago

Так или иначе пинги не должны быть причиной проблем.

Можете зайти на https://[ha_host:port]/profile и сгенерировать токен (внизу страницы). Потом сделать запрос

curl -i -s -X GET "https://[host:port]/api/yandex_smart_home/v1.0/user/devices" -H "Authorization: Bearer {token}" -H "Content-Type: application/json" -H "X-Request-Id: 1234"

И посмотреть есть ли в ответе устройства.

YaLiC commented 5 years ago

Так или иначе пинги не должны быть причиной проблем.

Можете зайти на https://[ha_host:port]/profile и сгенерировать токен (внизу страницы). Потом сделать запрос

curl -i -s -X GET "https://[host:port]/api/yandex_smart_home/v1.0/user/devices" -H "Authorization: Bearer {token}" -H "Content-Type: application/json" -H "X-Request-Id: 1234"

И посмотреть есть ли в ответе устройства.

Уже проверял так. Запрос делал с разных хостов, как локально с сервера HA, так и через всю цепочку (интернет-nginx-vpn-ha). Ответ есть:

HTTP/2 200 server: nginx date: Thu, 30 May 2019 00:55:13 GMT content-type: application/json content-length: 4301 strict-transport-security: max-age=31536000; includeSubdomains

{"payload": {"devices": [{"capabilities": [{"retrievable": true, "type": "devices.capabilities.on_off"}], "id": "media_player.mpd", "name": "MPD", "type": "devices.types.switch"}, {"capabilities": [{"retrievable": true, "type": "devices.capabilities.on_off"}], "id": "switch.starline_ign", "name": "\u0417\u0430\u0436\u0438\u0433\u0430\u043d\u0438\u0435", "type": "devices.types.switch"}, {"capabilities": [{"retrievable": true, "type": "devices.capabilities.on_off"}], "id": "switch.fluxer", "name": "Fluxer", "type": "devices.types.switch"}, {"capabilities": [{"retrievable": true, "type": "devices.capabilities.on_off"}], "id": "fan.bathroom", "name": "\u0412\u044b\u0442\u044f\u0436\u043a\u0430", "type": "devices.types.other"}, {"capabilities": [{"retrievable": true, "type": "devices.capabilities.on_off"}], "id": "switch.all_light_corridor", "name": "\u041e\u0431\u0449\u0438\u0439 \u0441\u0432\u0435\u0442 \u043a\u043e\u0440\u0438\u0434\u043e\u0440\u0430", "type": "devices.types.switch"}, {"capabilities": [{"retrievable": true, "type": "devices.capabilities.on_off"}], "id": "switch.main_light_corridor", "name": "\u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0441\u0432\u0435\u0442 \u0432 \u043a\u043e\u0440\u0438\u0434\u043e\u0440\u0435", "type": "devices.types.switch"}, {"capabilities": [{"retrievable": true, "type": "devices.capabilities.on_off"}], "id": "switch.spot_light_corridor", "name": "\u0422\u043e\u0447\u0435\u0447\u043d\u0430\u044f \u043f\u043e\u0434\u0441\u0432\u0435\u0442\u043a\u0430 \u0432 \u043a\u043e\u0440\u0438\u0434\u043e\u0440\u0435", "type": "devices.types.switch"}, {"capabilities": [{"retrievable": true, "type": "devices.capabilities.on_off"}], "id": "switch.back_light_corridor", "name": "\u0414\u0430\u043b\u044c\u043d\u0438\u0439 \u0441\u0432\u0435\u0442 \u0432 \u043a\u043e\u0440\u0438\u0434\u043e\u0440\u0435", "type": "devices.types.switch"}, {"capabilities": [{"retrievable": true, "type": "devices.capabilities.on_off"}], "id": "light.backlight_bedroom", "name": "\u041f\u043e\u0434\u0441\u0432\u0435\u0442\u043a\u0430 \u0432 \u0434\u0435\u0442\u0441\u043a\u043e\u0439", "type": "devices.types.light"}, {"capabilities": [{"retrievable": true, "type": "devices.capabilities.on_off"}], "id": "light.h801_hall", "name": "\u041f\u043e\u0434\u0441\u0432\u0435\u0442\u043a\u0430 \u0432 \u0437\u0430\u043b\u0435", "type": "devices.types.light"}, {"capabilities": [{"retrievable": true, "type": "devices.capabilities.on_off"}], "id": "light.h801_kitchen", "name": "\u041f\u043e\u0434\u0441\u0432\u0435\u0442\u043a\u0430 \u043d\u0430 \u043a\u0443\u0445\u043d\u0435", "type": "devices.types.light"}, {"capabilities": [{"retrievable": true, "type": "devices.capabilities.on_off"}], "id": "light.sonoff_bathroom", "name": "\u0421\u0432\u0435\u0442 \u0432 \u0432\u0430\u043d\u043d\u043e\u0439", "type": "devices.types.light"}, {"capabilities": [{"retrievable": true, "type": "devices.capabilities.on_off"}], "id": "light.sonoff_toilet", "name": "\u0421\u0432\u0435\u0442 \u0432 \u0442\u0443\u0430\u043b\u0435\u0442\u0435", "type": "devices.types.light"}, {"capabilities": [{"retrievable": true, "type": "devices.capabilities.on_off"}], "id": "switch.switch_pc", "name": "\u0420\u0430\u0437\u0440\u0435\u0448\u0430\u0442\u0435\u043b\u044c \u041f\u041a", "type": "devices.types.switch"}, {"capabilities": [{"retrievable": true, "type": "devices.capabilities.on_off"}], "id": "switch.coffee_on_work", "name": "Coffee on work", "type": "devices.types.switch"}, {"capabilities": [{"retrievable": true, "type": "devices.capabilities.on_off"}], "id": "switch.switch_tv", "name": "Switch TV", "type": "devices.types.switch"}, {"capabilities": [{"retrievable": true, "type": "devices.capabilities.on_off"}], "id": "switch.plug_158d000273e820", "name": "\u0427\u0430\u0439\u043d\u0438\u043a", "type": "devices.types.switch"}, {"capabilities": [{"retrievable": true, "type": "devices.capabilities.on_off"}], "id": "light.gateway_light_7c49eb1b3bc4", "name": "MiHome Hub", "type": "devices.types.light"}], "user_id": "ff684103829f424cb87cb0f185fba1ea"}, "request_id": "1234"}

YaLiC commented 5 years ago

Ещё пронаблюдал за запросами от яндекса... их нет, не считая пингов.

Сразу после авторизации, единственный запрос это:

77.88.46.153 - - [30/May/2019:11:16:47 +0700] "POST /auth/token HTTP/1.1" 200 317 "-" "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/536.5 (KHTML, like Gecko) YaBrowser/1.0.1084.5402 Chrome/19.0.1084.5409 Safari/536.5"

В профиле появился новый токен:

Токен обновления для https://social.yandex.net/ Создан 30 мая 2019 г., 11:16 Последнее использование 30 мая 2019 г., 11:16 из 77.88.46.153

Возможно проблема на стороне яндекса. На всякий случай Диалог я пересоздал, всё сделал по инструкции.

ad commented 5 years ago

У меня была такая ошибка, решилась ограничением количества типов, доступных для Яндекса:

yandex_smart_home:
  exposed_domains:
    - switch
    - light
YaLiC commented 5 years ago

У меня была такая ошибка, решилась ограничением количества типов, доступных для Яндекса:

yandex_smart_home:
  exposed_domains:
    - switch
    - light

Добавил у себя в конфигурации ещё пункт про "- fan" Это несколько странно, однако помогло - устройства добавились. Всем спасибо!

dmitry-k commented 5 years ago

А не пробовали вычислить какое конкретно устройство вызывало проблемы? Я на глаз не вижу ничего подозрительного в вашем devices ответе, но что-то же было причиной.

YaLiC commented 5 years ago

А не пробовали вычислить какое конкретно устройство вызывало проблемы? Я на глаз не вижу ничего подозрительного в вашем devices ответе, но что-то же было причиной.

Сверил выдачи списка устройств до и после правки конфигурации и нашел только один различающийся пункт: {"capabilities": [{"retrievable": true, "type": "devices.capabilities.on_off"}], "id": "media_player.mpd", "name": "MPD", "type": "devices.types.switch"}

Но возможно дело не только в этом, точнее сказать не могу. Я отправлял заявку в техподдержку Яндекса со ссылкой на этот "issues". Может быть они что-то исправили у себя.

YaLiC commented 5 years ago

Моё обращение в тех поддержку:

В документации есть неточность https://tech.yandex.ru/dialogs/alice/doc/smart-home/reference/check-docpage/

Формат запроса платформы умного дома Получив реплику пользователя (голосовой помощник Алиса) или действие пользователя (ПП), платформа умного дома отправляет запрос на Endpoint URL провайдера (endpoint_url). HEAD https://endpoint_url/v1.0

А по факту приходит:

77.88.10.81 - - [29/May/2019:20:55:29 +0700] "POST /api/yandex_smart_home HTTP/1.1" 401 17 "-" "YaAlice/1.0.0.0 Chrome/19.0.1084.5409 Safari/536.5" 77.88.46.154 - - [29/May/2019:20:55:34 +0700] "POST /api/yandex_smart_home HTTP/1.1" 401 17 "-" "YaAlice/1.0.0.0 Chrome/19.0.1084.5409 Safari/536.5" 93.158.158.76 - - [29/May/2019:20:56:30 +0700] "POST /api/yandex_smart_home HTTP/1.1" 401 17 "-" "YaAlice/1.0.0.0 Chrome/19.0.1084.5409 Safari/536.5" 77.88.10.80 - - [29/May/2019:20:56:37 +0700] "POST /api/yandex_smart_home HTTP/1.1" 401 17 "-" "YaAlice/1.0.0.0 Chrome/19.0.1084.5409 Safari/536.5" 93.158.156.97 - - [29/May/2019:20:56:50 +0700] "POST /api/yandex_smart_home HTTP/1.1" 401 17 "-" "YaAlice/1.0.0.0 Chrome/19.0.1084.5409 Safari/536.5" 77.88.46.153 - - [29/May/2019:20:56:50 +0700] "POST /api/yandex_smart_home HTTP/1.1" 401 17 "-" "YaAlice/1.0.0.0 Chrome/19.0.1084.5409 Safari/536.5" 77.88.46.156 - - [29/May/2019:20:57:11 +0700] "POST /api/yandex_smart_home HTTP/1.1" 401 17 "-" "YaAlice/1.0.0.0 Chrome/19.0.1084.5409 Safari/536.5" 77.88.46.155 - - [29/May/2019:20:59:27 +0700] "POST /api/yandex_smart_home HTTP/1.1" 401 17 "-" "YaAlice/1.0.0.0 Chrome/19.0.1084.5409 Safari/536.5" 93.158.158.74 - - [29/May/2019:20:59:38 +0700] "POST /api/yandex_smart_home HTTP/1.1" 401 17 "-" "YaAlice/1.0.0.0 Chrome/19.0.1084.5409 Safari/536.5" 93.158.158.75 - - [29/May/2019:21:00:53 +0700] "POST /api/yandex_smart_home HTTP/1.1" 401 17 "-" "YaAlice/1.0.0.0 Chrome/19.0.1084.5409 Safari/536.5" 77.88.46.154 - - [29/May/2019:21:01:13 +0700] "POST /api/yandex_smart_home HTTP/1.1" 401 17 "-" "YaAlice/1.0.0.0 Chrome/19.0.1084.5409 Safari/536.5" 93.158.156.96 - - [29/May/2019:21:01:35 +0700] "POST /api/yandex_smart_home HTTP/1.1" 401 17 "-" "YaAlice/1.0.0.0 Chrome/19.0.1084.5409 Safari/536.5"

и вот здесь:

Формат ответа провайдера Провайдер должен ответить на полученный от платформы умного дома запрос согласно формату. HTTP/1.1 200 OK

На сколько критична версия HTTP? (HTTP/2.0)

Ответ:

Спасибо за замечание, мы обязательно внесем изменения в документацию в ближайшее время. Что касается версии HTTP, увы, в настоящее время не можем гарантировать корректную работу с 2.0. ... гарантировать не могут, но у меня работает.

Запросы от Яндекса стали приходить нормально:

77.88.46.153 - - [31/May/2019:09:48:13 +0700] "POST /auth/token HTTP/1.1" 200 219 "-" "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/536.5 (KHTML, like Gecko) YaBrowser/1.0.1084.5402 Chrome/19.0.1084.5409 Safari/536.5" 2a02:6b8:c18:2f87:10e:121:a764:0 - - [31/May/2019:09:48:16 +0700] "POST /api/yandex_smart_home/v1.0/user/devices/action HTTP/2.0" 200 307 "-" "Go-http-client/2.0" 5.255.199.169 - - [31/May/2019:09:48:19 +0700] "POST /api/yandex_smart_home HTTP/1.1" 200 0 "-" "YaAlice/1.0.0.0 Chrome/19.0.1084.5409 Safari/536.5" 2a02:6b8:c0b:2f89:10e:121:b37e:0 - - [31/May/2019:09:48:58 +0700] "GET /api/yandex_smart_home/v1.0/user/devices HTTP/2.0" 200 802 "-" "Go-http-client/2.0"

suglosta commented 5 years ago

Столкнулся с такой же проблемой. Умение доступно, объединение акаунтов проходит, а список не обновляется - Что-то пошло не так. Проверял работу сервиса, шаг за шагом все проверил и ничего не нашел. И вдруг... обнаружил, что Яндекс не умеет отбрабатывать слеш на конце URL :) В общем, если вроде все работает, но все равно не работает проверьте, что на конце Endpoint нет слеша.

Endpoint URL | https://[YOUR HOME ASSISTANT URL:PORT]/api/yandex_smart_home ^^^^^

varakirill commented 5 years ago

Вчера перестал обновляться список устройств, такая же ошибка "Что-то пошло не так. Попробуйте ещё раз позднее." Отвязывал навык, пересоздавал его, игрался с фильтрами - авторизация успешно проходит, а при обновлении списка устройств все равно ошибка...

mSapik commented 5 years ago

Тоже столкнулся с проблемой, не получается обновить список устройств. Изначально все получилось и все управлялось, после обновления HA, привязка слетела, объединить аккаунты получается а при обновлении списка устройств выскакивает "Internal server error". Проверил с endpoint url все впорядке, слэша нет вконце, ограничить список устройств тоже не помогает, оставил только свичи и та же ошибка. Подскажите что можно еще попробовать?

alryaz commented 4 years ago

Случайно упомянул тикет, извиняюсь