Über unsMediaKontaktImpressum
Marcus Munzert 31. Mai 2016

Industrielle IoT-Lösungen mit Eclipse IoT und modellgetriebener Entwicklung

Unter dem Begriff "Industrie 4.0" versteht man die Verzahnung der industriellen Produktion mit modernster Informations- und Kommunikationstechnik. Zu den technologischen Grundlagen gehört das Internet der Dinge (Internet of Things = IoT). Eine IoT-Lösung ist – neben der Hardware – verteilte, Event-getriebene Software, die oft mit mehreren Programmiersprachen entwickelt wird und deren Komponenten auf unterschiedlichsten Plattformen ausgeführt werden. Auch die Themen Big Data, Data Analytics und Artificial Intelligence können eine wichtige Rolle spielen.

Die Anforderungen an die Software und an die Entwickler sind dabei umfangreich: verteilte Software, unterschiedliche Programmiersprachen, Hardware-Vielfalt, Simulations- und Testbarkeit, Sicherheit, Robustheit, Wandelbarkeit, Integrationsfähigkeit mit Enterprise-Systemen. Es werden zur Umsetzung einer Lösung Fachleute für die Bereiche Embedded- und Enterprise-Entwicklung benötigt, die in der Regel kaum eine Schnittmenge haben. Und trotzdem müssen die beiden Gruppen gemeinsam an einer ganzheitlichen Lösung arbeiten.

Der Artikel zeigt auf, wie man mit den Software-Komponenten der Eclipse IoT Working Group [3] in Kombination mit modellgetriebenen Entwicklungsmethoden diese Anforderungen besser in den Griff bekommen kann.

Besonderheiten im industriellen Internet der Dinge

Industrielles und privates IoT haben technologisch gesehen dieselben Funktionsprinzipien. Im Gegensatz zu privaten Anwendungen von IoT – wie zum Beispiel intelligente Heizungs-Thermostate oder Fitness-Armbänder – setzen industrielle jedoch andere Schwerpunkte und verfolgen andere Ziele.

Zentrale Ziele industrieller Lösungen:

  • Flexibilisierung der Produktion
  • Produktivitätssteigerung

Wichtige Eigenschaften industrieller Lösungen:

  • Ausfallsicherheit
  • Langlebigkeit
  • Leichte Erweiter- und Anpassbarkeit
  • Sicherheit für Daten und Kommunikationswege
  • Integrationsfähigkeit mit anderen IT-Systemen (dazu gehören auch andere IoT-Lösungen)
  • Individualität

Gerade die Individualität spielt eine große Rolle. Während zum Beispiel Fitnessarmbänder und die zugehörigen Software-Systeme von sehr vielen Kunden gekauft werden, ist eine IoT-Lösung für einen Industrie-Kunden eher ein Einzelstück. Ein Unternehmen möchte sich ja durch den Nutzen einer IoT-Lösung von der Konkurrenz abheben und hat deswegen kein großes Interesse daran, dass die Konkurrenz dieselbe Lösung bekommt. Gartner sagt hierzu: "Any enterprise embracing the IoT will need to develop an IoT platform strategy, but incomplete competing vendor approaches will make standardization difficult through 2018." [1].

Das IoT-Dilemma

Es gibt eine unvorstellbar große, weiter zunehmende Menge und Vielfalt an Geräten. In Kombination mit der unüberschaubaren Menge von konkurrierenden IoT-Plattformen ergibt sich eine Komplexität der möglichen IoT-Lösungen, unter der die verschiedenen IoT-Initiativen leiden. Es gibt zwar Standardisierungsbemühungen auf allen Ebenen, doch diese gehen nicht weit genug und gleichzeitig gibt es zu viele davon. Wenn es für einen Bereich bereits X verschiedene Standards gibt, dann kommt schnell jemand um die Ecke und sagt: "Dafür benötigen wir einen neuen, einheitlichen Standard!". Und prompt gibt es X+1 Standards.

Die Rolle von Open Source

Heutzutage gibt es kaum noch Software, die nicht – zumindest teilweise – auf Open Source-Software basiert. Das hat gute Gründe. Mit Open Source-Software sind die Hürden für Innovationen niedriger. Entwickler werden von Open Source-Software angezogen. Dadurch verbreitet sich Know-how schneller und weiter. Und es ist leichter, eine Community um eine Technologie, ein Framework, ein Projekt herum aufzubauen. Es hat sich in der Vergangenheit immer wieder gezeigt, dass eine schnelle Verbreitung von neuen Technologien am besten mit der Kombination von offenen Standards mit robusten Open Source-Implementierungen erreicht werden kann. Bosch zum Beispiel sagt: “The IoT will be built on Open Source[2].

