IoT-Geräte in der Cloud AWS IoT mit Raspberry Pi und Co verbinden

Autor / Redakteur: Sascha Möllering * / Stephan Augsten

„Wir würden gerne unsere Flotte von IoT-Devices mit der AWS Cloud verbinden. Welche Empfehlungen und Entwurfsmuster existieren für IoT-Architekturen?“

Anbieter zum Thema

Schematische Darstellung der AWS IoT-Plattform.
Schematische Darstellung der AWS IoT-Plattform.
(Bild: AWS Germany)

AWS hat auf der re:invent 2015 den verwalteten Service AWS IoT vorgestellt (siehe Youtube-Video), mit dem verbundene Geräte einfach und sicher mit Cloud-Anwendungen und anderen Geräten zusammenarbeiten können. AWS IoT kann Milliarden von Geräten und Billionen von Nachrichten unterstützen und diese Nachrichten zuverlässig und sicher verarbeiten und zu AWS-Endpunkten und anderen Geräten weiterleiten.

Schematische Darstellung der AWS IoT-Plattform.
Schematische Darstellung der AWS IoT-Plattform.
(Bild: AWS Germany)

AWS IoT unterstützt HTTP, WebSockets und MQTT. Bei MQTT handelt es sich um ein einfaches Kommunikationsprotokoll, das speziell dafür entwickelt wurde, Verbindungsunterbrechungen zu tolerieren, den Quellcode auf Geräten zu minimieren und um die Anforderungen an die Netzwerkbandbreite reduzieren zu können.

In der obigen Abbildung ist zu sehen, dass AWS IoT aus unterschiedlichen Komponenten besteht. Das AWS IoT Device SDK ermöglicht Geräten die Verbindung und Authentifizierung sowie den Austausch von Nachrichten mit dem AWS IoT-Service.

Das AWS IoT Device Gateway ermöglicht sichere und wirksame Kommunikation von Geräten mit AWS IoT. Das Device Gateway kann Nachrichten über ein Pub/Sub-Modell austauschen, sodass die Kommunikation von einem Gerät zu einem anderen, aber auch von einem Gerät zu vielen möglich ist.

AWS IoT bietet gegenseitige Authentifizierung und Verschlüsselung an allen Verbindungspunkten, sodass Daten nie ohne geprüfte Identität zwischen Geräten und AWS IoT ausgetauscht werden. Die Registry erstellt eine Identität für Geräte und verfolgt Metadaten wie die Attribute und Fähigkeiten der Geräte.

Jedem Gerät weist die Registry eine eindeutige Identität zu, die unabhängig von der Art des Geräts oder der Art der Aufnahme der Verbindung einheitlich formatiert ist. Mit Schattengeräten („Device Shadows“) können Anwendungen den gewünschten zukünftigen Status eines Geräts festlegen, ohne den aktuellen Status des Geräts zu kennen. AWS IoT vergleicht dann die Differenz zwischen dem gewünschten und dem zuletzt gemeldeten Status und weist das Gerät an, diese Differenz auszugleichen.

Die Rules Engine ermöglicht es, auf globaler Basis IoT-Anwendungen einzusetzen, die Daten von den verbundenen Geräten sammeln, verarbeiten, analysieren und für weitere Aktionen berücksichtigen, ohne dass Infrastruktur verwaltet werden muss. Die Rules Engine wertet in AWS IoT ankommende Nachrichten aus, formt sie um und sendet sie je nach den von Ihnen festgelegten Geschäftsregeln an ein anderes Gerät oder einen Cloud-Service weiter.

Eine Regel kann auf Daten von einem oder vielen Geräten angewendet werden und eine oder mehrere Aktionen parallel vornehmen. Die Rules Engine kann außerdem Nachrichten an AWS-Endpunkte weiterleiten wie AWS Lambda, Amazon Kinesis, Amazon S3, Amazon Machine Learning, Amazon DynamoDB, Amazon CloudWatch und Amazon Elasticsearch Service mit eingebauter Kibana-Integration.

Externe Endpunkte können über AWS Lambda, Amazon Kinesis und Amazon Simple Notification Service (SNS) erreicht werden. Folgendes Beispiel demonstriert, wie einfach die Verbindung zwischen einem Device (beispielsweise ein Raspberry Pi, Intel Edison oder andere IoT-Devices ) und AWS IoT hergestellt werden kann:

var awsIot = require('aws-iot-device-sdk');var device = awsIot.device({
   keyPath: <YourPrivateKeyPath>,
  certPath: <YourCertificatePath>,
    caPath: <YourRootCACertificatePath>,
  clientId: <YourUniqueClientIdentifier>,
      host: <YourCustomEndpoint>
});
device
   .on('connect', function() {
      console.log('connect');
      device.subscribe('topic_1');
      device.publish('topic_2', JSON.stringify({‘color’:’blue’, ‘temperature’:60}));
      });
device
   .on('message', function(topic, payload) {
      console.log('message', topic, payload.toString());
   });

In diesem Beispiel verbindet sich das Device mit Hilfe des AWS IoT-SDKs für JavaScript mit dem AWS IoT-Service, meldet sich bei dem Topic ‚topic_1’ an und publiziert an das Topic ‚topic_2’ eine simple Nachricht im JSON-Format. Falls eine Nachricht über ‚topic_1’ empfangen wird, wird der Payload dieser Nachricht zusammen mit dem Namen des Topics ausgegeben.

Die Daten, die in dieses Topic publiziert werden, können mit Hilfe von Regeln weiterverarbeitet werden. Folgende Regel selektiert die Farbe aus dem Payload der Nachrichten aus topic_2, bei denen der Wert temperature > 50 und die Farbe anders als red ist und leitet diese Werte an eine AWS Lambda-Funktion weiter:

{
   "rule": {
      "sql": "SELECT color AS my_color FROM 'topic_2' WHERE temperature > 50 AND color <> 'red'",
      "ruleDisabled": false,
      "actions": [{
         "lambda": {
            "functionArn": "arn:aws:lambda:eu-central-1:123456789012:function:myLambdaFunction"
         }
      }]
   }
}

Sascha Möllering
Sascha Möllering
(Bild: AWS Germany GmbH)

Die Sprache für die Formulierung von Regeln orientiert sich sehr stark an SQL und ist im Developer Guide von AWS vollständig beschrieben.

* Sascha Möllering arbeitet als Solutions Architect bei der Amazon Web Services Germany GmbH. Seine Interessen liegen in den Bereichen Automation, Infrastructure as Code, Distributed Computing, Container und JVM.

(ID:44876344)