事件是异步的,由 Google Cloud Pub/Sub 进行管理,每个 Project对应一个主题。事件可为所有设备和结构提供更新,并且只要用户未撤消访问令牌且事件消息未过期,系统就会保证收到事件。
事件是 SDM API 的一项可选功能。您可以使用 Google Cloud 项目轻松实现和验证这些功能。
允许显示活动
您可以在 Device Access 控制台中启用活动。在控制台中选择您的项目(如果尚未选择)。
如果您已启用事件(例如,在创建项目期间),为事件启用 Pubsub 主题部分中的 Pub/Sub 主题字段应已有一个值(称为主题 ID),采用的是以下旧格式:
projects/sdm-prod/topics/enterprise-project-id
此主题格式由 Google 托管,除非您停用 Google 托管的 Pub/Sub 主题,否则将一直适用于您的项目。如果您稍后重新启用该功能,系统会切换到自托管的 Pub/Sub 主题。
开发者可以在自己的 Google Cloud 项目中创建或更改自行托管的 Pub/Sub 主题。开发者还需承担与使用 Pub/Sub 相关的所有费用,如需了解详情,请参阅 Pub/Sub 价格。
创建 Pub/Sub 主题:
gcloud pubsub topics create {topic} --message-retention-duration=0s
授予必要的 SDM API 权限,以访问和发布项目的主题 ID 的事件数据:
gcloud pubsub topics add-iam-policy-binding projects/{project}/topics/{topic} \
--member="group:sdm-publisher@googlegroups.com" \
--role="roles/pubsub.publisher"
新创建的主题 ID 的格式如下所示:
projects/gcp-project-name/subscriptions/topic-id
请记下您的主题 ID,您需要使用它来完成启用事件。如需了解详情,请参阅创建主题。
如需启用活动,请执行以下操作:
- 选中启用活动,然后点击创建项目。
- 点击 Pub/Sub 主题的 图标,然后选择启用具有 PubSub 主题的事件。
- 输入之前提供或创建的 Pub/Sub 主题 ID。
复制您的主题 ID,您需要使用该 ID 创建主题订阅,以便检索事件消息。
创建拉取订阅
在拉取订阅中,订阅者会向 Pub/Sub 服务器发起请求,以获取已排队的事件消息。这是一种快速简便的方法,可用于验证是否正在为您的授权设备生成事件。
为您的 Google Cloud 项目打开 Cloud Shell:
在 Cloud Shell 提示符下,运行以下命令,使用您喜欢的任何 subscription-id 和您的唯一主题 ID 为主题创建拉取订阅:
gcloud pubsub subscriptions create subscription-id --topic=projects/gcp-project-name/subscriptions/topic-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 温控器附近的室温发生变化,系统会自动发送Temperature 特征的事件,并附带新的 ambientTemperatureCelsius
值。
如需手动生成一个,请执行以下任一操作:
- 手动更改设备的状态,例如更改 Nest 温控器的模式。
- 触发 Google Nest Cam 室内版上的事件,例如动作、人员或声音。
- 使用 SDM API 执行设备命令。
查看消息
您可以在 Google Cloud 项目的 Pub/Sub 订阅部分查看事件消息:
- 点击您之前创建的订阅 ID。
- 在订阅详情界面上,您应该会看到未确认的消息数图表的活动。这表示您的订阅已收到事件消息。如果您没有看到任何活动,请稍等片刻或再生成一些事件。
- 点击 查看消息以显示消息面板。
- 点击拉取即可查看消息。它们应与您用于生成事件的操作相对应。
您还可以在 Cloud Shell 中使用基本的 pull
命令查看消息:
gcloud pubsub subscriptions pull subscription-id
如需详细了解订阅类型、SDM API 发送的事件类型以及如何使用这些事件,请参阅事件。
管理邮件
应定期确认并清除消息,以保持订阅的整洁,并避免向其他订阅者重复传送消息。您可以在 Pub/Sub“订阅”部分手动清除所有订阅消息:
- 点击订阅 ID。
- 您可以通过以下几种方式确认并清除:
- 点击 查看消息以显示消息面板。选中启用确认消息复选框,然后点击 PULL 以查看并确认所有消息。
- 点击 清除消息,即可通过确认来清除所有现有消息,而无需查看这些消息。点击PURGE进行确认。
您还可以在 Cloud Shell 中使用带有基本 pull
命令的 --auto-ack
标志来清除消息:
gcloud pubsub subscriptions pull subscription-id --auto-ack
管理订阅
订阅可通过多种方式进行配置,如使用订阅属性中所述。
虽然您可自行决定如何管理订阅和消息,但对于生产应用,我们建议您使用服务账号进行身份验证,而不是像本快速入门指南中那样使用用户账号。服务账号由应用或虚拟机(而非个人)使用,并且具有自己的唯一账号密钥。
如需详细了解如何使用 Device Access进行服务账号身份验证,请参阅活动。