Notice: We're retiring Works with Nest. See the home page for more information.
En Google, luchamos por la equidad racial de la comunidad negra. Más información
Se usó la API de Cloud Translation para traducir esta página.
Switch to English

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 a realizar llamadas de lectura, consulte Ejemplos de lectura de API .

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

Prerrequisitos

Antes de realizar llamadas a la API, obtenga un token de acceso, como se describe en Autenticación con OAuth 2.0 y Código de muestra para 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 del estándar OAuth , que ofrece una mayor seguridad mediante el uso de la autenticación "Bearer" para transmitir el token de acceso. No se recomiendan las llamadas con credenciales de cliente en la URL.

El "Content-Type" indica al servidor que utilice JSON.

El encabezado "Authorization" proporciona acceso a la API.

Ejemplos

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 ausente de una estructura a "casa", escriba el campo away con este formato: "{"away": "home"}" , donde "lejos" es el nombre del campo y "casa" es el nuevo estado.

Para escribir en una estructura, agregaremos el objeto /structures y el structure_id a la ruta raíz de la 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, forzaremos que la escala de temperatura muestre grados Fahrenheit. 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 cambie 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"
Vamos
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 usar el ejemplo de código de Node.js, instale el módulo de solicitud ( 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. Descargue los últimos archivos okhttp y okio Jar en http://square.github.io/okhttp/ . Además, descargue el archivo stdlib de Kotlin en https://mvnrepository.com/artifact/org.jetbrains.kotlin/kotlin-stdlib si su versión de okhttp depende de él.

2. Construya su código.

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

Sustituya los números de versión de su biblioteca en los comandos javac y java a continuación:
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 tiene las siguientes versiones 3.11.0, 2.1.0 y 1.3.0, sus comandos se verían 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, puede establecer la temperatura objetivo . 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 las "strings" y los 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 del 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, cambiamos la ruta raíz para reflejar el dispositivo que desea modificar, /devices/cameras/ device_id , y establecemos el estado de transmisión de la cámara en 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 cambian la temperatura objetivo en un termostato como en el ejemplo de Curl anterior.

PONER encabezado para escribir
PONER cuerpo para escribir

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