无法连接到mqtt代理

时间:2016-11-01 14:02:24

标签: python raspberry-pi mqtt mosquitto

我在我的pi上安装了MQTT代理Mosquitto,并且在使用我的网络中的盒子时遇到了一些问题。在本地,如果我腻子进入运行Mosquitto MQTT经纪人的RPi,一切都还可以。我可以使用客户端命令(mosquitto_sub, mosquitto_pub)来订阅和发布主题,没问题。但是,如果我尝试从另一个盒子连接,Win2k12服务器与python脚本,它说它不能连接。

  • 我尝试在路由器中关闭防火墙
  • 我尝试在我的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上运行)

enyone是否已在Raspberry Pi上设置MQTT并让它与其他设备一起使用?我想让它与NodeMCU一起工作,但是当我遇到问题时,我开始研究python脚本以进一步调试问题。

2 个答案:

答案 0 :(得分:5)

您可以通过向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()

答案 1 :(得分:0)

首先,您必须确保可以连接到Raspberry Pi。您可以尝试使用Paho以外的库或使用一个MQTT客户端: http://www.hivemq.com/blog/seven-best-mqtt-client-tools

您可以尝试的另一件事是将客户端和代理设置为使用端口80以查看它们是否可以通过该端口进行通信。