IoT-Frameworks

Eine Software-Infrastruktur für das Internet der Dinge

| Autor / Redakteur: Tuukka Ahoniemi * / Rainer Graefen

Das Qt-Logo.
Das Qt-Logo. (Bild: Qt Company)

Um Fallstricke bei der Integration von IoT-Systemen zu vermeiden, müssen diverse Front- und Backend-Techniken angewendet werden. Bereits bei Beginn des Designs ist das gesamte System zu betrachten.

Die Anwendungen und Neuerungen, die das IoT hervorbringt, sind beeindruckend, und die Technik zur Entwicklung solcher Systeme sowie deren Cloud-Backends sind bereits vorhanden.

Aus der Sicht des Embedded-Software-Designs gestaltet sich die Entwicklung solcher Systeme jedoch immer komplexer, und die technischen Anforderungen steigen erheblich.

Um Fallstricke bei der Integration zu vermeiden, müssen verschiedene Front- und Backend-Techniken angewendet und bereits bei Beginn des Designs das gesamte System berücksichtigt werden.

Eine völlig neue Welt durch Cloud-Datenanbindung

Wenn Geräte oder Einrichtungen nahtlos zusammenarbeiten, ermöglicht das IoT komplexe Dienste – von denen einige bei der Implementierung noch gar nicht in Betracht gezogen wurden –, indem vergleichsweise preiswerte und energieeffiziente Geräte zum Einsatz kommen. Hinzu kommt, dass sich jederzeit weitere Dienste aufrüsten lassen, ohne dabei die auf dem Gerät laufende Software zu stören. Dies ist insbesondere dann von Vorteil, wenn die verwendeten Technologien dynamische Softwareänderungen erlauben oder flexible externe APIs haben, die Plugin-basierte Designmuster verwenden, um eine einfache Erweiterung von Diensten zu ermöglichen.

Ergänzendes zum Thema
 
Die Qt-Wetterstation – ein Anwendungsbeispiel

Die Cloud-Server können als permanente, geräteunabhängige Speicher und Archive verwendet werden und Informationen über den Zustand jedes Geräts beinhalten. Im Unterhaltungsumfeld kann ein Anwender etwa auf einem Mobilgerät Musik hören und diese pausieren, um dann zuhause vor dem PC wieder dort fortzufahren, wo pausiert wurde. Durch die Cloud können Systeme Benachrichtigungen an Geräte senden, sowie Sensordaten empfangen, verarbeiten und für Statistikzwecke analysieren.

Da die Datenspeicherung und komplexe Datenanalyse im Cloud-Backend zentralisiert sind, kann die Kapazität der Rechenleistung dynamisch skaliert werden, ohne dabei die einzelnen angeschlossenen Geräte zu beeinträchtigen. Auch der zufällige Verlust der Verbindung zu einem Gerät macht für andere Teile des Systems keinen Unterschied. Die Forderung nach Verfügbarkeit besteht zwar weiter, allerdings nur für das Cloud-Backend. Um die Funktionalität eines einzelnen Geräts ohne Verbindung zum Backend zu gewährleisten sind demnach ein Offline- Speicher und ein logisches Offline-Verhalten erforderlich.

REST Assured: Funktionalität auf höchster Ebene

Obwohl das IoT-Konzept flexible, zukunftssichere, vernetzte Systeme ermöglicht, müssen bestimmte Herausforderungen bei der Entwicklung erfüllt werden. Die Architektur des Internet und World Wide Web ermöglicht es, bestimmte Aspekte des IoT-Designs zu vereinfachen. So bietet REST (Representational State Transfer), eine Architektur auf Basis einfacher HTTP-Protokollbefehle, mehr Flexibilität als herkömmliche Client-Server-Architekturen wie SOAP.

Eine RESTful-API ermöglicht es Clients und Servern in komplexer Weise zu interagieren, ohne dass der Client Details über mögliche Dienste kennen muss, bevor er mit dem Server verbunden wird. Dies spielt bei der Erweiterung des Systems um beliebige Geräte oder Dienstleistungen eine wichtige Rolle. Ein einfacher URI (Universal Resource Identifier) reicht aus, damit der Client den Server findet. Von hier aus führen der Server und der Client mittels HTTP-Befehlen eine Reihe von Verhandlungen und Datentransferschritten aus, die Informationen über die angebotenen Dienste enthalten, und wie auf sie zugegriffen werden kann.

Abstraktion durch Komfortklassen

Obwohl die zentralen REST-Mechanismen in HTTP flexibel sind, arbeiten sie auf unterer Ebene. Ein Entwicklungsumgebung wie Qt kann diese Details auf unterer Ebene durch Komfortklassen abstrahieren und High-Level-objektorientierte Klassen für andere Teile der Anwendung bereitstellen.

