app backend prima

This commit is contained in:
2025-10-20 19:10:08 +02:00
commit 438255d27b
42 changed files with 4622 additions and 0 deletions

View File

@@ -0,0 +1,121 @@
"""
Script per testare l'invio di un allarme via MQTT con nuova struttura topic
Topic pattern: terrain/{cliente_id}/{sito_id}/alarms
Questo script usa la nuova architettura MQTT migliorata dove:
- cliente_id e sito_id sono nel topic (non nel payload)
- Supporto per diversi tipi di messaggi (alarms, telemetry, status)
- QoS 1 per garantire delivery
"""
import json
import time
from datetime import datetime, timezone
import paho.mqtt.client as mqtt
# Configurazione (modifica secondo il tuo setup)
MQTT_BROKER = "94.177.199.207"
MQTT_PORT = 1883
# ID dal database (verifica con: SELECT id, cliente_id, nome FROM siti;)
CLIENTE_ID = 1 # Cliente ID del sito
SITO_ID = 1 # ID del sito "Ponte Morandi"
# Topic con nuova struttura: terrain/{cliente_id}/{sito_id}/alarms
MQTT_TOPIC = f"terrain/{CLIENTE_ID}/{SITO_ID}/alarms"
# Allarme di test (sito_id e cliente_id vengono estratti dal topic)
alarm_data = {
"tipo": "movimento_terreno",
"severita": "critical", # critical, warning, info
"titolo": "🚨 TEST: Movimento terreno critico",
"descrizione": "Allarme di test per verificare notifiche push - Sistema funzionante!",
"messaggio": "Rilevato movimento anomalo superiore alla soglia di sicurezza",
"valore_rilevato": 25.5,
"valore_soglia": 10.0,
"unita_misura": "mm",
"timestamp": datetime.now(timezone.utc).isoformat(),
"dati_sensori": {
"sensore_inclinometro_1": 25.5,
"sensore_inclinometro_2": 18.3,
"temperatura": 15.5,
"umidita": 45.0
}
}
def on_connect(client, userdata, flags, rc):
"""Callback quando il client si connette"""
if rc == 0:
print("✓ Connesso al broker MQTT")
else:
print(f"✗ Connessione fallita con codice: {rc}")
def on_publish(client, userdata, mid):
"""Callback quando il messaggio viene pubblicato"""
print(f"✓ Messaggio pubblicato (message_id: {mid})")
def send_test_alarm():
"""Invia un allarme di test"""
print("=" * 70)
print("TEST INVIO ALLARME VIA MQTT - NUOVA ARCHITETTURA")
print("=" * 70)
# Crea client MQTT
client = mqtt.Client(client_id="test_alarm_sender_v2")
client.on_connect = on_connect
client.on_publish = on_publish
try:
# Connetti al broker
print(f"\nConnessione a {MQTT_BROKER}:{MQTT_PORT}...")
client.connect(MQTT_BROKER, MQTT_PORT, keepalive=60)
# Start loop
client.loop_start()
time.sleep(1) # Aspetta la connessione
# Pubblica l'allarme
print(f"\nInvio allarme:")
print(f" Topic: {MQTT_TOPIC}")
print(f" Cliente ID: {CLIENTE_ID}")
print(f" Sito ID: {SITO_ID}")
print("\nPayload:")
print(json.dumps(alarm_data, indent=2, ensure_ascii=False))
print()
result = client.publish(
MQTT_TOPIC,
json.dumps(alarm_data),
qos=1 # QoS 1 per garantire delivery
)
# Aspetta che il messaggio sia pubblicato
result.wait_for_publish()
print("\n✓ Allarme inviato con successo!")
print("\nControlla:")
print(" 1. I log del backend per vedere se è stato ricevuto")
print(" 2. Il database per verificare che l'allarme sia stato salvato")
print(" 3. L'app mobile per verificare la ricezione della notifica push")
print("\nComandi utili:")
print(" - Logs backend: tail -f logs/app.log")
print(" - DB query: SELECT * FROM allarmi ORDER BY created_at DESC LIMIT 5;")
# Cleanup
time.sleep(1)
client.loop_stop()
client.disconnect()
except Exception as e:
print(f"\n✗ Errore: {e}")
client.loop_stop()
raise
print("\n" + "=" * 70)
if __name__ == "__main__":
send_test_alarm()