Integration von Cloud-Geräten im IoT

Das Internet der Dinge (Internet of Things, IoT) bringt beispiellose Intelligenz für die Embedded-Steuerung. Wo früher Geräte isoliert wurden, bringt das IoT sie zu einem System von Systemen zusammen. Dies bietet die Möglichkeit für Geräte, miteinander zu kooperieren und mit anderen Diensten zu interagieren, um eine viel größere Leistung, Reaktionsfähigkeit und Betriebszeit bereitzustellen.

Benutzer können die enorme Rechenleistung der Cloud nutzen, um maschinelles Lernen, Data Mining und andere Technologien an den Datenströmen arbeiten zu lassen, die von allen IoT-Geräten bereitgestellt werden, denen die Anwendung dient. Diese IoT-Geräte müssen nicht speziell für die Anwendung ausgelegt sein. Cloud-basierte Systeme können Datenkonflikt-Technologien wie Spark und Hadoop nutzen, um Echtzeit- und historische Informationen aus zahlreichen Quellen zu integrieren. Dies ermöglicht es, Korrelationen über viele Quellen hinweg durchzuführen und dabei wertvolle Erkenntnisse zu gewinnen. Dabei lässt sich Komplexität nicht immer vermeiden.

Ein Schlüsselproblem bei der Bereitstellung von IoT-Anwendungen liegt in der Vielfalt der Komponenten, aus denen jede Lösung besteht. Die IoT-Anwendung muss Messwerte von verschiedenen Arten von Sensoren wie Temperatur, Bewegung und Luftqualität erfassen. Selbst bei der gleichen Art des Sensorlesens können die Daten von Geräten stammen, die von einer Vielzahl von Herstellern bereitgestellt werden, oder auf älterer Hardware basieren, die nicht für das IoT entwickelt wurde.

Betrachten Sie ein Beispiel für ein IoT-Projekt, bei dem die Temperatur in jedem Raum eines Hotels überwacht wird. Jeder Raum könnte drei Sensoren haben, von denen jeder die Temperatur überwachen kann. Einer an der Tür kann seinen Temperatursensor als Teil eines Feueralarmmoduls enthalten, ein anderer in der Nähe des Bettes kann mit den Raumklimatisierungssteuerungen verbunden sein, und ein weiterer im Badezimmer kann als eine dedizierte Einheit im Rahmen des IoT-Upgrades installiert sein.

Die Software, die Messwerte von jedem Gerätetyp erhält, muss die Art und Weise berücksichtigen, in der jeder Sensor kalibriert wird und seine Daten erfasst werden. Einige Geräte senden Daten in regelmäßigen Abständen basierend auf einer Änderung der Bedingungen über einen programmierten Schwellenwert hinaus oder auf Anforderung einer Cloud-basierten Anwendung. Und sie alle verwenden unter Umständen unterschiedliche Netzwerkverbindungen – einige drahtgebunden, einige drahtlos, wie Bluetooth oder Zigbee – um die Daten weiterzuleiten. Die Anwendung muss diese Variabilität berücksichtigen. Aber das ist nicht alles.

Der Energieverbrauch ist ein Hauptproblem für viele IoT-Geräte. Die häufigste Lösung, um eine lange Batterielebensdauer aufrecht zu erhalten, ist die Minimierung der Aktivität von Hochenergie-Systemen wie der drahtlosen Kommunikation und des Kernmikroprozessors. Diese Subsysteme werden für einen Großteil der Systemlebensdauer in einem Schlaf mit geringer Leistung gehalten. . Für kurze Zeit wachen sie auf, erledigen eine Aufgabe, bevor sie wieder schlafen gehen. Das Ergebnis ist ein niedriger Arbeitszyklus. Das System befindet sich für nicht mehr als ein Prozent seiner Lebensdauer in einem vollständig aufgeweckten Zustand mit hohem Stromverbrauch. Während der verbleibenden 99% werden nur Systeme, die zur Aufrechterhaltung des Systemzustands benötigt werden, wie z. B. Echtzeituhren, mit Energie versorgt. Mit einem solchen Design kann ein IoT-Knoten jahrelang mit einer einzigen Batterieladung überleben.

Viele Mikrocontroller (MCUs) enthalten jetzt Hardwarezustandsmaschinen, die es ermöglichen, dass wichtige Sensoren periodisch, ausgelöst durch die Echtzeituhr, aufwachen und Messwerte nehmen, ohne den Host-Mikroprozessor zu wecken. Einige Systeme können einen vorbestimmten Satz von Ablesungen vornehmen, bevor der Mikroprozessor zur Ausführung der Verarbeitung geweckt wird. Andere können Schwellenwerte in die Sensorlogik programmieren, so dass große Abweichungen eine sofortige Reaktion auslösen.

