Кажется, что свойства сообщения теряются после маршрутизации через Azure IoT edgeHub

Я не уверен, что это ошибка или я что-то упустил. Я также создал проблему на 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: {}

0 ответов

Проблема известна и отслеживается на github: https://github.com/Azure/azure-iot-sdk-python/issues/244

Другие вопросы по тегам