API 사용

액세스 토큰을 가져와 초기 기기 목록을 호출했으므로 이제 SDM API를 사용하여 기기에 액세스하고 제어할 수 있습니다.

구조물 및 기기 나열

curl를 사용하여 structures 엔드포인트에 간단한 GET 호출을 실행합니다.

curl -X GET 'https://smartdevicemanagement.googleapis.com/v1/enterprises/project-id/structures' \
    -H 'Content-Type: application/json' \
    -H 'Authorization: Bearer access-token'

호출이 성공하면 Device Access 프로젝트:

{
  "structures": [
    {
      "name": "enterprises/project-id/structures/structure-id",
      "traits": {
        "sdm.structures.traits.Info": {
          "customName": "structure-name"
        }
      }
    }
  ]
}

아직 하지 않았다면 devices 엔드포인트에 GET 호출을 수행하여 다음과 같이 기기 목록을 가져옵니다.

curl -X GET 'https://smartdevicemanagement.googleapis.com/v1/enterprises/project-id/devices' \
    -H 'Content-Type: application/json' \
    -H 'Authorization: Bearer access-token'

호출이 성공하면 Device Access에 연결된 기기 목록이 반환됩니다. 살펴보겠습니다 각 기기에는 사용 가능한 고유한 트레잇 목록이 있습니다.

{
  "devices": [
    {
      "name": "enterprises/project-id/devices/device-id",
      "type": "sdm.devices.types.device-type",
      "traits": { ... },
      "parentRelations": [
        {
          "parent": "enterprises/project-id/structures/structure-id/rooms/room-id",
          "displayName": "device-room-name"
        }
      ]
    }
  ]
}

각 기기의 device-id를 복사합니다. 다른 API 호출에 필요합니다.

기기 정보 가져오기

특정 기기에 관한 정보를 가져오려면 device-id에 GET 호출을 실행합니다. 엔드포인트:

curl -X GET 'https://smartdevicemanagement.googleapis.com/v1/enterprises/project-id/devices/device-id' \
    -H 'Content-Type: application/json' \
    -H 'Authorization: Bearer access-token'

응답은 이전과 비슷하지만 특정 기기에만 적용됩니다.

{
  "name": "enterprises/project-id/devices/device-id",
  "type": "sdm.devices.types.device-type",
  "traits": { ... },
  "parentRelations": [
    {
      "parent": "enterprises/project-id/structures/structure-id/rooms/room-id",
      "displayName": "device-room-name"
    }
  ]
}

명령어 실행

GET 호출이 성공적으로 실행되어 액세스 권한을 확인한 후 승인한 기기 유형에 따라 명령어를 실행해 봅니다.

온도 조절기

curl -X POST \
  'https://smartdevicemanagement.googleapis.com/v1/enterprises/project-id/devices/device-id:executeCommand' \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer access-token' \
  --data-raw '{
    "command" : "sdm.devices.commands.ThermostatMode.SetMode",
    "params" : {
      "mode" : "HEAT"
    }
  }'

카메라

curl -X POST \
  'https://smartdevicemanagement.googleapis.com/v1/enterprises/project-id/devices/device-id:executeCommand' \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer access-token' \
  --data-raw '{
    "command" : "sdm.devices.commands.CameraLiveStream.GenerateRtspStream",
    "params" : {}
  }'

호출이 성공하면 다음과 같은 결과가 발생합니다.

온도 조절기

빈 응답이 수신되고 실제 온도 조절기의 현재 모드가 명령어 매개변수에 지정된 모드로 변경됩니다.

{}

카메라

라이브 스트림 URL과 관련 토큰이 수신됩니다.

{
  "results" : {
    "streamUrls" : {
      "rtspUrl" : "rtsps://someurl.com/CjY5Y3VKaTZwR3o4Y19YbTVfMF...?auth=g.0.streamingToken"
    },
    "streamExtensionToken" : "CjY5Y3VKaTZwR3o4Y19YbTVfMF...",
    "streamToken" : "g.0.streamingToken",
    "expiresAt" : "2018-01-04T18:30:00.000Z"
  }
}

문제 해결

인증되지 않음

SDM API의 액세스 토큰은 1시간 동안만 유효합니다. UNAUTHENTICATED 응답이 표시되면 토큰이 만료되었을 가능성이 높습니다. 갱신 토큰을 사용하여 새 액세스 토큰을 가져옵니다.

기타 오류

오류 코드 참조에서 오류 코드의 전체 Device Access 목록