Wie richte ich einen eigenen MQTT-Broker (Mosquitto) ein und verbinde das audako Edgegateway?¶
Note
Hier sehen Sie, wie Sie mit Docker Compose einen eigenen Eclipse Mosquitto MQTT-Broker mit wenigen Benutzern betreiben und das audako Edgegateway über eine MQTT Datenverbindung damit verbinden. Ihre Geräte senden ihre Werte an den Broker, das audako Edgegateway abonniert diese und leitet sie als Signale an die audako Plattform weiter.
Note
Voraussetzungen:
- Ein Server mit Docker und Docker Compose
- Ein eingerichtetes audako Edgegateway mit Datenquelle, siehe Wie verknüpft man eine Datenquelle mit der audako Plattform
Benutzer planen¶
In diesem Beispiel verwenden Sie drei Benutzer:
| Benutzer | Zweck | Rechte |
|---|---|---|
admin |
Administration und Tests | Lesen und Schreiben auf allen Topics |
sensor01 |
Gerät, das Messwerte sendet | Schreiben auf anlage1/# |
edgegateway |
audako Edgegateway, das die Messwerte abonniert | Lesen von anlage1/# |
Note
Das audako Edgegateway liest über MQTT nur Werte und veröffentlicht selbst keine Nachrichten. Der Benutzer
edgegateway benötigt deshalb nur Leserechte.
Dateien anlegen¶
Legen Sie auf dem Server einen Ordner an, z.B. mosquitto/, mit folgender Struktur:
mosquitto/
├── docker-compose.yml
└── config/
├── mosquitto.conf
├── acl
└── passwd (wird im nächsten Schritt erzeugt)
docker-compose.yml¶
services:
mosquitto:
image: eclipse-mosquitto:2
container_name: mosquitto
restart: unless-stopped
ports:
- "1883:1883"
volumes:
- ./config:/mosquitto/config
- mosquitto-data:/mosquitto/data
- mosquitto-log:/mosquitto/log
volumes:
mosquitto-data:
mosquitto-log:
config/mosquitto.conf¶
Die Datei deaktiviert anonyme Verbindungen und aktiviert die Anmeldung mit Benutzername und Passwort sowie die
Rechteprüfung über die Datei acl.
persistence true
persistence_location /mosquitto/data/
log_dest stdout
listener 1883
allow_anonymous false
password_file /mosquitto/config/passwd
acl_file /mosquitto/config/acl
config/acl¶
# Administrator: Lesen und Schreiben auf allen Topics
user admin
topic readwrite #
# Gerät sensor01 darf Messwerte unter anlage1/ veröffentlichen
user sensor01
topic write anlage1/#
# audako Edgegateway darf Messwerte unter anlage1/ abonnieren
user edgegateway
topic read anlage1/#
Note
Alles, was nicht in der Datei acl erlaubt ist, lehnt Mosquitto ab.
Benutzer anlegen¶
Die Passwörter speichert Mosquitto verschlüsselt in der Datei config/passwd. Legen Sie die Benutzer im Ordner
mosquitto/ an. Sie werden jeweils nach dem Passwort gefragt.
-
Ersten Benutzer anlegen (
-cerzeugt die Datei neu):docker compose run --rm mosquitto mosquitto_passwd -c /mosquitto/config/passwd admin -
Weitere Benutzer anlegen (ohne
-c, sonst wird die Datei überschrieben):docker compose run --rm mosquitto mosquitto_passwd /mosquitto/config/passwd sensor01 docker compose run --rm mosquitto mosquitto_passwd /mosquitto/config/passwd edgegateway -
Rechte der Dateien
passwdundaclsetzen, damit nur Mosquitto sie lesen kann:docker compose run --rm mosquitto sh -c "chown mosquitto:mosquitto /mosquitto/config/passwd /mosquitto/config/acl && chmod 0700 /mosquitto/config/passwd /mosquitto/config/acl"Danach können Sie die Datei
aclauf dem Server nur noch mit Administratorrechten (z.B.sudo) bearbeiten.
Note
Einen Benutzer entfernen Sie mit mosquitto_passwd -D /mosquitto/config/passwd <benutzer>. Nach Änderungen an
passwd oder acl lädt Mosquitto die Dateien ohne Neustart neu mit:
docker compose kill -s SIGHUP mosquitto
Broker starten¶
-
Starten Sie den Broker im Ordner
mosquitto/:docker compose up -d -
Prüfen Sie die Ausgabe:
docker compose logs -f mosquittoDie Meldung
Opening ipv4 listen socket on port 1883zeigt, dass der Broker bereit ist.
Verbindung testen¶
Abonnieren Sie das Topic als edgegateway:
docker compose exec mosquitto mosquitto_sub -u edgegateway -P 'passwort-edgegateway' \
-t anlage1/sensor01/temperatur -v
Senden Sie in einem zweiten Terminal einen Testwert als sensor01:
docker compose exec mosquitto mosquitto_pub -u sensor01 -P 'passwort-sensor01' \
-t anlage1/sensor01/temperatur -m 21.5
Erscheint im ersten Terminal anlage1/sensor01/temperatur 21.5, sind Benutzer und Rechte korrekt eingerichtet.
Alternativ können Sie einen grafischen MQTT-Client wie MQTTX verwenden.
Optional: Verschlüsselte Verbindung (TLS)¶
Wenn das audako Edgegateway den Broker über das Internet erreicht, verwenden Sie eine verschlüsselte Verbindung.
-
Legen Sie Zertifikat und privaten Schlüssel des Servers unter
config/certs/ab (server.crt,server.key). Die Dateien müssen für Mosquitto lesbar sein. -
Ergänzen Sie
config/mosquitto.conf:listener 8883 certfile /mosquitto/config/certs/server.crt keyfile /mosquitto/config/certs/server.key -
Ergänzen Sie in
docker-compose.ymlunterportsden Eintrag- "8883:8883"und starten Sie den Broker neu (docker compose up -d).
Note
Die Einstellungen allow_anonymous, password_file und acl_file gelten für alle Listener. Veröffentlichen Sie
Port 1883 nur im lokalen Netzwerk, wenn Sie TLS verwenden.
audako Edgegateway verbinden¶
Datenverbindung anlegen¶
-
Legen Sie in der audako Plattform eine neue Datenverbindung an, wählen Sie die Datenquelle Ihres audako Edgegateways und den Typ „Mqtt“ aus.
-
Tragen Sie unter „Erweiterte Einstellungen“ ein:
- URL:
mqtt://ip-des-servers:1883(bzw.mqtts://ip-des-servers:8883mit TLS) - Benutzername:
edgegateway - Passwort: das Passwort des Benutzers
edgegateway
- URL:
-
Speichern Sie die Datenverbindung.
Note
Läuft das audako Edgegateway im selben Docker-Netzwerk wie der Broker, können Sie auch den Containernamen
verwenden, z.B. mqtt://mosquitto:1883.
Signal anlegen¶
-
Legen Sie ein Signal an und wählen Sie die MQTT Datenverbindung aus.
-
Tragen Sie als Adresse das Topic ein, z.B.
anlage1/sensor01/temperatur. Für JSON-Nachrichten und weitere Optionen siehe Signal - MQTT. -
Senden Sie die Konfiguration über die Interaktionen der Datenquelle an das audako Edgegateway.
Sobald sensor01 einen neuen Wert veröffentlicht, erscheint dieser am Signal in der audako Plattform.
Note
Erscheinen keine Werte, prüfen Sie:
- ob das Topic der Adresse exakt dem veröffentlichten Topic entspricht (keine Platzhalter
+/#), - ob der Benutzer
edgegatewaydas Topic lautacllesen darf, - ob der Server vom audako Edgegateway aus erreichbar ist (Firewall, Port 1883 / 8883),
- in der Ausgabe von
docker compose logs mosquitto, ob sich ein Clientadk_edgegw_…verbunden hat.
Note
Für größere Installationen mit vielen Geräten, Clustering oder Web-Oberfläche eignet sich alternativ ein Broker wie EMQX. Die Einstellungen im audako Edgegateway bleiben dabei gleich.