以前の 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 | このトレイトは、モーション検知イベントをサポートするデバイスに属します。 | モーション | |
CameraPerson | このトレイトは、人感センサーのイベントをサポートするすべてのデバイスに使用します。 | 人物 | |
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" : "e1534b31-2068-43e5-b4c8-95a1e236ac11",
"timestamp" : "2019-01-01T00:00:01Z",
"resourceUpdate" : { "name" : "enterprises/project-id/devices/device-id", "events" : { "sdm.devices.events.DoorbellChime.Chime
" : { "eventSessionId" : "CjY5Y3VKaTZwR3o4Y19YbTVfMF...", "eventId" : "vk2yyhCTJj07lmKSIKTUugRqQL..." } } } "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" : "FYghj2y1oH0xY-jj0L0RM_uMZV..."
}
}
レスポンス
{ "results" : { "url" : "https://domain/sdm_event_snapshot/dGNUlTU2CjY5Y3VKaTZwR3o4Y1...", "token" : "g.0.eventToken" } }
カメラ画像をダウンロードする
カメラ画像をダウンロードするには、Basic 承認の HTTP Authorization ヘッダーの 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 分間のみ有効です。ライブ ストリームの有効期間を延長する必要がある場合は、生成したストリーム形式に対応する 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 エラーコード リファレンスをご覧ください。