user-icon Christoph Walcher
27. April 2020
timer-icon 4 Min.

Alerting von IoT-Devices über AWS IoT und SNS

Der Einsatz von IoT bietet vielseitige Chancen durch Auswertung der Sensordaten. In unserem Beispiel zeigen wir, wie das Alerting, also die Benachrichtigung bei einem Fehler oder einer Werteüberschreitung, mit den Cloudprodukten von AWS und einem ESP32 als Sensor funktionieren kann.

Amazon Web Services bietet als Cloudservices-Anbieter eine große Vielfalt von verschiedenen Diensten auf verschiedenen Abstraktionsebenen an, darunter die Platform-as-a-Service AWS IoT Core. Sie dient als Rückgrat für die Anbindung von Geräten (innerhalb von AWS Things genannt) in die Cloud.

Architekturübersicht

Übersicht

IoT Core ist im Kern eine Nachrichtenorientierte Middleware, an welche Geräte/Things über HTTP oder vorzüglich MQTT angebunden werden. Zusätzlich stellt IoT Core eine Rule Engine zur Verfügung, welche Nachrichten über definierbare Filter an weitere AWS- oder externe Dienste weiterleitet. Für die persistente Darstellung des Gerätezustands bietet IoT Core eine Shadow-Funktionalität an, welche wir bei unserem Aufbau jedoch nicht benötigen.

Die MQTT-Verbindung zwischen Thing und IoT Core wird über TLS abgesichert, die Zertifikate dafür werden im integriertem Certificate Manager verwaltet. Dabei wird für jedes Device ein eigenes Zertifikat ausgestellt, mit welchem es sich auch gleichzeitig authentifizieren kann.

Um einen unberechtigten Zugriff zu vermeiden, wird an jedes Zertifikat eine Policy gebunden, welche klar definiert, welche Aktionen das mit dem Zertifikat assoziierte Thing, also zum Beispiel ein Sensor, ausführen darf.

Einrichten von IoT Core

Für die folgenden Schritte verwenden wir die AWS CLI. Alternativ kann dies jedoch auch per GUI auf der Web-Console erfolgen.

Zuerst legen wir das Thing an, diesem geben wir den Namen sensor01


Damit das Thing sich bei Start der Verbindung authentifizieren kann und die Verbindung verschlüsselt wird, legen wir ein Zertifikat an. In der Antwort, sind für uns certificatePem und PrivateKey später noch von Bedeutung.



Im nächsten Schritt binden wir das Zertifikat an das Thing. Der „principal“ ist dabei die certificateArn welche wir im vorherigen Schritt erhalten haben.


Um die Berechtigungen des Things festzulegen, legen wir eine „policy“ an. Diese legt in diesem Fall fest, dass sich das Gerät verbinden darf und in die Topics <thing-name>/* senden und lesen darf. So darf das Thing „sensor01“ in z.B. sensor01/status Nachrichten senden. (Dies ist keine IAM-Policy!)


Anbindung an SNS

Amazon Webservices bietet mit AWS Simple Notification Service eine einfache Möglichkeit an, Benachrichtigungen an verschiedene Interessenten zu versenden. Diese Benachrichtigungen werden über E-Mail, SMS oder Push-Notification (FCM, APNS) zugestellt.

Zuerst legen wir dafür ein Topic an, welches für die Benachrichtigungen von sensor01 dient.



Um Benachrichtigungen an eine E-Mail-Adresse zuleiten, muss diese vorab registriert werden. SNS sendet daraufhin eine Aktivierungsmail welche der Benutzer bestätigen muss, um zukünftig Benachrichtigungen empfangen zu können.


 

Das nächste Ziel ist nun, eine Regel zu erstellen, welche aus AWS IoT Core heraus, an AWS SNS eine Benachrichtigung sendet, falls der Sensor einen Alarm signalisiert.

Damit AWS IoT auf SNS zugreifen darf, ist zuerst eine IAM Role notwendig.





Zu guter Letzt kann die Regel gesetzt werden. Sie schickt eine Benachrichtigung mit dem Inhalt „Sensor 01 Alarm“ an den SNS, wenn das Thing als Status alert sendet.


Test von AWS IoT

Der einfachste Weg IoT Core zu testen, ist über die Web-Console. Hier können Nachrichten direkt in IoT Core gesendet und empfangen werden.

Testen über die AWS IoT Console

Beim Absenden dieser Nachricht, wird die Regel ausgelöst und eine Benachrichtigung versendet.

Da IoT Core einen MQTT-Endpoint bereitstellt, kann sich darauf auch jeder MQTT-Client verbinden, welcher MQTTS unterstützt. Die Adresse des Endpoint lässt sich über aws iot describe-endpoint ermitteln. Das CA-Zertifikat stellt AWS online bereit, das Clientzertifikat und der dazugehörige Schlüssel haben wir vorhin schon erhalten. (Diese müssen bei einem grafischem Client wie MQTT.fx oder mqtt-spy in eine Textdatei gespeichert werden.)

Integration in ESP32

Um den Show-Case „anfassen“ zu können, habe ich einen ESP32 als Thing integriert. Am ESP ist ein DHT-Temperatursensor angeschlossen. Bei einer Überschreitung von 30°C sendet dieser eine Nachricht über MQTT an AWS IoT. Die benötigten Bibliotheken stehen für die Arduino-Umgebung zur Verfügung -optimal für schnelles Prototyping-. Der Quellcode dafür ist auf GitHub Gist.

ESP32 mit Temperatursensor

Fazit

Wenn es um einfaches und skalierbares Alerting geht, sind die Services AWS IoT Core und AWS SNS schnell eingerichtet, funktionstüchtig und produktionsreif. Die Anbindung der Things an IoT Core kann natürlich auch für weitere Use-Cases verwenden werden, z.B. eine anschließende Analyse oder eine Aufbereitung für Dashboards. Sollte es ein feingranulareres Regelwerk benötigt werden, empfiehlt sich zwischen IoT Core und SNS zusätzlich IoT Events einzusetzen.

Für alle, die gerne mehr über die Datenauswertung von IoT-Daten wissen möchten: https://www.novatec-gmbh.de/beratung/datenauswertung/

CTA_IOT

Artikel kommentieren