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