Skip to content

What's your UNS maturity level? Get a custom report: Take the UNS Maturity Assessment

MQTT-Tutorial: Eine Einfache Anleitung für den Einstieg in MQTT

by HiveMQ Team
20 min read
Read English Version

Was ist MQTT?

MQTT (ursprünglich „Message Queuing Telemetry Transport“) ist ein Publish/Subscribe-Protokoll, das für die Verbindung von IoT-Geräten entwickelt wurde. Es stellt den allgemeinen Standard für Messaging und Datenaustausch im Ökosystem des Internets der Dinge (IoT) dar. Standardisiert von OASIS und ISO (ISO/IEC 20922:2016) bietet dieses leichte Publish/Subscribe-Protokoll eine skalierbare und zuverlässige Möglichkeit, Geräte über das Internet zu verbinden.

Im Gegensatz zum Anfrage-/Antwort-Paradigma von HTTP funktioniert MQTT ereignisbasiert, so dass Nachrichten an Clients gesendet werden können. Dieser architektonische Ansatz ermöglicht hochskalierbare Lösungen, indem Datenproduzenten und Datenkonsumenten entkoppelt werden, wodurch Abhängigkeiten zwischen ihnen beseitigt werden. Zwei Schlüsselkomponenten zur Herstellung einer MQTT-Verbindung für das Veröffentlichen und Abonnieren von Nachrichten sind MQTT-Clients und MQTT-Broker, wie im folgenden Diagramm dargestellt.

MQTT Publish SubscribeAbbildung: MQTT Publish/Subscribe-Architektur

Vorteile des MQTT-Protokolls

MQTT bietet mehrere wichtige Vorteile:

  1. Leichtgewichtig und effizient: Benötigt minimale Geräte-Ressourcen und Netzwerkbandbreite.

  2. Bidirektionale Kommunikation: Ermöglicht die Kommunikation zwischen Geräten und Servern, unterstützt das Veröffentlichen und Abonnieren. Es ermöglicht auch das Senden von Nachrichten an Gruppen von Geräten.

  3. Skalierbarkeit: Unterstützt Millionen von verbundenen Geräten in IoT/IIoT-Systemen.

  4. Quality of Service (QoS)-Stufen: Gewährleistet eine zuverlässige Nachrichtenübermittlung.

  5. Persistente Sitzungen: Reduziert den Zeitaufwand für erneutes Verbinden über unzuverlässigen Netzwerke.

  6. Sicherheitsfunktionen: Unterstützt TLS-Verschlüsselung für die Vertraulichkeitsstufe von Nachrichten sowie Authentifizierungsprotokolle zur Client-Verifizierung.

Wenn Sie den idealen MQTT-Broker für Ihren IoT- oder Industrie 4.0-Anwendungsfall finden möchten, lesen Sie unseren Artikel MQTT Broker Comparison – Which is the Best for Your IoT Application?.

Von der Automobilindustrie bis zur Energiebranche: Praxisanwendungen und Fallstudien zu MQTT

MQTT findet Anwendung in zahlreichen Branchen und Anwendungsbereichen. Unternehmen wie BMW, Liberty Global, Fortum, Hytera, Awair und Matternet setzen erfolgreich auf MQTT, wie in Fallstudien der Kunden von HiveMQ deutlich zeigen. Diese Unternehmen nutzen MQTT erfolgreich in den Bereichen Automobilindustrie, Telekommunikation, Energie, öffentliche Sicherheit und vernetzte Produkte.

MQTT-Grundlagen: Die wesentlichen Konzepte dieses IoT-Protokolls verstehen

Im Zentrum von MQTT stehen MQTT-Broker und MQTT-Clients. Der MQTT-Broker fungiert als Vermittler zwischen Sendern und Empfängern, indem er Nachrichten an die entsprechenden Empfänger weiterleitet. MQTT-Clients veröffentlichen Nachrichten beim Broker, während andere Clients spezifische Themen (Topics) abonnieren, um diese Nachrichten zu empfangen. Jede MQTT-Nachricht enthält ein Thema, und Clients abonnieren Themen, die für sie relevant sind. Der MQTT-Broker führt eine Abonnentenliste und verwendet diese, um Nachrichten an die entsprechenden Clients zu übermitteln.

