from flask_mqtt import Mqtt from flask_socketio import SocketIO eventlet.monkey_patch() app = Flask(__name__, template_folder='./views') app.config['MQTT_BROKER_URL'] = 'test.mosquitto.org' app.config['MQTT_BROKER_PORT'] = 1883 app.config['MQTT_REFRESH_TIME'] = 1.0 mqtt = Mqtt(app) @mqtt.on_connect() def handle_connect(client, userdata, flags, rc): print("CONNECT") #mqtt.subscribe('1') @mqtt.on_log() def handle_logging(client, userdata, level, buf): print("ON_LOG") #print(level, buf) if __name__ == '__main__': #socketio.run(app, host = '0.0.0.0', debug= True , use_reloader=False, port = 8080) mqtt.init_app(app) app.run(host='0.0.0.0', debug=False, port=1883) #socketio.run(app, host='0.0.0.0', port=5000, use_reloader=True, debug=True)
class FlaskMQTTTestCase(unittest.TestCase): def setUp(self): self.app = Flask(__name__) def test_simple_connect(self): self.mqtt = Mqtt(self.app) self.mqtt._disconnect() def test_connect_with_username(self): self.app.config['MQTT_USERNAME'] = '******' self.app.config['MQTT_PASSWORD'] = '******' self.mqtt = Mqtt(self.app) self.mqtt._disconnect() def test_subscribe(self): self.mqtt = Mqtt(self.app) self.subscribe_handled = False self.unsubscribe_handled = False @self.mqtt.on_subscribe() def handle_subscribe(client, userdata, mid_, granted_qos): self.subscribe_handled = True @self.mqtt.on_unsubscribe() def handle_unsubscribe(client, userdata, mid_): self.unsubscribe_handled = True ret, mid = self.mqtt.subscribe('home/test') self.assertEqual(ret, MQTT_ERR_SUCCESS) wait() ret, mid = self.mqtt.unsubscribe('home/test') self.assertEqual(ret, MQTT_ERR_SUCCESS) wait() self.assertTrue(self.subscribe_handled) self.assertTrue(self.unsubscribe_handled) def test_qos(self): self.mqtt = Mqtt(self.app) # subscribe to a topic with qos = 1 self.mqtt.subscribe('test', 1) self.assertEqual(1, len(self.mqtt.topics)) self.assertEqual(('test', 1), self.mqtt.topics['test']) # subscribe to same topic, overwrite qos self.mqtt.subscribe('test', 2) self.assertEqual(1, len(self.mqtt.topics)) self.assertEqual(('test', 2), self.mqtt.topics['test']) # unsubscribe self.mqtt.unsubscribe('test') self.assertEqual(0, len(self.mqtt.topics)) def test_topic_count(self): self.mqtt = Mqtt(self.app) ret, mid = self.mqtt.subscribe('test') self.assertEqual(1, len(self.mqtt.topics)) ret, mid = self.mqtt.subscribe('test') self.assertEqual(1, len(self.mqtt.topics)) self.mqtt.unsubscribe('test') self.assertEqual(0, len(self.mqtt.topics)) self.mqtt.unsubscribe('test') self.assertEqual(0, len(self.mqtt.topics)) ret, mid = self.mqtt.subscribe('test1') ret, mid = self.mqtt.subscribe('test2') self.assertEqual(2, len(self.mqtt.topics)) self.mqtt.unsubscribe_all() self.assertEqual(0, len(self.mqtt.topics)) self.mqtt._disconnect() def test_publish(self): self.mqtt = Mqtt(self.app) self.handled_message = False self.handled_topic = False self.handled_publish = False @self.mqtt.on_message() def handle_message(client, userdata, message): self.handled_message = True @self.mqtt.on_publish() def handle_publish(client, userdata, mid): self.handled_publish = True self.mqtt.subscribe('home/test') wait() self.mqtt.publish('home/test', 'hello world') wait() self.assertTrue(self.handled_message) # self.assertTrue(self.handled_topic) self.assertTrue(self.handled_publish) def test_on_topic(self): self.mqtt = Mqtt(self.app) self.handled_message = False self.handled_topic = False @self.mqtt.on_message() def handle_message(client, userdata, message): self.handled_message = True @self.mqtt.on_topic('home/test') def handle_on_topic(*args, **kwargs): self.handled_topic = True @self.mqtt.on_connect() def handle_connect(*args, **kwargs): self.mqtt.subscribe('home/test') wait() self.mqtt.publish('home/test', 'hello world') wait() self.assertFalse(self.handled_message) self.assertTrue(self.handled_topic) def test_logging(self): self.mqtt = Mqtt(self.app) @self.mqtt.on_log() def handle_logging(client, userdata, level, buf): self.assertIsNotNone(client) self.assertIsNotNone(level) self.assertIsNotNone(buf) self.mqtt.publish('test', 'hello world') def test_disconnect(self): self.mqtt = Mqtt() self.connected = False @self.mqtt.on_connect() def handle_connect(*args, **kwargs): self.connected = True @self.mqtt.on_disconnect() def handle_disconnect(*args, **kwargs): self.connected = False self.assertFalse(self.connected) self.mqtt.init_app(self.app) wait() self.assertTrue(self.connected) self.mqtt._disconnect() wait() self.assertFalse(self.connected)