Nest温控器温度未得到更新

我试图以编程方式(Android)改变我的Nest的温度,没有任何运气。 请求工作可能在30-50次尝试中有1次。

我试过通过Firebase Nest SDK来完成它,并且根本不会调用NestAPI.CompletionListener。 看到这不起作用,我尝试使用REST api,它工作了两次,然后再尝试30次尝试。 我也用命令行的curl尝试了它,结果相同,直到我因为速率限制而最终被“阻止”。 在被阻止之前,请求正在返回完整的恒温器对象,就像执行GET请求而不是PUT一样。

当温度实际上更新时,响应仅包含新的target_temperature_high_ctarget_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进行了测试,它的工作原理非常好。 但真正的硬件存在问题

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)}

您可以使用Thermostat.getHVACMode()检查模式

如果它不是在Heat and Cool模式,你应该使用:

NestAPI.setTargetTemperatureC

也就是说,如果你告诉Nest设备在当前温度为30度并处于“冷”模式时温度为50度,它会忽略你。

(这可能就是为什么它可以工作一次,因为你要求它预热,当它处于加热模式时 – 一旦它达到这个温度它可以进入冷却模式并且要求它加热更多将被忽略。)