订阅事件

事件是异步的,由 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 托管,除非您停用 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,您需要使用它来完成启用事件。如需了解详情,请参阅创建主题

如需启用活动,请执行以下操作:

  1. 选中启用活动,然后点击创建项目
  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 温控器附近的室温发生变化,系统会自动发送Temperature 特征的事件,并附带新的 ambientTemperatureCelsius 值。

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

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

查看消息

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

前往 Google Cloud Pub/Sub 订阅页面

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

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

gcloud pubsub subscriptions pull subscription-id

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

管理邮件

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

前往 Google Cloud Pub/Sub 订阅页面

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

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

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

管理订阅

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

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

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