#!/usr/bin/env python3 import os from dotenv import load_dotenv from flask import Flask from controllers.GameController import GameController from hardware.light.lora_light_sensor_reader import LoraLightSensorReader from hardware.rfid.reader import RfidReader from hardware.sound.sound import SoundReader from services.forwarder_service import ForwarderService from services.mqtt_service import MQTTService load_dotenv() 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") app = Flask(__name__) forwarder_service = None if __name__ == "__main__": try : rfid_reader = RfidReader("/dev/serial0", 9600) light_sensor_reader = LoraLightSensorReader("/dev/ttyUSB1", 9600) sound_reader = SoundReader(17) 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, ) forwarder_service = ForwarderService(local_broker, api_broker) game_controller = GameController(app) forwarder_service.register_forwarder(client_id, "rfid", "/system/sensor/rfid", f"/customer/telemetry/rfid", 2) forwarder_service.register_forwarder(client_id, "light", "/system/sensor/light", f"/customer/telemetry/light", 1) forwarder_service.register_forwarder(client_id, "sound", "/system/sensor/sound", f"/customer/telemetry/sound", 1) forwarder_service.register_forwarder(client_id, "gps", "/system/sensor/gps", f"/customer/telemetry/gps", 2) rfid_reader.subscribe(lambda uid: local_broker.publish("/system/sensor/rfid", str(uid), 2)) light_sensor_reader.subscribe(lambda light_value: local_broker.publish("/system/sensor/light", str(light_value), 1)) sound_reader.subscribe(lambda sound_value: local_broker.publish("/system/sensor/sound", str(sound_value), 1)) forwarder_service.start_all() rfid_reader.start() light_sensor_reader.start() sound_reader.start() print("App started...") app.run(host="0.0.0.0", port=5000, debug=False) except KeyboardInterrupt: print("Keyboard interrupt. Stopping app...") #game_service.stop() forwarder_service.stop_all() exit() except Exception as e: print(e) #game_service.stop() forwarder_service.stop_all() exit()