msg.payload.split 在 python 中的 mqtt 失败。怎么修?
msg.payload.split fails for mqtt in python. How to fix?
我创建了一个 MQTT class。它确实连接正常,并在连接时发布 "Online" 消息。然而,on_message 方法出了点问题,因为它启动但卡在拆分有效负载
class mqtt_function():
def __init__(self):
self.mqttc = mqtt.Client()
# MQTT settings here
self.mqttc.loop_forever()
def on_connect(self, client, userdata,flags, rc):
message = "connected with rc: " + str(rc)
self.mqttc.subscribe(self.topic, 2)
print("subscribed to ", self.topic)
self.mqttc.publish(self.topicStatus, "Online", 1, True)
def on_message(self, client, obj, msg):
print("on_message method started")
print(msg.payload)
info = msg.payload.split(",")
print("message was split")
returns
subscribed to commands/home
on_message method started
b'60,1581638400'
期望:
msg.payload.split 应该用逗号将负载消息分隔到名为 info 的列表中。但是,这不会发生。
问题在于理解 msg.payload 格式。
虽然 print(msg.payload) returns 是清晰的文本,但 msg.payload 不是字符串而是 ASCII 码。将 msg.payload 从 ASCII 转换为字符串后,可以使用 .split 函数。
这是 mqtt 负载的有效转换。
def on_message(self, client, obj, msg):
characters = [chr(ascii) for ascii in msg.payload] # Convert ASCII to char
chars_joined = ''.join(characters) # Join chars to a string
received_message = chars_joined.split(",") # Split string by comma
我创建了一个 MQTT class。它确实连接正常,并在连接时发布 "Online" 消息。然而,on_message 方法出了点问题,因为它启动但卡在拆分有效负载
class mqtt_function():
def __init__(self):
self.mqttc = mqtt.Client()
# MQTT settings here
self.mqttc.loop_forever()
def on_connect(self, client, userdata,flags, rc):
message = "connected with rc: " + str(rc)
self.mqttc.subscribe(self.topic, 2)
print("subscribed to ", self.topic)
self.mqttc.publish(self.topicStatus, "Online", 1, True)
def on_message(self, client, obj, msg):
print("on_message method started")
print(msg.payload)
info = msg.payload.split(",")
print("message was split")
returns
subscribed to commands/home
on_message method started
b'60,1581638400'
期望: msg.payload.split 应该用逗号将负载消息分隔到名为 info 的列表中。但是,这不会发生。
问题在于理解 msg.payload 格式。
虽然 print(msg.payload) returns 是清晰的文本,但 msg.payload 不是字符串而是 ASCII 码。将 msg.payload 从 ASCII 转换为字符串后,可以使用 .split 函数。 这是 mqtt 负载的有效转换。
def on_message(self, client, obj, msg):
characters = [chr(ascii) for ascii in msg.payload] # Convert ASCII to char
chars_joined = ''.join(characters) # Join chars to a string
received_message = chars_joined.split(",") # Split string by comma