Da Qt C++-basiert ist, lässt sich der Embedded-Code auf unterer Ebene, etwa für Hardware-Verbindungen, in die gleiche Software integrieren, ohne dabei Teile des Codes isolieren zu müssen. Mit der Kombination aus REST und Qt-Klassen haben IoT-Einrichtungen die Möglichkeit, nicht nur Daten zu empfangen und sich Befehle zuzusenden, sondern auch mit Servern in der Cloud zu kommunizieren und ihre lokale Hardware-Peripherie zu integrieren.

Die Cloud-Dienste müssen nicht für jede Anwendung von Grund auf neu entwickelt werden. Durch Cloud Services steht Qt-Entwicklern ein Angebot an Cloud-Funktionen auf Basis der RESTful-APIs und eine umfassende Cloud-API für den direkten Einsatz seitens Qt-Kunden zur Verfügung.

Zu diesen Diensten zählen der Enginio Data Storage Service, Managed WebSockets für Verbindungen in Echtzeit und Managed Runtimes zur Übergabe von Teilen der Implementierung oder Berechnung – geschrieben mit herkömmlichen serverseitigen Technologien oder direkt über Qt-APIs – auf die skalierbare Serverseite.

Vor allem für Systeme, die große Datenmengen sammeln und analysieren, hilft eine skalierbare serverseitige Berechnung dabei, die eingesetzten Embedded-Einrichtungen vernünftig zu betreiben.

Verschiedene Zielplattformen unterstützen

Neben dem zentralen IoT-Software-Stack muss der Entwickler auch langfristigen Support, Wartung, Upgrades und Verbesserungen berücksichtigen. Mit jeder Weiterentwicklung müssen IoT-basierte Systeme imstande sein, neue Hardware zu integrieren, die nahtlos mit den bestehenden Geräten zusammenarbeitet.

Entwickler von Embedded-Systemen stehen dann vor dem Problem, dass verschiedene Implementierungsziele erfüllt werden müssen. Erforderlich wird damit eine Entwicklungsumgebung, die eine Software-Implementierung auf verschiedenen Zielanwendungen ermöglicht, die unterschiedliche Funktionen bieten – und das mit einer minimalen Anzahl erforderlicher Änderungen des Quellcodes.

IoT-Systeme erfordern nicht nur die Entwicklung von untereinander vernetzten Embedded-Einrichtungen, sondern auch die Bereitstellung von Client-Anwendungen, um mit diesen Einrichtungen und deren Daten zu interagieren.

Heute gibt es zahlreiche Zielplattformen: Web-Dienste über den Browser, jede Art von Android-, iOS- oder Windows-Smartphones oder Tablets und Desktop-PCs. Mit einer übergreifenden Plattformtechnik wird die Mehrzahl derzeitiger und zukünftiger Plattformen abgedeckt.

Responsive Design

Code, der mit dem Qt-Framework geschrieben wurde, läuft auf einer Vielzahl von Betriebssystemen – von Plattformen für Anwendungen auf Echtzeit-Betriebssystemen über Embedded Linux bis hin zu Desktop-PCs und Mobilgeräten. Damit lässt sich eine gemeinsame Betriebslogik für Sensorknoten und Mobilgeräte einsetzen, die grafikintensive Software wie Android verwendet.

Qt bietet einen hohen Grad an Portierbarkeit durch seine Klassen und Tools, genauso wie die UI-(User-Interface-)Ansätze. Mit einer Auswahl an Grafikansätzen können Entwickler die Portierbarkeit maximieren, aber immer noch die Feineinstellung der Anwendung für jedes Zielgerät beibehalten.

So können ein Wearable-Funksensor und ein Display einfache Grafik auf Basis statischer Symbole und Zeichen verwenden. Die gleiche Displayfunktion für eine Android-App kann alle Vorteile der Animation und Multi-Touch-Funktion nutzen.

Zu den GUI-Entwicklungsoptionen innerhalb von Qt zählen Qt Quick und Qt Widgets, die vor allem für relativ statische Schnittstellen optimiert sind. Sie eignen sich für Geräte mit beschränkter Verarbeitungsleistung und einfachen, kleineren Displays.

80 prozentige Code-Identität möglich

Qt Quick bietet die Markup-Sprache QML, die einen deklarativen High-Level-Ansatz für das UI-Design bereitstellt, der von UI-Designern und Entwicklern zusammen verwendet werden kann. Qt Quick unterstützt moderne Rapid-Prototyping-Prozesse zum Erstellen interaktiver touch-basierter Benutzeroberflächen. Zur Integration von HTML5 in die Bedienoberfläche bietet Qt eine Chromium-basierte Engine, genannt Qt WebEngine.

