IoT Worlds
MQTT
BlogSchlaues Gerät

Die Bedeutung von MQTT, IoT-Geräte mit Webanwendungen zu verbinden

Bei all den verfügbaren Messaging-Protokollen kann es schwierig sein, nur eines auszuwählen. Und bei so vielen Optionen ist es allzu leicht, sich in einer Situation wiederzufinden, in der Sie eine ausprobieren, die für Sie oder Ihr Team nicht funktioniert. Mqtt ist ein leichtgewichtiges Protokoll, das nur Clients und Broker erfordert, daher ist es perfekt für Situationen, in denen Sie keinen Ärger haben möchten. In diesem Artikel wird untersucht, wozu dieses Protokoll fähig ist und wie es diese Dinge erreicht!

Was ist MQTT?

Mqtt ist ein leichtgewichtiges Messaging-Protokoll, das nur Clients und Broker benötigt. Es ist perfekt für Situationen, in denen Sie keine Hektik oder Aufregung wünschen, weil es so wenig von Ihnen verlangt.

Was ist ein Messaging-Protokoll?

Ein Messaging-Protokoll ist ein Satz von Regeln, die verwendet werden, um Anwendungen auf verschiedenen Computern die Kommunikation zu ermöglichen. Mqtt wurde speziell für das Internet der Dinge (IoT) entwickelt. Bei einer so großen Auswahl an anderen verfügbaren Protokollen mag es seltsam erscheinen, für diesen Zweck ein weiteres zu erstellen. Da jedoch so viele Geräte und Dienste auf diesem Feld basieren, werden wir im Laufe der Zeit wahrscheinlich immer mehr davon sehen!

Was ist so toll an MQTT?

Mqtt ist wirklich einzigartig, weil es Ihnen so viel mit so gut wie nichts bietet. Sie benötigen keinen dedizierten Server oder Forwarder, wie es bei vielen anderen Protokollen der Fall ist, was auch keine Infrastrukturprobleme bedeutet. Alles, was Sie brauchen, ist ein bereits vorhandener Broker und eine beliebige Hardware mit Internetanschluss. Dank der Qualität seiner Arbeit und seiner Leichtigkeit wird dieses Protokoll immer beliebter. Da es Open Source und kostenlos zu verwenden ist, können Sie ganz einfach loslegen, ohne Gebühren oder Abonnementkosten bezahlen zu müssen. Und mit der in die MQTT-Bibliothek für Arduino integrierten Broker-Unterstützung sind wir gespannt, welche großartigen Produkte auf uns zukommen werden.

Was sind die Funktionen von MQTT?

Mqtt ist eines der besten Beispiele für ein einfaches, leichtgewichtiges Messaging-Protokoll, das Sie finden werden. Sein Hauptverkaufsargument ist die Benutzerfreundlichkeit – jedes Gerät mit Internetverbindung kann die Vorteile dieses Protokolls nutzen. Aber dieses Protokoll bietet mehr als nur Benutzerfreundlichkeit. Lassen Sie uns herausfinden, was Sie sonst noch davon erwarten können!

Beispiele für die Verwendung von MQTT

A. IoT-Geräte in einer Fabrik zur Steuerung von Pumpen und Ventilen

B. Eine Wetterstation mit einem Sensor, der an eine Datenbank in der Cloud berichtet

C. Ein Alarmsystem, das meldet, wenn sich Türen öffnen oder schließen

D. Einige Lichter in einem Büro gehen an, wenn eine Bewegung erkannt wird

1. Was ist MQTT und welche Funktionen bietet es?

MQTT steht für Message Queuing Telemetry Transport, was vielleicht kompliziert klingt, aber einfach bedeutet, dass IoT-Geräte über das Internet miteinander kommunizieren können. Es läuft auf TCP/IP wie HTTP, SMTP usw., aber im Gegensatz zu HTTP, das für die Kommunikation über das Internet dient, wird MQTT bei Geräten verwendet, die über ein Netzwerk, normalerweise ein IP-Netzwerk, miteinander verbunden sind. Es wird am häufigsten im IoT mit eingebetteten Geräten mit geringem Stromverbrauch verwendet, die sich mit Dingen wie Raspberry Pi oder Arduino-Boards verbinden.

