Nest温控器温度未更新

zrg*_*giu 11 android nest-api

我试图以编程方式(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);
Run Code Online (Sandbox Code Playgroud)

这只有在我每小时拨打一次电话时才有效.如果我甚至尝试两次,第二次尝试不起作用.

接下来,我尝试使用REST界面.这似乎工作更频繁(工作5-6次,之后它开始表现得像我在做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());
Run Code Online (Sandbox Code Playgroud)

编辑2:刚刚使用Nest Home Simulator进行了测试,它的工作原理非常好.但真正的硬件存在问题

Blu*_*ell 4

从它的javadocs中setTargetTemperatureHighChttps://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 设备将温度调至 50 度,而当前温度为 30 度且处于“凉爽”模式 - 它会忽略您。

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