Mijn pad naar het IoT (7): De afstandsbediening die je altijd bij je hebt

13 maart 2016, 16:39
Met de mobiele MQTT-client kunnen we nu ook "on the road" schakelen.
Met de mobiele MQTT-client kunnen we nu ook "on the road" schakelen.
In het vorige deel hebben we voor het eerst een smartphone gebruikt. Het project zag er als volgt uit: Een Android-app stuurt commando’s via TCP /IP naar een PC in het huisnetwerk, waarop een MQTT-client draait. Vandaaruit gaat het via MQTT verder naar het internet, waar een andere PC met hetzelfde MQTT-programma de berichten ontvangt en via een (virtuele) COM-poort doorstuurt naar de gewenste elektronica (zie deel 6).

Zo heel erg mobiel was deze besturing natuurlijk nog niet. Om echt overal vandaan te kunnen werken, moeten we de MQTT-berichten rechtstreeks vanuit een Android-smartphone kunnen verzenden (zie afbeelding). Op de pagina’s van het Eclipse Paho-project (zie deel 4) vinden we natuurlijk ook een MQTT-client-bibliotheek voor Android; er zijn er zelfs twee. Eén Java-library zorgt voor de „basisfuncties“ van MQTT (www.eclipse.org/paho/clients/java). De andere bevat de implementatie van een Android-service, die kan worden gebruikt door de eigenlijke Messenger-applicatie om in de achtergrond MQTT-berichten te verzenden en te ontvangen (www.eclipse.org/paho/clients/android). Er zit ook een voorbeeld-applicatie in het pakket.

Helaas zijn de library en de voorbeeld-client voor Android nog met Eclipse (met Android SDK) gemaakt door de Paho-ontwikkelaars. Het Android-consortium (met andere woorden: „Google“ ) ondersteunt deze methode niet meer. Google adviseert om de moderne Android Studio te gebruiken. En juist die had ik ook al op mijn computer geïnstalleerd, maar jammer genoeg is de directory-structuur voor de Android-projectbestanden bij de invoering van de nieuwe IDE drastisch veranderd.

Maar er is toch een import-functie om Eclipse-projecten te importeren in Android Studio? Dat is waar. Maar die importfunctie ging bij het inladen van het Paho-voorbeeldproject volledig de mist in. Dat ging gepaard met allerlei cryptische foutmeldingen. De oorzaak was dat directory’s en bestanden niet (op de juiste plaats) te vinden waren.

Ik liet de Android-service voorlopig even achterwege en concentreerde me op de „eenvoudige“ Java-MQTT-client-bibliotheek, die ik (zoals op de Paho-site is te zien) met een klein eigen Android-hoofdprogramma aanstuurde. En opnieuw regende het foutmeldingen, omdat de bestanden voor de logging niet gevonden werden. Uiteindelijk kreeg ik een kleine MQTT-client, die berichten kan publiceren, aan de praat door gewoon in alle library-files het loggen even uit te commentariëren. Inmiddels heb ik trouwens nog een website gevonden, waar te zien is hoe de genoemde Android-service in Android studio kan worden meegelinkt (www.hivemq.com/blog/mqtt-client-library-enyclopedia-paho-android-service).
 Wegens tijdgebrek heb ik dit tot nu toe nog niet kunnen uitproberen.

Mijn eerste MQTT-client voor Android heeft dezelfde lay-out als de TCP -zender uit het vorige deel, alleen gebruiken we nu in plaats van het IP-adres een topic. Ik heb voor de variabelen namen gebruikt die tenminste lijken op die in de PC-implementatie. Hierbij de code die wordt aangeroepen, als we op de button „Publish“ op het mobieltje drukken:
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 zij de Paho-library kost het versturen van MQTT-berichten maar een paar regels in het programma. Het complete Android-project is te downloaden onderaan dit artikel. In het pakket is ook mijn MQTT-client voor de PC te vinden, die de berichten doorstuurt naar de eigen elektronica.

Gelukt: Met de bekende commandoreeks R 0 1 + [PUBLISH] R 0 1 – [PUBLISH] kon ik de inmiddels ook al beroemde lamp in mijn werkkamer bedienen.

In de volgende delen gaan we de besturing verder optimaliseren en ook eens kijken naar de communicatie in de omgekeerde richting. En we gaan ook enkele commerciële oplossingen bekijken en uitproberen.
Blijft u aan de lijn!
 
 
Bijlage
Firmware Software Exec icon png
MyJourneyIOT7.zip
Reacties worden ingeladen...
gerelateerde items