Температура термостата гнезда не обновляется
Я пытаюсь изменить температуру своего Nest программным способом (Android) без везения. Запросы работают, возможно, 1 из 30-50 попыток.
Я попытался сделать это через SDK Firebase Nest, а NestAPI.CompletionListener вообще не вызван. Видя, как это не работает, я попробовал его с REST api, где он работал дважды, а затем снова 1 из 30 попыток.
Я также пробовал это с завитой из командной строки с теми же результатами, пока я, наконец, не был "заблокирован" из-за ограничения скорости. Перед блокировкой запросы возвращают полный объект термостата, как и запрос GET вместо PUT.
Когда температура действительно обновилась, в ответе содержались только новые значения target_temperature_high_c и target_temperature_high_c.
Кто-нибудь еще видел подобное поведение?
Изменить: добавлен код ниже
Здесь мой код с использованием Android-API Nest (на основе 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, и он отлично работает. Реальное оборудование проблематично, хотя
Ответы
Ответ 1
Из javadocs для setTargetTemperatureHighC
говорится:
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 переходит на температуру 50deg, когда текущая температура составляет 30deg, и она была в "прохладном" режиме - это будет игнорировать вас.
(Возможно, почему это сработало один раз, когда вы попросили его разогреть, когда он был в режиме высокой температуры - как только он достигнет этой температуры, он может перейти в прохладный режим и попросить его нагреться больше будет проигнорирован.)