Internet of things und Integration über MQTT


 

Die unsichtbare Kommunikation: MQTT und das Geheimnis hinter IoT-Verbindungen



Das Internet der Dinge (IoT) ist die Verbindung zwischen Internet und physischen Objekten. Das Internet der Dinge umfasst sowohl alltägliche Gegenstände als auch hochmoderne Geräte, die mit Sensoren, Software und Konnektivität ausgestattet sind. Die Daten, die diese Objekte kontinuierlich sammeln, werden analysiert und innerhalb des Netzwerks ausgetauscht. Über übertragene Steuerungsbefehle können vernetzte Objekte untereinander kommunizieren und ferngesteuert werden.

IoT-Geräte sammeln kontinuierlich Informationen über ihre Umgebung, wie Licht, Temperatur, Luftfeuchtigkeit und Maschinen- und Anlagenstatus. Zentrale Server oder Cloud-Plattformen erhalten die Analyse dieser Daten über kabelgebundene oder drahtlose Netzwerke. Die Analyse findet Trends, Vorhersagen und Anomalien. Das Internet der Dinge (IoT) ermöglicht die Automatisierung von Prozessen und die Steuerung von Geräten auf Basis von gesammelten Daten, was zu einer Effizienzsteigerung, Kosteneinsparung und einer verbesserten Benutzererfahrung führt.
 
Smart Homes, Smart Cities, Industrie 4.0, Gesundheitswesen, Landwirtschaft, Transport und andere Bereiche sind nur einige der vielen Anwendungen des Internets der Dinge. Es ermöglicht die Entwicklung neuer Dienstleistungen und Geschäftsmodelle, die auf Echtzeitdaten und Automatisierung basieren. Je mehr Geräte und ein Netzwerk verbunden sind, desto größer sind die Herausforderungen, insbesondere in Bezug auf die Kommunikation und Synchronisation zwischen den Geräten.
 
Die Übertragung und Synchronisation von Nachrichten zwischen Geräten erinnert an Integrationskomponenten wie den Enterprise Service Bus (ESB), der eine wichtige Komponente der SOA-Architektur ist. Wenn es jedoch um das Internet der Dinge geht, ist das Netzwerk im weitesten Sinne dezentralisiert, und die vernetzten Geräte verfügen nicht über Ressourcen wie ein zentraler Server, der eine große Anzahl von Nachrichten an ihr Ziel schickt. Der ESB stellt auch zahlreiche zusätzliche Services zur Verfügung, und die Konfiguration der angebundenen Services am ESB ist in der Regel zentralisiert, was einen übersichtlichen Blick auf die beteiligten externen Systeme ermöglicht. Das Internet der Dinge kann jedoch Tausende von kleinen Geräten miteinander verbinden. Die damit verbundenen Herausforderungen sind offensichtlich, wenn man sich einen riesigen Schwarm von fliegenden Robotern vorstellt, der in Formation fliegt, sich fernsteuert und synchronisiert.
 

Insekten Roboter


Das Internet der Dinge kann als eine Art Verbindung zwischen diesen Geräten betrachtet werden. Diese Komponente hat einige Ähnlichkeiten mit dem Enterprise Service Bus (ESB), aber es gibt wichtige Unterschiede. MQTT ist eine kleine, dezentrale Messaging-Komponente, die das Publish/Subscribe-Modell verwendet und darauf abzielt, Nachrichten mit hoher Effizienz und geringer Latenz zu übertragen. Im Gegensatz zum ESB, der eine Vielzahl von Protokollen und Konnektoren zur Integration unterstützt, konzentriert sich MQTT ausschließlich auf sein eigenes Protokoll. Beide haben unterschiedliche Anwendungsbereiche, da der ESB eher für die Integration von Unternehmensanwendungen in komplexeren Umgebungen eingesetzt wird.

Da MQTT das Publish/Subscribe-Modell verwendet, ähnelt es auch dem Apache Kafka Messaging System. Trotzdem haben sie unterschiedliche Anwendungen.

