MQTT-Client
Der MQTT-Client ermöglicht es 2WinScada, sich mit einem MQTT-Server (Broker) zu verbinden, festgelegte Topics zu abonnieren und die Werte aus eingehenden Nachrichten in Tags zu übernehmen. Jeder Kanal baut eine einzige Verbindung zum Broker auf; jedes Gerät unter dem Kanal abonniert einen Topic-Filter.
Wichtige unterstützte Funktionen:
- Verbindung über TCP oder WebSocket; MQTT-Versionen 3.1.0, 3.1.1 und 5.0
- Authentifizierung mit Benutzername / Passwort und TLS
- Nachrichteninhalt als Klartext (Zahl, Text,
true/false) und JSON; Zugriff auf Felder von JSON-Objekten und Array-Elemente über einen Pfad mit Punkten - Auflistung der vom Broker kommenden Topics in einer Baumansicht und Massenimport von Tags
- Veröffentlichen eines auf ein Tag geschriebenen Werts auf dem Topic in der Tag-Adresse
Lizenz
MQTT ist in den Lizenz-Editionen Standard und Professional verfügbar, in der Edition Starter nicht. Einzelheiten zur Lizenz finden Sie auf der Seite Lizenz.
Kanaldefinition
Auf der Registerkarte Allgemein des Fensters für einen neuen Kanal geben Sie den Kanalnamen ein und wählen unter Verbindungstyp den Eintrag Mqtt aus. Nachdem Sie die Einstellungen auf den anderen Registerkarten vorgenommen haben, klicken Sie auf Speichern.

Registerkarte Verbindungsparameter:
| Feld | Beschreibung | Standard | Bereich |
|---|---|---|---|
| Host | IP-Adresse oder DNS-Name des Brokers. Bei einer WebSocket-Verbindung wird die vollständige Adresse eingegeben (siehe Erläuterung unten). | Eine Platzhalteradresse ist voreingestellt; geben Sie vor dem Speichern unbedingt die Adresse Ihres eigenen Brokers ein | Pflichtfeld; IP-Adresse, DNS-Name mit Punkt oder localhost |
| Port | TCP-Port des Brokers. Wird nur bei der Verbindung Tcp verwendet. | 1883 | Zahl |
| Verbindungstyp | Tcp, WebSocket oder WebSocket4Net | Tcp | — |
| ClientID | Dem Broker gemeldete Client-Kennung. Bei einem neuen Kanal wird automatisch ein eindeutiger Wert erzeugt. | Automatisch erzeugter Zufallswert | Muss für jeden Client, der sich mit demselben Broker verbindet, verschieden sein |
| Clean Session | Wenn aktiviert, wird bei jeder Verbindung eine neue Sitzung auf dem Broker geöffnet, und die Abonnements werden neu angelegt. Wenn nicht aktiviert und der Broker die vorherige Sitzung nicht gespeichert hat, werden die Abonnements beim erneuten Verbinden ebenfalls neu angelegt. | Aktiviert | — |
| Protokollversion | V310 (3.1.0), V311 (3.1.1) oder V500 (5.0). Wählen Sie ausdrücklich die Version, die Ihr Broker unterstützt. | V311 | — |
| Paketfragmentierung | Erlaubt das Senden großer Pakete in Teilen. Unterstützt der Broker fragmentierte Pakete nicht (einige Cloud-Broker), deaktivieren Sie die Option. | Aktiviert | — |
| JSON-Tiefenebene | Bis zu wie vielen Ebenen verschachtelte Objekte in JSON-Nachrichten in eigene Tag-Adressen aufgelöst werden (siehe JSON-Nachrichten) | 2 | 1–15 |
Je nach Auswahl unter Verbindungstyp wird das Feld Host unterschiedlich ausgefüllt:
- Tcp: Nur die Adresse wird eingegeben, z. B.
192.168.1.10oderbroker.local. Der Port wird aus dem Feld Port übernommen. - WebSocket / WebSocket4Net: Die vollständige Adresse mit Schema, Port und Pfad wird eingegeben, z. B.
ws://192.168.1.10:8080/mqtt. Das Feld Port wird in diesem Fall nicht verwendet. Beide Optionen verhalten sich zur Laufzeit gleich.
Gruppe Authentifizierung auf derselben Registerkarte:
| Feld | Beschreibung | Standard |
|---|---|---|
| Benutzername | Benutzername für den Broker. Bleibt das Feld leer, werden keine Anmeldedaten gesendet. | Leer |
| Passwort | Passwort für den Broker. Ein gespeichertes Passwort wird aus Sicherheitsgründen nicht angezeigt (********); geben Sie zum Ändern einen neuen Wert ein, ein leeres Feld löscht das Passwort nicht | Leer |
| TLS-Typ | None, Tls, Tls11, Tls12 oder Tls13 | None |
| Zertifikatsdatei | Die Schaltfläche ... öffnet das Fenster Auswahl der Zertifikatsdatei; eine Datei mit der Endung .crt, .der, .cer oder .pfx kann ausgewählt oder hochgeladen werden. | Leer |
TLS und Zertifikat
Bei allen Optionen außer None wird die Verbindung mit TLS aufgebaut; arbeitet der Broker an einem unverschlüsselten Port, kommt keine Verbindung zustande. Eine Authentifizierung mit Client-Zertifikat wird in dieser Version nicht unterstützt. Verbinden Sie sich nur über ein vertrauenswürdiges Netzwerk mit dem Broker und stellen Sie bei TLS den Wert Port auf den TLS-Port des Brokers ein (meist 8883).

