MQTT


 

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:

TypBedeutung
MGanzzahliger Wert (Binäre Datenpunkte,Zählwerte) der vom Gateway nur gelesen werden kann/soll.
SGanzzahliger Wert der vom Gateway gelesen sowie geschrieben werden kann/soll.
XAnalogwert (mit Nachkommastellen) der vom Gateway nur gelesen werden kann/soll.
YAnalogwert (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:

ParameterWertebereichBeschreibung
<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 ZeichenTopic Name
Längere Topic Namen oder Topic Namen mit Leerzeichen müssen über die Formatangabe erstellt werden.
<name>max. 80 ZeichenName des Schlüssels im JSON-Objekt

Über die Formatangabe in der Datenpunktdatei kann dem Datenpunkt ein Datentyp zugewiesen werden.

FormatDatentypBereich
BITBoolean0 oder 1
UINT8Byte0 - 255
SINT8Byte-128 - 127
UINT16Word0 - 65535
SINT16Word-32768 - 32767
UINT32Doubleword0 - 4294967295
SINT32Doubleword-2147483648 - 2147483647
FLOAT32FloatFließkomma-Wert mit 32 Bit
FLOAT64DoubleFließkomma-Wert mit 64 Bit

Über die Formatangabe in der Datenpunktdatei kann der QoS eines Datenpunktes festgelegt werden.

FormatBeschreibung
QoS:0Wert wird einmal gesendet.
QoS:1Wert 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.

FormatBeschreibung
retain:0Der MQTT-Broker speichert den Wert nicht.
retain:1Der MQTT-Broker speichert den Wert als zuletzt gültigen Wert.

Über die Formatangabe in der Datenpunktdatei kann der Topic Name eines Datenpunktes festgelegt werden.

FormatBeschreibung
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.