Wenn du schon immer ein MQTT-Broker-Setup für dein Smart-Home-Projekt oder dein IoT-Experiment aufbauen wolltest, bist du hier genau richtig. Mosquitto, der Open-Source-MQTT-Broker, ist schnell eingerichtet und vielseitig einsetzbar. In diesem Beitrag zeige ich dir, wie du Mosquitto direkt auf einem Debian-System installierst oder wie du es als Docker-Container betreiben kannst. Zusätzlich erkläre ich, wie du den MQTT-Server konfigurierst, Benutzer anlegst und dich mit dem MQTT-Explorer unter Windows verbindest. Außerdem gehen wir auf das Rechtekonzept und die Nutzung von Bridges ein.
MQTT (Message Queuing Telemetry Transport) ist ein leichtgewichtiges Nachrichtenprotokoll, das speziell für die Kommunikation zwischen Geräten mit begrenzten Ressourcen oder für den Betrieb in ressourcensparenden Netzwerken entwickelt wurde. Es basiert auf einem Publish/Subscribe-Modell, bei dem ein zentraler MQTT-Server (auch „Broker“ genannt) als Vermittler fungiert. Geräte (Clients) können Nachrichten an sogenannte Topics senden (Publish) oder diese abonnieren (Subscribe).
Ein MQTT-Server wie Mosquitto nimmt Nachrichten entgegen, prüft die Abonnements und leitet die Informationen effizient an die richtigen Geräte weiter. Das macht MQTT ideal für Anwendungen wie Smart Homes, IoT-Projekte und Automatisierungssysteme.
Mosquitto direkt auf Debian installieren
Vorbereitungen Wie üblich aktualsieren wir zuerst unser System:
1
2
sudo apt update
sudo apt upgrade-y
Installation von Mosquitto Anschließend installieren wir den Broker und die zugehörigen Clients:
Konfiguration des MQTT-Servers bei einer Installation auf Debian
Die Mosquitto-Konfiguration wird über die Datei mosquitto.conf vorgenommen.
Anonyme Verbindungen deaktivieren Um zu verhindern, dass ungebetene Gäste sämtliche Daten mitlesen und vor allem verfälschte Daten auf den Broker schreiben können, deaktivieren wir die anonyme Anmeldung und erstellen einen neuen Nutzer. Dazu öffne die Konfigurationsdatei:
1
sudo nano/etc/mosquitto/mosquitto.conf
Füge folgende Zeilen hinzu:
1
2
3
listener1883
allow_anonymous false
password_file/etc/mosquitto/passwd
Benutzer anlegen Erstelle ein Passwort für einen Benutzer:
Starte den Docker-Container neu, damit die Änderungen wirksam werden:
1
docker restart mosquitto
Jetzt ist die anonyme Anmeldung deaktiviert und der Benutzer „username“ angelegt.
Rechtekonzept
Mosquitto unterstützt die Vergabe von Rechten auf Basis der Benutzer. Über die Datei acl_file kannst du festlegen, wer welche Topics lesen oder beschreiben darf.
ACL-Datei erstellen: Erstelle die Datei /etc/mosquitto/acl mit folgendem Inhalt:
1
2
3
user username
topic read home/#
topic write home/livingroom/temperature
Dies erlaubt dem Benutzer username, alle Topics unter home/ zu lesen, aber nur das Topic home/livingroom/temperature zu schreiben.
Konfiguration anpassen: Füge in der Datei mosquitto.conf folgende Zeile hinzu:
1
acl_file/etc/mosquitto/acl
Broker neu starten:
1
sudo systemctl restart mosquitto
Bridges: MQTT-Broker verbinden
Eine Bridge verbindet zwei MQTT-Broker, sodass Nachrichten zwischen ihnen ausgetauscht werden können. Dies ist nützlich, um lokale Netzwerke mit entfernten Standorten zu verbinden.
Bridge-Konfiguration Bearbeite die Datei mosquitto.conf und füge folgenden Abschnitt hinzu:
1
2
3
connection remote-broker
address remote-broker.example.com:1883
topic local/topic remote/topic both0
local/topic: Das lokale Topic
remote/topic: Das Topic auf dem entfernten Broker
both: Nachrichten fließen in beide Richtungen
Alternativ dazu: in: Topic wird von deinem Server nur „aboniert“, es fließen also nur daten von dem entfernten Server zu dir out: Du leitest lediglich auf deinem Broker ankommende Daten an den entfernten Server weiter.
0: Die QoS-Stufe (Quality of Service)
Bridge-Konfiguration mit dem gleichen lokalen und entfernten Topic
Wenn die Topics auf beiden Seiten gleich lauten, reicht es, in der oben gezeigten Konfiguration nur ein gemeinsames Topic anzugeben. Also füge deiner Konfiguration folgendes hinzu:
1
2
3
connection remote-broker
address remote-broker.example.com:1883
topic gemeinsamestopic/# both 0
Broker neu starten
1
sudo systemctl restart mosquitto
Verbindung über den MQTT-Explorer herstellen
MQTT-Explorer herunterladen und installieren Lade den MQTT-Explorer von der offiziellen Website herunter: MQTT-Explorer.
Mit dem Broker verbinden
Starte den MQTT-Explorer.
Erstelle eine neue Verbindung.
Hostname: IP-Adresse oder Domain deines Mosquitto-Brokers
Port: 1883
Benutzername und Passwort: Deine zuvor erstellten Anmeldedaten
Nachrichten senden und abonnieren:
Veröffentliche eine Nachricht:
Topic: test/topic
Nachricht: Hello World
Abonniere das Topic und prüfe, ob die Nachricht empfangen wird.
MQTT-Topics abonnieren
Um Nachrichten zu empfangen, musst du ein Topic abonnieren. Das funktioniert mit Tools wie mosquitto_sub oder einem MQTT-Client wie MQTT-Explorer.
Während der Erstellung wirst du nach verschiedenen Details gefragt (Ländername, Organisation etc.). Diese Informationen kannst du ausfüllen, musst du aber nicht.
Stelle sicher, dass nur der Broker Zugriff auf die Schlüsseldatei hat:
1
chmod600mosquitto.key
Konfiguration des Mosquitto-Brokers
Bearbeite die mosquitto.conf-Datei:
1
sudo nano/etc/mosquitto/mosquitto.conf
Füge folgende Zeilen hinzu:
1
2
3
4
listener8883
cafile/etc/mosquitto/certs/mosquitto.crt
certfile/etc/mosquitto/certs/mosquitto.crt
keyfile/etc/mosquitto/certs/mosquitto.key
listener 8883: Aktiviert den TLS-Listener auf Port 8883 (standardmäßig für MQTT über TLS).
cafile: Gibt die Zertifikatsdatei an.
certfile: Gibt das Broker-Zertifikat an.
keyfile: Gibt den privaten Schlüssel des Brokers an.
Optionale Einstellungen:
Um nur TLS-Verbindungen zuzulassen, deaktiviere den Standardlistener (Port 1883):
1
2
listener1883
allow_anonymous false
Kommentiere die Zeile aus oder entferne sie.
Alternativ kannst du beide Listener parallel betreiben (Port 1883 für unverschlüsselt und Port 8883 für TLS).
Mosquitto neu starten
Nach der Anpassung der Konfiguration muss der Broker wieder neu gestartet werden:
1
sudo systemctl restart mosquitto
Einrichtung für eine Installation als Docker-Container
1. Zertifikate vorbereiten
Wenn du noch keine Zertifikate hast, erstelle ein selbstsigniertes Zertifikat:
MQTT mit Mosquitto: Installation, Konfiguration und Nutzung
Wenn du schon immer ein MQTT-Broker-Setup für dein Smart-Home-Projekt oder dein IoT-Experiment aufbauen wolltest, bist du hier genau richtig. Mosquitto, der Open-Source-MQTT-Broker, ist schnell eingerichtet und vielseitig einsetzbar. In diesem Beitrag zeige ich dir, wie du Mosquitto direkt auf einem Debian-System installierst oder wie du es als Docker-Container betreiben kannst. Zusätzlich erkläre ich, wie du den MQTT-Server konfigurierst, Benutzer anlegst und dich mit dem MQTT-Explorer unter Windows verbindest. Außerdem gehen wir auf das Rechtekonzept und die Nutzung von Bridges ein.
Inhaltsverzeichnis
Was ist MQTT bzw. ein MQTT-Server?
MQTT (Message Queuing Telemetry Transport) ist ein leichtgewichtiges Nachrichtenprotokoll, das speziell für die Kommunikation zwischen Geräten mit begrenzten Ressourcen oder für den Betrieb in ressourcensparenden Netzwerken entwickelt wurde. Es basiert auf einem Publish/Subscribe-Modell, bei dem ein zentraler MQTT-Server (auch „Broker“ genannt) als Vermittler fungiert. Geräte (Clients) können Nachrichten an sogenannte Topics senden (Publish) oder diese abonnieren (Subscribe).
Ein MQTT-Server wie Mosquitto nimmt Nachrichten entgegen, prüft die Abonnements und leitet die Informationen effizient an die richtigen Geräte weiter. Das macht MQTT ideal für Anwendungen wie Smart Homes, IoT-Projekte und Automatisierungssysteme.
Mosquitto direkt auf Debian installieren
Wie üblich aktualsieren wir zuerst unser System:
Anschließend installieren wir den Broker und die zugehörigen Clients:
Mosquitto als Docker-Container installieren
Dazu erstellen wir ein Verzeichnis für die Konfiguration:
Wir starten anschließend den Container:
Konfiguration des MQTT-Servers bei einer Installation auf Debian
Die Mosquitto-Konfiguration wird über die Datei
mosquitto.conf
vorgenommen.Um zu verhindern, dass ungebetene Gäste sämtliche Daten mitlesen und vor allem verfälschte Daten auf den Broker schreiben können, deaktivieren wir die anonyme Anmeldung und erstellen einen neuen Nutzer. Dazu öffne die Konfigurationsdatei:
Füge folgende Zeilen hinzu:
Erstelle ein Passwort für einen Benutzer:
Starte den Broker neu:
Konfiguration des MQTT-Servers in einem Docker-Container
~/mosquitto/config/mosquitto.conf
und setzeallow_anonymous
auffalse
:Jetzt ist die anonyme Anmeldung deaktiviert und der Benutzer „username“ angelegt.
Rechtekonzept
Mosquitto unterstützt die Vergabe von Rechten auf Basis der Benutzer. Über die Datei
acl_file
kannst du festlegen, wer welche Topics lesen oder beschreiben darf./etc/mosquitto/acl
mit folgendem Inhalt:Dies erlaubt dem Benutzer
username
, alle Topics unterhome/
zu lesen, aber nur das Topichome/livingroom/temperature
zu schreiben.mosquitto.conf
folgende Zeile hinzu:Bridges: MQTT-Broker verbinden
Eine Bridge verbindet zwei MQTT-Broker, sodass Nachrichten zwischen ihnen ausgetauscht werden können. Dies ist nützlich, um lokale Netzwerke mit entfernten Standorten zu verbinden.
Bearbeite die Datei
mosquitto.conf
und füge folgenden Abschnitt hinzu:local/topic
: Das lokale Topicremote/topic
: Das Topic auf dem entfernten Brokerboth
: Nachrichten fließen in beide RichtungenAlternativ dazu:
in
: Topic wird von deinem Server nur „aboniert“, es fließen also nur daten von dem entfernten Server zu dirout
: Du leitest lediglich auf deinem Broker ankommende Daten an den entfernten Server weiter.0
: Die QoS-Stufe (Quality of Service)Wenn die Topics auf beiden Seiten gleich lauten, reicht es, in der oben gezeigten Konfiguration nur ein gemeinsames Topic anzugeben. Also füge deiner Konfiguration folgendes hinzu:
Verbindung über den MQTT-Explorer herstellen
Lade den MQTT-Explorer von der offiziellen Website herunter: MQTT-Explorer.
test/topic
Hello World
MQTT-Topics abonnieren
Um Nachrichten zu empfangen, musst du ein Topic abonnieren. Das funktioniert mit Tools wie
mosquitto_sub
oder einem MQTT-Client wie MQTT-Explorer.Hier abonnierst du Nachrichten vom Topic
home/livingroom/temperature
.+
(einzelnes Level): Mit+
kannst du eine beliebige, einzelne Ebene im Topic-Pfad ersetzen:Das abonniert alle Temperatur-Nachrichten aus beliebigen Räumen, z. B.
home/livingroom/temperature
oderhome/kitchen/temperature
.#
(mehrere Level): Mit#
abonnierst du alles, was unterhalb eines bestimmten Punktes im Topic-Pfad liegt:Hiermit abonnierst du Nachrichten wie
home/livingroom/temperature
,home/kitchen/humidity
oder sogarhome/basement/lights/status
.Sichere Verbindungen mit TLS
Einrichtung für eine Installation unter Debian
Vorbereitung: Zertifikate erstellen
Während der Erstellung wirst du nach verschiedenen Details gefragt (Ländername, Organisation etc.). Diese Informationen kannst du ausfüllen, musst du aber nicht.
Konfiguration des Mosquitto-Brokers
mosquitto.conf
-Datei:Füge folgende Zeilen hinzu:
listener 8883
: Aktiviert den TLS-Listener auf Port 8883 (standardmäßig für MQTT über TLS).cafile
: Gibt die Zertifikatsdatei an.certfile
: Gibt das Broker-Zertifikat an.keyfile
: Gibt den privaten Schlüssel des Brokers an.Kommentiere die Zeile aus oder entferne sie.
Mosquitto neu starten
Nach der Anpassung der Konfiguration muss der Broker wieder neu gestartet werden:
Einrichtung für eine Installation als Docker-Container
1. Zertifikate vorbereiten
Wenn du noch keine Zertifikate hast, erstelle ein selbstsigniertes Zertifikat:
Achte darauf, dass der
Common Name
(CN) beim Erstellen des Zertifikats mit der Hostadresse deines Brokers übereinstimmt.2. TLS-konfigurierter Mosquitto-Container
mosquitto.conf
hinzufügenBearbeite dazu die Datei
~/mosquitto/config/mosquitto.conf
:Starte Mosquitto mit TLS-Unterstützung:
Verbindung mit TLS testen
Verwandte Beiträge
Für die Kommunikation zwischen unserem Raspberry Pi und externen Geräten wie Drucker, Smartphones oder Mediaplayern eignet…
In diesem Artikel geht es um die Installation der Hausautomatisierungssoftware openHAB auf ein bereits installiertes und…
Die Konfigurationen von openHAB legen fest, welche Aktoren und Sensoren eingesetzt werden. Zudem lassen sich…