Paho mqtt 客户端无法正常工作

Paho mqtt client not working properly

我是 MQTT 的新手并且 raspberry pi!我正在 运行 创建一个客户端脚本,我只是使用另一个脚本发布一条消息。我正在使用自己的 Mosquitto 代理。

客户:

import paho.mqtt.client as mqtt

def on_connect(client, userdata, flags, rc):
    print("Connected with result code "+str(rc))

    client.subscribe("Example/test")
    client.subscribe("Example/topic")


def on_message(client, userdata, msg):

    print(msg.topic+" "+str(msg.payload))


    if msg.payload == "Hello":
        print("Received message #1, do something")

    if msg.payload == "World":
        print("Received message #2, do something else")


client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message

client.connect("192.168.1.4", 1883)


client.loop_forever()

出版商:

import paho.mqtt.publish as publish


publish.single("Example/test", "Hello", hostname="192.168.1.4")
publish.single("Example/topic", "World", hostname="192.168.1.4")

print("OK")

这就是事情看起来很奇怪并且那些事情发生的地方。 1.When 我 运行 客户端和发布者都使用 python3 命令跳过 if 语句,只打印主题 + 有效负载 2.When 我 运行 使用 python 命令的客户端和使用 python3 和 python 命令的发布者一切正常! 3.When 我做了以上所有操作,同时 运行 再次在 virtualenv 上连接客户端,在所有情况下都忽略了 if 语句!

我想知道是否有兼容性原因导致这种情况发生,或者代码中有什么错误,因为我必须运行像 virtualenv 上的更复杂的东西!


更新:我找到了一个很好用的解决方案! 在 if 语句的客户端代码中,我使用了

if msg.payload == b"Hello":

if msg.payload == b"World":

据我所知,这一定是由于变量类型的原因,它们不匹配。

我找到了一个很好用的解决方案! 在 if 语句的客户端代码中,我使用了

if msg.payload == b"Hello":

if msg.payload == b"World":

据我所知,这一定是由于变量类型的原因,它们不匹配。

在尝试 Paho mqtt 客户端时偶然发现了这个 post -

最好注意 Python 中字符和字节的处理方式,详见 this post。

所以,上面的代码片段也可以写成,

if (msg.payload.decode() == 'Hello'):