app backend prima
This commit is contained in:
121
scripts/test_mqtt_improved.py
Normal file
121
scripts/test_mqtt_improved.py
Normal 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()
|
||||
Reference in New Issue
Block a user