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

 

Installation von Docker auf Raspberry Pi 3

Für nachfolgende Projekte kann es sehr interessant sein, die Docker-Runtime auf dem Raspberry Pi 3 zu haben. Eine kleine Anleitung wird hier gegeben.

Dies wird benötigt

Folgendes wird für diesen Beitrag benötigt:

Schritt 1: Docker Pakete laden

Mit einem SSH-Client (z. B. PuTTY) muss eine Verbindung zum Raspberry Pi hergestellt sein. Wenn die Verbindung steht und PuTTY auf unsere Befehlseingabe wartet, kann mit dem folgenden Befehl das Laden der Docker-Pakete angestoßen werden:

sudo curl -sSL https://get.docker.com | sh

2017-11-19 14_35_19-pi@raspberrypi_ ~

Möglicherweise wird folgender Hinweis angezeigt:

E: Sub-process /usr/bin/dpkg returned an error code (1)

2017-11-19 14_41_51-pi@raspberrypi_ ~

Das soll im Moment nicht stören.

Schritt 2: Docker mit Systemstart automatisch starten

Um bei Systemstart des Raspberry Pi automatisch die Docker-Runtime zu starten wird folgender Befehl abgesetzt:

sudo systemctl enable docker

2017-11-19 14_48_25-pi@raspberrypi_ ~

Jetzt ist es Zeit für einen Reboot. Das geht am schnellsten durch Unterbrechung der Stromzufuhr.

Schritt 3: Docker Installation testen

Nachdem der Raspberry Pi wieder hochgefahren ist und die SSH-Verbindung wieder steht, kann mit diesem Befehl geprüft werden, ob die Docker-Runtime läuft und der “Docker Hello-World”-Container geladen werden kann:

sudo docker run hello-world

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

Wenn alles ordnungsgemäß funktioniert hat, sollte die Zeile Hello from Docker! angezeigt werden. Das ist das Zeichen, dass die Docker-Runtime läuft und den hello-world Container geladen und gestartet wurde.

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

Herzlichen Glückwunsch!

Docker ist installiert und läuft. Viel Spaß!

SSH-Verbindung zu Raspberry Pi herstellen

Wenn, wie in Teil 2 demonstriert, auf dem Raspberry Pi SSH aktiviert wurde und eine Netzwerkverbindung zum Raspberry besteht, können wir uns über einen SSH-Client wie PuTTY direkt auf den Raspberry Pi aufschalten. Wie dies funktioniert, möchte ich hier erklären.

Dies wird benötigt

Folgendes wird für diesen Beitrag benötigt:

Schritt 1: Verbindung aufbauen

Zunächst wird der SSH-Client PuTTY gestartet.

2017-11-19 13_28_27-PuTTY Configuration

Unter Host Name wird der Rechnername unseres Raspberry Pis eingetragen. Dieser ist standardmäßig raspberrypi. Die Einstellungen für Port (22) und Connection type SSH sollten vor eingestellt sein. Falls nicht müssen diese angepasst werden.

2017-11-19 13_28_58-PuTTY Configuration

Durch Klick auf Open wird versucht eine Verbindung zum Raspberry Pi über SSH aufzubauen. Bei der ersten Verbindung könnte das folgende Fenster erscheinen. Dieses muss dann mit Ja bestätigt werden, um eine Verbindung aufbauen zu können.

2017-11-19 13_33_13-PuTTY Security Alert

Jetzt wird nach dem Login gefragt.

2017-11-19 13_33_29-raspberrypi.fritz.box - PuTTY

Falls bisher kein eigener User im Vorfeld angelegt wurde, muss der Standarduser pi mit dem entsprechenden Passwort verwendet werden. Das Standardpasswort ist raspberry. Dies sollte aber, wie in Teil 2 beschrieben, hoffentlich geändert worden sein.

2017-11-19 13_33_49-raspberrypi.fritz.box - PuTTY

Nach erfolgreicher Anmeldung, erscheint der folgender Bildschirm:

2017-11-19 13_38_11-pi@raspberrypi_ ~

