Модуль Paho MQTT не возвращает полное сообщение из подписанной темы

В настоящее время я работаю с датчиком, который отправляет байты через MQTT, и использую модуль Paho MQTT для создания среды тестирования, чтобы я мог изучить внутренний процесс этого. Вот мой код, чтобы постоянно печатать сообщения, которые отправляет тема.

def on_message(sensorclt, userdata, msg):
    print(msg.payload)

def on_connect(sensorclt, userdata, flags, rc):
    if rc == 0:
        print('Connected')
        sensorclt.subscribe([(Topics[0], 0), (Topics[1], 0), (Topics[2], 0)])
    else:
        print("Failed to connect")
sensorclt = mqtt.Client()
sensorclt.connect(host='iot.eclipse.org', port=1883)
sensorclt.on_connect = on_connect
sensorclt.on_message = on_message
sensorclt.loop_forever()

Вот результат работы нескольких секунд:

b'\x01\x01\x00\x1f\xa4\x94Z\xe3\x03\x00'
b'\x01\x01\x01\x1f\xa4\x94Z\n\x00\x80'
b'\x01\x01\x02\x1f\xa4\x94Z\x06\x00\x00'
b'\x01\x01\x00 \xa4\x94Z\xe4\x03\x00'
b'\x01\x01\x01 \xa4\x94Z\n\x00\x80'
b'\x01\x01\x02 \xa4\x94Z\x06\x00\x00'
b'\x01\x01\x00!\xa4\x94Z\xe3\x03\x00'
b'\x01\x01\x01!\xa4\x94Z\t\x00\x80'

Дело в том, что в руководстве производителя сенсора говорится, что на выходе должно быть 10 байт, а не 8 или даже иногда 7. Я могу доказать эту информацию, используя простую среду узлового красного цвета, чтобы показать, что тема действительно отправляет 10 байтов, и никогда не меньше этого, а узелный красный всегда получает 10, и опять же, не меньше.

Узел-красный отладочный узел с

Почему это происходит? Как я могу противостоять этому?

1 ответ

Решение

Все примеры, которые вы показали, имеют ровно 10 байтов:

'\x01' '\x01' '\x00' '\x1f' '\xa4' '\x94' 'Z' '\xe3' '\x03' '\x00'
'\x01' '\x01' '\x01' '\x1f' '\xa4' '\x94' 'Z' '\n' '\x00' '\x80'
'\x01' '\x01' '\x02' '\x1f' '\xa4' '\x94' 'Z' '\x06' '\x00' '\x00'
'\x01' '\x01' '\x00' ' ' '\xa4' '\x94' 'Z' '\xe4' '\x03' '\x00'
'\x01' '\x01' '\x01' ' ' '\xa4' '\x94' 'Z' '\n' '\x00' '\x80'
'\x01' '\x01' '\x02' ' ' '\xa4' '\x94' 'Z' '\x06' '\x00' '\x00'
'\x01' '\x01' '\x00' '!' '\xa4' '\x94' 'Z' '\xe3' '\x03' \x00'
'\x01' '\x01' '\x01' '!' '\xa4' '\x94' 'Z' '\t' '\x00' '\x80'

Просто случается, что некоторые из этих байтов попадают в обычный диапазон символов, например!, Z, пробел, новая строка (\n) или табуляция (\t)

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