Flask扩展,用于MQTT协议
项目描述
Flask-MQTT
Flask扩展,用于MQTT协议。基本上,它是对paho-mqtt的薄包装,旨在简化Flask中的MQTT集成。MQTT是一种机器到机器的“物联网”协议,专为极轻量级的发布/订阅消息传输而设计。
请访问http://flask-mqtt.readthedocs.io获取文档。
特性
- 通过Flask配置变量进行配置
- 在您的Web应用启动时自动连接
- 发布和订阅消息
- 连接到多个MQTT服务器
- 为特定主题使用回调
- 对所有订阅的主题使用一个回调
限制
Flask-MQTT被开发出来,为与物联网设备交互提供一个易于设置的解决方案。一个典型的场景是在运行mosquitto mqtt服务器的Raspberry Pi上运行Flask网络服务器。
多个工作进程
Flask-MQTT目前不适合与多个工作实例一起使用。 因此,如果您使用像gevent或gunicorn这样的WSGI服务器,请确保只有一个工作实例。
重新加载
请确保禁用Flask的自动重新加载功能。如果激活,它会启动两个Flask应用程序的实例。这会导致与多个工作进程相同的问题。为了防止Flask-MQTT运行代码两次,有必要禁用自动重新加载。
安装
像往常一样通过pip安装软件包
$ pip install flask-mqtt
或者使用conda-forge通道的conda
$ conda config --add channels conda-forge
$ conda install flask-mqtt
用法
基本设置
from flask import Flask
from flask_mqtt import Mqtt
app = Flask(__name__)
app.config['MQTT_BROKER_URL'] = 'mybroker.com'
app.config['MQTT_BROKER_PORT'] = 1883
app.config['MQTT_USERNAME'] = 'user'
app.config['MQTT_PASSWORD'] = 'secret'
app.config['MQTT_REFRESH_TIME'] = 1.0 # refresh time in seconds
mqtt = Mqtt(app)
@app.route('/')
def index():
return render_template('index.html')
订阅主题
要订阅主题,请使用 mqtt.subscribe()
。为确保在启动时正确处理订阅,请将订阅放置在 on_connect()
回调函数内。
@mqtt.on_connect()
def handle_connect(client, userdata, flags, rc):
mqtt.subscribe('home/mytopic')
要处理订阅的消息,您可以定义一个处理函数,并通过装饰它为 @mqtt.on_message()
。
@mqtt.on_message()
def handle_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服务器
要连接到多个服务器,您可以在初始化 Mqtt()
时指定 config_prefix
,在应用程序中创建多个mqtt客户端。
# default mqtt client
app.config["MQTT_broker_url"] = "example.com"
app.config["MQTT_broker_port"] = 8883
mqtt = Mqtt(app)
# create second mqtt client for a different broker
app.config["MQTT2_broker_url"] = "example2.com"
app.config["MQTT_broker_port"] = 1883
mqtt2 = Mqtt(app, config_prefix="MQTT2")
# create third mqtt client for a different broker
app.config["MQTT3_broker_url"] = "example3.com"
app.config["MQTT3_broker_port"] = 1885
mqtt3 = Mqtt(app, config_prefix="MQTT3")
小型发布/订阅MQTT客户端
"""
A small Test application to show how to use Flask-MQTT.
"""
import eventlet
import json
from flask import Flask, render_template
from flask_mqtt import Mqtt
from flask_socketio import SocketIO
from flask_bootstrap import Bootstrap
eventlet.monkey_patch()
app = Flask(__name__)
app.config['SECRET'] = 'my secret key'
app.config['TEMPLATES_AUTO_RELOAD'] = True
app.config['MQTT_BROKER_URL'] = 'broker.hivemq.com'
app.config['MQTT_BROKER_PORT'] = 1883
app.config['MQTT_USERNAME'] = ''
app.config['MQTT_PASSWORD'] = ''
app.config['MQTT_KEEPALIVE'] = 5
app.config['MQTT_TLS_ENABLED'] = False
app.config['MQTT_CLEAN_SESSION'] = True
# 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('/')
def index():
return render_template('index.html')
@socketio.on('publish')
def handle_publish(json_str):
data = json.loads(json_str)
mqtt.publish(data['topic'], data['message'])
@socketio.on('subscribe')
def handle_subscribe(json_str):
data = json.loads(json_str)
mqtt.subscribe(data['topic'])
@socketio.on('unsubscribe_all')
def handle_unsubscribe_all():
mqtt.unsubscribe_all()
@mqtt.on_message()
def handle_mqtt_message(client, userdata, message):
data = dict(
topic=message.topic,
payload=message.payload.decode()
)
socketio.emit('mqtt_message', data=data)
@mqtt.on_log()
def handle_logging(client, userdata, level, buf):
print(level, buf)
if __name__ == '__main__':
# important: Do not use reloader because this will create two Flask instances.
# Flask-MQTT only supports running with one instance
socketio.run(app, host='0.0.0.0', port=5000, use_reloader=False, debug=False)
项目详情
下载文件
下载您平台上的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。
源分布
Flask-MQTT-1.2.1.tar.gz (12.1 kB 查看哈希值)
构建分布
Flask_MQTT-1.2.1-py3-none-any.whl (9.2 kB 查看哈希值)
关闭
Flask-MQTT-1.2.1.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 48d0d44b16e6cb5309b9ebb1d62f1de80633852c426d97c86d348f67e4a65555 |
|
MD5 | 74d722b1863d2fe26448b893614dc11c |
|
BLAKE2b-256 | cbd15cbf49abad77fc6d943d8402e4e18fe249225526c576b36996ec3492f9e5 |
关闭
Flask_MQTT-1.2.1-py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 0a93ec45fc3176647e7e56d8d9047a51680a6c0fcb14b174aea6bacc161bbd06 |
|
MD5 | 4a65e7fe5e28922b8dd7fdbf3bad44ce |
|
BLAKE2b-256 | 05ef9118543adfbcfa3cc4423aaf517e8ef8d038da55c4b7749e35464e3ea4b4 |