Температура термостата гнезда не обновляется

Я пытаюсь изменить температуру своего 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, и она была в "прохладном" режиме - это будет игнорировать вас.

(Возможно, почему это сработало один раз, когда вы попросили его разогреть, когда он был в режиме высокой температуры - как только он достигнет этой температуры, он может перейти в прохладный режим и попросить его нагреться больше будет проигнорирован.)