Installation und Betrieb eines MQTT Brokers (MQTT Server) auf dem Android Betriebssystem

Einleitung

Die Kommunikation bei MQTT wir über einen zentralen Server abgewickelt.
Dieser Server steht normalerweise im „Backend“: Über eine Adresse ist er bekannt – alles weitere ist für den MQTT Anwender dann nicht mehr interessant. In der Praxis läuft dieser Server (MQTT Broker genannt) dann entweder in der Cloud – also einem entfernten Dienst eines Dienstleisters oder auf einem eigenen Server. Der eigene Server ist meist ein großer Server im Serverschrank des Backends. Ein Server kann aber genauso gut ein Raspberry Pi sein, welcher mit Open-Software ausgestattet z.B. lokal in einer Fertigungsanlage oder in der Linie positioniert ist.

Eine Übersicht über solche klassische MQTT Infrastruktur-Szenarien haben wir Im Artikel „Möglichkeiten einer IoT MQTT Infrastruktur zusammengestellt.

Es ist jeweils für den aktuellen Anwendungsfall zu entscheiden was das zweckmäßigste ist.
Normal ist jedoch, dass viele MQTT Devices über diesen Server kommunizieren und ihre Daten bereitstellen, abrufen und austauschen.

Nun kommen wir zum nicht normalen Fall: Es gibt Anwendungsfälle, in welchen schlicht kein klassischer Server gewünscht ist. Zum Beispiel soll eine lokale IoT Device Messwerte an ein Smartphone oder Tablet liefern die dort dann angezeigt und gespeichert werden. Dies ist die für MQTT einfachste Konfiguration. In der vor Industrie 4.0 Zeit hätte hier dann vielleicht auch anstatt einem IoT Device auch nur ein Gerät mit Bluetooth oder Zigbee Verwendung gefunden.

Der Einsatz von MQTT bietet jedoch auch in diesem einfachen Anwendungsfall einige Vorteile:

  • deutlich stabilere Funkverbindung und höhere Reichweite (100-300m statt 3-10m!).
  • keine umständliche Kopplung bei Gerätewechel notwendig.
  • einheitliche Weiterverarbeitung der Daten über den offenen MQTT Standard.

Für uns als MQTT Messgerätehersteller (WLAN Handmessmittel) stellte sich für dieses Szenario die Aufgabe einen MQTT Broker auf einem Android Betriebssystem zu betreiben. Dieser Fachartikel beschreibt die Analyse der Möglichkeiten und zeigt eine einfache Lösung des Problems. Die Lösung besteht darin, einen quelloffenen und verbreiteten Linux MQTT Broker auf einem Android Device zu betreiben. Dieser Broker kann dann direkt auf dem Smartphone oder Tablet von einer lokalen Anwendung angesprochen werden um die Messwerte zu verarbeiten.

Vorhandene MQTT Broker

Eine Liste der wesentlichen MQTT Broker-Implementationen ist auf Github zu finden.

Es ist nicht weiter verwunderlich, dass hier kein Broker für Android zu finden ist, da Android ein Client-Betriebssystem ist – und ein MQTT Broker eben eine Server Anwendung.

Eine Suche im Google Playstore listet zwar einige MQTT Broker auf – diese haben jedoch keine allzu guten Reputationen. Unsere Versuche mit diesen Brokern blieben Versuche: Von einem ernsten industriellen Einsatz raten wir ab. Zu unstabil, mit Werbung versehen und fragwürdige Herkunft bei geschlossenen Quellen sind keine Basis für einen industriellen Einsatz.

Der wahrscheinlich am häufigsten verwendete MQTT Broker ist der Mosquitto Broker der Eclypse Foundation. Dieser Broker läuft auf einigen Betriebssystemen – ab liebsten und häufigsten sicherlich auf Linux.

Android ist wie gesagt ein Client-Betriebssystem und der Betrieb eines Servers ist dort nicht unbedingt vorgesehen. Da Android jedoch nicht mehr als ein modifiziertes Linux ist kann der Weg zu einem Linux Server nicht all zu weit sein.

Die Lösung sieht also folgendermaßen aus und ist entsprechend einfach:
Wir installieren eine Linux-Terminal Emulation auf Android. In dieser Emulation können wir dann den Linux MQTT Broker installieren und betreiben.

Mosquitto MQTT Broker Installation auf Android

Hier also die Schritt-für-Schritt Anleitung zur Installation.

Alle eingesetzten Produkte sind OpenSource Programme und kostenlos verfügbar. Die Quellen aller Programme sind frei verfügbar. Alle Programme sind keine Exoten sondern von einer großen Gemeinschaft professionell entwickelte Produkte.

Installation von Termux

Das Programm Termux wird installiert.
Empfohlen über F-Droid oder Google Playstore.

