Update MQTT start up

This commit is contained in:
2026-01-02 18:52:46 +01:00
parent 35087ad54a
commit cd0e5f15ed
3 changed files with 42 additions and 22 deletions

View File

@@ -1,4 +1,5 @@
import os import os
import threading
from dotenv import load_dotenv from dotenv import load_dotenv
from flask import Flask from flask import Flask
@@ -10,7 +11,6 @@ from src.controllers.mqtt_forwarder import MQTTForwarder
from src.models.AuthData import AuthData from src.models.AuthData import AuthData
from src.services.mqtt_service import MQTTService from src.services.mqtt_service import MQTTService
client_id = "3b12678d-8d6f-444b-b1a7-671a2c92eabf"
load_dotenv() load_dotenv()
app = Flask(__name__) app = Flask(__name__)
@@ -21,10 +21,19 @@ local_broker_port = int(os.environ.get("LOCAL_BROKER_PORT", 1883))
api_broker_address = os.environ.get("API_BROKER_ADDRESS", "127.0.0.1") api_broker_address = os.environ.get("API_BROKER_ADDRESS", "127.0.0.1")
api_broker_port = int(os.environ.get("API_BROKER_PORT", 1883)) api_broker_port = int(os.environ.get("API_BROKER_PORT", 1883))
auth_data = AuthData()
auth_controller = AuthController(app, auth_data, "https://192.168.15.120:8000")
client_controller = ClientController(app, auth_data, "https://192.168.15.120:8000")
message_controller = MessageController(app, auth_data, "https://192.168.15.120:8000")
def start_mqtt(data : AuthData):
client_id = data.get_client_id()
local_broker = MQTTService( local_broker = MQTTService(
local_broker_address, local_broker_address,
local_broker_port, local_broker_port,
client_id="customer-api", client_id=client_id,
username="main", username="main",
password="hepl", password="hepl",
) )
@@ -32,22 +41,17 @@ local_broker = MQTTService(
api_broker = MQTTService( api_broker = MQTTService(
api_broker_address, api_broker_address,
api_broker_port, api_broker_port,
client_id="customer-api", client_id=client_id,
username="customer", username="customer",
password="hepl", password="hepl",
) )
auth_data = AuthData()
auth_controller = AuthController(app, auth_data, "https://192.168.15.120:8000")
client_controller = ClientController(app, auth_data, "https://192.168.15.120:8000")
message_controller = MessageController(app, auth_data, "https://192.168.15.120:8000")
if __name__ == '__main__':
print(app.url_map)
forwarder = MQTTForwarder(client_id, local_broker, api_broker) forwarder = MQTTForwarder(client_id, local_broker, api_broker)
forwarder.start(f"/customer/telemetry/#", f"/board-mate/{client_id}/telemetry") forwarder.start(f"/customer/telemetry/#", f"/board-mate/{client_id}/telemetry")
if __name__ == '__main__':
auth_controller.set_on_login(start_mqtt)
app.run(host="0.0.0.0", port=5000, debug=True) app.run(host="0.0.0.0", port=5000, debug=True)

View File

@@ -1,3 +1,5 @@
from typing import Callable
from board_mate.auth import * from board_mate.auth import *
from flask import jsonify, request from flask import jsonify, request
from pydantic import StrictStr from pydantic import StrictStr
@@ -8,18 +10,30 @@ from src.models.AuthData import AuthData
class AuthController: class AuthController:
_auth_data : AuthData = None _auth_data : AuthData = None
_is_logged_in : bool = None
_login_callback : Callable[[AuthData], None] = None
def __init__(self, app, auth_data, host): def __init__(self, app, auth_data, host):
self._register_routes(app) self._register_routes(app)
self.config = Configuration(host=host) self.config = Configuration(host=host)
self._auth_data = auth_data
self.config.verify_ssl = False self.config.verify_ssl = False
self._auth_data = auth_data
self.is_logged_in = False
def _register_routes(self, app): def _register_routes(self, app):
app.add_url_rule("/client/auth", view_func=self.auth, methods=['POST']) app.add_url_rule("/client/auth", view_func=self.auth, methods=['POST'])
def set_on_login(self, handler : Callable[[AuthData], None]):
self._login_callback = handler
def _notify_login(self, data : AuthData):
if not self._login_callback: return
self._login_callback(data)
def auth(self): def auth(self):
try: try:
if self._is_logged_in: jsonify({"success" : False, "message" : "Already logged in", "data" : None}), 400
received_data = request.get_json() received_data = request.get_json()
print(received_data) print(received_data)
with ApiClient(self.config) as client: with ApiClient(self.config) as client:
@@ -37,6 +51,8 @@ class AuthController:
self._auth_data.set_token(response.data["authToken"]) self._auth_data.set_token(response.data["authToken"])
self._auth_data.set_client_id(response.data["clientId"]) self._auth_data.set_client_id(response.data["clientId"])
self._notify_login(self._auth_data)
self._is_logged_in = True
return jsonify({"success" : response.success, "message" : response.message , "data" : response.data}), 200 return jsonify({"success" : response.success, "message" : response.message , "data" : response.data}), 200
except Exception as e: except Exception as e:
print(f"Exception when calling AuthAPI->login: {e}") print(f"Exception when calling AuthAPI->login: {e}")

View File

@@ -79,9 +79,9 @@ class MQTTService:
self._subscriptions[topic] = handler self._subscriptions[topic] = handler
def on_message(client, userdata, msg): def on_message(client, userdata, msg):
for sub_topic, h in self._subscriptions.items(): for sub_topic, sub_handler in self._subscriptions.items():
if mqtt.topic_matches_sub(sub_topic, msg.topic): if mqtt.topic_matches_sub(sub_topic, msg.topic):
h(msg.topic, msg.payload.decode()) sub_handler(msg.topic, msg.payload.decode())
self.client.on_message = on_message self.client.on_message = on_message
self.client.subscribe(topic, qos=qos) self.client.subscribe(topic, qos=qos)