초인종 (기존)

Nest Hello

기존의 모든 Nest Doorbell은 Smart Device Management (SDM) API에서 지원됩니다. 이 기기는 DOORBELL의 기기 유형을 반환합니다.

sdm.devices.types.DOORBELL

Google Nest Doorbell (기존)에는 카메라가 있으며 이 카메라는 CAMERA의 기기 유형과 동일하게 작동합니다.

특성

참조

다음 특성, 명령어 또는 이벤트는 이 기기와 관련이 있습니다.

특성설명명령어이벤트
CameraEventImage이 특성은 이벤트에서 이미지 생성을 지원하는 모든 기기에 속합니다.GenerateImage
CameraImage이 특성은 이미지 촬영을 지원하는 모든 기기에 속합니다.
CameraLiveStream이 특성은 실시간 스트리밍을 지원하는 모든 기기에 속합니다.GenerateRtspStream
ExtendRtspStream
StopRtspStream
CameraMotion이 특성은 움직임 감지 이벤트를 지원하는 모든 기기에 속합니다.움직임
CameraPerson이 특성은 사람 감지 이벤트를 지원하는 모든 기기에 속합니다.사용자
CameraSound이 특성은 소리 감지 활동을 지원하는 모든 기기에 속합니다.사운드
DoorbellChime이 특성은 초인종 차임벨 및 관련 누르기 이벤트를 지원하는 모든 기기에 속합니다.풍경
정보이 특성은 모든 기기에 속하는 기기 관련 정보입니다.

JSON

GET 응답에 trait이 없으면 기기에서 trait 또는 기능을 사용할 수 없음을 나타냅니다. 자세한 내용은 기기 유형을 참고하세요.

{
  "type" : "sdm.devices.types.DOORBELL",
  "traits" : {
    "sdm.devices.traits.CameraEventImage" : {},
    "sdm.devices.traits.CameraImage" : {
      "maxImageResolution" : {
        "width" : 1280,
        "height" : 960
      }
    },
    "sdm.devices.traits.CameraLiveStream" : {
      "maxVideoResolution" : {
        "width" : 640,
        "height" : 480
      },
      "videoCodecs" : ["H264"],
      "audioCodecs" : ["AAC"],
      "supportedProtocols" : ["WEB_RTC"]
    },
    "sdm.devices.traits.CameraMotion" : {},
    "sdm.devices.traits.CameraPerson" : {},
    "sdm.devices.traits.CameraSound" : {},
    "sdm.devices.traits.DoorbellChime" : {},
    "sdm.devices.traits.Info" : {
      "customName" : "My device"
    }
  }
}

초인종 및 카메라 이벤트 처리

다음 이벤트는 DOORBELL 기기 유형에서 트리거될 수 있습니다.

유형 요소 설명
이벤트 CameraMotion trait의 모션 이벤트 카메라가 움직임을 감지했습니다.
이벤트 CameraPerson trait의 Person 이벤트 사람이 감지되었습니다.
이벤트 CameraSound 트레잇의 사운드 이벤트 카메라에서 소리가 감지되었습니다.
이벤트 DoorbellChime 특성의 Chime 이벤트 초인종을 눌렀습니다.
예를 들어 여기서는 초인종 버튼을 눌렀습니다.

페이로드

{
  "eventId" : "8f4508d1-bc26-460f-89d3-0fc4bb459586",
"timestamp" : "2019-01-01T00:00:01Z",
"resourceUpdate" : { "name" : "enterprises/project-id/devices/device-id", "events" : { "sdm.devices.events.DoorbellChime.Chime" : { "eventSessionId" : "CjY5Y3VKaTZwR3o4Y19YbTVfMF...", "eventId" : "mXoxxaV_vbgPOSXBfubLoLJnhY..." } } } "userId" : "AVPHwEuBfnPOnTqzVFT4IONX2Qqhu9EJ4ubO-bNnQ-yi",
"resourceGroup" : [ "enterprises/project-id/devices/device-id" ] }
이 이벤트의 페이로드에는 GenerateImage 명령어와 함께 사용할 수 있는 eventId가 포함됩니다. 이 명령어는 이벤트와 관련된 카메라 이미지의 다운로드 URL을 반환합니다.

요청

POST /enterprises/project-id/devices/device-id:executeCommand
{
  "command" : "sdm.devices.commands.CameraEventImage.GenerateImage",
  "params" : {
    "eventId" : "ASo3q4sgNsQSYcTuc_uhuq230b..."
  }
}

응답

{
  "results" : {
    "url" : "https://domain/sdm_event_snapshot/dGNUlTU2CjY5Y3VKaTZwR3o4Y1...",
    "token" : "g.0.eventToken"
  }
}

카메라 이미지 다운로드하기

기본 승인과 함께 HTTP 승인 헤더의 token를 사용하여 GenerateImage 명령어 응답에서 url를 GET 호출하여 카메라 이미지를 다운로드합니다.

curl -H "Authorization: Basic g.0.eventToken" \
      https://domain/sdm_event_snapshot/dGNUlTU2CjY5Y3VKaTZwR3o4Y1...

width 또는 height 쿼리 매개변수를 사용하여 다운로드한 이미지의 해상도를 맞춤설정합니다. 이 매개변수 중 하나만 지정하면 됩니다. 다른 매개변수는 카메라의 가로세로 비율에 따라 자동으로 조정됩니다.

