我正在尝试从使用Flask构建的网页发送MQTT消息。
我在主循环中建立了连接,我可以在启动Flask之前发送消息
当我打电话时:
client.publish('all/camera/'+path, 'all')
没有任何反应。没有错误,但没有发送消息。我最好的猜测是这是一个范围问题。即。对象'client'对函数不可见。我试图在main函数之外启动客户端,我也尝试在capture()函数中声明'client'为全局
烧瓶应用程序的代码如下:
#!/usr/bin/env python
from flask import Flask, render_template, request
import paho.mqtt.client as mqtt
from datetime import datetime
app = Flask(__name__)
@app.route('/', methods = ['POST', 'GET'])
def capture():
timestring=datetime.now().strftime("%Y%m%d-%H%M%S")
if 'sessionName' in request.form:
sessionName = request.form['sessionName']
path = sessionName + "_" + timestring
return render_template ('capture.html', path=path, timestring=timestring, sessionName=sessionName)
client.publish('all/camera/'+path, 'all')
else:
return render_template ('capture.html',timestring=timestring)
# paho callbacks
def on_connect(client, userdata, flags, rc):
#sub here will re subscribe on reconnection
client.subscribe("+/camera/#")
client.subscribe("+/led")
# Main Code
if __name__=='__main__':
client = mqtt.Client()
client.on_connect = on_connect
client.connect("scanserver.local",1883,60)
client.loop_start()
client.publish('debug', 'server running')
app.run(host = '0.0.0.0' , debug = True, port=5001)
答案 0 :(得分:0)
正如rmn所说。我把回程放在了错误的地方。现在工作得很好。感谢