Hands-on: Azure IoT Edge

Vor kurzem hat Microsoft den Service Azure IoT Edge als Public Preview bereitgestellt. In dieser Serie möchte ich meine ersten Erfahrungen und Eindrücke mit dem neuen Azure Service IoT Edge beschreiben.

Diese Serie enthält

Teil 1: SD-Karte für Raspberry Pi 3 vorbereiten
Teil 2a: Raspberry Pi 3 für SSH-Zugriff vorbereiten
Teil 3: SSH-Verbindung zu Raspberry Pi herstellen
Teil 4: Installation von Docker auf Raspberry Pi 3
Teil 5: Installation der Azure IoT Edge Runtime auf Raspberry Pi 3
Teil 6: Device in Azure IoT-Hub anlegen
Teil 7: Senden von IoT Edge Modulen an Raspberry Pi 3

Der Raspberry Pi kann auch “headless” (also ohne Monitor, Tastatus und Maus) eingerichtet werden. Hierfür habe ich einen weiteren Eintrag vorbereitet:

Teil 2b: Vorbereiten des Raspberry Pi ohne Monitor (headless)

Referenzen

https://azure.microsoft.com/en-us/services/iot-edge/

 

Senden von IoT Edge Modulen an Raspberry Pi 3

In diesem Beitrag möchte ich einen ersten Demo-Container an unseren Raspberry Pi 3 senden, den wir in vorangegangenen Blogbeiträgen vorbereitet haben.

Dies wird benötigt

Folgendes wird für diesen Beitrag benötigt:

  • PC oder Laptop
  • Zugriff auf Azure Portal und aktive Subscription
  • IoT Edge Device (innerhalb IoT-Hub) im Azure Portal angelegt
  • Raspberry Pi mit IoT-Hub verbunden

Schritt 1: IoT-Edge Modul im Azure IoT-Hub anlegen

Im Azure Portal springen wir innerhalb unserer IoT-Hub Einstellung zu einem IoT-Edge Device auf die Device Details Seite.

2017-11-19 16_40_03-Microsoft Edge

Durch klicken auf Set Modules wird der Set Modules Blade geöffnet.

2017-11-19 16_42_02-Microsoft Edge

Hier können wir durch klicken auf Add IoT Edge Module ein Demo-Modul von Microsoft auswählen, um dieses an unser IoT-Edge Device zu senden.

2017-11-19 16_45_18-Microsoft Edge

Als Name geben wir tempSensor ein und als Image URI wird microsoft/azureiotedge-simulated-temperature-sensor:1.0-preview eingetragen. Der Rest bleibt unverändert.

2017-11-19 16_47_55-Microsoft Edge

Durch klicken aus Save wird dieses Modul in unsere Modul-Liste auf dem Set Modules Blade aufgenommen.

2017-11-19 16_48_59-Microsoft Edge

Durch klicken auf Next wird zum nächsten Punkt gesprungen.

2017-11-19 16_51_04-Microsoft Edge

Da wir hier kein Routing benötigen klicken wir auch hier auf Next.

2017-11-19 16_52_23-Microsoft Edge

Hier können wir nochmals die Einstellungen auf der Review Template Seite überprüfen und danach mit Submit das Modul an unseren Raspberry Pi senden.

Nach kurzer Zeit kommt die Fertigmeldung im Azure Portal.

2017-11-19 16_54_36-Microsoft Edge

Schritt 2: Installierte Module auf dem Raspberry Pi

In unserem SSH-Client bauen wir erneut eine Verbindung zu unserem Raspberry Pi her, falls die nicht schon steht.

Um die installierten Docker-Container anzuzeigen führen wir den folgenden Befehl aus:

sudo docker ps

2017-11-19 16_58_57-pi@raspberrypi_ ~

Es sollten jetzt drei Container installiert sein:

  1. microsoft/azureiotedge-simulated-temperature-sensor:1.0-preview
  2. microsoft/azureiotedge-hub:1.0-preview
  3. microsoft/azureiotedge-agent:1.0-preview

2017-11-19 17_00_17-pi@raspberrypi_ ~

Schritt 3: Funktionsprüfung des Temperatursensor-Moduls

