Skip to main content

MQTT auf Raspberry installieren und in Betrieb nehmen

 

Quelle: https://www.elektronik-kompendium.de/sites/raspberry-pi/2709041.htm

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.

Zusatz: Rechte für die Passwortdatei müssen noch geändert werden:

sudo chown mosquitto:mosquitto /etc/mosquitto/credentials
sudo chmod 640 /etc/mosquitto/credentials

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.