MQTT Protokoll: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
 
(Eine dazwischenliegende Version desselben Benutzers wird nicht angezeigt)
Zeile 1: Zeile 1:
=Grunsätzliches=
+
= Grundsätzliches =
 
;Entwicklung und Zweck:
 
;Entwicklung und Zweck:
 
* MQTT wurde von IBM als "Message Queueing Telemetry Transport" entwickelt und ist besonders für das IoT geeignet.
 
* MQTT wurde von IBM als "Message Queueing Telemetry Transport" entwickelt und ist besonders für das IoT geeignet.
Zeile 7: Zeile 7:
 
* Nutzt TCP-Port 1883 und TLS-TCP-Port 8883, reduziert die Notwendigkeit von Polling, was Bandbreite spart und die Latenz minimiert.
 
* Nutzt TCP-Port 1883 und TLS-TCP-Port 8883, reduziert die Notwendigkeit von Polling, was Bandbreite spart und die Latenz minimiert.
 
;Client und Broker Beziehung:
 
;Client und Broker Beziehung:
* Die Inhalt der Nachrichten ist dem Broker unbekannt; seine Aufgabe endet mit der Zustellung der Nachricht.
+
* Der Inhalt der Nachrichten ist dem Broker unbekannt; seine Aufgabe endet mit der Zustellung der Nachricht.
 
;Topics und Nachrichtenhandling:
 
;Topics und Nachrichtenhandling:
 
* Nachrichten sind mit Topics verbunden, die wie hierarchische Pfade strukturiert sind und Wildcards für flexible Abonnements unterstützen.
 
* Nachrichten sind mit Topics verbunden, die wie hierarchische Pfade strukturiert sind und Wildcards für flexible Abonnements unterstützen.
 
;Payloads und Daten:
 
;Payloads und Daten:
 
* Unterstützt bis zu 256 MByte große Payloads, häufig verwendet für einfache Datenstrings oder JSON-verpackte Daten.
 
* Unterstützt bis zu 256 MByte große Payloads, häufig verwendet für einfache Datenstrings oder JSON-verpackte Daten.
;Letzter Wille und Retained-Flag:
+
;Retained-Flag:
* Ermöglicht das Setzen von Nachrichten, die gespeichert und bei Bedarf an Subscriber gesendet werden.
+
* Der Broker speichert die letzte Nachricht eines Topics und stellt sie jedem neuen Subscriber sofort zu.
 
;LWT (Last Will and Testament):
 
;LWT (Last Will and Testament):
* Ermöglicht Clients, Nachrichten für den Fall eines unerwarteten Ausfalls zu hinterlegen, die dann vom Broker veröffentlicht werden.
+
* Ermöglicht Clients, beim Verbinden eine Nachricht zu hinterlegen, die der Broker erst bei einem unerwarteten Ausfall veröffentlicht.
;Retained-Flag:
+
;Online-/Offline-Status:
* Wird genutzt, um den Zustand eines Clients dauerhaft zu speichern und zu kommunizieren, ob ein Client online oder offline ist.
+
* Üblicher Kniff: Online-Status wird als retained Nachricht gesetzt, der Offline-Status kommt per LWT (idealerweise ebenfalls retained) — so kommunizieren Clients zuverlässig, ob sie erreichbar sind.
 
;Qualitätskontrolle:
 
;Qualitätskontrolle:
 
* MQTT bietet drei Servicequalitätsstufen (QoS), die von keiner Zusicherung bis zur garantierten einmaligen Zustellung reichen.
 
* MQTT bietet drei Servicequalitätsstufen (QoS), die von keiner Zusicherung bis zur garantierten einmaligen Zustellung reichen.
 
;Broker:
 
;Broker:
* MQTT-Broker wie Mosquitto und Hivemq bieten erweiterte Funktionen wie Clustering und unterstützen Websockets für flexible Netzwerkanwendungen.
+
* MQTT-Broker wie Mosquitto und HiveMQ bieten erweiterte Funktionen wie Clustering und unterstützen Websockets für flexible Netzwerkanwendungen.
=Praxis=
+
 
 +
= Praxis =
 