Das Nachrichtenübertragungsprotokoll MQTT wurde ursprünglich für die Kommunikation in Netzwerken mit begrenzter Bandbreite und schlechter Verbindung entwickelt. IoT-Anwendungen mit hoher Skalierbarkeit verwenden es häufig. Apache Kafka hingegen ist eine verteilte Streaming-Plattform, die entwickelt wurde, um Datenströme in Echtzeit zu verarbeiten. Kafka ist für eine hohe Durchsatzrate und Skalierbarkeit konzipiert und ist ideal für die Verarbeitung großer Datenmengen in Echtzeit. Kafka speichert Nachrichten in Themen und ermöglicht das Abonnieren, Veröffentlichen und Verarbeiten von Nachrichtenströmen.

Wir sehen, dass MQTT bei IoT-Szenarien mit geringerer Bandbreite besser funktioniert als Apache Kafka. Kafka hingegen wurde entwickelt, um große Datenmengen und Datenströme in Echtzeit in großen Unternehmen zu verarbeiten. Während Kafka entwickelt wurde, um horizontal skalierbar zu sein und große Datenmengen effizient zu verarbeiten, ist MQTT auf einfaches Publish/Subscribe-Messaging beschränkt. MQTT kann nicht skaliert werden. Während MQTT normalerweise keine Nachrichten länger speichert, als sie benötigt werden, speichert Kafka Nachrichten in Topics, sodass sie über einen längeren Zeitraum verfügbar sind.

 

Dies zeigt die Anwendungsmöglichkeiten des Internets der Dinge. Wenn es um hardwarenahe Programmierung geht, ist die Hochsprache C++ besonders geeignet. Die Ausführung in Umgebungen mit begrenzten Kapazitäten erfordert weniger Ressourcen und Konfiguration. MQTT kann gut mit C++ kombiniert und von dieser Sprache aus verwendet werden.

Die Integration und Verwendung von MQTT in C++ ist üblich. Durch die Verbindung der entsprechenden Bibliotheken werden Funktionen bereitgestellt, die für die Öffnung und Lesbarkeit von Nachrichten verantwortlich sind. Das folgende kleine Beispiel von C++-Code zeigt die Veröffentlichung einer Nachricht, die Verbreitung einer Nachricht und das Lesen einer Nachricht aus einem Thema mithilfe der Vallback-Funktion. Es gibt einen Eindruck davon, wie MQTT verwendet wird und wie es im Alltag funktioniert.

 
 
 
MQTT Client
------------------
 
#include <iostream>
#include <mqtt/async_client.h>

int main() {
    // Initialisierung des MQTT-Clients
    mqtt::async_client client("tcp://localhost:1883", "cpp-client");

    // Verbindung zum MQTT-Broker herstellen
    mqtt::connect_options connOpts;
    client.connect(connOpts);

    // Nachricht veröffentlichen
    mqtt::message_ptr pubmsg = mqtt::make_message("sensor/temperatur", "28.5°C");
    pubmsg->set_qos(0);
    client.publish(pubmsg);

    // Auf eingehende Nachrichten warten (Hier müsste ein Message-Callback implementiert werden)

    // Verbindung trennen
    client.disconnect();
    
    return 0;
}
 
 
Callback-Handler Funktion
-----------------------------------
#include <iostream>
#include <string>

// Die Callback-Handler-Funktion wird aufgerufen, wenn eine Nachricht empfangen wird.
void messageCallback(const std::string& topic, const std::string& message) {
    std::cout << "Nachricht auf Thema \"" << topic << "\": " << message << std::endl;
    // Hier können Sie die empfangene Nachricht weiter verarbeiten.
}

int main() {
    // Annahme: Sie haben bereits eine MQTT-Verbindung eingerichtet und abonniert ein Thema.
    
    // Simulieren Sie den Empfang einer MQTT-Nachricht und rufen Sie den Callback auf.
    std::string empfangenesThema = "sensor/temperatur";
    std::string empfangeneNachricht = "25.5°C";
    
    // Rufen Sie den Callback mit den empfangenen Daten auf.
    messageCallback(empfangenesThema, empfangeneNachricht);