Für eine Anwendung, die auf mehreren Zielplattformen eingesetzt werden kann – ob nun Embedded, Mobil oder Desktop – kann der Betriebslogik-Code, der Qt nutzt, für alle Anwendungen bis zu 80 Prozent übereinstimmen.

Mit den Funktionen von Qt Quick wird die Bedienoberfläche über verschiedene Zielplattformen skalierbar. Sind separate UI-Layouts gewünscht, helfen eine gemeinsame GUI-Ebene oder gemeinsame Komponenten und Designs mit kleinen, separaten Layout-Dateien, die Code-Wiederverwendung zu maximieren.

Selbst wenn verschiedene Zielanwendungen vorliegen, ist nur eine kleine Änderung zwischen den GUIs erforderlich – und das alles innerhalb einer einzigen Technologie. Es müssen keine verschiedenen Teams für jede Zielplattform beschäftigt werden.

Embedded-Prototyping einfach gemacht

Um Rapid Prototyping auf einem echten Embedded-System vorzunehmen, damit sich Formfaktoren und Systemoptionen ausprobieren lassen, können Entwickler den „Boot to Qt“ Software-Stack nutzen, der in Qt Enterprise Embedded integriert ist.

Dabei handelt es sich um einen vorkonfigurierten Software-Stack für eine Embedded-Hardware-Plattform – entweder auf Embedded Android oder Embedded Linux. Mit dem Stack und der vorkonfigurierten Qt Creator IDE (integrierte Entwicklungsumgebung) lässt sich eine Qt-Anwendung sofort in der gewünschten Hardware für das Rapid Prototyping umsetzen. Der in der Regel langwierige Code-Compile-Deploy-Zyklus wird auf wenige Klicks verkürzt.

Für das Rapid Prototyping von Embedded-Systemen benötigen Entwickler ein frühes Feedback von den Endkunden. Dazu dienen Usability-Tests des Projektkunden, um die Entwicklung in die richtige Richtung zu lenken. Dieser Prozess macht auch die Anforderungen für die Hardware ausfindig, damit die letztendliche Hardwareentscheidung nach anfänglichen Durchläufen erfolgen kann und genau den Wünschen entspricht.

Cross-Plattform-Entwicklung

Der „Boot to Qt“-Software-Stack lässt sich dann für die endgültige Hardware und gewünschten Middleware-Inhalte anpassen. Dies erfolgt über entsprechende Tools oder für Embedded Linux über die proprietären Rezepte für Yocto-Projekt-Tooling. Der übergeordnete, eigentliche Anwendungscode bleibt genau der gleiche.

Durch die vielen Möglichkeiten der Cross-Plattform-Entwicklung, die Qt bietet, lassen sich IoT-Systeme mit Embedded- und Cloud-vernetzten Systemen sowie entfernten Client-Anwendungen umsetzen – ohne dabei für das gesamte Portfolio verschiedene Technologien verwalten zu müssen.

Mit einer flexiblen Plugin-basierten Architektur – sowohl für lokale Software als auch das Networking – lassen sich neue Systeme mit beliebigen Diensten hinzufügen, ohne dabei andere Teile des Systems verändern zu müssen.

Qt’s Portierbarkeit und Flexibilität ermöglicht es, vorhandene Software auf aktualisierte Hardware zu migrieren, sobald diese zur Verfügung steht. Damit wird sichergestellt, dass eine IoT-Implementierung wettbewerbsfähig bleibt.

Bei der Arbeit auf einer höheren Abstraktionsebene mit einer erweiterbaren Architektur können sich Unternehmen auf die Bereiche des IoT konzentrieren, mit denen sich eine Differenzierung ergibt, anstatt sich mit Details auf unterer Ebene und dem IoT-Protokoll beschäftigen zu müssen.

* Tuukka Ahoniemi ist Technical Product Marketing Manager bei der Qt Company.

Kommentare werden geladen....

Was meinen Sie zu diesem Thema?

Anonym mitdiskutieren oder einloggen Anmelden

Avatar
  1. Avatar
    Avatar
    Bearbeitet von am
    Bearbeitet von am
    1. Avatar
      Avatar
      Bearbeitet von am
      Bearbeitet von am

Kommentare werden geladen....

Kommentar melden

Melden Sie diesen Kommentar, wenn dieser nicht den Richtlinien entspricht.

Kommentar Freigeben

Der untenstehende Text wird an den Kommentator gesendet, falls dieser eine Email-hinterlegt hat.

Freigabe entfernen

Der untenstehende Text wird an den Kommentator gesendet, falls dieser eine Email-hinterlegt hat.

Dieser Beitrag ist urheberrechtlich geschützt. Sie wollen ihn für Ihre Zwecke verwenden? Infos finden Sie unter www.mycontentfactory.de (ID: 43840559 / Big Data)