Closed YaLiC closed 5 years ago
Это странно. Документация яндекса не предполагает каких-либо запросов на /api/yandex_smart_home. Должны быть HEAD запросы на /api/yandex_smart_home/v1.0 для проверки работоспособности endpoint-а и GET на /api/yandex_smart_home/v1.0/user/devices для получения списка устройств.
Я тоже прочел документацию раза на три и не понимаю, что происходит :( Какие варианты есть, как починить? Есть ли критическая разница в версии http? (v 1.1 v 2)
Косячек в документации. )) Пинги по факту шлет на корень эндопоинта, а не на 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"}}
Пингов в документации вообще нет. А навык точно приватный, и умный дом а не обычный диалог?
Пингов в документации вообще нет. А навык точно приватный, и умный дом а не обычный диалог?
Пинги есть: https://tech.yandex.ru/dialogs/alice/doc/smart-home/reference/check-docpage/
Навык приватный и именно "умный дом"
Пинги они шлют по инерции как и для классических навыков https://tech.yandex.ru/dialogs/alice/doc/health-check-docpage/
HEAD https://endpoint_url/v1.0 я у себя не ловил ни разу.
Как утверждают в документации ошибка
По документации запрос: HEAD https://endpoint_url/v1.0 По факту https://endpoint_url без v1.0 и method: "POST"
Так или иначе пинги не должны быть причиной проблем.
Можете зайти на 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"
И посмотреть есть ли в ответе устройства.
Так или иначе пинги не должны быть причиной проблем.
Можете зайти на 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"}
Ещё пронаблюдал за запросами от яндекса... их нет, не считая пингов.
Сразу после авторизации, единственный запрос это:
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
Возможно проблема на стороне яндекса. На всякий случай Диалог я пересоздал, всё сделал по инструкции.
У меня была такая ошибка, решилась ограничением количества типов, доступных для Яндекса:
yandex_smart_home:
exposed_domains:
- switch
- light
У меня была такая ошибка, решилась ограничением количества типов, доступных для Яндекса:
yandex_smart_home: exposed_domains: - switch - light
Добавил у себя в конфигурации ещё пункт про "- fan" Это несколько странно, однако помогло - устройства добавились. Всем спасибо!
А не пробовали вычислить какое конкретно устройство вызывало проблемы? Я на глаз не вижу ничего подозрительного в вашем devices ответе, но что-то же было причиной.
А не пробовали вычислить какое конкретно устройство вызывало проблемы? Я на глаз не вижу ничего подозрительного в вашем devices ответе, но что-то же было причиной.
Сверил выдачи списка устройств до и после правки конфигурации и нашел только один различающийся пункт: {"capabilities": [{"retrievable": true, "type": "devices.capabilities.on_off"}], "id": "media_player.mpd", "name": "MPD", "type": "devices.types.switch"}
Но возможно дело не только в этом, точнее сказать не могу. Я отправлял заявку в техподдержку Яндекса со ссылкой на этот "issues". Может быть они что-то исправили у себя.
Моё обращение в тех поддержку:
В документации есть неточность 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"
Столкнулся с такой же проблемой. Умение доступно, объединение акаунтов проходит, а список не обновляется - Что-то пошло не так. Проверял работу сервиса, шаг за шагом все проверил и ничего не нашел. И вдруг... обнаружил, что Яндекс не умеет отбрабатывать слеш на конце URL :) В общем, если вроде все работает, но все равно не работает проверьте, что на конце Endpoint нет слеша.
Endpoint URL | https://[YOUR HOME ASSISTANT URL:PORT]/api/yandex_smart_home ^^^^^
Вчера перестал обновляться список устройств, такая же ошибка "Что-то пошло не так. Попробуйте ещё раз позднее." Отвязывал навык, пересоздавал его, игрался с фильтрами - авторизация успешно проходит, а при обновлении списка устройств все равно ошибка...
Тоже столкнулся с проблемой, не получается обновить список устройств. Изначально все получилось и все управлялось, после обновления HA, привязка слетела, объединить аккаунты получается а при обновлении списка устройств выскакивает "Internal server error". Проверил с endpoint url все впорядке, слэша нет вконце, ограничить список устройств тоже не помогает, оставил только свичи и та же ошибка. Подскажите что можно еще попробовать?
Случайно упомянул тикет, извиняюсь
После авторизации устройства не добавились. Обновление не помогает. На проксирующий nginx приходят вот такие запросы: