Paho MQTT 模块未从订阅的主题返回完整消息
Paho MQTT module not returning full message from subscribed topic
我目前正在使用通过 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 个字节,因为输出指向。我可以使用一个简单的 node-red 环境来证明该信息表明该主题确实发送了 10 个字节,而且绝不会少于那个,而 node-red 总是接收到 10 个,而且同样如此。
为什么会这样?我该如何应对?
您显示的所有示例都恰好有 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、space、换行 (\n) 或制表符 (\t)
我目前正在使用通过 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 个字节,因为输出指向。我可以使用一个简单的 node-red 环境来证明该信息表明该主题确实发送了 10 个字节,而且绝不会少于那个,而 node-red 总是接收到 10 个,而且同样如此。
为什么会这样?我该如何应对?
您显示的所有示例都恰好有 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、space、换行 (\n) 或制表符 (\t)