表示

Google Nest Hub Max

Google Nest Hub Max のディスプレイは Smart Device Management(SDM)API でサポートされています。このデバイスは DISPLAY というデバイスタイプを返します。

sdm.devices.types.DISPLAY

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

トレイト

リファレンス

このデバイスに関連するトレイト、コマンド、イベントは次のとおりです。

トレイト説明コマンドイベント
CameraEventImageこのトレイトは、イベントからの画像の生成をサポートするデバイスに使用します。GenerateImage
CameraImageこのトレイトは、画像の撮影に対応しているすべてのデバイスに使用します。
CameraLiveStreamこのトレイトは、ライブ配信をサポートするあらゆるデバイスに属します。GenerateRtspStream
ExtendRtspStream
StopRtspStream
CameraMotionこのトレイトは、モーション検知イベントをサポートするデバイスに属します。モーション
CameraPersonこのトレイトは、人感センサーのイベントをサポートするすべてのデバイスに使用します。人物
CameraSoundこのトレイトは、サウンド検知イベントをサポートするデバイスに属します。サウンド
情報このトレイトは、デバイス関連情報のどのデバイスにも属します。

JSON

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

{
  "type" : "sdm.devices.types.DISPLAY",
  "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.Info" : {
      "customName" : "My device"
    }
  }
}

カメラ イベントを処理する

DISPLAY デバイスタイプから次のイベントがトリガーされる可能性があります。

種類 要素 説明
イベント CameraMotion トレイトの Motion イベント カメラで動きが検知されました。
イベント CameraPerson トレイトの Person イベント カメラで人物が検出されました。
イベント CameraSound トレイトの Sound イベント カメラで音が検知されました。
たとえば、カメラが動きを検出した場合は、次のようになります。

ペイロード

{
  "eventId" : "bfbee80c-edcc-4226-bcac-e5ec1eccd2b6",
"timestamp" : "2019-01-01T00:00:01Z",
"resourceUpdate" : { "name" : "enterprises/project-id/devices/device-id", "events" : { "sdm.devices.events.CameraMotion.Motion" : { "eventSessionId" : "CjY5Y3VKaTZwR3o4Y19YbTVfMF...", "eventId" : "vIYRjdB2X-vALW8FbOnvWpfXIw...", } } } "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" : "3waXpDAeXSMj9vjbCxEzNGJ8O_..."
  }
}

レスポンス

{
  "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 コマンドを使用して、新しい 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トレイトの適切な 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 エラーコード リファレンスをご覧ください。