From cd0e5f15edc7773feace20512ce35ac9b121963f Mon Sep 17 00:00:00 2001 From: Laurent Date: Fri, 2 Jan 2026 18:52:46 +0100 Subject: [PATCH] Update MQTT start up --- api-customer/app.py | 42 ++++++++++--------- .../src/controllers/AuthController.py | 18 +++++++- api-customer/src/services/mqtt_service.py | 4 +- 3 files changed, 42 insertions(+), 22 deletions(-) diff --git a/api-customer/app.py b/api-customer/app.py index bc4abdfd..4fd624f5 100644 --- a/api-customer/app.py +++ b/api-customer/app.py @@ -1,4 +1,5 @@ import os +import threading from dotenv import load_dotenv from flask import Flask @@ -10,7 +11,6 @@ from src.controllers.mqtt_forwarder import MQTTForwarder from src.models.AuthData import AuthData from src.services.mqtt_service import MQTTService -client_id = "3b12678d-8d6f-444b-b1a7-671a2c92eabf" load_dotenv() app = Flask(__name__) @@ -21,33 +21,37 @@ 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_port = int(os.environ.get("API_BROKER_PORT", 1883)) -local_broker = MQTTService( - local_broker_address, - local_broker_port, - client_id="customer-api", - username="main", - password="hepl", -) - -api_broker = MQTTService( - api_broker_address, - api_broker_port, - client_id="customer-api", - username="customer", - 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__': +def start_mqtt(data : AuthData): + client_id = data.get_client_id() - print(app.url_map) + local_broker = MQTTService( + local_broker_address, + local_broker_port, + client_id=client_id, + username="main", + password="hepl", + ) + + api_broker = MQTTService( + api_broker_address, + api_broker_port, + client_id=client_id, + username="customer", + password="hepl", + ) forwarder = MQTTForwarder(client_id, local_broker, api_broker) 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) diff --git a/api-customer/src/controllers/AuthController.py b/api-customer/src/controllers/AuthController.py index ff911d71..65ee4362 100644 --- a/api-customer/src/controllers/AuthController.py +++ b/api-customer/src/controllers/AuthController.py @@ -1,3 +1,5 @@ +from typing import Callable + from board_mate.auth import * from flask import jsonify, request from pydantic import StrictStr @@ -8,18 +10,30 @@ from src.models.AuthData import AuthData class AuthController: _auth_data : AuthData = None + _is_logged_in : bool = None + _login_callback : Callable[[AuthData], None] = None def __init__(self, app, auth_data, host): self._register_routes(app) self.config = Configuration(host=host) - self._auth_data = auth_data self.config.verify_ssl = False + self._auth_data = auth_data + self.is_logged_in = False def _register_routes(self, app): 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): try: + if self._is_logged_in: jsonify({"success" : False, "message" : "Already logged in", "data" : None}), 400 + received_data = request.get_json() print(received_data) with ApiClient(self.config) as client: @@ -37,6 +51,8 @@ class AuthController: self._auth_data.set_token(response.data["authToken"]) 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 except Exception as e: print(f"Exception when calling AuthAPI->login: {e}") diff --git a/api-customer/src/services/mqtt_service.py b/api-customer/src/services/mqtt_service.py index 14b2c085..cbd28c9b 100644 --- a/api-customer/src/services/mqtt_service.py +++ b/api-customer/src/services/mqtt_service.py @@ -79,9 +79,9 @@ class MQTTService: self._subscriptions[topic] = handler 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): - h(msg.topic, msg.payload.decode()) + sub_handler(msg.topic, msg.payload.decode()) self.client.on_message = on_message self.client.subscribe(topic, qos=qos)