This commit is contained in:
Thomas Kruse
2026-02-03 22:29:46 +01:00
commit 8fdf5827e4
156 changed files with 23069 additions and 0 deletions

View File

@ -0,0 +1,7 @@
services:
mosquitto:
image: eclipse-mosquitto
ports:
- "1883:1883"
volumes:
- ./mosquitto.conf:/mosquitto/config/mosquitto.conf:ro

46
02-mqtt5/lab01/lab.txt Normal file
View File

@ -0,0 +1,46 @@
= Session Expiration
Subscriben Sie mit `mosquitto_sub` als MQTT 5 Client (`-V 5`) mit fester ID, QoS 1, ohne Clean-Session und 10 Sekunden Expiration (`-x 10`) das Topic `demo/session`
Beenden Sie den Subscriber, beobachten Sie die mosquitto Logausgabe.
("p"rotokoll version, "c"lean session, "k"eepalive)
$ docker run --rm -it --net host eclipse-mosquitto \
mosquitto_sub --topic demo/session -V 5 --id demo --qos 1 --disable-clean-session -x 10
CTRL-C
Publishen Sie eine QoS 1 Nachricht auf das Topic.
$ docker run --rm -it --net host eclipse-mosquitto \
mosquitto_pub --topic "demo/session" --qos 1 --message "Demo message"
Starten Sie den Subscriber neu
$ docker run --rm -it --net host eclipse-mosquitto \
mosquitto_sub --topic demo/session -V 5 --id demo --qos 1 --disable-clean-session -x 10
Wiederholen Sie den Vorgang, warten jedoch weniger als 10 Sekunden.
$ docker run --rm -it --net host eclipse-mosquitto \
mosquitto_sub --topic demo/session -V 5 --id demo --qos 1 --disable-clean-session -x 10
CTRL-C
$ docker run --rm -it --net host eclipse-mosquitto \
mosquitto_pub --topic "demo/session" --qos 1 --message "Demo message"
$ docker run --rm -it --net host eclipse-mosquitto \
mosquitto_sub --topic demo/session -V 5 --id demo --qos 1 --disable-clean-session -x 10
Bonus: Untersuchen Sie mittels Netzwerkanalyse, wie `mosquitto_sub` sich verhält,
wenn keine Expiration Time, aber `--disable-clean-session` gesetzt ist.
$ sudo tshark -s 1500 -i lo -n -x -O mqtt port 1883
$ docker run --rm -it --net host eclipse-mosquitto \
mosquitto_sub --topic demo --id demo --qos 1 -V 5 --disable-clean-session

View File

@ -0,0 +1,4 @@
listener 1883
allow_anonymous true
# sys_interval 3

View File

@ -0,0 +1,7 @@
services:
mosquitto:
image: eclipse-mosquitto
ports:
- "1883:1883"
volumes:
- ./mosquitto.conf:/mosquitto/config/mosquitto.conf:ro

31
02-mqtt5/lab02/lab.txt Normal file
View File

@ -0,0 +1,31 @@
= Message Expiration
Aufbau einer QoS 1 Session durch Subscriber und Verbindungsabbau.
$ docker run --rm -it --net host eclipse-mosquitto \
mosquitto_sub --topic demo --id demo --qos 1 -V 5 --disable-clean-session --debug
CTRL-C
Versand einer Nachricht mit Expiration durch MQTT 5 Publisher und
Fortsetzung der Session durch Client innerhalb und nach der Zeitspanne.
$ docker run --rm -it --net host eclipse-mosquitto \
mosquitto_pub --topic "demo" --qos 1 -V 5 \
--property publish message-expiry-interval 10 --message "Demo message"
$ sleep 6; docker run --rm -it --net host eclipse-mosquitto \
mosquitto_sub --topic demo --id demo --qos 1 -V 5 --disable-clean-session --debug
Was passiert, wenn der Subscriber MQTT 3.x verwendet?
$ docker run --rm -it --net host eclipse-mosquitto \
mosquitto_sub --topic demo --id demo --qos 1 --disable-clean-session --debug
$ docker run --rm -it --net host eclipse-mosquitto \
mosquitto_pub --topic "demo" --qos 1 -V 5 \
--property publish message-expiry-interval 10 --message "Demo message"
$ docker run --rm -it --net host eclipse-mosquitto \
mosquitto_sub --topic demo --id demo --qos 1 --disable-clean-session --debug

