Teil 2: MQTT und die perfekte Symbiose
Der agile Brückenbauer zur Cloud und das Zusammenspiel mit OPC UA
MQTT: Der agile Brückenbauer zur Cloud
CLOUD-PROTOKOLL
Was ist MQTT?
MQTT (Message Queuing Telemetry Transport) ist ein leichtgewichtiges Publish/Subscribe-Messaging-Protokoll, das ursprünglich 1999 von IBM für die Überwachung von Ölpipelines entwickelt wurde. Das Protokoll wurde 2013 zu einem OASIS-Standard und hat sich als de-facto Standard für IoT- und Cloud-Kommunikation etabliert.
Im Gegensatz zu klassischen Request/Response-Protokollen (wie HTTP) arbeitet MQTT nach dem Publish/Subscribe-Prinzip: Datenquellen (Publisher) senden Nachrichten an Topics, ohne zu wissen, wer diese empfängt. Interessenten (Subscriber) abonnieren Topics und erhalten automatisch alle Nachrichten – ohne direkten Kontakt zum Publisher. Ein zentraler MQTT-Broker verwaltet alle Verbindungen und leitet Nachrichten weiter.
MQTT in Zahlen
- Protokoll-Overhead: Minimal 2 Bytes pro Nachricht (HTTP: mindestens 200+ Bytes)
- Verbindungsart: Persistente TCP-Verbindung (kein Connection-Overhead pro Nachricht)
- Quality of Service: 3 Stufen (QoS 0, 1, 2) für unterschiedliche Zuverlässigkeitsanforderungen
- Last Will & Testament: Automatische Benachrichtigung bei Verbindungsabbruch
Stärken von MQTT für Cloud-Kommunikation
1. Effizienz und geringer Bandbreitenverbrauch
Der minimale Protokoll-Overhead macht MQTT ideal für Umgebungen mit begrenzter Bandbreite. Ein typisches MQTT-Publish-Paket mit einer Temperaturmessung benötigt etwa 20 Bytes (inkl. TCP/IP-Header), während dieselbe Information per HTTP POST mindestens 250 Bytes erfordern würde. Bei 1000 Sensoren mit 1 Hz Abtastrate spart MQTT täglich über 19 GB Datenverkehr.
2. Zuverlässigkeit in instabilen Netzwerken
MQTT bietet drei Quality-of-Service-Level:
- QoS 0 (At most once): Nachricht wird einmal gesendet, ohne Empfangsbestätigung. Geeignet für unkritische Telemetriedaten, wo gelegentlicher Verlust akzeptabel ist.
- QoS 1 (At least once): Nachricht wird mindestens einmal zugestellt, Duplikate möglich. Standard für wichtige Maschinendaten.
- QoS 2 (Exactly once): Nachricht wird garantiert genau einmal zugestellt. Wichtig für Steuerbefehle oder Transaktionsdaten.
Bei Verbindungsabbruch speichert der Broker Nachrichten für offline Clients (Persistent Sessions) und stellt sie bei Wiederverbindung zu.
3. Hohe Skalierbarkeit für viele Endpunkte
Ein einzelner MQTT-Broker kann problemlos 100.000+ gleichzeitige Verbindungen verwalten. Die entkoppelte Publish/Subscribe-Architektur ermöglicht horizontale Skalierung: Neue Subscriber können hinzugefügt werden, ohne Publisher zu beeinflussen. Cloud-Dienste wie AWS IoT Core oder Azure IoT Hub nutzen MQTT und skalieren auf Millionen Geräte.
4. Optimale Cloud-Integration
Alle großen Cloud-Plattformen bieten native MQTT-Unterstützung:
- AWS IoT Core: Managed MQTT-Broker mit Regeln-Engine zur Weiterverarbeitung
- Azure IoT Hub: Gerätemanagement und MQTT-Gateway in einem
- Google Cloud IoT Core: (eingestellt 2023, aber Alternativen via Cloud Pub/Sub)
- HiveMQ Cloud, EMQX Cloud: Spezialisierte Managed MQTT-Broker
Typische Anwendungsfälle in der Cloud-Kommunikation
IoT-Daten und Telemetrie
Tausende Sensoren senden kontinuierlich Messwerte an die Cloud. MQTT-Topics strukturieren die Daten hierarchisch, z.B. factory/line-a/machine-05/temperature. Cloud-Anwendungen abonnieren relevante Topics und verarbeiten Daten in Echtzeit.
Remote Monitoring und Alarmierung
Maschinen publizieren Status-Updates und Alarme. Ein Wartungstechniker erhält Push-Benachrichtigungen auf seinem Smartphone, wenn eine kritische Schwelle überschritten wird. Das System kann auch präventiv Warnungen senden, bevor ein Ausfall eintritt.
Bidirektionale Kommunikation für Mobile Apps
Mobile Anwendungen für Maschinenbediener abonnieren Maschinen-Status und können gleichzeitig Steuerbefehle zurücksenden (z.B. Produktionsparameter anpassen). MQTT ermöglicht echte Echtzeit-Interaktion mit minimaler Latenz.
MQTT Codebeispiel: Sensor-Daten publizieren (Python)
import paho.mqtt.client as mqtt
import json
import time
# MQTT-Broker-Konfiguration
BROKER = "mqtt.mein-unternehmen.de"
PORT = 8883 # TLS-verschlüsselt
TOPIC = "factory/line-a/machine-05/data"
# Callback bei erfolgreicher Verbindung
def on_connect(client, userdata, flags, rc):
if rc == 0:
print("Verbunden mit MQTT-Broker")
else:
print(f"Verbindung fehlgeschlagen, Code: {rc}")
# Client initialisieren
client = mqtt.Client(client_id="machine-05-publisher")
client.tls_set(ca_certs="ca-cert.pem") # TLS-Zertifikat
client.username_pw_set("username", "password")
client.on_connect = on_connect
# Verbindung zum Broker
client.connect(BROKER, PORT, keepalive=60)
client.loop_start()
# Sensordaten publizieren (simuliert)
while True:
payload = {
"timestamp": int(time.time()),
"temperature": 72.3,
"vibration": 0.15,
"rpm": 3450
}
# Als JSON mit QoS 1 (At least once)
client.publish(TOPIC, json.dumps(payload), qos=1)
print(f"Gesendet: {payload}")
time.sleep(1) # 1 Hz Abtastrate
Dieses Beispiel zeigt die Einfachheit von MQTT: Mit wenigen Zeilen Code können Maschinendaten sicher und effizient in die Cloud übertragen werden.
Die perfekte Symbiose: OPC UA und MQTT gemeinsam nutzen
BEST PRACTICE
Das Architekturmuster
Die Kombination von OPC UA und MQTT folgt einem bewährten Prinzip: Nutze jedes Protokoll dort, wo seine Stärken optimal zum Tragen kommen.
Aufgabenteilung in der Hybrid-Architektur
- OPC UA am Shopfloor: Semantisch reiche Datenbeschreibung, sichere M2M-Kommunikation zwischen Maschinen, SPS und lokalen Systemen (MES, SCADA)
- MQTT für Cloud-Transport: Effizienter, skalierbarer Transport vorverarbeiteter Daten von Edge Gateways zu Cloud-Plattformen
- Edge Gateway als Vermittler: Liest OPC UA-Daten, filtert/aggregiert sie, transformiert ins MQTT-Format und publiziert in die Cloud
| Kriterium | OPC UA | MQTT |
|---|---|---|
| Primärer Einsatzort | Shopfloor / Produktionsnetzwerk ✓ | Edge-to-Cloud / WAN |
| Datensemantik | Hoch (Informationsmodelle) ✓ | Niedrig (reine Payload) |
| Bandbreiteneffizienz | Mittel (binäres Protokoll) | Sehr hoch ✓ |
| Skalierbarkeit (Anzahl Clients) | Mittel (100–1000 Clients) | Sehr hoch (100.000+) ✓ |
| Sicherheit | Sehr hoch (TLS + X.509) ✓ | Hoch (TLS, aber weniger granular) |
| Echtzeit-Fähigkeit | Ja (PubSub-Erweiterung) ✓ | Nein (TCP-basiert, Best-Effort) |
| Cloud-Integration | Komplex (wenige native Integrationen) | Einfach (breite Unterstützung) ✓ |
| Standardisierung | IEC 62541 ✓ | OASIS Standard ✓ |
Die Rolle des Edge Gateways
Das Edge Gateway ist das Herzstück der Hybrid-Architektur. Es übernimmt mehrere kritische Funktionen:
1. Protokollübersetzung
Das Gateway fungiert als OPC UA Client (liest Daten von Maschinen) und MQTT Publisher (sendet Daten in die Cloud). Es extrahiert relevante Informationen aus den OPC UA-Informationsmodellen und verpackt sie in MQTT-Messages.
# Vereinfachtes Beispiel: OPC UA zu MQTT Bridge (Python)
from opcua import Client as OPCClient
import paho.mqtt.client as mqtt
import json
import time
# OPC UA Client initialisieren
opc_client = OPCClient("opc.tcp://10.0.1.50:4840")
opc_client.connect()
# OPC UA Node IDs für Maschinendaten
temp_node = opc_client.get_node("ns=2;s=Machine.Spindle.Temperature")
rpm_node = opc_client.get_node("ns=2;s=Machine.Spindle.RPM")
# MQTT Client initialisieren
mqtt_client = mqtt.Client()
mqtt_client.tls_set(ca_certs="ca-cert.pem")
mqtt_client.username_pw_set("gateway-01", "secure-password")
mqtt_client.connect("mqtt.cloud-provider.com", 8883)
mqtt_client.loop_start()
# Daten-Bridge Loop
while True:
# OPC UA Daten lesen
temperature = temp_node.get_value()
rpm = rpm_node.get_value()
# Payload für MQTT erstellen
payload = {
"timestamp": int(time.time()),
"machine_id": "CNC-05",
"temperature": temperature,
"rpm": rpm
}
# In die Cloud publizieren
mqtt_client.publish("factory/cnc/machine-05", json.dumps(payload), qos=1)
time.sleep(5) # Sampling-Rate: 0.2 Hz
# Aufräumen
opc_client.disconnect()
mqtt_client.loop_stop()
mqtt_client.disconnect()
2. Datenvorverarbeitung und Filterung
Nicht alle Shopfloor-Daten müssen in die Cloud. Das Gateway führt Edge Analytics durch:
- Downsampling: Aus 100 Hz Rohdaten werden 0.1 Hz Mittelwerte für Cloud-Speicherung
- Schwellwertfilterung: Nur signifikante Änderungen werden übertragen (z.B. Temperatur-Delta > 2°C)
- Aggregation: Mehrere Sensoren werden zu einem Gesamt-Status verdichtet
- Anomalieerkennung: Einfache regelbasierte Checks vor Ort, nur Anomalien werden gemeldet
Diese Vorverarbeitung reduziert Cloud-Datenverkehr um 90–95 Prozent bei gleichbleibender Informationsqualität.
3. Lokale Pufferung bei Konnektivitätsausfall
Wenn die Cloud-Verbindung unterbrochen ist, speichert das Gateway Daten lokal (z.B. in SQLite oder InfluxDB) und sendet sie nach, sobald die Verbindung wiederhergestellt ist. Dies verhindert Datenverlust und garantiert lückenlose Zeitreihen.
Vorteile der Kombination
Sicherheit: Defense in Depth
OPC UA sichert die Kommunikation im Produktionsnetzwerk mit TLS, Zertifikaten und Rollenbasierung. Das Gateway fungiert als zusätzliche Sicherheitsschicht (DMZ-Konzept) und trennt Shopfloor vom Internet. MQTT zur Cloud läuft über separate TLS-Verbindungen mit eigenen Credentials. Selbst bei Kompromittierung der Cloud-Verbindung bleibt das Produktionsnetzwerk geschützt.
Effizienz: Pay only for what you need
Cloud-Anbieter berechnen nach Datenvolumen und Rechenzeit. Durch Edge-Filterung werden nur 5–10 Prozent der Rohdaten übertragen. Ein mittelständisches Unternehmen spart so monatlich 500–2000 Euro an Cloud-Kosten, abhängig vom Datenvolumen.
Skalierbarkeit: Vom Prototyp zur Fabrik
Ein Pilotprojekt startet mit einem Edge Gateway und 5 Maschinen. Bei Erfolg können hunderte Maschinen über zusätzliche Gateways angebunden werden, ohne die Cloud-Architektur grundlegend zu ändern. MQTT-Broker skalieren horizontal, OPC UA Server bleiben lokal stabil.
Semantik: Best of both worlds
Das OPC UA-Informationsmodell bleibt erhalten: Das Gateway kann Metadaten (Einheiten, Grenzwerte, Gerätehierarchie) in MQTT-Payload einbetten oder als separate Konfigurations-Topics publizieren. Cloud-Anwendungen können diese Semantik auswerten, ohne direkten OPC UA-Zugriff zu benötigen.
Optionale Erweiterung: OPC UA PubSub
Seit der Spezifikation Part 14 unterstützt OPC UA auch ein Publish/Subscribe-Modell (ähnlich MQTT), das MQTT als Transportprotokoll verwenden kann. Dies ermöglicht, OPC UA-Nachrichten direkt über MQTT zu übertragen und dabei die semantische Information beizubehalten.
Allerdings ist OPC UA PubSub weniger verbreitet als klassisches Client/Server OPC UA und MQTT, daher bleibt die Gateway-basierte Hybridlösung für die meisten KMU praktischer und flexibler.
Schreibe einen Kommentar