2. Wie funktioniert es?

Es funktioniert ein bisschen wie E-Mail. Ein IoT-Gerät veröffentlicht eine Nachricht zu einem Thema. Es ist, als würde man jemandem eine E-Mail schicken, aber anstelle einer Person ist es ein Themenname. Die Nachricht kann bis zu 2 KB Daten enthalten und wird als Paket gesendet.

Ein zweiter MQTT-Teilnehmer lauscht auf Pakete mit seiner eigenen eindeutigen ID oder Client-ID. Es macht dann etwas mit der Nachricht. Es ist, als ob jemand, der eine E-Mail erhält, etwas damit macht; gelesen, woanders hingeschickt usw.

MQTT hat ein Quality of Service (QoS) Level, was bedeutet, dass es verschiedene Prioritätslevel für Nachrichten geben kann. Die QoS-Stufe wird vom Client eingestellt und jedes gesendete Paket hat diese Prioritätsstufe.

3. Vorteile von MQTT

Es ist leicht, läuft auf TCP/IP, hat weniger Overhead als HTTP

Nachrichten werden in einer Warteschlange gespeichert, bis sie an ihr Zielgerät gesendet werden können

Es verfügt über eine integrierte Unterstützung für die Wiederverbindung

Jeder Client kann seine eigene Sicherheitskonfiguration für die Authentifizierung und Verschlüsselung haben

QoS ermöglicht es den verschiedenen Nachrichtentypen, unterschiedliche Prioritätsstufen zu haben

4. Anwendungen von MQTT

Einige Beispiele für den Einsatz in der realen Welt sind die M2M Alliance, ein Projekt, das darauf abzielt, „Dinge“ mit einer sicheren Plattform für den Datentransfer zwischen Geräten zu verbinden. Ein weiterer Anwendungsfall ist das CEPH-Projekt. Dies ist ein Cloud-Speichersystem, das Dateien gleichzeitig speichern und für mehrere Benutzer freigeben kann. Es verwendet MQTT, um den verteilten Zugriff durch Verschlüsselung von Daten zu sichern, wodurch sie zwischen IoT-Geräten über verschiedene Gateways übertragen werden können, ohne sich um die Datensicherheit kümmern zu müssen.

5. Erste Schritte mit MQTT

Das erste, was man braucht, ist ein MQTT-Client; Dies ist die Anwendung, die Nachrichten sendet und empfängt. Die Raspberry Pi Foundation bietet eine Anleitung für die ersten Schritte mit MQTT auf Ihrem Pi-Gerät. Es gibt auch andere Anleitungen, wie diese von Hackster, die Ihnen den Code zur Ausführung in der Programmiersprache Python geben.

Die besten MQTT-Onlinekurse

  1. MQTT beherrschen
  2. Master-MQTT-Protokoll
  3. MQTT-Client-Android-App entwickeln
  4. MQTT-Meisterklasse
  5. Beherrschen des MQTT-Protokolls: Ein Leitfaden für Anfänger bis Fortgeschrittene
  6. IoT: MQTT mit Adafruit, App Inventor und ESP8266
  7. MQTT Nodemcu (ESP8266) mit Nodered, Wifi und Bluetooth

TLS vs. SSL zum Aufbau eines MQTT-Brokers

Vorteile der Verwendung von TLS:

-Sicherheit: TLS bietet eine sichere Verbindung zwischen dem Client und dem Broker. Dies trägt zum Schutz vor Man-in-the-Middle-Angriffen und Abhören bei.

-Authentifizierung: TLS bietet eine Authentifizierung des Brokers und des Clients und trägt so dazu bei, dass nur autorisierte Clients eine Verbindung zum Broker herstellen können.

-Verschlüsselung: TLS bietet eine Verschlüsselung der Daten zwischen dem Kunden und dem Broker und trägt so dazu bei, Informationen vor dem Einsehen durch Unbefugte zu schützen.

Nachteile der Verwendung von TLS:

-Leistung: TLS kann der Kommunikation Overhead hinzufügen, was die Leistung reduzieren kann.

-Zertifikate: Um TLS nutzen zu können, benötigen Sie sowohl für den Client als auch für den Broker Zertifikate. Diese Zertifikate können schwer zu erhalten sein und die Verwendung kann teuer sein, was die Kosten für die Verwendung von TLS erhöhen kann.

