Files
board-mate/api-customer/app.py
2026-01-02 21:25:11 +01:00

103 lines
3.2 KiB
Python

import json
import os
import threading
import requests
from dotenv import load_dotenv
from flask import Flask
from src.controllers.AuthController import AuthController
from src.controllers.ClientController import ClientController
from src.controllers.message_controller import MessageController
from src.controllers.mqtt_forwarder import MQTTForwarder
from src.models.AuthData import AuthData
from src.services.mqtt_service import MQTTService
load_dotenv()
app = Flask(__name__)
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))
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")
def handle_message_received(topic: str, payload: str):
try:
print("=== MQTT MESSAGE RECEIVED ===", flush=True)
print("Raw payload:", payload, flush=True)
print("Payload type:", type(payload), flush=True)
data = json.loads(payload)
print("Parsed payload:", data, flush=True)
url = "https://192.168.15.125:1880/message/receive"
response = requests.post(
url,
json=data,
verify=False,
timeout=5
)
print("=== NODE-RED RESPONSE ===", flush=True)
print("Status code:", response.status_code, flush=True)
print("Headers:", response.headers, flush=True)
print("Raw response:", repr(response.text), flush=True)
if response.text.strip():
content_type = response.headers.get("Content-Type", "")
if content_type.startswith("application/json"):
print("Response JSON:", response.json(), flush=True)
else:
print("Response is not JSON", flush=True)
else:
print("Node-RED returned an empty response body", flush=True)
except json.JSONDecodeError as e:
print("Incoming payload is NOT valid JSON:", e, flush=True)
except requests.RequestException as e:
print("HTTP request to Node-RED failed:", e, flush=True)
except Exception as e:
print("Unexpected error:", e, flush=True)
def start_mqtt(data : AuthData):
client_id = data.get_client_id()
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",
)
api_broker.subscribe(f"/chat/{client_id}/message", handle_message_received)
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)