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同步方法调用非同步方法   这段代码的java时间复杂度是如何列出一个集合的所有子集的?   java Jetty SslConnectionFactory nextProtocol   为什么在java集合中使用游标而不是for循环   java如何对长函数进行单元测试?   如何从java中的文本输入创建数组   java工具栏内容未显示,尽管出现了片段内容   java MediaPlayer无法处理本地文件   java在多次读取时,从TCP服务器读取的数据将挂起   java组织。springframework。数据领域无法将PageImpl强制转换为   java如何使用@WithMockUser并从属性文件中传递用户名和密码?   JavaSpringBootGradle插件2。x如何使用自定义启动器布局工厂   sockets Java客户端和服务器之间使用字符串等进行通信的“行业标准”方法是什么   java变量引用不存在的资源:${project\u loc:project\u name}   搜索如何返回LDAP Java中所有用户的特定属性?   JDK1.8.016x的java密钥斗篷代理问题   spring如何使用Java中的Exchange获取邮件   java Kotlin+Dagger 2:Dagger*文件不会生成   如何在传入的double上执行操作,然后在Java中返回