Azure IoTHub DeviceMessage и фильтр маршрутов - PullRequest
0 голосов
/ 03 июля 2018

Я использую python и paho.mqtt для отправки сообщений в облако Я настроил конечную точку и маршрут. Когда я устанавливаю строку запроса на true , все отлично работает

messageDict = {}
systemPropertiesDict = {"contentType": "application/json", "contentEncoding": "utf-8", "iothub-message-source": "deviceMessages", "iothub-enqueuedtime": "2017-05-08T18:55:31.8514657Z"}
messageDict = {"systemProperties": systemPropertiesDict}
messageDict["appProperties"] = {}
body = '{id:1}'
messageDict["body"] = body
root = {"message":messageDict}
msg = json.dumps(root, indent=2).encode('utf-8')
print("Message to send", msg)
self.client.publish(topicName, msg)

Но если я установлю строку запроса на $ body.id = 1 , то я не получу никаких сообщений.

Есть идеи, ребята?

Ответы [ 2 ]

0 голосов
/ 04 июля 2018

следующие ссылки помогут вам со свойствами при использовании прямого протокола MQTT:

Использование протокола MQTT напрямую

Маршрутизация сообщений IoT Hub: теперь с маршрутизацией по телу сообщения

Использование протокола MQTT напрямую с property_bag

Azure IoT Hub Tester

.Net Reflector на Microsoft.Azure.Devices.Client сборка

Из текущей версии Microsoft.Azure.Device.Client (версия 1.17.0):

enter image description here

enter image description here

0 голосов
/ 04 июля 2018

Маршрут не работает, так как тип кодировки содержимого не задан. Все «системные свойства» в вашем коде фактически являются телом сообщения, а не системными свойствами. Тип кодировки содержимого, установленный этим методом, не вступает в силу.

Добавьте "$ .ct = application% 2Fjson & $. Ce = utf-8" в тему. Тогда это будет выглядеть так:

devices/{yourDeviceId}/messages/events/$.ct=application%2Fjson&$.ce=utf-8

Но чтобы запрос маршрута работал с вашим сообщением, вам нужно использовать следующую строку запроса: $ body.message.body.id = 1

Два редактирования:

Сначала измените body = '{id:1}' на body = {"id":1}, чтобы сделать идентификатор в виде строки.

Во-вторых, измените topicName значение на это:

devices/{yourDeviceId}/messages/events/$.ct=application%2Fjson&$.ce=utf-8

Если возможно, рекомендуется использовать Azure IoT SDK для Python для связи с концентратором IoT Azure.

...