Alteração de ninho target_tempreture_f :Como usar java http PUT para definir a temperatura alvo do Nest Thermostat no código Android?

StackOverflow https://stackoverflow.com//questions/25085956

  •  02-01-2020
  •  | 
  •  

Pergunta

Alteração do ninho target_temperature_f :Como usar java http PUT para definir a temperatura alvo do Nest Thermostat pelo código Android?

Foi útil?

Solução

Você pode usar HttpClient ou HttpURLConnection para chamar um PUT na API restante do Android.Aqui está um exemplo usando HttpURLConnection.

Observação:É aconselhável armazenar em cache o URL de redirecionamento por usuário/token de acesso e reutilizá-lo para todas as chamadas subsequentes para esse usuário.

  1. Suponha aqui que a base para começar é https://developer-api.nest.com/
  2. Se o código de retorno da urlconnection for 307 (redirecionamento), armazene em cache o local e use-o para emitir uma solicitação put.(Observe que o cache aqui indica algum tipo de cache/concurrentMap global)

    public static int setThermostatTemperatureF(int temperatureF,
        String base, String thermostatId, String accessToken) throws IOException {
    try {
        String tChangeUrl = String.format("%s/devices/thermostats/%s/target_temperature_f?auth=%s",
                base, thermostatId, accessToken);
        URL url = new URL(tChangeUrl);
        HttpsURLConnection ucon = (HttpsURLConnection) url.openConnection();
        ucon.setRequestProperty("Content-Type", "application/json");
        ucon.setRequestMethod("PUT");
        ucon.setDoOutput(true);
        // Write the PUT body
        OutputStreamWriter writer = new OutputStreamWriter(ucon.getOutputStream());
        writer.append(Integer.toString(temperatureF));
        writer.flush();
    
        int responseCode = ucon.getResponseCode();
        if (responseCode == 307) { // temporary redirect
            // cache the URL for future uses for this User
            String redirectURL = ucon.getHeaderField("Location");
            URI u = new URI(redirectURL);
            StringBuilder baseUrl = new StringBuilder(u.getScheme())
                    .append("://").append(u.getHost());
            if (u.getPort() != 0) {
                baseUrl.append(":").append(u.getPort());
            }
            baseUrl.append("/");
            cache.put(accessToken, baseUrl.toString());
            return setThermostatTemperatureF(temperatureF, baseUrl.toString(), thermostatId, accessToken);
        } else {
            return responseCode;
        }
    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } catch (URISyntaxException e) {
        e.printStackTrace();
    }
    return -1;
    

    }

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top