Próbuję zmienić temperaturę mojego gniazda programowo (Android), bez powodzenia. Żądania mogą mieć wartość 1 na 30-50 prób.Temperatura termostatu Nest nie jest aktualizowana
Próbowałem zrobić to za pomocą pakietu SDK Firebase Nest, a NestAPI.CompletionListener nie jest w ogóle wywoływana. Widząc, jak to nie działa, próbowałem go z interfejsem REST API, gdzie działało dwa razy, a następnie ponownie 1 raz na 30 prób. Próbowałem również z curl z linii poleceń, z tymi samymi wynikami, aż w końcu dostałem "zablokowany" z powodu ograniczenia stawki. Przed zablokowaniem, żądania zwracały cały obiekt termostatu, tak jak wykonanie żądania GET zamiast PUT.
Gdy temperatura faktycznie aktualizowane, odpowiedź zawierała tylko nowej target_temperature_high_c i target_temperature_high_c wartości.
Czy ktoś inny widział podobne zachowanie?
Edit: dodano niektóre kodu poniżej
Oto mój kod używając gnieździe Android API (w oparciu o 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);
Zadziała tylko jeśli robię to wezwanie raz na godzinę. Jeśli nawet spróbuję zrobić to dwa razy, druga próba nie zadziała.
Następna, próbowałem z interfejsem REST. To wydaje się działać częściej (pracował 5-6 razy, po czym API rozpoczęte zachowuje się jak robiłem żądań GET zamiast 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());
Edit. 2: tylko przetestowane z gniazdem główna symulatora i działa perfekcyjnie. prawdziwy sprzęt jest problematyczne, choć
Czy możesz wysłać dokładnie to, co zadzwoniłeś? Adres URL plus ładunek? Zakładam, że były to wszystkie żądania PUT? – urman
dodał moje próbki kodu.Znowu: te działają kilka razy, po których .. nie są – zrgiu