Um die Funktionalität des Temperatursensor-Moduls testen zu können , schauen wir uns das Log-File dieses Moduls an. Alle 5 Sekunden wird ein neuer Eintrag durch das Modul erzeugt. Folgender Befehl zeigt uns die Log-Einträge an.

sudo docker logs -f tempSensor

2017-11-19 17_05_01-pi@raspberrypi_ ~

Hier wird das Log angezeigt:

2017-11-19 17_07_41-pi@raspberrypi_ ~

Gratulation! Wir haben jetzt einen Raspberry Pi 3 als Azure IoT-Edge Device angelegt, mit unserem IoT-Hub verbunden und ein IoT-Edge Modul aus der Azure-Cloud an den Raspberry Pi gesendet.

Referenzen

https://docs.microsoft.com/en-us/azure/iot-edge/quickstart-linux

Device in Azure IoT-Hub anlegen

Um ein Raspberry Pi mit einem Azure IoT-Hub verbinden zu können, muss der Raspberry Pi im Azure IoT-Hub als Device angelegt werden. Dies wird in diesem Blogeintrag erklärt.

Dies wird benötigt

Folgendes wird für diesen Beitrag benötigt:

  • PC oder Laptop
  • Zugriff auf Azure Portal und aktive Subscription
  • IoT Hub im Azure Portal angelegt

Schritt 1: Zugriff auf Azure IoT-Hub im Azure Portal

Über das Azure Portal müssen wir uns mit unseren Anmeldedaten anmelden und in die Konfigurationsoberfläche für einen existierenden IoT-Hub springen. Hier müssen wir unser Gerät im IoT-Edge Explorer anlegen. (Dieser befindet sich derzeit in Preview.)

2017-11-19 15_51_55-Microsoft Edge

Zum Anlegen eines IoT-Edge Devices muss der Link Add IoT Edge Device angeklickt werden.

2017-11-19 15_55_34-Microsoft Edge

Im neu erscheinenden Blade Add Device muss nur eine Device ID angegeben werden, in meinem Fall z. B. blog01. Danach muss dies mit Klick auf Save gespeichert werden.

2017-11-19 15_57_20-Microsoft Edge

Schritt 2: Connection-String speichern