Die grüne Zeile pi@raspberrypi zeigt, dass der User pi auf dem Host raspberrypi angemeldet ist und der Host bereit ist Befehle über den SSH-Client zu empfangen. Um den Raspberry Pi auf den neuesten Stand zu bringen, sollten jetzt die installierten Pakete auf Updates überprüft werden.

Schritt 2: Updates für den Raspberry Pi

Verfügbare Updates werden über den folgenden Befehl ermittelt:
sudo apt-get update

2017-11-19 13_48_34-pi@raspberrypi_ ~

Um die neuesten Pakete dann auch wirklich zu installieren wird ein weiterer Befehl benötigt:
sudo apt-get dist-upgrade

2017-11-19 13_51_30-pi@raspberrypi_ ~

Jetzt wird die Liste der zu aktualisierenden Pakete gelesen und es wird berechnet, ob zusätzlicher Speicherplatz benötigt wird. Das zeigt z. B. der folgende Screenshot, der dann mit y bestätigt wird.

2017-11-19 13_52_16-pi@raspberrypi_ ~

Das eigentliche Updaten der Pakete kann einige Minuten in Anspruch nehmen. Zeit für einen Kaffee…

2017-11-19 14_14_29-pi@raspberrypi_ ~

… jetzt ist der Raspberry Pi “up-to-date”.

Von hier aus können wir unsere verschiedenen Raspberry Pi Projekte starten.

Referenzen

PuTTY

WinSCP

Raspberry Pi 3 für SSH-Zugriff vorbereiten

Nachdem in Teil 1 eine SD-Karte mit dem aktuellen Rasbian Betriebssystem erstellt wurde, wird nun der Raspberry Pi in Betrieb genommen und für den Zugriff über SSH vorbereitet.

Dies wird benötigt

Folgendes wird für diesen Beitrag benötigt:

Schritt 1: Raspberry Pi starten

Die mit Rasbian erstellte SD-Karte wird nun in den Raspberry Pi eingesteckt. Zusätzlich wird ein Monitor über HDMI angesteckt und Tastatur und Maus per USB angeschlossen.

Jetzt kann der Raspberry Pi gestartet werden und meldet sich mit dem Startbildschirm.

2017-09-07-161331_1680x1050_scrot.png

Schritt 2: Konfiguration

Noch ist der Raspberry Pi nicht mit einem Wifi verbunden. Damit fangen wir an. In der rechten oberen Ecke befindet sich das Netzwerksymbol.

2017-09-07-161331_1680x1050_scrot_LI.jpg

Ein Klick auf dieses Netzwerksymbol zeigt eine Liste der verfügbaren Wifi-Netzwerke an. Hier wird das benötigte Wifi ausgewählt und das Passwort eingegeben.

2017-09-07-181824_1680x1050_scrot

Nachdem dies erledigt ist, wird die weitere Konfiguration des Raspberry Pi vorgenommen.

Dazu wird in der linken oberen Ecke  das Rasbian Symbol angeklickt und unter Preferences das Untermenu Raspberry Pi Configuration ausgewählt.

2017-11-19-123712_1680x1050_scrot

Die ersten Aktionen werden auf dem Reiter Localisation vorgenommen.

2017-09-07-161625_1680x1050_scrot

Hier wird unter Set Locale die gewünschte Lokalisation eingestellt. Ich nehme hier üblicherweise als Language en (English) und als Country US (United States).

2017-09-07-161644_1680x1050_scrot

Unter Set Timezone wird die entsprechende Zeitzone eingestellt in der sich der Raspberry Pi befindet. In meinem Fall ist das als Area Europe und als Location Berlin.

2017-09-07-161653_1680x1050_scrot

Im nächsten Schritt wird die Tastatureinstellung vorgenommen indem auf Set Keyboard geklickt wird. Dies sollte in jedem Fall durchgeführt werden, da standardmäßig als Tastaturlayout nicht die deutsche Tastatur eingestellt ist, was ich für meine Zwecke benötige.

2017-09-07-181708_1680x1050_scrot

Wichtig:
Speziell beim Ändern des Passworts sollte dringend das richtige Tastaturlayout eingestellt sein (siehe folgende Schritte)!

