IBH Link UA:MQTT Beschreibung: Unterschied zwischen den Versionen

Aus IBHsoftec Wiki Deutsch
Zur Navigation springen Zur Suche springen
KKeine Bearbeitungszusammenfassung
KKeine Bearbeitungszusammenfassung
Zeile 1: Zeile 1:
'''MQTT Anbindung:'''
= IBH Link UA: MQTT-Funktion =


Hierbei können benutzerdefinierte OPC UA Variablen über die MQTT Publisher/Subscriber-Funktionalität mit einen MQTT Broker/Server ausgetauscht werden. MQTT unterstützt Sicherheitsmechanismen wie verschlüsselte Verbindungen, Zertifikate und Benutzerauthentifizierung womit eine sehr hohe Datensicherheit erreicht wird.
Stand dieser Beschreibung: 26.03.2026.


Ein strukturierter Aufbau der Variablen lässt sich sehr komfortabel mit dem Kostenfrei verfügbaren IBH OPC UA Editor erstellen.
Diese Seite beschreibt die MQTT-Funktion des IBH OPC UA Server/Client auf Basis des aktuellen Quellcodes und der vorhandenen Wiki-Inhalte.


== Kurzueberblick ==


Die MQTT-Funktion im IBHL ink UA unterstützt eine remanente Speicherung für Nachrichten auf der SD-Karte. Damit können Nachrichten auch nach einem Neustart, Stromausfall oder Verbindungsabbruch erhalten bleiben und später gesendet werden.
* Der Server unterstuetzt MQTT Publish und Subscribe.
* Mehrere MQTT-Verbindungen zu unterschiedlichen Brokern koennen parallel betrieben werden.
* Die Konfiguration erfolgt ueber eine XML-Datei <code>ibhlinkua-mqtt.xml</code>.
* Die Weboberflaeche besitzt eine eigene MQTT-Seite zum Hochladen, Herunterladen, Neustarten und Loeschen der MQTT-Konfiguration.
* Neben klassischem JSON-Mapping ist auch Sparkplug B unterstuetzt.
* TLS, Client-Zertifikate, eigene CA-Zertifikate, Last-Will-Nachrichten, Pufferung und persistente Ablage von Nachrichten werden unterstuetzt.
* Laut Produkthistorie wurde mit Version 5.37 der SparkplugB-Support verbessert.


Durch die Unterstützung von Sparkplug-B wird MQTT industrietauglich (IIoT).
== Bedienung in der Weboberflaeche ==


Die entscheidenden Vorteile von Sparkplug-B:
Im aktuellen Stand besitzt die Weboberflaeche einen eigenen Bereich <code>MQTT</code>.


- Einheitliches Datenmodell
Verfuegbare Aktionen:


- Online/Offline-Erkennung
* MQTT XML Konfiguration hochladen
* MQTT XML Konfiguration herunterladen
* MQTT Verbindungen neustarten
* MQTT XML Konfiguration loeschen
* Diagnoseansicht aktualisieren


- Plug-and-Play
Die Diagnoseansicht zeigt pro Verbindung mindestens:


- Binär & effizient
* Brokeradresse
* Client ID
* Verbindungsstatus


Die MQTT-Funktion kann über die SPS gesteuert werden – allerdings nicht direkt über MQTT-Befehle, sondern über die OPC UA-Variablen, die mit MQTT-Topics verknüpft sind.
Die Konfigurationsdatei wird intern als <code>ibhlinkua-mqtt.xml</code> behandelt.


*In der Konfiguration des IBHLinkUA können Sie OPC UA-Variablen definieren, die als Trigger oder Status für MQTT dienen.
== Grundprinzip ==
*Diese Variablen können von der SPS (z. B. Siemens S7, Mitsubishi, Rockwell) über OPC UA gelesen oder geschrieben werden.
*Typische Steuerungen:
**Publish auslösen: Eine SPS-Variable wird auf einen bestimmten Wert gesetzt, und der IBHLinkUA sendet die Nachricht an das MQTT-Topic.
**Status überwachen: Empfangene MQTT-Nachrichten werden in OPC UA-Variablen geschrieben, die die SPS auswertet.


Die MQTT-Funktion bildet MQTT-Broker und Topics im OPC-UA-Adressraum ab.


