事件是异步的,并由 Google Cloud Pub/Sub 进行管理,每个 Project都在一个主题中。事件会为所有设备和结构提供更新,只要用户未撤消访问令牌且事件消息未过期,就能保证事件接收。
事件是 SDM API 的可选功能。您可以使用 Google Cloud 项目轻松实现和验证这些代码。
允许显示活动
事件可以在控制台中启用。 Device Access 如果您尚未在控制台中选择您的项目,请在该控制台中选择。
如果您已启用事件(例如,在项目创建期间),则“项目信息”部分中的 Pub/Sub 主题字段应已有一个值(称为主题 ID),格式如下:
projects/sdm-prod/topics/enterprise-project-id
如果您尚未启用事件:
- 点击 Pub/Sub 主题的 图标,然后选择修改。
- 选中启用事件,然后点击保存。
- 系统会为您生成一个主题 ID(格式如上所示)。
复制您的主题 ID,您需要用它来创建对主题的订阅,以便检索事件消息。
创建拉取订阅
拉取订阅是指订阅者向 Pub/Sub 服务器发起请求以获取已加入队列的事件消息。通过这种方法,您可以轻松快捷地验证是否为授权设备生成了事件。
为您的 Google Cloud 项目打开 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 调用后发布。
生成事件
系统会针对所有特征字段更改生成事件,其中一些是自动的,有些是手动的。
例如,如果 Nest Thermostat 附近的环境温度发生变化,系统将自动发送Temperature 特征的事件,并提供新的 ambientTemperatureCelsius
值。
要手动生成一个代码,请执行以下任一操作:
- 以物理方式更改设备状态,例如更改 Nest Thermostat 的模式。
- 在 Google Nest Cam Indoor 上触发事件,例如动作、人物或声音。
- 使用 SDM API 执行设备命令。
查看邮件
您可以在 Google Cloud 项目的“Pub/Sub 订阅”部分查看事件消息:
- 点击您之前创建的订阅 ID。
- 在订阅详情屏幕上,您应该会看到未确认消息数图表的活动。这表示您的订阅收到了事件消息。如果您没有看到任何活动,请稍等片刻,或者再生成几个事件。
- 点击 查看消息即可调出消息面板。
- 点击拉取以查看消息。它们应与您用于生成事件的操作相对应。
您还可以使用基本的 pull
命令在 Cloud Shell 中查看消息:
gcloud pubsub subscriptions pull subscription-id
如需详细了解订阅类型以及 SDM API 发送的事件类型及其使用方法,请参阅事件。
管理邮件
应定期确认和清除消息,以使订阅保持干净,并避免向其他订阅者重复传送消息。所有订阅消息都可以在 Pub/Sub 订阅部分中手动完全清除:
- 点击订阅 ID。
- 您可以通过以下几种方式确认和完全清除:
- 点击 查看消息即可调出消息面板。选中 Enable ack messages 复选框,然后点击 PULL 以查看并确认所有消息。
- 点击 “清除消息”,通过确认而不查看消息以清除所有现有消息。点击完全清除进行确认。
您还可以使用 --auto-ack
标志和基本的 pull
命令在 Cloud Shell 中完全清除消息:
gcloud pubsub subscriptions pull subscription-id --auto-ack
管理订阅
如使用订阅属性中所述,订阅可以通过多种方式进行配置。
虽然您希望如何管理订阅和消息由您决定,但对于生产应用,我们建议您使用服务帐号进行身份验证,而不是像本快速入门指南中介绍的那样使用用户帐号。服务帐号由应用或虚拟机使用,而非真人,并且拥有自己的唯一帐号密钥。
如需详细了解如何使用 Device Access进行服务帐号身份验证,请参阅事件。