Registerkarte Erweiterte Parameter:
| Feld | Beschreibung | Standard | Bereich |
|---|---|---|---|
| Timeout [ms] | Wartezeit auf Antworten bei der Kommunikation mit dem Broker | 10000 | 3000–86400000 |
| Leerlaufzeit zum erneuten Starten der Verbindung [s] | Erhält während dieser Zeit kein Tag einen Wert, wird die Verbindung geschlossen und neu aufgebaut. 0 schaltet diese Überwachung aus. | 0 | 0–86400 |
| Keep-Alive [s] | Intervall der Abfrage beim Broker, mit der die Verbindung aufrechterhalten wird (Keep Alive). 0 schaltet die Abfrage aus. | 60 | Zahl |
Die Gruppe Last-Will auf derselben Registerkarte enthält die Felder Last-Will-Topic, Last-Will-QoS (0, 1 oder 2), Last-Will-Retain und Last-Will-Nachricht. In MQTT ist der Last Will die Nachricht, die der Broker auf dem angegebenen Topic veröffentlicht, wenn die Verbindung des Clients unerwartet abbricht.
WARNING
Last-Will wird in dieser Version nicht unterstützt. Um zu überwachen, ob 2WinScada offline ist, verwenden Sie die Verbindungsüberwachung auf der Seite des Brokers.
Verbindungsverhalten
- Der Kanal verbindet sich mit dem Broker, wenn er mindestens ein aktives Gerät enthält, das die Lizenz erlaubt.
- Bricht die Verbindung ab, versucht 2WinScada, sie wiederherzustellen; zwischen zwei Versuchen liegen mindestens 30 Sekunden. Ein einzelner Verbindungsversuch dauert höchstens 30 Sekunden.
- Sobald die Verbindung steht, werden die Topics der aktiven Geräte erneut abonniert.
- Schlägt die Verbindung oder das Abonnement fehl, wird die Qualität des Geräts und der Tags Bad.
Gerätedefinition
Wählen Sie im Kontextmenü des Kanals Neues Gerät. Die Felder auf der Registerkarte Allgemein werden wie bei den anderen Protokollen ausgefüllt.

