Raspberry Pi: MQTT-Broker Mosquitto installieren und konfigurieren

Geprüft mit Raspberry Pi OS Bullseye.

Message Queue Telemetry Transport, kurz MQTT, ist ein äußerst einfach aufgebautes Kommunikationsprotokoll für den Nachrichtenaustausch zwischen Geräten in Umgebungen mit geringer Bandbreite und instabilen Verbindungen. Typischerweise lassen sich mit MQTT Sensordaten, wie Temperatur oder Füllstände, übertragen. Aber auch klassische Nachrichten oder Kurzmitteilungen.

MQTT-Architektur

Die MQTT-Architektur kennt 3 Rollen. Eine Rolle ist die des Publishers, der Daten senden will. Eine weitere Rolle ist die des Subscribers, der Daten empfangen will. Zwischen Publisher und Subscriber befindet sich der Broker, der Daten von Publishern entgegennimmt und an die Subscriber verteilt.

Wer einen MQTT-Broker im eigenen lokalen Netzwerk betreiben möchte, für den bietet sich als Hardware der Mini-Computer Raspberry Pi an. Darauf kann man Mosquitto installieren. Das ist ein frei verfügbarer MQTT-Broker.

Hier geht es darum Mosquitto zu installieren, zu konfigurieren und zu testen. Sinnvolle Anwendungen werden im Anschluss empfohlen.

Betriebssystem aktualisieren

Zuerst bringen wir das Raspberry Pi OS auf den neusten Stand.

sudo apt update
sudo apt upgrade

Es empfiehlt sich danach einen Neustart vorzunehmen.

sudo reboot

Mosquitto installieren

Nach dem Neustart können wir Mosquitto installieren. Dabei installieren wir auch gleich die MQTT-Clients. Zum testweise Senden und Empfangen von MQTT-Nachrichten ist das eine gute Idee.

sudo apt install mosquitto mosquitto-clients

Nach der Installation sind noch ein paar Schritte für die System-Konfiguration notwendig.

Konfiguration: Autostart

Jetzt müssen wir dem System noch sagen, dass es Mosquitto nach einem Neustart automatisch starten soll (wenn man das nicht manuell machen will).

sudo systemctl enable mosquitto

Wenn das nicht mehr gewünscht ist:

sudo systemctl disable mosquitto

Mosquitto starten und stoppen

Folgendes Kommando startet den Mosquitto:

sudo systemctl start mosquitto

Folgendes Kommando beendet den Mosquitto (bedarfsweise):

sudo systemctl stop mosquitto

Hinweis: Wenn man den Mosquitto beendet, dann werden alle Publisher- und Subscriber-Verbindungen beendet. Das heißt, die MQTT-Clients müssen fehlertolerant sein und selbständig die Verbindung zum MQTT-Broker aufbauen können.

Mit folgendem Kommando kann man sich den Status vom MQTT-Broker Mosquitto anzeigen lassen:

sudo systemctl status mosquitto

In der Zeile, die mit „Active“ beginnt, muss „active (running) stehen.

Mosquitto lokal testen

Mit folgendem Kommando starten wir den MQTT-Subscriber-Client und „subscriben“ das Topic „test“.

mosquitto_sub -t test

Der Subscriber-Client kann mit STRG + C beendet werden.

Um den Broker zu testen, benötigen wir ein zweites Terminal (Fenster/Reiter), in dem wir Daten an den Broker schicken können.

In dem zweiten Terminal schicken wir mit dem MQTT-Publisher-Client eine Nachricht an den Broker.

mosquitto_pub -t test -m "Hallo Welt"

Wenn im ersten Terminal die Nachricht „Hallo Welt“ angezeigt wird, dann war die MQTT-Kommunikation und damit auch die Installation erfolgreich.

Hinweis: An dieser Stelle könnte man sagen, dass die Installation und Konfiguration erfolgreich war und abgeschlossen ist. Dem ist aber nicht so. Denn bis zu diesem Punkt funktioniert die Kommunikation nur lokal auf dem Raspberry Pi. Aber die MQTT-Kommunikation über das Netzwerk funktioniert standardmäßig noch nicht. Die muss noch konfiguriert werden.

Konfiguration: MQTT-Kommunikation im Netzwerk

Damit der MQTT-Broker Mosquitto über die Netzwerk-Verbindung von einem MQTT-Publisher Daten annimmt und an einen oder mehrere MQTT-Subscriber Daten sendet, muss die Kommunikation übers Netzwerk explizit freigegeben bzw. konfiguriert werden. Wichtig ist dabei die Authentifizierung der Clients beim Broker.

Hier unterscheiden wir zwischen der Kommunikation ...

  • ohne Authentifizierung
  • mit Authentifizierung mit Benutzername und Passwort

Hinweis: Den Zugriff auf den MQTT-Broker ohne Authentifizierung sollte man im Produktiv-Betrieb nicht erlauben. Ohne Authentifizierung kann jeder im Netzwerk Daten an den MQTT-Broker schicken oder von dort empfangen. In der Regel will man nicht, dass das „jeder“ kann.

Konfiguration: Kommunikation ohne Authentifizierung

Vorsicht, die folgende Konfiguration ermöglicht es ohne Authentifizierung mit dem MQTT-Broker über das Netzwerk zu kommunizieren.

Zuerst öffnen wir die Konfigurationsdatei von Mosquitto:

sudo nano /etc/mosquitto/conf.d/local.conf

