Architektur
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.
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.
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.
#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;
}
#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);