订阅事件

事件是异步的,并由 Google Cloud Pub/Sub 进行管理,每个 Project对应一个主题。事件可为所有设备和结构提供更新,只要用户未撤消访问令牌且事件消息未过期,即可确保收到事件。

事件是 SDM API 的可选功能。您可以使用 Google Cloud 项目轻松实现和验证这些代码。

允许显示活动

事件可以在控制台中启用。 Device Access 在控制台中选择您的项目(如果尚未选择)。

前往 Device Access 控制台

如果您已启用事件(例如在创建项目期间),项目信息部分中的 Pub/Sub 主题字段应已包含一个值(称为“主题 ID”),格式如下:

projects/sdm-prod/topics/enterprise-project-id

如果您尚未启用事件:

  1. 点击 Pub/Sub 主题对应的 图标,然后选择修改
  2. 选中启用事件,然后点击保存
  3. 系统会为您生成一个采用上述格式的主题 ID。

复制您的主题 ID,您需要用它来创建对主题的订阅,以便检索事件消息。

创建拉取订阅

在拉取订阅中,订阅方会向 Pub/Sub 服务器发起请求,以获取已加入队列的事件消息。您可以通过这种方式快速轻松地验证系统是否正在为已获授权的设备生成事件。

为您的 Google Cloud 项目打开 Cloud Shell:

转到 Google Cloud Shell

在 Cloud Shell 提示符中,运行以下命令,使用您喜欢的任意 subscription-id 和唯一的主题 ID 创建对主题的拉取订阅:

gcloud pubsub subscriptions create subscription-id --topic=projects/sdm-prod/topics/enterprise-project-id
Created subscription [projects/gcp-project-name/subscriptions/subscription-id].

发起事件

如需在创建 Pub/Sub 订阅后首次启动事件,请调用以将您的设备列为一项一次性触发器:

curl -X GET 'https://smartdevicemanagement.googleapis.com/v1/enterprises/project-id/devices' \
    -H 'Content-Type: application/json' \
    -H 'Authorization: Bearer access-token'

此 API 调用后,系统会发布所有结构和设备的事件。

生成事件

系统会针对所有 trait 字段更改生成事件,其中一些是自动更改,一些是手动更改。

例如,如果 Nest Thermostat 附近的环境温度发生变化,系统会自动发送一个包含新 ambientTemperatureCelsius 值的Temperature trait 事件。

如需手动生成一个,请执行以下任一操作:

  1. 手动更改设备状态,例如更改 Nest Thermostat 的模式。
  2. 触发 Google Nest Cam Indoor 上的事件,例如移动、有人或声音。
  3. 使用 SDM API 执行设备命令

查看消息

您可以在 Google Cloud 项目的“Pub/Sub 订阅”部分查看事件消息:

前往 Google Cloud Pub/Sub 订阅

  1. 点击您之前创建的订阅 ID。
  2. 订阅详情屏幕上,您应该会看到未确认消息数图表的活动记录。这表示您的订阅收到了事件消息。如果您没有看到任何活动,请稍等片刻或再生成一些事件。
  3. 点击 查看消息可调出消息面板。
  4. 点击PULL以查看消息。它们应与您用于生成事件的操作对应。

您还可以使用基本 pull 命令在 Cloud Shell 中查看消息:

gcloud pubsub subscriptions pull subscription-id

如需详细了解订阅类型以及 SDM API 发送的事件类型及其使用方法,请参阅事件

管理邮件

应定期确认和清除消息,以使订阅保持干净,并避免向其他订阅者重复传送消息。所有订阅消息都可以在 Pub/Sub 订阅部分中手动完全清除:

转到 Google Cloud Pub/Sub 订阅

  1. 点击订阅 ID。
  2. 您可以通过以下几种方式确认和清除:
    1. 点击 查看消息可调出消息面板。选中启用确认消息复选框,然后点击拉取以查看并确认所有消息。
    2. 点击 “清除消息”,通过确认而不查看消息以清除所有现有消息。点击清除进行确认。

您还可以在 Cloud Shell 中使用 --auto-ack 标志和基本 pull 命令来完全清除消息:

gcloud pubsub subscriptions pull subscription-id --auto-ack

管理订阅

订阅可以通过多种方式进行配置,如使用订阅属性中所述。

虽然您希望如何管理订阅和消息由您决定,但对于生产应用,我们建议您使用服务账号进行身份验证,而不是像本快速入门指南中介绍的那样使用用户账号。服务账号是由应用或虚拟机(而非个人)使用的,并且具有自己的唯一账号密钥。

如需详细了解如何使用 Device Access进行服务账号身份验证,请参阅事件