예를 들어 카메라의 가로세로 비율이 4:3인 경우 해상도 480x360의 카메라 이미지를 다운로드하려면 너비 또는 높이를 지정합니다.

너비

curl -H "Authorization: Basic g.0.eventToken" \
      https://domain/sdm_event_snapshot/dGNUlTU2CjY5Y3VKaTZwR3o4Y1...?width=480

curl -H "Authorization: Basic g.0.eventToken" \
      https://domain/sdm_event_snapshot/dGNUlTU2CjY5Y3VKaTZwR3o4Y1...?height=360

다운로드 URL에 다른 제한사항이 적용됩니다.

  • 두 매개변수가 모두 URL에 제공되면 width가 사용되고 height은 무시됩니다.
  • URL에 매개변수가 제공되지 않으면 width에 기본값 480이 선택됩니다.

이미지 속성에 관한 자세한 내용은 CameraImage 트레잇을 참고하세요.

실시간 스트림 액세스

카메라에서 실시간 스트림에 액세스할 수 있습니다. 이 기기에서는 다음 스트림 형식이 지원됩니다.

  • RTSP

카메라와 지원되는 스트림 형식의 전체 목록은 지원되는 기기를 참고하세요.

실시간 스트림에 액세스하려면CameraLiveStream특성의 적절한 스트림 생성Format명령어를 사용합니다.

RTSP

RTSP 스트림의 경우 CameraLiveStream trait 명령어의 GenerateRtspStream 명령은 스트림 URL 및 관련 streamToken를 반환합니다.

요청

POST /enterprises/project-id/devices/device-id:executeCommand
{
  "command" : "sdm.devices.commands.CameraLiveStream.GenerateRtspStream",
  "params" : {}
}

응답

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

그런 다음 스트림 URL을 사용하여 카메라 실시간 스트림에 액세스합니다.

rtsps://someurl.com/CjY5Y3VKaTZwR3o4Y19YbTVfMF...?auth=g.0.streamingToken

RTSP 라이브 스트림 URL은 클라이언트 간에 공유할 수 없습니다. 스트림 URL은 한 번에 한 클라이언트에서만 사용할 수 있습니다. 여러 클라이언트가 동일한 카메라에서 동시에 스트리밍하려는 경우 RTSP 명령어를 개별 클라이언트별로 전송해야 하며 개별 클라이언트는 자체 스트림 URL을 사용해야 합니다.

실시간 스트림 확장하기

카메라 실시간 스트림 세션은 5분 동안만 유효합니다. 실시간 스트림의 전체 기간을 연장해야 한다면 생성한 스트림 형식에 맞는 CameraLiveStream 특성의 스트림 연장 명령어를Format사용하세요.

RTSP

RTSP 스트림을 확장하려면 CameraLiveStream trait 명령어의 ExtendRtspStream 명령어를 사용하여 새로운 streamExtensionTokenstreamToken 값을 가져옵니다.

요청

POST /enterprises/project-id/devices/device-id:executeCommand
{
  "command" : "sdm.devices.commands.CameraLiveStream.ExtendRtspStream",
  "params" : {
    "streamExtensionToken" : "CjY5Y3VKaTZwR3o4Y19YbTVfMF..."
  }
}

응답

{
  "results" : {
    "streamExtensionToken" : "dGNUlTU2CjY5Y3VKaTZwR3o4Y1...",
    "streamToken" : "g.0.newStreamingToken",
    "expiresAt" : "2018-01-04T18:30:00.000Z"
  }
}

실시간 스트림을 계속 보려면 스트림 URL을 다음과 같은 새 값으로 업데이트합니다.

rtsps://someurl.com/dGNUlTU2CjY5Y3VKaTZwR3o4Y1...?auth=g.0.newStreamingToken

실시간 스트림 중지

카메라 실시간 스트림을 더 이상 사용하지 않을 때는 실시간 스트림을 중지하고 무효화해야 합니다. 이렇게 하려면 생성한 스트림 형식에 맞는CameraLiveStream특성의 적절한 StopFormatStream 명령어를 사용하세요.

RTSP

RTSP 스트림을 중지하려면 토큰을 사용하여 CameraLiveStream trait 명령어의 StopRtspStream 명령어로 무효화합니다.

요청

POST /enterprises/project-id/devices/device-id:executeCommand
{
  "command" : "sdm.devices.commands.CameraLiveStream.StopRtspStream",
  "params" : {
    "streamExtensionToken" : "CjY5Y3VKaTZwR3o4Y19YbTVfMF..."
  }
}

응답

{}

오류

이 기기와 관련하여 다음과 같은 오류 코드가 반환될 수 있습니다.

오류 메시지 RPC 문제 해결
카메라 이미지를 더 이상 다운로드할 수 없습니다. DEADLINE_EXCEEDED 이벤트 이미지는 이벤트가 게시된 지 30초 후에 만료됩니다. 만료되기 전에 이미지를 다운로드하세요.
활동 ID가 카메라에 속하지 않습니다. FAILED_PRECONDITION 카메라 이벤트에서 반환된 올바른 eventID를 사용합니다.

API 오류 코드의 전체 목록은 API 오류 코드 참조를 확인하세요.