#!/usr/bin/env python3 import os from flask import Flask from controllers.mqtt_forwarder import MQTTForwarder 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 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)) api_broker_address = os.environ.get("API_BROKER_ADDRESS", "127.0.0.1") api_broker_port = int(os.environ.get("API_BROKER_PORT", 1883)) 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="system", password="hepl", ) api_broker = MQTTService( api_broker_address, api_broker_port, client_id=client_id, username="pi-1", password="hepl", ) detection_service = DetectionService() @app.route("/party/start", methods=['POST']) def start_party(): print("Party started!") pass def start_brokers(): forwarder = MQTTForwarder(client_id, local_broker, api_broker) forwarder.start(f"/system/sensor/#", f"/customer/telemetry/{client_id}") def start_serial_devices(): screen.enableBackground() screen.displayMessage("Waiting for scan...") rfid_reader.subscribe(lambda uid: local_broker.publish( "/system/sensor/rfid", str(uid), 0 )) rfid_reader.start() light_sensor_reader.subscribe(lambda light_value: local_broker.publish( "/system/sensor/light", str(light_value), 0 )) light_sensor_reader.start() if __name__ == "__main__": try : print("Starting app...") start_brokers() print("Brokers started") #start_serial_devices() print("Serial devices started") app.run(host="0.0.0.0", port=5000, debug=False) except KeyboardInterrupt: print("Keyboard interrupt. Stopping app...") local_broker.disconnect() api_broker.disconnect() exit() except Exception as e: print(e) local_broker.disconnect() api_broker.disconnect() exit()