;Praktische Anwendung:
 
;Praktische Anwendung:
 
* Ein Beispiel ist ein Temperatursensor, der Temperaturen in Fahrenheit misst und nach Konvertierung in Celsius wieder publiziert.
 
* Ein Beispiel ist ein Temperatursensor, der Temperaturen in Fahrenheit misst und nach Konvertierung in Celsius wieder publiziert.
  
=Weiter=
+
= Weiter =
 
 
 
; MQTT-Kommandos in der Praxis:
 
; MQTT-Kommandos in der Praxis:
 
* Befehl im ersten Terminal: mosquitto_sub -v -t '#'
 
* Befehl im ersten Terminal: mosquitto_sub -v -t '#'
Zeile 42: Zeile 42:
 
; Anwendung und Monitoring mit MQTT:
 
; Anwendung und Monitoring mit MQTT:
 
* MQTT kann verwendet werden, um den Status langer Prozesse zu überwachen, indem periodisch Statusmeldungen gesendet werden.
 
* MQTT kann verwendet werden, um den Status langer Prozesse zu überwachen, indem periodisch Statusmeldungen gesendet werden.
* Beispiel eines Skripts, das MQTT nutzt, um den Status eines laufenden Prozesses zu überwachen:
 
  
<pre>
+
= Weiter =
#!/bin/sh
 
source mqttfuncs.sh
 
mqtt Start
 
# for ... # lange Schleife
 
mqtt "verarbeite jetzt xyz `date`"
 
# done
 
mqtt "So, jetzt ist Schluss"
 
</pre>
 
=Weiter=
 
 
; Für Programmierer:
 
; Für Programmierer:
* Die »mosquitto_*« -Utilities sind für Tests oder zum Einbetten in Shellskripte unerlässlich.
+
* Die »mosquitto_*«-Utilities sind für Tests oder zum Einbetten in Shellskripte unerlässlich.
 
* Unabhängig davon existieren MQTT-APIs für viele Sprachen, von Java und Javascript über C, C#, Objective-C und Lua bis Perl und Python.
 
* Unabhängig davon existieren MQTT-APIs für viele Sprachen, von Java und Javascript über C, C#, Objective-C und Lua bis Perl und Python.
* Der in Python geschriebene Subscriber aus Listing 3 vereinbart zunächst einen Callback, der aufgerufen wird, sobald eine Nachricht eintrifft.
+
* Ein Subscriber vereinbart typischerweise einen Callback, der aufgerufen wird, sobald eine Nachricht eintrifft; der Client verbindet sich mit dem Broker und geht kontrolliert in eine Endlosschleife.
* Jetzt verbindet sich der Client mit dem Broker und geht kontrolliert in eine Endlosschleife.
 
 
* Trifft vom Broker eine Nachricht mit dem richtigen Topic ein, wird der Callback ausgeführt, der die Nachricht ausgibt, in eine Datenbank speichert oder Ähnliches.
 
* Trifft vom Broker eine Nachricht mit dem richtigen Topic ein, wird der Callback ausgeführt, der die Nachricht ausgibt, in eine Datenbank speichert oder Ähnliches.
 
; Listing 3 - Subscriber in Python:
 
<pre>
 
#!/usr/bin/env python
 
import paho.mqtt.client as paho  # pip install paho-mqtt
 
 
def on_message(mosq, userdata, msg):
 
    print "%s (qos=%s, r=%s) %s" % (msg.topic, str(msg.qos), msg.retain, str(msg.payload))
 
 
mqtt = paho.Client()
 
mqtt.on_message = on_message
 
 
mqtt.connect("localhost", 1883, 60)
 
mqtt.subscribe("linux/+", 0)
 
 
mqtt.loop_forever()
 
</pre>
 
  
 
; Weitere Funktionen:
 
; Weitere Funktionen:
* Um den Client-Status zu überwachen, fügt man einen letzten Willen in das Skript ein, wie in Listing 3 gezeigt.
+
* Um den Client-Status zu überwachen, fügt man einen letzten Willen (LWT) hinzu.
 
* Das Projekt »mqttwarn« bietet ein Python-Werkzeug mit vielen Plugins für das Monitoring an.
 
