IoT Edge auf dem Mac M1 in weniger als 20 Minuten

[Reading Time: 9 minutes]

Was ist in diesem Beitrag enthalten? Wir lernen also etwas über IoT Edge … was es ist, wie es funktioniert und wie man es auf einer lokalen Testinstanz nativ auf einem Ubuntu Linux ausführt, die wir installieren und konfigurieren wollen … Jepp, in weniger als 20 Minuten.

Video-Alarm

Wenn du gerade keine Lust zum Lesen hast, geh’ einfach auf die YouTube Seite und schau dir das Video an, das ich gemacht habe.
(https://youtu.be/GqU4csA3FTc)

Wirklich, es gibt weder ein besonderes Bedürfnis nach… noch einen echten Anwendungsfall, um eine IoT-Edge-Lösung auf deinem Mac auszuführen. Wenn du jedoch eine IoT-Lösung entwickeln und einen Mac mit M1-CPU verwendest, solltest du weiterlesen.

Sicherlich ist dies hier zu Lernzwecken. Ich mag es sehr, mein Wissen zu erweitern, indem ich einfach Experimente mit coolen Technologien mache.

Und das sind meine Anforderungen und Setup für diesen Beitrag.

Ich habe ein Github-Repository, HalloweenAI , in dem ich eine auf IoT Edge basierende Gesichtserkennungslösung erstelle, die ich in Github Codespaces entwickle.

Codespaces gibt mir die Möglichkeit, eine fummel-freie Entwicklungsumgebung zu betreiben. Aber ein Nachteil ist, dass ich keine Webcam in Codespaces nutzen kann. Hier kommt UTM, eine Virtualizer-App, ins Spiel.

Um also einige lokale Vorteile zu nutzen, werden wir Ubuntu (ARM-Version) auf dem Mac ausführen und IoT Edge auf dieser Instanz installieren. Ein Mac M-Prozessor basiert übrigens auf der ARM-Architektur. … nimm dir einen Moment Zeit, um darüber nachzudenken… Ja, RaspberryPis, Jetson Nanos und solche Arten von Hardware sind von der gleichen Architektur. … Nein, es geht nicht darum, einen teuren RaspberryPi aus deinem Mac zu machen, aber eine IoT-Edge-Lösung dafür hier aus führen zu können, macht die Sache doch wieder attraktiver. Aber ich möchte dich nicht mit zu vielen Worten langweilen, lass uns los legen.

Ich entwickle sehr gerne IoT-Lösungen mit Microsofts IoT Edge, weil es eine große Flexibilität hat und leicht erweitert werden kann. Also sollten wir kurz über IoT Hub sprechen – ein weiteres IoT-Produkt von Microsoft, das in Azure lebt.

IoT Hub

IoT Hub ist eine Lösung, deren Zweck im Allgemeinen darin besteht, ein IoT-Endpunkt mit Funktionen für die Bereitstellung von Geräten, die Verwaltung von Zuständen, die Synchronisierung von Gerätezwillingen, das Sammeln von Telemetriedaten und viele andere Dinge zu sein, die IoT-Lösungen häufig benötigen.

IoT Hub verbindet Geräte und fügt Azure-Dienste hinzu

Du kannst problemlos Geräte anschließen, die unterschiedlicher Art und Komplexität sind, wie Roboter, RasPis oder einfach nur Mikrocontroller.

Einer der Vorteile von IoT Hub besteht darin, dass Du Clouddienste zu einem Teil deiner IoT-Lösung machen kannst, indem du sie einfach einbindst.

IoT Edge

So, jetzt komme ich zum Punkt. Was ist IoT Edge?

Die Idee hinter IoT Edge ist es, Cloud-Services an den Edge zu bringen. Bedeutet, Dienste näher an den Ort zu bringen, an dem sich der Client oder das Gerät befindet.

Dafür gibt es verschiedene Gründe. Es kann sein, dass es zu oft Verbindungsprobleme gibt, oder es ist wichtig, wo sich Daten befinden sollen, oder es ist eine Frage der Leistung. Dennoch hast du mit IoT Edge die Möglichkeit, Ihre Cloud IoT-Lösung neu zu überdenken.

Es ist jedoch nicht nur möglich, mehrere Azure-Dienste am Edge auszuführen, sondern auch Drittanbieter- oder eigene benutzerdefinierte Dienste. Und das macht es zu einer sehr smarten Technologie.

IoT Edge-Komponenten

Du kannst dir IoT Edge als spezialisiertes “Betriebssystem” für Container-Services für den IoT-Anwendungsfall vorstellen. Aus diesem Grund wird IoT Edge mit drei Komponenten ausgeliefert:

  • IoT Edge-Module – (der erste Stack in der Abbildung oben) In dieser Komponente befinden sich alle Container, die Du für deine Lösung benötigst
  • IoT Edge-Laufzeit – bildet die operative Basis, wie Container-Management und Kommunikation zwischen diesen
  • Cloud-Schnittstelle – ermöglicht die Kommunikation mit IoT Hub und ermöglicht Fernüberwachung und Remote-Management

Die IoT Edge-Laufzeit besteht aus zwei Modulen, die für die Ausführung von Containern und die Kommunikation verantwortlich sind.

Hier ist es IoT Edge Agent – Es instanziiert Container, hält sie am Laufen und kümmert sich um Fehler und meldet an IoT Hub. Der zweite ist der IoT Edge Hub – Dieser Teil ist eine Art lokaler Proxy, der sich wie IoT Hub verhält. So können Clients/Devices damit arbeiten, wie Du es mit Azures IoT Hub tun würden … Aber nur in geringerem Umfang.

Demo-Anwendung zur Gesichtserkennung

Den Demo-Anwendungscode findest du in meinem GH Repo HalloweenAI. Die Idee für dieses Projekt ist in diesem Jahr ein KI-gesteuertes Halloween (Ai-driven-Halloween) zu machen. Also entwickle ich eine Gesichtserkennungs-App mit zusätzlichen Funktionen, die es ermöglichen, Kinder zu erschrecken :-). Damit das irgendwo draußen läuft, möchte ich, dass es auf einem Gerät werkelt. Hier kommt IoT ins Spiel. Ich lade dich ein, zu diesem Projekt beizutragen. Es gibt mehrere Optionen und Technologien, die dieses Projekt dir anbietet. Es gibt Module, die in Python ausgeführt werden, einige in C# … einige verwenden Flask Webserver einige ASP.NET Blazor. Auch eine PWA-Version gehört dazu.

