Sto provando a cambiare la temperatura del mio Nest programmaticamente (Android), senza alcuna fortuna. Le richieste funzionano forse 1 su 30-50 tentativi.Temperatura del termostato Nest non aggiornata
Ho provato a farlo tramite l'SDK di Firebase Nest e NestAPI.CompletionListener non viene richiamato affatto. Vedendo come non funziona, l'ho provato con l'API REST, dove ha funzionato due volte, e poi ancora 1 su 30 tentativi. L'ho provato anche con curl dalla riga di comando, con gli stessi risultati, fino a quando non sono stato "bloccato" a causa della limitazione della velocità. Prima di essere bloccati, le richieste restituivano l'intero oggetto termostato, proprio come fare una richiesta GET invece di PUT.
Quando la temperatura in realtà ha fatto si aggiorna, la risposta conteneva solo la nuova target_temperature_high_c e target_temperature_high_c valori.
Qualcun altro ha visto un comportamento simile?
Edit: aggiunto un po 'di codice qui sotto
Ecco il mio codice utilizzando l'API di Android Nest (sulla base di 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);
Questo funziona solo se faccio quella chiamata una volta ogni ora. Se provo anche a farlo due volte, il secondo tentativo non funziona.
Avanti, ho provato con l'interfaccia REST. Questo sembra funzionare più spesso (5-6 volte lavorato, dopo di che l'API iniziato a recitare come stavo facendo richieste GET invece di 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:. appena testato questo con il nido casa Simulator, e funziona perfettamente bene. Il vero hardware è problematico se
Puoi pubblicare esattamente quale chiamata stavi creando? L'URL più il carico utile? Presumo che queste erano tutte richieste PUT? – urman
aggiunti i miei campioni di codice.Ancora: questi funzionano un paio di volte, dopo di che .. non lo fanno – zrgiu