2024-07-11
Mosquitto ist ein MQTT-Broker.
Homepage https://projects.eclipse.org/projects/iot.mosquitto
Achtung: Die MQTT und Websocket Verbindungen sind unsicher, da der anonyme Zugang erlaubt wurde und auch keine Verschluesselung (SSL/TLS) verwendet wurde! Somit ist diese Konfiguration nur zum Ueben und Testen in einem lokalen Netz geeignet!
Installation auf PC unter Linux
sudo apt install mosquitto
Nach der Installation läuft der Broker bereits.
Ich verwende zum Test den in Go geschriebenen MQTT Client
mqttcli
. Dieses Programm vereint die Funktionalität der
beiden Programm mosquitto_sub
und
mosquitto_pub
in einem einzigen Werkzeug. Natürlich könnte
man auch die beiden mosquitto Tools zum Test nehmen.
Github Repo für mqttcli
: https://github.com/shirou/mqttcli
Auf github findet man unter “Releases” eine ausführbare Datei zum Download.
Zum Test Client lokal starten (mit Ctrl-C beenden):
hhoegl@znano:~$ mqttcli sub -d -t hello/world
INFO[0000] Broker URI: tcp://localhost:1883
INFO[0000] Topic: hello/world
INFO[0000] connecting...
INFO[0000] client connected
<blockiert>
Die mosquitto Konfigurationsdatei ist hier:
/etc/mosquitto/mosquitto.conf
In diese die folgenden Zeilen einfuegen, sonst kann man sich nicht von einem anderen Rechner aus verbinden:
listener 1883
password_file /etc/mosquitto/passwd
allow_anonymous true
Falls man auch Websockets aktivieren moechte, dann muss man noch zusaetzlich die folgenden Zeilen einfuegen:
listener 8080
protocol websockets
Eine leere Passwort-Datei anlegen:
$ sudo touch /etc/mosquitto/passwd
Falls man Änderungen an den Konfigurationsdateien macht sollte man immer den MQTT Broker neu starten mit dem folgenden Kommando:
systemctl restart mosquitto.service
Quelle: https://cedalo.com/blog/enabling-websockets-over-mqtt-with-mosquitto/ (verwendet den MQTT Explorer).
Den Mosquitto Server mit systemd verwalten
Service neu starten:
systemctl restart mosquitto.service
Status abfragen
systemctl status mosquitto.service
Stoppen mit
systemctl stop mosquitto.service
Starten mit
systemctl start mosquitto.service
Logdatei anschauen
sudo less /var/log/mosquitto/mosquitto.log
Clients mosquitto_pub
,
mosquitto_sub
apt install mosquitto-clients
Beispiel
In den folgenden Beispielen muss natürlich ihre IP Adresse angepasst werden!
Terminalfenster 1:
$ mqttcli sub --host 192.168.178.89 -d -t hello/world
Terminalfenster 2:
$ mqttcli pub --host 192.168.178.89 -d -t hello/world -m "Hello from Terminal window 2!"
Nun verwende ich nicht mehr mqttcli
sondern testweise
das mqttx-cli
Werkzeug, das es unter https://mqttx.app/cli gibt.
Das ist ein freies Kommandozeilenwerkzeug das MQTT 5.0 unterstützt. Es
gibt auch ein GUI Programm unter https://mqttx.app.
Mit mqttx-cli
sehen die Kommandozeilen in etwa so aus
(Die Debug-Option heisst hier --debug
):
$ mqttx-cli sub -h 192.168.178.89 -t hello/world
$ mqttx-cli pub -h 192.168.178.89 -t hello/world -m "Hello from Terminal window 2!"
Mit mosquitto_sub/pub
würden die Kommandozeilen ähnlich
aussehen:
$ mosquitto_sub -d -t hello/world
$ mosquitto_pub -d -t hello/world -m "Hello from Terminal window 2!"
Hilfe zu mosquitto
(man pages)
man mosquitto
SEE ALSO
mqtt(7), mosquitto-tls(7), mosquitto.conf(5), hosts_access(5), mosquitto_ctrl(1),
mosquitto_passwd(1), mosquitto_pub(1), mosquitto_rr(1), mosquitto_sub(1), libmosquitto(3)
Das mqttx-cli
Tool kann auch MQTT über Websockets. Hier
ist eine Demo:
$ mqttx-cli --version │
1.10.0 │INFO[0000] Broker URI: tcp://192.168.178.89:1883
https://mqttx.app/changelogs/v1.10.0
# Websocket connection
$ mqttx-cli conn -l ws -h 192.168.178.89 -p 8080
# Websocket (-l ws), mosquitto is configured with port 8080
$ mqttx-cli sub -l ws -p 8080 -h 192.168.178.89 -t hello/world
# Publisher can send eith with mqtt or ws protocol
$ mqttx-cli pub -h 192.168.178.89 -t hello/world -m "Hello from Terminal window 2!"
$ mqttx-cli pub -l ws -p 8080 -h 192.168.178.89 -t hello/world -m "Hello from Terminal window 2!"
Pub/sub mit Python
Abschliessend ist hier noch ein Publisher und ein Subscriber, beide sind in Python geschrieben: