【问题标题】:Paho mqtt client not working properlyPaho mqtt 客户端无法正常工作
【发布时间】:2018-10-12 20:16:54
【问题描述】:

我是 MQTT 和树莓派的新手!我正在运行一个客户端脚本,我只是使用另一个脚本发布一条消息。我正在使用我自己的 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":

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

【问题讨论】:

  • 您可以使用答案并将其标记为已接受,而不是编辑问题以添加解决方案,这样更容易找到(并且您将获得一个回答您自己问题的徽章)

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


【解决方案1】:

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

if msg.payload == b"Hello":

if msg.payload == b"World":

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

【讨论】:

    【解决方案2】:

    在尝试 Paho mqtt 客户端时偶然发现了这篇文章 -

    注意在 Python 中如何处理字符和字节可能会很好,如 this 帖子中的详细说明。

    所以,上面的sn-p也可以写成,

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

    【讨论】:

      猜你喜欢
      • 2016-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-31
      • 2017-08-17
      • 1970-01-01
      • 2018-03-17
      • 2018-10-18
      相关资源
      最近更新 更多