Я не уверен, что это ошибка или я что-то упустил.Я также создал проблему на GitHub несколько дней назад, но пока без резонанса.
Вот мой сценарий: я использую Raspberry Pi в качестве прозрачного IoT Edge Gateway с двумя пользовательскимимодули в дополнение к edgeAgent и edgeHub.EdgeHub сконфигурирован для маршрутизации сообщений, поступающих с конечного устройства, на один из пользовательских модулей с маршрутом ниже.
FROM /messages/* WHERE NOT IS_DEFINED($connectionModuleId) INTO BrokeredEndpoint(\"/modules/camera-capture/inputs/input1\")
В модуле я добавил функцию, которая прослушивает входящие сообщения на входе1, и я могу видетьсообщения и распечатать тело сообщения.В приложении для конечных устройств я отправляю сообщения через MQTT со свойствами приложения (см. Фрагмент кода 1).Когда я изменяю маршрут на ...
FROM /messages/* WHERE (CameraState = 'true') INTO BrokeredEndpoint(\"/modules/camera-capture/inputs/input1\")
..., только половина сообщений направляется в модуль, что указывает на то, что свойство найдено в edgeHub и правильно интерпретировано.Однако, когда я пытаюсь извлечь свойства сообщения в модуле CameraCapture (см. Фрагмент кода 2), они кажутся пустыми (см. Вывод консоли).
Таким образом, кажется, что свойства сообщения теряются послемаршрутизация через краевой концентратор.Также тот же результат с использованием AMQP.
Вот как я отправляю сообщение (фрагмент 1):
client = IoTHubClient(CONNECTION_STRING, PROTOCOL)
set_certificates(client)
message = IoTHubMessage("test message")
# send a message every two seconds
while True:
# add custom application properties
prop_map = message.properties()
if run_camera:
prop_map.add_or_update("CameraState", "true")
else:
prop_map.add_or_update("CameraState", "false")
client.send_event_async(message, send_confirmation_callback, None)
print("Message transmitted to IoT Edge")
time.sleep(2)
Это получатель (фрагмент 2):
def receive_message_callback(message, hubManager):
global RECEIVE_CALLBACKS
message_buffer = message.get_bytearray()
size = len(message_buffer)
print ( "Message received: %s" % message_buffer[:size].decode('utf-8'))
map_properties = message.properties()
key_value_pair = map_properties.get_internals()
print ("Key value pair: %s" % key_value_pair)
return IoTHubMessageDispositionResult.ACCEPTED
РЕДАКТИРОВАТЬ: Добавлены журналы консоли:
Message received: test message
Key value pair: {}
Waiting...
Waiting...
Message received: test message
Key value pair: {}