Notice: We're retiring Works with Nest. See the home page for more information.
O Google tem o compromisso de promover a igualdade racial para as comunidades negras. Saiba como.
Esta página foi traduzida pela API Cloud Translation.
Switch to English

Exemplos de gravação de API

Termostato

Use a API Nest para ouvir mudanças em estruturas e dispositivos, para que você possa tomar medidas para economizar energia quando os proprietários estão fora, notificá-los de que algo está errado (por exemplo, a porta da garagem está aberta) ou ativar recursos para fazer o casa mais confortável e acolhedora.

Neste guia, você aprenderá como usar o comando PUT para gravar dados em dispositivos e estruturas Nest. Para saber como fazer chamadas de leitura, consulte Exemplos de leitura de API .

Confira esses exemplos de código e aprenda a gravar dados no Nest Learning Thermostat e na Nest Cam.

Pré-requisitos

Antes de fazer chamadas de API, obtenha um token de acesso, conforme descrito em Autenticação com OAuth 2.0 e Código de amostra para autorização .

Sobre chamadas de gravação REST

Para chamadas REST, use PUT ou PATCH para gravar dados.

Autenticação do portador

Recomendamos a conformidade com o padrão OAuth , que oferece maior segurança usando a autenticação "Bearer" para transmitir o token de acesso. Chamadas com credenciais de cliente no URL não são recomendadas.

O cabeçalho "Content-Type" direciona o servidor a usar JSON.

O cabeçalho "Authorization" fornece acesso à API.

Exemplos

Nos exemplos a seguir, substitua YOUR_TOKEN_HERE pelo seu token de acesso específico, como "c.twC2q ...".

Defina o estado ausente para uma estrutura

Para alterar o estado ausente de uma estrutura para "home", escreva o campo away usando este formato: "{"away": "home"}" , onde "away" é o nome do campo e "home" é o novo estado.

Para gravar em uma estrutura, adicionaremos o objeto /structures e structure_id ao caminho raiz da URL. Observe que as strings são formatadas com "aspas".

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"

Alterar a escala de temperatura (C / F) em um termostato

Neste exemplo, forçaremos a escala de temperatura a exibir graus Fahrenheit. Quando você está construindo seu produto, você deve ler a escala de temperatura primeiro e então decidir se deseja alterá-la com uma chamada por escrito.

Para fazer a chamada, especifique o campo e o valor que deseja atualizar: "{"temperature_scale": "F"}" , e altere o caminho raiz para incluir /devices/thermostats e o termostato device_id .

Ondulação
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"
Vai
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 o exemplo de código Node.js, instale o módulo de solicitação ( 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 o exemplo de código Java:

1. Baixe os arquivos okhttp e okio Jar mais recentes em http://square.github.io/okhttp/ . Além disso, baixe o arquivo stdlib do Kotlin em https://mvnrepository.com/artifact/org.jetbrains.kotlin/kotlin-stdlib se sua versão do okhttp depender dele.

2. Construa seu código.

3. Compile e execute o programa com as seguintes configurações de caminho de classe.

Substitua os números da versão da sua biblioteca nos comandos javac e java abaixo:
javac -cp .:okhttp-<ver>.jar:okio-<ver>.jar NestWrite.java
java -cp .:okhttp-<ver>.jar:okio-<ver>.jar:kotlin-stdlib-<ver>.jar NestWrite

Por exemplo, se você tiver as seguintes versões 3.11.0, 2.1.0 e 1.3.0, seus comandos seriam assim:
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

Alterar a temperatura desejada em um termostato

Depois de alterar a escala de temperatura para graus Fahrenheit, você pode definir a temperatura alvo . Use o mesmo processo dos exemplos anteriores e especifique o campo / valor a ser atualizado e altere o caminho raiz. Observe que "strings" e numbers são formatados de maneira 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"

Definir um rótulo personalizado em um termostato

Você também pode alterar o rótulo do termostato para dar a ele um apelido personalizado. Para incluir aspas simples no nome, você pode usar o caractere 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"

Definir o status de streaming em uma câmera

Neste exemplo, /devices/cameras/ device_id o caminho raiz para refletir o dispositivo que você deseja modificar, /devices/cameras/ device_id , e definimos o estado de streaming da câmera para 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 testar a API

As chamadas Curl acima podem ser facilmente replicadas no Postman. As etapas abaixo mudam a temperatura desejada em um termostato, como no exemplo Curl acima.

PUT cabeçalho para escrever
PUT corpo para escrever

Use o link Code no Postman para traduzir uma chamada em diferentes idiomas como um ponto de partida para um desenvolvimento futuro.