将消息发布到特定的子文件夹

Publish message to specific subfolder

我正在尝试使用 Google Cloud Platform 来做一个小物联网项目。

我在 "IoT Core" 部分创建了注册表和设备,并将注册表连接到默认主题。 我还为该主题指定了三个子文件夹:"events"、"config" 和 "status"。 现在,我想为传入消息连接一个 "Cloud Function",但我找不到如何配置单个子文件夹来监视如何在 "Cloud Pub/Sub" 部分中发布消息。

所有文档都讨论单一主题,所以......我是否遗漏了一些关于它如何工作的基本概念?

我认为正确的设置方法是为每个子文件夹设置一个 pubsub 主题。来自云物联网核心文档:

Devices can publish data to separate Pub/Sub topics by specifying a subfolder in the MQTT topic. The subfolder is the subtopic after {device-id}/events. For example, if the device publishes to the MQTT topic /devices/{device-id}/events/alerts, the subfolder is the string alerts. This subfolder must be configured in the device registry resource's eventNotificationConfigs.subfolderMatches field with a matching Pub/Sub topic in the eventNotificationConfigs.pubsubTopicName field. When data is sent to a subfolder, it is published to the subfolder's matching Pub/Sub topic.

https://cloud.google.com/iot/docs/how-tos/mqtt-bridge#publishing_telemetry_events_to_separate_pubsub_topics

需要备份一个步骤。你想用各种子文件夹做什么?这可能是对设备与云端之间的通信方式的误解。

所以,有 3 个 MQTT 主题,它们是 events/config/state(不是状态)。这些根本不映射到 Pub/Sub 个主题。它们分别在 IoT Core 中单独处理。

事件是设备-> 云,并被放入您在创建注册表时指定的 Pub/Sub 主题中。设置子文件夹就是将同一设备的遥测数据拆分到多个位置进行处理。所以,例如您有临时数据要放在一个 pub/sub 主题中,而压力数据要放在另一个主题中。处理此问题的另一种方法是将函数附加到主要 pub/sub 主题,解析遥测数据,然后根据有效负载本身向不同位置重新发出 Pub/Sub 消息。

Config 为 Cloud->device,通过调用 IoT Core Admin SDK 启动。如果您的设备订阅了 /config/ MQTT 主题,那么当某些外部实体向 IoT 发送配置消息时,它们将在 MQTT 客户端的 on_message 处理程序上获得回调(当然,具体代码取决于所使用的库)您设备的核心。

状态为设备->云但经过特殊处理,不涉及任何Pub/Sub主题。 IoT Core Admin SDK 可以检索结果。这是设备报告其状态然后外部 processes/applications 获取该状态的一种方式,而无需回调到设备本身。例如,当您的设备未保持连接但您仍希望能够根据最后已知状态执行操作时,这尤其有用。

因此,您唯一可以使用 Cloud Functions 的是 /events/ 主题。这是通过部署 Cloud Functions 并选择 Pub/Sub 发布事件挂钩作为函数的触发机制,并将 IoT Core 的注册表 Pub/Sub 主题指定为事件源来完成的。然后,只要您的设备将遥测数据发布到 /events/ MQTT 主题,它就会发布到该 Pub/Sub 主题(我知道这很混乱,因为我们称它们为主题)并且 Cloud Function 将启动。

希望这能澄清发生了什么?还是我完全错过了这个问题? :)