Vorteile der Verwendung von SSL:

-Sicherheit: SSL bietet eine sichere Verbindung zwischen dem Client und dem Broker, genau wie TLS. Es schützt auch vor Man-in-the-Middle-Angriffen und Abhören.

-Zertifikate: Da SSL auf TLS aufbaut, können Sie dieselben Zertifikate zum Verschlüsseln des Datenverkehrs verwenden.

Nachteile der Verwendung von SSL:

-Leistung: Die Verschlüsselung zwischen Client und Broker erhöht den Overhead bei der Kommunikation, was die Leistung verringert.

-Speichernutzung: Das SSL-Protokoll verwendet mehr Speicher als andere Protokolle, da es eine Verschlüsselungs-/Entschlüsselungssitzung mit dem Broker aufrechterhält.

-Versionsprobleme: SSL ist ein älteres Protokoll und unterstützt einige der von TLS bereitgestellten Funktionen nicht (zB neuere Verschlüsselungen).

Wie Sie sehen, bieten sowohl TLS als auch SSL Sicherheit, Authentifizierung und Verschlüsselung für die Kommunikation zwischen Clients und Brokern. sie tun dies jedoch auf etwas andere Weise. Es gibt keinen eindeutigen Gewinner bei der Entscheidung, ob Sie TLS oder SSL für Ihren MQTT-Broker verwenden sollten, da die Entscheidung davon abhängt, was Sie von Ihrer Infrastruktur benötigen und wie viel Zeit/Geld Ihnen zur Verfügung steht.

Zusammenfassend würde ich sagen, dass es je nach Projektbedarf eine richtige Antwort gibt. In diesem Fall ist es besser, TLS zu verwenden, da es mehr Vorteile bietet als SSL.

Die 5 wichtigsten Gründe für die Verwendung des MQTT-Protokolls in Ihren IoT-Projekten

MQTT ist ein Machine-to-Machine (M2M) Messaging-Protokoll, das für ressourcenbeschränkte Geräte entwickelt wurde und die Geräte mit der Cloud verbindet.

1. Es ist leichtgewichtig und einfach zu verwenden: MQTT ist ein Publish/Subscribe-Messaging-Protokoll, das so konzipiert ist, dass es leichtgewichtig und einfach zu verwenden ist.

2. Es hat einen geringen Platzbedarf: MQTT verwendet etwa 1/10 der Bandbreite von HTTP, was es ideal für IoT-Anwendungen mit begrenzten Netzwerkressourcen macht.

3. Es unterstützt QoS: MQTT unterstützt Quality of Service (QoS), die die Zustellung von Nachrichten mit der gewünschten Latenz oder Qualität garantiert.

4. Es kann in jedem Netzwerk ausgeführt werden: MQTT ist ein plattformübergreifendes Protokoll, das in WiFi-, Bluetooth Low Energy (BLE)- oder 2G/3G-Mobilfunknetzen ausgeführt werden kann.

5. Es stehen mehrere Clientbibliotheken in vielen Programmiersprachen zur Verfügung: Es gibt Clientbibliotheken für C, C++, JavaScript, Arduino IDE, Python und Java.

Wie richte ich einen MQTT-Broker mit einem Docker-Container auf Ihrem PC oder einem VPS-Server ein?

MQTT ist ein Machine-to-Machine (M2M)/„IoT“-Messaging-Protokoll, das als extrem leichtgewichtiger Publish/Subscribe-Messaging-Transport konzipiert ist. Es ist nützlich für Verbindungen mit entfernten Standorten, bei denen ein kleiner Code-Footprint erforderlich ist und/oder die Netzwerkbandbreite knapp ist.

In diesem Artikel zeigen wir Ihnen, wie Sie einen MQTT-Broker mit einem Docker-Container auf Ihrem PC oder einem VPS-Server einrichten.

