【发布时间】: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