我正在尝试以编程方式(Android)更改我的Nest的温度,没有任何运气。请求工作可能在30-50次尝试中有1次。
我已尝试通过Firebase Nest SDK进行此操作,并且NestAPI.CompletionListener根本不会被调用。看看它是如何工作的,我尝试使用REST api,它工作了两次,然后再尝试30次尝试。 我也尝试使用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进行了测试,它运行得非常好。但真正的硬件存在问题
答案 0 :(得分:4)
它来自setTargetTemperatureHighC
的javadocs
https://github.com/nestlabs/android-NestDK/blob/master/NestLib/src/main/java/com/nestapi/lib/API/NestAPI.java#L111
检查模式此值仅在“加热和冷却”模式下有效。否则,请参阅 {@link #setTargetTemperatureC(String,Long,com.nestapi.lib.API.NestAPI.CompletionListener)}
如果它不在Heat and Cool
模式,您应该使用:
即。如果你告诉Nest设备在当前温度为30度并且它处于“酷”模式时它会达到50度的温度 - 它会忽略你。
(这也许就是为什么它能够工作一次,当你要求它进行预热时,当它处于加热模式时 - 一旦它达到这个温度就可以进入冷却模式并且要求它加热更多将被忽略。)