订阅事件

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

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

允许显示活动

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

前往 Device Access 控制台

如果您已启用事件(例如在创建项目期间),为事件启用 Pubsub 主题部分中的 Pub/Sub 主题字段应已有一个值,即旧格式的主题 ID:

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

如需从 Google 托管的主题进行迁移,请在 Device Access 控制台中停用 Google 托管的 Pub/Sub 主题,然后使用您自己的 Google Cloud 项目中创建的自托管 Pub/Sub 主题重新启用事件。迁移 Pub/Sub 主题配置不会使现有用户访问令牌或 OAuth 权限失效。

您可以在自己的 Google Cloud 项目中创建或更改自托管 Pub/Sub 主题,但需遵守标准 Google Cloud Pub/Sub 定价(其中包括每月 10 GB 的免费层级)。

创建 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,您需要使用它来完成启用事件的操作。如需了解详情,请参阅创建主题。

如需启用事件(或从 Google 托管的主题迁移),请执行以下操作:

  1. 如果创建新项目,请选择启用事件,然后点击创建项目。如果要迁移现有项目并使用 Google 托管的主题,请先在项目的“信息”界面中停用现有的 Pub/Sub 主题。
  2. 点击 Pub/Sub 主题的 图标,然后选择启用具有 PubSub 主题的事件(或修改当前主题)。
  3. 输入您之前创建的自托管 Pub/Sub 主题 ID。

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

创建拉取订阅

在拉取订阅中,订阅者会向 Pub/Sub 服务器发起请求,以获取已排队的事件消息。这是一种快速简便的方法,可用于验证是否正在为您的授权设备生成事件。

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

前往 Google 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 温控器附近的室温发生变化,系统会自动发送温度 特征的事件,其中包含新的 ambientTemperatureCelsius 值。

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

  1. 以物理方式更改设备的状态,例如更改 Nest 温控器的模式。
  2. 触发 Google Nest Cam 室内版上的事件,例如动作、人员或声音。
  3. 使用 SDM API 执行设备命令。

查看消息

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

前往 Google Cloud Pub/Sub 订阅页面

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

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

gcloud pubsub subscriptions pull subscription-id

如需详细了解订阅类型、SDM API 发送的事件类型以及如何使用这些事件,请参阅事件。

管理邮件

应定期确认并清除消息,以保持订阅的整洁,并避免向其他订阅者重复传送消息。您可以在 Pub/Sub 的“订阅”部分手动清除所有订阅消息:

前往 Google Cloud Pub/Sub 订阅页面

  1. 点击订阅 ID。
  2. 您可以通过以下几种方式确认并清除:
    1. 点击 查看消息以显示消息面板。选中启用确认消息复选框,然后点击 PULL 以查看并确认所有消息。
    2. 点击 PURGE MESSAGES(清除消息)以通过确认来清除所有现有消息,而无需查看这些消息。点击PURGE进行确认。

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

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

管理订阅

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

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

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