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
| Broker | Type | Opmerkingen |
|---|---|---|
| Eziwan MQTT | Beheerd (inbegrepen) | mqtt.eziwan.com:8883 — TLS, geen configuratie nodig |
| Mosquitto | Zelf gehost | Open source — moet worden gehost |
| HiveMQ | Cloud / On-premise | Enterprise |
| EMQX | Cloud / On-premise | Hoge prestaties |
| AWS IoT Core | Cloud | Integratie met Lambda, S3 |
| Azure IoT Hub | Cloud | Integratie met Azure Stream Analytics |
| Google Cloud IoT | Cloud | Integratie met Pub/Sub |
| Scaleway IoT Hub | Cloud | Gehost 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
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)
| Onderwerp | Beschrijving | Interval |
|---|---|---|
.../system/rsrp | LTE RSRP-signaal (dBm) | 60 s |
.../system/rsrq | RSRQ-signaalkwaliteit (dB) | 60 s |
.../system/uptime | Uptime (seconden) | 60 s |
.../system/sim_active | Actieve SIM (1 of 2) | Bij wijziging |
.../system/operator | Huidige LTE-provider | Bij wijziging |
.../system/wan_ip | WAN-IP | Bij wijziging |
.../system/vpn_latency_ms | VPN-tunnelvertraging | 60 s |
Real-time gebeurtenissen
| Onderwerp | Trigger |
|---|---|
.../events/failover | Overschakeling van SIM1 naar SIM2 |
.../events/failover_recovered | Terug naar SIM1 |
.../events/reboot | Herstart gedetecteerd |
.../events/vpn_connected | VPN-tunnel tot stand gebracht |
.../events/vpn_disconnected | VPN-tunnel verbroken |
.../events/modbus_timeout | Modbus-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
| Toepassingsgeval | QoS | Motivering |
|---|---|---|
| Systeemstatistieken (RSSI, uptime) | 0 | Redundante gegevens — aanvaardbaar verlies |
| Processensoren (energie, T°, P) | 1 | Betrouwbaarheid vereist, duplicaten worden beheerd |
| Alarmen en kritieke gebeurtenissen | 1 | Minstens één keer ontvangen |
| Commando's voor actuatoren | 2 | Precies één keer — voorkomt dubbele actie |
De MTLS-clientcertificaten zijn beschikbaar onder Instellingen → MQTT → Certificaten downloaden. Ze zijn uniek per tenant en kunnen op elk moment opnieuw worden gegenereerd.
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
- Industriële MQTT — de oplossingspagina
- OPC UA en MQTT — beide standaarden combineren
- Modbus RTU naar MQTT — de conversie van veld naar cloud
- Eziwan REST-API — de andere integratiemethode
- MQTT en RS-485 in de praktijk — het achtergrondartikel