Ein MQTT-Broker kann Nachrichten auch für getrennte Clients puffern, um eine zuverlässige Zustellung selbst bei instabilen Netzwerkverbindungen zu gewährleisten. Hierfür unterstützt MQTT drei verschiedene Quality of Service (QoS)-Stufen:

  • 0 (at most once) – Höchstens einmal, keine Bestätigung notwendig

  • 1 (at least once) – Mindestens einmal, Bestätigung erforderlich

  • 2 (exactly once) – Genau einmal, höchste Zuverlässigkeit

Es gibt zwei Versionen der MQTT-Spezifikation: MQTT 3.1.1 und MQTT 5. Während die meisten kommerziellen MQTT-Broker inzwischen MQTT 5 unterstützen, setzen einige IoT-verwaltete Cloud-Dienste weiterhin hauptsächlich auf MQTT 3.1.1. Für neue IoT-Integrationen empfehlen wir dringend die Nutzung von MQTT 5, da es über erweiterte Funktionen verfügt, die auf Stabilität und cloud-native Skalierbarkeit ausgerichtet sind.

MQTT-Clients

Viele Open-Source-Clients sind in verschiedenen Programmiersprachen verfügbar. HiveMQ stellt eigene MQTT-Clients durch die HiveMQ MQTT Client Libraries zur Verfügung, die die Implementierung und den Einsatz von MQTT-Clients vereinfachen. Diese Bibliotheken bieten erstklassige Funktionalität, Leistung, Sicherheit und Zuverlässigkeit. Zu den unterstützten Programmiersprachen gehören unter anderem C#, C++, Java, Websockets, Python und mehr.

Auch Eclipse Paho bietet MQTT-Client-Bibliotheken für Sprachen wie C/C++ und Python an.

MQTT Brokers

Der MQTT-Broker ist das zentrale Element der MQTT-Architektur. Er empfängt alle Nachrichten von Publishern, filtert sie basierend auf den abonnierten Themen und leitet sie an die entsprechenden Subscriber weiter. Der Broker verwaltet auch die Verbindungssitzungen der Clients und stellt sicher, dass Nachrichten gemäß den definierten Quality of Service (QoS)-Stufen geliefert werden.

Beispielimplementierung von MQTT

Um zu veranschaulichen, wie MQTT funktioniert, finden Sie unten ein einfaches Beispiel, das HiveMQ Cloud verwendet. Um diese Implementierung auf einem Live-Cluster zu testen, melden Sie sich für den HiveMQ Cloud Serverless-Plan an, mit dem Sie bis zu 100 IoT-Geräte kostenlos verbinden können. Für die Anmeldung ist keine Angabe von Kreditkartendaten erforderlich.

Als neuer Benutzer werden Sie von HiveMQ Cloud automatisch in den Bereich „Erste Schritte“ innerhalb der Verwaltungsansicht Ihres Clusters weitergeleitet, um ein reibungsloses und unkompliziertes Onboarding-Erlebnis zu gewährleisten. Um den Einstieg zu erleichtern, sehen Sie sich das folgende Anwendungsbeispiel an, das unter Java 11 getestet wurde. Dieses Beispiel ist eine hilfreiche Ressource, um schnell loslegen zu können. Wir haben außerdem ein öffentlich gehostetes Beispiel in unserem sofort einsatzbereiten GitHub-Repository vorbereitet, sowie ein weiteres Beispiel für unseren öffentlichen Broker.

MQTT-Anwendungsbeispiel:

IoT-Anwendung mit Raspberry Pi, MQTT und Temperatursensor

In diesem Beispiel betrachten wir die Verbindung eines Temperatur- und Helligkeitssensors mit einem Raspberry Pi. Dabei nutzen wir die Leistungsfähigkeit von MQTT, um Sensordaten mühelos an einen vorgesehenen MQTT-Broker zu übertragen.

Erfahren Sie, wie ein weiteres Gerät, das als Kontrollzentrum fungiert, die MQTT-Daten problemlos empfangen und verarbeiten kann, wodurch eine effiziente Überwachung und Steuerung Ihres IoT-Ökosystems ermöglicht wird.

MQTT Pub/SubKommunikation zwischen dem Sensor-Client und dem Kontrollzentrum über MQTT

Schritt 1 – Verwenden des Raspberry Pi als MQTT-Client, der mit Sensoren verbunden ist