Kommen wir zu dem Teil, in dem die IoT Edge-Lösung bereitgestellt wird.

Das Bereitstellungsmanifest beschreibt, welche Module für die Lösung verfügbar sein sollten, und fügt die Parameter ein, die für die Ausführung auf dem Gerät spezifisch sind. Ich habe die interessanten Teile gelb markiert. Es enthält im Grunde die Video-Eingangsquelle, das ist in meinem Fall eine Webcam (/dev/video0). Du kannst auch ein YouTube-Video oder einen Dateinamen einfügen, der sich zusammen mit Ihren Bereitstellungsartefakten befinden sollte.

Wie wird die Bereitstellung durchgeführt? Klicke einfach mit der rechten Maustaste auf die Bereitstellungsvorlage (in der Abbildung oben markiert) und wähle “Build and Push” aus dem Kontextmenü. Nachdem du alle Containerimages erstellt und an die ContainerRegistry übertragen hast, wird ein neuer Ordner namens “config” mit einer Deployment-JSON angezeigt, die du für die Bereitstellung auf einem Ziel verwenden kannst. Klicke erneut mit der rechten Maustaste darauf und wähle “Deploy to single device”. Nachdem du die Bereitstellung ausgewählt hast, werden die Bereitstellungsinformationen an IoT Hub gesendet. Wir sind also fast fertig… fast 🙂

Vorbereiten des Mac mit einer lokalen Ubuntu-Instanz

Jetzt ist es an der Zeit, UTM zu installieren. Du kannst es von der UTM-Website hier bekommen. Dies ist ein Host für virtuelle Maschinen, auf dem viele Betriebssysteme kostenlos ausgeführt werden. Es basiert auf QEMU. Einer der Vorteile davon ist die Möglichkeit, Windows, Linux oder was auch immer nativ auf ARM läuft. Du wirst sehen, dass unser Linux, das wir in Kürze installieren, reibungslos läuft, wie es beim direkten Booten der Fall wäre. Ich will dich nur nochmal erinnern… unter 20 Minuten – und das nur weil wir uns Zeit lassen!

