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