From 574cb8bb49527d9d1a564beb787f32409ba9d341 Mon Sep 17 00:00:00 2001 From: esensar Date: Thu, 26 Apr 2018 14:12:20 +0200 Subject: [PATCH] Add devices module with MQTT client --- app/__init__.py | 23 +++++++++-------------- app/mod_devices/__init__.py | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+), 14 deletions(-) create mode 100644 app/mod_devices/__init__.py diff --git a/app/__init__.py b/app/__init__.py index 767329b..4b8782d 100644 --- a/app/__init__.py +++ b/app/__init__.py @@ -1,23 +1,18 @@ +import atexit from flask import Flask -from flask_mqtt import Mqtt +from app.mod_devices import setup_mqtt, tear_down_mqtt app = Flask(__name__, instance_relative_config=True) app.config.from_object('config') app.config.from_pyfile('config.py') -mqtt = Mqtt(app) + +def on_stop(): + print('Application stopping') + tear_down_mqtt() + +setup_mqtt(app) +atexit.register(on_stop) @app.route("/") def hello(): return "Hello World!" - -@mqtt.on_connect() -def handle_connect(client, userdata, flags, rc): - mqtt.subscribe('topic/state') - -@mqtt.on_message() -def handle_mqtt_message(client, userdata, message): - data = dict( - topic=message.topic, - payload=message.payload.decode() - ) - print(message.payload.decode()) diff --git a/app/mod_devices/__init__.py b/app/mod_devices/__init__.py new file mode 100644 index 0000000..cf5851e --- /dev/null +++ b/app/mod_devices/__init__.py @@ -0,0 +1,34 @@ +from flask_mqtt import Mqtt + +mqtt = Mqtt() + +def setup_mqtt(app): + mqtt.init_app(app) + mqtt.client.on_message = handle_mqtt_message + mqtt.client.on_subscribe = handle_subscribe + print('MQTT client initialized') + +def tear_down_mqtt(): + mqtt.unsubscribe_all() + if hasattr(mqtt, 'client') and mqtt.client is not None: + mqtt.client.disconnect() + print('MQTT client destroyed') + +@mqtt.on_connect() +def handle_connect(client, userdata, flags, rc): + print('MQTT client connected') + mqtt.subscribe('topic/state') + +@mqtt.on_disconnect() +def handle_disconnect(): + print('MQTT client disconnected') + +def handle_subscribe(client, userdata, mid, granted_qos): + print('MQTT client subscribed') + +def handle_mqtt_message(client, userdata, message): + data = dict( + topic=message.topic, + payload=message.payload.decode() + ) + print(message.payload.decode())