Table of Contents
Einleitung
In diesem Tutorial geht es darum, einen Raspberry Pi 3 mit dem Clouddienst Microsoft Azure zu verbinden. In diesem schnell Tutorial werden wir einen Client auf dem Raspberry Pi programmieren, der mit einem Azure IoT Hub verbunden wird, Cloud-To-Device Nachrichten empfangen und Device-To-Cloud Nachrichten senden kann. Zudem werden wir es in Azure einrichten, dass Nachrichten mit einem bestimmten Tag direkt per Mail an uns gesendet werden. Um dem ganzen dabei noch etwas Funktionalität zu geben hängen wir einen Temperatursensor an unser Raspberry und senden die Temperaturdaten.

Voraussetzungen
Für dieses Quick Tutorial sind beinahe keine Programmierkenntnisse erforderlich. Wenn man verstehen will was im Code passiert sind Kenntnisse in Python jedoch von Vorteil. Zudem sollte man zumindest ein wenig mit Linux umgehen können.
Vorbereitung
Raspberry Pi Betriebssystem installieren
Um das Raspberry Pi nutzen zu können muss ein Betriebssystem installiert werden, dafür bietet sich Raspbian an, das speziell zu diesem Zweck entwickelt wurde. Um dieses Betriebssystem auf dem Pi zu installieren verwenden wir NOOBS, die New-Out-Of-Box-Software die auf der Raspberry Pi Website heruntergeladen werden kann.
Die .zip Datei muss auf die microSD Karte des Pis extrahiert werden.
Sollte das Raspberry Pi bereits mit vorinstalliertem NOOBS auf der microSD Karte gekommen sein, können sie dies überspringen.
Um die Installation am Pi ausführen zu können sollten sie Tastatur, Maus und einen Bildschirm anschließen. Wenn sie nun die SD-Karte mit NOOBS in den Slot des Pis stecken und ihn dann starten indem sie das Netzteil anschließen, sollte ein Fenster auftauchen, in dem Gefragt wird, welches Betriebssystem installiert werden soll. Wählen sie „Raspbian“ und installieren sie es.
Raspberry Pi aktualisieren
Die Installation wird einige Zeit in Anspruch nehmen. Wenn sie abgeschlossen ist, nehmen sie sich etwas Zeit um sich mit dem Startmenü vertraut zu machen und gucken sie insbesondere nach der Python2 IDLE. Im Neuesten Softwarepatch ist diese nicht mehr direkt im Startmenü zu finden. Mittels des Startmenü-Editors können sie die IDLE aber wieder zum Startmenü hinzufügen.
Bevor sie damit anfangen können neue Updates herunterzuladen müssen sie zunächst noch ihr Pi mit dem Internet verbinden, dafür können sie entweder ein LAN-Kabel nutzen oder ihr Wi-Fi.
Sobald sie Verbunden sind, schließen sie alle unnötigen Fenster und öffnen sie ein Teminal Fenster. Hier werden wir nun zwei Befehle eingeben.
sudo apt-get update
Dies wird ein paar Sekunden dauern, wenn das Terminal sie auffordert, das nächste Kommando einzugeben, schreiben sie:
sudo apt-get dist-upgrade
Das zweite Kommando updated ihr Raspbian image auf die aktuellste Version.
Temperatursensor an das Raspberry Pi anschließen
Der in diesem Tutorial verwendete Temperatursensor DS18B20 verwendet das 1-Wire Bus Interface, bevor wir dieses an unserem Raspberry Pi nutzen können, müssen wir dieses dafür vorbereiten. Dafür nutzen wir folgenden Konsolen Befehl um die Konfiguration des Raspberries zu verändern
sudonano /boot/config.txt
Dies öffnet die Datei im nano Editor und erlaubt uns diese zu verändern. Wir suchen nun innerhalb dieser Datei nach der Zeile, die dtoverlay=w1-gpio
enthält, existiert sie nicht fügen wir sie ganz am Ende der Datei hinzu und speichern das ganze. Damit die Änderungen in Kraft treten müssen wir das Pi neu starten.
Wir bauen jetzt noch einen Schaltkreis mit dem Temperatursensor auf, dafür nutzen wir neben diesem einen GND Pol, einen 3.3V Pol des Pis, sowie den GPIO Pin 4. zwischen dem Kontakt mit dem 3.3V pol und dem Mittleren Füßchen des Sensors wird ein 4.7 Kohm Widerstand eingesetzt. An dem Ende, das nicht mit den 3.3V verbunden ist legen wir das Kable an, das zum GPIO Pin 4 führt.

