MQTT: Unterschied zwischen den Versionen

Aus
Wechseln zu: Navigation, Suche
(Installation auf Docker)
(Installation auf Docker)
 
(2 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 6: Zeile 6:
 
  http://www.neuendorf-online.de/blog/heimautomatisierung/mqtt-broker-mosquitto-installieren/
 
  http://www.neuendorf-online.de/blog/heimautomatisierung/mqtt-broker-mosquitto-installieren/
  
=== Installation auf Docker ===
+
=== Leer ===
Alles klar! Hier ist die **gleiche Anleitung in einem einfachen, WIKI-freundlichen Format** – ohne Tabellen, ohne Emojis, ohne HTML, nur Klartext mit sauberen Überschriften, Absätzen und Listen.
 
  
---
+
== MQTT Broker mit Mosquitto im Docker-Container installieren (Variante: docker run) ==
  
# MQTT Broker (Mosquitto) im Docker-Container installieren – Variante: docker run
+
=== Ziel ===
 +
Diese Anleitung beschreibt die Einrichtung eines Mosquitto MQTT Brokers in Docker mit folgenden Eigenschaften:
  
## Ziel
+
* Benutzer-Authentifizierung für 6 Benutzer (root, user1–user5)
 +
* Mehrere Listener:
 +
** Port 1883 (MQTT Standard)
 +
** Port 1884 (z. B. für interne Kommunikation)
 +
** Port 9001 (WebSocket)
 +
* Sicherheitskonfigurationen
 +
* Persistenz & Logging
  
Diese Anleitung beschreibt die Installation und Konfiguration des Mosquitto MQTT Brokers in einem Docker-Container mit folgenden Merkmalen:
+
=== Verzeichnisstruktur vorbereiten ===
 +
Erzeuge folgende Verzeichnisse im gewünschten Projektordner:
  
* Benutzer-Authentifizierung (User: root, user1–user5)
+
<pre>
* Drei Listener:
 
 
 
  * Port 1883 (Standard MQTT)
 
  * Port 1884 (zusätzlicher Port, z. B. für intern)
 
  * Port 9001 (WebSocket)
 
* Logging, Persistenz, Konfigurationsdateien
 
 
 
## Verzeichnisstruktur
 
 
 
Erstelle einen Ordner zur Ablage aller Konfigurations- und Persistenzdaten:
 
 
 
```bash
 
 
mkdir -p mosquitto/config
 
mkdir -p mosquitto/config
 
mkdir -p mosquitto/data
 
mkdir -p mosquitto/data
 
mkdir -p mosquitto/log
 
mkdir -p mosquitto/log
```
+
</pre>
  
## Mosquitto-Konfigurationsdatei
+
=== Konfigurationsdatei: mosquitto.conf ===
 +
Pfad: <code>mosquitto/config/mosquitto.conf</code>
  
Lege die Datei `mosquitto/config/mosquitto.conf` mit folgendem Inhalt an:
+
<pre>
 
 
```
 
 
persistence true
 
persistence true
 
persistence_location /mosquitto/data/
 
persistence_location /mosquitto/data/
Zeile 61: Zeile 55:
 
allow_anonymous false
 
allow_anonymous false
 
password_file /mosquitto/config/passwd
 
password_file /mosquitto/config/passwd
```
+
</pre>
  
Hinweis: Wenn `allow_anonymous false` gesetzt ist, müssen sich alle Clients mit Benutzername und Passwort anmelden.
+
'''Hinweis''': <code>allow_anonymous false</code> erzwingt Authentifizierung.
  
## Benutzer anlegen
+
=== Benutzer erstellen ===
 +
Verwende das Tool <code>mosquitto_passwd</code>, um die Passwortdatei anzulegen:
  
Die Passwörter werden mit dem Tool `mosquitto_passwd` erzeugt.
+
<pre>
 
 
Erzeuge eine neue Passwortdatei mit dem Benutzer `root`:
 
 
 
```bash
 
 
mosquitto_passwd -c mosquitto/config/passwd root
 
mosquitto_passwd -c mosquitto/config/passwd root
```
 
 
Füge weitere Benutzer hinzu:
 
 
```bash
 
 
mosquitto_passwd mosquitto/config/passwd user1
 
mosquitto_passwd mosquitto/config/passwd user1
 
mosquitto_passwd mosquitto/config/passwd user2
 
mosquitto_passwd mosquitto/config/passwd user2
Zeile 83: Zeile 69:
 
mosquitto_passwd mosquitto/config/passwd user4
 
mosquitto_passwd mosquitto/config/passwd user4
 
mosquitto_passwd mosquitto/config/passwd user5
 
mosquitto_passwd mosquitto/config/passwd user5
```
+
</pre>
  
Falls das Tool lokal nicht verfügbar ist, kannst du stattdessen einen temporären Container verwenden:
+
Falls <code>mosquitto_passwd</code> nicht installiert ist:
  
```bash
+
<pre>
 
docker run --rm -it -v $(pwd)/mosquitto/config:/mosquitto eclipse-mosquitto \
 
docker run --rm -it -v $(pwd)/mosquitto/config:/mosquitto eclipse-mosquitto \
 
   mosquitto_passwd -c /mosquitto/passwd root
 
   mosquitto_passwd -c /mosquitto/passwd root
```
+
</pre>
  
Für weitere Benutzer dann:
+
=== Docker-Container starten ===
 +
Führe folgenden Befehl aus:
  
```bash
+
<pre>
docker run --rm -it -v $(pwd)/mosquitto/config:/mosquitto eclipse-mosquitto \
 
  mosquitto_passwd /mosquitto/passwd user1
 
```
 
 
 
## Mosquitto-Container starten
 
 
 
```bash
 
 
docker run -d \
 
docker run -d \
 
   --name mosquitto \
 
   --name mosquitto \
Zeile 111: Zeile 91:
 
   -v $(pwd)/mosquitto/log:/mosquitto/log \
 
   -v $(pwd)/mosquitto/log:/mosquitto/log \
 
   eclipse-mosquitto
 
   eclipse-mosquitto
```
+
</pre>
  
## Verbindung testen
+
=== Verbindung testen ===
 +
==== Mit mosquitto_sub / mosquitto_pub ====
  
Verbindung über Kommandozeile mit `mosquitto_sub` und `mosquitto_pub`:
+
<pre>
 +
mosquitto_sub -h localhost -p 1883 -t test/topic -u root -P <passwort>
 +
mosquitto_pub -h localhost -p 1883 -t test/topic -m "Hallo MQTT" -u user1 -P <passwort>
 +
</pre>
  
```bash
+
==== WebSocket-Test ====
# Client subscribt auf Topic
+
 
mosquitto_sub -h localhost -p 1883 -t test/topic -u root -P <passwort>
+
Verbindung über WebSocket (z. B. mit MQTT Explorer, MQTT.fx):
  
# Nachricht senden
+
* Host: <code>localhost</code>
mosquitto_pub -h localhost -p 1883 -t test/topic -m "Hallo MQTT" -u user1 -P <passwort>
+
* Port: <code>9001</code>
```
+
* Protokoll: <code>ws://</code>
 +
* Pfad: <code>/</code> (Standard)
  
WebSocket-Verbindung (z. B. mit MQTT Explorer oder Webclient):
+
=== Wichtige mosquitto.conf Optionen ===
  
* Host: localhost
+
{| class="wikitable"
* Port: 9001
+
! Option !! Bedeutung
* Protokoll: `ws://`
+
|-
* Benutzername und Passwort: erforderlich
+
| <code>persistence true</code> || speichert MQTT-Nachrichten (bei QoS > 0) dauerhaft
 +
|-
 +
| <code>allow_anonymous false</code> || erzwingt Benutzeranmeldung
 +
|-
 +
| <code>password_file</code> || Pfad zur Passwortdatei
 +
|-
 +
| <code>listener</code> || konfiguriert verschiedene Ports
 +
|-
 +
| <code>protocol websockets</code> || aktiviert WebSocket-Kommunikation
 +
|-
 +
| <code>log_dest</code> / <code>log_type</code> || Logging für Fehler und Diagnosen
 +
|}
  
## Container stoppen und löschen
+
=== Container stoppen und löschen ===
  
```bash
+
<pre>
 
docker stop mosquitto
 
docker stop mosquitto
 
docker rm mosquitto
 
docker rm mosquitto
```
+
</pre>
  
## Optional: ACLs (Zugriffsrechte pro Benutzer)
+
=== Optional: ACL für Benutzerrechte ===
 +
In <code>mosquitto.conf</code> hinzufügen:
  
Wenn bestimmte Benutzer nur auf bestimmte Topics zugreifen dürfen, kann eine ACL-Datei definiert werden.
+
<pre>
 
 
Erweiterung in der `mosquitto.conf`:
 
 
 
```
 
 
acl_file /mosquitto/config/acl
 
acl_file /mosquitto/config/acl
```
+
</pre>
  
Beispiel für die Datei `mosquitto/config/acl`:
+
Beispiel für Datei <code>acl</code>:
  
```
+
<pre>
 
user root
 
user root
 
topic readwrite #
 
topic readwrite #
Zeile 160: Zeile 153:
 
user user2
 
user user2
 
topic read sensor/temperature
 
topic read sensor/temperature
```
+
</pre>
 
 
---
 
 
 
Wenn du möchtest, kann ich dir dieses Setup auch als Downloadpaket (ZIP) vorbereiten oder ein Beispiel für einen Client (Python, Arduino, Node-RED) liefern.
 
  
 
== FMEM ==
 
== FMEM ==

Aktuelle Version vom 13. Juni 2025, 12:19 Uhr

MQTT.org

http://mqtt.org/

Mosquitto

MQTT Broker Mosquitto installieren

http://www.neuendorf-online.de/blog/heimautomatisierung/mqtt-broker-mosquitto-installieren/

Leer

MQTT Broker mit Mosquitto im Docker-Container installieren (Variante: docker run)

Ziel

Diese Anleitung beschreibt die Einrichtung eines Mosquitto MQTT Brokers in Docker mit folgenden Eigenschaften:

  • Benutzer-Authentifizierung für 6 Benutzer (root, user1–user5)
  • Mehrere Listener:
    • Port 1883 (MQTT Standard)
    • Port 1884 (z. B. für interne Kommunikation)
    • Port 9001 (WebSocket)
  • Sicherheitskonfigurationen
  • Persistenz & Logging

Verzeichnisstruktur vorbereiten

Erzeuge folgende Verzeichnisse im gewünschten Projektordner:

mkdir -p mosquitto/config
mkdir -p mosquitto/data
mkdir -p mosquitto/log

Konfigurationsdatei: mosquitto.conf

Pfad: mosquitto/config/mosquitto.conf

persistence true
persistence_location /mosquitto/data/

log_dest file /mosquitto/log/mosquitto.log
log_type error
log_type warning
log_type notice
log_type information

listener 1883
allow_anonymous false
password_file /mosquitto/config/passwd

listener 1884
allow_anonymous false
password_file /mosquitto/config/passwd

listener 9001
protocol websockets
allow_anonymous false
password_file /mosquitto/config/passwd

Hinweis: allow_anonymous false erzwingt Authentifizierung.

Benutzer erstellen

Verwende das Tool mosquitto_passwd, um die Passwortdatei anzulegen:

mosquitto_passwd -c mosquitto/config/passwd root
mosquitto_passwd mosquitto/config/passwd user1
mosquitto_passwd mosquitto/config/passwd user2
mosquitto_passwd mosquitto/config/passwd user3
mosquitto_passwd mosquitto/config/passwd user4
mosquitto_passwd mosquitto/config/passwd user5

Falls mosquitto_passwd nicht installiert ist:

docker run --rm -it -v $(pwd)/mosquitto/config:/mosquitto eclipse-mosquitto \
  mosquitto_passwd -c /mosquitto/passwd root

Docker-Container starten

Führe folgenden Befehl aus:

docker run -d \
  --name mosquitto \
  -p 1883:1883 \
  -p 1884:1884 \
  -p 9001:9001 \
  -v $(pwd)/mosquitto/config:/mosquitto/config \
  -v $(pwd)/mosquitto/data:/mosquitto/data \
  -v $(pwd)/mosquitto/log:/mosquitto/log \
  eclipse-mosquitto

Verbindung testen

Mit mosquitto_sub / mosquitto_pub

mosquitto_sub -h localhost -p 1883 -t test/topic -u root -P <passwort>
mosquitto_pub -h localhost -p 1883 -t test/topic -m "Hallo MQTT" -u user1 -P <passwort>

WebSocket-Test

Verbindung über WebSocket (z. B. mit MQTT Explorer, MQTT.fx):

  • Host: localhost
  • Port: 9001
  • Protokoll: ws://
  • Pfad: / (Standard)

Wichtige mosquitto.conf Optionen

Option Bedeutung
persistence true speichert MQTT-Nachrichten (bei QoS > 0) dauerhaft
allow_anonymous false erzwingt Benutzeranmeldung
password_file Pfad zur Passwortdatei
listener konfiguriert verschiedene Ports
protocol websockets aktiviert WebSocket-Kommunikation
log_dest / log_type Logging für Fehler und Diagnosen

Container stoppen und löschen

docker stop mosquitto
docker rm mosquitto

Optional: ACL für Benutzerrechte

In mosquitto.conf hinzufügen:

acl_file /mosquitto/config/acl

Beispiel für Datei acl:

user root
topic readwrite #

user user1
topic readwrite sensor/temperature

user user2
topic read sensor/temperature

FMEM

WIKI Mosquitto

https://wiki.fhem.de/wiki/MQTT_Einf%C3%BChrung

MQTT in FHEM einrichten und verwenden

http://www.kriwanek.de/index.php/de/homeautomation/zentrale/fhem/244-mqtt-in-fhem-einrichten-und-verwenden
Raspberry Pi: MQTT Server mosquitto installieren und Daten in Fhem über MQTT empfangen oder “Wie werte ich Haustür klingeln aus?” 
http://blog.wenzlaff.de/?p=6487
https://github.com/georgehahn/charlotte
https://wiki.fhem.de/wiki/MQTT_Einf%C3%BChrung

Arduino

Arduino-MQTT

https://github.com/256dpi/arduino-mqtt
https://www.smarthome-tricks.de/allgemein/nodemcu-esp8266-sensoren-an-iobroker-ueber-mqtt/

.Net

https://code.msdn.microsoft.com/M2Mqtt-MQTT-client-library-ac6d3858/view/Discussions#content
http://www.firewing.info/pmwiki.php?n=FirewingUser.MQTT
http://www.firewing.info/forum/

MQTT OpenHab

https://onesmarthome.de/smart-home-openhab-2-mqtt-mosquitto/


== Beispiele ==
mosquitto_pub -h 192.168.0.40 -p 1883 -u admin -p axxxx -t Modul/3/Test -m 32
mosquitto_pub -h 192.168.0.40 -p 1883 -u admin -p axxxx -t Modul/2/In/R/1 -m ON
mosquitto_pub -h 192.168.0.40 -p 1883 -u admin -p axxxx -t Modul/2/In/R/1 -m OFF
/ESPEASY-LoLin-110_110/SET/GPIO/4   0
/ESPEASY-LoLin-110_110/SET/GPIO/4   1

/ESPEASY-LoLin-110_110/SET/GPIO/15  0
/ESPEASY-LoLin-110_110/SET/GPIO/15  1
/ESPEASY-LoLin-110_110/GET/LED-G/State
/ESPEASY-LoLin-110_110/GET/Relais/State

Python MQTT Einführungstutorial

https://smarthome-blogger.de/blog/tutorial/python-mqtt-tutorial

MQTTX

 docker pull emqx/emqx:latest
 docker run -d --name emqx   -p 1883:1883 -p 8083:8083   -p 8084:8084 -p 8883:8883   -p 18083:18083   -v $PWD/data:/opt/emqx/data   -v $PWD/log:/opt/emqx/log   emqx/emqx:latest
 docker pull emqx/mqttx-web:latest

Mosquitto 2.0 MQTT Broker mit Management Dashboard

https://wiki.instar.com/de/Frequently_Asked_Question/Mosquitto_2.0_with_Management_Dashboard/