【发布时间】:2015-12-14 00:56:39
【问题描述】:
我正在尝试以编程方式 (Android) 更改 Nest 的温度,但没有任何运气。请求在 30-50 次尝试中可能有 1 次起作用。
我已尝试通过 Firebase Nest SDK 进行此操作,但 NestAPI.CompletionListener 根本没有被调用。看到这不起作用,我用 REST api 尝试了它,它在那里工作了两次,然后再次尝试了 30 次中的 1 次。 我还从命令行使用 curl 进行了尝试,结果相同,直到我最终因为速率限制而被“阻止”。在被阻止之前,请求会返回完整的恒温器对象,就像执行 GET 请求而不是 PUT 一样。
当温度确实得到更新时,响应只包含新的 target_temperature_high_c 和 target_temperature_high_c 值。
有没有其他人看到过类似的行为?
编辑:在下面添加了一些代码
这是我使用 Nest Android API(基于 Firebase)的代码:
NestAPI.CompletionListener completionListener = new NestAPI.CompletionListener() {
public void onComplete() {
Debug.d("NEST", "request complete");
}
public void onError(int errorCode) {
Debug.e("NEST", "error: "+errorCode);
}
};
NestAPI.getInstance().setTargetTemperatureHighC(myNest.getDeviceID(), 25, completionListener);
这只有在我每小时打一次电话时才有效。如果我什至尝试做两次,第二次尝试也行不通。
接下来,我尝试使用 REST 接口。这似乎更频繁地工作(工作了 5-6 次,之后 API 开始表现得就像我在做 GET 请求而不是 PUT。
JSONObject dataToSend = new JSONObject();
dataToSend.put("target_temperature_low_c", 23);
dataToSend.put("target_temperature_high_c", 26);
HttpPut httpost = new HttpPut("https://developer-api.nest.com/devices/thermostats/"+myNest.getDeviceID()+"?auth="+myAuthToken);
httpost.setHeader("Content-type", "application/json");
httpost.setEntity(new StringEntity(dataToSend.toString()));
HttpResponse response = defaultHttpClient.execute(httpost);
HttpEntity entity = response.getEntity();
String response = convertStreamToString(entity.getContent());
编辑 2: 刚刚用 Nest Home Simulator 进行了测试,它运行良好。真正的硬件虽然有问题
【问题讨论】:
-
你能准确地发布你打的电话吗? URL加上有效载荷?我假设这些都是 PUT 请求?
-
添加了我的代码示例。再次:这些工作几次,之后..他们没有