Notice: We're retiring Works with Nest. See the home page for more information.
Google is committed to advancing racial equity for Black communities. See how.
Esta página foi traduzida pela API Cloud Translation.
Switch to English

Exemplos de gravação de API

Termostato

Use a API do Nest para escutar alterações nas estruturas e dispositivos, para que você possa tomar medidas para economizar energia quando os proprietários estiverem ausentes, notificá-los de que algo está errado (por exemplo, a porta da garagem está aberta) ou ativar os recursos para tornar a propriedade casa mais confortável e acolhedor.

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

Confira essas amostras de código e aprenda a gravar dados no Nest Learning Thermostat e no Nest Cam.

Pré-requisitos

Antes de fazer chamadas de API, obtenha um token de acesso, conforme descrito em Autenticando 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 ao 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 na URL não são recomendadas.

O cabeçalho "Content-Type" direciona o servidor para 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 ...".

Definir o estado ausente de uma estrutura

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

Para escrever em uma estrutura, adicionaremos o objeto /structures e o structure_id ao caminho raiz da URL. Observe que as seqüências de caracteres 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. Ao criar seu produto, você deve ler primeiro a escala de temperatura e depois decidir se deseja alterá-la com uma chamada de gravação.

Para fazer a chamada, especifique o campo e o valor que você 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 "
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 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. Faça o download dos últimos arquivos okhttp e okio Jar em http://square.github.io/okhttp/ . Além disso, faça o download do arquivo stdlib do Kotlin em https://mvnrepository.com/artifact/org.jetbrains.kotlin/kotlin-stdlib se a sua versão do okhttp depender disso.

2. Construa seu código.

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

Substitua os números de 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 terão a seguinte aparência:
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 alvo em um termostato

Depois de alterar a escala de temperatura para graus Fahrenheit, você pode definir a temperatura alvo . Use o mesmo processo que os exemplos anteriores, 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 uma etiqueta personalizada em um termostato

Você também pode alterar o rótulo do termostato para obter um apelido personalizado. Para incluir uma 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 do 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 como 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 o Postman para testar a API

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

Colocar cabeçalho para escrever
Colocar o corpo para escrever

Use o link Código no Postman para traduzir uma chamada em diferentes idiomas como ponto de partida para um maior desenvolvimento.