我是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":
据我所知,它一定是由于变量类型的东西而且它们不匹配。
答案 0 :(得分:2)
我找到了一个工作正常的解决方案! 在我使用的if语句中的客户端代码中
if msg.payload == b"Hello":
和
if msg.payload == b"World":
据我所知,它一定是由于变量类型的东西而且它们并不匹配。
答案 1 :(得分:1)
在尝试Paho mqtt客户端时偶然发现了此帖子-
请注意this帖子中有详细解释,请注意在Python中如何处理字符和字节。
因此,上面的代码段也可以写成
if (msg.payload.decode() == 'Hello'):