无法连接到 mqtt 代理

Can't connect to mqtt broker

我在我的 pi 上安装了 MQTT 代理 Mosquitto,但在让它与我网络中的盒子一起工作时遇到了一些问题。在本地,如果我输入 RPi 运行 Mosquitto MQTT 代理,一切正常。我可以使用客户端命令 (mosquitto_sub, mosquitto_pub) 订阅和发布主题,没问题。但是,如果我尝试从另一个盒子连接,带有 python 脚本的 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 以查看它们是否可以通过该端口进行通信。