ドアホン(従来)

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このトレイトは、モーション検出イベントをサポートするデバイスに使用します。モーション
CameraPersonこのトレイトは、人物検出イベントをサポートするデバイスに使用します。人物
CameraSoundこのトレイトは、サウンド検知イベントをサポートするデバイスに使用します。サウンド
DoorbellChimeこのトレイトは、ドアホンのチャイムと関連する押下イベントをサポートするデバイスに使用します。Chime
情報このトレイトは、デバイス関連の情報を持つすべてのデバイスに使用します。

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" : "76f85e13-cc15-4705-83c3-0b3838118524",
"timestamp" : "2019-01-01T00:00:01Z",
"resourceUpdate" : { "name" : "enterprises/project-id/devices/device-id", "events" : { "sdm.devices.events.DoorbellChime.Chime" : { "eventSessionId" : "CjY5Y3VKaTZwR3o4Y19YbTVfMF...", "eventId" : "cV7T3NiEMXH5ZmQz21AwMaW0mF..." } } } "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" : "mFNqXZk08luMZuuBBPCPbS7mZ4..."
  }
}

レスポンス

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

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

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

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