【问题标题】:Nest Thermostat temperature not getting updatedNest Thermostat 温度未更新
【发布时间】: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_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 进行了测试,它运行良好。真正的硬件虽然有问题

【问题讨论】:

  • 你能准确地发布你打的电话吗? URL加上有效载荷?我假设这些都是 PUT 请求?
  • 添加了我的代码示例。再次:这些工作几次,之后..他们没有

标签: android nest-api


【解决方案1】:

来自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

即如果您在当前温度为 30 度且处于“凉爽”模式时告诉 Nest 设备达到 50 度的温度 - 它会忽略您。

(这可能是它工作一次的原因,当你要求它预热时,它处于加热模式 - 一旦达到这个温度,它可能会进入冷却模式并要求它加热更多将被忽略。)

【讨论】:

  • 对不起,我应该更清楚。恒温器处于加热和冷却模式。
  • 在您的示例中看起来不像,您明确使用 NestAPI.getInstance() 而不检查模式?
  • 如果我要放完整的活动,我会填满几页。
  • 只是说出我所描述的内容对您的问题来说是非常内在的,而不是把它放在问题中让我想知道您还错过了什么,因为我们必须猜测答案。您应该始终尝试创建能够重现您的问题的最小工作原型,涵盖您探索过的所有途径。
  • 刚刚用模拟器测试了这个,它工作得很好。至于示例代码:你是对的,一开始可以添加更多。现在模拟器测试确认代码本身没问题,我必须开始寻找其他可能的来源。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-09
  • 2014-08-19
相关资源
最近更新 更多