MQTT-integratie

Eziwan bevat een native MQTT-client die veldgegevens (RS485-sensoren, netwerkstatistieken, gebeurtenissen) naar elke willekeurige MQTT-broker verzendt — zowel in de cloud als on-premise.


Ondersteunde brokers​

BrokerTypeOpmerkingen
Eziwan MQTTBeheerd (inbegrepen)mqtt.eziwan.com:8883 — TLS, geen configuratie nodig
MosquittoZelf gehostOpen source — moet worden gehost
HiveMQCloud / On-premiseEnterprise
EMQXCloud / On-premiseHoge prestaties
AWS IoT CoreCloudIntegratie met Lambda, S3
Azure IoT HubCloudIntegratie met Azure Stream Analytics
Google Cloud IoTCloudIntegratie met Pub/Sub
Scaleway IoT HubCloudGehost in Frankrijk

Broker-configuratie​

Via het Eziwan-dashboard​

Instellingen → Configuratie → MQTT

Grafische interface voor het configureren van de broker, de inloggegevens en de topics.

YAML-configuratie​

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

# Auth — token beschikbaar in het dashboard → Instellingen → MQTT
username: "np_device"
password: "np_mqtt_xxxxxxxxxx"

# Kwaliteit van de dienstverlening
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
Offline buffering

Als de LTE-verbinding tijdelijk wordt onderbroken, slaat Eziwan de MQTT-berichten lokaal op (maximaal offline_buffer_size berichten) en publiceert deze automatisch zodra de verbinding weer tot stand is gebracht. Er gaan nooit gegevens verloren.


Indeling van de onderwerpen​

RS485-/Modbus-sensorgegevens​

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

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

U kunt in de Modbus-configuratie ook per register aangepaste topics instellen:

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

Systeemstatistieken (worden automatisch gepubliceerd)​

OnderwerpBeschrijvingInterval
.../system/rsrpLTE RSRP-signaal (dBm)60 s
.../system/rsrqRSRQ-signaalkwaliteit (dB)60 s
.../system/uptimeUptime (seconden)60 s
.../system/sim_activeActieve SIM (1 of 2)Bij wijziging
.../system/operatorHuidige LTE-providerBij wijziging
.../system/wan_ipWAN-IPBij wijziging
.../system/vpn_latency_msVPN-tunnelvertraging60 s

Real-time gebeurtenissen​

OnderwerpTrigger
.../events/failoverOverschakeling van SIM1 naar SIM2
.../events/failover_recoveredTerug naar SIM1
.../events/rebootHerstart gedetecteerd
.../events/vpn_connectedVPN-tunnel tot stand gebracht
.../events/vpn_disconnectedVPN-tunnel verbroken
.../events/modbus_timeoutModbus-slave reageert niet meer

Formaat van de payloads​

Standaardpayload (sensoren)​

{
"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 bij een failover-gebeurtenis​

{
"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
}

Het veld "quality" geeft de betrouwbaarheid van de meting aan:

  • "good" — Modbus-uitlezing geslaagd
  • "timeout" — de slave heeft niet gereageerd
  • "error" — Modbus-fout (veld "error_code" aanwezig)
  • "stale" — laatste bekende waarde (slave tijdelijk afwezig)

Abonnement en proefperiode​

Snelle test met mosquitto_sub​

# Je abonneren op alle onderwerpen van een apparaat
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

# Specifieke onderwerpen
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/#"

Download uw clientcertificaten via Instellingen → MQTT → Certificaten downloaden.


Integratie van InfluxDB 2.x en Grafana​

Architectuur​

Telegraf configureren​

# /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"

Feed-verzoek voor 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")

Node-RED-integratie​

Met Node-RED kun je visuele gegevensverwerkingsstromen maken:

[
{
"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"
}
]

Aanbevolen QoS per gebruiksscenario​

ToepassingsgevalQoSMotivering
Systeemstatistieken (RSSI, uptime)0Redundante gegevens — aanvaardbaar verlies
Processensoren (energie, T°, P)1Betrouwbaarheid vereist, duplicaten worden beheerd
Alarmen en kritieke gebeurtenissen1Minstens één keer ontvangen
Commando's voor actuatoren2Precies één keer — voorkomt dubbele actie

Certificaten en beveiliging

De MTLS-clientcertificaten zijn beschikbaar onder Instellingen → MQTT → Certificaten downloaden. Ze zijn uniek per tenant en kunnen op elk moment opnieuw worden gegenereerd.

Contact opnemen met de helpdesk → | REST-API →

Veelgestelde vragen​

Waarom heeft MQTT zich in het industriële IoT doorgezet?​

Omdat het licht is (ideaal voor 4G), werkt op basis van publicatie/abonnement (de apparaten initiëren de verbinding, geen inkomende poort), en standaard omgaat met onderbroken verbindingen via QoS-niveaus en opgeslagen berichten.

Welk QoS-niveau moet je kiezen?​

QoS 1 (minstens één keer) is de juiste standaardinstelling voor telemetrie: deze garandeert de levering zonder de extra belasting van QoS 2. Gebruik QoS 0 uitsluitend voor metingen met een hoge frequentie die verliesbestendig zijn.

Hoe beveilig je een MQTT-stream?​

Systematische TLS (poort 8883), authenticatie via een clientcertificaat of apparaatspecifieke inloggegevens, en scheiding van topics per locatie. De broker mag nooit anonieme verbindingen toestaan.

Vervangt MQTT Modbus?​

Nee, ze vullen elkaar aan: Modbus verzamelt de gegevens zo dicht mogelijk bij de apparatuur (veldbus), MQTT transporteert ze efficiënt naar de cloud. De gateway zorgt voor de conversie van Modbus naar MQTT.

Gerelateerde bronnen​