Mosquitto 将消息发送到 Azure IoTHub

本文关键字:Azure IoTHub 消息 Mosquitto | 更新日期: 2023-09-27 18:37:02

Azure在其IoTHub中实现了MQTT协议,所以我正在尝试使用mosquitto从我的PC发送消息。我正在使用设备资源管理器创建 Azure 设备。一开始,我从那里生成了 SAS 令牌,但它没有"&skn="部分,因此我尝试使用来自 Visual Studio 的兼容事件中心生成新的 SAS。之后,我尝试使用 mosquitto 代理使用 CONNECT 数据包中的参数向我的 IoTHub 发送 MQTT 消息,如下所述:

https://azure.microsoft.com/en-us/documentation/articles/iot-hub-devguide/#endpoints

但是连接不起作用,我真的不知道我哪里做错了。使用mosquitto_pub调试,我得到以下输出:"客户端 Mosquitto 发送 CONNECT 错误:连接丢失"你能帮我解决这个问题吗?提前谢谢。

这些是我的 mosquitto 命令,第一个是使用设备资源管理器生成的 SAS 令牌,第二个是使用 Visual Studio 生成的:

mosquitto_pub -h {IotHub Hostname} -p 8883 -t devices/{deviceId}/messages/events -v -V mqttv311 -i {deviceId} -d -u {Hub Name}.azure-devices.net/{deviceId} -P "HostName={Hub name}.azure-devices.net;DeviceId={deviceId};SharedAccessSignature sr=https%3a%2f%2f{Event hub compatible name}.servicebus.windows.net%2fdevices&sig=k030AmvBkmlNwy%2fLd47N8jQuj808jJg9EXnAGmEUan4%3d&se=2913829726&skn=iothubowner"

mosquitto_pub -h {IotHub Hostname} -p 8883 -t devices/{deviceId}/messages/events -v -V mqttv311 -i {deviceId} -d -u {Hub Name}.azure-devices.net/{deviceId} -P "HostName={Hub name}.azure-devices.net;DeviceId={deviceId};SharedAccessSignature=SharedAccessSignature sr={Hub name}.azure-devices.net%2fdevices%2f{deviceId}&sig=BYvo8GE%2fcOdnD8G3wsP7VElU4SwsVTSaACnif%2ffBj1k%3d&se=1456911258"

Mosquitto 将消息发送到 Azure IoTHub

Azure IoT Hub 仅适用于 SSL,他们不会在你可能查看的用户名/密码信息部分中公布 SSL。但是,此处的端点章节中简要提到了它。不要在命令中使用 SSL。

您的密码似乎也错了。如果你看前面提到的章节,你可以划掉DeviceId=*和HostName=*部分。此外,您的共享访问密钥的一部分似乎被转义了。也许这只是因为您将它复制到 SO,但请确保在使用 mosquitto 时不是那样的。您的密码应如下所示:

-P "SharedAccessSignature sr=yourtarget.azure-devices.net&sig=a_string_here&se=a_number&skn=policyname"

此外,目前(2016 年 3 月)mosquitto 和 Azure 通信之间似乎存在问题。有关更多详细信息,请参阅此问题。