En Google, luchamos por la equidad racial de la comunidad negra. Más información

Ejemplos de escritura de API

Termostato

Utilice la API de Nest para escuchar cambios en estructuras y dispositivos, de modo que pueda tomar medidas para ahorrar energía cuando los propietarios no estén, notificarles que algo anda mal (por ejemplo, la puerta del garaje está abierta) o activar funciones para hacer que el hogar más cómodo y acogedor.

En esta guía, aprenderá a usar el comando PUT para escribir datos en dispositivos y estructuras Nest. Para aprender cómo hacer llamadas de lectura, consulte API Lee ejemplos .

Consulta estos ejemplos de código y aprende a escribir datos en Nest Learning Thermostat y Nest Cam.

Prerrequisitos

Antes de hacer llamadas a la API, obtener un token de acceso, tal como se describe en la autenticación con OAuth 2.0 y Ejemplo de código de autorización .

Acerca de las llamadas de escritura REST

Para llamadas REST, use PUT o PATCH para escribir datos.

Autenticación de portador

Recomendamos el cumplimiento de la norma OAuth , que ofrece una mayor seguridad mediante el uso de "Bearer" de autenticación para transmitir el token de acceso. No se recomiendan las llamadas con credenciales de cliente en la URL.

El "Content-Type" cabecera dirige el servidor para utilizar JSON.

La "Authorization" encabezado proporciona acceso a la API.

Ejemplos de

En los siguientes ejemplos, reemplace YOUR_TOKEN_HERE con su token de acceso específico, como "c.twC2q ...".

Establecer el estado ausente para una estructura

Para cambiar el estado de distancia de una estructura a "casa", escribir la away campo usando este formato: "{"away": "home"}" , donde "distancia" es el nombre del campo, y "casa" es la nuevo estado.

Para escribir en una estructura, añadiremos el /structures objeto y structure_id a la ruta raíz URL. Tenga en cuenta que las cadenas están formateadas con "comillas".

curl --location-trusted -X PUT \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_TOKEN_HERE" \
  -d '{"away": "home"}' \
  "https://developer-api.nest.com/structures/structure_id"

Cambiar la escala de temperatura (C / F) en un termostato

En este ejemplo, vamos a forzar la escala de temperatura en grados Fahrenheit visualización. Cuando esté construyendo su producto, primero leería la escala de temperatura y luego decidiría si desea cambiarla con una llamada por escrito.

Para realizar la llamada, especifique el campo y el valor que desea actualizar: "{"temperature_scale": "F"}" , y cambiar la ruta raíz para incluir /devices/thermostats y el termostato device_id .

Rizo
curl --location-trusted -X PUT \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_TOKEN_HERE" \
  -d '{"temperature_scale": "F"}' \
  "https://developer-api.nest.com/devices/thermostats/device_id"
Ir
package main

import (
    "errors"
    "fmt"
    "strings"
    "net/http"
    "io/ioutil"
)

const token = "YOUR_TOKEN_HERE" // Update with your token

func main() {

    url := "https://developer-api.nest.com/devices/thermostats/device_id"

    payload := strings.NewReader("{\"temperature_scale\": \"F\"}")

    req, _ := http.NewRequest("PUT", url, payload)

    req.Header.Add(
        "Authorization",
        fmt.Sprintf("Bearer %s", token),
    )

    customClient := http.Client{
        CheckRedirect: func(redirRequest *http.Request, via []*http.Request) error {
            redirRequest.Header = req.Header
            if len(via) >= 10 {
                return errors.New("stopped after 10 redirects")
            }
            return nil
        },
    }


    response, _ := customClient.Do(req)

    if response.StatusCode != 200 {
        panic(fmt.Sprintf(
            "Expected a 200 status code; got a %d",
            response.StatusCode,
        ))
    }

    defer response.Body.Close()
    body, _ := ioutil.ReadAll(response.Body)
    fmt.Println(response)
    fmt.Println(string(body))

}
Node.js
"use strict"

const request = require('request');

const url = "https://developer-api.nest.com";

/* Update with your token and thermostat device ID below */
var path = "/devices/thermostats/device_id";
var token = "YOUR_TOKEN_HERE";

var options = {
    "method": "PUT",
    "url": url + path,
    "body": JSON.stringify({"temperature_scale": "F"}),
    "headers": {
        "Authorization": "Bearer " + token,
        "Content-Type": "application/json"
    },
    "followRedirect": true,
    "removeRefererHeader": false
};

request(options, function(err, resp, data) {
    if (resp.statusCode == 307) { // indicates a redirect is needed
        options.url = resp.headers.location;
        request(options, function(err, resp, data) {
            console.log('response code: ' + resp.statusCode);
            if (err) console.log('Error: ' + err.message);
            console.log("data: " + data);
        });
    }
});

