MQTT, einfach erklärt!
by Edi · 06/02/2021
Geschichte von MQTT
MQTT steht für Message Queuing Telemetry Transport und ist ein Netzwerkprotokoll für die Kommunikation von Machine to Machine (M2M).
Das MQTT-Protokoll wurde 1999 von Dr. Andy Stanford-Clark (IBM) und Arlen Nipper (Arcom, jetzt Cirrus Link) erfunden. Sie benötigten ein Protokoll für minimalen Batterieverlust und minimale Bandbreite, um eine Verbindung mit Ölpipelines über Satellit herzustellen. Allerdings hat sich der primäre Fokus des Protokolls von eingebetteten Systemen zu offenen Internet of Things (IoT) Anwendungsfällen geändert.
Client — Server (Broker) — Prinzip
Die Sender (Publisher) und der Abonnent (Subscriber) treten nie direkt miteinander in Kontakt. Tatsächlich sind sie sich nicht einmal bewusst, dass der andere existiert. Die Verbindung zwischen ihnen wird von einer dritten Komponente, dem MQTT Broker abgewickelt. Die Aufgabe des Brokers ist es, alle eingehenden Nachrichten zu filtern und sie korrekt an die Abonnenten zu verteilen. Der MQTT-Broker steht im Mittelpunkt jedes Publish / Subscribe Protokolls und er kann bis zu Tausende gleichzeitig verbundene MQTT Client verwalten.
Jeder Teilnehmer kann Daten an den Broker senden. Als Beispiel hier ein Temperatursensor. Der sendet die Daten genannt Payload, hier 20 °C an das Topic: „temperatur“. Das Topic ist das Thema (Betreff) für die Daten. Jeder Teilnehmer der das Topic „temperatur“ abonniert hat, bekommt vom Broker die Daten übermittelt.
Das MQTT-Topic
Das Topic übersetzt Thema, wird vom Broker zum Filtern von Nachrichten aller Clients verwendet.
Das Topic besteht aus einer oder mehreren Themenebenen. Jede Themenebene wird durch einen Schrägstrich (/) getrennt.
Hier ein paar Grundregeln um eine saubere Topic Struktur zu erstellen.
- Verwende den / nicht am Begin eines Topics.
- Leerzeichen in den Topics vermeiden
- Kurze Topics verwenden
- Keine Sonderzeichen verwenden
Topic Wildcards
Wenn ein Client ein Topic abonniert, kann er genau das Topic einer veröffentlichten Nachricht abonnieren oder er kann Platzhalter verwenden, um mehrere Topics gleichzeitig zu abonnieren. Ein Platzhalter kann nur zum Abonnieren von Topics verwendet werden, nicht zum Versenden einer Nachricht. Es gibt zwei verschiedene Arten von Platzhalter, einstufig und mehrstufig.
Einstufig:
Mit dem + Zeichen kann ein oder mehrere Topic Level ersetzt werden, machen wir hierzu ein Beispiel. Nehmen wir an, dass wir alle Temperaturen im Erdgeschoss ansehen wollen. Die wildcard wird für die verschiedenen Räume im Erdgeschoss verwendet.
Topic: Haus/Erdgeschoss/+/Temperatur
Als Ergebnis haben wir folgende Topic‘s abonniert.
- Haus/Erdgeschoss/Kueche/Temperatur
- Haus/Erdgeschoss/Stauraum/Temperatur
- Haus/Erdgeschoss/Terrasse/Temperatur
Mehrstufig:
Mit dem # Zeichen werden mehrere Topic Level ersetzt und das # Zeichen steht immer an letzter Stelle und ersetzt die nachfolgenden Topic Level, unabhängig wie tief sie verschachtelt sind.
Wird nur das # hashtag Symbol als Topic verwendet, dann werden alle Nachrichten die über MQTT gesendet werden abonniert. Aber machen wir zum besseren Verständnis wieder ein Beispiel.
Topic: # (Die sogenannte Root-Wildcard abonniert alle Topics)
Topic: Haus/Erdgeschoss/#
Als Ergebnis haben wir folgende Topics abonniert.
- – Haus/Erdgeschoss/Kueche/Temperatur
- Haus/Erdgeschoss/Kueche/Luftfeuchte
- Haus/Erdgeschoss/Stauraum/Temperatur
- Haus/Erdgeschoss/Stauraum/Licht
- Haus/Erdgeschoss/Terrasse/Temperatur
- – U.s.w.
Quality of Service Levels
QoS steht für Quality of Service und gibt an, wie sicher eine Nachricht zugestellt werden soll. Es gibt drei QoS Stufen von 0 bis 2, aber schauen wir uns jede einzelne Stufe etwas genauer an.
QoS 0 – at most once (höchstens einmal)
QoS 1 – at least once (mindestens einmal)
– QoS 2 – exactly once (genau einmal)
Last Will and Testament
Mit der Last Will and Testament (LWT) Funktion kann im Broker beim Ersten verbinden, das Testament vom Client gespeichert werden. Das LWT ist eine normale MQTT Nachricht im CONNECT Packet mit allen Parameter wie Topic, QoS, retained message flag und Payload. Wenn der Client die Verbindung zum Broker verliert, dann sendet der Broker die Last-Will-Nachricht an alle Clients, die das Last-Will-Topics abonniert haben.
►Praxis Beispiel Material:
* https://amzn.to/3fzAe0M – Widerstand Set
* https://amzn.to/3oUZ14g – 300 Stk. Leuchtdioden Set 3 und 5 mm
* https://amzn.to/34ifkjS – 180 Stück Taktilen Drucktaster Sortiment
* https://amzn.to/2QQ7JSL – Breadboard Steckbrett mit 830 Kontakten oder
* https://amzn.to/35GcPIp – 3 Stk. Breadboard Steckbrett mit 400 Kontakten
* https://amzn.to/2xeKb2V – Set 3 x 40 STK. je 20 cm M2M/ F2M / F2F
* https://amzn.to/2U7Urmn – NodeMCU ESP8266 ESP-12F
* https://amzn.to/3erQVKq – ESP32 Node-MCU Board
►Relais:
* https://amzn.to/3a5yUjQ – 1 Stk. Relais 5V KY-019 Modul – 10A
* https://amzn.to/2xi4Kvq – 3 Stk. Relais 5V KY-019 Modul – 10A
* https://amzn.to/2U9ZqmL – 5 Stk. Relais 5V KY-019 Modul – 10A
►Netzteile:
* https://amzn.to/3beWY3V – 2er-Pack USB Ladegerät 5V/2A
* https://amzn.to/398WzP9 – Raspberry Pi 4 Netzteil, USB-C, 5.1V, 3A
* https://amzn.to/2wsS8Bh – HomeSpot Netzteil 3A/5V inkl. 1,5M Micro USB Kabel
►Jumper Wire:
* https://amzn.to/2WxKwIl – Female to Female F2F 40 STK. je 20 cm
* https://amzn.to/2xeKb2V – Set 3 x 40 STK. je 20 cm M2M/ F2M / F2F
►Breadboard:
* https://amzn.to/2QQ7JSL – Breadboard Steckbrett mit 830 Kontakten
►USB Kabel:
* https://amzn.to/2y01THN – USB A auf Micro USB Kabel 0.5m
* https://amzn.to/2xkgqgQ – USB auf Mini USB Kabel 0.5m
* https://amzn.to/2QBxCp7 – USB A zu USB B Kabel 0.5m
All links with "*" are Amazon affiliate links. I receive a small portion of the sales when you place an order, at no extra cost to you.
►Node-MCU ESP8266 Board:
* https://amzn.to/2U7Urmn – NodeMCU ESP8266 ESP-12F
* https://amzn.to/2J5wLJ3 – 3er Set, ESP8266 ESP-12F
* https://amzn.to/3belvGd – 5er Set, ESP8266 ESP-12F
►Relais:
* https://amzn.to/3a5yUjQ – 1 Stk. Relais 5V KY-019 Modul – 10A
* https://amzn.to/2xi4Kvq – 3 Stk. Relais 5V KY-019 Modul – 10A
* https://amzn.to/2U9ZqmL – 5 Stk. Relais 5V KY-019 Modul – 10A
►Netzteile:
* https://amzn.to/3beWY3V – 2er-Pack USB Ladegerät 5V/2A
* https://amzn.to/398WzP9 – Raspberry Pi 4 Netzteil, USB-C, 5.1V, 3A
* https://amzn.to/2wsS8Bh – HomeSpot Netzteil 3A/5V inkl. 1,5M Micro USB Kabel
►Jumper Wire:
* https://amzn.to/2WxKwIl – Female to Female F2F 40 STK. je 20 cm
* https://amzn.to/2xeKb2V – Set 3 x 40 STK. je 20 cm M2M/ F2M / F2F
►Breadboard:
* https://amzn.to/2QQ7JSL – Breadboard Steckbrett mit 830 Kontakten
►USB Kabel:
* https://amzn.to/2y01THN – USB A auf Micro USB Kabel 0.5m
* https://amzn.to/2xkgqgQ – USB auf Mini USB Kabel 0.5m
* https://amzn.to/2QBxCp7 – USB A zu USB B Kabel 0.5m
All links with "*" are Amazon affiliate links. I receive a small portion of the sales when you place an order, at no extra cost to you.