Docker ist eine Containerisierungs-Engine, die Ihnen hilft, Ihre Anwendungen mit all ihren Abhängigkeiten einfach bereitzustellen. Es bietet eine konsistente Umgebung auf jedem Docker-Host, spart Zeit und verbessert die Portabilität Ihres Codes zwischen verschiedenen Linux-Distributionen. Wenn beispielsweise eine Anwendung von einer großen Anzahl von Systembibliotheken oder einigen seltenen Bibliotheksversionen abhängt und daher nicht leicht portierbar ist, können Sie alles einfach zusammenfassen und als Docker-Container bereitstellen.

1) Docker für Windows/Mac installieren

Docker ist für Benutzer von Microsoft Windows und Mac OS X verfügbar. Die entsprechende Version können Sie hier herunterladen: https://docs.docker.com/docker-for-windows/install/.

2) Docker-compose auf Ihrem Host installieren

Um unseren hausgemachten MQTT-Broker einfach bereitzustellen, verwenden wir das Docker-Compose-Tool. Sie können Docker-Anwendungen mit mehreren Containern mithilfe einer einfachen YAML-Datei definieren und ausführen. Weitere Informationen zu docker-compose finden Sie hier: https://docs.docker.com/compose/.

Sie können das docker-compose-Tool hier herunterladen: https://github.com/docker/compose/releases/. Sobald dies erledigt ist, sollten Sie in der Lage sein, den Befehl ‚docker-compose‘ in Ihrem Terminal auszuführen und nach seiner Version zu suchen oder einen seiner Unterbefehle zu verwenden.

Grundlegende Docker-Terminologie für diesen Artikel:

1) „Docker-Container“ ist der Prozess, der im Hintergrund ausgeführt wird, wenn Sie ein Image mit dem Befehl docker run ausführen. Eine laufende Instanz eines Images wird in Bezug auf ihre Erstellung beim Docker-Build als „Container“ bezeichnet.

2) „Docker-Image“ ist eine schreibgeschützte Vorlage mit Anweisungen zum Erstellen eines Docker-Containers. Es besteht aus einer Reihe von Dateisystemebenen, die verschiedene Zustände des endgültigen Bildes darstellen, das wir erstellen möchten

3) Der Befehl copy at docker build erstellt ein Image, indem er seine Beschreibung aus einer Dockerfile im aktuellen Arbeitsverzeichnis liest und dann den entsprechenden Befehl in einer neuen Ebene über dem aktuellen Image ausführt.

4) „Volumes“ sind Ordner, mit denen Sie lokale Ordner auf Ihrem Host-Rechner Verzeichnissen in Ihren Docker-Containern zuordnen können. Dies ist nützlich, wenn Sie beispielsweise einige Daten zu Ihren Container- oder Konfigurationsdateien speichern möchten. Sie können ein Volume erstellen, indem Sie den Pfad des Ordners von Ihrem Hostsystem mit docker run angeben.

Die YAML-Datei ist eine Konfigurationsdatei, die Informationen zum Verbinden mit einer externen Datenbank, MQTT-Server usw. enthält, sowie Informationen darüber, wie und welche Container erstellt werden sollen. Wir werden im nächsten Abschnitt eine YAML-Datei erstellen, um unseren Broker zu konfigurieren.

3) Erstellen der YAML-Datei zum Konfigurieren Ihres MQTT-Brokers

YAML-Dateien bestehen normalerweise aus mehreren Schlüssel-Wert-Paaren, die durch Doppelpunkte („:“) verbunden sind. Sie können hier mehr über YAML erfahren: https://en.wikipedia.org/wiki/YAML#Syntax.

In unserem Fall erstellen wir eine YAML-Datei, um den MQTT-Broker wie folgt zu konfigurieren:

Version: „3“

In diesem Abschnitt des YAML definieren wir den Namen des Containers als „homer-mqtt“ und geben das Image an, das verwendet werden soll, um es zu erstellen. In diesem Fall wählen wir das Bild „davidtgoldblatt/homer-mqtt“ von Docker Hub hier aus: https://hub.docker.com/_/homer-mqtt/.

In unserer YAML-Datei deklarieren wir auch einige Bände wie folgt:

Bände:

– /var/run/docker.sock:/var/run/docker.sock

Diese Volumes ermöglichen uns einen dauerhaften Speicher für den Docker-Container, sodass unsere Einstellungen über Server-Neustarts und -Abstürze hinweg bestehen bleiben. Weitere Informationen zu Volumes finden Sie hier: https://docs.docker.com/engine/userguide/dockervolumes/.

