Add telemetry database insertion
This commit is contained in:
@@ -1,22 +1,23 @@
|
||||
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.controllers.mqtt_forwarder import create_forwarder
|
||||
from src.models.AuthData import AuthData
|
||||
from src.services.mongo_service import MongoService
|
||||
from src.services.mqtt_service import MQTTService
|
||||
|
||||
load_dotenv()
|
||||
|
||||
app = Flask(__name__)
|
||||
|
||||
database_uri = os.getenv("MONGO_URI", "mongodb://localhost:27017")
|
||||
database_name = os.getenv("DATABASE_NAME", "default")
|
||||
|
||||
local_broker_address = os.environ.get("LOCAL_BROKER_ADDRESS", "127.0.0.1")
|
||||
local_broker_port = int(os.environ.get("LOCAL_BROKER_PORT", 1883))
|
||||
|
||||
@@ -25,78 +26,22 @@ api_broker_port = int(os.environ.get("API_BROKER_PORT", 1883))
|
||||
|
||||
auth_data = AuthData()
|
||||
|
||||
database_service = MongoService(database_uri, database_name)
|
||||
|
||||
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")
|
||||
message_controller = MessageController(app, auth_data, "https://192.168.15.120:8000", database_service)
|
||||
|
||||
def handle_login(data):
|
||||
local_broker, api_broker, forwarder = create_forwarder(data, local_broker_address, local_broker_port, api_broker_address, api_broker_port)
|
||||
|
||||
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()
|
||||
api_broker.subscribe(f"/chat/{client_id}/message", message_controller.handle_message_received)
|
||||
forwarder.start(f"/customer/telemetry/#", f"/board-mate/{client_id}/telemetry", api_broker.publish)
|
||||
|
||||
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)
|
||||
auth_controller.set_on_login(handle_login)
|
||||
|
||||
app.run(host="0.0.0.0", port=5000, debug=True)
|
||||
|
||||
Reference in New Issue
Block a user