Die Eclipse IoT Working Group [3]– ein Zusammenschluss von weit über 20 kleinen und großen Unternehmen – geht genau diesen Weg für die Domäne IoT. Firmen wie Eurotech, Sierra Wireless, IBM, VeriSign, Red Hat, Siemens und Bosch SI stellen Open Source-Implementierungen für offene Standards wie MQTT, CoAP und OMA LightweightM2M bereit. Mit Vorto [4] steht zudem ein außergewöhnliches Projekt bereit, das die Möglichkeit bietet, Geräte aller Art abstrakt zu beschreiben und diese Modelle in einem zentralen Repository [5] bereitzustellen.

Modelle von Geräten, sogenannte "Information Models", werden in textueller Form erstellt:

namespace com.bosch.demo.xdk
version 1.0.0
displayname "XDK"
description "Information model for XDK"
category xdk

using com.bosch.fb.sensors.Accelerometer ; 1.0.0
using com.bosch.fb.sensors.Gyroscope ; 1.0.0
using com.bosch.fb.sensors.HumiditySensor ; 1.0.0
using com.bosch.fb.sensors.Magnetometer ; 1.0.0
using com.bosch.fb.sensors.Barometer ; 1.0.0
using com.bosch.fb.sensors.TemperatureSensor ; 1.0.0
using com.bosch.fb.sensors.LightSensor ; 1.0.0
using com.bosch.fb.devices.LightControl ; 1.0.0
using com.bosch.demo.xdk.fb.XDKSensorDevice ; 1.0.0
using com.bosch.demo.xdk.fb.AlertNotification ; 1.0.0
using com.bosch.demo.xdk.fb.XDKSensorDevice ; 1.0.0


infomodel XDK {


        functionblocks {

                accelerometer as Accelerometer
                gyroscope as Gyroscope
                humiditysensor as HumiditySensor
                magnetometer as Magnetometer
                barometer as Barometer
                temperaturesensor as TemperatureSensor
                lightsensor as LightSensor
                lightcontrol as LightControl
                xdksensordevice as XDKSensorDevice
                alertnotification as AlertNotification
                xdksensordevice1 as XDKSensorDevice
        }
}

Insgesamt bildet sich hier ein ganzes Ökosystem, auf dessen Basis IoT-Lösungen entwickelt werden können. Das Eclipse Hono-Projekt [6] liefert zum Beispiel die System-Komponenten, um IoT-Geräte an ein (Cloud-)Back-End anzuschließen und Telemetrie-Daten zentral zu sammeln und zu verarbeiten. Erst vor kurzem ist noch ein weiteres, interessantes Projekt hinzugekommen: Milo [7], eine Implementierung des OPC-UA-Standards, der in der Automatisierungsindustrie eine wichtige Rolle spielt. Die Aufnahme eines Eclipse-Projekts in die Eclipse Foundation ist mit einem wohldefinierten Prozess verbunden, bei dem auch rechtliche Fragen geklärt werden. Dadurch kann man sicher sein, dass man zum Beispiel Milo verwenden kann, ohne gegen Lizenzrechte Anderer zu verstoßen.

Die Reihe der Eclipse IoT-Projekte ist nicht abgeschlossen. Es ist davon auszugehen, dass nach und nach noch weitere Projekte hinzukommen werden, die für weitere Standards und Aufgaben Open Source-Komponenten bereitstellen werden.

Hier eine aktuelle Auswahl aus den Eclipse IoT-Projekten [8]:

Auswahl aus den Eclipse IoT-Projekten

