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.