Integrazione MQTT

Eziwan include un client MQTT nativo che invia i dati sul campo (sensori RS485, metriche di rete, eventi) a qualsiasi broker MQTT, sia cloud che on-premise.


Broker compatibili

BrokerTipoNote
Eziwan MQTTGestito (incluso)mqtt.eziwan.com:8883 — TLS, configurazione automatica
MosquittoSelf-hostedOpen-source — da ospitare
HiveMQCloud / On-premiseEnterprise
EMQXCloud / On-premiseAlte prestazioni
AWS IoT CoreCloudIntegrazione con Lambda, S3
Azure IoT HubCloudIntegrazione con Azure Stream Analytics
Google Cloud IoTCloudIntegrazione con Pub/Sub
Scaleway IoT HubCloudOspitato in Francia

Configurazione del broker

Tramite la dashboard di Eziwan

Dispositivo → Configurazione → MQTT

Interfaccia grafica per configurare il broker, le credenziali e gli argomenti.

Configurazione YAML

mqtt:
enabled: true
broker: "mqtt.eziwan.com"
port: 8883
tls: true
client_id: "GW-Paris-01"

# Auth — token disponibile nella dashboard → Impostazioni → MQTT
username: "np_device"
password: "np_mqtt_xxxxxxxxxx"

# Qualità del servizio
keepalive: 60
qos: 1
retain: false

# Reconnexion automatique
reconnect_delay_min: 1
reconnect_delay_max: 60

# Buffering si connexion perdue
offline_buffer: true
offline_buffer_size: 10000 # messages
offline_buffer_ttl: 3600 # secondes
Buffer offline

Se la connessione LTE viene temporaneamente interrotta, Eziwan memorizza i messaggi MQTT in un buffer locale (fino a offline_buffer_size messaggi) e li pubblica automaticamente al ripristino della connessione. I dati non vanno mai persi.


Struttura degli argomenti

Dati dei sensori RS485 / Modbus

eziwan/{device_id}/modbus/{slave_id}/{tag_name}

Exemple :
eziwan/d_a1b2c3d4/modbus/1/active_power
eziwan/d_a1b2c3d4/modbus/2/temperatura

È inoltre possibile definire argomenti personalizzati per registro nella configurazione Modbus:

mqtt_topic: "usine/paris/energie/compteur-01/puissance"

Metriche di sistema (pubblicate automaticamente)

ArgomentoDescrizioneIntervallo
.../system/rsrpSegnale RSRP LTE (dBm)60 s
.../system/rsrqQualità del segnale RSRQ (dB)60 s
.../system/uptimeTempo di attività (secondi)60 s
.../system/sim_activeSIM attiva (1 o 2)Al cambiamento
.../system/operatorOperatore LTE attualeAl cambio
.../system/wan_ipIP WANAl cambio
.../system/vpn_latency_msLatenza tunnel VPN60 s

Eventi in tempo reale

ArgomentoEvento
.../events/failoverPassaggio da SIM1 a SIM2
.../events/failover_recoveredRitorno su SIM1
.../events/rebootRiavvio rilevato
.../events/vpn_connectedTunnel VPN stabilito
.../events/vpn_disconnectedTunnel VPN perso
.../events/modbus_timeoutSlave Modbus non risponde più

Formato dei payload

Carico utile standard (sensori)

{
"device_id": "d_a1b2c3d4",
"name": "GW-Paris-01",
"timestamp": "2025-06-15T14:23:45.123Z",
"metric": "active_power",
"value": 42.7,
"unit": "kW",
"quality": "good",
"source": "modbus:slave=1:reg=0x0048"
}

Payload dell'evento di failover

{
"device_id": "d_a1b2c3d4",
"event": "failover",
"timestamp": "2025-06-15T14:23:45.123Z",
"from_sim": 1,
"to_sim": 2,
"from_operator": "Orange",
"to_operator": "SFR",
"reason": "rsrp_below_threshold",
"rsrp_sim1_dbm": -104,
"duration_ms": 28340
}

Il campo "quality" indica l'affidabilità della misurazione:

  • "good" — lettura Modbus riuscita
  • "timeout" — lo slave non ha risposto
  • "error" — errore Modbus (campo "error_code" presente)
  • "stale" — ultimo valore noto (slave temporaneamente assente)

Abbonamento e prova

Test rapido con mosquitto_sub

