© Spirit Boom Cat/Shutterstock.com
Teil 3: C treibt Java

Amazon IoT für Java


Amazon bietet Entwicklern umfangreiche Bibliotheken an, um mit Java-Ausführungsfähigkeit ausgestattete Hardware in die hauseigene Device Cloud zu bringen. Seit einiger Zeit liegt das SDK in einer neuen, zweiten Version vor.

Im Java Magazin 4.20 und Java Magazin 5.20 haben wir uns mit den Möglichkeiten des AWS Device SDK auseinandergesetzt. Es erleichtert Entwicklern die Integration von Hardware in die Cloud-Dienste – wer heute noch von Hand Daten sammelt oder auswertet, hat in den meisten Fällen eine ungünstige technische Position.

Unter Nichtberücksichtigung spezieller Ausnahmen gilt heute nämlich, dass ein kurzer Produktentwicklungszyklus wertvoller ist als ein effizienteres Produkt. Wer das nicht glaubt, kann sich sowohl den Pebble als auch den Palm IIIc ansehen: Beide Produkte waren technisch „effizienter“ als ihre Konkurrenten, boten aber wenige Funktionen und wurde im Lauf der Zeit – Stichwort Mooresches Gesetz – von mit mehr Funktionen ausgestatteten Kollegen überrollt.

Wieso Redesign?

In den letzten beiden Artikeln hatten wir – neben einer Evaluation der diversen Möglichkeiten von AWS – auch festgestellt, dass die Kommunikation per Java an sich ohne Probleme funktioniert. Im GitHub Repository der verwendeten Bibliothek fand sich einige Zeit lang der Hinweis, dass man diese nur noch mit Wartungsupdates versorgen würde – kurz vor der Fertigstellung dieses Artikels war er jedoch wieder verschwunden.

Amazon hat mit der AWS Common Runtime (AWS CRT) seit längerer Zeit eine Gruppe von in C gehaltenen Bibliotheken im Haus. Idee des – zumindest vorübergehend abgesagten – „Umsiedelns“ war, dass sich der Buchhändler so die eine oder andere Abhängigkeit aus dem Pelz schaffen konnte.

Die CRT-Bibliotheken implementieren diverse sinnvolle Kommunikationsaufgaben von MQTT bis HTTP – wer mehr über die verschiedenen Bibliotheken erfahren möchte, findet in Tabelle 1 eine kurze Übersicht. Angemerkt sei, dass der Großteil der Komponenten unter einer sehr liberalen Lizenz zur Verfügung steht und deshalb auch in eigenen Projekten hilfreich sein kann.

URL

Kurzbeschreibung

https://github.com/awslabs/aws-c-auth

Implementierung einer Client-Side-Authentifikation gegen einen AWS-Server

https://github.com/awslabs/aws-c-cal

Bereitstellung diverser kryptografischer Primitiva

https://github.com/awslabs/aws-c-http

HTTP-Kommunikationsbibliothek

https://github.com/awslabs/aws-c-mqtt

MQTT-Kommunikationsbibliothek

https://github.com/awslabs/aws-c-io

TLS-Helfer

https://github.com/awslabs/aws-c-common

Helferbibliothek mit diversen Funktionen

Tabelle 1: Überblick AWS-CRT-Bibliotheken

Aus der C-Basiertheit des Systems folgt allerdings, dass die Auslieferung nicht mehr durch einfaches Kopieren einer .jar-Datei erfolgen kann. Stattdessen ist nun etwas Arbeit mit dem nativen Compiler erforderlich.

Da Versuche auf der unter Ubuntu 18.04 laufenden Workstation flau sind, wollen wir in den folgenden Schritten auf einen Prozessrechner setzen. Da der Autor ein Freund der Bequemlichkeit ist und mit Java gern in einer IDE entwickelt, wollen wir den Raspberry Pi 4 verwenden. Er bringt einen wesentlich leistungsfähigeren Prozessor mit, der bei Vorhandensein einer ausreichenden und zuverlässigen Energieversorgung ein durchaus komfortables Arbeiten ermöglicht.

Im ersten Schritt rufen wir jedenfalls die Webseite der Raspberry Pi Foundation auf und klicken auf den Link, um das bekannte Firmwarearchiv herunterzuladen. Extrahieren Sie es danach auf einen bequem zugänglichen Platz im Dateisystem und schreiben Sie es – wie gewohnt – auf eine ausreichend große SD-Karte. Hierbei ist die Verwendung einer schnelleren Karte ratsam, da sowohl IDE als auch Kompilation IO-gebunden sind.

Es ist empfehlenswert, den Prozessrechner per Ethernet mit dem Internet zu verbinden und über eine Fernwartungssoftware vom PC aus zu bewegen – die direkte Arbeit mit Maus und Tastatur macht erfahrungsgemäß wenig Spaß. Von der Verwendung von WLAN ist ob der höheren Latenz abzuraten; Remoteverbindungen machen über ein echtes Kabel einfach mehr Spaß.

Kompilation am RPi

Nach der Einrichtung von Raspbian und dem eventuell richtigen Konfigurieren des VNC-Servers müssen wir im ersten Schritt die auf dem Prozessrechner befindliche Software aktualisieren:

pi@raspberrypi:~ $ sudo apt-get update

Da die neue Version des IoT SDK sehr viel C-Code mitbringt, benötigen wir sowohl CMake als auch GCC. Der Java-Programmierern im Allgemeinen gut bekannte Maven-Build-Manager ist ebenfalls erforderlich, da er die Bereitstellung steuert.

Unangenehmerweise scheint man bei der Raspberry Pi Foundation Freude daran zu haben, die Zusammenstellung der hauseigenen Betriebssystem-Images regelmäßig zu verändern. Aus diesem Grund ist es empfehlenswert, prinzipiell alle benötigten Komponenten anzufordern:

pi@raspberrypi:~ $ sudo apt-get install cmake gcc maven git libssl-dev Reading package lists... Done

Im nächsten Akt beginnen wir mit dem Anlegen eines Arbei...

Neugierig geworden? Wir haben diese Angebote für dich:

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang