
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
.
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"
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)) }
"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
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)
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"))
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.


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