ドアホン(従来)

Nest Hello

従来の Google Nest Doorbell はすべて、Smart Device Management(SDM)API でサポートされています。 このデバイスは DOORBELL のデバイスタイプを返します。

sdm.devices.types.DOORBELL

Google Nest Doorbell(従来版)にはカメラが搭載されています。カメラはデバイスタイプの CAMERA と同じように機能します。

トレイト

リファレンス

以下のトレイト、コマンド、またはイベントがこのデバイスに関連しています。

トレイト説明コマンドイベント
CameraEventImageこのトレイトは、イベントからの画像の生成をサポートするすべてのデバイスに属します。GenerateImage
CameraImageこのトレイトは、画像の撮影をサポートするすべてのデバイスに属します。
CameraLiveStreamこのトレイトは、ライブ ストリーミングをサポートするデバイスが所有するものです。GenerateRtspStream
ExtendRtspStream
StopRtspStream
CameraMotionこのトレイトは、モーション検知イベントをサポートするすべてのデバイスに属します。モーション
カメラマンこのトレイトは、人感センサー イベントをサポートするすべてのデバイスに属します。担当者
CameraSoundこのトレイトは、サウンド検知イベントをサポートするすべてのデバイスに属します。サウンド
DoorbellChimeこのトレイトは、ドアホンのチャイムと関連するプレスイベントをサポートするすべてのデバイスに帰属します。チャイム
情報このトレイトは、あらゆるデバイスに関連する情報です。

JSON

GET レスポンスにトレイトが存在しない場合、そのトレイトまたは機能は現時点ではデバイスでは使用できません。詳細については、デバイスタイプをご覧ください。

{
  "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 トレイトの Motion イベント カメラが動きを検出しました。
イベント CameraPerson トレイトの Person イベント カメラで人物が検出されました。
イベント CameraSound トレイトの Sound イベント 音がカメラで検出されました。
イベント DoorbellChime トレイトの Chime イベント ドアホンが押されました。
たとえば、以下のようにドアホンボタンが押されました。

ペイロード

{
  "eventId" : "5fc898da-a76d-4b58-9f9b-b5972414df6b",
"timestamp" : "2019-01-01T00:00:01Z",
"resourceUpdate" : { "name" : "enterprises/project-id/devices/device-id", "events" : { "sdm.devices.events.DoorbellChime.Chime" : { "eventSessionId" : "CjY5Y3VKaTZwR3o4Y19YbTVfMF...", "eventId" : "OuHubzETcaD91HaBAXySlFt1WR..." } } } "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" : "9_4-WM1YJvhJjipL_vb3HVkTEY..."
  }
}

レスポンス

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

カメラ画像をダウンロードする

Basic 認証の HTTP 認証ヘッダーの token を使用して、GenerateImage コマンド レスポンスから url への GET 呼び出しを行い、カメラ画像をダウンロードします。

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

クエリ パラメータの width または height を使用して、ダウンロードした画像の解像度をカスタマイズします。これらのパラメータのうち 1 つのみを指定する必要があります。もう 1 つのパラメータは、カメラのアスペクト比に応じて自動的に調整されます。

たとえば、カメラのアスペクト比が 4:3 の場合、解像度 480 x 360 のカメラ画像をダウンロードするには、幅または高さを指定します。

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トレイトの適切な GenerateFormatStream コマンドを使用します。

RTSP

RTSP ストリームの場合、CameraLiveStream トレイトの 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 は、一度に 1 つのクライアントでのみ使用できます。複数のクライアントが同じカメラから同時にストリーミングを行う場合は、クライアントごとに RTSP コマンドを送信し、クライアントごとに独自のストリーム URL を使用する必要があります。

ライブ ストリームを延長する

カメラのライブ ストリームのセッションは 5 分間のみ有効です。ライブ ストリームの存続期間を延長する必要がある場合は、生成したストリーム形式のFormat CameraLiveStream トレイトの適切な ExtendFormat コマンドを使用します。

RTSP

RTSP ストリームを拡張するには、CameraLiveStream トレイトの 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トレイトの適切な Stop FormatStream コマンドを使用します。

RTSP

RTSP ストリームを停止するには、CameraLiveStream トレイトの 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 エラーコード リファレンスをご覧ください。