Paho mqtt客户端无法正常工作

时间:2018-05-02 16:29:28

标签: python python-3.x raspberry-pi mqtt paho

我是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.当我使用python3命令运行客户端和发布者时,将跳过if语句并且仅打印主题+有效负载 2.当我使用python命令和发布者使用python3和python命令运行客户端时,一切正常! 3.当我完成上述所有操作时,再次在virtualenv上运行客户端时,if语句在所有情况下都会被忽略!

我想知道是否存在兼容性原因,或者代码中有任何错误,因为我必须像virtualenv那样运行更复杂的东西!

更新:我找到了一个工作正常的解决方案! 在我使用的if语句中的客户端代码中

if msg.payload == b"Hello":

if msg.payload == b"World":

据我所知,它一定是由于变量类型的东西而且它们不匹配。

2 个答案:

答案 0 :(得分:2)

我找到了一个工作正常的解决方案! 在我使用的if语句中的客户端代码中

if msg.payload == b"Hello":

if msg.payload == b"World":

据我所知,它一定是由于变量类型的东西而且它们并不匹配。

答案 1 :(得分:1)

在尝试Paho mqtt客户端时偶然发现了此帖子-

请注意this帖子中有详细解释,请注意在Python中如何处理字符和字节。

因此,上面的代码段也可以写成

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