Wir benötigen jetzt den Connection-String für unser Iot-Edge Device. Diesen bekommen wir durch Klick auf das Device in der Liste unten (in meinem Fall blog01.

2017-11-19 15_59_56-Microsoft Edge

Im sich jetzt öffnenden Blade Device Details wird der für uns interessante Connection-String unter Connection string–Primary key. Durch Klick auf das Copy-Symbol auf der rechten Seite kann der Connection-String in die Zwischenablage kopiert werden und für spätere Bedarfe gespeichert werden.

2017-11-19 16_01_40-Microsoft Edge

Wir haben jetzt ein IoT-Edge Device im Azure Portal angelegt. Der kopierte Connection-String muss jetzt noch in das IoT-Edge Device kopiert werden, danach kann die Verbindung zwischen IoT-Edge Device und IoT-Hub hergestellt werden.

Referenzen

https://docs.microsoft.com/en-us/azure/iot-edge/quickstart-linux

 

Installation der Azure IoT Edge Runtime auf Raspberry Pi 3

Wenn wir einen Raspberry Pi mit installierter Docker-Runtime haben, können wir auch die Azre IoT Edge Runtime installieren. Damit machen wir unseren Raspberry Pi zu einem Test-Device für den Azure IoT-Hub.

Dies wird benötigt

Folgendes wird für diesen Beitrag benötigt:

Schritt 1: Installieren der IoT-Edge Runtime Pakete

Die eigentlichen Pakete der IoT-Edge Runtime werden über folgenden Befehl geholt:

sudo pip install -U azure-iot-edge-runtime-ctl

Sollte folgende Fehlermeldung erscheinen

2017-11-19 15_20_15-pi@raspberrypi_ ~

müssen ein paar Zwischenschritte eingefügt werden:

sudo apt-get install build-essential libssl-dev libffi-dev python-dev

2017-11-19 15_21_59-pi@raspberrypi_ ~

und die eigentliche Installation dann mit y bestätigt werden

2017-11-19 15_22_54-pi@raspberrypi_ ~

Um sicherzustellen, dass alle Vorbedingungen erfüllt sind, setzen wir auch noch folgenden Befehl ab:

sudo pip install cryptography

2017-11-19 15_24_25-pi@raspberrypi_ ~

Im Normalfall sollte dieser nicht nötig sein und mit folgender Rückmeldung anzeigen, dass diese Vorbedingung schon installiert ist.

2017-11-19 15_27_06-pi@raspberrypi_ ~

Jetzt starten wir den zweiten Versuch, die Azure IoT Edge Pakete zu installieren, indem wir den folgenden Befehl erneut eingeben:

sudo pip install -U azure-iot-edge-runtime-ctl

2017-11-19 15_28_49-pi@raspberrypi_ ~

Das Laden der Pakete dauert jetzt einige Minuten. Zeit für einen Kaffee oder Tee…

Nach einigen Minuten meldet sich der SSH-Client mit erneuter Eingabeaufforderung.

2017-11-19 15_33_45-pi@raspberrypi_ ~

Schritt 2: Device Informationen aus Azure IoT-Hub eingeben

Dazu müssen wir die Connection-String Informationen des entsprechenden Devices im Azure IoT-Hub zur Verfügung haben. Sollte noch kein Device im Azure IoT-Hub angelegt sein, dies bitte jetzt tun die Connection-String Informationen des Devices notieren. Ich habe eine Anleitung in einem weiteren Blogeintrag zur Verfügung gestellt.

Wenn wir den Device Connection-String zur Verfügung haben, kann dieser in unserem IoT-Edge Device (unser Raspberry Pi) gespeichert werden. Dies geschieht durch folgendes Kommando, das wir per SSH-Client an unseren Raspberry Pi senden.

sudo iotedgectl setup --connection-string "{device connection string}" --auto-cert-gen-force-no-passwords

sudo iotedgectl setup --connection-string "HostName=chp-blog-we.azure-devices.net;DeviceId=blog01;SharedAccessKey=yrNME32CnRp+bF03jtEwWrBCT7nQXo3rgC1vgxUBRok=" --auto-cert-gen-force-no-passwords

2017-11-19 16_13_45-pi@raspberrypi_ ~

Nachdem wir nun auch den Connection-String unserem Device bekannt gemacht haben und dieses jetzt weiß, wohin es senden kann, kommen wir nun zum letzten Schritt.

Schritt 3: Aktivieren des IoT-Edge Devices

Durch den folgenden Befehl wird zum Schluss die IoT-Edge Runtime auf unserem Raspberry Pi gestartet.

sudo iotedgectl start

2017-11-19 16_17_22-pi@raspberrypi_ ~

Der nun startende Vorgang kann wieder ein paar Minuten dauern. Es wird jetzt ein benötigter Standard-Container, der azureiotedge-agent in der Version 1.0-preview geladen.

2017-11-19 16_21_18-pi@raspberrypi_ ~

Nachdem dies fertiggestellt ist können wir uns diesen geladenen Standard-Container ansehen, indem wir folgenden Befehl absetzen:

 sudo docker ps

2017-11-19 16_22_04-pi@raspberrypi_ ~

Im folgenden Bild wird der in der Docker-Runtime gestartete Container azureiotedge:1.0-preview angezeigt.

2017-11-19 16_23_00-pi@raspberrypi_ ~

Somit ist eine Kommunikation zwischen IoT-Edge-Device (Raspberry Pi) und dem IoT-Hub möglich.

Schritt 4: Verifizierung im Azure IoT-Hub

Zurück im Azure Portal, gehen wir in die Konfiguration unseres IoT-Hubs, genauer gesagt in die Device Details unseres IoT-Edge Devices.

2017-11-19 16_27_16-Microsoft Edge

Hier sehen wir, dass unser Device jetzt im Zustand Connected ist.

Somit haben wir eine Verbindung zwischen IoT-Hub in der Azure-Cloud und unserem IoT-Edge-Device (Raspberry Pi) hergestellt. Nun ist es möglich eigene IoT-Edge Module an das Device zu senden.

Referenzen

https://docs.microsoft.com/en-us/azure/iot-edge/quickstart-linux