* Das Projekt »mqttwarn« bietet ein Python-Werkzeug mit vielen Plugins für das Monitoring an.
 
; Listing 4 - Mqttwarn-Konfiguration:
 
<pre>
 
[defaults]
 
launch  = log, pushover
 
 
[config:log]
 
targets = {
 
    'info'  : [ 'info' ],
 
}
 
 
[config:pushover]
 
targets = {
 
    'linux'  : ['ml1234567890..', 'buzQx...'],
 
}
 
 
[alerts/attention]
 
targets = pushover:linux, log:info
 
title: Linux Magazin
 
format = {payload}
 
</pre>
 
  
 
; Websockets:
 
; Websockets:
 
* Moderne Webbrowser können MQTT mit Hilfe von Websockets nutzen.
 
* Moderne Webbrowser können MQTT mit Hilfe von Websockets nutzen.
 
* Das Paho-Projekt stellt ein Javascript-Modul bereit, das dies implementiert.
 
* Das Paho-Projekt stellt ein Javascript-Modul bereit, das dies implementiert.
* Alle Broker verfügen über Websocket-Unterstützung auf frei konfigurierbaren Ports.
+
* Viele Broker bieten Websocket-Unterstützung; bei Mosquitto muss dafür ein eigener Listener konfiguriert werden (z. B. <code>listener 9001</code> + <code>protocol websockets</code>).
  
 
; Im richtigen Leben:
 
; Im richtigen Leben:
 
* MQTT wird außerhalb des IoT in verschiedenen Produkten eingesetzt, z. B. für den Statistik-Daemon Collectd und das Loggingsystem Graylog.
 
* MQTT wird außerhalb des IoT in verschiedenen Produkten eingesetzt, z. B. für den Statistik-Daemon Collectd und das Loggingsystem Graylog.
* Das Open-Source-Projekt Owntracks stellt I-OS- und Android-Clients bereit, die über MQTT Positionierungsdaten an den eigenen MQTT-Broker liefern.
+
* Das Open-Source-Projekt Owntracks stellt iOS- und Android-Clients bereit, die über MQTT Positionierungsdaten an den eigenen MQTT-Broker liefern.
* Bei der Heimautomatisierung und Open HAB kann MQTT ebenfalls nützlich sein.
+
* Bei der Heimautomatisierung und openHAB kann MQTT ebenfalls nützlich sein.
 
* Facebook setzt beim Messenger aufgrund der geringen Latenz auf MQTT.
 
* Facebook setzt beim Messenger aufgrund der geringen Latenz auf MQTT.
=Quellen=
+
 
*https://www.linux-magazin.de/ausgaben/2015/11/mqtt/
+
= Quellen =
 +
* https://www.linux-magazin.de/ausgaben/2015/11/mqtt/

Aktuelle Version vom 20. Juni 2026, 06:45 Uhr

Grundsätzliches

Entwicklung und Zweck
  • MQTT wurde von IBM als "Message Queueing Telemetry Transport" entwickelt und ist besonders für das IoT geeignet.
Protokollart
  • MQTT ist ein Publish/Subscribe-Protokoll, bei dem sich Clients mit einem Broker verbinden, um Nachrichten zu senden oder zu empfangen.
Ports und Kommunikation
  • Nutzt TCP-Port 1883 und TLS-TCP-Port 8883, reduziert die Notwendigkeit von Polling, was Bandbreite spart und die Latenz minimiert.
Client und Broker Beziehung
  • Der Inhalt der Nachrichten ist dem Broker unbekannt; seine Aufgabe endet mit der Zustellung der Nachricht.
Topics und Nachrichtenhandling
  • Nachrichten sind mit Topics verbunden, die wie hierarchische Pfade strukturiert sind und Wildcards für flexible Abonnements unterstützen.
Payloads und Daten
  • Unterstützt bis zu 256 MByte große Payloads, häufig verwendet für einfache Datenstrings oder JSON-verpackte Daten.
Retained-Flag
  • Der Broker speichert die letzte Nachricht eines Topics und stellt sie jedem neuen Subscriber sofort zu.