Projekt Zweck
Paho Client-Implementierungen der Messaging-Protokolle MQTT und MQTT-SN. Es gibt Versionen in C, C++, C#, Java, Python, JavaScript und einen Service für Android.
Californium Java-Implementierung des Constrained Application Protocol (CoAP).
Vorto Werkzeug zur Erzeugung und Verwaltung von Technologie-unabhängigen Beschreibungen von Geräten.
Hono Framework zur Implementierung eines skalierbaren (Cloud-)Back-Ends um IoT-Geräte anzuschließen und Telemetrie-Daten zentral zu sammeln und zu verarbeiten.
Leshan Java-Implementierung von OMA Lightweight M2M (LWM2M).
Wakaama Kein Framework, sondern C Source-Code, den man in ein C-Programm einbinden kann. Implementiert wie Leshan OMA Lightweight M2M (LWM2M).
Milo Implementierung von OPC Unified Architecture.
Kura Java/OSGi-basierter Container für M2M-Anwendungen die auf einem Gateway laufen.
Concierge Leichtgewichtiger OSGi-Container, implementiert die OSGi Core Specification R5.
Mosquitto Leichtgewichtige Server-Implementierung der Protokolle MQTT und MQTT-SN, programmiert in C.
Tiaki Bibliothek, die sichere Service-Discovery-Funktionen über ein Command-Line-Interface und über SDKs bereitstellt. Es gibt bereits eine Implementierung in Java, eine Implementierung in C ist geplant.
hawkBit Framework zur Erstellung einer Domänen-unabhängigen Back-End-Lösung für das Ausrollen von Installationen/Updates von Software und Firmware, sowohl für leistungsschwache Geräte als auch für Gateways und Controller.
Edje Definiert ein Java-API, den sogenannten Hardware Abstraction Layer (HAL), um auf Hardware-Features zuzugreifen, die von Mikrokontrollern zur Verfügung gestellt werden (GPIO, DAC, ADC, PWM, MEMS, UART, CAN, …).
OM2M Implementierung des ETSI M2M-Standards.

Der Weg zur individuellen IoT-Lösung

Monolithische Software spielt heutzutage nicht mehr die Rolle, die sie früher einmal hatte. Diese Entwicklung wird im Falle von IoT unter anderem durch dessen verteilte Natur noch verstärkt. Holt sich ein Unternehmen eine monolithische, abgeschlossene Standard-Lösung ins Haus, dann kann es damit auch nur Standardaufgaben lösen. Wenn der Anspruch besteht, mehr zu erreichen, ist man auf Individualisierung angewiesen. Die maximale Flexibilität wiederum erhält man, wenn auf Systemkomponenten gesetzt wird, die mit unterschiedlichster Hardware zurechtkommen und offene Schnittstellen bereitstellen. Dadurch sind sie leicht erweiter- und integrierbar. Dieser Bedarf ist einer der Gründe, warum in der heutigen Zeit eine Vielzahl von IoT-Plattformen als Software-Lösungen aus dem Boden schießen.

Um die Individualisierung einer IoT-Lösung erreichen und gleichzeitig flexibel bleiben zu können, muss aus dem großen Hardware- und IoT-Plattform-Angebot eine Auswahl getroffen und geschickt kombiniert werden. Das ist eine komplexe Aufgabe, die Risiken birgt. Man könnte ja auf die "falschen Pferde" setzen: fehlender Support, Werkzeuge verschwinden vom Markt, Werkzeuge unterstützen benötigte Hardware nicht, Entwickler für bestimmte Aufgaben sind schwer zu finden. Die Open Source-Komponenten von Eclipse IoT versprechen hier, nicht zuletzt durch die Unterstützung von großen Industrieunternehmen und einer breiten Entwickler-Community, ein sicheres Fundament zu sein. Trotzdem bleibt die Entwicklung von IoT-Lösungen auf deren Basis aufwändig und benötigt viel Fachwissen. Wie man diese Herausforderung besser in den Griff bekommen kann, erläutert der nächste Abschnitt.

Modellgetriebene Entwicklung für IoT

In der Software-Entwicklung für Embedded Systeme kommt schon seit längerem die modellgetriebene Entwicklung zum Einsatz. Gerade bei der Entwicklung von IoT-Lösungen kann die modellgetriebene Entwicklung aus folgenden Gründen seine Vorteile noch besser ausspielen:

  • Es wird viel neue Software entwickelt = kaum Rücksichtname auf bestehenden, manuell geschriebenen Code nötig
  • Viele Plattformen, Sprachen, Geräte gleichzeitig zu bedienen = plattformunabhängige Beschreibung lohnt sich tatsächlich, zum Beispiel für Geräte, Datenstrukturen und Schnittstellen
  • Verteilte Software = Modell der Lösung dient auch dazu, den Überblick zu bewahren
  • Konfiguration einer "All-in-one"-Lösung wäre zu kompliziert = passgenaue Generierung hingegen reduziert die Lösung auf Bestandteile, die tatsächlich benötigt werden
  • Teams mit verschiedenen Aufgabenbereichen – Embedded im Vergleich zu Enterprise – müssen zusammenarbeiten = Modell unterstützt die Kommunikation und ein gemeinsames Verständnis
  • Fachwissen ist auf sehr viele Köpfe verteilt = in Form von Modellen und Generatoren wird solches Fachwissen konserviert und leichter verwendbar gemacht
  • Tests sind sehr aufwändig = Modelle und Codegenerierung ermöglichen Simulation von Systemkomponenten

