2015-12-14 18 views
11

Programlı olarak (Android) şansımı kullanmadan Nest'in sıcaklığını değiştirmeye çalışıyorum. İstekler belki 30-50 denemede 1 çalışır.Yuva Termostatı sıcaklığı güncellenmiyor

Bunu Firebase Nest SDK'sı üzerinden yapmaya çalıştım ve NestAPI.CompletionListener hiç çağrılmadı. Bunun nasıl işe yaramadığını görünce, iki kez çalıştığı REST api ile denedim ve 30 denemede 1 tekrar denedim. Ayrıca, hız sınırlama nedeniyle nihayet “bloke” olana kadar aynı sonuçları veren komut satırından kıvrımla da denedim. Engellemeden önce, istekleri tam termostat nesnesini, PUT yerine GET isteği yapmak gibi geri döndürüyordu.

sıcaklık aslında güncellenmeyen ne zaman, tepki sadece yeni target_temperature_high_c ve target_temperature_high_c değerler içeriyordu.

Başkası benzer davranışlar sergiledi mi?

Düzenleme: Bir keresinde çağrı saatte yaparsanız

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); 

Bu, yalnızca: İşte (Firebase göre) Nest Android API kullanarak kod bu

aşağıda bazı kod eklemiş. İki kere yapmaya bile çalışırsam, ikinci deneme işe yaramıyor.

Sonraki, REST arabirimiyle denedim. Bu daha sık çalışacak gibi görünüyor (API yerine PUT GET istekleri yapıyordu gibi davranmaya başladı, bundan sonra 5-6 defa çalıştı

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()); 

Düzenleme 2:. Sadece Nest Ev Simülatörü ile bu test, ve mükemmel çalışıyor. setTargetTemperatureHighC için javadocs itibaren

+0

Tam olarak ne yaptığınızı söyleyebilir misiniz? URL artı taşıma kapasitesi? Bunların hepsinin PUT talepleri olduğunu mu varsayıyorum? – urman

+0

kod örneklerimi ekledi.Yine: bunlar birkaç kez çalışıyor, ondan sonra .. onlar değil – zrgiu

cevap

4

o https://github.com/nestlabs/android-NestDK/blob/master/NestLib/src/main/java/com/nestapi/lib/API/NestAPI.java#L111

Bu değer zaman "Isı ve Cool" in sadece ilgili olduğunu söylüyor olsa gerçek donanım problemlidir modu. o değilse Aksi takdirde,

Sen Thermostat.getHVACMode()

kullanarak modunu kontrol edebilirsiniz {#setTargetTemperatureC (dize, Uzun, com.nestapi.lib.API.NestAPI.CompletionListener) @link} görmek ve kullanmanız gereken Heat and Cool modu:

NestAPI.setTargetTemperatureC

yani o anki sıcaklığı 30deg oldu ve "cool" modunda idi olduğunda nereye Nest cihazı anlatan 50deg yılların bir sıcaklığa gitmek eğer - bu sizi görmezden.

(Bu belki de bir kez çalıştığını, ısınmasını istediğinde, ısı modundayken - bu sıcaklığa çarptığında, soğuk moda geçip daha fazla ısınmasını isteyebilir.)

+0

Üzgünüm, daha açık olmalıydım. Termostat **, Isı ve Soğutma modunda **. – zrgiu

+0

, örneğiniz gibi görünmüyor, mod için bir kontrol olmadan "NestAPI.getInstance()" ifadesini açıkça kullanıyorsunuz? – Blundell

+0

Eğer tam aktiviteyi koyacak olsaydım, birkaç sayfa doldururdum. – zrgiu