Nach der Installation von UTM kannst du starten und auf das Plus-Symbol oben im Fenster klicken. Jetzt kannst du wählen, ob du entweder zum VM-Marketplace gehen oder dein eigenes ISO file verwenden möchten.

Ich habe es bereits runtergeladen und kann daher nach dem ISO-File stöbern.

Meine Maschine sollte 4 Kerne haben, was der Größe entspricht, die auf den meisten RaspberryPis zu finden ist. Der Speicher bleibt für mich standardmäßig. Auch die folgenden Einstellung behalte ich im Standrard. Jetzt starte ich einfach die Installation von Ubuntu, indem ich auf das große “Start” -Symbol klicke, wie unten in der Animation.

Wenn du Ubuntu installierst, wirst du durch den Installations- und Konfigurationsprozess geführt.

Ich stelle meine Maschine nach meinen Bedürfnissen ein, was bedeutet, dass ich eine deutsche Tastatur konfiguriere.

Ich aktiviere auch OpenSSH für das Ssh’ing von meinem Rechner. Lass den Rest als Standard und fahre fort, bis die Installation und Konfiguration abgeschlossen sind.

Installieren von IoT Edge

Es ist an der Zeit, IoT Edge zum Laufen zu bringen. Und es ist wirklich nicht schwer, die Schritte zu erledigen! Microsoft hat gute Arbeit geleistet, indem es alle Details zu Papier gebracht – https://docs.microsoft.com/

Öffne den Link hier, um zur Installationsanleitung zu gelangen: Erstellen und Bereitstellen eines IoT Edge-Geräts unter Linux mithilfe symmetrischer Schlüssel – Azure IoT Edge | Microsoft Docs

Und wirklich, es ist ziemlich einfach, jeden Schritt zu kopieren und in dein Terminal einzufügen. Ich werde die Schritte in diesem Beitrag nicht wiederholen. Du kannst das selbst schneller kopieren. 🙂

Um unsere IoT Edge-Instanz als das Gerät zu konfigurieren, an das ich zuvor meine Bereitstellung gesendet habe, muss ich die Geräteverbindung vom Device Twin von IoT Hub abrufen. Du kannst entweder zum Azure-Portal wechseln und durch deine Ressourcen navigieren, oder zu deiner Dev Env wechseln – meins ist ja Codespaces – und die Details von dort abrufen, wenn du die Azure IoT Tools installiert hast.

Nach der Installation ruft IoT Edge sofort die Bereitstellungskonfiguration ab und beginnt mit der Einrichtung. Jetzt erwarte ich einen Fehler, da ich keinen Zugriff auf die Webcam habe, die ich als Eingabe für meine IoT-Edge-Lösung definiert habe.

Ich werde es reparieren … !

Nach Hinzufügen der Cam als USB Device

Wenn ich meine Cam an den USB-Port anschließe, werde ich entweder gefragt, ob ich diese an die VM weitergeben möchte (bitte! ja!), oder ich kann über das USB Symbol in der UTM Instanz oben das USB Device auswählen und an die virtuelle Maschine weitergebe. Nun können wir die WebSite der IoT Lösung öffnen und uns das Ergebnis anschaue.

Also, das ist alles. Wir haben die Arbeit in weniger als 20 Minuten erledigt. Du glaubst es nicht? Dann schau dir mein Video auf Youtube an.

Wenn Du Kommentare hinterlassen möchtest, würde mich freuen. Falls Du als Contributer an meinem Github-Repo HalloweenAI mit machen möchtest, fühl dich eingeladen.

Von Thomas

Als Chief Technology Officer bei Xpirit Deutschland. Ich bin dafür verantwortlich, die Produktivität unserer Kunden durch einen Full-Stack von Dev und Technologie in der heutigen Zeit zu steigern. Dabei kümmere ich mich nicht nur um Technologien aus Microsofts Stack wie Azure, AI und IoT, sondern auch um die Bereitstellung von Qualität und Expertise mit DevOps

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.