Natürlich kann jede Modellierungs- und Codegenerierungs-Technologie zu diesem Zweck eingesetzt werden. Gerade im Bereich von IoT gibt es jedoch Ansätze, die spezielle IoT-Anforderungen abdecken. Hier eine Auswahl dieser Ansätze:

Auswahl an Ansätzen

Werkzeug Beschreibung
Eclipse Vorto [4] Werkzeug zur Erzeugung und Verwaltung von Technologie-unabhängigen Beschreibungen von Geräten. Die Beschreibungen können in einem zentralen Repository abgelegt und damit ganz einfach öffentlich zugänglich gemacht werden. Es beinhaltet ein REST-API zum Zugriff auf ein Repository, womit die Beschreibungen einfach und automatisiert ausgewertet werden können.
SensIDL [9] Open Source-Entwicklungs-Framework, das Sensor-Entwickler dabei unterstützt, Kommunikations-Interfaces zu spezifizieren und umzusetzen. Die Spezifikation erfolgt über eine textuelle domänenspezifische Sprache (DSL).
Reactive Blocks [10] Kommerzielles Werkzeug, das es ermöglicht, mit grafischer Modellierung und Codegenerierung Software für IoT-Gateways zu entwickeln. Die erzeugte Software basiert auf Java und OSGi. Es wird ein ausführbares Programm erzeugt.
Node-RED [11] Open Source-Werkzeug zur grafischen Modellierung und zur Ausführung von Abläufen in IoT-Anwendungen, sogenannte "Flows". Es dient dazu, Geräte, APIs und Online-Services miteinander zu verknüpfen. Die modellierten Flows werden zur Laufzeit interpretiert. Das Werkzeug basiert komplett auf Node.js.
Papyrus for IoT [12] Eine für Anfang 2017 geplante Modellierungslösung für IoT, die auf Eclipse Papyrus basieren soll. Sie ist Teil des S3P (Smart, Safe and Security Software Development and Execution Platform) Forschungs- und Entwicklungs-Projektes12. Papyrus for IoT soll die Spezifikation, das Design, das Deployment und das Monitoring von IoT-Systemen ermöglichen. Es ist Codegenerierung vorgesehen für Vortex von Prismtech und das Betriebssystem von MicroEJ.
Temboo [13] Kommerzielle, Cloud-basierte Plattform zur Unterstützung der Entwicklung von IoT-Anwendungen durch Codegenerierung. Temboo bietet generierte Code-Fragmente, die ein Entwickler mit Copy & Paste in seinen Programm-Code einfügt und dann weiter bearbeitet. Die Code-Fragmente unterstützen Geräte, APIs, Datenbanken und Online-Services. Generierter Code hat Abhängigkeiten zu den Temboo SDKs, die es für verschiedene Programmiersprachen gibt.
Virtual Developer [14] Kommerzielle, offene, Modellierungswerkzeug-agnostische Plattform zur Entwicklung und zum Betrieb von Codegeneratoren (Codegeneration as a Service). Jeder Generator der mit Java-Mitteln entwickelt ist, kann auf der Plattform mit Hilfe des Virtual Developer APIs integriert werden. Es gibt umfangreiche Open Source-Generatoren und -Komponenten zur Unterstützung der Entwicklung von Generatoren, auch IoT-spezifische (z. B. für Kura, Paho und Vorto) [15]. Durch Generierung erzeugter Code hängt nicht von Virtual Developer ab.

Die meisten der genannten Werkzeuge zielen auf einen Teilbereich oder einen Teilaspekt von IoT-Lösungen ab. Lediglich Virtual Developer [10] und voraussichtlich Papyrus for IoT [11] bieten die Möglichkeit, die Entwicklung von IoT-Lösung ganzheitlich zu unterstützen.

Fazit

Die Eclipse IoT-Projekte sind von vorne herein technisch und rechtlich so offen und modular gestaltet, dass eine Kombination und Integration mit anderen offenen IoT-Plattformen, IoT-Komponenten und Enterprise-Systemen problemlos zu machen ist. Individuelle, maßgeschneiderte IoT-Lösungen werden durch Eclipse IoT ermöglicht. Zusammen mit modellgetriebenen Entwicklungsmethoden können diese noch leichter und kontrollierter erreicht werden.

Autor

Marcus Munzert

Marcus Munzert ist geschäftsführender Gesellschafter der Generative Software GmbH. Seit 1998 entwickelt er mit Java und ist ein überzeugter Nutzer der Standards von Java EE und von OSGi.
>> Weiterlesen
botMessage_toctoc_comments_9210