Share via


Utveckla dina egna IoT Edge-moduler

Gäller för:Bockmarkering för IoT Edge 1.5 IoT Edge 1.5 Bockmarkering för IoT Edge 1.4 IoT Edge 1.4

Viktigt!

IoT Edge 1.5 LTS och IoT Edge 1.4 LTS stöds. IoT Edge 1.4 LTS upphör den 12 november 2024. Om du har en tidigare version läser du Uppdatera IoT Edge.

Azure IoT Edge-moduler kan ansluta till andra Azure-tjänster och bidra till din större molndatapipeline. Den här artikeln beskriver hur du kan utveckla moduler för att kommunicera med IoT Edge-körningen och IoT Hub, och därmed resten av Azure-molnet.

IoT Edge-körningsmiljö

IoT Edge-körningen tillhandahåller infrastrukturen för att integrera funktionerna i flera IoT Edge-moduler och distribuera dem till IoT Edge-enheter. Alla program kan paketeras som en IoT Edge-modul. För att dra full nytta av IoT Edge-kommunikations- och hanteringsfunktioner kan ett program som körs i en modul använda Azure IoT Device SDK för att ansluta till den lokala IoT Edge-hubben.

Paketera programmet som en IoT Edge-modul

Om du vill distribuera programmet på en IoT Edge-enhet måste det först containeriseras och köras med en Docker-kompatibel motor. IoT Edge använder Moby, projektet med öppen källkod bakom Docker, som sin Docker-kompatibla motor. Samma parametrar som du är van vid med Docker kan skickas till dina IoT Edge-moduler. Mer information finns i Konfigurera alternativ för att skapa containrar för IoT Edge-moduler.

Använda IoT Edge-hubben

IoT Edge-hubben har två huvudsakliga funktioner: en proxy till IoT Hub och lokal kommunikation.

Anslut till IoT Edge-hubben från en modul

Anslut till den lokala IoT Edge-hubben från en modul omfattar samma anslutningssteg som för alla klienter. Mer information finns i Anslut ing till IoT Edge-hubben.

Om du vill använda IoT Edge-routning via AMQP kan du använda ModuleClient från Azure IoT SDK. Skapa en ModuleClient-instans för att ansluta din modul till IoT Edge-hubben som körs på enheten, ungefär som hur DeviceClient-instanser ansluter IoT-enheter till IoT Hub. Mer information om klassen ModuleClient och dess kommunikationsmetoder finns i API-referensen för önskat SDK-språk: C#, C, Python, Java eller Node.js.

IoT Hub-primitiver

IoT Hub ser en modulinstans som liknar en enhet. En modulinstans kan:

För närvarande kan moduler inte ta emot meddelanden från molnet till enheten eller använda filuppladdningsfunktionen.

När du skriver en modul kan du ansluta till IoT Edge-hubben och använda IoT Hub-primitiver som du skulle göra när du använder IoT Hub med ett enhetsprogram. Den enda skillnaden mellan IoT Edge-moduler och IoT-enhetsprogram är att du med moduler måste referera till modulidentiteten i stället för enhetsidentiteten.

Meddelanden från enheten till molnet

En IoT Edge-modul kan skicka meddelanden till molnet via IoT Edge-hubben som fungerar som lokal koordinator och sprider meddelanden till molnet. För att möjliggöra komplex bearbetning av meddelanden från enhet till moln kan en IoT Edge-modul fånga upp och bearbeta meddelanden som skickas av andra moduler eller enheter till den lokala IoT Edge-hubben. IoT Edge-modulen skickar sedan nya meddelanden med bearbetade data. Kedjor av IoT Edge-moduler kan därför skapas för att skapa lokala bearbetningspipelines.

Så här skickar du telemetrimeddelanden från enhet till moln med hjälp av vägar:

  • Använd modulklientklassen för Azure IoT SDK. Varje modul har indata - och utdataslutpunkter .
  • Använd en send message-metod från modulklientklassen för att skicka meddelanden på utdataslutpunkten för modulen.
  • Konfigurera en väg i edgeHub-modulen på enheten för att skicka utdataslutpunkten till IoT Hub.

Så här bearbetar du meddelanden med hjälp av vägar:

  • Konfigurera en väg för att skicka meddelanden som kommer från en annan slutpunkt (modul eller enhet) till modulens indataslutpunkt.
  • Lyssna efter meddelanden på modulens indataslutpunkt. Varje gång ett nytt meddelande kommer tillbaka utlöses en återanropsfunktion av Azure IoT SDK.
  • Bearbeta ditt meddelande med den här återanropsfunktionen och (om du vill) skicka nya meddelanden i modulslutpunktskö.