View File

@ -0,0 +1,4 @@
listener 1883
allow_anonymous true
# sys_interval 3

View File

@ -0,0 +1,7 @@
services:
mosquitto:
image: eclipse-mosquitto
ports:
- "1883:1883"
volumes:
- ./mosquitto.conf:/mosquitto/config/mosquitto.conf:ro

13
02-mqtt5/lab03/lab.txt Normal file
View File

@ -0,0 +1,13 @@
= Reason Codes
Provozieren Sie einen Fehler durch Senden einer QoS 1 Nachricht auf ein
Broker Topic, z.B. `$SYS/demo`.
$ docker run --rm -it --net host eclipse-mosquitto \
mosquitto_pub -V 5 --id demo --qos 1 --topic '$SYS/demo' --message hi --debug
Vergleichen Sie das Verhalten bei MQTT 5 vs. 3.x
$ docker run --rm -it --net host eclipse-mosquitto \
mosquitto_pub --id demo --qos 1 --topic '$SYS/demo' --message hi --debug

View File

@ -0,0 +1,4 @@
listener 1883
allow_anonymous true
# sys_interval 3

View File

@ -0,0 +1,7 @@
services:
mosquitto:
image: eclipse-mosquitto
ports:
- "1883:1883"
volumes:
- ./mosquitto.conf:/mosquitto/config/mosquitto.conf:ro

23
02-mqtt5/lab04/lab.txt Normal file
View File

@ -0,0 +1,23 @@
= Response-Topic
Lassen Sie sich von `mosquitto_rr` die Hilfe ausgeben.
$ docker run --rm -it --net host eclipse-mosquitto \
mosquitto_rr --help
Topic `services/temp_query` soll für Anfragen dienen.
$ docker run --rm -it --net host eclipse-mosquitto \
mosquitto_sub -V 5 --topic services/temp_query --debug
Antwort soll auf das jeweils mitgeteilte Topic gesendet werden, 20 Sekunden Timeout
$ docker run --rm -it --init --net host eclipse-mosquitto \
mosquitto_rr --id demo --topic services/temp_query \
--message celsius -e reply/demo -W 20 --debug
$ docker run --rm -it --net host eclipse-mosquitto \
mosquitto_pub -V 5 --topic reply/demo --message "19.3"

View File

@ -0,0 +1,4 @@
listener 1883
allow_anonymous true
# sys_interval 3

View File

@ -0,0 +1,7 @@
services:
mosquitto:
image: eclipse-mosquitto
ports:
- "1883:1883"
volumes:
- ./mosquitto.conf:/mosquitto/config/mosquitto.conf:ro

21
02-mqtt5/lab05/lab.txt Normal file
View File

@ -0,0 +1,21 @@
= Shared Subscription
Erstellen Sie einen Publisher, der alle 2 Sekunden nach `output/demo` Werte sendet.
$ docker run --rm -it --init --net host eclipse-mosquitto \
mosquitto_pub -V 5 --topic output/demo --repeat 100 --repeat-delay 2 --message 'input'
Verwenden Sie zunächst eine Gruppe aus zwei Konsumenten.
$ docker run --rm -it --net host eclipse-mosquitto \
mosquitto_sub --id consumer-1 --topic '$share/group1/output/demo'
$ docker run --rm -it --net host eclipse-mosquitto \
mosquitto_sub --id consumer-2 --topic '$share/group1/output/demo'
Ergänzen Sie eine zweite Gruppe mit einem Konsumenten
$ docker run --rm -it --net host eclipse-mosquitto \
mosquitto_sub --id consumer-3 --topic '$share/group2/output/demo'

View File

@ -0,0 +1,4 @@
listener 1883
allow_anonymous true
# sys_interval 3