Beginnen wir Ihre MQTT-Reise mit der Erstellung eines leistungsfähigen MQTT-Clients, der Sensordaten veröffentlicht. In diesem Schritt nutzen wir ein Thermometer, einen Helligkeitssensor und die robuste HiveMQ Cloud als unseren MQTT-Broker.

Sobald Sie sich erfolgreich für HiveMQ Cloud angemeldet haben, gehen Sie zum Abschnitt Details auf der Übersichtsseite Ihres Clusters. Dort finden Sie Ihren eindeutigen Hostnamen. Kopieren Sie diesen Hostnamen und ersetzen Sie ihn im unten angegebenen Code-Snippet.

Dort finden Sie Ihren Hostnamen. Kopieren Sie diesen Hostnamen, um ihn im Beispiel-Code-Snippet unten zu ersetzen.

HiveMQ Cloud Serverless Cluster Details OverviewErstellen von MQTT-Zugangsdaten

Das Erstellen von MQTT-Zugangsdaten ist essenziell, um eine sichere Verbindung zwischen Ihrem MQTT-Client und dem Cluster herzustellen.

Navigieren Sie dazu im HiveMQ Cloud Basic Serverless Cluster zur Registerkarte Access Management und definieren Sie Ihre MQTT-Zugangsdaten. Dies erfolgt durch die Festlegung von Benutzername, Passwort und die Zuweisung spezifischer Berechtigungen für diese Zugangsdaten.

HiveMQ Cloud Cluster Access ManagementStandardmäßig sind alle erstellten Zugangsdaten mit der Rolle Publish und Subscribe ausgestattet. Die Liste der erstellten Zugangsdaten und deren Berechtigungen werden wie im obigen Screenshot angezeigt.
HiveMQ Cloud Serverless Access Management's Permission dashboardWenn Sie die zugewiesene Rolle eines Zugangspaares ändern möchten, können Sie dies während der Erstellung tun. Um die Rolle eines bestehenden Zugangspaares anzupassen, löschen Sie das bestehende Paar und erstellen Sie ein neues. Um die neue Rolle auf Ihre Clients anzuwenden, verbinden Sie diese nach der Aktualisierung der Zugangsdaten erneut.

Sie können außerdem benutzerdefinierte Berechtigungen mit spezifischen Themenfiltern erstellen und diesen Zugangsdaten zuweisen.

Tauchen wir nun in die spannende Welt von MQTT ein. Sobald Sie Ihr HiveMQ Cloud-Cluster erstellt haben, kopieren Sie den oben genannten Hostnamen und ersetzen Sie ihn im Code-Snippet.

public class Sensor {

    public static void main(String[] args) throws InterruptedException {
        final String host = "<your_host>"; // use your host-name, it should look like '<alphanumeric>.s2.eu.hivemq.cloud'
        final String username = "<your_username>"; // your credentials
        final String password = "<your_password>";
   
        // 1. create the client
        final Mqtt5Client client = Mqtt5Client.builder()
                .identifier("sensor-" + getMacAddress()) // use a unique identifier
                .serverHost(host) 
                .automaticReconnectWithDefaultConfig() // the client automatically reconnects
                .serverPort(8883) // this is the port of your cluster, for mqtt it is the default port 8883
                .sslWithDefaultConfig() // establish a secured connection to HiveMQ Cloud using TLS
                .build();
                

        // 2. connect the client
        client.toBlocking().connectWith()
                .simpleAuth() // using authentication, which is required for a secure connection
                .username(username) // use the username and password you just created
                .password(password.getBytes(StandardCharsets.UTF_8))
                .applySimpleAuth()
                .willPublish() // the last message, before the client disconnects
                    .topic("home/will")
                    .payload("sensor gone".getBytes())
                    .applyWillPublish()
                .send();

        // 3. simulate periodic publishing of sensor data
        while (true) {
            client.toBlocking().publishWith()
                    .topic("home/brightness")
                    .payload(getBrightness())
                    .send();

            TimeUnit.MILLISECONDS.sleep(500);

            client.toBlocking().publishWith()
                    .topic("home/temperature")
                    .payload(getTemperature())
                    .send();

            TimeUnit.MILLISECONDS.sleep(500);
        }
    }
        //4. Simulate Temperature and Brightnes sensor data
    private static byte[] getBrightness() {
        // simulate a brightness sensor with values between 1000lux and 10000lux
        final int brightness = ThreadLocalRandom.current().nextInt(1_000, 10_000);
        return (brightness + "lux").getBytes(StandardCharsets.UTF_8);
    }

