MQTT - Broker : Docker Setup

This page is also available in English

MQTT (Message Queuing Telemetry Transport) ist ein offenes Netzwerkprotokoll fĂŒr das Übertragen von Nachrichten zwischen GerĂ€ten. Ein MQTT-Broker, wie der Open Source Mosquitto-Server, ist eine einfache Lösung um Daten von SmartHome-GerĂ€ten zu empfangen oder diese zu steuern. Als Beispiel setze ich MQTT mit einem ESP32-Microcontroller ein, damit dieser Werte an den MQTT-Broker sendet, welche ĂŒber die MQTT-Integration in HomeAssistant abgerufen werden können. Zudem verwende ich den MQTT-Broker fĂŒr die Kommunikation meiner Zigbee-GerĂ€te ĂŒber Zigbee2MQTT, siehe: Home-Assistant Docker Conbee 2 und Zigbee2MQTT / deCONZ. 

Docker Basics

Docker ermöglicht es, Services oder Applikationen per Befehl in einem sogenannten Container zu starten.
Ein Container ist eine vom Betriebssystem (OS) unabhÀngige isolierte Umgebung:
Beim ersten Start eines Containers, lÀdt Docker selbststÀndig alle notwendigen Quellen
aus dem Internet.
Docker kann unter Windows, macOS oder einer Linux-Distribution installiert werden,
siehe auch: Docker

Wer Docker und Docker-Compose auf seinem System installiert hat, kann nach Anlage der folgenden Datei den MQTT-Broker Mosquitto starten, fĂŒrs Erste ohne den Ordner config damit wir fĂŒr MQTT ein Passwort vergeben können:

Um MQTT mittels docker compose zu starten, kann das Docker-Image mit einer simplen docker-compose.yml Datei heruntergeladen, erstellt und gestartet werden. Die Datei kann mit einem beliebigen Texteditor wie folgt befĂŒllt und dann angepasst werden:

Dateiname: docker-compose.yml, Inhalt:

version: "2"
 services:
  mosquitto:
    image: eclipse-mosquitto
    container_name: mqtt
    restart: always
    volumes:
      - ./mosquitto/data:/mosquitto/data
      - ./mosquitto/log:/mosquitto/log
    ports:
      - "1883:1883"
      - "9001:9001"

Das Beispiel verwendet Bind-Mounts und keine Docker Volumes fĂŒr das permanente Speichern der Daten. Siehe: Docker Daten speichern: Docker Volumes vs. Host-Ordner

docker-compose up startet den Container:

docker-compose up

Achtung der Ordner /mosquitto/config  und somit die Konfig-Datei: mosquitto.conf fehlt in dem docker-compose-File fĂŒrs Erste noch. Diese wird beim Starten initial erzeugt und befindet sich nur innerhalb des Containers, alle Einstellungen wĂŒrden somit beim Neustart des Containers verloren gehen. Der Container funktioniert an dieser Stelle mit den Standardeinstellungen  bereits, lĂ€sst aber sĂ€mtliche GerĂ€te ohne Passwort mit dem Broker kommunizieren:

c:\temp\mosquitto>docker-compose up
Recreating mqtt ... done
Attaching to mqtt
mqtt         | 1642331896: mosquitto version 2.0.14 starting
mqtt         | 1642331896: Config loaded from /mosquitto/config/mosquitto.conf.
mqtt         | 1642331896: Starting in local only mode. Connections will only be possible from clients running on this machine.
mqtt         | 1642331896: Create a configuration file which defines a listener to allow remote access.
mqtt         | 1642331896: For more details see https://mosquitto.org/documentation/authentication-methods/
mqtt         | 1642331896: Opening ipv4 listen socket on port 1883.
mqtt         | 1642331896: Opening ipv6 listen socket on port 1883.
mqtt         | 1642331896: Error: Address not available
mqtt         | 1642331896: mosquitto version 2.0.14 running

Damit ich fĂŒr MQTT ein Passwort vergeben kann und die Einstellungen nach dem Neustart des Containers vorhanden bleiben, habe ich mich in den Container verbunden und darin eine Passwort-Datei erzeugt:

c:\temp\mosquitto> docker exec -it mqtt sh
/ # mosquitto_passwd -b -c passwd mqtt myMQTTPassword
/ # cat passwd
mqtt:???x

Der Inhalt der Ausgabe mqtt:???, kann dann im Ordner /config in die Datei passwd gegeben werden:

Dann sollte noch eine neue Datei "mosquitto.conf" fĂŒr dir Konfiguration mit folgendem Inhalt angelegt werden:

port 1883
listener 9001
protocol websockets
persistence true
persistence_location /mosquitto/data
allow_anonymous false
password_file /mosquitto/config/passwd

