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'):
我是 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'):