Der IBH Link UA kann somit als Schicht zwischen Maschinen und Leitsystemen (MES, ERP…) unabhängig von Simatic, Mitsubishi oder Rockwell Steuerungen eingesetzt werden.
Dabei gilt:
 
* unter <code>Publish</code> definierte Topics senden Daten aus dem OPC-UA-Server an MQTT
* unter <code>Subscribe</code> definierte Topics empfangen MQTT-Nachrichten und schreiben sie in den OPC-UA-Adressraum bzw. in zugeordnete OPC-Variablen
* die Topic- und Variablenstruktur wird aus der XML-Konfiguration aufgebaut
 
== Betriebsarten ==
 
=== Klassisches MQTT mit JSON ===
 
Der Standardfall ist JSON-basierte Kommunikation.
 
* Publish: OPC-UA-Werte werden als JSON an ein MQTT-Topic gesendet
* Subscribe: eingehendes JSON wird geparst und in die definierten Variablen geschrieben
* Strukturen und Arrays werden unterstuetzt
 
=== Sparkplug B ===
 
Im aktuellen Code ist Sparkplug-Binary explizit implementiert.
 
Unterstuetzte Topictypen:
 
* <code>DBIRTH</code>
* <code>DDATA</code>
* <code>DDEATH</code>
* <code>DCMD</code>
* <code>NBIRTH</code>
* <code>NDATA</code>
* <code>NDEATH</code>
* <code>NCMD</code>
 
Aktuelles Verhalten laut Code:
 
* Sparkplug-Nachrichten werden ueber protobuf dekodiert.
* Bei Verbindungsaufbau werden fuer Sparkplug-Publisher automatisch Birth-Nachrichten erzeugt.
* Bei Verbindungsverlust wird der Birth-Status zurueckgesetzt.
* Bei <code>Node Control/Rebirth</code> kann erneut ein Birth-Versand ausgeloest werden.
 
== Konfiguration der MQTT-Serververbindung ==
 
MQTT-Server werden ueber die XML-Datei beschrieben.
 
Unterstuetzte Funktionsbereiche:
 
* Brokeradresse
* Client ID
* Benutzername und Passwort
* TLS mit CA-Zertifikat, Client-Zertifikat und Private Key
* Private-Key-Passwort
* Last-Will-Nachricht
* automatische Wiederverbindung
* HTTP- oder HTTPS-Proxy
* Puffern von Nachrichten bei Verbindungsunterbrechung
* persistente Ablage gepufferter Nachrichten
 
== Sicherheit und TLS ==
 
Der Code unterstuetzt abgesicherte MQTT-Verbindungen mit:
 
* CA-Zertifikat
* Client-Zertifikat
* Private Key
* optionalem Passwort fuer den Private Key
 
Wenn kein CA-Zertifikat angegeben ist, kann die Server-Zertifikatspruefung deaktiviert werden. Im Code ist ausserdem PSK-Unterstuetzung vorgesehen, wenn Identity und Passwort gesetzt sind.
 
== Last Will ==
 
Last-Will-Nachrichten sind implementiert.
 
Verwendete Eigenschaften:
 
* Will Topic
* Will Message
* Will QoS
* Will Retain
 
== Puffern und persistente Ablage ==
 
Die MQTT-Bibliothek wird im Code mit <code>maxBufferedMessages</code> betrieben.
 
Aktueller Stand:
 
* bei <code>maxBufferedMessages &gt; 0</code> wird <code>clean session</code> deaktiviert
* damit koennen Nachrichten waehrend Unterbrechungen zwischengespeichert werden
* mit <code>PersistDir</code> ist eine persistente Ablage moeglich
* unter Linux wird das Persistenzverzeichnis zusaetzlich ueber Dateisystem-Events ueberwacht
 
== Cloud-spezifische Varianten ==
 
=== Microsoft Azure IoT Hub ===
 
Die bisherige Doku beschreibt eine spezielle Anbindung ueber <code>AzureIoTConnectionString</code>.
 
Wichtiger Hinweis:
 
* pro Azure IoT Hub ist nur ein Topic moeglich
 
Der aktuelle Code enthaelt weiterhin spezielle Pfade fuer Azure-Publish- und Subscribe-Topicnamen.
 
=== Amazon AWS IoT ===
 
Die AWS-IoT-Anbindung erfolgt ueber Zertifikate.
 
Praktisch relevant sind:
 
* CA-Zertifikat
* Client-Zertifikat
* Private Key
 
