0

如何使用 MQTT 和 C 代码订阅遥测事件?(这是一个微控制器代码)我可以将数据发送到指定的主题,但是当我尝试订阅这个主题时,我收到了错误消息

这是来自日志“mqttTopic”的消息:“/devices/my-device/events/my_telem_topic1”,

这是来自日志
“消息”的错误消息:“订阅:订阅主题失败:'/devices/my-device/events/my_telem_topic1'。”

4

2 回答 2

3

添加到 Kamal 发布的内容:

这里的部分混淆是 MQTT 和 Pub/Sub(IoT Core 放置设备遥测事件的地方)都称为“主题”。

有 4 个 MQTT 主题可供设备使用(这都在设备端,而不是云端):

/devices/<device-id>/commands
/devices/<device-id>/config
/devices/<device-id>/state
/devices/<device-id>/events

前两个是供设备订阅的,以便从 IoT Core Admin SDK 获取更新,后两个是设备将数据发布到云的主题。

为了让设备订阅另一个设备的遥测数据,它需要能够订阅从其他设备接收遥测数据的 Pub/Sub 主题。这不会作为 MQTT 实现的一部分完成,而是需要在您的设备上实现 Pub/Sub API。这也需要一个单独的身份验证路径,可能是您添加到 GCP 项目中的服务帐户密钥,然后下载到您的设备。如果您想沿着这条路线走,Kamal 答案中的链接应该可以帮助您入门。

但是,正如他们所说,根据您正在做的事情,您可能可以处理来自云功能或类似设备中的一个设备的传入遥测,然后为想要响应该遥测的设备设置配置。这样,如果设备在线,它会立即获取它,或者如果它不在线,它会在重新连接到 IoT Core 时获取它。

于 2019-04-11T15:57:46.453 回答
2

发送到 Cloud IoT 的遥测事件被发送到Cloud Pub/Sub 主题,该主题是在创建设备注册表时配置的,并且不打算通过设备上的 MQTT 检索。可以使用 Google Cloud 中可用的任何机制来订阅这些消息(Cloud FunctionsCloud Dataflow自定义编写的订阅者)。设备可以通过 MQTT 接收命令。设备命令的主题是/devices/{device-id}/commands/#API可用于向设备发送命令。

人们通常会从设备发送遥测事件,使用上述云产品之一对其进行分析,然后可能会根据分析结果向设备生成命令。

于 2019-04-09T11:31:36.290 回答