    private static byte[] getTemperature() {
        // simulate a temperature sensor with values between 20°C and 30°C
        final int temperature = ThreadLocalRandom.current().nextInt(20, 30);
        return (temperature + "°C").getBytes(StandardCharsets.UTF_8);
    }
}

Erklärung des Code-Snippets

Lassen Sie uns das oben bereitgestellte Code-Snippet im Detail betrachten, um seine Funktionalität zu verstehen:

  1. Erstellen des MQTT-Clients:
    Der Code initialisiert den MQTT-Client und stellt sicher, dass eine eindeutige Kennung (Identifier) verwendet wird. Zusätzlich wird eine automatische Wiederverbindung aktiviert, um mögliche Instabilitäten in der Internetverbindung des Sensors abzufangen.

  2. Verbindung zu <your_host> herstellen:
    Der Client verbindet sich mit dem angegebenen Host. Dabei wird auch eine sogenannte Will-Nachricht (Last Will and Testament) konfiguriert. Diese sorgt dafür, dass der Broker automatisch eine Meldung „sensor gone“ veröffentlicht, falls der Sensor die Verbindung verliert.

  3. Periodische Veröffentlichung von simulierten Sensordaten:
    Der Code veröffentlicht regelmäßig simulierte Helligkeits- und Temperaturdaten über die Methoden getBrightness() und getTemperature(). So wird sichergestellt, dass ein stetiger Datenstrom zur weiteren Verarbeitung zur Verfügung steht.

Mit diesem Code-Snippet können Sie selbstständig einen MQTT-Client erstellen, eine stabile Verbindung herstellen und regelmäßig wichtige Sensordaten übertragen.

Schritt 2 – Implementierung des Subscribe-Clients

In diesem entscheidenden Schritt konzentrieren wir uns auf die Erstellung des Subscribe-Clients, der die veröffentlichten Werte der Topics home/temperature und home/brightness empfängt.

Die Implementierung des Subscribe-Clients ermöglicht den Empfang der über MQTT übertragenen Sensordaten. Diese Funktionalität erlaubt es Ihnen, die empfangenen Informationen effizient weiterzuverarbeiten und für verschiedene Anwendungen zu nutzen.

public class ControlCenter {

    public static void main(String[] args) {
        final String host = "<your_host>"; // use your host-name, it should look like '<alphanumeric>.s2.eu.hivemq.cloud'
        final String username = "<your_username>";  // your credentials
        final String password = "<your_password>";
   
        // 1. create the client
        final Mqtt5Client client = Mqtt5Client.builder()
                .identifier("controlcenter-" + getMacAddress()) // use a unique identifier
                .serverHost(host) 
                .automaticReconnectWithDefaultConfig() // the client automatically reconnects
                .serverPort(8883) // this is the port of your cluster, for mqtt it is the default port 8883
                .sslWithDefaultConfig() // establish a secured connection to HiveMQ Cloud using TLS
                .build();

        // 2. connect the client
        client.toBlocking().connectWith()
                .simpleAuth() // using authentication, which is required for a secure connection
                .username(username) // use the username and password you just created
                .password(password.getBytes(StandardCharsets.UTF_8))
                .applySimpleAuth()
                .cleanStart(false)
                .sessionExpiryInterval(TimeUnit.HOURS.toSeconds(1)) // buffer messages
                .send();

        // 3. subscribe and consume messages
        client.toAsync().subscribeWith()
                .topicFilter("home/#")
                .callback(publish -> {
                    System.out.println("Received message on topic " + publish.getTopic() + ": " +
                            new String(publish.getPayloadAsBytes(), StandardCharsets.UTF_8));
                })
                .send();
    }
}

