Build your own MQTT Broker

Aus hyperdramatik
Version vom 18. Juni 2020, 18:46 Uhr von Fabian (Diskussion | Beiträge) (→‎Senden und Empfangen von Nachrichten)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

Hier wird beschrieben, wie man Netzwerk zur Übermittlung von MQTT-Daten bauen kann. Dies kann sinnvoll sein, wenn man an entfernten Orten ohne Internet auf MQTT zur Datenübermittlung zurückgreifen will.

Tools

Rasperry Pi

Was ist ein Rasperry? Check here: https://de.wikipedia.org/wiki/Raspberry_Pi

Achtung: Rasperry Pis werden ohne Netzteil und Speicherkarte geliefert. Beim Selbstkaufen also darauf achten, einen 5V Mini-USB-Stecker und eine Mikro-SD-Speicherkarte zu Hand zu haben. Auf der Mikro-SD-Speicherkarte muss bereits ein Rasperry-Pi- Betriebssystem installiert werden. Diese Speicherkarten entweder so online kaufen oder aber via rasperry pi Imager aufsetzen.

Sobald die Speicherkarte aufgesetzt ist, wird man vom Rasperry durch das Setup geleitet. Wie das aussieht, wird hier https://projects.raspberrypi.org/en/projects/raspberry-pi-getting-started/4 gut beschrieben.

Mosquitto

Nachdem der Rasperry aufgesetzt wurde, muss das Programmpaket mosquitto installiert werden. Wichtig: Solange du mit MQTT-Dingen beschäftigt bist, ist es schlau, dieses Fenster nicht zu schließen, weil sonst bspw. eingehende Befehle nicht überprüft werden können. So, please don’t close this window. Hierzu einmal auf die Console klicken und den Befehl
sudo apt install mosquitto mosquitto-clients
Sudo steht hier für SuperUserDO und wird benutzt, um einen Nutzer mit anderen Rechten anzuweisen, etwas zu tun. apt ist die Abkürzung für das Programmpaket, install ist die Anweisung etwas zu installieren mosquitto ist das Programmpaket. Mosquitto-clients installiert neben dem mosquitto Programmpaket das client-paket aus dem Mosquitto-Programmpaket. Für den Broker wäre das nicht nötig, es macht das Testing aber leichter, weil der Broker so gleichzeitig auch Client sein kann.

Anschließend in das Terminal den Befehl
sudo systemctl enable mosquitto
eingeben. Damit ist der Broker eingerichtet. Dies kann mit folgendem Befehl überprüft werden:
sudo systemctl status mosquitto

Nachdem der Befehl eingegeben wurde, sollte man ein Feld sehen, dass in etwa so aussieht:

Mosquittotest.png

Testen & Abonnieren von Kanälen

Nun wollen wir testen, ob der Broker seine Arbeit tut. Dafür abonnieren wir zunächst einen Kanal. Dies funktioniert, solange der Broker im lokalen Netzwerk ist, über den Befehl
mosquitto_sub -h localhost -t "test/message"
Das "sub" steht dabei für subscribe, „-h localhost“ zeigt an, dass der Broker auf dem selben Device läuft und „test/message“ ist der zu abonnierende Kanalname.

Verschicken von Nachrichten innerhalb des selben Device

Um Nachrichten innerhalb des selben Systems zu verschicken, nun ein neues Terminal-Fenster öffnen und den Befehl
mosquitto_pub -h localhost -t "test/message" -m "Hello, world"

eingeben. Im ersten Fenster, das genutzt wurde, um den MQTT-Broker einzurichten, sollte nun die Nachricht Hello, world erscheinen. Hurra, it works! Yet, sort of useless. Daher next step: Von einem anderen Gerät testen.

Senden und Empfangen von Nachrichten

Mymqttscreenshot.jpeg
Mqtttest.png

Um an den eigenen MQTT-Broker zu senden, muss man dessen IP wissen. Diese kann herausgefunden werden, in dem man den Befehl
ifconfig wlan0
in die Konsole des Rasperry eingibt. In diesem Beispiel: 192.168.178.37. Rasperryip.png

Zum weiteren Test braucht man nun ein Smartphone und die Apps MQTTool (Appstore) oder MyMQTT (PlayStore). Digidigidownload that dongle! Nach dem Download einmal öffnen und die IP Adresse des Brokers im Connect-Fenster eingeben.

Nun in der App unter subscribe den Kanal „all/message“ abonnieren und unter „publish“ eine Nachricht im Kanal (oder auch topic) „all/message“ verschicken. Es kommt an? Fantastisch! Es funktioniert!

MQTT Broker beim Start des Rasperry öffnen

Bonuskapitel! Für heute sind wir müde und der Rasperry geht schlafen und wird vom Strom getrennt. Wir hätten aber gern, dass wir ihn morgen nicht nochmal an einen Bildschirm und eine Tastatur und so weiter anschließen müssen, sondern er im Headless Mode, also ohne Bildschirm, nur an den Strom kommt und der Broker läuft. (Achtung: Er kann dann seine IP-Adresse ändern, aber davon gehen wir jetzt einfach mal nicht aus.) Deswegen soll er direkt, wenn er mit dem Strom verbunden wird, Mosquitto starten. Dafür ändern wir das rc.File. Dafür ein neues Konsolen-Fenster öffnen und den Befehl

sudo nano /etc/rc.local

eingeben. Hiermit wird das rc.local File des rasperrys geöffnet. Hier können Befehle eingegeben werden, die beim Booten des rasperry ausgeführt werden. Hier also den Befehl
sudo systemctl enable mosquitto
eine Zeile über der Zeile
exit 0
(Diese Zeile niemals löschen, sonst funktioniert das Booting nicht mehr!) eingeben, ctrl O zum speichern drücken, enter zum speichern drücken. Nun wird der Befehl bei jedem Booting ausgeführt.