MQTT Protokoll: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
(8 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
=Grunsätzliches= | =Grunsä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: | ||
+ | * Die 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. | ||
+ | ;Letzter Wille und Retained-Flag: | ||
+ | * Ermöglicht das Setzen von Nachrichten, die gespeichert und bei Bedarf an Subscriber gesendet werden. | ||
+ | ;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. | ||
+ | ;Retained-Flag: | ||
+ | * Wird genutzt, um den Zustand eines Clients dauerhaft zu speichern und zu kommunizieren, ob ein Client online oder offline ist. | ||
+ | ;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. | ||
+ | * Beispiel eines Skripts, das MQTT nutzt, um den Status eines laufenden Prozesses zu überwachen: | ||
+ | |||
+ | <pre> | ||
+ | #!/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: | ||
+ | * 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. | ||
+ | * Der in Python geschriebene Subscriber aus Listing 3 vereinbart zunächst einen Callback, der aufgerufen wird, sobald eine Nachricht eintrifft. | ||
+ | * 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. | ||
+ | |||
+ | ; 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: | ||
+ | * Um den Client-Status zu überwachen, fügt man einen letzten Willen in das Skript ein, wie in Listing 3 gezeigt. | ||
+ | * 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: | ||
+ | * Moderne Webbrowser können MQTT mit Hilfe von Websockets nutzen. | ||
+ | * Das Paho-Projekt stellt ein Javascript-Modul bereit, das dies implementiert. | ||
+ | * Alle Broker verfügen über Websocket-Unterstützung auf frei konfigurierbaren Ports. | ||
+ | |||
+ | ; 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 I-OS- 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. | ||
+ | * Facebook setzt beim Messenger aufgrund der geringen Latenz auf MQTT. | ||
+ | =Quellen= | ||
+ | *https://www.linux-magazin.de/ausgaben/2015/11/mqtt/ |
Aktuelle Version vom 14. April 2024, 08:35 Uhr
Grunsä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
- Die 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.
- Letzter Wille und Retained-Flag
- Ermöglicht das Setzen von Nachrichten, die gespeichert und bei Bedarf an Subscriber gesendet werden.
- 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.
- Retained-Flag
- Wird genutzt, um den Zustand eines Clients dauerhaft zu speichern und zu kommunizieren, ob ein Client online oder offline ist.
- 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.
- Beispiel eines Skripts, das MQTT nutzt, um den Status eines laufenden Prozesses zu überwachen:
#!/bin/sh source mqttfuncs.sh mqtt Start # for ... # lange Schleife mqtt "verarbeite jetzt xyz `date`" # done mqtt "So, jetzt ist Schluss"
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.
- Der in Python geschriebene Subscriber aus Listing 3 vereinbart zunächst einen Callback, der aufgerufen wird, sobald eine Nachricht eintrifft.
- 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.
- Listing 3 - Subscriber in Python
#!/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()
- Weitere Funktionen
- Um den Client-Status zu überwachen, fügt man einen letzten Willen in das Skript ein, wie in Listing 3 gezeigt.
- Das Projekt »mqttwarn« bietet ein Python-Werkzeug mit vielen Plugins für das Monitoring an.
- Listing 4 - Mqttwarn-Konfiguration
[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}
- Websockets
- Moderne Webbrowser können MQTT mit Hilfe von Websockets nutzen.
- Das Paho-Projekt stellt ein Javascript-Modul bereit, das dies implementiert.
- Alle Broker verfügen über Websocket-Unterstützung auf frei konfigurierbaren Ports.
- 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 I-OS- 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.
- Facebook setzt beim Messenger aufgrund der geringen Latenz auf MQTT.