Das oben gezeigte Code-Snippet führt die folgenden Aktionen aus:

  1. Erstellen einer MQTT-Client-Instanz:
    Ähnlich wie der Sensor-Client wird eine MQTT-Client-Instanz erstellt, wobei die Client-ID mit dem Präfix controlcenter- versehen wird.

  2. Verbindung zum angegebenen Host herstellen:
    Der Client verbindet sich mit dem spezifizierten Host (<your_host>). Um Nachrichten zwischenzuspeichern, falls das Kontrollzentrum offline ist, wird ein Session Expiry Interval von 1 Stunde gesetzt.

  3. Abonnieren aller Themen, die mit "home" beginnen:
    Der Client abonniert alle Topics, die mit home beginnen, mithilfe des Multi-Level-Wildcards #. Jede eingehende Nachricht wird zusammen mit dem entsprechenden Topic und Payload ausgegeben. Falls der Sensor die Verbindung verliert, wird das Topic home/will und der Payload „sensor gone“ ausgegeben.

Durch die Implementierung sowohl des Sensor-Clients als auch des Subscribe-Clients entsteht ein nahtloses MQTT-Kommunikationssystem, in dem Sensordaten veröffentlicht und im Kontrollzentrum empfangen werden. Dadurch wird eine effiziente Überwachung und Steuerung der Geräte ermöglicht.

Nächste Schritte

Herzlichen Glückwunsch – Sie haben nun die Grundlage von MQTT erlernt! Dennoch ist die Welt von MQTT sehr umfangreich, und es gibt immer noch mehr zu wissen. Um Ihre Lernreise fortzuführen, empfehlen wir Ihnen folgende Resourcen:

  • Tiefere Einblicke in das MQTT-Protokoll:
    Entdecken Sie unsere Ressourcen, die eine Fülle an technischen Details bieten, um Ihr Verständnis weiter zu vertiefen.

  • Ein Blick auf die MQTT-FAQs und das MQTT-Glossar:
    Hier finden Sie eine prägnante Übersicht der wichtigsten MQTT-Begriffe, die Ihnen helfen, diese schnell und einfach zu verstehen.

  • Lesen Sie die Artikelserien MQTT Essentials und MQTT 5 Essentials:
    Diese Serien bieten tiefere Einblicke in die technischen Details des Protokolls.

  • Unser Blogbeitrag „MQTT Packets: A Comprehensive Guide“:
    Falls Sie verstehen möchten, wie MQTT-Steuerpakete aufgebaut sind, und wie diese zur Entwicklung und zum Testen von MQTT-basierten Systemen genutzt werden können, ist dieser Beitrag ideal für Sie.

  • Für lokal gehostete Lösungen:
    Sie können die Evaluierungslizenz unserer HiveMQ Platform ausprobieren. Das ermöglicht es Ihnen, die Vorteile von HiveMQ auf Ihrer eigenen Infrastruktur zu erleben.

  • HiveMQ MQTT Client und MQTT CLI:
    Diese Tools erleichtern das Testen von MQTT-Systemen und sind einfach zu bedienen.

  • Erfahren Sie mehr über die Sicherheit Ihrer MQTT-Kommunikation:
    Unsere MQTT Security Fundamentals-Serie bietet Ihnen fundierte Einblicke in die Absicherung Ihrer MQTT-Verbindungen.

  • Benötigen Sie spezifische Unterstützung oder Beratung?
    Wenn Sie besondere Anforderungen haben oder Unterstützung bei MQTT und IoT-Messaging benötigen, zögern Sie nicht, HiveMQ zu kontaktieren. Unser Expertenteam verfügt über umfangreiche Erfahrung darin, Unternehmen bei der Entwicklung zuverlässiger und skalierbarer IoT-Anwendungen zu unterstützen. Wir freuen uns darauf, Ihre speziellen Anforderungen zu besprechen und Ihnen maßgeschneiderte Lösungen anzubieten.

Denken Sie daran: MQTT ist ein spannendes und sich ständig weiterentwickelndes Feld – es gibt immer mehr zu entdecken und zu lernen!

Browse the MQTT Series

MQTT Essentials

MQTT 5 Essentials

MQTT Security Fundamentals

FAQs on MQTT

HiveMQ Team

The HiveMQ team loves writing about MQTT, Sparkplug, Unified Namespace (UNS), Industrial IoT protocols, IoT Data Streaming, how to deploy our platform, and more. We focus on industries ranging from energy, to transportation and logistics, to automotive manufacturing. Our experts are here to help, contact us with any questions.

HiveMQ logo
Review HiveMQ on G2