Eine Steuerungsanwendung, die in der Cloud ausgeführt wird, kann Anforderungen für Daten haben, die sie von dem Gerät erhalten möchte. Sie kann auch einen Befehl senden, um ihren Status zu ändern. Das Gerät reagiert jedoch möglicherweise für einige Zeit nicht, da die Notwendigkeit, ein niedriges Tastverhältnis sicherzustellen, dazu führt, dass es sich in einem Zustand niedriger Leistung befindet, wenn der Befehl ausgegeben wird. Die Anwendung erfordert Logik, um sicherzustellen, dass ihr Verständnis des Zustands des Geräts mit der Realität übereinstimmt.

In der Anfangsphase des IoT stellten Integratoren fest, dass sie ihre eigene Softwareinfrastruktur für die Cloud-Integration unter Verwendung von benutzerdefinierten Protokollen oder Remote Procedure Call (RPC)-Techniken aufbauen mussten. In der Regel verwenden sie eigene Rechenzentren oder angemietete Server Blades in speziellen Einrichtungen, auf denen sie Anwendungen ausführen, die Daten von verbundenen Embedded-Geräten empfangen, die Informationen in eine zentrale Datenbank übertragen und Anwendungen zur Präsentation von Daten für Benutzer und zur Analyse von Mustern ausführen.

Die Integratoren wären verantwortlich für die Sicherstellung von Ausfallsicherheit und einer hohen Verfügbarkeit sowie für die Bewältigung der Komplexität einer Umgebung, in der Geräte nicht permanent mit dem Netzwerk verbunden sind. Eine Möglichkeit, dies zu erreichen, ist das Konzept der Geräte-Schatten. Dies sind in der Cloud gespeicherte Dokumente, in denen Informationen zum Gerätestatus aus den letzten Berichten und ausstehenden Änderungen zwischengespeichert werden.

Obwohl Anwendungen die Schatten von Geräten selbst verwalten können, ist es eine Aufgabe, die einfacher zu verwalten ist, wenn sie auf eine Serviceschicht übertragen wird, die eine standardisierte Schnittstelle für viele Gerätetypen bereitstellen kann. Dies ist eine der vielen Funktionen, die jetzt von Cloud-Infrastrukturangeboten wie Amazon Web Services, IBM Watson IoT und Google Cloud bereitgestellt werden.

Ein weiterer Dienst, der von Cloud-Infrastrukturplattformen ausgeführt wird, ist die Protokollzuordnung. Die Cloud entwickelte sich um die weit verbreitete Verwendung des TCP/IP-Protokolls und der Dienste, die es mit sich bringen kann. Obwohl es sich um ein statusloses Protokoll handelt, wird das HyperText Transport Protocol (HTTP), das für viele Cloud-basierte Dienste verwendet wird, auf der statusorientierten TCP-Schicht ausgeführt, hauptsächlich aufgrund der weit verbreiteten TCP-Unterstützung. Allerdings verfügen nur wenige IoT-Geräte über die Ressourcen, um einen vollständigen TCP/IP-Stack zu implementieren und so eine direkte Kommunikation mit Cloud-Anwendungen zu ermöglichen. Das Constrained Application Protocol (CoAP), das durch eine IETF-Anforderung (Internet Engineering Task Force) für einen Kommentar definiert wurde, optimiert die Kompatibilität von HTTP mit ressourcenbeschränkten Geräten und macht die Verwendung der TCP-Schicht überflüssig.

CoAP verwendet einen 4-Byte-Header mit kompakter Codierung, um Protokolle mit wesentlich kürzeren Paketlängen zu unterstützen, als sie normalerweise von Backbone-Ethernet-Verbindungen bereitgestellt werden. Eine gängige Alternative zu CoAP, deren Attribute für viele IoT-Implementierungen besser geeignet sind, ist das Message Queuing Telemetry Transport (MQTT)-Protokoll, das von IBM entwickelt wurde. Dies kann über eine Vielzahl von Paketformaten wie Bluetooth und Zigbee sowie TCP/IP erfolgen. Im Gegensatz zu dem Client-Server-Modell traditioneller HTTP-Webdienste unterstützt MQTT ein Publish-Subscribe-Modell. Dies hat den Vorteil, dass individuelle Anforderungen an ein IoT-Gerät minimiert werden.

Ein Gateway, das MQTT und CoAP mappt

Abbildung 1: Ein Gateway, das MQTT und CoAP mappt – Bildrechte Premier Farnell

Beispiel für das MQTT-Pub/Sub-Modell

Abbildung 2: Beispiel für das MQTT-Pub/Sub-Modell – Bildrechte Premier Farnell

