MQTT
MQTT (Message Queuing Telemetry Transport) ist ein offenes Nachrichtenprotokoll für Machine-to-Machine-Kommunikation (M2M). Es eignet sich gut, um Informationen dem zentralen Cloudsystem AnyViz bereitzustellen. Hierbei agiert AnyViz als Broker. Sämtliche, vom MQTT-Client zur Verfügung gestellten Topics können in AnyViz als Datenpunkt angelegt und weiterverwendet werden.
Verbindungsaufbau
Der MQTT-Client verbindet sich direkt mit AnyViz, welches somit als MQTT-Broker agiert. Zur korrekten Zuordnung des MQTT-Clients zum AnyViz-Projekt muss zwingend die Projektnummer in Form des Benutzernamens übergeben werden. Ein vom MQTT-Client festgelegtes Passwort muss in AnyViz bestätigt werden. Erst dann werden eingehende Publish-Nachrichten von AnyViz akzeptiert.
Verbindungsparameter
Server |
Der Hostname von AnyViz:
|
Port |
8883 (TLS), 1883 (TCP) Es wird empfohlen eine Verbindung über Port 8883 mit Serverzertifikatvalidierung aufzubauen. Der alternative Port 1883 dient lediglich zur Testzwecken und wird mangels Verschlüsselung nicht empfohlen. |
Client ID | Die MQTT-Client ID kann frei vergeben werden und dient zur Identifizierung in AnyViz. Die MQTT-Verbindung wird abgelehnt, wenn keine Client ID übertragen wird oder die Client ID die maximale Länge von 250 Zeichen überschreitet. Da die Client ID zur eindeutigen Identifizierung innerhalb eines Projektes genutzt wird, darf sich die ID nicht ändern. |
Benutzername | Der Benutzername wird für die Zuordnung des Projektes verwendet. Aus diesem Grund muss die Projekt-Nummer als Benutzername übertragen werden. |
Passwort | Ein frei wählbares Onboarding-Passwort, welches später bestätigt werden muss. |
Zertifikat | Zur Verschlüsselung bei der Kommunikation über Port 8883 und zur Verifizierung des Server-Hosts, dient das öffentliche AnyViz-Zertifikat. Eine Client-Authentifizierung mittels Zertifikat wird zum jetzigen Zeitpunkt nicht unterstützt. |
Version |
3.1.1 oder 5.0 Das MQTT-Protokoll ist in AnyViz in der Version 3.1.1, sowie in der Version 5.0 implementiert. Clients mit einer älteren Version werden nicht abgelehnt, allerdings kann in diesem Fall eine Kompatibilität nicht gewährleistet werden. |
Will-Topic | Das vom MQTT-Protokoll spezifizierte Will-Topic wird in AnyViz nicht verarbeitet. |
Verbindungsbestätigung
Sobald die Verbindung zu AnyViz aufgebaut wurde, erscheint ein neuer Eintrag im Objektbaum. Fahren Sie mit der Maus über den Eintrag und klicken Sie auf Bearbeiten. Es öffnet sich der Cloud Adapter Dialog.
Zur Verifizierung muss nun einmalig dasselbe Passwort eingegeben werden, welches zuvor im MQTT-Client hinterlegt wurde. Optional kann ein Name vergeben werden, welcher anschließend zur Anzeige verwendet wird. Wird das korrekte Passwort eingegeben, wechselt der Eintrag von gelb auf grün und alle eintreffenden Topics werden darunter aufgelistet.
Byte Order | Die Byte Order muss korrekt eingestellt werden, sofern die Topic-Werte binär übertragen werden. |
Verbindungsüberwachung | Wird die Verbindung unterbrochen werden Warnhinweise angezeigt und die Datenaufzeichnung wird gestoppt. Dieses Verhalten kann bei Cloud-Adapter ohne permanente Verbindung verhindert werden. |
Topic-Übertragung
Die Übertragung von Werten erfolgt beim MQTT-Protokoll über sog. Publish-Messages. Sie bestehen aus einem Topic-Namen, einer Bytefolge als Nutzdaten und einem QoS. Der Topic-Name wird in AnyViz hierarchisch dargestellt. Die Formatierung der eigentlichen Nutzdaten ist im MQTT-Protokoll nicht spezifiziert. AnyViz unterstützt folgende Formate.
Einschränkungen
- Die maximale Nachrichtengröße ist auf 1MB beschränkt (Header + Topic + Payload)
-
Die maximale Anzahl der Topics ist auf das 10-fache des eingestellten Datenpunkttarifs beschränkt
(Beispiel: Bei einem 50 Datenpunkte Tarif, wird das 501. Topic ignoriert) - Der Topic-Name darf keine Punkte enthalten
Binäre Formatierung
Die Werte eines Topics können im Rohformat übertragen werden. Hierbei ist zu beachten, dass die korrekte Byte Order am Cloud Adapter angegeben wird (siehe Verbindungsbestätigung). Beim Anlegen eines Datenpunktes muss der Datentyp angegeben werden. Es stehen folgende Datentypen zur Auswahl:
Bool | Logischer Wert | 1 Byte |
Byte | 8 bit Ganzzahl | |
SByte | 8 bit Ganzzahl mit Vorzeichen | |
UInt16 | 16 Bit Ganzzahl | 2 Byte |
Int16 | 16 Bit Ganzzahl mit Vorzeichen | |
UInt32 | 32 Bit Ganzzahl | 4 Byte |
Int32 | 32 Bit Ganzzahl mit Vorzeichen | |
Float | 32 Bit Fließkommazahl | |
UInt64 | 64 Bit Ganzzahl | 8 Byte |
Int64 | 64 Bit Ganzzahl mit Vorzeichen | |
Double | 64 Bit Fließkommazahl | |
String | Text mit variabler Länge | X Byte |
Text-Formatierung
Alternativ können die Werte eines Topics als String-Wert übertragen werden. AnyViz bietet dann die Möglichkeit, den String in eine Zahl oder einen logischen Zustand zu konvertieren. Zu beachten ist, dass Zahlen im englischen Format, also mit einem Punkt als Dezimalseparator übertragen werden müssen. Bei einer Übertragung von Strings stehen folgende Datentypen zur Verfügung:
String (Text) | Wert dient zur Anzeige des Textes |
String (Nummerisch) | Wert wird in eine Zahl konvertiert |
String (Logisch) | Wert wird nach Bool konvertiert |
JSON-Formatierung
Sehr komfortabel gestaltet sich die Übertragung von JSON-Inhalten. Ein in UTF8 übertragener JSON-Inhalt wird bei korrekter Formatierung automatisch von AnyViz erkannt. Alle Felder des JSON-Objektes werden als einzelne Symbole hierarchisch in AnyViz dargestellt. Nachfolgend ein Beispiel:
Übertragener JSON-String | Darstellung in AnyViz |
{
"TimeString": "13:43:09",
"CpuUsage": 30.364752,
"AvailableRam": 8505,
"Time": {
"Year": 2023,
"Ticks": 14811562,
"Seconds": 9
},
"Date": [2023, 12, 19],
"DaylightSavingTime": false,
"JsonDateTime": "2023-12-19T12:43:09.8561376Z"
}
|
Somit kann jedes Feld eines JSON-Objektes, in einen Datenpunkt umgewandelt werden. Eine Angabe des Datentyps ist nicht notwendig. Allerdings ist bei dem Übertragen der Topics in JSON-Formatierung folgendes zu beachten:
- Neue Felder eines JSON-Objektes werden erst nach erneutem Verbindungsaufbau des MQTT-Clients in AnyViz angezeigt
- Fehlt das referenzierte Feld in einem übertragenen JSON-Objekt, wird der Wert genullt und ein Fragezeichen als Wert dargestellt
- Der JSON-String muss mit geschweifter Klammer beginnen und mit geschweifter Klammer enden
OPC-UA PubSub
Die OPC-UA PubSub-Erweiterung ermöglicht das Senden von Datensätzen über das MQTT-Protokoll. AnyViz erkennt automatisch MetaData und DataSet Nachrichten und listet alle Variablen der übertragenen Datensätze als Symbole auf. Es wird sowohl die JSON-Formatierung als auch die binäre UADP-Formatierung unterstütz.
Derzeit werden nur DataSetWriter unterstützt, sodass ein Schreiben von Variablen nicht möglich ist. Ebenso werden derzeit keine Arrays unterstütz.
Sparkplug B
Sparkplug ist eine Spezifikation zur effizienten Übertragung von Datenstrukturen über MQTT. AnyViz unterstützt die Version B der Spezifikation und erkennt Sparkplug-Strukturen automatisch anhand des definierten Namensschemata.
Alle Metriken werden nach Group, Node und Device gruppiert dargestellt.
Das Schreiben von Metriken ist unkompliziert möglich, wenn ein Subscribe auf das entsprechende NCMD
bzw. DCMD
Topic durchgeführt wird.
Quality of Service
AnyViz unterstützt alle in MQTT spezifizierten QoS-Methoden:
- At most once (0)
- At least once (1)
- Exactly once (2)
Publish/Subscribe
Nach einer Publish-Nachricht wird das enthaltene Topic als ReadOnly-Symbol dargestellt. Nach einer Subscribe-Nachricht wird das enthaltene Topic als WriteOnly-Symbol dargestellt. Ist ein Topic sowohl in einer Publish-Nachricht als auch in einer Subscribe-Nachricht beschrieben, so wird dieses Topic als lesend und schreibbares Symbol abgebildet. Werte können also nicht nur empfangen, sondern auch gesendet werden.
Im Vergleich zum AnyViz-Protokoll verfügt das MQTT-Protokoll über einen geringeren Funktionsumfang. Beispielsweise erfolgt keine Pufferung der Daten bei Verbindungsausfall. Daher sollte der Universal Cloud Adapter einer MQTT-Verbindung vorgezogen werden.