MQTT-Schnittstelle
Pfad: Projektansicht> Konfig > Schnittstellen > Doppelklick auf MQTT
Verwenden Sie die MQTT-Schnittstelle, um Daten gemäß dem MQTT-Standard zu veröffentlichen.
Beachten Sie, dass ein Tag oder ein Alarm, der über das MQTT-Protokoll übertragen werden soll, in einer Gruppe definiert werden muss.
Parameter | Beschreibung |
---|---|
MQTT-Schnittstelle aktivieren | Hauptflag zum Aktivieren des MQTT-Dienstes. Die ausgewählten Gruppen von Tags werden an den MQTT-Broker übermittelt. |
Alarme aktivieren | Die ausgewählten Gruppen von Alarmen werden an den MQTT-Broker übermittelt. Alarme werden bei jeder Änderung des Alarmstatus angezeigt. |
Tag-Konfiguration
Parameter | Beschreibung |
---|---|
Aktivieren | Aktivieren Sie die in der Gruppe enthaltenen Tags, um die Veröffentlichung „Daten (Pub)“ auszulösen. Die in der Gruppe enthaltenen Tags können durch das Abonnement „Daten (Sub)“ aktualisiert werden. |
Tag-Gruppe | Liste der Tags, die übertragen werden, wenn die zugewiesene Regelbedingung erfüllt wird. |
QoS |
Zu verwendende QoS
|
Beibehalten | Dieses Flag gibt an, ob die Nachricht vom Broker als der letzte bekannte gute Wert für ein bestimmtes Thema gespeichert wird. Wenn ein neuer Client ein Thema abonniert, erhält er die letzte Nachricht, die zu diesem Thema gespeichert ist. |
Persistenz |
Wenn true, werden die Nachrichten mit einer QoS größer als 0 der Warteschlange der Datei des Dateisystems hinzugefügt, damit sie auch nach einem Panel-Reset oder bei Wiederaufbau einer unterbrochenen Verbindung mit dem MQTT-Server verfügbar sind. |
Regel | Definiert die Kriterien für die Entscheidung, wann der Wert eines Tags Angezeigt werden soll. Wenn es leer ist, wird die „Standard-Push-Regel" verwendet, die oberhalb der Tabelle definiert ist. |
Verwalten der Push-Regel
Eine Regel besteht aus einem Auslösekriterium und mehreren (optionalen) Bedingungen, die überprüft werden müssen, damit der Tag-Wert übertragen werden kann.
Trigger
Parameter | Beschreibung |
---|---|
Timer |
Die Anzeige wird kontinuierlich durchgeführt, auch wenn sich der Wert nicht ändert.
|
Bei Änderung |
Die Anzeige erfolgt, wenn sich der Wert eines Tags ändert.
|
Bedingungen
Bedingungen enthalten Ordner mit Bedingungen. Jeder Ordner kann zweierlei Art sein:
- Alle folgenden Bedingungen sind erfüllt (UND)
- Eine der folgenden Bedingungen ist erfüllt (ODER)
Alle Ordner müssen validiert werden, damit die Übertragung durch den Auslöser abgefragt werden kann. Ein Ordner vom Typ „Alle folgenden Bedingungen sind erfüllt" wird validiert, wenn alle enthaltenen Bedingungen true sind, wohingegen ein Ordner vom Typ „Eine der folgenden Bedingungen ist erfüllt" validiert wird, wenn mindestens eine der enthaltenen Bedingungen true ist.
Einstellungen
Thema | Beschreibung |
---|---|
Max ausstehende Nachrichten | Anzahl der Nachrichten, die im RAM in die Warteschlange gestellt werden können, wenn Verbindungsfehler vorliegen. Nachrichten in der Warteschlange werden freigegeben, sobald der MQTT-Server wieder erreichbar ist. |
Standardwerte | Werte der Parameter „QoS“, „Beibehalten“ und „Persistenz“, die für Themen benutzt werden sollen, die nicht in der Tabelle „Tag-Konfiguration“ definiert sind. |
Themen und Nutzdaten
Es gibt fünf Arten von unterstützten Themen:
Thema | Beschreibung |
---|---|
Birth | Dies ist ein spezielles Thema, das nur einmal beim Start des Bediengerätes angezeigt wird. |
Will |
Spezielles Thema, das beim Start des Geräts veröffentlicht wird, aber vom MQTT-Broker gespeichert und verborgen gehalten wird. Es wird vom MQTT-Broker angezeigt, wenn er feststellt, dass der Client die Verbindung nicht korrekt unterbrochen hat. |
Daten (Anz) | Das Thema wird verwendet, um die Werte der Tags gemäß den Übertragungsregeln anzuzeigen, die mit den Tag-Gruppen verbunden sind. |
Daten (Abo) | Das Thema wird verwendet, um Tags zu abonnieren. Die Nutzdaten sind die Vorlage, die verwendet wird, um die Werte der empfangenen Tags zu erkennen. |
Alarm | Das Thema wird zum Anzeigen von Alarmen verwendet |
Für jedes Thema definieren die Nutzdaten die Struktur des zugehörigen Wertes. Beachten Sie, dass in Themen- und Nutzdatendefinitionen Platzhalter verwendet werden können.
Platzhalter | Beschreibung |
---|---|
${clientId} | MQTT-Client-ID |
${aktuellerZeitstempel} | Aktuelle Zeit |
${Protokollname} | Name des zu einem Tag zugeordneten Protokolls |
${Taggruppe} | Name der Gruppe, zu der das Tag gehört |
${Tagname} | Name des Tags |
${Alarmgruppe} | Name der Gruppe, zu der der Alarm gehört |
${Alarmname} | Name des Alarms |
${Wert} | Letzter bekannter Wert des Tags |
${Zeitstempel} | Zeitstempel des Zeitpunkts, zu dem der Tag-Wert gelesen wurde |
${Aktiver Wert} | Wert des Tags, als der Alarm aktiv wurde |
${Qualität} | Qualität (d. h. Zuverlässigkeit) des Tags |
${Aktiv Zeitstempel} | Zeitstempel des letzten alarmauslösenden Ereignisses |
${Inaktiv Zeitstempel} | Zeitstempel des letzten Ereignisses, das den Alarmzustand beendet hat |
${Best Zeitstempel} | Zeitstempel, wann der Bediener den Alarm bestätigt |
${Beschreibung} | Alarmbeschreibung. |
${Benutzerdefiniertes Feld1} | Alarm Benutzerdefiniertes Feld 1 |
${Benutzerdefiniertes Feld2} | Alarm Benutzerdefiniertes Feld 2 |
${Status} | Alarmzustand |
${Schweregrad} | Schweregrad des Alarms |
${Untergrenze} | Alarmuntergrenze |
${Obergrenze} | Alarmobergrenze |
${[0]} | Falls in der Alarmbeschreibung vorhanden, der Wert des ersten Live-Tags, [1] den zweiten, etc. |
${[Tag1]} | Falls in der Alarmbeschreibung vorhanden, der Wert des „Tag1" Live-Tags |
${beliebig} | Ein allgemeines Label. Nützlich in den Subscribe-Payloads |
JSON-Nutzdaten
Wenn das JSON-Format gewählt wird, werden die Anführungszeichen um die String-Werte hinzugefügt, damit sie der JSON-Syntax entsprechen.
Durch die Nutzung des JSON-Formats kann der Datenaustausch optimiert werden, so dass mehrere Nachrichten in einer einzelnen Nachricht enthalten sein können. Wenn „Nachrichten-Aggregation“ gewählt wird, werden die Nachrichten an den MQTT-Server gesendet, nachdem die gewählte Zeitüberschreitung abgelaufen ist, oder wenn die zu sendende Nachricht die gewählte Größe erreicht.
Mehrere Tags
Unter Verwendung des JSON-Formats ist es möglich, in den Abonnement-/Veröffentlichungsthemen mehrere Tags zu verwalten, wie in den folgenden Beispielen:
Um eine eingehende Nachricht wie folgt zuzuordnen:
{ "x": { "tagName": "Tag1", "value": 1 }, "y": { "tagName": "Tag2", "Wert": 2 } }
Sie können Muster verwenden:
{ "${any}": { "tagName": "${tagName}", "value": "${value}" } }
Um eine eingehende Nachricht wie folgt zuzuordnen:
[ { "tagName": "Tag1", "value": 1 }, { "tagName": "Tag2", "Wert": 2 } ]
Sie können Muster verwenden:
[ { "tagName": "${tagName}", "value": "${value}" } ]
Um eine eingehende Nachricht wie folgt zuzuordnen:
{ "Tag1": { "Wert": 1 }, "Tag2": { "Wert": 2 } }
Sie können Muster verwenden:
{ "${tagName}": { "Wert": "${Wert}"} }
Um ein Element oder alle Elemente eines Arrays abzugleichen, können Sie eine Nachricht wie die folgende verwenden:
{ "Tag1": { "Wert": "[1, 2, 3, 4, 5, 6, 7, 8]" } }
Sie können Muster verwenden:
{ "${tagName}": { "Wert": "${Wert.1}"} }
{ "${tagName}": { "Wert": "${Wert}"} }
Für veröffentlichte Themen ist ein Tag/eine Gruppe von Tags erforderlich, um die Auslösebedingung festzulegen, aber die Nachricht kann jetzt auch andere Tag-Werte unter Verwendung der Live-Tag-Syntax enthalten. Das Trigger-Tag kann sogar im Payload-Muster weggelassen werden.
Beispiele:
{ "tag1" : "${[Tag1]}", "tag2" : "${[Tag2]}" }
Für abonnierte Themen kann dieselbe Live-Tag-Syntax verwendet werden, um einen beliebigen Tag-Wert zu schreiben (beachten Sie, dass nur die in der Auslösebedingung aufgeführten Tags geschrieben werden können).
Beispiele:
{ "tag1" : "${[Tag1]}", "tag2" : "${[Tag2]}" }
{ "t" : "${tagName}", "v" : "${value}", "tag2" : "${[Tag2]}" }"
Einstellungen des MQTT-Brokers
Unterstützt werden derzeit die MQTT-Broker:
- Allgemeiner MQTT-Broker
- Azure
- Amazon AWS
- IBM BlueMix
- Murano
Einige Parameter hängen von dem gewählten Broker ab.
Allgemeiner MQTT-Broker
Parameter | Beschreibung |
---|---|
Broker-Adresse |
Name oder IP-Adresse des MQTT-Servers Name oder IP-Adresse des MQTT-Servers (z. B. „127.0.0.1:1883“) Im Allgemeinen ist der Standard-TCP/IP-Anschluss 1883 oder der Anschluss 8883, wenn MQTT über SSL verwendet wird. |
Client-ID | Die Client-ID ist eine Kennung für jeden MQTT-Client, der sich mit einem MQTT-Broker verbindet. Die Beschreibung ist beliebig, muss aber für jeden Broker eindeutig sein. Der Broker verwendet sie zur Identifizierung des Clients und des aktuellen Status des Clients. |
Benutzername Passwort |
Wenn der MQTT-Broker so konfiguriert ist, dass eine Client-Authentifizierung mit einem gültigen Benutzernamen und Passwort erforderlich ist |
Keep-alive-Zeit (s) | Zeitintervall vor dem Senden einer PING-Abfrage an den Server, wenn kein Datenfluss stattfindet (nützlich, um zu wissen, ob sowohl Client als auch Server noch aktiv und erreichbar sind). |
Clean session verwenden | Wenn das Clean Session-Flag auf false gesetzt wird, erstellt der Broker eine permanente Session für den Client. Alle Informationen und Benachrichtigungen bleiben bis zur nächsten Abfrage des Clients für eine Clean Session erhalten. Wenn das Clean Session-Flag auf false gesetzt ist und der Broker bereits eine Session für den Client zur Verfügung hat, verwendet er die bestehende Session und übermittelt zuvor in die Warteschlange gestellte Benachrichtigungen an den Client. |
Legacy verwenden | Das „Legacy verwenden"-Flag bewirkt, dass der Client die MQTT-Spezifikation 3.1 erfüllt. |
TLS aktivieren
Wenn der MQTT-Server so konfiguriert ist, dass er über eine TLS-Verbindung arbeitet, muss das Bediengerät ein eigenes Zertifikat für den Server vorweisen. Auch wenn es nicht zwingend erforderlich ist, sollte jeder Client sein eigenes Zertifikat haben (es ist jedoch möglich, das gleiche Zertifikat für alle Clients zu verwenden).
Es ist erforderlich, dass sowohl Server- als auch Client-Zertifikate von derselben Zertifizierungsstelle signiert sind.
Parameter | Beschreibung |
---|---|
TLS aktivieren | TLS-Verschlüsselung aktivieren |
Zertifikate der Zertifizierungsstelle | Das öffentliche Zertifikat der Zertifizierungsstelle, die das Server-Zertifikat auf dem Mosquitto Broker signiert hat |
Client Zertifikat | Öffentliches Zertifikat des Bediengerätes. Muss vom Zertifikat der Zertifizierungsstelle signiert werden |
Clientschlüssel | Mit dem Client-Zertifikat verbundener privater Schlüssel |
TLS-Version |
Zu verwendende TLS-Version (muss mit der vom MQTT-Broker verwendeten Verschlüsselungsstufe abgeglichen werden)
|
Unsicher | Diese Option deaktiviert die Verifizierung des Server-Hostnamens im Server-Zertifikat. Dies kann beim Testen von ersten Serverkonfigurationen nützlich sein, ermöglicht es aber böswilligen Dritten, sich zum Beispiel durch DNS-Spoofing als Ihr Server auszugeben. Diese Option ist nur zum Testen geeignet. |
Beachten Sie, dass Sie „An Tag anhängen" verwenden können, um MQTT-Parameter zur Laufzeit einzugeben, indem Sie z. B. Makros, JavaScript oder eine Konfigurationsseite benutzen. Dies könnte hilfreich sein, um verschiedene Werte zu haben (z. B. für die ClientID), auch wenn dasselbe Projekt auf verschiedene HMI-Geräte heruntergeladen wird.
Wenn Sie Tags benutzen, um MQTT-Einstellungen zu definieren (z. B. Client-ID), dürfen diese Tags nicht in der Tag-Liste enthalten sein, die mit dem MQTT-Server ausgetauscht wird, damit keine falschen Einstellungen zurückerhalten werden.
Die für das Zertifikat verwendeten String-Tags müssen groß genug sein (z. B. 2.048 Byte), um das gesamte Zertifikat enthalten zu können. Die Zertifikate müssen im ASCII-Format sein, einschließlich der ersten und letzten Textzeile, wie im nachstehenden Beispiel.
Beispiel für einen MQTT-Broker
Hier ist ein kurzes Beispiel, das erklärt, wie man eine Anwendung zur Kommunikation mit einem MQTT-Server konfiguriert. In diesem Beispiel konfigurieren wir das Bediengerät so, dass es mit einem Open-Source-MQTT-Broker (https://mosquitto.org) über Zertifikate kommuniziert. Die Zertifikate werden mit einer öffentlichen OpenSSL-Win32-Bibliothek erstellt (https://www.openssl.org).
Zertifikate generieren
Die folgende Skriptdatei erstellt eine Reihe von Server- und Client-Zertifikaten und eine öffentliche Zertifizierungsstelle, die zum Signieren von Server- und Client-Zertifikaten und zur Verifizierung der Authentizität dieser Zertifikate verwendet wird.
- ca.crt
- server.crt, server.key
- client.crt, client.ket
Datei: CreateCertificates.cmd
@echo off set OpenSSL="C:\Program Files (x86)\OpenSSL-Win32\bin\openssl.exe" rem Generate self signed CA certificate (Certificate Autority) %OpenSSL% req -nodes -batch -new -x509 -days 1000 -keyout ca.key -subj "/CN=Broker/O=company.com" -out ca.crt rem Generate MQTT Server private key %OpenSSL% genrsa -out server.key 2048 rem Generate MQTT Server certificate signed request %OpenSSL% req -batch -new -key server.key -subj "/CN=localhost/O=company.com" -out server.csr rem Sign the MQTT Server certificate %OpenSSL% x509 -req -days 1000 -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt rem Generate HMI Client private key %OpenSSL% genrsa -out client.key 2048 rem Generate HMI Client Server certificate signed request %OpenSSL% req -batch -new -key client.key -subj "/CN=client/O=company.com" -out client.csr rem Sign the HMI Client certificate %OpenSSL% x509 -req -days 1000 -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out client.crt rem Remove unnecessary files del *.rnd *.srl *.csr pause
Beachten Sie, dass der Server-Hostname localhost (/CN=localhost) ist. Das bedeutet, dass Sie die sichere Verbindung nicht verwenden können, wenn Sie im Parameter „Broker-Adresse" nicht die Domäne "localhost" schreiben können. Sie können die Domäne „localhost" nur dann verwenden, wenn sowohl der MQTT-Server als auch das Bediengerät auf demselben Gerät laufen, ansonsten müssen Sie, damit Sie den MQTT-Server erreichen können, die IP-Adresse und das Flag „Insecure" verwenden.
Konfiguration des MQTT-Brokers
Das Server-Zertifikat (server.crt, server.key) und das Zertifikat der Zertifizierungsstelle (ca.crt) müssen in einem Unterordner des MQTT-Ordners abgelegt werden, z. B. im Unterordner „certs".
Die Datei „mosquitto.conf" muss für die Verwendung der TLS-Unetrstützung konfiguriert werden.
# ================================================================= # Standardempfänger # ================================================================= ... (Ausl.) ... # Für den Standardempfänger zu verwendender Anschluss. #Anschluss 1883 Anschluss 8883 # ----------------------------------------------------------------- # Zertifikatsbasierte SSL/TLS-Unterstützung # ----------------------------------------------------------------- ... (Ausl.) ... #cafile #capath cafile certs/ca.crt certfile certs/server.crt keyfile certs/server.key tls_version tlsv1.2
Der MQTT-Broker kann mit dem untenstehenden Befehl aus einem Dos-Befehlsfenster heraus gestartet werden:
mosquitto -v -c mosquitto.conf
MQTT-Client
Zu Testzwecken kann es sinnvoll sein, einen MQTT-Client mit dem Abonnement aller Themen zu starten, so dass Sie die Nachrichten sehen können, die mit dem Bediengerät ausgetauscht werden. Da wir TLS-Kommunikation verwenden, müssen wir das Client-Zertifikat angeben. Wir können client.crt, client.key und das Zertifikat der Zertifizierungsstelle ca.crt in den Unterordner certs-client kopieren.
Der Befehl zur Aktivierung eines MQTT-Clients lautet somit:
mosquitto_sub --cafile certs-client\ca.crt --cert certs-client\client.crt --key certs-client\client.key -p 8883 -t /#
Bediengerät
Um das Bediengerät zu konfigurieren, muss Folgendes angegeben werden:
- den Parameter der Brokeradresse mit der IP-Adresse, unter der der MQTT-Server läuft, setzen
- die Anschlussadresse auf 8883 setzen
- die Zertifikate der Zertifizierungsstelle, das Client-Zertifikat und die Client-Schlüsseldateien laden
- Die TLS-Version auf Version 1.2 setzen, um sie mit den Einstellungen des MQTT-Servers abzugleichen
- Da es wahrscheinlich ist, dass Sie den MQTT-Server über die IP-Adresse referenzieren, die sich von der durch das Server-Zertifikat angegebenen Domain unterscheidet, müssen Sie das „Insecure"-Flag setzen
Um die ersten Tests durchzuführen, können Sie die Standardwerte für Themen und Nutzdaten belassen und die Alarmgruppen und Tag-Gruppen konfigurieren, die Sie an den MQTT-Broker übertragen möchten.