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.
이 페이지는 Cloud Translation API를 통해 번역되었습니다.
Switch to English

API 쓰기 예

온도 조절기

Nest API를 사용하여 구조 및 장치의 변경 사항을 청취하여 주택 소유자가 자리를 비울 때 에너지를 절약하고 무언가가 잘못되었다는 것을 알리거나 (차고 문이 열려있는 경우) 알리거나 더 편안하고 환영하는 집.

이 안내서에서는 PUT 명령을 사용하여 Nest 장치 및 구조에 데이터를 쓰는 방법을 배웁니다. 읽기 호출 방법을 배우려면 API 읽기 예제를 참조하십시오.

이 코드 샘플을 확인하고 Nest Learning Thermostat 및 Nest Cam에 데이터를 작성하는 방법을 배우십시오.

전제 조건

API 호출을하기 전에 OAuth 2.0 으로 인증샘플 인증 코드에 설명 된대로 액세스 토큰을 얻습니다.

REST 쓰기 호출 정보

REST 호출의 경우 PUT 또는 PATCH를 사용하여 데이터를 쓰십시오.

무기명 인증

액세스 토큰을 전송하기 위해 "Bearer" 인증을 사용하여 보안을 강화하는 OAuth 표준을 준수하는 것이 좋습니다. URL에 클라이언트 자격 증명이있는 통화는 권장되지 않습니다.

"Content-Type" 헤더는 서버가 JSON을 사용하도록 지시합니다.

"Authorization" 헤더는 API 액세스를 제공합니다.

다음 예에서 YOUR_TOKEN_HERE 를 "c.twC2q ..."와 같은 특정 액세스 토큰으로 바꾸 YOUR_TOKEN_HERE .

구조물의 자리 비움 상태 설정

구조의 자리 비움 상태 를 "홈"으로 변경하려면 "{"away": "home"}" 형식을 사용하여 away 필드를 작성하십시오 "{"away": "home"}" 여기서 "away"는 필드 이름이고 "home"은 새로운 상태.

구조에 쓰려면 /structures 객체와 structure_id 를 URL 루트 경로에 추가합니다. 문자열은 "따옴표"로 형식이 지정됩니다.

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 "

온도 조절기의 온도 눈금 (C / F) 변경

이 예에서는 온도 눈금 을 화씨 온도 로 표시합니다. 제품을 구축 할 때는 먼저 온도 눈금을 읽은 다음 쓰기 호출로 온도 눈금을 변경할지 결정합니다.

전화를 걸려면 업데이트 할 필드와 값 ( "{"temperature_scale": "F"}" )을 지정하고 /devices/thermostats 및 thermostat 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))

}
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);
        });
    }
});

Node.js 코드 예제를 사용하려면 요청 모듈 ( https://www.npmjs.com/package/request )을 설치하십시오.

npm install request
파이썬 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)
파이썬 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"))
자바
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());
    }
}

Java 코드 예제를 사용하려면 다음을 수행하십시오.

1. http://square.github.io/okhttp/ 에서 최신 okhttp 및 okio Jar 파일을 다운로드 하십시오 . 또한 okhttp 버전이 여기에 의존하는 경우 https://mvnrepository.com/artifact/org.jetbrains.kotlin/kotlin-stdlib 에서 Kotlin stdlib 파일을 다운로드하십시오.

2. 코드를 작성하십시오.

3. 다음 클래스 경로 설정으로 프로그램을 컴파일하고 실행하십시오.

아래의 javac 및 java 명령에서 라이브러리 버전 번호를 대체하십시오.
javac -cp .:okhttp- <ver> .jar:okio- <ver> .jar NestWrite.java
java -cp .:okhttp- <ver> .jar:okio- <ver> .jar:kotlin-stdlib- <ver> .jar NestWrite

예를 들어, 다음 버전 3.11.0, 2.1.0 및 1.3.0이있는 경우 명령은 다음과 같습니다.
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

온도 조절기의 목표 온도 변경

온도 스케일을 화씨로 변경 한 후 목표 온도를 설정할 수 있습니다. 이전 예제와 동일한 프로세스를 사용하고 업데이트 할 필드 / 값을 지정하고 루트 경로를 변경하십시오. "strings"numbers 의 형식이 다릅니다.

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 "

온도 조절기에 맞춤형 라벨 설정

온도 조절기 레이블 을 변경하여 사용자 정의 된 닉네임을 지정할 수도 있습니다. 이름에 작은 따옴표를 포함시키기 위해 유니 코드 문자 \ 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 "

카메라에서 스트리밍 상태 설정

이 예에서는 수정하려는 장치 /devices/cameras/ device_id 를 반영하도록 루트 경로를 변경하고 카메라 스트리밍 상태ON 으로 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 "

Postman을 사용하여 API 테스트

위의 컬 호출은 Postman에서 쉽게 복제 할 수 있습니다. 아래 단계는 위의 컬 예 와 같이 온도 조절기의 목표 온도를 변경합니다.

쓸 PUT 헤더
쓸 PUT 본문

Postman의 코드 링크를 사용하여 추가 개발을위한 출발점으로 통화를 다른 언어로 번역하십시오.