MQTT.fx: Grafisches Werkzeug zum MQTT-Debugging

5 Kommentare

Bereits Ende der 1990er Jahre entwickelte IBM an einem sehr schlanken und einfachen Kommunikationsprotokoll zur Überwachung von Ölpipelines. Aus diesem Bestreben ist MQTT  (Message Queue Telemetry Transport) entstanden, das sich nun im Zuge des Internet der Dinge wachsender Beliebtheit erfreut. Ende letzten Jahres ist MQTT in der Version 3.1.1. von der Standardisierungsorganisation OASIS dann auch als offizieller Standard verabschiedet worden.

Für die Nutzung von MQTT in Applikationen stellt z. B. Eclipse Paho in diversen Sprachen aktuelle Client-Implementierungen zur Kommunikation mit den MQTT-Kommunikationszentralen, den so genannten Brokern (z. B. mosquitto, HiveMQ, RabbitMQ, ActiveMQ), zur Verfügung.

Für das Testen und Debugging von MQTT-Kommunikation gibt es zahlreiche Werkzeuge. Das auf JavaFX und Eclipse Paho basierende Tool MQTT.fx wird im folgenden Artikel näher vorgestellt.

MQTT in a Nutshell

Ganz allgemein betrachtet ist MQTT ein asynchrones, TCP-basiertes Client/Broker-Publish/Subscribe-Protokoll. Dabei haben Nachrichten einen nur etwa 2 Byte großen Header, und der Rest ist dann Payload, wobei es keine Rolle spielt, ob dieser z. B. reiner Text oder Binärcode ist.

Eine Message Queue hat einen eindeutigen Namen („topic“). Dabei können Queue-Namen auch mit „/“ getrennt werden und damit Hierarchien abbilden, z. B. „home/outdoors/garden/terrace/lights“. An einer solchen Queue können sich Clients zum Nachrichtenempfang bestimmter Topics anmelden („subscribe“) und Nachrichten, z. B. mit Sensorwerten, die an diese Topics gesandt („publish“) werden, empfangen.

MQTT.fx

Projekte und Systeme, die auf MQTT aufbauen, können optional über die Konsole getestet werden. Der Open Source Broker mosquitto bringt hier beispielsweise die Commandline-Tools „mosquitto_pub“ und „mosquitto_sub“ mit, mit deren Hilfe Nachrichten gesendet und empfangen werden können.

Wer es aber grafisch, komfortabler und wiederverwendbar bevorzugt, kann hier auch die JavaFX-basierte Desktopanwendung MQTT.fx einsetzen,  an der ich seit geraumer Zeit beständig arbeite und die ich im Folgenden näher vorstellen möchte.

mqttfx_gui_main

Bisher stellt MQTT.fx folgende Funktionen zur Verfügung:

  • Verbindungsprofile für Brokerverbindungen
  • Ad-hoc-Verbindungen
  • Security (Benutzername/Passwort, Unterstützung für SSL/TLS)
  • Publish und Subscribe mit voller Unterstützung von Wildcard-Pattern und Topic-Historie.
  • Ablage für vordefinierte Nachrichten
  • Nashorn Engine Scripts: Schnittstelle für geskriptetes „publish“ und „subscribe“
  • Auswertung von $SYS-Topics (mosquitto und HiveMQ)
  • Logging-Konsole
  • Proxy Support
  • Native Installationspakete für alle Plattformen
  • Regelmäßige Updates/Fehlerbehebungen
  • Prüfung auf verfügbare Updates beim App-Start
  • „Free as free beer“ (noch nicht OpenSource)

Das Hauptfenster stellt im oberen Bereich Funktionen zur Wahl eines Verbindungsprofils sowie Connect- und Disponent-Buttons bereit.

Für die einzelnen Anwendungsfälle gibt es jeweils Tabs, die sich per Drag & Drop auch vom Hauptfenster in separate Fenster lösen lassen. Damit kann z. B. ein „Publish“-Fenster neben ein „Subscribe“-Fenster gestellt werden. Wird ein solches Fenster geschlossen, kehrt das Tab wieder an seine ursprüngliche Position zurück.

mqttfx_detached_tabs

Profile für Brokerverbindungen

Unterschiedliche Setups für Brokerverbindungen werden über Profile definiert und gespeichert.
Diese Profile können jederzeit angepasst und über den vergebenen Namen ausgewählt werden. Damit kann z. B. über zwei Profile derselbe Broker mit und ohne SSL/TLS oder User-Credentials getestet werden.
Der Profileditor kann entweder via „Extras/Connection Profiles“, Tastaturkürzel oder über das Zahnradsymbol neben der Profilauswahl geöffnet werden.