Als letzten Schritt auf dem Reiter Localisation wird noch das Wifi Country auf das entsprechende Land eingestellt. Bei mir ist das DE Germany.

2017-09-07-181716_1680x1050_scrot

Jetzt können die benötigten Änderungen auf dem Reiter System vorgenommen werden. Zunächst sollte das Passwort durch klicken auf Change Password geändert werden.

2017-09-07-161543_1680x1050_scrot

Wichtig:
Bitte das Passwort merken, notieren etc.

Danach kann unter der Rubrik Boot auf To CLI umgestellt werden. Damit wird beim nächsten Reboot nicht mehr in den Desktop gebootet. Dieser wird für die weiteren Schritte nicht mehr benötigt, da mittels SSH-Verbindung über das Netzwerk von einem Entwickler-PC oder -Laptop auf den Raspberry Pi zugegriffen wird.

2017-11-19-130121_1680x1050_scrot

Zum Schluss muss auf den Reiter Interfaces unter der Rubrik SSH auf Enable geklickt werden. Hierdurch wird die SSH-Verbindung über das Netzwerk erlaubt.

2017-09-07-161620_1680x1050_scrot

Schritt 3: Reboot

Nachdem nun SSH auf dem Raspberry Pi aktiviert ist erscheint möglicherweise eine Aufforderung zum Rebooten. Dies kann jetzt getrost getan oder manuell ein Neustart durchgeführt werden, indem über das Rasbian Symbol der Menü Eintrag Shutdown ausgewählt und im nächsten Schritt auf Reboot geklickt wird.

2017-11-19-131211_1680x1050_scrot

Nun ist der Raspberry bereit, um über SSH im Netzwerk aus der Ferne gesteuert werden zu können. Damit geht es dann weiter…

SD-Karte für Raspberry Pi 3 vorbereiten

Um den Raspberry Pi 3 für nachfolgende Projekte benutzen zu können, müssen einige Vorbereitungen getroffen werden. In diesem Beitrag wird eine SD-Karte mit dem Raspberry Pi Betriebssystem Rasbian in der Version 09/2017 erstellt.

Dies wird benötigt

Schritt 1: Formatieren der SD-Karte

Zunächst muss die SD-Karte formatiert werden. Hierfür benutze ich die Software SD Card Formatter.

2017-11-19 10_28_27-SD Card Formatter

Wenn sichergestellt ist, dass das Drop-down Menu Select card die richtige SD-Karte anzeigt, kann durch klicken auf Format der Formatierungsprozess gestartet werden.

2017-11-19 10_30_29-SD Card Formatter

Hier muss nochmals der Warnhinweis mit Ja bestätigt werden.

2017-11-19 10_30_56-SD Card Formatter

Nach kurzer Zeit ist die SD-Karte formatiert und wir können durch Klicken von OK zum nächsten Schritt übergehen.

Schritt 2: Schreiben des Rasbian Images auf die SD-Karte

Das benötigte Images des Rasbian Betriebssystems kann von der offiziellen Raspberry Pi Homepage geladen werden. Zum Zeitpunkt der Erstellung dieses Blogs war das die Version 2017-09-07-raspbian-stretch.

Zum Schreiben des Images benutze ich die Software Win32 Disk Imager.

2017-11-19 10_40_38-Win32 Disk Imager

Hier wird das zuvor heruntergeladene Image (*.img-Datei) und die SD-Karte als Ziel-Device ausgewählt. Danach wird der Schreibprozess durch Klicken auf Write gestartet.

Wichtig:
Hier unbedingt auf das richtige Laufwerk (in meinem Fall Laufwerk D) achten!

2017-11-19 10_45_39-Confirm overwrite

Wenn alles richtig angegeben ist, kann der Schreibprozess mit Klick auf Yes gestartet werden. Dies dauert jetzt ein paar Minuten.

2017-11-19 11_13_40-Complete

Nach Klicken auf OK haben wir das Standard-Image auf der SD-Karte und können diese in den Raspberry Pi schieben und diesen starten.

Referenzen

SD Card Formatter

Win 32 Disk Imager