我正在构建一个应用程序,它利用python中的ecobee API来控制恒温器模式(热/冷/自动/关)。我构建了一个函数来执行此操作,它在4天前运行正常。当我昨天开始重新编写代码时,每次执行相同的操作时,我都会收到一个500响应,状态如下:{'status': {'code': 4, 'message': 'Serialization error. Not permitted to update model: Thermostat'}}。我似乎找不到问题是什么,以及如何解决它。我已经用ecobee创建了一个工单-基于他们关于代码4的网站建议-但没有答案。我希望有人也遇到了类似的问题,可以帮我解决问题,或者在这里给我一些启发。我试图在网页上使用他们的js示例,但对于这个部分/示例也不起作用-我可以读取所有变量的状态,获取令牌,刷新它们,但更改模式(或温度)似乎不再起作用。下面是我更改恒温器模式的代码:
def EB_hvac_mode(access_token, refresh_token, mode = "off"):
# mode: heat, cool, auto, off
header = {'Content-Type': 'application/json;charset=UTF-8', 'Authorization':'Bearer ' + access_token}
payload = {"selection":{"selectionType":"registered","selectionMatch":""},"thermostat":{"settings":{"hvacMode":mode}}}
print(payload)
url = "https://api.ecobee.com/1/thermostat?format=json"
print(url)
r = requests.post(url, json=payload, headers=header)
print(r.json())发布于 2020-04-28 21:44:33
当我之前遇到这个问题是因为我在授权应用程序时没有请求正确的作用域。因此,请仔细检查您的作用域是否正确。
要通过API更新恒温器,您需要具有"smartWrite“作用域(https://www.ecobee.com/home/developer/api/documentation/v1/auth/auth-intro.shtml)
当我再次尝试该作用域时,问题就解决了。
希望这能有所帮助。
https://stackoverflow.com/questions/60179425
复制相似问题