mqttfx_connectionprofiles_1

Neben Daten wie Brokeradresse/-port, ClientID und generellen Einstellungen wie „clean session“ oder die MQTT-Version können hier auch Benutzernamen/Passwort, TLS/SSL Settings sowie Proxy- und Last-Will-Daten hinterlegt werden.
Zudem werden jeweils für jedes Profil die benutzten Topics (für Publish/Subscribe) sowie die Nachrichten, die auf der Ablage abgelegt wurden, gespeichert und geladen.

mqttfx_connectionprofiles_2

Verbindung zum Broker

Für eine Brokerverbindung wird das gewünschte Profil gewählt, und ein Klick auf „Connect“ startet den Verbindungsaufbau.mqttfx_connect Der Verbindungsindikator am rechten Fensterrand zeigt dann den Status an:

Grün für „verbunden“, Schloss offen: keine Verbindungsverschlüsselung:

mqttfx_connected_secured_small

Schloss geschlossen: TLS/SSL

mqttfx_connected_unsecured_small

Statt der Verbindung über ein gewähltes Profil kann auch eine Ad-hoc-Verbindung unter Angabe von Brokeradresse und -port hergestellt werden.

mqttfx_connect_ad-hoc

„Publish“ und „Subscribe“

Ist die Verbindung zum Broker aufgebaut, kann über Publish und Subscribe dem eigentlichen MQTT-Handwerk nachgegangen werden.
Benutzte Topics werden in der Applikationskonfiguration persistiert und stehen beim nächsten Start der Anwendung im Drop-Down bereit.
Abonnierte Topics werden farbig markiert und empfangene Nachrichten zur leichteren Zuordnung entsprechend der Topicfarbe gekennzeichnet. Die jeweilige Farbe für ein Topic kann bei Bedarf angepasst werden und wird auch in der Konfiguration gespeichert.

Jens Deters

Etwa 25 Jahre ist es her, dass Jens Deters mit dem Home-Computing begonnen hat. Damals zogen ihn Computer in ihren Bann, und die letzten 15 Jahren hatte er verschiedenste Rollen im IT- und Telekommunikationsumfeld inne (Software Entwickler, Trainer, Berater, Projekt- und Produktmanager). Heute arbeitet er bei codecentric als Senior IT Consultant. Er schreibt regelmäßig über seine Projekte (www.jensd.de, www.mqttfx.org) und trägt zur JavaFX- und IoT-Community bei. Jens ist Mitglied des NetBeans Dream Teams.

Share on FacebookGoogle+Share on LinkedInTweet about this on TwitterShare on RedditDigg thisShare on StumbleUpon

Kommentare

  • Richard Amschild

    6. Januar 2016 von Richard Amschild

    Hallo Herr Deters, beim installieren von MQTT.fx (mqttfx-1.0.0-64bit.deb) unter xubuntu erhielt ich folgende Fehlermeldung vom Software-Center: „Dieses Paket ist von schlechter Qualität. Lintian check results for /home/gerald/junk/downloads/mqttfx-1.0.0-64bit.deb:
    E: mqttfx: maintainer-address-malformed Jens Deters “

    Habe es aber trotzdem installiert, macht abgesehen von der Meldung einen guten ersten Eindruck.

    • Jens Deters

      6. Januar 2016 von Jens Deters

      Vielen Dank, das freut mich!
      Ja, an der Linux-Paketqualität muss ich noch etwas arbeiten, das wird sich mit den nächsten Releases verbessern!

  • Richard Amschild

    6. Januar 2016 von Richard Amschild

    … obwohl: den Speicherort der Konfigurationsdateien möchte ich mir noch selber aussuchen können. Ansonsten läuft es prima. Danke!

  • Sebastian

    22. Juni 2017 von Sebastian

    Hallo! Ich versuche über ein Script die funktionalität des rekursiven Löschens hinzuzufügen. Ich kann zwar mqttManager.subscribe() ausführen, es gibt aber keinen Callback für eingehende Nachrichten.
    Ist sowas nicht möglich?

    • Jens Deters

      26. Juni 2017 von Jens Deters

      Hallo Sebastian,

      im Moment wird beim Aufruf von mqttManager.subscribe() eine Subscription im „Subscribe“-Tab angelegt. Nachrichten. die dann auf das Topic eingehen, werden dann hier angezeigt.
      Bisher habe ich nicht vorgesehen, JavaScript callbacks aus einem Script zu verwenden.
      Ist es in deinem Fall vielleicht einfacher, sowas extern, als eigenständiges Programm/Script zu implementieren?

      Jens

Kommentieren

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.