我正在尝试使用谷歌云平台来做一个小的物联网项目。
我在"物联网核心"部分创建了一个注册表和一个设备,并将注册表连接到一个默认主题。我还为该主题指定了三个子文件夹:"events"、"config"one_answers"status"。现在,我想为传入的消息连接一个"云功能",但在"云发布/子发布"部分,我找不到如何配置一个子文件夹来监控它们。
所有的文档都是关于单个主题的,所以……我是不是错过了一些关于它如何工作的基本概念?
需要备份一个步骤。您想如何处理各个子文件夹?这可能是对设备与云之间通信工作方式的误解。
因此,有3个MQTT主题,它们是事件/config/state(而不是状态(。这些根本没有映射到酒吧/子主题。它们分别在物联网核心中进行处理。
事件是设备->云,并被放入创建注册表时指定的Pub/Sub主题中。设置子文件夹就是将遥测数据从同一个设备拆分到多个位置进行处理。因此,例如,您在一个pub/sub主题中有想要进入的临时数据,在另一个主题中有需要进入的压力数据。处理此问题的另一种方法是将函数附加到主发布/子主题,解析遥测,然后根据有效载荷本身将发布/子消息重新发布到不同的位置。
Config是Cloud->设备,通过调用IoT Core Admin SDK启动。如果您的设备订阅了/config/MQT主题,那么当某个外部实体为您的设备向IoT Core发送配置消息时,他们将在MQTT客户端的on_message处理程序上获得回调(当然,确切的代码取决于所使用的库(。
状态是设备->云,但经过特殊处理,不涉及任何Pub/Sub主题。结果可以通过物联网核心管理SDK进行检索。这是设备报告其状态的一种方式,然后外部进程/应用程序获得该状态,而无需回调设备本身。例如,当你的设备没有保持连接,但你仍然希望能够根据上次已知的状态进行操作时,这一点尤其有用。
因此,您唯一可以使用云函数的是/events/topic。这是通过部署云功能并选择Pub/Sub发布事件挂钩作为该功能的触发机制来完成的,并指定IoT Core的注册表Pub/Sub主题作为事件源。然后,每当您的设备将遥测发布到/events/MQTT主题时,它都会被发布到Pub/Sub主题(我知道这很困惑,因为我们同时称它们为主题(,云函数就会启动。
希望这能澄清到底发生了什么?还是我完全错过了这个问题?:(
我认为正确的设置方法是为每个子文件夹设置一个pubsub主题。来自云iot核心文档:
设备可以通过在MQTT主题中指定子文件夹,将数据发布到单独的Pub/Sub主题。子文件夹是{device id}/事件之后的子主题。例如,如果设备发布到MQTT主题/设备/{device id}/事件/警报,则子文件夹为字符串警报。此子文件夹必须在设备注册表资源的eventNotificationConfigs.subfolderMatches字段中进行配置,并在eventNotificationConfig.subsubTopicName字段中使用匹配的Pub/Sub主题。当数据发送到子文件夹时,它将发布到子文件夹的匹配Pub/Sub主题。
https://cloud.google.com/iot/docs/how-tos/mqtt-bridge#publishing_telemetry_events_to_separate_pubsub_topics