#!/usr/bin/env python3 import os import cv2 import requests from dotenv import load_dotenv from flask import Flask, jsonify from hardware.light.lora_light_sensor_reader import LoraLightSensorReader from hardware.rfid.reader import RfidReader from services.clock_service import ClockService from services.detection_service import DetectionService from services.forwarder_service import ForwarderService from services.game_service import GameService 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__) 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, ) forward_service = ForwarderService(local_broker, api_broker) game_service = GameService() @app.route("/command/party/start", methods=['POST']) def start_party(): try: print("Party started!") return jsonify({"status": "ok", "message": "Party started"}), 200 except Exception as ex: print(ex) return jsonify({"status": "error", "message": f"An error occurred : {ex}"}), 500 @app.route("/command/party/play", methods=['POST']) def make_move(): try: frame, fen = game_service.make_move() print(fen) headers = {'Content-Type': 'image/jpeg'} response = requests.post( "https://192.168.15.125:1880/party/image", data=frame, headers=headers, verify=False) print(response.status_code) return jsonify({"status": "ok", "message": "Party started"}), 200 except Exception as ex: print(ex) return jsonify({"status": "error", "message": f"An error occurred : {ex}"}), 500 if __name__ == "__main__": try : forward_service.register_forwarder(client_id, "/system/sensor/rfid", f"/customer/telemetry/rfid") forward_service.register_forwarder(client_id, "/system/sensor/light", f"/customer/telemetry/light") forward_service.register_forwarder(client_id, "/system/sensor/gps", f"/customer/telemetry/gps") rfid_reader.subscribe(lambda uid: local_broker.publish("/system/sensor/rfid", str(uid), 1)) light_sensor_reader.subscribe(lambda light_value: local_broker.publish("/system/sensor/light", str(light_value), 0)) forward_service.start_all() rfid_reader.start() light_sensor_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() forward_service.stop_all() exit() except Exception as e: print(e) game_service.stop() forward_service.stop_all() exit()