0

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

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

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

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

mosquitto_pub -h {IotHub 主机名} -p 8883 -t devices/{deviceId}/messages/events -v -V mqttv311 -i {deviceId} -d -u {Hub Name}.azure-devices.net/{deviceId} - P "HostName={Hub 名称}.azure-devices.net;DeviceId={deviceId};SharedAccessSignature sr=https%3a%2f%2f{事件中心兼容名称}.servicebus.windows.net%2fdevices&sig=k030AmvBkmlNwy%2fLd47N8jQuj808jJg9EXnAGmEUan4% 3d&se=2913829726&skn=iothubowner"

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

4

1 回答 1

0

Azure IoT Hub 仅使用 SSL,他们不会在您可能查看的用户名/密码信息部分宣传 SSL。然而,在这里的端点章节中简要提到了它。您没有在命令中使用 SSL。

此外,您的密码似乎错误。如果您查看前面提到的章节,您可以从头开始 DeviceId=* 和 HostName=* 部分。此外,您的 SharedAccessKey 的一部分似乎已被转义。也许这只是因为您将其复制到 SO,但请确保在使用 mosquitto 时不是那样。您的密码应如下所示:

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

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

于 2016-03-10T09:49:16.717 回答