Um unsere Datenbankdetails anzugeben, fügen wir einen Abschnitt „db_addresses“ mit den folgenden Einträgen hinzu:

db_adressen:

– „host=172.17.0.2 port=3306 user=homer dbname=homer“

Im obigen Beispiel geben wir einen Host und einen Port für unsere Datenbankinstanz an. Beachten Sie, dass Sie bei der Angabe eines Benutzers ein „@“-Symbol vor dem Benutzernamen einfügen müssen. Dies liegt daran, dass der Benutzername in Unix-Systemen sowohl aus Buchstaben als auch aus Zahlen besteht. Wenn Sie das weglassen, beschwert sich Docker mit Fehlern wie diesen:

Sonderzeichen wie @ oder * müssen maskiert werden

Um unsere Datenbankanmeldeinformationen anzugeben, fügen wir einen Abschnitt „database_password“ wie folgt hinzu:

database_password: „homerun1“

Im obigen Beispiel sollten Sie das Passwort Ihrer Wahl verwenden. Falls Sie zum ersten Mal ein Datenbankpasswort einrichten möchten, finden Sie hier unsere Anleitung zum Erstellen eines neuen Root-Benutzers ohne Passwort: https://homer-mqtt.readthedocs.io/en/latest/configure_database_and_create_new_root_user .html

Um unsere MQTT-Serverdetails anzugeben, fügen wir einen Abschnitt „mqtt_server“ mit den folgenden Einträgen hinzu:

mqtt_server:

– Name: mqtt-Host: 172.17.0.1 Port: 8883 Benutzername: „homerun“ Passwort: „homerun1“

Im obigen Beispiel führen wir den Broker auf Port 8883 aus und verwenden den Benutzernamen „homerun“ und das Passwort „homerun1“, die wir in unserer Datenbank erstellt haben.

4) Führen Sie Ihren MQTT-Broker mit Docker aus

In diesem Schritt erstellen wir einen Docker-Container aus unserer YAML-Datei und führen ihn aus.

Wechseln Sie dazu in das Verzeichnis, in dem Sie die YAML-Datei haben, und führen Sie „docker-compose up“ wie folgt aus:

$ docker-compose up

Dieser Befehl erstellt einen neuen Docker-Container basierend auf der Beschreibung in Ihrer YAML-Datei und startet ihn.

Wenn Sie dies im Hintergrund starten möchten, verwenden Sie stattdessen „docker-compose up -d“. Wenn Sie die Protokolle Ihres Docker-Containers drucken möchten, führen Sie „docker-compose logs mqttclient“ wie folgt aus:

$ docker-compose logs mqttclient

Sie können den Docker-Container auch live in Echtzeit sehen, indem Sie „docker-compose ps“ wie folgt verwenden:

$ docker-compose ps

5) Ausführen Ihres MQTT-Clients mit Docker

In diesem Schritt erstellen wir einen Docker-Container aus unserer YAML-Datei und führen ihn aus.

Wechseln Sie dazu in das Verzeichnis, in dem Sie die YAML-Datei haben, und führen Sie „docker-compose up“ wie folgt aus:

$ docker-compose up

Dieser Befehl erstellt einen neuen Docker-Container basierend auf der Beschreibung in Ihrer YAML-Datei und startet ihn.

Wenn Sie dies im Hintergrund starten möchten, verwenden Sie stattdessen „docker-compose up -d“. Sie können den Docker-Container auch live in Echtzeit sehen, indem Sie „docker-compose ps“ wie folgt verwenden:

$ docker-compose ps

6) Verwenden Ihres MQTT-Clients mit Docker

Nachdem unsere YAML-Datei eingerichtet ist, können wir nun unseren MQTT-Client mit Docker verwenden.

Gehen Sie dazu in das Verzeichnis, in dem Sie Ihre YAML-Datei haben, und führen Sie „docker exec“ wie folgt aus:

$ docker exec -it mqttclient /bin/bash

Sie sollten jetzt ein Verzeichnis namens „/home/homerun“ sehen (das ist das Home-Verzeichnis für unseren Docker-Container) und Sie sollten sich in diesem Verzeichnis befinden.

