Mosquitto отправка сообщений в Azure IoTHub
Azure реализовал протокол MQTT в своем IoTHub, поэтому я пытаюсь использовать mosquitto для отправки сообщений с моего компьютера. Я создаю устройства Azure, используя Device Explorer. Вначале я сгенерировал токен SAS оттуда, но у него нет части "&skn=", поэтому я попытался сгенерировать новый SAS с использованием совместимого концентратора событий из Visual Studio. После этого я попытался использовать Mosquitto Broker для отправки сообщения MQTT на мой IoTHub, используя параметры в пакете CONNECT, как описано здесь:
https://azure.microsoft.com/en-us/documentation/articles/iot-hub-devguide/
Однако связь не работает, и я действительно не знаю, где я делаю неправильно. Используя отладку 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 {Имя концентратора}.azure-devices.net/{deviceId} -P "HostName={имя концентратора}.azure-devices.net;DeviceId={deviceId};SharedAccessSignature sr=https%3a%2f%2f{Имя, совместимое с концентратором событий}.servicebus.windows.net%2fdevices&sig=k030AmvBkmlNwy%2fLd47n8jgjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj9 3d& се =2913829726& СКН = iothubowner"
mosquitto_pub -h {Имя хоста IotHub} -p 8883 -t devices/{deviceId}/messages/events -v -V mqttv311 -i {deviceId} -d -u {Имя концентратора}.azure-devices.net/{deviceId} -P "HostName={имя хаба}.azure-devices.net;DeviceId={deviceId};SharedAccessSignature=SharedAccessSignature sr={имя хаба}.azure-devices.net%2fdevices%2f{deviceId}&sig=BYvo8GE%2fcOdnD8G3wsPjwfsVFS %3d& SE =1456911258"
1 ответ
Azure IoT Hub работает только с SSL, который они не размещают в разделе, где вы, вероятно, просматривали информацию об имени пользователя и пароле. Однако это кратко упоминается в главе о конечных точках здесь. Вы не используете SSL в своей команде.
Также ваш пароль кажется неправильным. Если вы посмотрите на ранее упомянутую главу, вы можете поцарапать часть DeviceId=* и HostName=*. Кроме того, часть вашего SharedAccessKey, по-видимому, экранирована. Может быть, это только потому, что вы скопировали его в SO, но будьте уверены, что это не так при использовании mosquitto. Ваш пароль должен выглядеть так:
-P "SharedAccessSignature sr=yourtarget.azure-devices.net&sig=a_string_here&se=a_number&skn=policyname"
Кроме того, в настоящий момент (март 2016 г.) существует проблема между москитом и лазурной связью. Смотрите этот вопрос для более подробной информации.