Raspberry Pi Tutorial 3

Daten per Service Bus Queue und Logic Apps per Mail versenden

Einleitung

In diesem Tutorial geht es darum, einen RaspberryPi 3 mit dem Clouddienst Microsoft Azure zu verbinden und dessen Funktion zu nutzen. In den ersten Teilen haben wir unser Raspberry dafür vorbereitet Temperaturdaten an Microsft Azure zu senden. Um diese jetzt auch präsent zu haben ändern wir den Code ein wenig, damit verschiedene Level existieren und erzeugen in Azure Code, der dafür sorgt, dass wir eine Mail bekommen wenn die Temperatur einen bestimmten Punkt überschreitet.

Verwendete Hardware: Raspberry Pi 3

Voraussetzungen

Dieses Tutorial geht davon aus, das Erfahrung mit Programmierung vorhanden sind, setzt aber keine Erfahrungen mit Raspbian, GPIO Mikroprozessoren (Pi, Arduino etc.) oder Python voraus. Da das Tutorial auf dem Code des ersten Teils aufbaut empfiehlt es sich diesen zuerst durchzuarbeiten, oder den fertigen Code herunterzuladen.

Ziel

Ziel ist es Nachrichten mit einem kritischen Temperaturlevel herauszufiltern und mittels Service Bus Queue an eine Logic App weiter zu leiten, welche dann den Inhalt der Nachricht per Mail an unsere Adresse schickt, sodass wir über Kritische Temperaturen informiert werden.

Beispiel Nutzungen:

– Außen Temperatursensor

– Bewegungsmelder für eine Hundeklappe

Den Code anpassen

Da wir für das zukünftige Routing noch einige Änderungen am Code vornehmen wollen beginnen wir damit. Wir erweitern unseren Code um drei globale Variablen (LIMIT_LOW, LIMIT_HIGH, LEVEL) damit wir die Temperatur Limits schnell ändern können ohne an mehreren Stellen im Code etwas ändern zu müssen.

Level werden wir später benutzen um festzulegen was mit der Nachricht auf dem Server getan wird. Damit wir später nicht alle 15 Sekunden mit Mails wegen hoher Temperaturen zugespammt werden, erweitern wir den Code zudem noch um eine Funktion um herauszufinden ob die Temperatur gerade erst überschritten wurde oder schon überschritten war. In diesem Fall zählen wir einen Zähler hoch, damit wir erst nach 5 Minuten konstanter Überschreitung wieder informiert werden.

Weitere Änderungen am Code finden in der Funktion sendTemp() statt, in der der Temperatur Wert ab jetzt mit den kritischen Werten verglichen wird um dann das Level passend zu ändern. Zudem wir in der Sende Funktion noch LEVEL als weitere Eigenschaft der Json Nachricht hinzugefügt indem wir propmap.add(„level“,LEVEL) ergänzen bevor wir die Nachricht abschicken.

Der erweiterte Code wird wieder zur Verfügung gestellt und kann also einfach ins entsprechende Verzeichnis kopiert werden und von dort benutzt werden.

Eine Service Bus Queue erzeugen

Damit wir unsere Nachrichten weiterleiten können müssen wir im Azure Portal zuerst mal eine Service Bus Queue erzeugen. Diese finden wir beim erstellen unter dem Punkt Integration.

Hier finde ich den Service Bus

Als nächstes müssen wir einige Felder ausfüllen. Dabei wählen wir den Namen für den Namespace unserer zukünftigen Bus Queues sowie das Tier und die Resourcengruppe. Bei dieser können wir unsere bereits früher erzeugte Gruppe wieder wählen. Wenn wir alles ausgefüllt haben klicken wir auf create und warten bis der Namespace erzeugt wurde.

Bus Namespace erstellen

Öffnen wir nun den soeben erstellten Service Bus Namespace können wir unter Übersicht mit einem Klick auf das blaue + neben Queue eine neue Queue hinzufügen. Dieser geben wir einfach einen Namen, in unserem Fall „CriticalHighMailQueue“ da sie das versenden von Mail bei zu hoher Temperatur übernehmen soll.

Service Bus als Unterpunkt des Namespaces erstellen

