#TODO Definition: Das [MQTT](https://en.wikipedia.org/wiki/MQTT) (Message Queuing Telemetry Transport) IoT-Netzwerkprotokoll ist eine Funktechnologie zur Machine-to-Machine-Kommunikation und wird für IoT-Anwendungen verwendet. ### Standard ISO/IEC 20922:2016 ### Übertragungsmedium Nutzt bestehende Protokolle, wie WLAN, Ethernet, Mobilfunk, [[Bluetooth LE]] und [[LoRa#Standard|LoRaWAN]] für die Kommunikation. ### Vorteile - Geringer Bandbreitennutzung (Overhead) - Lightweight - Möglichkeit der Wahrnehmung von Dienstverlustes - Flexibel und Skalierbar - Einfach zu implementieren und zu verwenden - geringer Integrationsaufwand ### Nachteile - Nicht verschlüsselte Kommunikation - Eingeschränkte Funktionen - Benötigt Broker als zentralen Punkt ### Kommunikationsparadigma ![[mqtt_Kommunikationsparadigma.webp]] #### Sensor Das ist der Sensor, welcher einen Wert auslesen kann. Dabei kommuniziert dieser ausschließlich mit dem MQTT-Broker. #### MQTT-Broker Der MQTT-Broker ist der Publisher in diesem Prinzip. Er hält eine Verbindung mit dem Sensor und leitet den Subscribern den ausgelesenen Wert, unter einem bestimmten Topic, weiter. #### Subscriber Ein Subscriber kann jegliches empfangendes Endgerät sein. Dieses Endgerät kann unter Angabe des Topics den Wert in dem angegebenen Topic erhalten, indem es diesem Topic subscribed. ### Topic und Filterung​ - Topic ist eine UTF-8-Zeichenkette​ - Hierarchiestufen sind Level und sind optional und dienen der Strukturierung​. - Durch diese Struktur ist Filterung möglich (z. B. Auswahl des Subscribers oder Umsetzung eines Berechtigungskonzepts auf dem Broker)​ - Level werden durch `/` getrennt​. Diese werden Topic Level Separator (TLS) genannt. - Jedes Topic besteht mindestens aus einem Zeichen​ - Auch Leerzeichen sind möglich​ - Schreibweise ist case-sensitive - `+` und `#` innerhalb eines Levels haben eine besondere Bedeutung​ #### Beispiel Im Folgenden wird bei jedem Topic mindestens das im ersten Beispiel spezifisch genannte Topic abgefragt. ```MQTT-Topic BS_FFB/Block_A/OG_1/146/Temp1​ ``` ```MQTT-Topic BS_FFB/Block_A/+/+/Temp1​ # Ein + ist eine single-level-wildcard ``` ```MQTT-Topic BS_FFB/Block_A/#/Temp1​ # Ein # ist eine multi-level-wildcard ```