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, Applikationen per Befehl in einem sogenannten Container zu starten.
Ein Container ist eine vom Betriebssystem (OS) unabhängige isolierte Umgebung:
Das OS spielt also keine Rolle, vorausgesetzt Docker lässt sich installieren.
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:

docker-compose.yml:

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"

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 wir für MQTT ein Passwort vergeben können 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:xxxx

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

Dann noch eine neue Datei mit der Konfiguration: mosquitto.conf mit folgendem Inhalt:

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 xxxxxx (p2, c1, k60, u'mqtt').
1641494608: Client xxx 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!


Top-Artikel in diesem Bereich

Preview Smart-Home-Plattform - Systeme: ioBroker vs. Home-Assistant

Smart-Home-Plattform - Systeme: ioBroker vs. Home-Assistant

geändert: 05.05.2021 von Bernhard (Erstveröffentlichung: 05.11.2020)

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

Preview ioBroker installieren - Docker

ioBroker installieren - Docker

geändert: 12.11.2020 von Bernhard (Erstveröffentlichung: 06.11.2020)

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

Preview Home-Assistant Docker Conbee 2 und Zigbee2MQTT / deCONZ

Home-Assistant Docker Conbee 2 und Zigbee2MQTT / deCONZ

geändert: 10.08.2022 von Bernhard (Erstveröffentlichung: 06.11.2020)

Dank zahlreicher Integrationsmöglichkeiten ist Home-Assistant eine einfache Plattform für das Steuern verschiedenster Smart-Home Geräte. Im Vergleich zu ioBroker ist mir der Start mit Home Assistant wesentlich einfacher gefallen. Während ich für ioBroker noch am Suchen war, welches Frontend ich für meine Dashboards verwenden könnte, hatte ich mit Home-Assistant out of the box ein fertig eingerichtetes System. Die Lovelance Dashboards von Home Assistant können einfach in der GUI zusammengeklickt... ... weiterlesen


Fragen / Kommentare


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