Flask extension for the MQTT protocol

Flask-MQTT的Python项目详细描述


烧瓶MQTT

用于MQTT protocol的烧瓶扩展。基本上是薄包装 围绕paho-mqtt,旨在简化烧瓶中的mqtt集成。mqtt是 机器到机器的“物联网”协议 轻量级发布/订阅消息传输。

Documentation StatusPyPI versionTravis CI

找到http://flask-mqtt.readthedocs.io上的文档。

功能

  • 通过烧瓶配置变量进行配置
  • Web应用程序启动时自动连接
  • 发布和订阅消息
  • 对某些主题使用回调
  • 对所有订阅的主题使用一次回调

限制

Flask MQTT的开发是为了提供一个易于设置的交互解决方案 使用物联网设备。一个典型的场景是树莓皮运行 Mosquito MQTT服务器与Flask Web服务器相结合。

多个工人

flask mqtt当前不适合与多个工作进程一起使用 实例。因此,如果使用像geventgunicorn这样的wsgi服务器,请确保 您只有一个工作实例。

重载器

确保禁用烧瓶自动转载器。如果激活它会产生两个 烧瓶应用实例。这会导致与multiple相同的问题 工人。为了防止flask mqtt运行两次代码,必须 停用自动换料机。

安装

只需像往常一样通过pip:

$ pip install flask-mqtt

用法

基本设置

fromflaskimportFlaskfromflask_mqttimportMqttapp=Flask(__name__)app.config['MQTT_BROKER_URL']='mybroker.com'app.config['MQTT_BROKER_PORT']=1883app.config['MQTT_USERNAME']='user'app.config['MQTT_PASSWORD']='secret'app.config['MQTT_REFRESH_TIME']=1.0# refresh time in secondsmqtt=Mqtt(app)@app.route('/')defindex():returnrender_template('index.html')

订阅主题

要订阅主题,只需使用mqtt.subscribe()。以确保 在启动时正确处理订阅将订阅放入 一个on_connect()回调函数。

@mqtt.on_connect()defhandle_connect(client,userdata,flags,rc):mqtt.subscribe('home/mytopic')

要处理订阅的消息,可以通过 用@mqtt.on_message()装饰它。

@mqtt.on_message()defhandle_mqtt_message(client,userdata,message):data=dict(topic=message.topic,payload=message.payload.decode())

要取消订阅,请执行以下操作:

mqtt.unsubscribe('home/mytopic')

或者如果要取消订阅所有主题,请使用unsubscribe_all()

mqtt.unsubscribe_all()

发布

要发布消息,可以使用publish()方法。

mqtt.publish('home/mytopic','this is my message')

小型发布/订阅mqtt客户端

"""A small Test application to show how to use Flask-MQTT."""importeventletimportjsonfromflaskimportFlask,render_templatefromflask_mqttimportMqttfromflask_socketioimportSocketIOfromflask_bootstrapimportBootstrapeventlet.monkey_patch()app=Flask(__name__)app.config['SECRET']='my secret key'app.config['TEMPLATES_AUTO_RELOAD']=Trueapp.config['MQTT_BROKER_URL']='broker.hivemq.com'app.config['MQTT_BROKER_PORT']=1883app.config['MQTT_USERNAME']=''app.config['MQTT_PASSWORD']=''app.config['MQTT_KEEPALIVE']=5app.config['MQTT_TLS_ENABLED']=False# Parameters for SSL enabled# app.config['MQTT_BROKER_PORT'] = 8883# app.config['MQTT_TLS_ENABLED'] = True# app.config['MQTT_TLS_INSECURE'] = True# app.config['MQTT_TLS_CA_CERTS'] = 'ca.crt'mqtt=Mqtt(app)socketio=SocketIO(app)bootstrap=Bootstrap(app)@app.route('/')defindex():returnrender_template('index.html')@socketio.on('publish')defhandle_publish(json_str):data=json.loads(json_str)mqtt.publish(data['topic'],data['message'])@socketio.on('subscribe')defhandle_subscribe(json_str):data=json.loads(json_str)mqtt.subscribe(data['topic'])@mqtt.on_message()defhandle_mqtt_message(client,userdata,message):data=dict(topic=message.topic,payload=message.payload.decode())socketio.emit('mqtt_message',data=data)@mqtt.on_log()defhandle_logging(client,userdata,level,buf):print(level,buf)if__name__=='__main__':socketio.run(app,host='0.0.0.0',port=5000,use_reloader=True,debug=True)

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
相对于框架java窗口的鼠标位置错误   Java 8流peek api   java将数据附加到文件中   java使用ExoPlayer 2.8播放播放列表中的特定文件   JavaSpring国际化:如何动态设置语言环境值   java如何在mysql中实现两个表之间的两个关联   java在gradle可执行jar文件中包含运行时参数   surefire插件中的java maven多套测试套件   java试图理解堆分析以确定内存泄漏或所需的大量内存   java识别字符串有数字   数组如何解决错误“java.lang.ArrayIndexOutOfBoundsException:5”   java Swt文件对话框选择的文件太多?   java此登录代码易受SQL注入攻击吗?   Java[3]中的文件<identifier>预期编译错误   java如何在spring webflux中发送列表   jar中未找到java文件异常   如何在java中合并2D数组?   java如何评测本机JNI库