In die Datei fügen wir folgende Zeilen ein:

listener 1883
allow_anonymous true

Anschließend die Datei speichern und schließen: Strg + O, Return, Strg + X.

Damit die Konfiguration wirksam wird, muss Mosquitto neu gestartet werden.

sudo systemctl restart mosquitto

Hinweis: Wenn der Mosquitto neu gestartet wird, werden dabei alle MQTT-Verbindungen beendet und müssen neu hergestellt werden.

Konfiguration: Kommunikation mit Authentifizierung mit Benutzername und Passwort

Für eine sichere Kommunikation bedarf es der Authentifizierung der Clients bei einer Verbindung mit dem MQTT-Broker. Dazu müssen wir zuerst auf dem Broker Benutzernamen und Passwörter einrichten.

Wir verwenden hier exemplarisch den Benutzer „mqttuser“. Das Passwort darfst Du nach folgendem Kommando selber festlegen.

sudo mosquitto_passwd -c /etc/mosquitto/credentials mqttuser

Mit diesem Kommando wird automatisch die Passwort-Datei „/etc/mosquitto/credentials“ erzeugt und darin das Passwort verschlüsselt gespeichert.

Wenn die Datei schon existiert, dann kannst Du weitere Benutzer mit folgendem Kommando eintragen:

sudo mosquitto_passwd -b /etc/mosquitto/credentials USERNAME PASSWORD

Die Platzhalter USERNAME und PASSWORD sind jeweils mit dem gewünschten Benutzernamen und Passwort zu ersetzen.

Wenn die Passwort-Datei und Benutzer eingetragen sind, muss die Konfiguration von Mosquitto noch geändert werden. Dazu öffnen wir die Konfigurationsdatei von Mosquitto:

sudo nano /etc/mosquitto/conf.d/local.conf

In die Datei fügen wir folgende Zeilen ein:

listener 1883
allow_anonymous false
password_file /etc/mosquitto/credentials

Hinweis: Wenn vorher die Kommunikation ohne Authentifizierung erfolgte, dann müssen diese Zeilen nicht angefügt, sondern entsprechend geändert werden.

Nach der Änderung die Datei speichern und schließen: Strg + O, Return, Strg + X.

Damit die Konfiguration wirksam wird, muss Mosquitto neu gestartet werden.

sudo systemctl restart mosquitto

Achtung: Ab jetzt muss sich jeder Publisher und Subscriber mit Benutzername und Passwort anmelden.

Kommunikation übers Netzwerk prüfen

Die Frage ist jetzt, funktioniert die Kommunikation über das Netzwerk mit oder ohne Authentifizierung?

Hierzu startet man einen MQTT-Subscriber-Client mit folgendem Kommando (ohne Authentifizierung am MQTT-Broker):

mosquitto_sub -t "#" -v

Oder, MQTT-Subscriber-Client mit Authentifizierung am MQTT-Broker starten:

mosquitto_sub -t "#" -v -u USER -P PASSWORD

"USER" und "PASSWORD" sind durch die konfigurierten Zugangsdaten zu ersetzen.

Dieses Kommando hört auf jedes Topic (#) und meldet sobald neue Daten empfangen wurden. Man kann dieses Kommando in einer Kommandozeile als Logging-Anzeige laufen lassen, wenn man wissen will, ob ein MQTT-Publisher Daten gesendet hat.

Der Subscriber-Client kann mit STRG + C beendet werden.

Konfiguration: Feste IP-Adresse

Wenn man ein frisches Raspberry Pi OS als Betriebssystem verwendet, dann hat das den Nachteil, dass es seine IP-Konfiguration per DHCP erhält. Das bedeutet, dass die IP-Konfiguration dynamisch erfolgt und sich deshalb die IPv4-Adresse jederzeit ändern kann. Wenn man den Raspberry Pi als Client benutzt, dann ist das kein Problem. Wenn aber der Raspberry Pi als MQTT-Broker im Netzwerk verwendet wird, dann kann eine Adressänderung fatale Folgen haben. Dann können ihn die Publisher und Subscriber nicht mehr unter alte Adresse erreichen. Dann ist mühsam eine Adressänderung beim jedem MQTT-Client notwendig.

Man löst dieses Problem in der Regel dadurch, dass der Raspberry Pi eine statische IP-Konfiguration bekommt, damit der MQTT-Broker im Netzwerk immer unter der gleichen Adresse erreichbar ist.

Raspberry Pi Pico: Beispiele mit MQTT

Dieses Dashboard macht nur Sinn, wenn Du es zusammen mit den MQTT-Beispielen mit dem Mikrocontroller Raspberry Pi Pico W verwendest.

Weitere verwandte Themen:

Frag Elektronik-Kompendium.de

Elektronik-Set Raspberry Pi Edition
Elektronik-Set Raspberry Pi Edition

Elektronik erleben mit dem Raspberry Pi mit Python und GPIO Zero

  • Leichter Einstieg ins Hardware-nahe Programmieren mit Python und GPIO Zero
  • Experimentieren und Programmieren ohne Vorkenntnisse
  • Sofort Loslegen mit All-in-one-Set

Elektronik-Set jetzt bestellen

Elektronik-Fibel

Elektronik einfach und leicht verständlich

Die Elektronik-Fibel ist ein Buch über die Grundlagen der Elektronik, Bauelemente, Schaltungstechnik und Digitaltechnik.

Das will ich haben!