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 interessiert den MQTT Anwender dann nicht mehr. 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 kann dann etwas Großes oder Kleines sein. Etwas großes wäre der dicke Server im Keller. Etwas kleines wäre z.B. ein Raspberry Pi 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 und Termux:Boot im Playstore.

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.

Messgeräte direkt mit einem WLAN zu verbinden ist Industrie 4.0.

In der industriellen Umgebung sind verschiedene Netzwerke oft in Sub-Netzwerke getrennt.  Dies dient der Sicherheit, der besseren Wartbarkeit und Übersichtlichkeit des Netzwerks. Die Verbindungen der Netzwerke untereinander werden dann über Router, Firewalls und Gateways geregelt.

Es gibt hier eine reihe angebotener Produkte, welche die Aufgaben erfüllen. Am Einfachsten sind Geräte aus dem Home- oder Consumer-Bereich: Diese Geräte sind sehr günstig und erfüllen die Aufgabe oft zufriedenstellend. Als Nachteile dieser Produktgruppe sind jedoch zu sehen, dass oft

  • die Verarbeitung nur mittelmäßig ist.
  • die Produktzyklen sehr schnell sind und keine Ersatzteillieferung gewährleistet ist.
  • die Montagemöglichkeiten nicht für industriellen Einsatz geeignet sind.
  • keine zufriedenstellende Remote-Administration möglich ist.

Weiter gibt es dann Router für den industriellen Einsatz. Diese sind sicherlich brauchbar. Der Nachteil hier ist, dass für diese Geräte gerne Preise abgerufen werden, welche den Anwender nicht unbedingt glücklich machen. Beispiele hierfür sind die Industrial Router Produkte von Phoenix Contact: Router – FL MGUARD 1102 – 1153079, Router – Phoenix FL MGUARD 1105 – 1153078 oder TC ROUTER 3002T-4G.

Doch auch bei diesen Geräten besteht der Nachteil, dass es geschlossene Systeme sind: Der Anwender hat nicht die vollständige Kontrolle dessen, was auf dem Gerät vor sich geht. Er ist vom Hersteller abhängig. Änderungen oder Erweiterungen an der Software sind nicht vorgesehen.

Doch es gibt Alternativen welche auf der Hand liegen: Linux als freies System bietet nahezu unbegrenzte Möglichkeiten dessen, was auf einem Rechner oder Router passiert. Zudem gibt es inzwischen eine große Anzahl an Hardware-Implementierungen, welche für Linux geeignet sind.

Eine sehr populäre und sehr langlebige Plattform für Linux Hardware ist Raspberry. Es liegt also fast nichts näher, als diese Plattform für einen industriellen Router zu nutzen.

Entsprechend haben wir einen auf Raspberry basierenden Industrierechner realisiert um unsere Messgerät-Module für WLAN mit dem Internet oder dem Firmennetzwerk über einen Router oder eine Firewall zu verbinden.

Ein „normaler“ Raspberry hat entweder eine LAN oder eine W-LAN Schnittstelle. Sind mehrere Netzwerke anzubinden kommt dieser günstige und bewährte Rechner jedoch schnell an seine Grenzen.

Unser Industrierechner bietet hier mehr: Mindestens 2 LAN Schnittstellen und oder LAN und WLAN Schnittstelle ermöglichen es, Netzwerke einfach und sicher miteinander zu verbinden. Zusätzlich kann auf dem Rechner auch gleich der MQTT Broker betrieben werden.

Industrierechner auf Raspberry Basis mit mehr als 2 Netzwerkschnittstellen

Zum Betrieb von IIoT Devices eignen sich Raspberry Pi Computer für verschiedene kleine und große Aufgaben.

Zum Beispiel um eine Netzwerkbrücke bereitzustellen oder um einen kleinen MQTT Server oder auch anderen Server zu betreiben.

Durch den Einsatz des Linux Betriebssystem stehen eine große Anzahl an Programmen und Funktionen bereit, um dieses Gerät mit Software zu bestücken.
Die OpenSource Philosophie stellt sicher, dass Investitionen in Software und Hardware langfristig verfügbar bleiben.

Prinzipiell lässt sich ein Raspberry PI gut erweitern. Ein gewisser Nachteil ist, dass zunächst nur die Raspberry Platine einheitlich ist. Die Ein- und Anbauteile sind relativ spezifisch. Wenn diese an einem Standard Raspberry Pi Gehäuse extern angebracht werden entsteht schnell eine wilde Landschaft von Modulen, welche mehr oder weniger lose mit dem Raspberry verbunden sind.

Um diese Erweiterungen industrietauglich zu machen haben wir alle für unsere Anforderungen benötigten Module in ein Gehäuse gepackt.

Das Gehäuse kann entweder frei positioniert, verschraubt oder auf eine 35mm DIN Hutschiene montiert werden.

Das Innenleben ist modular und kann dynamisch für die entsprechende Anforderung erweitert werden.

Möglich sind:

  • bis zu 7 USB Schnittstellen.
  • bis zu 3 Netzwerkkarten
  • Externer WLAN-Accesspoint (WLAN SMA oder WLAN RP-SMA Anschluß).
  • serielle Schnittstellen (RS232/RS485/RS422)
  • I²C oder SPI Schnittstellen
  • Serielles Terminal (RX/TX-Connector)
  • HDMI Monitor Anschluss

Ein Alleinstellungsmerkmal dieses Einplatinencomputers auf Raspberry Pi Basis ist die Verlötung aller relevanten Module. Durch den Verzicht auf  Steckverbindungen fallen schlechte Verbindungen als Ausfallursache des Moduls aus. Wir halten unser entwickeltes Modul daher für sehr robust und sehr ausfallsicher.

Auch für diesen Rechner verfolgen wir unsere agile Entwicklung und agile Fertigungsstrategie: Das Gehäuse ist konsequent in 3D gedruckt und es kommen nur Standardbauteile zum Einsatz.

Mögliche Funktionen:

  • Industrial Router / IP forwarding
  • Industrial Firewall (ufw, iptables)
  • Network Bridge
  • DNS Server
  • DHCP Server
  • Proxy Gateway
  • MQTT Broker
  • M2M Interface
  • Webserver

Es können hier nur einige exemplarische Funktionen genannt werden. Es ist alles möglich, was Linux auf dieser Hardware bietet.

Das Technische Handbuch und die Bedienungsanleitung der Raspberry Bridge kann hier heruntergeladen werden.

Online-Shop

Sie können dieses Produkt direkt in unserem Online-Shop kaufen:

Gehe zum Shop

Rechtliches

Raspberry Pi ist ein eingetragenes Warenzeichen der RASPBERRY PI FOUNDATION. Wir stehen in keiner Verbindung zu dieser Stiftung – setzen aber sehr gerne die von ihnen entwickelten Computer ein.

Kontakt

rAAAreware GmbH – Steigerweg 49 – D-69115 Heidelberg – tel 06221 136110 – e-mail: info@raaareware.de