Registerkarte Parameter:
| Feld | Beschreibung | Standard | Bereich |
|---|---|---|---|
| Topic | Topic-Filter, den das Gerät abonniert. # empfängt alle Topics des Brokers, ein Wert wie fabrika/hat1/# nur die Topics, die mit diesem Präfix beginnen. | # | Pflichtfeld; höchstens 2048 Zeichen |
| Leerlaufzeit für die Neuaufnahme des Abonnements [s] | Der Wert wird gespeichert, wirkt sich in dieser Version aber nicht auf das Abonnement aus. | 0 | Pflichtfeld; 0–86400 |
Bei einem neuen Gerät ist das Feld Topic mit # vorbelegt. Werden auf dem Broker viele Topics veröffentlicht, schränken Sie den Filter auf die Topics des Geräts ein, damit keine unnötigen Nachrichten empfangen werden.
Abonnements werden mit QoS 0 angelegt. Damit die Verbindung erneuert wird, wenn längere Zeit keine Daten eintreffen, verwenden Sie im Kanal das Feld Leerlaufzeit zum erneuten Starten der Verbindung [s].
Topic-Filter
Verwenden Sie das Zeichen # nur am Ende des Filters. Eine eingehende Nachricht wird dem Gerät zugeordnet, wenn ihr Topic mit dem Filter ohne # beginnt. Das Platzhalterzeichen + passt nach der Standard-MQTT-Regel auf genau eine Topic-Ebene (z. B. fabrika/+/sicaklik).
Tags importieren

Die Schaltfläche Tags importieren in der Gruppe Tags der Registerkarte Erweiterte Parameter listet die vom Broker kommenden Topics auf und fügt die ausgewählten Werte als Tags hinzu. Die Schaltfläche ist nur bei gespeicherten Geräten aktiv.
- Stellen Sie sicher, dass der Kanal läuft und mit dem Broker verbunden ist.
- Klicken Sie auf Tags importieren. Im geöffneten Fenster werden die Topics, die zum Filter Topic des Geräts passen, nach dem Trennzeichen
/in Ordnern aufgelistet. - Prüfen Sie die Spalten Name, Node Id, Datentyp und Wert.
- Wählen Sie die hinzuzufügenden Zeilen aus, klicken Sie auf Wählen und bestätigen Sie die Rückfrage.

Am Ende des Imports wird die Anzahl der hinzugefügten, fehlerhaften und nicht unterstützten Elemente gemeldet. Nur Zeilen mit einem Wert werden als Tags hinzugefügt; Ordnerzeilen zählen als nicht unterstützte Elemente. Für die hinzugefügten Tags gilt:
- Adresse ist der Wert Node Id der Zeile.
- Der Tag-Name entsteht, indem die Zeichen
/in der Adresse durch.ersetzt werden. - Datentyp wird aus dem eingehenden Wert abgeleitet: Zahlen werden Real, die Werte
true/falseBool, alle anderen String. - Das Tag wird mit Nur lesen markiert, und Aktualisierungsintervall [s] beträgt 2 Sekunden.
TIP
Die Liste wird aus den Nachrichten gebildet, die eintreffen, nachdem sich der Kanal mit dem Broker verbunden hat, und enthält höchstens 4096 Werte. Erscheint ein selten veröffentlichtes Topic nicht in der Liste, warten Sie auf eine Nachricht oder definieren Sie das Tag manuell. Ist der Kanal nicht verbunden, bleibt die Liste leer.
Tag-Definition
Tags werden wie bei den anderen Protokollen in der Tag-Tabelle des Geräts definiert (siehe Tag-Verwaltung). Adresse besteht aus dem Topic, auf dem die Nachricht eintrifft, und bei Bedarf aus dem Feldpfad innerhalb des JSON. Die Adresse unterscheidet Groß- und Kleinschreibung und muss genau mit den eingehenden Daten übereinstimmen.
| Nachricht | Beispiel für die Tag-Adresse |
|---|---|
| Nachricht mit einfachem Wert | Das vollständige Topic: fabrika/hat1/sicaklik |
| Feld eines JSON-Objekts | Topic, Punkt und Feldname: fabrika/hat1/olcum.sicaklik |
| Verschachteltes JSON-Feld | fabrika/hat1/olcum.motor.akim |
| Element eines JSON-Arrays | Die Elementnummer beginnt bei 0: fabrika/hat1/olcum.degerler.0 |
- Topic-Ebenen werden mit
/getrennt, JSON-Felder mit.. Auch zwischen Topic und JSON-Pfad steht ein.. - Nachrichten, die mit
{beginnen und mit}enden oder mit[beginnen und mit]enden, werden als JSON verarbeitet. Andere Nachrichten gelten als einzelner Wert, und die Adresse ist das Topic selbst. - Der eingehende Wert wird in den Datentyp des Tags umgewandelt.
- Aktualisierungsintervall [s] bestimmt, in welchem kürzesten Abstand Wertänderungen in das Tag übernommen werden; der letzte zwischendurch eingetroffene Wert wird im nächsten Intervall übernommen.
- Nachrichten über 4 MB und Topics mit mehr als 2048 Zeichen werden ignoriert.
JSON-Nachrichten
Als Beispiel trifft auf dem Topic fabrika/hat1/olcum diese Nachricht ein:
{
"motor": {
"sensor": {
"akim": 12.5
}
}
}JSON-Tiefenebene legt fest, bis zu wie vielen Ebenen unterhalb der Felder auf der obersten Ebene aufgelöst wird. Ein Objekt oder Array unterhalb dieser Ebene wird als ein einzelner Textwert (JSON-Text) übernommen:
| JSON-Tiefenebene | Entstehende Adresse | Wert |
|---|---|---|
| 1 | fabrika/hat1/olcum.motor.sensor | {"akim":12.5} (Text) |
| 2 | fabrika/hat1/olcum.motor.sensor.akim | 12.5 (Zahl) |
Eine höhere Ebene als nötig kann bei hohem Nachrichtenaufkommen die Verarbeitungslast erhöhen.
Schreiben
Wird ein Wert auf ein Tag geschrieben, das nicht mit Nur lesen markiert ist, wird der Wert als Klartext auf dem Topic im Feld Adresse des Tags veröffentlicht (QoS 0, Retain aus). Enthält die Adresse einen JSON-Pfad, gilt auch der Pfad als Teil des Topic-Namens; auf ein JSON-Feld kann nicht geschrieben werden. Verwenden Sie zum Schreiben nur Tags, deren Adresse aus einem Topic besteht.
Fehlerbehebung
| Symptom | Prüfungen |
|---|---|
| Verbindung kann nicht hergestellt werden | Prüfen Sie die Werte Host, Port und Verbindungstyp, die Firewall, ob der Broker Benutzername/Passwort verlangt, und die Auswahl Protokollversion. Geben Sie bei WebSocket im Feld Host die vollständige Adresse mit ws:// oder wss:// ein. |
| Verbindung bricht ständig ab und wird neu aufgebaut | Prüfen Sie, ob ein anderer Client oder Kanal denselben Wert ClientID verwendet; der Broker trennt den vorherigen Client, der sich mit derselben Kennung verbunden hat. |
| Keine Verbindung mit TLS | Wählen Sie als TLS-Typ den Eintrag Tls oder Tls12 und stellen Sie Port auf den TLS-Port des Brokers ein. |
| Tag-Qualität Bad oder kein Wert | Prüfen Sie, ob der Wert Adresse des Tags genau mit Topic und JSON-Pfad übereinstimmt und ob der Filter Topic des Geräts dieses Topic umfasst. |
| JSON-Feld kommt als Text | Erhöhen Sie den Wert JSON-Tiefenebene. |
| Liste unter Tags importieren ist leer | Prüfen Sie, ob der Kanal verbunden ist und ob nach dem Verbinden des Kanals mindestens eine Nachricht auf dem Topic eingetroffen ist. |
| Verbindung wird nicht erneuert, wenn längere Zeit keine Daten kommen | Setzen Sie im Kanal Leerlaufzeit zum erneuten Starten der Verbindung [s] auf einen Wert größer als 0. |