== Topic-Konfiguration ==
 
Topics werden unter <code>Publish</code> oder <code>Subscribe</code> definiert.
 
Aktuell relevante Topic-Parameter:
 
* <code>name</code>
* <code>qos</code>
* <code>retain</code>
* <code>trigger_var</code>
* <code>trigger_mode</code>
* <code>trigger_sampling_interval</code>
* <code>status_var</code>
* <code>deadband</code>
 
=== QoS ===
 
Unterstuetzt werden:
 
* <code>0</code>
* <code>1</code>
* <code>2</code>
 
=== retain ===
 
Fuer Publish-Topics kann <code>retain="true"</code> gesetzt werden.
 
=== Trigger ===
 
Der Code unterstuetzt triggergesteuertes Senden.
 
Verwendete Parameter:
 
* <code>trigger_var</code>
* <code>trigger_mode</code>
* <code>trigger_sampling_interval</code>
 
Dokumentierte Werte fuer <code>trigger_mode</code>:
 
* <code>rising_edge</code>
* <code>falling_edge</code>
* <code>value_change</code>
 
=== status_var ===
 
<code>status_var</code> ist eine OPC-Variable fuer den Sendestatus.
 
Dokumentiertes Verhalten:
 
* Wert <code>1</code>: Senden oder Puffern erfolgreich
* Wert <code>2</code>: Fehler oder Puffer voll
* die SPS sollte bei <code>1</code> einen neuen Wert uebergeben und danach wieder auf <code>0</code> setzen
 
=== deadband ===
 
Der aktuelle Code unterstuetzt <code>deadband</code> sowohl auf Topic- als auch auf Variablenebene.
 
== Variablen und Datentypen ==
 
Im aktuellen Code werden unter anderem diese Datentypen unterstuetzt:
 
* <code>Boolean</code>
* <code>SByte</code>
* <code>Byte</code>
* <code>Int16</code>
* <code>UInt16</code>
* <code>Int32</code>
* <code>UInt32</code>
* <code>Int64</code>
* <code>UInt64</code>
* <code>Float</code>
* <code>Double</code>
* <code>DateTime</code>
* <code>String</code>
* die entsprechenden Array-Typen
 
Zusaetzlich werden in der bestehenden Doku beschrieben:
 
* Konstanten ueber <code>const</code>
* freie Namensvergabe fuer Variablen
* Strukturen mit geschachtelten Elementen
* Anbindung an externe OPC-UA-Servervariablen
 
== Verhalten bei Subscribe ==
 
Im aktuellen Code gilt:
 
* JSON-Payloads werden geparst und typgerecht in MQTT-Variablen geschrieben.
* Vorhandene OPC-Zuordnungen werden anschliessend direkt beschrieben.
* Fehler beim Parsen oder Schreiben werden im Verbindungsstatus hinterlegt.
* Bei Sparkplug werden eingehende protobuf-Metriken in den OPC-UA-Adressraum uebernommen.
 
== Verhalten bei Publish ==
 
Im aktuellen Code gilt:
 
* Publish-Topics uebertragen Werte aenderungsgetrieben oder triggergesteuert.
* <code>retain</code> und <code>QoS</code> werden an die MQTT-Bibliothek uebergeben.
* Bei Sparkplug werden je nach Topic-Typ Birth- oder Data-Nachrichten erzeugt.
 
== Diagnose und Betrieb ==
 
Die MQTT-Seite der Weboberflaeche ist fuer den laufenden Betrieb relevant.
 
Typische Betriebsaktionen:
 
# neue <code>ibhlinkua-mqtt.xml</code> hochladen
# MQTT-Verbindungen neu starten
# Verbindungsliste und Status pruefen
# bei Bedarf Konfiguration herunterladen oder loeschen
 
Fuer Support und Fehlersuche sind besonders wichtig:
 
* Brokeradresse
* Client ID
* Verbindungsstatus
* XML-Konfigurationsdatei
* eingesetzte Zertifikate
* Topicnamen und Triggerparameter

Version vom 27. März 2026, 08:58 Uhr

IBH Link UA: MQTT-Funktion

Stand dieser Beschreibung: 26.03.2026.

Diese Seite beschreibt die MQTT-Funktion des IBH OPC UA Server/Client auf Basis des aktuellen Quellcodes und der vorhandenen Wiki-Inhalte.

