无法连接到 mqtt 代理
Can't connect to mqtt broker
我在我的 pi 上安装了 MQTT 代理 Mosquitto,但在让它与我网络中的盒子一起工作时遇到了一些问题。在本地,如果我输入 RPi 运行 Mosquitto MQTT 代理,一切正常。我可以使用客户端命令 (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 但它只提到了标志,没有定义它们是什么。
raspberry pi 即 运行 Mosquitto 也是 运行 Node-red。连接到 MQTT broker 没有问题(它们都是 运行 在同一个 rpi 上)
有没有人在 Raspberry Pi 上设置 MQTT 并让它与其他设备一起工作?我希望它能与 NodeMCU 一起工作,但是当我遇到问题时,我开始使用 python 脚本来进一步调试问题。
您可以通过向 mqtt.Client 构造函数添加一个选项来强制 paho 客户端使用协议的 3.1 级别:
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", protocol=mqtt.MQTTv31)
client.on_connect = on_connect
client.on_disconnect = on_disconnect
client.connect("192.168.1.20", 1883, 60)
client.loop_forever()
首先,您必须确保可以连接到 Raspberry Pi。您可以尝试使用 Paho 以外的库或使用一个 MQTT 客户端:
http://www.hivemq.com/blog/seven-best-mqtt-client-tools
您可以尝试的另一件事是将客户端和代理都设置为使用端口 80 以查看它们是否可以通过该端口进行通信。
我在我的 pi 上安装了 MQTT 代理 Mosquitto,但在让它与我网络中的盒子一起工作时遇到了一些问题。在本地,如果我输入 RPi 运行 Mosquitto MQTT 代理,一切正常。我可以使用客户端命令 (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 但它只提到了标志,没有定义它们是什么。
raspberry pi 即 运行 Mosquitto 也是 运行 Node-red。连接到 MQTT broker 没有问题(它们都是 运行 在同一个 rpi 上)
有没有人在 Raspberry Pi 上设置 MQTT 并让它与其他设备一起工作?我希望它能与 NodeMCU 一起工作,但是当我遇到问题时,我开始使用 python 脚本来进一步调试问题。
您可以通过向 mqtt.Client 构造函数添加一个选项来强制 paho 客户端使用协议的 3.1 级别:
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", protocol=mqtt.MQTTv31)
client.on_connect = on_connect
client.on_disconnect = on_disconnect
client.connect("192.168.1.20", 1883, 60)
client.loop_forever()
首先,您必须确保可以连接到 Raspberry Pi。您可以尝试使用 Paho 以外的库或使用一个 MQTT 客户端: http://www.hivemq.com/blog/seven-best-mqtt-client-tools
您可以尝试的另一件事是将客户端和代理都设置为使用端口 80 以查看它们是否可以通过该端口进行通信。