Para utilizar el ejemplo de código Node.js, instalar el módulo de petición ( https://www.npmjs.com/package/request ).

npm install request
Python 2
import hashlib
import json
import os
import requests

url = "https://developer-api.nest.com/devices/thermostats/device_id"

token = "YOUR_TOKEN_HERE" # Update with your token

payload = "{\"temperature_scale\": \"F\"}"

headers = {'Authorization': 'Bearer {0}'.format(token), 'Content-Type': 'application/json'}

response = requests.put(url, headers=headers, data=payload, allow_redirects=False)
if response.status_code == 307: # indicates a redirect is needed
    response = requests.put(response.headers['Location'], headers=headers, data=payload, allow_redirects=False)

print(response.text)
Python 3
import http.client
from urllib.parse import urlparse

token = "YOUR_TOKEN_HERE" # Update with your token

payload = "{\"temperature_scale\": \"F\"}"

url = "/devices/thermostats/device_id"

conn = http.client.HTTPSConnection("developer-api.nest.com")
headers = {'authorization': "Bearer {0}".format(token)}
conn.request("PUT", url, payload, headers)
response = conn.getresponse()

if response.status == 307: # indicates a redirect is needed
    redirectLocation = urlparse(response.getheader("location"))
    conn = http.client.HTTPSConnection(redirectLocation.netloc)
    conn.request("PUT", url, payload, headers)
    response = conn.getresponse()
    if response.status != 200:
        raise Exception("Response failed: ", response.reason)

data = response.read()
print(data.decode("utf-8"))
Java
import java.io.IOException;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import okhttp3.MediaType;
import okhttp3.RequestBody;

public class NestWrite {

    public Request makeRequest(String url, String value) {
        MediaType mediaType = MediaType.parse("application/octet-stream");
        RequestBody body = RequestBody.create(mediaType, "{\"temperature_scale\": \"F\"}\"");
        String auth = "Bearer YOUR_TOKEN_HERE"; // Update with your token
        Request request = new Request.Builder()
        .url(url)
        .put(body)
        .addHeader("authorization", auth)
        .build();
        return request;
    }

    public static void main(String[] args) throws IOException
    {
        OkHttpClient client = new OkHttpClient();
        NestWrite postman = new NestWrite();

        String url = "https://developer-api.nest.com/devices/thermostats/device_id";
        String value = "{\"away\": \"home\"}";
        Request request = postman.makeRequest(url, value);
        Response response = client.newCall(request).execute();
        //System.out.println(response.toString());

        // Use the new URL in case of temporary redirect
        if(response.isRedirect()){
            String newUrl = response.header("Location");
            request = postman.makeRequest(newUrl, value);
            response = client.newCall(request).execute();
        }
        System.out.println(response.body().string());
    }
}

Para usar el ejemplo de código Java:

1. Descarga la última archivos Jar Okio okhttp y al http://square.github.io/okhttp/ . Además, la descarga de archivos Kotlin stdlib en https://mvnrepository.com/artifact/org.jetbrains.kotlin/kotlin-stdlib si su versión de okhttp depende de ello.

2. Construya su código.

3. Compile y ejecute el programa con la siguiente configuración de ruta de clases.

Sustituir los números de versión de la biblioteca en los comandos javac y java siguientes:
javac -cp .:okhttp-<ver>.jar:okio-<ver>.jar NestWrite.java
java -cp .:okhttp-<ver>.jar:okio-<ver>.jar:kotlin-stdlib-<ver>.jar NestWrite

Por ejemplo, si usted tiene las siguientes versiones 3.11.0, 2.1.0, y 1.3.0, los comandos se vería así:
javac -cp .:okhttp-3.11.0.jar:okio-2.1.0.jar NestWrite.java
java -cp .:okhttp-3.11.0.jar:okio-2.1.0.jar:kotlin-stdlib-1.3.0.jar NestWrite

Cambiar la temperatura objetivo en un termostato

Después de cambiar la escala de temperatura a grados Fahrenheit, se puede establecer la temperatura deseada . Utilice el mismo proceso que en los ejemplos anteriores, especifique el campo / valor para actualizar y cambie la ruta raíz. Tenga en cuenta que "strings" y numbers tienen un formato diferente.

curl --location-trusted -X PUT \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_TOKEN_HERE" \
  -d '{"target_temperature_f": 70}' \
  "https://developer-api.nest.com/devices/thermostats/device_id"

Establecer una etiqueta personalizada en un termostato

También puede cambiar la etiqueta de termostato para darle un apodo personalizado. Para incluir una comilla simple en el nombre, puede usar el carácter Unicode \ u0027.

curl --location-trusted -X PUT \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_TOKEN_HERE" \
  -d '{"label": "Kate\u0027s Room"}' \
  "https://developer-api.nest.com/devices/thermostats/device_id"

Establecer el estado de transmisión en una cámara

En este ejemplo, se cambia la ruta raíz para reflejar el dispositivo que desea modificar, /devices/cameras/ device_id , y se ajusta la cámara de streaming estado de ON .

curl --location-trusted -X PUT \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_TOKEN_HERE" \
  -d '{"is_streaming": true}' \
  "https://developer-api.nest.com/devices/cameras/device_id"

Usando Postman para probar la API

Las llamadas de Curl anteriores se pueden replicar fácilmente en Postman. Los pasos siguientes cambios de la temperatura objetivo en un termostato tal como en el ejemplo Curl anteriormente.

PONER encabezado para escribir
PONER cuerpo para escribir

Utilice el enlace Código de cartero para traducir una llamada en diferentes idiomas como punto de partida para un mayor desarrollo.