Kurzueberblick

  • Der Server unterstuetzt MQTT Publish und Subscribe.
  • Mehrere MQTT-Verbindungen zu unterschiedlichen Brokern koennen parallel betrieben werden.
  • Die Konfiguration erfolgt ueber eine XML-Datei ibhlinkua-mqtt.xml.
  • Die Weboberflaeche besitzt eine eigene MQTT-Seite zum Hochladen, Herunterladen, Neustarten und Loeschen der MQTT-Konfiguration.
  • Neben klassischem JSON-Mapping ist auch Sparkplug B unterstuetzt.
  • TLS, Client-Zertifikate, eigene CA-Zertifikate, Last-Will-Nachrichten, Pufferung und persistente Ablage von Nachrichten werden unterstuetzt.
  • Laut Produkthistorie wurde mit Version 5.37 der SparkplugB-Support verbessert.

Bedienung in der Weboberflaeche

Im aktuellen Stand besitzt die Weboberflaeche einen eigenen Bereich MQTT.

Verfuegbare Aktionen:

  • MQTT XML Konfiguration hochladen
  • MQTT XML Konfiguration herunterladen
  • MQTT Verbindungen neustarten
  • MQTT XML Konfiguration loeschen
  • Diagnoseansicht aktualisieren

Die Diagnoseansicht zeigt pro Verbindung mindestens:

  • Brokeradresse
  • Client ID
  • Verbindungsstatus

Die Konfigurationsdatei wird intern als ibhlinkua-mqtt.xml behandelt.

Grundprinzip

Die MQTT-Funktion bildet MQTT-Broker und Topics im OPC-UA-Adressraum ab.

Dabei gilt:

  • unter Publish definierte Topics senden Daten aus dem OPC-UA-Server an MQTT
  • unter Subscribe definierte Topics empfangen MQTT-Nachrichten und schreiben sie in den OPC-UA-Adressraum bzw. in zugeordnete OPC-Variablen
  • die Topic- und Variablenstruktur wird aus der XML-Konfiguration aufgebaut

Betriebsarten

Klassisches MQTT mit JSON

Der Standardfall ist JSON-basierte Kommunikation.

  • Publish: OPC-UA-Werte werden als JSON an ein MQTT-Topic gesendet
  • Subscribe: eingehendes JSON wird geparst und in die definierten Variablen geschrieben
  • Strukturen und Arrays werden unterstuetzt

Sparkplug B

Im aktuellen Code ist Sparkplug-Binary explizit implementiert.

Unterstuetzte Topictypen:

  • DBIRTH
  • DDATA
  • DDEATH
  • DCMD
  • NBIRTH
  • NDATA
  • NDEATH
  • NCMD

Aktuelles Verhalten laut Code:

  • Sparkplug-Nachrichten werden ueber protobuf dekodiert.
  • Bei Verbindungsaufbau werden fuer Sparkplug-Publisher automatisch Birth-Nachrichten erzeugt.
  • Bei Verbindungsverlust wird der Birth-Status zurueckgesetzt.
  • Bei Node Control/Rebirth kann erneut ein Birth-Versand ausgeloest werden.

Konfiguration der MQTT-Serververbindung

MQTT-Server werden ueber die XML-Datei beschrieben.

Unterstuetzte Funktionsbereiche:

  • Brokeradresse
  • Client ID
  • Benutzername und Passwort
  • TLS mit CA-Zertifikat, Client-Zertifikat und Private Key
  • Private-Key-Passwort
  • Last-Will-Nachricht
  • automatische Wiederverbindung
  • HTTP- oder HTTPS-Proxy
  • Puffern von Nachrichten bei Verbindungsunterbrechung
  • persistente Ablage gepufferter Nachrichten

Sicherheit und TLS

Der Code unterstuetzt abgesicherte MQTT-Verbindungen mit:

  • CA-Zertifikat
  • Client-Zertifikat
  • Private Key
  • optionalem Passwort fuer den Private Key

Wenn kein CA-Zertifikat angegeben ist, kann die Server-Zertifikatspruefung deaktiviert werden. Im Code ist ausserdem PSK-Unterstuetzung vorgesehen, wenn Identity und Passwort gesetzt sind.

Last Will

Last-Will-Nachrichten sind implementiert.

Verwendete Eigenschaften:

  • Will Topic
  • Will Message
  • Will QoS
  • Will Retain