Im Anschluss kann der Docker-Container gestoppt, der Ordner /mosquitto/config hinzugefĂŒgt und wieder gestartet werden:

Anpassungen an der docker-compose.yml-Datei: HinzufĂŒgen von /config:

version: "2"
services:
  mosquitto:
    image: eclipse-mosquitto
    container_name: mqtt
    restart: always
    volumes:
      - ./mosquitto/config:/mosquitto/config
      - ./mosquitto/data:/mosquitto/data
      - ./mosquitto/log:/mosquitto/log
    ports:
      - "1883:1883"
      - "9001:9001"

Ein erneuter Start des Containers verwendet die erstellte Konfiguration und das vergebene Passwort:

docker-compose up -d

Ein Blick in die Ausgabe des Containers (docker logs) zeigt uns den erfolgreichen Start:

c:\temp\mosquitto>docker logs mqtt -f
1642333000: mosquitto version 2.0.14 starting
1642333000: Config loaded from /mosquitto/config/mosquitto.conf.
1642333000: Opening websockets listen socket on port 9001.
1642333000: Opening ipv4 listen socket on port 1883.
1642333000: Opening ipv6 listen socket on port 1883.
1642333000: mosquitto version 2.0.14 running

siehe, Home-Assistant Docker Conbee 2 und Zigbee2MQTT / deCONZ

Anzeige der Verbindungen: Logs

In den Docker-Logs kann die Verbindung einzelner GerÀte beobachtet werden:

docker logs mqtt -f
1641494340: New connection from 172.22.0.4:44135 on port 1883.
1641494340: New client connected from 172.22.0.4:44135 as ?????? (p2, c1, k60, u'mqtt').
1641494608: Client ??? closed its connection.
1641496053: Saving in-memory database to /mosquitto/data/mosquitto.db.

 

positive Bewertung({{pro_count}})
Beitrag bewerten:
{{percentage}} % positiv
negative Bewertung({{con_count}})

DANKE fĂŒr deine Bewertung!

Aktualisiert: 20.09.2022 von Bernhard 🔔


Top-Artikel in diesem Bereich


ioBroker installieren - Docker
Mit ioBroker können verschiedene Automatisierungslösungen oder GerÀte in einem System zusammengefasst werden. Um bestimmte Gateways oder GerÀte ansprechen zu können, werden in ioBroker verschiedene Adapter verwendet.

Smart-Home-Plattform - Systeme: ioBroker vs. Home-Assistant
FĂŒr die Heim-Automatisierung gibt es neben zahlreichen verschiedenen Standards eine große Menge an verschiedenen Plattformen. Open Source Plattformen bieten dabei oft die Möglichkeit, verschiedene Automatisierungs-Standards miteinander zu verbinden. Als Beispiel könnte ein kleiner Mini-Computer, ein Raspberry Pi oder ein NAS, ausgestattet mit mehreren EmpfĂ€ngern, verschiedene Automatisierungs-Lösungen ĂŒber eine Plattform steuern.

Zigbee2MQTT vs deCONZ und Phoscon
Sowohl Phoscon als auch Zigbee2MQTT sind Programme fĂŒr das Steuern eines Zigbee-Gateways, wie den Conbee 2. Die primĂ€re Aufgabe eines Zigbee-Gateway ist das Verbinden und zentrale Steuern von Zigbee-Devices. Nach anfĂ€nglichen Schwierigkeiten mit der StabilitĂ€t, hat Phoscon bei mir zuletzt relativ gut funktioniert, dennoch bin ich nach ĂŒber einem Jahr deCONZ und Phoscon auf Zigbee2MQTT umgestiegen. Mit ein Grund fĂŒr den Umstieg war ein Dimmer-Switch, welche...

Fragen / Kommentare


(sortiert nach Bewertung / Datum) [alle Kommentare(neueste zuerst)]

✍anonym
02.12.2022 22:20
Guten Abend,
ich bin bislang noch nicht angemeldet auf Ihrer Seite, möchte aber trotzdem mal (zuerst) meinen Dank aussprechen fĂŒr diese Anleitung. Ich bin soweit, dass Portainer das mqtt-image als "running" ausweisst... ;)
Meine Frage ist folgende: In Homeassistant werde ich nei der MQTT-Integration nach "server" und nach "Benutzernamen" und seinem Passwort gefragt. Letzteres habe ich (wobei ich "mosquitto_passwd -b -c passwd mqtt myMQTTPassword" so interpretiert habe, dass myMQTTPassword durch mein eigenes ersetzt werden musste).
Wie aber ist der Name des Servers, und wie heisst der Benutzer?
Besten Dank vorab von einem Einsteiger,
Klaus

Durch die weitere Nutzung der Seite stimmst du der Verwendung von Cookies zu Mehr Details