【发布时间】:2017-03-14 16:25:21
【问题描述】:
我在我的 pi 上安装了 MQTT 代理 Mosquitto,但在让它与我的网络中的盒子一起工作时遇到了一些问题。在本地,如果我放入运行 Mosquitto MQTT 代理的 RPi,一切正常。我可以使用客户端命令(mosquitto_sub, mosquitto_pub)订阅和发布主题,没问题。但是,如果我尝试从另一个机器连接,带有 python 脚本的 Win2k12 服务器表明它无法连接。
- 我已尝试在路由器中关闭防火墙
- 我已尝试在我的 Win2k12 服务器上关闭防火墙
- 我已将 TCP 1883 添加到允许从我的 Win2k12 服务器出站的端口
Python 脚本:
import paho.mqtt.client as mqtt
def on_connect(client, userdata, flags, rc):
client.publish("test_mqtt", "test")
client.subscribe("test")
def on_disconnect(client, userdata, rc):
print("Disconnect, reason: " + str(rc))
print("Disconnect, reason: " + str(client))
client = mqtt.Client("testclient")
client.on_connect = on_connect
client.on_disconnect = on_disconnect
client.connect("192.168.1.20", 1883, 60)
client.loop_forever()
这里的输出是
Disconnect, reason: <paho.mqtt.client.Client object at 0x01F41EF0>
Disconnect, reason: 1
我试图查看the documentation,但它只提到了标志,没有定义它们是什么。
运行 Mosquitto 的树莓派也在运行 Node-red。连接到 MQTT 代理没有问题(它们都在同一个 rpi 上运行)
有没有人在 Raspberry Pi 上设置 MQTT 并让它与其他设备一起使用?我希望它可以与 NodeMCU 一起工作,但是当我遇到问题时,我开始编写 python 脚本来进一步调试问题。
【问题讨论】:
-
您是否在重复使用客户端 ID? ("testclient") 每个客户端都需要一个唯一的 id
-
@hardillb 我刚刚在 python 脚本中使用随机客户端 ID 进行了测试,结果相同。
-
你运行的是什么版本的 mosquitto。新版 paho 使用 MQTT 3.11,旧版 mosquitto 只支持 3.1
-
@hardillb 我运行 v3.1。那么python lib可能基于3.11并且不兼容?有趣的是 node-red 似乎是如何工作的
-
3.1 不是 mosquitto 版本,而是协议版本,但如果它只是说 3.1,那么您无论如何都应该升级,因为它非常旧。
标签: python raspberry-pi mqtt mosquitto