【发布时间】:2019-07-30 23:20:54
【问题描述】:
我在设备上使用 M2MQTT Paho Python 库发布如下:
msg = "POS {} {} {} {} {} {} {}"
msgtosend=msg.format(tagNum, tagID, x_pos, y_pos, z_pos, qos, unk)
print(msgtosend)
# qos=1 - (must be when clean_session is False)
mqttinfo=rpiclient.publish("dwm/position", msgtosend, 1)
if mqttinfo.rc != 0:
print("Publishing message with ID {) failed. Error Code={}".format(mqttinfo.mid, mqttinfo.rc))
然后,我尝试使用 M2MQTT C# 库(成功连接到 Azure IoT Hub 后)再次读取 C# 应用程序中的数据,如下所示:
tpc[0] = "devices/MasterTag/messages/devicebound/#";
tpc[1] = "$iothub/twin/PATCH/properties/desired/#";
tpc[2] = "$iothub/methods/POST/#";
tpc[3] = "$iothub/twin/res/#";
mqttClient.Subscribe(tpc, qosArray);
其中 qosArray 只有一项,它是 0 或 1。 ...然而,我没有收到任何消息。事实上,我的回调 MqttClient_MqttMsgSubscribed 也没有被调用,这意味着订阅不成功,但我没有收到错误消息或异常......
【问题讨论】:
-
我建议阅读hivemq.com/blog/mqtt-client-library-encyclopedia-m2mqtt 以了解使用 C# 的 M2Mqtt - MQTT 客户端库。
-
我很熟悉。这不是我正在做的第一个经纪人类型。我为 Raspi 上的 Mosquitto Broker 和 CloudMQTT 上的 Mosquitto 提供了完整的解决方案。这完全取决于代理本身以及他们使用/要求的身份验证差异。 Azure IoT Hub 和 AWS IoT 的文档和解释不够清楚,尤其是微软,它总是必须特别和更好......就像在这种情况下,它几乎是博士如何发布主题......
-
顺便说一句。 Azure IoT 中心不是通用通信代理。对于您的实施问题:M2MQTT 客户端是第 3 方库,推荐的文档显示了如何使用 C# 订阅主题,并且客户端连接的位置无关紧要。换句话说,在您的示例中,qosArray 必须有 4 个项目并且不依赖于 Azure IoT Hub,您必须遵循 M2MQTT 客户端 API,例如我推荐的文档。
-
您的 rpiclient(发布者)和 mqttClient(订阅者)是 Azure IoT Hub 中的不同设备吗?请注意,MQTT 协议是一个面向连接的协议,Azure IoT 中心不支持同一 iot 中心命名空间内的同一 deviceId 的多个 MQTT 连接。换句话说,第二个连接将断开第一个连接。
-
我的发布者是在 Raspi 上运行的 M2MQTT Paho Python,它通过串行从设备获取数据并尝试将其推送到 Azure IoT Hub(或其他选择的服务)。订阅者是在 Win10 笔记本电脑上运行的完整 C# 应用程序。此时,我在 Raspi 上有一个单独的 python 脚本,它充当每个大型服务的发布者(CloudMQTT 工作,Azure IoT Hub 和 AWS IoT 还没有,Google 稍后)。我的 C# 应用程序托管多个 Mqtt 客户端(按需),每个客户端都在需要时连接到不同的服务,同时...顺便说一句,我将尝试使用 QOS 提出您的建议...
标签: c# python-3.x publish-subscribe azure-iot-hub