LWT (Last Will and Testament)
  • Ermöglicht Clients, beim Verbinden eine Nachricht zu hinterlegen, die der Broker erst bei einem unerwarteten Ausfall veröffentlicht.
Online-/Offline-Status
  • Üblicher Kniff: Online-Status wird als retained Nachricht gesetzt, der Offline-Status kommt per LWT (idealerweise ebenfalls retained) — so kommunizieren Clients zuverlässig, ob sie erreichbar sind.
Qualitätskontrolle
  • MQTT bietet drei Servicequalitätsstufen (QoS), die von keiner Zusicherung bis zur garantierten einmaligen Zustellung reichen.
Broker
  • MQTT-Broker wie Mosquitto und HiveMQ bieten erweiterte Funktionen wie Clustering und unterstützen Websockets für flexible Netzwerkanwendungen.

Praxis

Praktische Anwendung
  • Ein Beispiel ist ein Temperatursensor, der Temperaturen in Fahrenheit misst und nach Konvertierung in Celsius wieder publiziert.

Weiter

MQTT-Kommandos in der Praxis
  • Befehl im ersten Terminal: mosquitto_sub -v -t '#'
  • Befehl im zweiten Terminal für eine einfache Nachricht: mosquitto_pub -t linux/magazin -m "Hello world"
  • Befehl mit Retained Flag: mosquitto_pub -r -t linux/magazin -m "Hallo Welt"
Retained Messages
  • Wenn das Retained-Flag verwendet wird, begrüßt MQTT zukünftige Subscriber mit der zuvor gespeicherten Nachricht auf dem Topic "linux/magazin".
Broker und Bridges
  • Die Auswahl eines MQTT-Brokers sollte basierend auf den spezifischen Anforderungen wie Clustering-Support und Sprachunterstützung getroffen werden.
  • MQTT-Bridges helfen, Geräte ohne TLS-Support sicher zu verbinden, indem Nachrichten zu einem nahegelegenen gesicherten Broker weitergeleitet werden.
Anwendung und Monitoring mit MQTT
  • MQTT kann verwendet werden, um den Status langer Prozesse zu überwachen, indem periodisch Statusmeldungen gesendet werden.

Weiter

Für Programmierer
  • Die »mosquitto_*«-Utilities sind für Tests oder zum Einbetten in Shellskripte unerlässlich.
  • Unabhängig davon existieren MQTT-APIs für viele Sprachen, von Java und Javascript über C, C#, Objective-C und Lua bis Perl und Python.
  • Ein Subscriber vereinbart typischerweise einen Callback, der aufgerufen wird, sobald eine Nachricht eintrifft; der Client verbindet sich mit dem Broker und geht kontrolliert in eine Endlosschleife.
  • Trifft vom Broker eine Nachricht mit dem richtigen Topic ein, wird der Callback ausgeführt, der die Nachricht ausgibt, in eine Datenbank speichert oder Ähnliches.
Weitere Funktionen
  • Um den Client-Status zu überwachen, fügt man einen letzten Willen (LWT) hinzu.
  • Das Projekt »mqttwarn« bietet ein Python-Werkzeug mit vielen Plugins für das Monitoring an.
Websockets
  • Moderne Webbrowser können MQTT mit Hilfe von Websockets nutzen.
  • Das Paho-Projekt stellt ein Javascript-Modul bereit, das dies implementiert.
  • Viele Broker bieten Websocket-Unterstützung; bei Mosquitto muss dafür ein eigener Listener konfiguriert werden (z. B. listener 9001 + protocol websockets).
Im richtigen Leben
  • MQTT wird außerhalb des IoT in verschiedenen Produkten eingesetzt, z. B. für den Statistik-Daemon Collectd und das Loggingsystem Graylog.
  • Das Open-Source-Projekt Owntracks stellt iOS- und Android-Clients bereit, die über MQTT Positionierungsdaten an den eigenen MQTT-Broker liefern.
  • Bei der Heimautomatisierung und openHAB kann MQTT ebenfalls nützlich sein.
  • Facebook setzt beim Messenger aufgrund der geringen Latenz auf MQTT.

Quellen