ドアホン(従来)

Nest Hello

以前のすべての 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" : "ffe4eef0-9acb-4632-935f-812490778c3f",
"timestamp" : "2019-01-01T00:00:01Z",
"resourceUpdate" : { "name" : "enterprises/project-id/devices/device-id", "events" : { "sdm.devices.events.DoorbellChime.Chime" : { "eventSessionId" : "CjY5Y3VKaTZwR3o4Y19YbTVfMF...", "eventId" : "MfXOPQqfVsRpCxIqyGdRVFqbgn..." } } } "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" : "9CGIaxy2OIN7WD5S4vsM8mmD5D..."
  }
}

レスポンス

{
  "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 エラーコードのリファレンスをご覧ください。