# Iscriviti a tutte le discussioni relative a un dispositivo
mosquitto_sub -h mqtt.eziwan.com -p 8883 \
--cert ~/eziwan/client.crt \
--key ~/eziwan/client.key \
--cafile ~/eziwan/ca.crt \
-t "eziwan/d_a1b2c3d4/#" -v

# Argomenti specifici
mosquitto_sub -h mqtt.eziwan.com -p 8883 \
--cert ~/eziwan/client.crt --key ~/eziwan/client.key \
--cafile ~/eziwan/ca.crt \
-t "eziwan/d_a1b2c3d4/modbus/1/active_power" \
-t "eziwan/d_a1b2c3d4/events/#"

Scarica i tuoi certificati client da Impostazioni → MQTT → Scarica certificati.


Integrazione di InfluxDB 2.x con Grafana

Architettura

Configurazione di Telegraf

# /etc/telegraf/telegraf.conf

[[inputs.mqtt_consumer]]
servers = ["ssl://mqtt.eziwan.com:8883"]
topics = ["eziwan/+/modbus/#", "eziwan/+/system/#"]
qos = 1

# Certificats MTLS
tls_ca = "/etc/telegraf/eziwan-ca.crt"
tls_cert = "/etc/telegraf/eziwan-client.crt"
tls_key = "/etc/telegraf/eziwan-client.key"

# Parsing JSON
data_format = "json"
json_time_key = "timestamp"
json_time_format = "2006-01-02T15:04:05.999Z07:00"
tag_keys = ["device_id", "name", "metric", "unit"]

[[outputs.influxdb_v2]]
urls = ["http://influxdb:8086"]
token = "votre-token-influx"
organization = "acme-corp"
bucket = "eziwan"

Richiesta di feed per Grafana

from(bucket: "eziwan")
|> range(start: -24h)
|> filter(fn: (r) => r._measurement == "mqtt_consumer")
|> filter(fn: (r) => r.metric == "active_power")
|> filter(fn: (r) => r.device_id == "d_a1b2c3d4")
|> aggregateWindow(every: 1m, fn: mean, createEmpty: false)
|> yield(name: "puissance_active")

Integrazione con Node-RED

Node-RED consente di creare flussi di elaborazione dei dati visivi:

[
{
"type": "mqtt in",
"topic": "eziwan/d_a1b2c3d4/modbus/1/active_power",
"broker": "eziwan-mqtt",
"qos": 1
},
{
"type": "json"
},
{
"type": "function",
"func": "if (msg.payload.value > 100) { msg.alert = true; } return msg;"
},
{
"type": "http request",
"method": "POST",
"url": "https://hooks.slack.com/services/xxx",
"comment": "Alerte Slack si puissance > 100 kW"
}
]

QoS consigliata in base al caso d'uso

Caso d'usoQoSMotivazione
Metriche di sistema (RSSI, uptime)0Dati ridondanti — perdita accettabile
Sensori di processo (energia, T°, P)1Affidabilità richiesta, duplicati gestiti
Allarmi ed eventi critici1Ricevuto almeno una volta
Comandi attuatori2Esattamente una volta — evita la doppia azione

Certificati e sicurezza

I certificati client MTLS sono disponibili in Impostazioni → MQTT → Scarica certificati. Sono unici per ogni tenant e possono essere rigenerati in qualsiasi momento.

Contatta l'assistenza → | API REST →

Domande frequenti

Perché MQTT si è affermato nell'IoT industriale?

Perché è leggero (ideale su 4G), funziona con il modello “pubblica/sottoscrivi” (sono i dispositivi ad avviare la connessione, senza porte in entrata) e gestisce in modo nativo le connessioni intermittenti con i livelli di QoS e i messaggi in coda.

Quale livello di QoS scegliere?

Il QoS 1 (almeno una volta) è l'impostazione predefinita ideale per la telemetria: garantisce la consegna senza la complessità del QoS 2. Riservate il QoS 0 alle misurazioni ad alta frequenza tolleranti alla perdita.

Come proteggere un flusso MQTT?

TLS sistematico (porta 8883), autenticazione tramite certificato client o credenziali dedicate per dispositivo e separazione degli argomenti per sito. Il broker non deve mai accettare connessioni anonime.

MQTT sostituisce Modbus?

No, si completano a vicenda: Modbus raccoglie i dati il più vicino possibile alle apparecchiature (bus di campo), mentre MQTT li trasmette in modo efficiente al cloud. Il gateway effettua la conversione da Modbus a MQTT.

Risorse correlate