MQTT (Abkürzung für Message Queuing Telemetry Transport) ist ein Datenaustauschprotokoll. Dabei tauschen zwei Geräte (dem "Client") über einen sogenannten Broker Daten miteinander aus. Ein Client kann dabei Daten an einen Broker senden („publish“ – wir übersetzen dies mit veröffentlichen) und ebenfalls Daten von einem Broker erhalten („subscribe“ – wir übersetzen dies mit abonnieren). Beim Veröffentlichen gibt der Sender-Client neben der Nachricht (dem "Payload") ein "Topic" (wir übersetzen dies mit Kanal) an, auf welches er es veröffentlichen möchte. Der Empfänger-Client abonniert diesen Kanal und bekommt die Nachricht aus diesem Kanal vom Broker weitergereicht.
Zu besseren Verständlichkeit haben wir das anhand eines Paketversands illustriert. Zwei Paketboten veröffentlichen auf den Topics „Grün“ bzw. „Rot“ ihre Pakete. Diese werden alle über den zentralen Broker versandt. Dieser sortiert die Pakete und verteilt diese. Zwei weitere Clients – zwei Warenhäuser – haben jeweils das rote bzw. grüne Topic abonniert. Also verteilt der Broker nur die jeweiligen Pakete an die Warenhäuser. Obwohl also beim Broker die Pakete bunt gemischt waren, kommen diese farbengetrennt bei den Clients an. Das Paket steht dabei für eine Nachricht. Der Paketinhalt steht für das sogenannte Payload, also die zu übermittelnden Nutzdaten.
In MQTT werden verschiedene Begrifflichkeiten verwendet. In der folgenden Liste haben wir die wichtigsten erklärt:
Wildcards sind spezielle Zeichen, die verwendet werden, um mehrere Topics zu abonnieren oder zu filtern. Es gibt zwei Arten von Wildcards in MQTT:
QoS ist eine Vereinbarung zwischen dem Sender und Empfänger einer Nachricht in Bezug auf das Garantieren der Nachrichtenübermittlung. Es existieren drei verschiedene Level in MQTT:
Beide Kommunikationsarten (Publish/Subscribe) zum und vom Broker müssen berücksichtigt und getrennt voneinander betrachtet werden. Das QoS-Level, welches ein Client beim Publishen einer Nachricht verwendet, wird vom jeweiligen Client gesetzt. Wenn der Broker nun die Nachricht an einen Client weiterleitet, der entsprechend das Topic abonniert hat, wird das QoS-Level vom Subscriber verwendet, welches beim Herstellen des Abonnement angegeben wurde. Dies bedeutet, dass ein QoS-Level, welches vom Publisher vielleicht mit 2 angegeben wurde, vom Subscriber mit 0 „überschrieben“ werden kann.
Im Protokoll können verschiedene Sicherheitsmechanismen implementiert werden. Je nach Implementierung ist der Umfang der Sicherheitseinstellungen eingeschränkt oder vollständig implementiert. Die verschiedenen Möglichkeiten können auf die Protokollteilnehmer (Broker, Client sowie Netzwerk) verteilt werden.
Auf Netzwerkebene kann der Zugriff auf MQTT-Broker auf autorisierte Clients beschränkt werden, indem Netzwerksegmente und Firewalls entsprechend konfiguriert werden.
Hinweis: Die Sicherheitsmöglichkeiten und Bedrohungen ändern sich mit der Zeit. Eine periodische Überprüfung der verwendeten Protokolle bietet sich an.
Folgende Argumente sprechen für die Verwendung des Protokolls
Es gibt jedoch auch Nachteile, die mit diesem Protokoll verbunden sind:
Um Daten von einem MQTT-Broker zu abonnieren, existieren diverse Python-Skripte. Das folgende Skript verbindet sich mit einem Broker und gibt die Daten auf der Kommandozeile aus. Dazu verbindet sich das Skript mit einem definierten Broker auf Port 1883. Dort abonniert das Skript das Topic „sensoren/temperatur“ und gibt diese bei Nachrichtenempfang aus. Als Beispiel Bibliothek findet die MQTT Bibliothek von Paho Anwendung.
import paho.mqtt.client as mqtt
# Callback-Funktion, die aufgerufen wird, wenn eine Nachricht empfangen wird
def on_message(client, userdata, message):
print(f"Empfangene Nachricht: {message.payload.decode()}")
# MQTT-Client erstellen
client = mqtt.Client()
# Callback-Funktion für Nachrichtenregistrierung festlegen
client.on_message = on_message
# Verbindung zum Broker herstellen (Broker-IP-Adresse oder Hostname angeben)
broker_address = "broker.example.com"
client.connect(broker_address, port=1883)
# Thema, das abonniert werden soll
topic = "sensoren/temperatur"
# Thema abonnieren
client.subscribe(topic)
# Auf eingehende Nachrichten warten
client.loop_forever()
Das DatenBerg Gateway hat MQTT-Funktionalitäten standardmäßig integriert. Zur Weiterverarbeitung kann direkt ein Python-Skript eingebunden werden. So kann die z.B. die Umrechnung von Rohsignalen vom Binär- ins Dezimalsystem direkt auf dem Gateway stattfinden. Das Gateway sendet die Daten dann verschlüsselt an die smartPLAZA. Falls keine Verbindung zum Server möglich ist, speichert das Gateway die Daten lokal ab und puffert diese. Somit ist ein Sicherheitspuffer vorhanden. In der smartPLAZA werden die Daten dann in einer Datenbank gespeichert und können visualisiert, auf Grenzwerte überwacht oder für weitere Berechnungen verwendet werden.
IO-Link als standardisiertes Kommunikationsprotokoll setzt sich in der Industrie immer mehr durch. Damit können Sensoren und Aktoren nach dem Plug & Play-Prinzip an eine Steuerung, den sogenannten IO-Link-Master, angeschlossen werden. Die Konfigurationsdateien der einzelnen Geräte stehen als sogenannte IODD-Dateien online zur Verfügung. Hersteller wie IFM mit der DataLine oder Pepperl & Fuchs mit den IEC-Geräten bieten auf ihren IO-Link-Mastern direkt die Funktionalität zur MQTT-Kommunikation an. Damit kann der Master bidirektional Daten an einen Broker senden und von diesem empfangen. Durch den modularen IO-Link Ansatz entsteht auf einfache Weise ein kabelbasiertes Netzwerk. Die Kommunikation vom Sensor zum Master erfolgt über das IO-Link-Protokoll und die Kommunikation der Sensordaten findet über MQTT statt. Dies kann ohne Programmierung, sondern nur mit Webapplikationen erfolgen.
Neben der dezentralen Sensorik können auch Steuerungen von MQTT profitieren. Für folgende Hersteller haben wir die MQTT-Funktionalitäten exemplarisch recherchiert:
Bei Siemens gibt es den Funktionsbaustein „LMQTT“. Dieser ist für die Steuerungen S7-1500 und S7-1200 konzipiert und im TIA-Portal verfügbar. Sowohl Veröffentlichungs- als auch Abonnierfunktionien sind umgesetzt. Als Sicherheitsfeature wird TLS-Verschlüsselung angeboten. Mehr dazu hier in der offiziellen Siemensanleitung. In der Beckhoff-Welt gibt es auch einen vordefinierten Funktionsbaustein namens „FB_IotMqttClient“ für die MQTT-Kommunikation. Der Baustein ist in der Bibliothek „Tc3_IotBase“ enthalten. Außerdem gibt es ein Modul für den „Last Will“ des Clients und ein weiteres Modul für die TLS-Konfiguration. Hier gibt es eine Anleitung von Beckhoff zur Konfiguration. Auch von Bachmann Electronic gibt es eine vorgefertigte Software für die MQTT-Kommunikation in der M1-Steuerungswelt. Die Einbindung erfolgt hier über die SPS-Bausteinbibliothek oder als C/C++ Headerdatei. Für IEC 61331-3 API mit Headerdatei für C/C++. Weitere Informationen finden Sie hier.
In einem großen Logistikzentrum, das eine große Anzahl dezentraler Motoren für verschiedene Betriebsaufgaben betreibt, stand das Problem der manuellen Überwachung im Vordergrund. Die vorhandene Steuerungstechnik ermöglichte keine Überwachung der Vibrationen und Laufzeiten der Motoren, was zu ineffizienten Wartungsprozessen, unerwarteten Ausfällen und hohen Wartungskosten führte. Die fehlende Möglichkeit, den Zustand der Motoren frühzeitig zu erkennen, beeinträchtigte die Betriebskontinuität und erhöhte die Ausfallzeiten.
Um dieses Problem zu lösen, entschied sich das Logistikzentrum für eine innovative Lösung: die Implementierung von drahtlosen Sensor Gateways mit integrierten Vibrationssensoren. Diese Sensoren sind an den Motoren angebracht und sammeln kontinuierlich Daten über die Vibrationen an den Motoren. Die gesammelten Daten werden über ein WLAN-Netzwerk an einen zentralen MQTT-Broker übertragen. Die MQTT-Technologie ermöglichte eine effiziente, zuverlässige und echtzeitfähige Kommunikation zwischen den Sensoren und dem Broker.
Die erfassten Daten sind mit Hilfe einer optimierten Topic-Struktur intelligent kategorisiert und organisiert. Diese Topic-Struktur ermöglichte es, die Sensorsignale den entsprechenden Motoren zuzuordnen und einen klaren Überblick über den Zustand jedes Motors zu erhalten. Das Logistikzentrum nutzte MQTT, um die Daten an die DatenBerg smartPLAZA zu senden, die als zentrale Plattform für die Verwaltung und Analyse von IoT-Daten dient. Hier findet die automatisierte Analyse der Sensordaten statt.
Durch die erfolgreiche Implementierung dieser Lösung konnte das Logistikzentrum mehrere positive Ergebnisse erzielen:
Die erfolgreiche Implementierung von MQTT zur Überwachung und Analyse von Motoren führte zu einer deutlichen Verbesserung der Betriebseffizienz, der Wartung und der Betriebskontinuität im Logistikzentrum. Durch die intelligente Kombination von drahtlosen Sensor-Gateways, MQTT-Kommunikation und prädiktiver Analyse konnte das Logistikzentrum Ausfälle minimieren, Ressourcen optimieren und letztendlich die Gesamtbetriebskosten senken.
MQTT steht für Message Queuing Telemetry Transport und ist ein Protokoll zu Datenübertragung.
Es existieren verschiedene MQTT-Broker, die sich hinsichtlich Stabilität, Skalierbarkeit und Funktionsumfang unterscheiden. Mosquitto ist eine verbreitete Open-Source Implementation. Weitere Broker sind unter anderem: Hive MQ, Eclipse Mosquitto, VerneMQ, ActiveMQ oder EMQ X.
Maximal 64kB können mit einer Nachricht übertragen werden.
MQTT wurde erstmals in den späten 1990er Jahren von Andy Stanford Clark und Arlen Nipper entwickelt. 2010 wurde der Standard von IBM als Open-Source-Projekt veröffentlicht und der Quellcode der Eclipse Foundation übergeben. Die aktuelle Version MQTT 5.0 wurde 2019 veröffentlicht.
QoS steht für Quality of Service. Die QoS-Stufen (0, 1, 2) beeinflussen die Nachrichtenübermittlung und -bestätigung. Höhere QoS-Stufen bieten mehr Sicherheit in Bezug auf die Nachrichtenzustellung, erfordern jedoch auch mehr Overhead.