门铃(旧版)

Nest Hello

Smart Device Management (SDM) API 支持所有旧版 Nest Doorbell。此设备返回的设备类型为门铃:

sdm.devices.types.DOORBELL

Google Nest Doorbell(旧版)配备摄像头,其运作方式与设备类型为 CAMERA 的设备相同。

trait

参考

以下 trait、命令或事件与此设备相关:

特征说明命令事件
CameraEventImage此 trait 属于支持根据事件生成图片的任何设备。GenerateImage
CameraImage此 trait 属于支持拍照的任何设备。
CameraLiveStream此 trait 适用于任何支持直播的设备。GenerateRtspStream
ExtendRtspStream
StopRtspStream
CameraMotion此 trait 属于支持运动检测事件的任何设备。动作
CameraPerson此 trait 属于支持人体检测事件的任何设备。人称
CameraSound此 trait 属于支持声音检测事件的任何设备。声音
DoorbellChime此 trait 适用于支持门铃铃声和相关按压事件的任何设备。Chime
信息此 trait 属于任何设备,用于提供与设备相关的信息。

JSON

如果 GET 响应中不存在 trait,则表示该 trait 或功能目前不适用于相应设备。如需了解详情,请参阅设备类型

{
  "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"
    }
  }
}

处理门铃和摄像头事件

以下事件可能会由门铃设备类型触发:

类型 元素 说明
事件 CameraMotion trait 的 Motion 事件 摄像头检测到有动静。
事件 CameraPerson trait 的 Person 事件 摄像头检测到有人。
事件 CameraSound trait 的 Sound 事件 摄像头检测到声音。
事件 DoorbellChime trait 的 Chime 事件 有人按门铃了。
例如,下面的门铃按钮已被按下:

载荷

{
  "eventId" : "48d37271-301c-486f-9266-edcb53982e06",
"timestamp" : "2019-01-01T00:00:01Z",
"resourceUpdate" : { "name" : "enterprises/project-id/devices/device-id", "events" : { "sdm.devices.events.DoorbellChime.Chime" : { "eventSessionId" : "CjY5Y3VKaTZwR3o4Y19YbTVfMF...", "eventId" : "B_NM_J0fhsbLeJBLdjLJmvlFmS..." } } } "userId" : "AVPHwEuBfnPOnTqzVFT4IONX2Qqhu9EJ4ubO-bNnQ-yi",
"resourceGroup" : [ "enterprises/project-id/devices/device-id" ] }
此事件的载荷包含一个 eventId,可与 GenerateImage 命令搭配使用。此命令会返回与事件相关的相机图片的下载网址:

请求

POST /enterprises/project-id/devices/device-id:executeCommand
{
  "command" : "sdm.devices.commands.CameraEventImage.GenerateImage",
  "params" : {
    "eventId" : "TLJkb40AC62FKKrZvfBe1DPbhD..."
  }
}

响应

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

下载相机图片

使用 HTTP Authorization 标头中的 token 和基本授权,从 GenerateImage 命令响应中对 url 发出 GET 调用,以下载相机图片:

curl -H "Authorization: Basic g.0.eventToken" \
      https://domain/sdm_event_snapshot/dGNUlTU2CjY5Y3VKaTZwR3o4Y1...

使用 widthheight 查询参数来自定义下载图片的分辨率。只需指定其中一个参数。另一个参数会根据摄像头的宽高比自动缩放。

例如,如果相机的宽高比为 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

下载网址还存在其他限制:

  • 如果网址中同时提供了这两个参数,则系统会使用 width 并忽略 height
  • 如果网址中未提供这两个参数,系统会为 width 选择默认值 480。

如需了解图片属性,请参阅 CameraImage trait。

访问直播

可以访问摄像头的实时画面。此设备支持以下串流格式:

  • RTSP

如需查看摄像头和受支持的直播格式的完整列表,请参阅受支持的设备

如需访问直播,请使用CameraLiveStreamtrait 的适当 GenerateFormatStream 命令。

RTSP

对于 RTSP 流,CameraLiveStream trait 命令的 GenerateRtspStream 命令会返回流网址和相关 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"
  }
}

然后,使用视频流网址访问摄像头的实时视频画面:

rtsps://someurl.com/CjY5Y3VKaTZwR3o4Y19YbTVfMF...?auth=g.0.streamingToken

RTSP 直播网址无法在客户端之间共享。一个串流网址一次只能由一个客户端使用。如果多个客户端想要同时从同一摄像头进行流式传输,则必须为每个单独的客户端发送 RTSP 命令,并且每个单独的客户端都必须使用自己的流式传输网址。

延长直播

摄像头直播会话仅有效 5 分钟。如果您需要延长直播的生命周期,请针对您生成的直播格式使用 CameraLiveStream trait 的适当 ExtendFormatStream 命令。

RTSP

如需延长 RTSP 流,请使用 CameraLiveStream trait 命令的 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"
  }
}

使用以下新值更新直播网址,以继续观看直播:

rtsps://someurl.com/dGNUlTU2CjY5Y3VKaTZwR3o4Y1...?auth=g.0.newStreamingToken

停止直播

每当您不再使用摄像头实时视频画面时,都应停止该画面并使其失效。为此,请针对您生成的流格式使用CameraLiveStreamtrait 的适当 StopFormatStream 命令。

RTSP

如需停止 RTSP 流式传输,请使用 CameraLiveStream trait 命令的 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 错误代码参考文档