MQTT-Verbindungen

Hier werden bestehende MQTT-Verbindungen angezeigt. Über das Kontextmenü können Sie diese bearbeiten und löschen oder neue anlegen.

Lobster Integration fungiert immer als MQTT-Client und nicht als Server und unterstützt MQTT 3.1.1 und MQTT 5.

Siehe auch Abschnitt MQTT (Control Center).

Verbindung erstellen


(1) Alias: Diesen Alias (als Namen der Verbindung) können Sie im Eingangsagent MQTT, Antwortweg MQTT und der Funktion send MQTT message(a,b,c,d,e) verwenden.

(2) Aktiv: Nur über aktive Verbindungen (Checkbox setzen) können Nachrichten empfangen und versendet werden.

(3) Host/IP, Port: Die URL/IP und der Port des MQTT-Servers, zu dem eine Verbindung hergestellt werden soll. Wichtiger Hinweis: Lobster empfiehlt die Verwendung von HiveMQ als MQTT-Server.

(4) Ist eine SSL-Verbindung: Wenn SSL aktiv ist, wird der Keystore mit dem Client-Zertifikat im PKCS#12-Format als Datei ./conf/mqtt/<alias>/keycert.p12 erwartet. Der Truststore, der die öffentlichen Schlüssel des Servers enthält, wird als Datei ./conf/mqtt/<alias>/trustStore erwartet. Keystore und Truststore müssen mit der gleichen Passphrase (7) geschützt sein. Obfuskation ist zugelassen. Siehe auch (5).

(5) Zertifikats-Auswahl: Alternativ zur Verwendung eines Truststores, kann hier ein Zertifikat ausgewählt werden. Das Zertifikat muss die Option TLS Client gesetzt haben. Wurde eines ausgewählt, dann wird der Wert in (7) gelöscht und das Feld wird ausgeblendet.

(6) Benutzer, Kennwort: Der Benutzername und das Passwort für die Anmeldung am MQTT-Server.

(7) Passphrase für SSL Keystore: Wenn (4) gesetzt ist, aber keine Passphrase angegeben wird (und (5) nicht gesetzt ist), dann wird in der SSL-Verbindung kein Client-Zertifikat verwendet und das Server-Zertifikat nicht geprüft. Keystore und Truststore sind dann nicht nötig.

Hinweis: In den meisten Fällen wird die Option (4), also nur SSL, genügen und kein Client-Zertifikat notwendig sein.

HTTP-Requests in MQTT-Nachrichten wandeln


Es ist möglich HTTP-Requests in MQTT-Messages zu transformieren.

Sind und Zweck ist die Möglichkeit, viele HTTP-Anfragen einfach in MQTT-Messages zu verwandeln (ohne viel Logging und Jobs) und dann zusammengefasst (und evtl. gefiltert) als einen einzigen Job zu verarbeiten. Beispiel: LKWs senden alle 5 Minuten GPS-Daten. Diese möchte man für den Zeitraum von einer Stunde sammeln und dann gebündelt verarbeiten.

Servlet


Sie müssen folgendes Servlet in der Konfigurationsdatei ./etc/hub.xml einfügen, am besten vor Abschnitt <Ref id="RequestLog">.

Das Servlet wird unter dem Kontext /mqtt eingehängt, d. h. HTTP-Requests auf http(s)://<URL-oder-IP-des-Integration-Servers>/mqtt/ werden vom Servlet verarbeitet.


<Ref id="Contexts">
<Call name="addHandler">
<Arg>
<New id="mqtt" class="org.eclipse.jetty.servlet.ServletContextHandler">
<Arg type="int">1</Arg>
<Set name="contextPath">/mqtt</Set>
</New>
</Arg>
</Call>
</Ref>
<Ref id="mqtt">
<Call name="addServlet">
<Arg>
<New class="org.eclipse.jetty.servlet.ServletHolder">
<Set name="className">com.ebd.hub.datawizard.mqtt.HttpToMqtt</Set>
<Set name="name">Http2Mqtt</Set>
</New>
</Arg>
<Arg>/*</Arg>
</Call>
</Ref>

Konfigurationsdatei


Zusätzlich benötigt man eine Konfigurationsdatei ./etc/admin/datawizard/http2mqtt.properties. Dort können Request-Pfade (unterhalb von /mqtt) definiert werden und auf welchen MQTT-Alias und welches Topic umgeleitet wird.


# path=alias:topic
# where a path like /a/b/c is used as a.b.c (no leading / and all / are replaced by .)
#
# sample:
proxy.gps=proxmox:gps
proxy.gps.separator=##new message##


Hier werden also HTTP-Requests (GET und POST) auf Pfad /mqtt/proxy/gps umgewandelt in MQTT-Nachrichten auf Topic gps des MQTT-Servers unter dem Alias proxmox.

Mit dem Eintrag <path>.separator (hier proxy.gps.separator) wird die angegebene Zeile (+NL) vor den Nutzdaten eingefügt. Das ist nützlich, wenn man im MQTT-Eingangsagenten Nachrichten sammeln möchte (um erkennen zu können, was die Einzelnachrichten sind).

Beispiel


Der (GET-)HTTP-Request https://<URL-oder-IP-des-Integration-Servers>/mqtt/proxy/gps?l=30&b=46&id=0815 wird auf das Topic gps (des MQTT-Servers unter dem Alias proxmox) mit folgendem Payload abgelegt.

l=30
b=46
id=0815


Die Query-Daten werden mit NL (newline) getrennt und URL-dekodiert. Hinweis: Bei POST wird gegebenenfalls ein Query-String wie bei GET am Anfang eingefügt und dann der Body mit NL angehängt. URL-Dekodierung erfolgt bei ContentType "application/x-www-form-urlencoded".