Sie können jetzt Ihre Datenbanken anzeigen, indem Sie „mysql -uroot -proot“ wie folgt eingeben:

$ mysql -uroot -proot

Sie sollten alle Ihre Datenbanken auf dem Bildschirm sehen. Sie können hier sehen, wie Sie einen neuen Root-Benutzer ohne Passwort für die MySQL-Instanz erstellen: https://homer-mqtt.readthedocs.io/en/latest/configure_database_and_create_new_root_user.html

Um den MQTT-Client-Befehl in Docker auszuführen, müssen Sie „sbin/mqtt“ wie folgt eingeben:

$ sbin/mqtt -c /home/homerun/config.yaml

Im obigen Beispiel geben wir eine Konfigurationsdatei mit dem Flag -c an, die unsere MQTT-Einstellungen aus der Konfigurationsdatei liest, die wir in diesem Tutorial erstellt haben.

Um zu überprüfen, ob Ihr MQTT-Client läuft, können Sie „docker-compose ps“ wie folgt verwenden:

$ docker-compose ps

Im obigen Beispiel wurde unser MQTT-Client erfolgreich gestartet. Sie sollten jetzt alle Ihre Datenbanken auf dem Bildschirm sehen.

Um den MQTT-Client-Befehl in Docker auszuführen, müssen Sie „sbin/mqtt“ wie folgt eingeben:

$ sbin/mqtt -c /home/homerun/config.yaml

Im obigen Beispiel geben wir eine Konfigurationsdatei mit dem Flag -c an, die unsere MQTT-Einstellungen aus der Konfigurationsdatei liest, die wir in diesem Tutorial erstellt haben.

Um zu überprüfen, ob Ihr MQTT-Client läuft, können Sie „docker-compose ps“ wie folgt verwenden:

$ docker-compose ps

Im obigen Beispiel wurde unser MQTT-Client erfolgreich gestartet. Sie sollten jetzt alle Ihre Datenbanken auf dem Bildschirm sehen und Sie können versuchen, einige Nachrichten zu veröffentlichen, um zu testen, ob alles ordnungsgemäß funktioniert:

$ docker exec -it mqttclient /bin/bash

$ sbin/mqtt veröffentlichen -t ‚test‘ -h 172.17.0.1 -m ‚Hallo Welt!‘

$ docker exec -it mqttclient /bin/bash

$ sbin/mqtt abonnieren -t ‚test‘ -h 172.17.0.1 -u mqttuser

7) Bereinigen Sie Ihren MQTT-Client mit Docker

Um Ihren Docker-Container zu stoppen, müssen Sie „docker-compose down“ wie folgt ausführen:

$ docker-compose down

8) Bereinigen Sie Ihren MQTT-Client mit Docker Volumes

Um zu verhindern, dass Ihre MySQL-Datenbank und Ihr mqtt-Benutzer erstellt werden, können Sie das Flag -v verwenden.

$ docker-compose down -v

Sie können Ihre Umgebung auch bereinigen, indem Sie das Verzeichnis löschen, das Ihre YAML-Datei enthält.

MySQL-Datenbank und mqtt-Benutzer erfolgreich erstellt! Sie werden automatisch entfernt, wenn Sie den Docker-Container entfernen. Sie können diese Shell jetzt verlassen, indem Sie „exit“ eingeben.

In diesem Tutorial haben wir gesehen, wie Sie Ihren MQTT-Client über einen Docker-Container konfigurieren.

Abschluss

MQTT ist ein Machine-to-Machine (M2M) oder „Internet of Things“-Konnektivitätsprotokoll. Es wurde als extrem leichtgewichtiger Publish/Subscribe-Messaging-Transport konzipiert. MQTT ist nützlich, um stromsparende Sensoren, Wearables und andere winzige mit dem Internet verbundene Dinge mit der Cloud zu verbinden. Da MQTT ein Publish/Subscribe-Modell verwendet, ist es perfekt für Geräte geeignet, die selten Daten senden müssen oder bei denen die Netzwerkbandbreite knapp ist.

Interessiert an der Entwicklung Ihrer MQTT-Lösung? Kontaktiere uns!

Related Articles

WP Radio
WP Radio
OFFLINE LIVE