Der MQTT Treiber arbeitet als MQTT-Client und ermöglicht Wertänderungen über TCP an einen MQTT-Broker zu senden bzw. Wertänderungen bei einem MQTT-Broker zu abonnieren.
Der MQTT Treiber unterstützt den OASIS Standard 'MQTT Version 3.1.1'. Die Verbindung zum MQTT-Broker wird über einen konfigurierbaren Hostnamen und die Port-Nummer definiert, wobei die Port-Nummer '8883' für sichere Verbindungen über TLS reserviert ist. Als QoS (Quality of Service) werden die Level 0 (At most once) und 1 (At least once) unterstützt.
Der Name des MQTT Treibers lautet: mqtt
Die Routing-Adresse des ersten MQTT Treibers ist die 1630
Die Datenpunktdatei für den ersten MQTT Treiber heißt: mqtt1.txt
Die Konfigurationsdatei für globale Einstellungen des ersten MQTT Treibers heißt: mqtt1.cfg
Beim MQTT Treiber sowie allen weiteren Gateway-Treibern gilt für die Definition von Datenpunkten in der Datenpunktdatei:
| Typ | Bedeutung | 
|---|---|
| M | Ganzzahliger Wert (Binäre Datenpunkte,Zählwerte) der vom Gateway nur gelesen werden kann/soll. | 
| S | Ganzzahliger Wert der vom Gateway gelesen sowie geschrieben werden kann/soll. | 
| X | Analogwert (mit Nachkommastellen) der vom Gateway nur gelesen werden kann/soll. | 
| Y | Analogwert (mit Nachkommastellen) der vom Gateway gelesen sowie geschrieben werden kann/soll. | 
Die Adressen der MQTT-Datenpunkte sind wie folgt aufgebaut:
<type> <topic> [<name>]
Dabei gilt folgende Definition:
| Parameter | Wertebereich | Beschreibung | 
|---|---|---|
| <type> | publish subscribe | Wert wird an den MQTT-Broker gesendet. Wert wird beim MQTT-Broker abonniert. (Topic Filter werden nicht unterstützt) | 
| <topic> | max. 80 Zeichen | Topic Name Längere Topic Namen oder Topic Namen mit Leerzeichen müssen über die Formatangabe erstellt werden. | 
| <name> | max. 80 Zeichen | Name des Schlüssels im JSON-Objekt | 
Über die Formatangabe in der Datenpunktdatei kann dem Datenpunkt ein Datentyp zugewiesen werden.
| Format | Datentyp | Bereich | 
|---|---|---|
| BIT | Boolean | 0 oder 1 | 
| UINT8 | Byte | 0 - 255 | 
| SINT8 | Byte | -128 - 127 | 
| UINT16 | Word | 0 - 65535 | 
| SINT16 | Word | -32768 - 32767 | 
| UINT32 | Doubleword | 0 - 4294967295 | 
| SINT32 | Doubleword | -2147483648 - 2147483647 | 
| FLOAT32 | Float | Fließkomma-Wert mit 32 Bit | 
| FLOAT64 | Double | Fließkomma-Wert mit 64 Bit | 
Über die Formatangabe in der Datenpunktdatei kann der QoS eines Datenpunktes festgelegt werden.
| Format | Beschreibung | 
|---|---|
| QoS:0 | Wert wird einmal gesendet. | 
| QoS:1 | Wert wird solange gesendet, bis eine Bestätigung (ACK) von der Gegenstelle erfolgt. | 
Über die Formatangabe in der Datenpunktdatei kann das retain Flag eines Datenpunktes festgelegt werden.
| Format | Beschreibung | 
|---|---|
| retain:0 | Der MQTT-Broker speichert den Wert nicht. | 
| retain:1 | Der MQTT-Broker speichert den Wert als zuletzt gültigen Wert. | 
Über die Formatangabe in der Datenpunktdatei kann der Topic Name eines Datenpunktes festgelegt werden.
| Format | Beschreibung | 
|---|---|
| topic:„“ | Der Topic Name kann in der Formatangabe festgelegt werden, wenn der Topic Name länger als 80 Zeichen ist, oder wenn der Topic Name Leerzeichen enthält. | 
Typische Datenpunkt-Definitionen können demnach sein:
# failure Datenpunkt
[M failure]
name  = Communication failure
query = pe
# Istwerte
[M subscribe dev/12/online]
name   = Gerät 12 Status (0=offline, 1=online)
query  = pe
format = BIT
[X subscribe dev/12 temperatur]
name   = Temperatur für Gerät 12 in °C
query  = pe
format = FLOAT32
# Sollwerte
[Y publish dev/12 soll-temperatur]
name   = Soll-Temperatur für Gerät 12 in °C
query  = pe
format = FLOAT32
Funktionalität BACnet-Scan
Der MQTT-Treiber besitzt spezielle Datenpunkte, über die ein BACnet-Scan angestoßen werden kann und über den die Ergebnisse ausgeliefert werden. Dazu muss in der Konfigurationsdatei der Eintrag 'ScanBACnet=1' eingetragen werden. Beim Start stellt der Treiber dann per SUBSCRIBE einen Topic bereit, über den andere MQTT-Clients einen BACnet-Scan starten können.
Beispiel für einen Scan über den BACnet-Treiber mit der Route 940 über alle BACnet-Geräte mit einer Instanz-Nummer zwischen 2000 und 2009 und einem Timeout von einer Stunde (je Gerät):
Topic: '$SYS/[ClientID]/scan/bacnet'
Payload: '{"route":940, "start":2000, "end":2009, "timeout":3600}'
Die Ergebnisse des Scans werden unter dem Topic '$SYS/[ClientID]/scan/bacnet/[route]/[device-instance]' veröffentlicht (PUBLISH).
Der Anfangsteil '$SYS' kann im Treiber über den Eintrag 'SysPreTopic' umkonfiguriert werden, da einige MQTT-Broker Topics mit '$SYS' am Anfang nur für eigene, interne Informationen zulassen.
 
                        