From b98778b46624d3852fe07fe04162eb91f41c75c5 Mon Sep 17 00:00:00 2001 From: Laurent Date: Tue, 30 Dec 2025 04:08:06 +0100 Subject: [PATCH] Rework some stuff --- rpi/broker_starter.py | 43 +++++++++++++++++++++++++++++++ rpi/main.py | 50 +++++------------------------------- rpi/services/mqtt_service.py | 1 + 3 files changed, 50 insertions(+), 44 deletions(-) create mode 100644 rpi/broker_starter.py diff --git a/rpi/broker_starter.py b/rpi/broker_starter.py new file mode 100644 index 00000000..0263114b --- /dev/null +++ b/rpi/broker_starter.py @@ -0,0 +1,43 @@ +import os + +from controllers.mqtt_forwarder import MQTTForwarder +from services.mqtt_service import MQTTService + +client_id = "pi-1" + +local_broker_address = os.environ.get("LOCAL_BROKER_ADDRESS", "127.0.0.1") +local_broker_port = int(os.environ.get("LOCAL_BROKER_PORT", 1883)) +local_username = os.environ.get("LOCAL_USERNAME") +local_password = os.environ.get("LOCAL_PASSWORD") + +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_username = os.environ.get("API_USERNAME") +api_password = os.environ.get("API_PASSWORD") + +local_broker = MQTTService( + local_broker_address, + local_broker_port, + client_id="system", + username=local_username, + password=local_password, +) + +api_broker = MQTTService( + api_broker_address, + api_broker_port, + client_id=client_id, + username=api_username, + password=api_password, +) + +def start(): + forwarder = MQTTForwarder(client_id, local_broker, api_broker) + forwarder.start(f"/system/sensor/rfid", f"/customer/telemetry/rfid") + + forwarder = MQTTForwarder(client_id, local_broker, api_broker) + forwarder.start(f"/system/sensor/light", f"/customer/telemetry/light") + +def stop(): + local_broker.disconnect() + api_broker.disconnect() \ No newline at end of file diff --git a/rpi/main.py b/rpi/main.py index 46d35401..e980bdf6 100644 --- a/rpi/main.py +++ b/rpi/main.py @@ -3,48 +3,19 @@ import os from flask import Flask from dotenv import load_dotenv -from controllers.mqtt_forwarder import MQTTForwarder +import broker_starter as bs from hardware.light.lora_light_sensor_reader import LoraLightSensorReader from hardware.screen.screen import Screen from hardware.rfid.reader import RfidReader from services.detection_service import DetectionService -from services.mqtt_service import MQTTService load_dotenv() app = Flask(__name__) -client_id = "pi-1" - -local_broker_address = os.environ.get("LOCAL_BROKER_ADDRESS", "127.0.0.1") -local_broker_port = int(os.environ.get("LOCAL_BROKER_PORT", 1883)) -local_username = os.environ.get("LOCAL_USERNAME") -local_password = os.environ.get("LOCAL_PASSWORD") - -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_username = os.environ.get("API_USERNAME") -api_password = os.environ.get("API_PASSWORD") - screen = Screen() rfid_reader = RfidReader("/dev/serial0", 9600) light_sensor_reader = LoraLightSensorReader("/dev/ttyUSB1", 9600) -local_broker = MQTTService( - local_broker_address, - local_broker_port, - client_id="system", - username=local_username, - password=local_password, -) - -api_broker = MQTTService( - api_broker_address, - api_broker_port, - client_id=client_id, - username=api_username, - password=api_password, -) - detection_service = DetectionService() @app.route("/party/start", methods=['POST']) @@ -52,21 +23,14 @@ def start_party(): print("Party started!") pass -def start_brokers(): - forwarder = MQTTForwarder(client_id, local_broker, api_broker) - forwarder.start(f"/system/sensor/rfid", f"/customer/telemetry/rfid") - - forwarder = MQTTForwarder(client_id, local_broker, api_broker) - forwarder.start(f"/system/sensor/light", f"/customer/telemetry/light") - def start_serial_devices(): screen.enableBackground() screen.displayMessage("Waiting for scan...") - rfid_reader.subscribe(lambda uid: local_broker.publish("/system/sensor/rfid", str(uid), 1)) + rfid_reader.subscribe(lambda uid: bs.local_broker.publish("/system/sensor/rfid", str(uid), 1)) rfid_reader.start() - light_sensor_reader.subscribe(lambda light_value: local_broker.publish("/system/sensor/light", str(light_value), 0)) + light_sensor_reader.subscribe(lambda light_value: bs.local_broker.publish("/system/sensor/light", str(light_value), 0)) light_sensor_reader.start() if __name__ == "__main__": @@ -74,7 +38,7 @@ if __name__ == "__main__": try : print("Starting app...") - start_brokers() + bs.start() print("Brokers started") #start_serial_devices() @@ -84,12 +48,10 @@ if __name__ == "__main__": except KeyboardInterrupt: print("Keyboard interrupt. Stopping app...") - local_broker.disconnect() - api_broker.disconnect() + bs.stop() exit() except Exception as e: print(e) - local_broker.disconnect() - api_broker.disconnect() + bs.stop() exit() diff --git a/rpi/services/mqtt_service.py b/rpi/services/mqtt_service.py index 9f74f194..6e226f39 100644 --- a/rpi/services/mqtt_service.py +++ b/rpi/services/mqtt_service.py @@ -83,6 +83,7 @@ class MQTTService: self._subscriptions[topic] = handler def on_message(client, userdata, msg): + print(f"Received {msg.payload} on {msg.topic} from {client}") for sub_topic, h in self._subscriptions.items(): if mqtt.topic_matches_sub(sub_topic, msg.topic): h(msg.topic, msg.payload.decode())