Если я использую их веб-сайт разработчика, я подключаю свой ключ API, и он аутентифицирует OAuth2, и я могу скопировать и вставить токен носителя («access_token») прямо в свой скрипт Python, и я могу управлять термостатом.< /p>
Однако, когда я пытаюсь сгенерировать access_token самостоятельно, он работает нормально, но я не могу его использовать.
Я в замешательстве Я думаю, это что-то вроде авторизованного кода потока OAuth2 и учетных данных клиента OAuth2?
При использовании учетных данных клиента в заголовках есть ссылка на использование «UserRefID», но я не видел этой переменной ни в каких ответах, ни в каких-либо других документация?
def gettemp():
bearer = get_token()
url = f"https://api.honeywell.com/v2/devices/th ... /{deviceId}"
params = {
"apikey": client_id, #this is the consumer key provided by honeywell (risideo)
"locationId": mylocationid
}
headers = {
"Accept": "*/*",
"Accept-Encoding": "gzip",
"Accept-Language": "en-US",
"Authorization": f"Bearer {bearer}",
"DNT": "1",
"Host": "api.honeywell.com",
"Sec-Fetch-Dest": "empty",
"Sec-Fetch-Mode": "cors",
"Sec-Fetch-Site": "cross-site",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/115.0",
"X-Forwarded-Port": "443",
"X-Forwarded-Proto": "https"
}
response = requests.get(url, params=params, headers=headers)
code = response.status_code
print(response.text)
indoor = response.json()['indoorTemperature']
outdoor = response.json()['outdoorTemperature']
если я размещаю носитель статически выше с веб-сайта, он работает до тех пор, пока не истечет время действия токена.
код ниже дает мне новый токен, но он никогда не работает
def get_token():
auth_header = base64.b64encode(f'{client_id}:{client_secret}'.encode()).decode()
token_url = 'https://api.honeywell.com/oauth2/accesstoken'
headers = {
'Authorization': f'Basic {auth_header}',
'Content-Type': 'application/x-www-form-urlencoded'
}
data = {
'grant_type': 'client_credentials',
}
response = requests.post(token_url, headers=headers, data=data)
print(f'bearer response is {response}')
bearer = response.json()['access_token']
return bearer
это ответ от get_token:
"refresh_token_expires_in": "0",
"api_product_list": "[Basic Development Plan]",
"api_product_list_json": [
"Basic Development Plan"
],
"organization_name": "connectedhome",
"developer.email": "thermostat@gmail.com",
"token_type": "Bearer",
"issued_at": "1691280024096",
"client_id": "shO6XG34OyRbEwFgaOtgFpqPmqAHSZlg",
"access_token": "UbxWbkZEAVGfbb7uGXvACcr34Wv4",
"application_name": "6f54cdb4-4d27-4b95-ae39-d8d5db36ad83",
"scope": "",
"expires_in": "3599",
"refresh_count": "0",
"status": "approved"
и ответ от использования этого токена в gettemp():
"code": "Unauthorized",
"message": "Authorization has been denied for this request "
Подробнее здесь: https://stackoverflow.com/questions/768 ... -flow-code
Невозможно использовать OAuth2 с API Honeywell для управления термостатом, авторизованным кодом потока и учетными данным ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение