MQTT Protokoll: Unterschied zwischen den Versionen

Aus xinux.net
Zur Navigation springen Zur Suche springen
 
(5 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 14: Zeile 14:
 
;Letzter Wille und Retained-Flag:
 
;Letzter Wille und Retained-Flag:
 
* Ermöglicht das Setzen von Nachrichten, die gespeichert und bei Bedarf an Subscriber gesendet werden.
 
* Ermöglicht das Setzen von Nachrichten, die gespeichert und bei Bedarf an Subscriber gesendet werden.
=Weiter=
 
;Entwicklung und Zweck:
 
* MQTT, entwickelt von IBM, dient als effizientes Kommunikationsprotokoll, besonders für IoT-Anwendungen.
 
 
;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, Nachrichten für den Fall eines unerwarteten Ausfalls zu hinterlegen, die dann vom Broker veröffentlicht werden.
Zeile 25: Zeile 22:
 
;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=
 
;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.
Hier ist eine Zusammenfassung und ein weiterführendes Skriptbeispiel basierend auf dem Artikel aus dem Linux-Magazin:
 
  
 +
=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.
  
Dieser Code-Block umfasst alle wesentlichen Aspekte des Textes, angepasst für eine direkte Verwendung in einem technischen Dokument oder Wiki.
+
; 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.

Quellen