Suche
Desktopanwendung für MQTT

MQTT.fx: GUI-Tool powered by JavaFX

Jens Deters
jens_deters_mqtt.fx_05_executescript_witheditor
MQTT.fx (Quelle: Jens Deters)

Message Queue Telemetry Transport (MQTT) ist auf dem besten Weg, eines der Standard-Verbindungsprotokolle für M2M bzw. das Internet of Things (IoT) zu werden. Eclipse Paho stellt hierzu in diversen Sprachen u. A. Client-Implementierung zur Kommunikation mit den MQTT-Kommunikationszentralen, den so genannten Brokern (z.B. mosquitto, HiveMQ, RabbitMQ, ActiveMQ), zur Verfügung. MQTT.fx ist eine neue, auf JavaFX und Paho basierende Desktopanwendung für MQTT, die im Folgenden näher vorgestellt wird.

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

Wer es aber grafisch und etwas komfortabler bevorzugt, kann hier auch MQTT.fx einsetzen. Das Tool ist mit der aktuellen Version 0.0.8 noch recht jung, wird aber beständig weiterentwickelt und hat bereits einen Funktionsumfang, der einen sinnvollen praktischen Einsatz erlaubt:

  • Profile für Brokerverbindungen
  • Unterstützung für SSL/TLS
  • Publish und Subscribe
  • Nashorn Engine Scripts: Leicht erweiterbare Schnittstelle für geskriptetes „publishen“
  • Auswertung von $SYS-Topics (mosquitto und HiveMQ)
  • Native Installationspakete für alle Plattformen

Profile für Brokerverbindungen

Verschiedenste Brokerverbindungen werden über Profile definiert und über den vergebenen Namen auswählbar gemacht. Profile werden in der Konfiguration für die weitere Verwendung gespeichert. Damit kann z.B. über zwei Profile derselbe Broker mit und ohne SSL/TLS getestet werden. Jeweils für jedes Profil werden auch die benutzten Topics abgelegt.

connection profiles

Unterstützung für SSL/TLS

Die Brokerverbindung kann auch über SSL, bzw. TLS gesichert erfolgen. Dabei können zur Zeit zu verwendende Zertifikate direkt angegeben oder die gewünschten Zertifikate aus übergebenen Keystores gelesen werden.

„Publish“ und „Subscribe“

Ist die Verbindung zum Broker aufgebaut, kann über Publish und Subscribe dem eigentlichen MQTT-Handwerk nachgegangen werden. Dabei werden abonnierte Topics auch automatisch im Dropdown zum Senden zur Verfügung gestellt.

 Nachrichten versenden

In beiden Fällen werden die Topics in der Applikationskonfiguration persistiert und stehen beim nächsten Start der Anwendung wieder bereit. Abonnierte Topics werden farbig markiert und empfangene Nachrichten zur leichteren Zuordnung entsprechend der Topicfarbe gekennzeichnet.

Nachrichtenfluss

„Scripts“: JavaScript-Skripte via Nashorn Engine ausführen

MQTT.fx hat eine Schnittstelle für geskriptetes Senden von MQTT-Messages. Es ist damit möglich, z.B. das Verschicken von Messdaten echter Sensoren zu simulieren, um zu testen, ob und wie die Daten bei der erfassenden Instanz ankommen und verarbeitet werden.

Genutzt wird dabei die Nashorn Engine, die JavaScript Programme ausführt und seit Java 8 zu dem Bordmitteln gehört. Innerhalb des Scripts kann mittels des gebundenen mqttManager-Objekts über die bestehende Brokerverbindung „gepublished“ werden.

Damit Skripte in der Oberfläche sichtbar sind und zur Ausführung gebracht werden können, müssen diese lediglich im (von der Setup-Routine automatisch angelegten) Skripte-Ordner abgelegt werden

  • OS X: [USER_HOME]/Library/Application Support/MQTT-FX/scripts
  • Windows: [USER_HOME]AppDataLocalMQTT-FXscripts
  • Linux: [USER_HOME]/MQTT-FX/scripts

und einer bestimmten Namenskonvention folgen: [INDEX]__[NAME].js

Dabei gilt:

  • [INDEX] bestimmt die Reihenfolge im Drop-Down-Menu
  • „__“ ist der Trenner zwischen Index und Name
  • [NAME] ist der Name des Menüeintrags. Dabei werden die Unterstriche durch Leerzeichen ersetzt.

Beispiel:

01__Switch_Fountain_Test.js

Das wird dann in der Anwendung im Menü an erster Stelle stehen und „Switch Fountain Test“ heißen.

Skripte bereitstellen

auswahl von skripten

Bei gleichem Index gilt dann übrigens der darauf folgende Name als Reihenfolgekriterium.

Beim Start der Anwendung wird das „scripts“ Verzeichnis ausgewertet und Skripte können dann ausgewählt und ausgeführt werden. Dabei wird System.out „gekapert“ und dessen Ausgabe in die Konsole der GUI umgelenkt. Informationen können durch das Skript dann über System.out.println() ausgegeben werden.

ausführen und editieren

Übrigens: Wenn ein Standard-Editor für die Bearbeitung von *.js Dateien auf dem Desktop-System definiert ist, kann das Skript durch Edit mit diesem bearbeitet werden. Die Änderungen sind bei der nächsten Ausführung wirksam, da die Skripte jeweils immer neu geladen werden.

„Broker Status“: Auswertung von $SYS-Topics

Einige Broker senden über eine $SYS-Topic-Hierarchie eigene Statusinformationen, z.B. Versionsinformationen über das Topic $SYS/broker/version oder die Uptime über $SYS/broker/timestamp. Diese $SYS-Topics variieren etwas je nach Broker. Im Moment werden hier von MQTT.fx mosquitto und HiveMQ unterstützt.

broker status

Native Installationspakete für OS X, Windows und Linux verfügbar

Für alle gängigen OS-Plattformen stehen Installationspakete bereit (dmg, msi, exe, deb, rpm). Diese Pakete sind mit dem seit JavaFX 2.2 eingeführten „Native Packaging“ erstellt und mit ca. 60MB (180MB nach der Installation) relativ groß. Dabei ist die Größe aber dem Umstand geschuldet, dass das passende Java-Runtime-Environment gleich mitgeliefert wird. Somit ist es nicht nötig ein systemweites JRE zu installieren. Alternativ kann auch die ungebundelte Version bezogen werden, die etwa 15MB umfasst (lauffähig mit JRE 8u11).

Nach der Installation richtet die Anwendung beim ersten Start alles Nötige ein, um sofort loslegen zu können: Es wird eine Konfiguration mit Beispiel-Profilen erstellt. und es wird auch der Skripte-Ordner angelegte und ein Demo-Skript bereitgestellt. Installationspakete für Version 0.0.8 können hier geladen werden

Geschrieben von
Jens Deters
Jens Deters
Jens Deters arbeitet in Erlangen als Senior Software Entwickler im flugbehördlichen Bereich mit Schwerpunkt auf Java Swing- und JSF-Benutzerschnittstellen. Daneben beschäftigt er sich intensiv mit JavaFX und Java Embedded. Er ist Mitglied der JavaFX- und IoT-Community und veröffentlicht regelmäßig Beiträge zum Thema in seinem Blog unter www.jensd.de und www.jfx4ee.org.  Projekte: FontAwesomeFX, MQTT.fx, picmodo, adm4ee
Kommentare

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht.