Skip to content
Der Text wurde für 2.10 aktualisiert; die Bildschirmfotos stammen aus Version 2.5.0 und können von der Oberfläche abweichen.

MQTT-Client ​

Ca. 9 Min. Lesezeit

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 des MQTT-Kanals

Registerkarte Verbindungsparameter:

FeldBeschreibungStandardBereich
HostIP-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 einPflichtfeld; IP-Adresse, DNS-Name mit Punkt oder localhost
PortTCP-Port des Brokers. Wird nur bei der Verbindung Tcp verwendet.1883Zahl
VerbindungstypTcp, WebSocket oder WebSocket4NetTcp—
ClientIDDem Broker gemeldete Client-Kennung. Bei einem neuen Kanal wird automatisch ein eindeutiger Wert erzeugt.Automatisch erzeugter ZufallswertMuss für jeden Client, der sich mit demselben Broker verbindet, verschieden sein
Clean SessionWenn 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—
ProtokollversionV310 (3.1.0), V311 (3.1.1) oder V500 (5.0). Wählen Sie ausdrücklich die Version, die Ihr Broker unterstützt.V311—
PaketfragmentierungErlaubt das Senden großer Pakete in Teilen. Unterstützt der Broker fragmentierte Pakete nicht (einige Cloud-Broker), deaktivieren Sie die Option.Aktiviert—
JSON-TiefenebeneBis zu wie vielen Ebenen verschachtelte Objekte in JSON-Nachrichten in eigene Tag-Adressen aufgelöst werden (siehe JSON-Nachrichten)21–15

Je nach Auswahl unter Verbindungstyp wird das Feld Host unterschiedlich ausgefüllt:

  • Tcp: Nur die Adresse wird eingegeben, z. B. 192.168.1.10 oder broker.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:

FeldBeschreibungStandard
BenutzernameBenutzername für den Broker. Bleibt das Feld leer, werden keine Anmeldedaten gesendet.Leer
PasswortPasswort 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 nichtLeer
TLS-TypNone, Tls, Tls11, Tls12 oder Tls13None
ZertifikatsdateiDie 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 des MQTT-Kanals

Registerkarte Erweiterte Parameter:

FeldBeschreibungStandardBereich
Timeout [ms]Wartezeit auf Antworten bei der Kommunikation mit dem Broker100003000–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.00–86400
Keep-Alive [s]Intervall der Abfrage beim Broker, mit der die Verbindung aufrechterhalten wird (Keep Alive). 0 schaltet die Abfrage aus.60Zahl

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 des MQTT-Geräts

Registerkarte Parameter:

FeldBeschreibungStandardBereich
TopicTopic-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.0Pflichtfeld; 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 ​

Registerkarte Erweiterte Parameter des MQTT-Geräts

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.

  1. Stellen Sie sicher, dass der Kanal läuft und mit dem Broker verbunden ist.
  2. 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.
  3. Prüfen Sie die Spalten Name, Node Id, Datentyp und Wert.
  4. Wählen Sie die hinzuzufügenden Zeilen aus, klicken Sie auf Wählen und bestätigen Sie die Rückfrage.

Fenster zum Importieren von MQTT-Tags

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/false Bool, 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.

NachrichtBeispiel für die Tag-Adresse
Nachricht mit einfachem WertDas vollständige Topic: fabrika/hat1/sicaklik
Feld eines JSON-ObjektsTopic, Punkt und Feldname: fabrika/hat1/olcum.sicaklik
Verschachteltes JSON-Feldfabrika/hat1/olcum.motor.akim
Element eines JSON-ArraysDie 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:

json
{
  "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-TiefenebeneEntstehende AdresseWert
1fabrika/hat1/olcum.motor.sensor{"akim":12.5} (Text)
2fabrika/hat1/olcum.motor.sensor.akim12.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 ​

SymptomPrüfungen
Verbindung kann nicht hergestellt werdenPrü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 aufgebautPrü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 TLSWä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 WertPrü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 TextErhöhen Sie den Wert JSON-Tiefenebene.
Liste unter Tags importieren ist leerPrü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 kommenSetzen Sie im Kanal Leerlaufzeit zum erneuten Starten der Verbindung [s] auf einen Wert größer als 0.

2WinScada 2.10