Puffern und persistente Ablage

Die MQTT-Bibliothek wird im Code mit maxBufferedMessages betrieben.

Aktueller Stand:

  • bei maxBufferedMessages > 0 wird clean session deaktiviert
  • damit koennen Nachrichten waehrend Unterbrechungen zwischengespeichert werden
  • mit PersistDir ist eine persistente Ablage moeglich
  • unter Linux wird das Persistenzverzeichnis zusaetzlich ueber Dateisystem-Events ueberwacht

Cloud-spezifische Varianten

Microsoft Azure IoT Hub

Die bisherige Doku beschreibt eine spezielle Anbindung ueber AzureIoTConnectionString.

Wichtiger Hinweis:

  • pro Azure IoT Hub ist nur ein Topic moeglich

Der aktuelle Code enthaelt weiterhin spezielle Pfade fuer Azure-Publish- und Subscribe-Topicnamen.

Amazon AWS IoT

Die AWS-IoT-Anbindung erfolgt ueber Zertifikate.

Praktisch relevant sind:

  • CA-Zertifikat
  • Client-Zertifikat
  • Private Key

Topic-Konfiguration

Topics werden unter Publish oder Subscribe definiert.

Aktuell relevante Topic-Parameter:

  • name
  • qos
  • retain
  • trigger_var
  • trigger_mode
  • trigger_sampling_interval
  • status_var
  • deadband

QoS

Unterstuetzt werden:

  • 0
  • 1
  • 2

retain

Fuer Publish-Topics kann retain="true" gesetzt werden.

Trigger

Der Code unterstuetzt triggergesteuertes Senden.

Verwendete Parameter:

  • trigger_var
  • trigger_mode
  • trigger_sampling_interval

Dokumentierte Werte fuer trigger_mode:

  • rising_edge
  • falling_edge
  • value_change

status_var

status_var ist eine OPC-Variable fuer den Sendestatus.

Dokumentiertes Verhalten:

  • Wert 1: Senden oder Puffern erfolgreich
  • Wert 2: Fehler oder Puffer voll
  • die SPS sollte bei 1 einen neuen Wert uebergeben und danach wieder auf 0 setzen

deadband

Der aktuelle Code unterstuetzt deadband sowohl auf Topic- als auch auf Variablenebene.

Variablen und Datentypen

Im aktuellen Code werden unter anderem diese Datentypen unterstuetzt:

  • Boolean
  • SByte
  • Byte
  • Int16
  • UInt16
  • Int32
  • UInt32
  • Int64
  • UInt64
  • Float
  • Double
  • DateTime
  • String
  • die entsprechenden Array-Typen

Zusaetzlich werden in der bestehenden Doku beschrieben:

  • Konstanten ueber const
  • freie Namensvergabe fuer Variablen
  • Strukturen mit geschachtelten Elementen
  • Anbindung an externe OPC-UA-Servervariablen

Verhalten bei Subscribe

Im aktuellen Code gilt:

  • JSON-Payloads werden geparst und typgerecht in MQTT-Variablen geschrieben.
  • Vorhandene OPC-Zuordnungen werden anschliessend direkt beschrieben.
  • Fehler beim Parsen oder Schreiben werden im Verbindungsstatus hinterlegt.
  • Bei Sparkplug werden eingehende protobuf-Metriken in den OPC-UA-Adressraum uebernommen.

Verhalten bei Publish

Im aktuellen Code gilt:

  • Publish-Topics uebertragen Werte aenderungsgetrieben oder triggergesteuert.
  • retain und QoS werden an die MQTT-Bibliothek uebergeben.
  • Bei Sparkplug werden je nach Topic-Typ Birth- oder Data-Nachrichten erzeugt.

Diagnose und Betrieb

Die MQTT-Seite der Weboberflaeche ist fuer den laufenden Betrieb relevant.

Typische Betriebsaktionen:

  1. neue ibhlinkua-mqtt.xml hochladen
  2. MQTT-Verbindungen neu starten
  3. Verbindungsliste und Status pruefen
  4. bei Bedarf Konfiguration herunterladen oder loeschen

Fuer Support und Fehlersuche sind besonders wichtig:

  • Brokeradresse
  • Client ID
  • Verbindungsstatus
  • XML-Konfigurationsdatei
  • eingesetzte Zertifikate
  • Topicnamen und Triggerparameter