#!/usr/bin/env python3 from flask import current_app as app import config from db import db from schemas import DeviceSchema, SensorSchema """ MQTT Stuff """ __author__ = "@tormakris" __copyright__ = "Copyright 2020, Birbnetes Team" __module_name__ = "mqtt_methods" __version__text__ = "1" deviceschema = DeviceSchema(many=False) sensorschema = SensorSchema(many=False) def handle_status_message(client, userdata, message): data = dict( topic=message.topic, payload=message.payload.decode() ) app.logger.info(data) try: ids = data['topic'].replace(f"{config.MQTT_STATUS_TOPIC}/", "").split("/") if len(ids) == 1: data['payload']['deviceID'] = ids[0] status_message = deviceschema.load(data['payload'], session=db.session, transient=True).data app.logger.info(f"Recieved status message from {data['payload']['deviceID']}, persisting to db.") db.session.merge(status_message) else: if len(ids) == 2: data['payload']['deviceID'] = ids[0] data['payload']['sensorID'] = ids[1] status_message = sensorschema.load(data['payload'], session=db.session, transient=True).data app.logger.info(f"Recieved status message from sensor {data['payload']['sensorID']}, persisting to db.") db.session.merge(status_message) except Exception as e: db.session.rollback() app.logger.exception(e) else: db.session.commit()