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