Я пытаюсь получить удаленный доступ и управлять светом Philips Hue.
Проходя через 3-стороннюю процедуру OAuth2 с веб-сайта Philips Developer, мне удалось создать функцию, которая успешно извлекает ключ-носитель, и другую функцию. это успешно обновляет ключ носителя. Следующим шагом является получение имени пользователя. Для этого Philips предлагает очень простой курс действий:
Сделать PUT на https://api.meethue.com/bridge/0/config
с телом:
{ “linkbutton”:true }
и заголовками:
Authorization: Bearer <access_token>
Content-Type: application/json
Сразу после выполнения POST для https://api.meethue.com/bridge/
с телом:
{ “devicetype”:”<your-application-name>” }
и заголовками:
Authorization: Bearer <access_token>
Content-Type: application/json
Этот последний вызов вернет имя пользователя, которое вы можете сохранить и использовать в последующие URL:
[
{
"success": {
"username": “*****"
}
}
]
Я сделал первый PUT с успешным ответом 200
и пустым телом, но ответ от второго запроса меня заинтриговал:
<Response [200]>
[{'error': {'type': 5, 'address': '/', 'description': 'invalid/missing parameters in body'}}]
Итак, ответ успешен, но с ошибкой, исходящей от тела. Просто верно? Очевидно, мой ”<your-application-name>”
не так. Ну, я проверил имя пользователя, которое отображается на стороне клиента, и оно совпадает с именем приложения, которое я дал в своей учетной записи разработчика, и таким же значением, которое я указал в своем запросе. Чтобы объяснить, что я имею в виду под «клиентской стороной», это то, что Philips сказал в одной из своих предыдущих команд
Имя устройства должно быть именем приложения или устройства, обращающегося к удаленному API. Имя устройства используется в обзоре «Мои приложения» пользователя в учетной записи Hue (визуализируется как «вкл.»). Если нет, deviceid также используется для devicename. Это имя приложения, которое вы предоставили нам в тот момент, когда запрашивали доступ к удаленному API.
Таким образом, предоставленный мною ”<your-application-name>”
должен быть верным, но это не помешало мне использовать многие другие вещи. чтобы заполнить этот параметр, в том числе даже с использованием разных имен параметров (отличается от "devicetype"). Ничего не помогло, и я получил тот же ответ ... и проблема достаточно проста, поэтому у меня быстро закончились идеи.
Я новичок в запросах API, но не новичок в Python. Я использовал Python 3.7 - модуль запросов для всего этого. Мой мост также виден и подключен на стороне моего клиента