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

时间:2018-11-21 10:21:57

标签: google-cloud-platform google-cloud-functions iot google-cloud-pubsub

我正在尝试使用Google Cloud Platform进行一个小的IoT项目。

我已经在“ IoT Core”部分创建了注册表和设备,并将注册表连接到默认主题。 我还为该主题指定了三个子文件夹:“事件”,“配置”和“状态”。 现在,我想为传入的消息连接一个“云功能”,但是在“云发布/订阅”部分中找不到如何配置单个子文件夹来监视如何在它们上发布消息的方法。

所有文档都只讨论单个主题。...我是否缺少一些基本概念?

2 个答案:

答案 0 :(得分:0)

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

  

设备可以通过在MQTT主题中指定子文件夹来将数据发布到单独的发布/订阅主题。子文件夹是{device-id} / events之后的子主题。例如,如果设备发布到MQTT主题/ devices / {device-id} / events / alerts,则子文件夹为字符串警报。必须在设备注册表资源的eventNotificationConfigs.subfolderMatches字段中配置此子文件夹,并在eventNotificationConfigs.pubsubTopicName字段中使用匹配的Pub / Sub主题。数据发送到子文件夹后,将发布到子文件夹的匹配发布/订阅主题。

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

答案 1 :(得分:0)

需要备份一个步骤。您打算如何处理各个子文件夹?这可能是对设备与云之间来回通信的工作方式的误解。

因此,有3个MQTT主题,它们是事件/配置/状态(不是状态)。那些根本不映射到发布/订阅主题。它们各自在IoT核心版中分别处理。

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

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

状态为device-> Cloud,但经过特殊处理,不会进入任何Pub / Sub主题。可以通过IoT Core Admin SDK检索结果。这是设备报告其状态,然后由外部进程/应用程序获取该状态的一种方法,而无需回调设备本身。例如,当您的设备无法保持连接状态,但您仍然希望能够根据最近的已知状态来执行操作时,此功能特别有用。

因此,可以与Cloud Functions一起使用的唯一一个是/ events /主题。通过部署云功能并选择“发布/订阅”发布事件挂钩作为该函数的触发机制,并指定IoT核心层的注册表“发布/订阅”主题作为事件的源,即可完成此操作。然后,只要您的设备将遥测发布到/ events / MQTT主题,它都会发布到该Pub / Sub主题(我知道这是我们都将其称为主题,这使我感到困惑),并且会触发Cloud Function。

希望这可以说明正在发生的事情?还是我完全错过了这个问题? :)