MQTT Broker installieren

Ab Version 1.7 wird MQTT direkt vom Core von SmartHomeMG unterstützt. Um MQTT zu nutzen, muss ein Broker verwendet werden, mit dem die MQTT Clients kommunizieren. Wenn im Netzwerk noch kein Broker installiert ist, kann auf dem Rechner auf dem SmartHomeNG installiert wird, auch ein Broker installiert werden.

Mosquitto installieren

Ein populärer Open Source Broker ist Eclipse Mosquitto™. Die Installation dieses Brokers wird im folgenden beschrieben. Weitergehende Informationen zu dem Broker sind unter https://mosquitto.org zu finden.

Mosquitto ist bei Debian seit dem Stretch-Release im Standard Repository enthalten und kann daher einfach mit dem folgenden Kommando installiert werden:

sudo apt-get install mosquitto

Anschließend kann mit dem Befehl

systemctl status mosquitto

überprüft werden, ob der Broker läuft. Wenn der Service läuft, sieht man eine ähnliche Ausgabe wie folgende:

 mosquitto.service - LSB: mosquitto MQTT v3.1 message broker
   Loaded: loaded (/etc/init.d/mosquitto; generated; vendor preset: enabled)
   Active: active (running) since Wed 2018-05-30 13:39:47 CEST; 5min ago
     Docs: man:systemd-sysv-generator(8)
   CGroup: /system.slice/mosquitto.service
           └─3548 /usr/sbin/mosquitto -c /etc/mosquitto/mosquitto.conf

Mai 30 13:39:47 SmartHomeNG systemd[1]: Starting LSB: mosquitto MQTT v3.1 message
Mai 30 13:39:47 SmartHomeNG mosquitto[3543]: Starting network daemon:: mosquitto
Mai 30 13:39:47 SmartHomeNG systemd[1]: Started LSB: mosquitto MQTT v3.1 message

Der Service kann dann mit den folgenden Befehlen gestartet, gestoppt und neu gestartet werden:

systemctl start mosquitto
systemctl stop mosquitto
systemctl restart mosquitto

Mosquitto als Service einrichten

Falls die Abfrage des Status einen Fehler liefert:

Unit mosquitto.service could not be found

muss noch eine Startup-Datei für systemd erstellt werden.

Zum Einrichten den Texteditor starten mit:

sudo nano /etc/systemd/system/mosquitto.service

und folgenden Text hineinkopieren:

[Unit]
Description=mosquitto MQTT message broker
After=network.target

[Service]
ExecStart=/usr/sbin/mosquitto -c /etc/mosquitto/mosquitto.conf
WorkingDirectory=/etc/mosquitto
User=mosquitto
Restart=always
TimeoutStartSec=90

[Install]
WantedBy=multi-user.target

Der Servicee kann dann wie oben beschrieben gestartet werden.

Mosquitto konfigurieren

Nach der Installation ist der Broker ohne weitere Konfiguration nutzbar. Allerdings kann jeder Client den Broker nutzen, da der Client sich nicht authentifizieren muss.

Wenn eine Authentifizierung gewünscht wird, muss Mosquitto entsprechend der Dokumentation (https://mosquitto.org/man/mosquitto-conf-5.html) konfiguriert und neu gestartet werden.

Gleiches gilt, wenn zusätzlich zum MQTT Protokoll (auf Port 1883) auch noch Websockets genutzt werden sollen.

Bemerkung

SmartHomeNG nutzt zur Kommunikation mit dem Broker nur das MQTT Protokoll.

Die Konfiguration wird in der Datei /etc/mosquitto/conf.d/mosquitto.conf vorgenommen.

Um zum Beispiel mosquitto so zu konfigurieren, dass die Clients sich anmelden müssen und eine anonyme Anmeldung verhindert wird, muss die Konfiguration folgendermaßen aussehen:

password_file /etc/mosquitto/passwd

allow_anonymous false

Zusätzlich muss eine Datei /etc/mosquitto/passwd angelegt werden, in der die Accountinformationen hinterlegt werden. Informationen dazu finden sich in der Mosquitto Dokumentation. Eine hilfreiche Website ist auch http://www.steves-internet-guide.com/mqtt-username-password-example/.

In Mosquitto Versionen ab 2.0 muss die Authentifizierung explizit konfiguriert werden. Ein anonymer Zugriff ist standardmäßig nicht möglich er muss (falls gewünscht) in der Konfigurationsdatei explizit konfiguriert werden:

allow_anonymous true