Um Einheitlichkeit für den Datentransfer zwischen verschiedenen Plattformen zu gewährleisten, verwenden Cloud-Plattformen das JSON-Format (JavaScript Object Notation). Um Daten an die Cloud zu senden, muss ein Gerät zuerst die Daten, die es enthält, in eine JSON-Darstellung codieren und diese dann als Nutzlast für CoAP-, HTTP- oder MQTT-Nachrichten verwenden. Anwender haben die Wahl: Sie können die Endgeräte diese Aufgabe übernehmen lassen oder Gateways einsetzen. In Systemen mit umfangreicher Legacy-Hardware ist häufig ein Gateway die bevorzugte Wahl. Das Gateway kann Daten unter Nutzung der von den Geräten verwendeten proprietären oder Pre-IoT-Standards sammeln und Daten in und aus der JSON-Repräsentation konvertieren sowie als Proxy für alle Befehle dienen, die aus der Cloud empfangen werden. Die Gateway-Implementierung bestimmt, ob diese Befehle in einer Form, die das Gerät verstehen kann, konvertiert und weitergeleitet werden müssen.

Geräte, die für das IoT entwickelt wurden, können eigene Software-Stacks enthalten, die für die JSON-Konvertierung und Interaktionen mit der Cloud sorgen. Die Unterstützung von JSON- und Netzwerkschnittstellen kann in das Echtzeitbetriebssystem (RTOS) des Kerns integriert sein und unter Verwendung von Programmiersprachen wie C zugegriffen werden. Eine Technik, die von einigen IoT-Integratoren verwendet und von Cloud-Infrastrukturanbietern unterstützt wird, besteht darin, auf jedem Endgerät eine virtuelle Maschine zu implementieren, die für die IoT-Cloud-Integration optimiert ist.

Beispiel für eine Sensorausgabe im JSON-Format

Abbildung 3: Beispiel für eine Sensorausgabe im JSON-Format – Bildrechte Premier Farnell

Gerätetreiber, die auf jeder IoT-Geräteplattform implementiert sind, werden verwendet, um Befehle von der virtuellen Maschine in Formulare zu übersetzen, die das zugrundeliegende RTOS und die Firmware verstehen können. Die Firmware kümmert sich um die Optimierung des Energieverbrauchs und Low-Level-Timing und bietet eine standardisierte Reihe von Diensten, auf die sich die Cloud-Schicht verlassen kann.

Die Entwicklung in einer Cloud-Umgebung bietet im Vergleich zur herkömmlichen eingebetteten Umgebung eine größere Palette an Programmierwerkzeugen. Heutzutage sind Sprachen, die für die Cloud-Programmierung verwendet werden, auf die Ausführung in einer Umgebung mit verwaltetem Code ausgelegt. Anstatt kompiliert zu werden, wird der Code zur Laufzeit interpretiert oder, wenn er eine höhere Leistung bietet, Just-in-Time (JIT) kompiliert. Während Embedded-Entwickler in der Regel eine eingeschränkte Auswahl an Sprachen haben, vor allem C und C ++, haben Cloud-Entwickler Zugriff auf eine Vielzahl von Sprachen, von denen viele für spezielle Anforderungen optimiert wurden. Während Java und Python viele Anwendungsanforderungen unterstützen, erweitert Hadoop Java, um die Verteilung einer Datenverarbeitungslast auf viele Rechenknoten zu erleichtern.

Obwohl sowohl die Embedded- als auch die Cloud-Programmierung die Verwendung von entwicklungsübergreifenden Ressourcen impliziert, können Entwickler, die Code für Server schreiben, oft Virtual-Machine-Technologie verwenden, um eine verkleinerte Version der Zielumgebung auf ihren eigenen Maschinen zu erstellen. In der Regel müssen Embedded-Entwickler Code separat vom Ziel entwickeln und Tests nach jeder Edit-Compile-Download-Sequenz ausführen, wodurch die Bearbeitungszeit erhöht wird. Middleware-Umgebungen, die Sprachen mit verwaltetem Code unterstützen, tragen dazu bei, die Entwicklung zu rationalisieren, indem sie Prototyp-Code auf einer lokalen virtuellen Maschine ermöglichen und so ähnliche Vorteile bieten, wie sie von Cloud-Entwicklern erwartet werden.

Dank der Verfügbarkeit von Cloud-Infrastrukturdiensten haben Anwender nun Zugriff auf eine Reihe von Tools, die die Zusammenstellung vollständiger IoT-Lösungen erleichtern. Diese Cloud-orientierten Dienste sorgen für eine hohe Komplexität der Bereitstellung und ermöglichen es Integratoren, den vollen Leistungsumfang des IoT zu nutzen.

Integration von Cloud-Geräten im IoT – Veröffentlicht am 4. September 2018 von Farnell