Nest Change Target_Tempret_f: Comment utiliser Java HTTP Met pour définir la température de la cible du thermostat de nid dans le code Android?

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

  •  02-01-2020
  •  | 
  •  

Question

Nest Modifier cible_tempperature_f: Comment utiliser Java HTTP Mettez pour définir la température cible du thermostat de nid par code Android?

Était-ce utile?

La solution

Vous pouvez utiliser httpClient ou httpurlconnection pour appeler un API de repos à partir d'Android.Voici un exemple utilisant httpurlconnection.

Remarque: il est conseillé de mettre en cache l'URL de redirection par jeton de l'utilisateur / d'accès et de la réutiliser pour tous les appels ultérieurs à cet utilisateur.

  1. Supposez ici que la base pour commencer est https://developer-api.nest.com/
  2. Si le code de retour de l'URLConnection est une 307 (redirection), puis mettez en cache l'emplacement et utilisez cela pour délivrer une demande de vente.(Notez que le cache indique ici un cache global / concurrent de quelque nature que ce soit)

    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;
    

    }

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top