IBH Link UA:MQTT Beschreibung: Unterschied zwischen den Versionen
KKeine Bearbeitungszusammenfassung |
KKeine Bearbeitungszusammenfassung |
||
| Zeile 1: | Zeile 1: | ||
= 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 == | |||
Die MQTT- | * 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. | |||
== Bedienung in der Weboberflaeche == | |||
Im aktuellen Stand besitzt die Weboberflaeche einen eigenen Bereich <code>MQTT</code>. | |||
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 | Die Konfigurationsdatei wird intern als <code>ibhlinkua-mqtt.xml</code> behandelt. | ||
== Grundprinzip == | |||
Die MQTT-Funktion bildet MQTT-Broker und Topics im OPC-UA-Adressraum ab. | |||
Der | 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 > 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
Publishdefinierte Topics senden Daten aus dem OPC-UA-Server an MQTT - unter
Subscribedefinierte 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:
DBIRTHDDATADDEATHDCMDNBIRTHNDATANDEATHNCMD
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/Rebirthkann 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 > 0wirdclean sessiondeaktiviert - damit koennen Nachrichten waehrend Unterbrechungen zwischengespeichert werden
- mit
PersistDirist 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:
nameqosretaintrigger_vartrigger_modetrigger_sampling_intervalstatus_vardeadband
QoS
Unterstuetzt werden:
012
retain
Fuer Publish-Topics kann retain="true" gesetzt werden.
Trigger
Der Code unterstuetzt triggergesteuertes Senden.
Verwendete Parameter:
trigger_vartrigger_modetrigger_sampling_interval
Dokumentierte Werte fuer trigger_mode:
rising_edgefalling_edgevalue_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
1einen neuen Wert uebergeben und danach wieder auf0setzen
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:
BooleanSByteByteInt16UInt16Int32UInt32Int64UInt64FloatDoubleDateTimeString- 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.
retainundQoSwerden 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
ibhlinkua-mqtt.xmlhochladen - 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