Das Message-Routing

Jetzt da wir einen Service Bus haben können wir uns daran machen die Nachrichten auch an diese weiterzuleiten. Dafür gehen wir im Azure Portal auf unseren IoTHub und wählen den Punkt Nachrichtenrouting. Hier können wir eine neue Route festlegen, die es uns erlaubt die Nachrichten direkt an den Service Bus zu schicken.

Hier können wir einen neuen Endpoint erstellen

Hier geben wir unserer neuen Route erst mal einen Namen. Als nächstes müssen wir den gewünschten Endpunkt auswählen. Da wir bisher noch keinen Endpunkt haben klicken wir auf das schwarze + daneben und wählen Service Bus Queue aus. Es öffnet sich ein neues Fenster, in dem wir dem Endpunkt einen Namen geben. Zudem wählen wir einen Bus Namespace aus, den wir ja zuvor erstellt haben und können dann aus den unter diesem Namespace erzeugten Queues wählen. Wir wählen die gewünschte aus und klicken auf erstellen.

Hier können wir die Routing query ändern um auf die Tags zu reagieren

Mit unserem neuen Endpunkt können wir nun die Route fertig machen. Dabei müssen wir noch zwei Felder ausfüllen. Bei Data Source wählen wir Device Telemety Data aus, da wir ja die vom Raspberry geschickten Telemetriedaten verwenden wollen und zu guter letzt müssen wir noch etwas bei routing query eintragen.
Wir löschen alles was zuvor da war und ändern es zu
level = „critical_H“

Erstellen einer Logic App

Da wir unsere Nachrichten jetzt wie gewünscht weiterleiten kümmern wir uns jetzt darum, wie aus der Nachricht eine Mail wird. Dafür nutzen wir die Azur eigenen Logic Apps.
Wir erstellen zunächst einmal eine Logic App, dafür gehen wir beim erstellen von neuen Ressourcen auf das Tab Integration und wählen Logic App aus. Ein neues Fenster öffnet sich, in dem wir den Namen und die Ressourcengruppe auswählen. Wichtig ist dabei, dass wir darauf achten dass Logic Analytics ausgeschaltet sind.

Erstellen einer neuen Logic App

Wenn wir nun auf Erstellen klicken öffnet sich die Logic App und wir bekommen zugriff auf den Logic Designer. In diesem können wir der App Funktionalität zukommen lassen. Zunächst müssen wir einen Trigger auswählen. Da unsere Nachricht über einen Service Bus Queue ankommt wählen wir
Service Bus – When message is received in queue (auto-complete)
als Trigger benutzen.

Der passende Trigger für unseren Bus

Für diesen Trigger müssen wir ein paar Sachen einstellen. Wir geben unserer Verbindung einen Namen, wählen die gewünschte Queue aus und wählen RootManageSharedAccessKey aus. Dann klicken wir auf erstellen und schon haben wir den Trigger unserer Funktion.

Über das + an dem Pfeil nach unten können wir nun weitere Funktionalitäten hinzu fügen. Da wir die Temperaturdaten im Falle einer Kritischen Temperaturüberschreitung per Mail versenden wollen stehen uns einige Optionen zur Verfügung. Wir könnten einen Mail aus outlook versenden (wenn wir Office360 haben) oder wir nutzen Google Mail zum versenden der Daten.
Ich habe mich für Google Mail entschieden. Dann suchen wir jetzt den Block Send Email von Gmail aus, und füllen die benötigten Felder aus. Wir müssen uns zunächst mit einem Gmail Account anmelden, der später zum versenden genutzt wird. Dann können wir einen Empfänger wählen und Felder hinzufügen.
Wir wollen die Felder Body und Subject nutzen, da wir so der Mail einen Betreff geben können und unsere Daten im Body der Mail versenden.

Unser Email sende Block

Wir schreiben etwas in den Body und erweitern dies dann um den Dynamischen Inhalt Content. So wird der Inhalt der Nachricht zu unserer Mail hinzu gefügt.

Weitere Tutorials

Schnellstart Tutorial
Tutorial 1: C2D Nachrichten empfangen
Tutorial 2: Temperatur Sensor und D2C