Kommentar

Mer information om hur du deklarerar en väg finns i Lär dig hur du distribuerar moduler och upprättar vägar i IoT Edge

Tvillingar

Tvillingar är en av de primitiver som tillhandahålls av IoT Hub. Det finns JSON-dokument som lagrar tillståndsinformation, inklusive metadata, konfigurationer och villkor. Varje modul eller enhet har en egen tvilling.

  • Anropa metoden för att hämta en modultvilling med Azure IoT SDKModuleClient.getTwin.

  • Om du vill ta emot en modultvillingskorrigering med Azure IoT SDK implementerar du en återanropsfunktion och registrerar den ModuleClient.moduleTwinCallback med metoden från Azure IoT SDK så att återanropsfunktionen utlöses varje gång en tvillingkorrigering kommer in.

Ta emot direkta metoder

Om du vill ta emot en direktmetod med Azure IoT SDK implementerar du en återanropsfunktion och registrerar den ModuleClient.methodCallback med metoden från Azure IoT SDK så att återanropsfunktionen utlöses varje gång en direktmetod kommer in.

Stöd för språk och arkitektur

IoT Edge stöder flera operativsystem, enhetsarkitekturer och utvecklingsspråk så att du kan skapa det scenario som matchar dina behov. Använd det här avsnittet för att förstå dina alternativ för att utveckla anpassade IoT Edge-moduler. Du kan lära dig mer om verktygsstöd och krav för varje språk i Förbereda din utvecklings- och testmiljö för IoT Edge.

Linux

För alla språk i följande tabell stöder IoT Edge utveckling för AMD64 och de flesta ARM64 Linux-containrar. Det finns även stöd för Debian 11 ARM32-containrar.

Utvecklingsspråk Utvecklingsverktyg
C Visual Studio-koden
Visual Studio 2019/2022
C# Visual Studio-koden
Visual Studio 2019/2022
Java Visual Studio-koden
Node.js Visual Studio-koden
Python Visual Studio-koden

Kommentar

För plattformsoberoende kompilering, som att kompilera en ARM32 IoT Edge-modul på en AMD64-utvecklingsdator, måste du konfigurera utvecklingsdatorn för att kompilera kod på målenhetens arkitektur som matchar IoT Edge-modulen. Mer information om målenhetsarkitekturer finns i Utveckla Azure IoT Edge-moduler med Visual Studio Code.

Windows

Vi stöder inte längre Windows-containrar. IoT Edge för Linux i Windows är det rekommenderade sättet att köra IoT Edge på Windows-enheter.

Modulsäkerhet

Du bör utveckla dina moduler med säkerhet i åtanke. Mer information om hur du skyddar dina moduler finns i Docker-säkerhet.

För att förbättra modulsäkerheten inaktiverar IoT Edge vissa containerfunktioner som standard. Du kan åsidosätta standardinställningarna för att tillhandahålla privilegierade funktioner till dina moduler om det behövs.

Tillåt utökade Docker-behörigheter

I konfigurationsfilen på en IoT Edge-enhet finns det en parameter som heter allow_elevated_docker_permissions. När den här flaggan är inställd på true tillåter den --privileged flaggan och eventuella ytterligare funktioner som du definierar i CapAdd fältet i Docker HostConfig i alternativen för att skapa containrar.

Kommentar

För närvarande är den här flaggan sann som standard, vilket gör att distributioner kan bevilja privilegierade behörigheter till moduler. Vi rekommenderar att du anger den här flaggan till false för att förbättra enhetssäkerheten.

Aktivera CAP_CHOWN och CAP_SETUID

Docker-funktionerna CAP_CHOWN och CAP_SETUID är inaktiverade som standard. Dessa funktioner kan användas för att skriva för att skydda filer på värdenheten och eventuellt få rotåtkomst.

Om du behöver dessa funktioner kan du återaktivera dem manuellt med hjälp av CapADD i alternativen för att skapa containrar.

Nästa steg

Förbereda utvecklings- och testmiljön för IoT Edge

Utveckla Azure IoT Edge-moduler med Hjälp av Visual Studio Code

Felsöka Azure IoT Edge-moduler med Visual Studio Code

Förstå och använda SDK:er för Azure IoT Hub