Nachdem wir diesen Schaltkreis aufgebaut haben können wir mittels einiger Befehle testen, ob unsere Einstellungen korrekt sind.
sudo modprobe w1-gpio
sudo modprobe w1-therm
cd/sys/bus/w1/devices
ls
Dies wird alle Geräte, die über den 1-Wire Bus angeschlossen sind anzeigen. Der Temperatursensor wird eine ID haben, die mit einer 28 anfängt, der viele Nummern folgen. Nun können wir testen ob der Sensor arbeitet, indem wir das Folgende eintippen, dabei wird XXXX durch die Zahlen, die der 28 folgen ersetzt.
cd 28-xxxx
cat w1_slave
Nun sollte man das folgende erhalten. Geschieht das, arbeitet der Sensor
a3 01 4b 46 7f ff 0e 10 d8 : crc=d8 YES
a3 01 4b 46 7f ff 0e 10 d8 t=32768
Erste Schritte
Die iot-hub Bibliothek installieren
Wenn sie ihr Raspberry Pi richtig eingerichtet haben, müssen wir jetzt die IoTHub Bibliothek installieren. Dafür gibt es zwei Methoden; entweder besuchen sie Github (https://github.com/Azure-Samples/iot-hub-python-raspberrypi-client-app) und laden das Repository als Zip herunter, oder sie können das Repository via Terminal klonen.
sudo apt-get install git-core
git clone https://github.com/Azure-Samples/iot-hub-python-raspberrypi-client-app.git
um die Bibliothek zu kompilieren nutzen sie die Folgenden Kommandos (passen sie den Dateipfad an wenn nötig):
cd ./iot-hub-raspberrypi-client-app
sudo chmod u+x setup.sh
sudo ./setup.sh
Tipps:
– Sie können Verzeichnisse mittels *Joker wechseln, wenn sie keine Verzeichnisse mit ähnlichem Namen haben. Beispiel: „cd ./iot-*“ wird sie ins passende Verzeichnis bringen.
Das kompilieren der Bibliothek hat einen Ordner iothub_python erzeugt. Suchen sie diesen Ordner und suchen sie nach einem File mit dem Namen: iothub_client.so
Diese Datei müssen sie kopieren und in dem Ordner, in dem sie ihr späteres Programm schreiben wollen wieder einfügen, damit der Code funktioniert und die Klassen aus der Bibliothek verwendet werden können.
Anlegen des Geräts in IoTHub
Wenn sie bereits einen IoTHub erstellt haben, können sie hier weiter machen, ansonsten folgen sie bitte dem Tutorial ( XXX )
Öffnen sie ihren IoT Hub in ihrem Internet Browser und navigieren sie zum IoT Devices Reiter. In diesem können sie nun per klick auf das blaue + ein neues Gerät erzeugen.

Nach einem Klick auf das Plus öffnet sich die Ansicht zum erstellen eines neuen Geräts, geben sie hier ihrem Gerät eine einzigartige ID und setzen sie das Häkchen bei Auto-generate-Keys. Zum Schluss bestätigen sie die Erstellung durch klicken auf save.

Das so erzeugt Gerät lässt sich nun in der Geräteansicht anwählen. Wenn das Gerät angewählt ist, öffnet sich eine neue Sicht, in der Informationen über das Gerät angezeigt werden. Wichtig ist hierbei der Primäre Verbindungsschlüssel, den wir für die spätere Verwendung noch brauchen 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.

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.

Ö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.

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 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.

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.

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.

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.

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.
Der Code
Der Code liegt bereits fertig vor. Hier Downloaden. Die .py Datei muss mit in den Ordner, in den die IoT Hub Bibliothek gespeichert wurde. Hier kann man ihn nun einfach öffnen und muss nur noch eine Sache ändern, und schon kann es losgehen.
Die Variable CONNSTR muss an ihr eigenes Device angepasst werden indem der Connection String eben dieses aus dem IoT Hub ausgelesen wird und in „“ hinter dem = eingefügt wird. Sobald dies ihr eigener Connection String ist, kann das Programm gestartet werden und das Pi sendet regelmäßig die aktuelle Temperatur an Azure. Wenn sie auch die Logic App bereits erstellt haben sollten sie bei Überschreitungen einer kritischen Temperatur per Mail informiert werden.
Vertiefte Tutorials
Tutorial 1: C2D Nachrichten empfangen
Tutorial 2: Temperatur Sensor und D2C Nachrichten
Tutorial 3: Daten versenden per Mail