Aggiunti WebSockets al frontend

This commit is contained in:
2026-04-21 22:28:32 +02:00
parent ba241f6a45
commit 8a40e9b066
3 changed files with 39 additions and 10 deletions
+10 -2
View File
@@ -9,6 +9,7 @@ import threading
import time
import logging
from logging.handlers import RotatingFileHandler
from flask_socketio import SocketIO, emit
# --- CONFIGURAZIONE LOGGING ---
logging.basicConfig(
@@ -99,6 +100,7 @@ def get_call(id, proto="DMR"):
def save_cache(data):
with open(CACHE_FILE, 'w') as f: json.dump(data, f)
socketio.emit('dati_aggiornati')
def save_to_sqlite(client_id, data, protocol="DMR"):
conn = sqlite3.connect(DB_PATH)
@@ -107,8 +109,10 @@ def save_to_sqlite(client_id, data, protocol="DMR"):
(client_id, protocol, str(data.get('source_id', '---')), str(data.get('destination_id', '---')), data.get('slot', 0), round(data.get('duration', 0), 1), round(data.get('ber', 0), 2)))
conn.commit()
conn.close()
socketio.emit('dati_aggiornati')
app = Flask(__name__)
socketio = SocketIO(app, cors_allowed_origins="*", async_mode='threading')
app.secret_key = 'ari_fvg_secret_ultra_secure'
client_states = {}
device_configs = {}
@@ -169,6 +173,7 @@ def on_message(client, userdata, msg):
elif parts[0] == 'servizi':
client_states[cid] = payload
socketio.emit('dati_aggiornati') # <--- WEBSOCKET
if payload.upper() not in ['OFF', 'OFFLINE', '']:
tel = client_telemetry.get(cid, {})
if isinstance(tel, dict) and '🔄' in str(tel.get('ts1', '')):
@@ -187,9 +192,9 @@ def on_message(client, userdata, msg):
"files": data.get("files", data.get("config_files", [])),
"profiles": data.get("profiles", {"A": "PROFILO A", "B": "PROFILO B"})
}
socketio.emit('dati_aggiornati') # <--- WEBSOCKET
except Exception as e: logger.error(f"Errore parsing health: {e}")
# NUOVO BLOCCO: Intercettazione configurazione DMRGateway
elif len(parts) >= 4 and parts[0] == 'data' and parts[2].lower() == 'dmrgateway' and (parts[3].upper().startswith('NETWORK') or parts[3].upper().startswith('DMR NETWORK')):
try:
cid = parts[1].lower()
@@ -211,6 +216,7 @@ def on_message(client, userdata, msg):
if is_ts1: network_mapping[cid]["ts1"] = net_name
if is_ts2: network_mapping[cid]["ts2"] = net_name
socketio.emit('dati_aggiornati') # <--- WEBSOCKET
except Exception as e:
logger.error(f"Errore parsing DMRGateway per {cid}: {e}")
@@ -259,6 +265,7 @@ def on_message(client, userdata, msg):
active_calls[cid][sk] = {'src': src, 'dst': dst}
client_telemetry[cid]["alt"] = ""
client_telemetry[cid][sk] = f"🎙️ {src} ➔ TG {dst}"
socketio.emit('dati_aggiornati') # <--- WEBSOCKET
elif act in ['end', 'lost']:
info = active_calls[cid].get(sk, {'src': '---', 'dst': '---'})
d['source_id'], d['destination_id'] = info['src'], info['dst']
@@ -288,6 +295,7 @@ def on_message(client, userdata, msg):
active_calls[cid][k] = {'src': src, 'dst': target}
client_telemetry[cid].update({"ts1":"","ts2":"","alt": f"{ico} {name}: {src}{target}"})
socketio.emit('dati_aggiornati') # <--- WEBSOCKET
elif act in ['end', 'lost']:
info = active_calls[cid].get(k, {'src': '---', 'dst': '---'})
@@ -619,4 +627,4 @@ def serve_icon():
if __name__ == '__main__':
threading.Thread(target=auto_update_ids, daemon=True).start()
app.run(host='0.0.0.0', port=5000)
socketio.run(app, host='0.0.0.0', port=9000)