In der letzten Folge kam zum ersten Mal ein Smartphone zum Einsatz. Das Projekt sah so aus: Eine Android-App übermittelt Befehle via TCP/IP an einen PC im Heimnetzwerk, auf dem ein MQTT-Client läuft. Von dort es geht es über MQTT weiter ins Internet, wo ein anderer PC mit demselben MQTT-Programm die Nachrichten empfängt und per (virtuellem) COM-Port an beliebige Elektronik weiterleitet (Folge 6).

So richtig mobil war diese Steuerung freilich noch nicht. Dazu müssten wir MQTT-Nachrichten direkt vom Android-Smartphone absetzen können (siehe Bild). Auf den Seiten des Eclipse Paho Projekts (Folge 4) findet man natürlich auch eine MQTT-Client-Bibliothek für Android; genau genommen sind es sogar zwei. Eine Java-Library ist für die MQTT-„Grundfunktionen“ zuständig (www.eclipse.org/paho/clients/java). Eine weitere implementiert einen Android-Service, der von der eigentlichen Messenger-Applikation genutzt werden kann, um im Hintergrund MQTT-Nachrichten empfangen und senden zu können (www.eclipse.org/paho/clients/android). Im Paket ist auch eine Beispiel-Applikation enthalten.

Bibliothek und Beispiel-Client für Android sind von den Paho-Entwicklern leider noch mit Eclipse (mit Android SDK) erstellt worden. Vom Android-Konsortium (vereinfachend kann man hier auch „Google“ sagen) wird dieser Weg nicht mehr unterstützt. Google empfiehlt, das moderne Android Studio zu benutzen. Genau dieses hatte auch ich schon auf meinem Rechner installiert. Leider hat sich die Verzeichnis-Struktur, in der die Android-Projekt-Dateien abgelegt werden, mit Einführung der neuen IDE grundlegend geändert.

Ich weiß, was Sie sagen wollen: Natürlich bietet Android Studio eine Import-Funktion für Eclipse-Android-Projekte und -Bibliotheken an. Die Importfunktion versagte beim Einladen des Paho-Beispielprojekts allerdings völlig. Recht kryptische Fehlermeldungen waren die Folge; die Ursache war, dass Verzeichnisse und Dateien nicht (am richtigen Ort) gefunden wurden.

Ich gab den Android-Service erst einmal auf und wandte mich der „einfachen“ Java-MQTT-Client-Bibliothek zu, die ich (wie auf der entsprechenden Paho-Seite gezeigt) mit einem eigenen kleinen Android-Hauptprogramm ansprach. Auch hier hagelte es Fehlermeldungen, da Dateien fürs Logging nicht gefunden wurden. Ich bekam einen kleinen MQTT-Client, der Nachrichten publizieren kann, schließlich zum Laufen, indem ich in allen Library-Files das Mitloggen einfach auskommentierte. Inzwischen habe ich übrigens noch eine Webseite gefunden, die zeigt, wie der besagte Android-Service in Android Studio eingebunden werden kann (www.hivemq.com/blog/mqtt-client-library-enyclopedia-paho-android-service). Aus Zeitgründen konnte ich dies bisher aber noch nicht ausprobieren.

Mein erster MQTT-Client für Android hat dasselbe Layout wie der TCP-Sender aus der letzten Folge, nur dass wir jetzt statt der IP-Adresse ein Topic wählen können. Ich habe überdies zumindest ähnliche Variablennamen wie bei der PC-Implementierung benutzt. Hier der wesentliche Code, der aufgerufen wird, wenn der Button „Publish“ auf dem Handy betätigt wird:

String Topic = "/ElektorMyJourneyIoT/" + txtTopicPublish.getText() + "/test";
String strTextPublish = txtPublish.getText().toString();
int qos             = 2;
String broker       = "tcp://test.mosquitto.org:1883";

MqttClient mqttclient = new MqttClient(broker, clientId, null);

MqttConnectOptions connOpts = new MqttConnectOptions();
connOpts.setCleanSession(true);

mqttclient.connect(connOpts);

MqttMessage message = new MqttMessage(strTextPublish.getBytes());
message.setQos(qos);
mqttclient.publish(Topic, message);

mqttclient.disconnect();


Dank der Paho-Library benötigt das Absetzen von MQTT-Nachrichten wieder nur ein paar Programmzeilen. Das gesamte Android-Projekt ist unten downloadbar; im Paket finden Sie auch meinen MQTT-Client für den PC, der die Nachrichten zu eigener Elektronik weiterleitet.

Geschafft: Mit der Ihnen schon bekannten Befehlssequenz R 0 1 + [PUBLISH] R 0 1 – [PUBLISH] konnte ich die ebenfalls schon berühmte Lampe in meinem Home-Office schalten.

In den nächsten Folgen werden wir die Steuerung weiter optimieren und uns auch einmal um die umgekehrte Kommunikations-Richtung kümmern. Außerdem werden wir auch kommerzielle Lösungen ansehen und ausprobieren.
Bleiben Sie dran!