© Immersion Imagery/Shutterstock.com
AWS IoT Device SDK for Java

Amazon IoT für Java


Cloud-Anbieter haben schon früh festgestellt, dass man mit dem reinen Vermieten von Servern nicht reich wird. Wirkliche High-Margin-Geschäfte lassen sich nur durch das Anbieten von Value Added Services machen. Amazon bietet beispielsweise einen hauseigenen IoT-Server an, der auf dem MQTT-Protokoll basiert. Mit dem AWS IoT Device SDK for Java steht nun ein Entwicklungskit zur Verfügung, das Java-basierten Systemen die Interaktion mit eben diesem erlaubt.

Die Idee, Java in einem Embedded-System einzusetzen, wirkt auf den ersten Blick geradezu schockierend. In der heutigen Zeit ist man als Entwickler allerdings gut beraten, an dieser Stelle alte Ängste zu den Akten zu legen. Das beste Beispiel dafür ist der Spotter aus dem Hause UnME2 (Abb. 1).

hanna_amazon_1.tif_fmt1.jpgAbb. 1: Dieses Produkt basiert auf Java

In Zeiten vielkerniger Prozessrechner mit vollständiger Unterstützung von Linux oder Windows ist es kein Problem, Desktopcode und Java Runtimes auch unterwegs einzusetzen. Der wichtigste Vorteil der Verwendung von Java im Embedded-Bereich dürfte mit Sicherheit die höhere Kommunalität sein. Wenn man Servercode nicht nochmals am Client neu schreiben muss, lassen sich Systeme – wie der in Abbildung 1 gezeigte Bus Tracker – schneller realisieren. Die Verwendung einer Backend-Infrastruktur von der Stange schafft dann weitere Ersparnisse.

Amazon prescht vor

Zunächst möchte ich mit der ersten Version des SDK arbeiten – die bereitstehende zweite Variante [1] setzt auf eine Gruppe nativer Module, ist deshalb schwieriger zu deployen und soll uns erst später beschäftigen.

Im ersten Schritt benötigen wir eine Eclipse IDE, in der wir ein neues Projekt auf Basis der Maven-Paketverwaltung anlegen. Die Verwendung von Maven ist insofern keine Marotte, als Amazon das AWS IoT Device SDK for Java auf einer Gruppe von Unterstützungsbibliotheken (beispielsweise für MQTT) aufbaut. Zudem kann das manuelle Zusammenbauen einer kompilierfähigen Umgebung aus .jar-Dateien schnell in Arbeit ausarten.

Zum einfachen Erstellen des Projektskeletts wählen wir die Checkbox Create a simple Project aus, um ein Vorlagenprojekt zu erzeugen und die Archetypauswahl zu deaktivieren. Vergeben Sie danach noch einen Namen und eine Gruppen-ID, um die sonst leere Projektmappe anzulegen. Im nächsten Schritt müssen wir die Bereitstellung von AWS IoT Device SDK for Java befehligen. Hierzu öffnen wir die XML-Datei, und fügen das in Listing 1 dargestellte Snippet ein.

Listing 1

<project ...> ... <version>0.0.1-SNAPSHOT</version> <dependencies> <dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-iot-device-sdk-java</artifactId> <version>1.3.4</version> </dependency> </dependencies> </project>

Den Rest der Arbeit erledigt Maven an dieser Stelle für uns; im Rahmen der nächsten Kompilation bekommen wir, unter der Voraussetzung einer bestehenden Internetverbindung, die Bereitstellung der diversen Bibliothekskomponenten für uns erledigt.

Nachrichten austauschen

Hocheffiziente Systeme mit sehr weiter Verbreitung verwenden oft proprietäre Netzwerkprotokolle: Das ist vernünftig, da das Einsparen einiger Cents bei Millionen von Einheiten im Feld frei nach Bob Crantall zu insgesamt nicht unerheblichen Einsparungen führt. Gerade bei kleineren Systemen ist es allerdings oft vernünftiger, ein einfach zu handhabendes Netzwerkprotokoll zu verwenden und etwas mehr für die Internetverbindung zu bezahlen.

Alle Cloud-Anbieter setzen auf MQTT – unter anderem, weil die Cloud-Systeme mit den eingehenden Nachrichteninformationen unabhängig von der jeweiligen Payload makeln können. Bedenken Sie, dass der Nachrichtenkanal bzw. Nachrichtentyp bei korrekter Verwendung des Protokolls Teil des Protokollheaders ist.

Als Erstes wollen wir unser Java-AWS-System deshalb befähigen, Nachrichten in die Cloud abzufeuern. Für die eigentliche Kommunikation mit dem Server stellt uns das SDK zwei Kommunikationswege zur Verfügung. Während für MQTT (over TLS 1.2, Port 8883) eine vollwertige Zertifikatsdatei erforderlich ist, kommt MQTT Over WebSocket (Port 443) mit einem gewöhnlichen und im Code als Konstante anlegbaren Identifikationsstring aus. Da das vor allem für kleine Versuche bequemer ist, wollen wir sie in diesem Artikel anwenden. Zu beachten gilt allerdings, dass das Speichern von Konstanten in Produktivcode eine Sicherheitslücke darstellt.

Die Credentials müssen wir im im Backend beschaffen, weshalb wir hier die IDE verlassen und uns mit einem Browser Ihrer Wahl beim Amazon AWS Backend anmelden. Klicken Sie danach auf das Services-Tab auf der linken oberen Bildschirmkante, um die Liste alle...

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