Oft heißt es, Gateways zwischen IIoT-Geräten und Clouds wie Azure seien mit OPC UA und MQTT schwer umzusetzen, es fehle an Dokumentation und Tutorials. Erich Barnstedt von Microsoft hält mit einem selbst geschriebenen Programm entgegen: Die Minimallösung einer Gateway-App zwischen IIoT und Cloud kommt auf rund 100 Codezeilen – und passt samt Howto auf zwei Heftseiten.
Erich Barnstedt ist Chief Architect, Standards & Consortia, Azure IoT bei Microsoft. (Bild: Microsoft GmbH)
Erich Barnstedt setzt für seine Minimallösung auf C# und eine .NetCore-Konsolenanwendung. Andere Programmiersprachen und Frameworks führen zu ähnlichen Ergebnissen. .NetCore hat den Vorteil, dass es plattformübergreifend ist und Docker-Container unterstützt. Der Microsoft-Chief-Architect nutzt zudem folgenden Quellen:
• Als OPC-UA-Stack verwendet er den Referenz-Stack der OPC Foundation, der als Open-Source auf GitHub verfügbar ist und als vorgefertigtes NuGet-Paket erhältlich ist.
• Als MQTT-Client dient M2Mqtt NuGet für .NetCore, wobei nichts gegen andere MQTT-Clients spreche, so Barnstedt.
• Zudem benötigt er einen Zugang zu einem OPC-UA-Server, um Daten auszulesen, und zu einem cloud-basierten MQTT-Broker, zu dem die Daten gesendet werden. Dazu nutzt er den Azure IoT Hub von Microsoft.
Zuerst wird ein neuer .NetCore-Konsolenanwendungs-Projekt in Visual Studio erstellt. Danach gilt es, die beiden NuGet-Pakete M2MqttDotnetCore und OPCFoundation.NetStandard.Opc.UA zum Projekt hinzuzufügen. Es folgt eine OPC-UA-Client-Konfigurations-XML-Datei, die ebenfalls auf Github herunterzuladen ist und unter dem Namen Mqtt.Publisher.Config.xml verwendet werden kann. Der ApplicationName in der Datei wird in MQTTPublisher geändert. Als Nächstes kommt die Konfiguration des OPC-UA-Clients über die config-xml-Datei. Zudem wird ein einfacher OPC-UA-Zertifikatsvalidator hinzugefügt:
// create OPC UA cert validator app.ApplicationConfiguration.CertificateValidator = new CertificateValidator(); app.ApplicationConfiguration.CertificateValidator.CertificateValidation += new CertificateValidationEventHandler(OPCUAServerCertificateValidationCallback);
Dann ist die Konfiguration des MQTT-Clients dran – unter Verwendung eines verschlüsselten TLSv1.2-Transports:
MqttClient mqttClient = new MqttClient(brokerName, 8883, true, MqttSslProtocols.TLSv1_2, MQTTBrokerCertificateValidationCallback, null);
Für die Integration von Azure IoT Hub müssen Anmeldedaten eingegeben werden. Standardmäßig lautet der Name azure-devices.net. Der Clientname ist der Name des IoT-Hub-Geräts, das für die App über das Azure-Portal erstellt werden muss. Der Schlüssel schließlich ist der Primärschlüssel des Geräts, der beim Erstellen des Geräts generiert wird. Die beiden Zertifikats-Validierer, auf die im Code verwiesen wird, können so aussehen – und durch zusätzliche, hier nicht aufgeführte Überprüfungen ergänzt werden:
Nächster Schritt: Generierung eines Passworts, das der MQTT-Broker erwartet. Im Fall von Azure IoT Hub ist dies ein SAS-Token, das wie folgt generiert wird:
Jetzt lässt sich über Usernamen und Passwort eine Verbindung zum MQTT-Broker herstellen:
// connect to MQTT broker byte returnCode = mqttClient.Connect(clientName, userName, password); if (returnCode != MqttMsgConnack.CONN_ACCEPTED) { Console.WriteLine(„Connection to MQTT broker failed with “ + returnCode.ToString() + „!“);
return; }
Es folgt die Verbindung zum Test-OPC-UA-Server und zum Start einer neuen Session:
// find endpoint on a local OPC UA server EndpointDescription endpointDescription = CoreClientUtils.SelectEndpoint(„opc.tcp://localhost:61210“, false); EndpointConfiguration endpointConfiguration = EndpointConfiguration.Create(app.ApplicationConfiguration); ConfiguredEndpoint endpoint = new ConfiguredEndpoint(null, endpointDescription, endpointConfiguration);
// Create OPC UA session Session session = Session.Create(app.ApplicationConfiguration, endpoint, false, false, app.ApplicationConfiguration.ApplicationName, 30 * 60 * 1000, new UserIdentity(), null).GetAwaiter().GetResult(); if (!session.Connected) { Console.WriteLine(„Connection to OPC UA server failed!“); return; }
Im vorangegangenen Codeblock wird eine Verbindung zu einem OPC-UA-Server hergestellt, der lokal auf Port 61210 läuft. Der OPC-UA-Stack wählt außerdem einen Endpunkt auf dem OPC-UA-Server aus. Jetzt ist das Programm bereit, OPC-UA-PubSub-Daten an die Cloud zu senden. Dafür verwendet der Code eine JSON-Kodierung, die ohne Konvertierung von Cloud-Analyse- und Datenbanksoftware genutzt werden kann. Um sicherzustellen, dass die JSON-Daten mit der OPC-UA-Spezifikation übereinstimmen, nutzt der Code den JSON-Encoder der OPC Foundation, der im Referenz-Stack integriert ist:
// send data for a minute, every second for (int i = 0; i < 60; i++) { int publishingInterval = 1000;
// read a variable node from the OPC UA server (for example the current time) DataValue serverTime = session.ReadValue(Variables.Server_ServerStatus_CurrentTime); VariableNode node = (VariableNode)session.ReadNode(Variables.Server_ServerStatus_CurrentTime);
Das Verschicken von Daten in die Cloud wird anhand der OPC UA Variable ‚Current Time‘ vom OPC-UA-Server realisiert. Dafür gibt es zwar eine effizientere Möglichkeit: über das Erstellen einer OPC-UA-Subscription und das Versenden von Daten nur dann, wenn sie sich geändert haben. Für die Demonstrationszwecke im Rahmen dies Projekts reicht die beschriebene Variante aber aus. Wenn die App Daten eine Minute lang gesendet hat, schließt sie automatisch die Verbindungen:
session.Close(); session.Dispose();
mqttClient.Disconnect();
Ziel erreicht: Die letzte geschweifte Klammer trägt die Zeilennummer 124, aber das ließe sich durch das Entfernen von Leerzeilen und Kommentaren noch reduzieren. Die gut 100 Zeilen zeigen, wie einfach es ist, OPC UA sowie MQTT in eine industrielle IoT-Gateway-App zu integrieren und so die Vorteile zu nutzen, die sich aus der Verwendung internationaler Standards für digitale Transformationsprojekte ergeben – ohne sich an einen Anbieter zu binden, nicht einmal an Microsoft.
Mittelständische Unternehmen investieren selbst in schwierigen Zeiten in Microsoft-Technologien, weil sie überzeugt sind, dass ihre Mitarbeiterproduktivität steigt und sich ihre Kostenstruktur bessert. Microsoft hat mit dem Microsoft-Partner-Network ein Netzwerk aufgebaut, das ein Forum für den Aufbau von Partnerschaften, Zugang zu Ressourcen und einen Rahmen für Dialoge und Kooperationen bietet. Für unsere Leser gibt die Microsoft-Partnerübersicht in Ausgabe Juli/August der IT&Production Tipps für die Suche nach einer geeigneten Branchen- oder Speziallösung im Bereich des produzierenden Gewerbes.
Auf der Suche nach Innovation, nach neuen Lösungen und der Abgrenzung zum Mitbewerb vernetzen sich zunehmend mehr Unternehmen mit externen Experten und Partnern. SAP hat mit dem SAP-Ecosystem ein Netzwerk aufgebaut, das ein Forum für den Aufbau von Partnerschaften, Zugang zu Ressourcen und einen Rahmen für Dialoge und Kooperationen bietet. In der Maiausgabe der Fachzeitschrift IT&Production erhalten unsere Leser einen aktuellen Überblick zum SAP-Ecosystem im Bereich des produzierenden Gewerbes.
Um alle Potenziale eines MES umfassend ausnutzen zu können, beleuchten unsere Autoren in der Serie von MES Wissen Kompakt die erfolgskritischen Faktoren, um Fertigungsunternehmen präventiv zu steuern. Darüber hinaus präsentiert MES Wissen Kompakt ein breites Spektrum an Firmenportraits, Produkt- neuheiten und Dienst- leistungen im MES-Umfeld.
Ein Unternehmen, das sich mit der Auswahl eines ERP- Systems befasst, muss sich gleichsam mit einem viel- schichtigen Software-Markt und unklaren Interessen- lagen an interne Abwick- lungsprozesse auseinander- setzen. Guter Rat bei der Investitionsentscheidung ist teuer. ERP/CRM Wissen Kompakt unterstützt Sie bei der gezielten Investition in die IT-Infrastruktur.
Immer mehr Anbieter von Maschinen, Automatisierungstechnik und Industriesoftware integrieren künstliche Intelligenz in ihre Produkte. Das ganze Potenzial spielen selbstlernende Systeme aber erst aus, wenn sie passgenau auf ihren Einsatz in Fertigung und Büro zugeschnitten wurden. Über beide Möglichkeiten, als Fertiger die Vorzüge von industrieller KI zu nutzen, geht es im regelmäßig aktualisierten Themenheft Künstliche Intelligenz.
Das Internet of Things verändert Produktwelten und die Vernetzung in der Fertigung gleichermaßen. Entstehende Ökosysteme laden zur einer neuen Form der Zusammenarbeit ein. Die Spezialausgabe IoT Wissen Kompakt informiert über die Technologie, Projektierung und Anbieter für die eigene Applikation, in- und außerhalb der Fabrik.