Google is committed to advancing racial equity for Black communities. See how.

API-Schreibbeispiele

Thermostat

Verwenden Sie die Nest API, um auf Veränderungen an Gebäuden und Geräten zu achten, damit Sie Energie sparen können, wenn die Hausbesitzer abwesend sind, sie benachrichtigen, wenn etwas nicht stimmt (z Zuhause komfortabler und einladender.

In dieser Anleitung erfahren Sie, wie Sie mit dem PUT-Befehl Daten auf Nest-Geräte und -Strukturen schreiben. Um zu erfahren , wie Lese Anrufe zu tätigen, siehe API lesen Beispiele .

Sehen Sie sich diese Codebeispiele an und erfahren Sie, wie Sie Daten in Nest Learning Thermostat und Nest Cam schreiben.

Voraussetzungen

Vor dem API - Aufrufe machen, erhält ein Zugriffstoken, wie beschrieben in Authentifizieren mit OAuth 2.0 und Beispielcode für die Zulassung .

Über REST-Schreibaufrufe

Verwenden Sie für REST-Aufrufe PUT oder PATCH, um Daten zu schreiben.

Inhaber-Authentifizierung

Wir empfehlen die Einhaltung des OAuth - "Bearer" Standard , das bietet Sicherheit erhöht , indem Sie "Bearer" Authentifizierungs - Token , den Zugang zu übertragen. Aufrufe mit Client-Anmeldeinformationen in der URL werden nicht empfohlen.

Der "Content-Type" Header weist den Server JSON zu verwenden.

Die "Authorization" Header bietet API - Zugriff.

Beispiele

In den folgenden Beispielen ersetzen YOUR_TOKEN_HERE mit Ihrer spezifischen Zugriffstoken, wie „c.twC2q ...“.

Den Abwesenheitszustand für eine Struktur festlegen

Um das zu ändern weg Zustand einer Struktur „ zu Hause“, schreibt das away Feld in dieses Format: "{"away": "home"}" , wobei „weg“ ist der Name des Feldes, und „ zu Hause“ ist die neuer Staat.

Zu schreiben , um eine Struktur, werden wir das Hinzufügen /structures Objekt und structure_id an den URL Root - Pfad. Beachten Sie, dass Zeichenfolgen mit "Anführungszeichen" formatiert sind.

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"

Ändern Sie die Temperaturskala (C/F) an einem Thermostat

In diesem Beispiel werden wir die Kraft , Temperaturskala zu Anzeige Grad Fahrenheit. Wenn Sie Ihr Produkt bauen, lesen Sie zuerst die Temperaturskala und entscheiden dann, ob Sie sie mit einem Schreibaufruf ändern möchten.

Um den Anruf zu tätigen, geben Sie das Feld und Wert , den Sie aktualisieren möchten: "{"temperature_scale": "F"}" , und den Stammpfad ändern schließen /devices/thermostats und der Thermostat device_id .

Locken
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"
Gehen
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);
        });
    }
});

Um das Node.js Codebeispiel zu verwenden, installieren Sie das Anforderungsmodul ( 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());
    }
}

So verwenden Sie das Java-Codebeispiel:

1. Laden Sie auf die neueste okhttp und Okio Jar - Dateien http://square.github.io/okhttp/ . Darüber hinaus laden Sie die Kotlin stdlib Datei auf https://mvnrepository.com/artifact/org.jetbrains.kotlin/kotlin-stdlib wenn Ihre Version von okhttp davon abhängt.

2. Erstellen Sie Ihren Code.

3. Kompilieren Sie das Programm und führen Sie es mit den folgenden Klassenpfadeinstellungen aus.

Ersetzen Sie Ihre Bibliothek Versionsnummern in den javac und java Befehle unter:
javac -cp .:okhttp-<ver>.jar:okio-<ver>.jar NestWrite.java
java -cp .:okhttp-<ver>.jar:okio-<ver>.jar:kotlin-stdlib-<ver>.jar NestWrite

Zum Beispiel, wenn Sie die folgenden Versionen 3.11.0 haben, 2.1.0 und 1.3.0, würde Ihre Befehle wie folgt aussehen:
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

Ändern Sie die Zieltemperatur an einem Thermostat

Nachdem Sie die Temperaturskala in Grad Fahrenheit ändern, können Sie die eingestellte Solltemperatur . Verwenden Sie denselben Vorgang wie in den vorherigen Beispielen, geben Sie das zu aktualisierende Feld/den Wert an und ändern Sie den Stammpfad. Beachten Sie, dass "strings" und numbers sind unterschiedlich formatiert.

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"

Legen Sie ein benutzerdefiniertes Etikett an einem Thermostat fest

Sie können auch das ändern Thermostat Label es eine angepasste Spitznamen zu geben. Um ein einfaches Anführungszeichen in den Namen aufzunehmen, können Sie das Unicode-Zeichen \u0027 verwenden.

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"

Legen Sie den Streaming-Status einer Kamera fest

In diesem Beispiel ändern wir den Stammpfad des Geräts , das Sie ändern möchten , reflektieren, /devices/cameras/ device_id , und stellen Sie die Kamera Zustand Streaming auf 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"

Verwenden von Postman zum Testen der API

Die oben genannten Curl-Aufrufe können in Postman leicht repliziert werden. Die folgenden Schritte ändern die Soll - Temperatur auf einen Thermostat, wie in dem Curl - Beispiel oben.

PUT-Header zum Schreiben
PUT Körper zum Schreiben

Verwenden Sie den Link - Code in Postman einen Aufruf in verschiedenen Sprachen als Ausgangspunkt für die weitere Entwicklung zu übersetzen.