
以前のすべての Google Nest ドアホンは、Smart Device Management(SDM)API でサポートされています。このデバイスは、デバイスタイプ DOORBELL を返します。
sdm.devices.types.DOORBELL
Google Nest Doorbell(旧型)にはカメラが搭載されており、カメラのデバイスタイプと同じように機能します。
トレイト
リファレンス
このデバイスに関連するトレイト、コマンド、イベントは次のとおりです。
| トレイト | 説明 | コマンド | イベント | 
|---|---|---|---|
| CameraEventImage | このトレイトは、イベントからの画像の生成をサポートするデバイスに使用します。 | GenerateImage | |
| CameraImage | このトレイトは、画像の撮影をサポートするすべてのデバイスに使用します。 | ||
| CameraLiveStream | このトレイトは、ライブ ストリーミングをサポートするデバイスに使用します。 | GenerateRtspStream ExtendRtspStream StopRtspStream  | |
| CameraMotion | このトレイトは、モーション検出イベントをサポートするデバイスに使用します。 | モーション | |
| CameraPerson | このトレイトは、人物検出イベントをサポートするデバイスに使用します。 | Person | |
| 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" : "81c47849-842c-4ed4-b686-6dea1785b3cb",
  "timestamp" : "2019-01-01T00:00:01Z",
  "resourceUpdate" : {
    "name" : "enterprises/project-id/devices/device-id",
    "events" : {
      "sdm.devices.events.DoorbellChime.Chime" : {
        "eventSessionId" : "CjY5Y3VKaTZwR3o4Y19YbTVfMF...",
        "eventId" : "AHPLtZsPngJu4YljqJM6QgyAdU..."
      }
    }
  }
  "userId" : "AVPHwEuBfnPOnTqzVFT4IONX2Qqhu9EJ4ubO-bNnQ-yi",
  "resourceGroup" : [
    "enterprises/project-id/devices/device-id"
  ]
}eventId が含まれています。このコマンドは、イベントに関連するカメラ画像のダウンロード URL を返します。
リクエスト
POST /enterprises/project-id/devices/device-id:executeCommand
{
  "command" : "sdm.devices.commands.CameraEventImage.GenerateImage",
  "params" : {
    "eventId" : "AnoVQgnV5Fd8XIgUHLD2F3DDvB..."
  }
}
レスポンス
{
  "results" : {
    "url" : "https://domain/sdm_event_snapshot/dGNUlTU2CjY5Y3VKaTZwR3o4Y1...",
    "token" : "g.0.eventToken"
  }
}
カメラ画像をダウンロードする
GenerateImage コマンド レスポンスから url への GET 呼び出しを行い、HTTP 認証ヘッダーの token を基本認証で使用して、カメラ画像をダウンロードします。
curl -H "Authorization: Basic g.0.eventToken" \
      https://domain/sdm_event_snapshot/dGNUlTU2CjY5Y3VKaTZwR3o4Y1...width または height クエリ パラメータを使用して、ダウンロードした画像の解像度をカスタマイズします。これらのパラメータのうち、指定する必要があるのは 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 分間のみ有効です。ライブ ストリームの有効期間を延長する必要がある場合は、生成したストリーム形式の CameraLiveStream トレイトの適切な ExtendFormatStream コマンドを使用します。
RTSP
RTSP ストリームを延長するには、CameraLiveStream トレイト コマンドの ExtendRtspStream コマンドを使用して、新しい streamExtensionToken 値と streamToken 値を取得します。
リクエスト
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 トレイト コマンドの 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 エラーコードのリファレンスをご覧ください。