Zum Inhalt

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:


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.

  1. Ersten Benutzer anlegen (-c erzeugt die Datei neu):

    docker compose run --rm mosquitto mosquitto_passwd -c /mosquitto/config/passwd admin
    
  2. 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
    
  3. Rechte der Dateien passwd und acl setzen, 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 acl auf 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

  1. Starten Sie den Broker im Ordner mosquitto/:

    docker compose up -d
    
  2. Prüfen Sie die Ausgabe:

    docker compose logs -f mosquitto
    

    Die Meldung Opening ipv4 listen socket on port 1883 zeigt, 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.

  1. 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.

  2. Ergänzen Sie config/mosquitto.conf:

    listener 8883
    certfile /mosquitto/config/certs/server.crt
    keyfile /mosquitto/config/certs/server.key
    
  3. Ergänzen Sie in docker-compose.yml unter ports den 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

  1. Legen Sie in der audako Plattform eine neue Datenverbindung an, wählen Sie die Datenquelle Ihres audako Edgegateways und den Typ „Mqtt“ aus.

  2. Tragen Sie unter „Erweiterte Einstellungen“ ein:

    • URL: mqtt://ip-des-servers:1883 (bzw. mqtts://ip-des-servers:8883 mit TLS)
    • Benutzername: edgegateway
    • Passwort: das Passwort des Benutzers edgegateway
  3. 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

  1. Legen Sie ein Signal an und wählen Sie die MQTT Datenverbindung aus.

  2. Tragen Sie als Adresse das Topic ein, z.B. anlage1/sensor01/temperatur. Für JSON-Nachrichten und weitere Optionen siehe Signal - MQTT.

  3. 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 edgegateway das Topic laut acl lesen 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 Client adk_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.