Wenn F-Droid für die Installation gewählt wurde müssen auch die unten aufgeführten Zusatzmodule unter F-Droid installiert werden. Gleiches gilt für den Google Playstore. Die Termix-Installationen müssen also alle aus dem gleichen Store kommen – ansonsten werden Sie in verschiedenen Bereichen installiert und finden sich nicht gegenseitig.


Abhängig von der geplanten Betriebsweise werden zudem Zusatzmodule von Termux benötigt: Soll der Broker über ein Symbol auf dem Startbildschirm (Application Launcher) gestartet werden wird das Zusatzmodul Termux:Widget benötigt. Soll der Broker bei jedem Start des Gerätes automatisch gestartet werden benötigen wir das Modul Termux:Boot. Die Links zu den Modulen in den Android-Anwendungsstores:
Widget: Termux:Widget in F-Droid und Termux:Widget im Playstore.
Boot: Termux:Boot in F-Droid.

Installation von Mosquitto

Nach der Installation von Termux wird Termux geöffnet / ausgeführt.

Es erscheint eine Eingabeaufforderung. Hier können nun die weiteren Befehle eingegeben werden. Zur Installation von Mosquitto reicht eine Zeile (Return nach der Eingabe):

pkg install mosquitto

Eventuelle Nachfragen alle einfach mit „Return“ bestätigen: Wir benötigen keine besonderen Einstellungen.

Weiter benötigen wir später noch einen Text-Editor, also installieren wir diesen:

pkg install nano

Optional kann natürlich auch ein anderer Editor installiert werden oder mit den entsprechenden Kenntnissen ein Android-Editor verwendet werden.

Ausführen des MQTT Brokers

Damit der Broker einfach ausgeführt werden kann, legen wir entweder eine Verknüpfung auf dem Startbildschirm an oder veranlassen Termux das Laden des Dienstes direkt beim Systemstart.

MQTT Broker über Startsymbol starten

Im Termux Terminal geben wir ein:

mkdir -p $HOME/.shortcuts
nano $HOME/.shortcuts/mosquitto.sh

Im Nano Texteditor dann

mosquitto

Abgeschlossen mit einem „Return“. Den Editor dann mit Strg-X und „Y“ beenden und speichern.

Abschliessend

chmod +x $HOME/.shortcuts/mosquitto.sh

eingeben, damit das Script die Berechtigungen zum Ausführen erhält.

Nun sollte im Android Launcher ein Widget mit dem Namen „Termux“ vorhanden sein. Dieses kann nun auf den Startbildschirm positioniert werden. Nach Auswahl des Widgets kann das angelegte Script „mosquitto.sh“ ausgewählt werden. Dieses Script ist nun dem Widget zugeordnet. Bei jedem Start über das Symbol wird also das Script ausgeführt, welches wiederum den Mosquitto Server ausführt.
Detailinfos zum Widget auf der Termux:Widget Wiki Seite.

Wenn Android Widgets völlig fremd sind hilft eine Suche zu allgemeinen Widget Themen.

MQTT Broker beim Android Systemstart starten

Die oben schon installierte Termux:Boot Anwendung muss nach der Installation einmalig gestartet werden damit die Anwendung sich als Boot-Dienst registriert.

Anschliessend legen wir analog zum Widget-Start ein Mosquitto Start Script im dafür vorgesehenen Verzeichnis ab. Im hier gezeigten Beispiel fügen wir noch die Zeile „termux-wake-look“ ein: Diese verhindert, dass Android in den Standby-Modus wechselt, so dass unser Broker durchgehend läuft.

Im Termux Terminal geben wir ein:

mkdir ~/.termux/boot
nano ~/.termux/boot/mosquitto.sh

Im Nano Texteditor dann

#!/data/data/com.termux/files/usr/bin/sh
termux-wake-lock
mosquitto

Abgeschlossen mit einem „Return“. Den Editor dann mit Strg-X und „Y“ beenden und speichern.

Diese Datei wird nun über Termux:Boot beim Systemstart geladen und ausgeführt und sollte den Mosquitto Broker starten.

Über die rAAAreware GmbH

Die rAAAreware GmbH ist ein Dienstleister für IT und Elektronik und ein Hersteller für IoT Devices. Neben Erfahrungen mit vielen Industrie- und Automotive-Protokollen wie CAN, CCP und OPC haben wir uns in den letzten Jahren bei M2M Protokollen immer mehr auf MQTT spezialisiert. Neben der Entwicklung und dem Vertrieb unserer eigenen Produkte unterstützen wir Firmen beim Aufbau und Betrieb einer MQTT Infrastruktur und bieten Entwicklungsarbeiten für IIoT Devices.

Rechtliches

Bluetooth ist eine eingetragene Marke der Bluetooth SIG, Inc.
Wi-Fi ist eine eingetragene Marke der Wi-Fi Alliance.