如何使用MQTT和C代码覆盖遥测事件? (这是微控制器代码) 我可以将数据发送到指定的主题,但是当我尝试订阅该主题时,出现错误消息
这是日志中的消息 “ mqttTopic”:“ / devices / my-device / events / my_telem_topic1”,
这是日志中的错误消息
“ message”:“订阅:无法订阅主题:'/ devices / my-device / events / my_telem_topic1'。”
答案 0 :(得分:2)
发送到Cloud IoT的遥测事件将发送到Cloud Pub/Sub topic的configured when the device registry is created,并且不能通过设备上的MQTT进行检索。可以使用Google Cloud中可用的任何机制来订阅这些消息(Cloud Functions,Cloud Dataflow或custom-written subscriber)。设备可以通过MQTT接收Commands。设备命令的主题是/devices/{device-id}/commands/#
。 APIs可用于向设备发送命令。
通常,人们会从设备发送遥测事件,使用上述Cloud产品之一对其进行分析,然后可能根据该分析结果向设备生成命令。
答案 1 :(得分:2)
要添加到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答案中的链接应该可以帮助您入门。
但是,正如他们所说,根据您正在执行的操作,您可能可以处理来自Cloud Function或类似功能中一台设备的传入遥测,然后为想要响应该遥测的设备设置配置。这样,如果该设备处于联机状态,则可以立即使用它;或者,如果该设备不处于联机状态,则可以在重新连接到IoT Core时获得它。