Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőre vonatkozik:
IoT Edge 1.5
Fontos
IoT Edge 1.5 LTS a támogatott kiadás. IoT Edge 1,4 LTS 2024. november 12-én véget ért. Ha korábbi kiadást használ, tekintse meg a Update IoT Edge című témakört.
Ez az oktatóanyag bemutatja, hogyan fejlesztheti és helyezheti üzembe a kódot egy IoT Edge eszközön. Azure IoT Edge modulok lehetővé teszik az üzleti logikát közvetlenül a IoT Edge eszközön futtató kód üzembe helyezését. A Kód telepítése Linux-eszközre gyors kezdés során beállít egy IoT Edge eszközt, és üzembe helyezett egy modult az Azure Marketplace.
Ez a cikk két IoT Edge fejlesztési eszköz lépéseit ismerteti:
- Azure IoT Edge Dev Tool parancssori felület (CLI), amely a fejlesztéshez ajánlott.
- Azure IoT Edge eszközök a Visual Studio Code-hoz bővítmény, amely karbantartási módban van.
Az eszköz kiválasztásához használja a cikk elején található eszközválasztó gombot.
Ebben az oktatóanyagban az alábbiakkal fog megismerkedni:
- A fejlesztői gép beállítása
- Új projekt létrehozása a IoT Edge eszközeivel
- Készítse el a projektet Docker-tárolóként és tárolja egy Azure tárolóregisztrációs adatbázisban
- A kód üzembe helyezése IoT Edge eszközön
Az oktatóanyagban létrehozott IoT Edge modul szűri az eszköz által generált hőmérsékleti adatokat. Csak akkor küld üzeneteket a felsőbb rétegbe, ha a hőmérséklet meghaladja a beállított küszöbértéket. Ez a peremhálózati elemzés segít csökkenteni a felhőbe küldött és tárolt adatok mennyiségét.
Előfeltételek
Fejlesztőgép:
- Használja a saját számítógépét vagy egy virtuális gépet.
- Győződjön meg arról, hogy a fejlesztőgép támogatja a beágyazott virtualizálást egy tárolómotor futtatásához.
- A tárolómotort futtató legtöbb operációs rendszert használhatja IoT Edge linuxos eszközökhöz készült modulok fejlesztéséhez. Ez az oktatóanyag egy Windows számítógépet használ, de a macOS-en vagy Linuxon is ismert különbségeket mutat be.
- A Visual Studio Code telepítése
- Telepítse a Azure CLI.
Egy Azure IoT Edge eszköz:
- Futtassa az IoT Edge-et egy külön eszközön. A fejlesztőgép és az IoT Edge eszköz elkülönítése valós üzembe helyezési forgatókönyvet szimulál, és segít tisztán tartani a fogalmakat. A Deploy code to a Linux Device című gyorsindítási útmutatóban létrehozhat egy IoT Edge eszközt az Azure-ban, vagy az Azure Resource Manager sablon segítségével üzembe helyezhet egy IoT Edge-kompatibilis virtuális gépet.
Felhőerőforrások:
- Használjon ingyenes vagy standard szintű Azure IoT Hub.
Ha nincs Azure fiókja, a kezdés előtt hozzon létre egy felszabadító fiókot.
Tipp.
Útmutató az interaktív hibakereséshez a Visual Studio Code-ban vagy a Visual Studio 2022-ben:
Modulok hibakeresése Azure IoT Edge Visual Studio Code - Használja a Visual Studio 2022-t az Azure IoT Edge modulok fejlesztésére és hibakeresésére
Ez az oktatóanyag a Visual Studio Code fejlesztési lépéseit ismerteti.
Fő fogalmak
Ez az oktatóanyag egy IoT Edge modul fejlesztését mutatja be. A IoT Edge modul végrehajtható kóddal rendelkező tároló. Egy vagy több modult üzembe helyezhet egy IoT Edge eszközön. A modulok olyan konkrét feladatokat végeznek, mint például az adatok betöltése érzékelőkből, adatok tisztítása és elemzése, vagy üzenetek küldése egy IoT Hub. További információért lásd: Az Azure IoT Edge modulok megértése.
IoT Edge modulok fejlesztésekor tisztában kell lennie a fejlesztőgép és a céleszköz IoT Edge közötti különbségekkel, ahol a modul üzembe van helyezve. A modulkód tárolására készített tárolónak meg kell egyeznie a céleszköz operációs rendszerével (OS). A leggyakoribb forgatókönyv például egy modul fejlesztése egy Windows számítógépen, amely egy IoT Edge futtató Linux-eszközt céloz meg. Ebben az esetben a tároló operációs rendszere Linux. Az oktatóanyag során vegye figyelembe a fejlesztőgép operációs rendszere és a tároló operációs rendszere közötti különbséget.
Tipp.
Ha IoT Edge for Linux on Windows rendszert használ, akkor a forgatókönyvben a céleszköz nem a Windows gazdagép, hanem a Linux rendszerű virtuális gép.
Ez az oktatóanyag a Linux-tárolókkal IoT Edge futtató eszközöket célozza meg. Használja az előnyben részesített operációs rendszert, amíg a fejlesztői gép Linux-tárolókat futtat. Visual Studio Code Linux-tárolókkal való fejlesztéshez ajánlott, ezért ez az oktatóanyag használja. Használhatja a Visual Studio is, bár a két eszköz között különbségek vannak a támogatásban.
Az alábbi táblázat a Linux-tárolók Visual Studio Code és Visual Studio támogatott fejlesztési forgatókönyveit sorolja fel.
| Visual Studio Code | Visual Studio 2019/2022 | |
|---|---|---|
| Linux-eszközarchitektúra | Linux AMD64 Linux ARM32v7 Linux ARM64 |
Linux AMD64 Linux ARM32 Linux ARM64 |
| Azure szolgáltatások | Azure Functions (felhőalapú szolgáltatás) Azure Stream Analytics Azure Machine Learning |
|
| Nyelvek | C C# Java Node.js Python |
C C# |
| További információ |
Azure IoT Edge Tools for Visual Studio 2019 Azure IoT Edge Tools for Visual Studio 2022 |
Konténer-motor telepítése
IoT Edge modulok tárolókként vannak csomagolva, ezért Docker-kompatibilis tárolókezelő rendszerre van szüksége a fejlesztői gépen az összeállításukhoz és kezelésükhöz. A Docker Desktop népszerű választás a fejlesztéshez, mivel erős funkciótámogatással rendelkezik. A Docker Desktop a Windows lehetővé teszi a Linux-tárolók és Windows tárolók közötti váltást, így különböző típusú IoT Edge-eszközökhöz fejleszthet modulokat.
A Docker dokumentációját használva telepítse a Dockert a fejlesztőgépre:
Install Docker Desktop for Windows. Amikor telepíti a Docker Desktopot Windows, a rendszer megkérdezi, hogy linuxos vagy Windows tárolókat szeretne-e használni. Ezt a beállítást bármikor módosíthatja. Ez az oktatóanyag Linux-tárolókat használ, mert a modulok Linux-eszközöket céloznak meg. További információ: Switch a Windows és a Linux-tárolók között.
Olvassa el a Docker CE-ről szóló információkat, hogy megtudja, hogyan telepíthető több Linux-platformra. A Windows Subsystem for Linux (WSL) esetében telepítse a Docker Desktopot Windows.
Eszközök beállítása
Telepítse a Python-alapú Azure IoT Edge fejlesztői eszközt a IoT Edge megoldás létrehozásához. Két lehetőség áll rendelkezésre:
- Használja az előnyben részesített előre összeállított IoT Edge Dev Container.
- Telepítse az eszközt a iotedgedev fejlesztési beállítással.
Fontos
A Visual Studio Code Azure IoT Edge eszközei bővítmény karbantartási módban van. Az előnyben részesített fejlesztési eszköz a parancssori Azure IoT Edge fejlesztői eszköz.
A Visual Studio Code IoT-bővítményeinek használatával fejleszthet IoT Edge modulokat. Ezek a bővítmények projektsablonokat kínálnak, automatizálják az üzembehelyezési jegyzék létrehozását, és lehetővé teszik IoT Edge eszközök figyelését és kezelését. Ebben a szakaszban telepíti a Visual Studio Code és az IoT-bővítményt, majd beállítja a Azure-fiókját, hogy IoT Hub erőforrásokat kezelje a Visual Studio Code belülről.
- Telepítse a Azure IoT Edge bővítményt.
- Telepítse Azure IoT Hub bővítményt.
- A bővítmények telepítése után nyissa meg a parancskatalógust a Parancskatalógus megtekintése >gombra kattintva.
- A parancskatalógusban keresse meg és válassza ki a Azure IoT Hub: Válassza a IoT Hub lehetőséget. Az utasításokat követve válassza ki Azure előfizetését és az IoT Hubot.
- Nyissa meg a Visual Studio Code explorer szakaszát a tevékenységsáv ikonjának kiválasztásával vagy a View > Explorer kiválasztásával.
- Az Explorer szakasz alján bontsa ki az összecsukott Azure IoT Hub/Eszközök menüt. A parancskatalóguson keresztül kiválasztott IoT Hub társított eszközöket és IoT Edge eszközöket láthatja.
Nyelvspecifikus eszközök telepítése
Telepítse a fejlesztendő nyelvre vonatkozó eszközöket:
Container Registry létrehozása
Ebben az oktatóanyagban a Azure IoT Edge és Azure IoT Hub bővítményeket használja egy modul létrehozásához és egy tárolórendszerkép létrehozásához a fájlokból. Ezután feltölti ezt a képet egy tároló regiszterbe, amely tárolja és kezeli a képeket. Végül a regisztrárból telepíti a képfájlt, hogy az IoT Edge eszközén fusson.
Fontos
A Azure IoT Edge Visual Studio Code bővítmény aintenance módban van.
Bármilyen Docker-kompatibilis beállításjegyzéket használhat a tárolólemezképek tárolásához. A Docker-beállításjegyzék két népszerű szolgáltatása a Azure Container Registry és Docker Hub. Ez az oktatóanyag Azure Container Registry használ.
Ha még nem rendelkezik tárolóregisztrációs adatbázissal, az alábbi lépéseket követve hozzon létre egy újat a Azure:
A Azure portálon válassza a Erőforrás létrehozása>Kontainers>Container Registry lehetőséget.
Adja meg a következő kötelező értékeket a tárolóregisztrációs adatbázis létrehozásához:
Mező Érték Előfizetés A legördülő listából válasszon egy előfizetést. Erőforráscsoport Használja ugyanazt az erőforráscsoportot a IoT Edge rövid útmutatók és oktatóanyagok során létrehozott összes teszterőforráshoz, például IoTEdgeResources. Névjegyzék neve Egyedi nevet adjon meg. Hely Válassza ki az Önhöz legközelebb eső helyet. SKU Válassza az Alapszintű lehetőséget. Válassza a Véleményezés + létrehozás, majd a Létrehozás lehetőséget.
Az Azure portál kezdőlapjának Források szakaszában válassza ki az új tárolóregisztrációt.
A tároló-regisztrációs adatbázis bal oldali paneljén válassza a Beállítások menüben a Hozzáférési kulcsok lehetőséget.
Engedélyezze a rendszergazdai felhasználót a váltógombbal, és tekintse meg a tárolóregisztrációs adatbázis felhasználónevét és jelszavát .
Másolja ki a bejelentkezési kiszolgáló, a felhasználónév és a jelszó értékeit, és mentse őket kényelmes helyre. Az oktatóanyag során ezeket az értékeket használja a tárolóregisztrációs adatbázishoz való hozzáférés biztosításához.
Új modulprojekt létrehozása
A Azure IoT Edge bővítmény projektsablonokat kínál az összes támogatott IoT Edge modulnyelvhez Visual Studio Code. Ezek a sablonok tartalmazzák az összes fájlt és kódot, amely egy munkamodul üzembe helyezéséhez szükséges a IoT Edge teszteléséhez, vagy kiindulópontként szolgál a sablon saját üzleti logikával való testreszabásához.
Projektsablon létrehozása
Az IoT Edge Dev Tool leegyszerűsíti az Azure IoT Edge fejlesztést, az utasításokhoz környezeti változók használatával. Segít a IoT Edge fejlesztés megkezdésében a IoT Edge Dev Container és IoT Edge megoldás-állványzat használatával, amely tartalmazza az alapértelmezett modult és az összes szükséges konfigurációs fájlt.
Hozzon létre egy könyvtárat a megoldáshoz a kívánt elérési úton. Váltson a
iotedgesolutionkönyvtárra.mkdir c:\dev\iotedgesolution cd c:\dev\iotedgesolutionA
iotedgedev solution initparanccsal hozzon létre egy megoldást, és állítsa be a Azure IoT Hub a választott fejlesztési nyelven:
A iotedgedev solution init parancssor több lépés elvégzését kéri, többek között a következőket:
- Hitelesítés az Azure-hoz
- Azure-előfizetés kiválasztása
- Erőforráscsoport kiválasztása vagy létrehozása
- Azure IoT Hub kiválasztása vagy létrehozása
- Azure IoT Edge eszköz kiválasztása vagy létrehozása
Használja a Visual Studio Code és a Azure IoT Edge bővítményt. Először hozzon létre egy megoldást, majd hozza létre az első modult a megoldásban. Minden megoldás több modult is tartalmazhat.
- Válassza a Parancskatalógus megtekintése >lehetőséget.
- A parancskatalógusban adja meg és futtassa a következő parancsot: Azure IoT Edge: Új IoT Edge megoldás.
- Keresse meg azt a mappát, amelyben létre szeretné hozni az új megoldást, majd válassza a Mappa kijelölése lehetőséget.
- Adja meg a megoldás nevét.
- Válassza ki az előnyben részesített fejlesztési nyelvhez tartozó modulsablont, hogy az legyen a megoldás első modulja.
- Adja meg a modul nevét. Válasszon egy egyedi nevet a tárolóregisztrációs adatbázisban.
- Adja meg a modul képadattárának nevét. Visual Studio Code automatikusan feltölti a modul nevét úgy, hogy localhost:5000/<az Ön modulneve> szerepeljen ott. Cserélje le a saját regisztrációs adataira. Ha helyi Docker-beállításjegyzéket használ a teszteléshez, használja a localhostot . Ha Azure Container Registry használ, használja a Login-kiszolgálót a beállításjegyzék beállításai között. A bejelentkezési kiszolgáló úgy néz ki, mint a <regisztrációs név>.azurecr.io. Csak a localhost:5000 sztringrészt cserélje le, hogy a végeredmény a következőképpen nézzen ki: <registry name>.azurecr.io/<a modulod neve>.
Visual Studio Code veszi át a megadott adatokat, létrehoz egy IoT Edge megoldást, majd betölti egy új ablakban.
A megoldás létrehozása után ezek a fő fájlok találhatók a megoldásban:
A .vscode mappa tartalmazza a konfigurációs fájltlaunch.json.
A modulok mappája minden modulhoz tartalmaz almappákat. Az egyes almappákban a module.json fájl szabályozza a modulok felépítését és üzembe helyezését.
Az .env fájl felsorolja a környezeti változókat. A tárolóregisztrációs adatbázis környezeti változója alapértelmezés szerint localhost :5000 .
Két modultelepítési fájl, deployment.template.json és deployment.debug.template.jsonfelsorolja az eszközön üzembe helyezendő modulokat. Alapértelmezés szerint a lista tartalmazza a IoT Edge rendszermodulokat (edgeAgent és edgeHub), valamint mintamodulokat, például:
- A filtermodule egy mintamodul, amely egy egyszerű szűrőfüggvényt implementál.
- A SimulatedTemperatureSensor modul a teszteléshez használható adatokat szimulálja. Az üzembehelyezési jegyzékek működésével kapcsolatos további információkért tekintse meg, hogyan használhatja az üzembehelyezési jegyzékeket a modulok üzembe helyezéséhez és útvonalak létrehozásához. A szimulált hőmérsékletmodul működésével kapcsolatos további információkért lásd a SimulatedTemperatureSensor.csproj forráskódot.
Feljegyzés
A telepített modulok pontos száma a választott nyelvtől függhet.
IoT Edge futtatókörnyezet verziójának beállítása
A legújabb stabil IoT Edge rendszermodul-verzió az 1.5. Állítsa be a rendszermodulokat az 1.5-ös verzióra.
A Visual Studio Code nyissa meg a deployment.template.json üzembehelyezési jegyzékfájlt. A deployment jegyzék egy JSON-dokumentum, amely leírja a célzott IoT Edge eszközön konfigurálni kívánt modulokat.
Módosítsa a futtatókörnyezet verzióját a rendszer futtatókörnyezeti modul lemezképeinek
edgeAgentésedgeHub. Ha például a IoT Edge futtatókörnyezet 1.5-ös verzióját szeretné használni, módosítsa a következő sorokat az üzembehelyezési jegyzékfájlban:"systemModules": { "edgeAgent": { "image": "mcr.microsoft.com/azureiotedge-agent:1.5", "edgeHub": { "image": "mcr.microsoft.com/azureiotedge-hub:1.5",
Adja meg a beállításjegyzék hitelesítő adatait az IoT Edge-ügynöknek
A környezeti fájl tárolja a tárolóregisztrációs adatbázis hitelesítő adatait, és megosztja őket a IoT Edge futtatókörnyezettel. A futtatókörnyezetnek szüksége van ezekre a hitelesítő adatokra a tárolólemezképek IoT Edge eszközre való lekéréséhez.
Az IoT Edge bővítmény megpróbálja lekérni a tárolóregiszter hitelesítő adatait az Azure-ból, és beilleszti őket a környezeti fájlba.
Feljegyzés
A környezeti fájl csak akkor jön létre, ha képtárat ad meg a modulhoz. Ha elfogadta az alapértelmezett localhost-beállításokat a helyi teszteléshez és hibakereséshez, akkor nem kell környezeti változókat deklarálnia.
Ellenőrizze, hogy léteznek-e hitelesítő adatai. Ha nem, vegye fel őket most:
Ha Azure Container Registry a beállításjegyzéke, állítson be egy Azure Container Registry felhasználónevet és jelszót. Ezeket az értékeket a tárolóregisztrációs adatbázis Settings>Access keys menüjéből szerezheti be a Azure portálon.
Nyissa meg az .env fájlt a modulmegoldásban.
Adja hozzá a username és password értékeket, amelyeket a Azure tárolóregisztrációs adatbázisból másolt. Példa:
CONTAINER_REGISTRY_SERVER="myacr.azurecr.io" CONTAINER_REGISTRY_USERNAME="myacr" CONTAINER_REGISTRY_PASSWORD="<registry_password>"Mentse a módosításokat az .env fájlba.
Feljegyzés
Ez az útmutató rendszergazdai hozzáférési adatokat használ, amelyek kényelmesek a fejlesztési és tesztelési célokra az Azure Container Registry-ben. Ha készen áll az éles helyzetekre, javasoljuk a minimális jogosultságú hitelesítési lehetőséget, például szolgáltatásnevek vagy tárház hatókörű jogkivonatok használatát. További információ: A tárolóregisztrációs adatbázishoz való hozzáférés kezelése.
Célarchitektúra
Válassza ki az egyes megoldásokkal megcélzott architektúrát, mert ez hatással van a tároló felépítésére és futtatására. Az alapértelmezett a Linux AMD64. Ebben az oktatóanyagban egy Ubuntu virtuális gépet használjon IoT Edge eszközként, és tartsa meg az alapértelmezett amd64.
Ha módosítania kell a megoldás célarchitektúráját, kövesse az alábbi lépéseket.
- Nyissa meg a parancskatalógust, és keresse meg a Azure IoT Edge: Alapértelmezett célplatform beállítása edge-megoldáshoz, vagy válassza az ablak alján található oldalsávon a parancsikon ikonját.
- A parancskatalógusban válassza ki a célarchitektúrát a lehetőségek listájából.
A célarchitektúra akkor van beállítva, ha egy későbbi lépésben hozza létre a tárolórendszerképet.
Modul frissítése egyéni kóddal
Minden sablon tartalmaz mintakódot, amely a szimulált érzékelőadatokat a SimulatedTemperatureSensor modulból veszi át, és irányítja azokat a IoT Hub. A mintamodul fogadja az üzeneteket, és átadja őket. A folyamat funkciói egy fontos fogalmat mutatnak be a IoT Edge: hogyan kommunikálnak egymással a modulok.
Minden modul több bemeneti és kimeneti üzenetsort deklarálhat a kódjában. Az eszközön futó IoT Edge központ egy modul kimenetéből egy vagy több modul bemenetére irányítja az üzeneteket. A bemenetek és kimenetek deklarálásának konkrét kódja nyelvenként eltérő, de a fogalom minden modul esetében ugyanaz. További információ a modulok közötti útválasztásról: Útvonalak deklarálása.
A projektsablonhoz tartozó C# mintakód a ModuleClient osztályt használja a .NET IoT Hub SDK-ból.
A Visual Studio Code explorerben nyissa meg a modules > filtermodule > ModuleBackgroundService.cs.
A
filtermodulenévtér előtt adjon hozzá háromusingutasítást a később használt típusokhoz:using System.Collections.Generic; // For KeyValuePair<> using Microsoft.Azure.Devices.Shared; // For TwinCollection using Newtonsoft.Json; // For JsonConvertAdja hozzá a változót
temperatureThresholdazModuleBackgroundServiceosztályhoz. Ez a változó azt az értéket állítja be, amelyet a mért hőmérsékletnek meg kell haladnia ahhoz, hogy az adatokat a IoT Hub elküldje.static int temperatureThreshold { get; set; } = 25;Adja hozzá a
MessageBody,MachineésAmbientosztályokat. Ezek az osztályok határozzák meg a bejövő üzenetek törzsének várt sémáját.class MessageBody { public Machine machine {get;set;} public Ambient ambient {get; set;} public string timeCreated {get; set;} } class Machine { public double temperature {get; set;} public double pressure {get; set;} } class Ambient { public double temperature {get; set;} public int humidity {get; set;} }Keresse meg a függvényt
ExecuteAsync. Ez a függvény létrehoz és konfigurál egyModuleClientobjektumot, amely lehetővé teszi, hogy a modul csatlakozzon a helyi Azure IoT Edge futtatókörnyezethez üzenetek küldéséhez és fogadásához. A létrehozás után aModuleClientkód beolvassa aztemperatureThresholdértéket a modul ikerpéldányának kívánt tulajdonságaiból. A kód regisztrál egy visszahívást, hogy üzeneteket fogadjon egy IoT Edge hubról egyinput1nevű végponton keresztül.Cserélje le a
ProcessMessageAsyncmetódus hívását egy új metódusra, amely frissíti a végpont nevét, valamint azt a metódust, amely a bemenet érkezésekor hívódik meg. Emellett adjon hozzá egy metódustSetDesiredPropertyUpdateCallbackAsynca kívánt tulajdonságok frissítéséhez. A módosítás végrehajtásához cserélje le a metódus utolsó sorátExecuteAsynca következő kódra:// Register a callback for messages that are received by the module. // await _moduleClient.SetInputMessageHandlerAsync("input1", PipeMessage, cancellationToken); // Read the TemperatureThreshold value from the module twin's desired properties var moduleTwin = await _moduleClient.GetTwinAsync(); await OnDesiredPropertiesUpdate(moduleTwin.Properties.Desired, _moduleClient); // Attach a callback for updates to the module twin's desired properties. await _moduleClient.SetDesiredPropertyUpdateCallbackAsync(OnDesiredPropertiesUpdate, null); // Register a callback for messages that are received by the module. Messages received on the inputFromSensor endpoint are sent to the FilterMessages method. await _moduleClient.SetInputMessageHandlerAsync("inputFromSensor", FilterMessages, _moduleClient);Adja hozzá a
OnDesiredPropertiesUpdatemetódust azModuleBackgroundServiceosztályhoz. Ez a metódus a modul ikertestvérétől kapja meg a kívánt tulajdonságok frissítéseit, és ennek megfelelően frissíti atemperatureThresholdváltozót. Minden modul rendelkezik saját digitális ikerpárral, amellyel közvetlenül a felhőből konfigurálhatja a modulban futó kódot.static Task OnDesiredPropertiesUpdate(TwinCollection desiredProperties, object userContext) { try { Console.WriteLine("Desired property change:"); Console.WriteLine(JsonConvert.SerializeObject(desiredProperties)); if (desiredProperties["TemperatureThreshold"]!=null) temperatureThreshold = desiredProperties["TemperatureThreshold"]; } catch (AggregateException ex) { foreach (Exception exception in ex.InnerExceptions) { Console.WriteLine(); Console.WriteLine("Error when receiving desired property: {0}", exception); } } catch (Exception ex) { Console.WriteLine(); Console.WriteLine("Error when receiving desired property: {0}", ex.Message); } return Task.CompletedTask; }Adja hozzá a metódust
FilterMessages. Ezt a metódust akkor hívják meg, amikor a modul üzenetet kap a IoT Edge központtól. Kiszűri azokat az üzeneteket, amelyek olyan hőmérsékleteket jelentenek, amelyek alacsonyabbak a modul ikerdokumentumán keresztül beállított hőmérsékleti küszöbértéknél. Emellett hozzáadja aMessageTypetulajdonságot az üzenethez, és a következő értékreAlertvan állítva:async Task<MessageResponse> FilterMessages(Message message, object userContext) { var counterValue = Interlocked.Increment(ref _counter); try { ModuleClient moduleClient = (ModuleClient)userContext; var messageBytes = message.GetBytes(); var messageString = Encoding.UTF8.GetString(messageBytes); Console.WriteLine($"Received message {counterValue}: [{messageString}]"); // Get the message body. var messageBody = JsonConvert.DeserializeObject<MessageBody>(messageString); if (messageBody != null && messageBody.machine.temperature > temperatureThreshold) { Console.WriteLine($"Machine temperature {messageBody.machine.temperature} " + $"exceeds threshold {temperatureThreshold}"); using (var filteredMessage = new Message(messageBytes)) { foreach (KeyValuePair<string, string> prop in message.Properties) { filteredMessage.Properties.Add(prop.Key, prop.Value); } filteredMessage.Properties.Add("MessageType", "Alert"); await moduleClient.SendEventAsync("output1", filteredMessage); } } // Indicate that the message treatment is completed. return MessageResponse.Completed; } catch (AggregateException ex) { foreach (Exception exception in ex.InnerExceptions) { Console.WriteLine(); Console.WriteLine("Error in sample: {0}", exception); } // Indicate that the message treatment is not completed. var moduleClient = (ModuleClient)userContext; return MessageResponse.Abandoned; } catch (Exception ex) { Console.WriteLine(); Console.WriteLine("Error in sample: {0}", ex.Message); // Indicate that the message treatment is not completed. ModuleClient moduleClient = (ModuleClient)userContext; return MessageResponse.Abandoned; } }Mentse a ModuleBackgroundService.cs fájlt.
A Visual Studio Code explorerben nyissa meg a deployment.template.json fájlt a IoT Edge megoldás munkaterületén.
Mivel módosítottuk a modul által figyelt végpont nevét, az üzembe helyezési jegyzékben szereplő útvonalakat is frissíteni kell, hogy az edgeHub üzeneteket küldjön az új végpontnak.
Keresse meg a
routesszakaszt a $edgeHub modul ikerpéldányában. Frissítse azsensorTofiltermoduleútvonalat úgy, hogy ainput1elemet ainputFromSensorelemre cseréli:"sensorTofiltermodule": "FROM /messages/modules/tempSensor/outputs/temperatureOutput INTO BrokeredEndpoint(\"/modules/filtermodule/inputs/inputFromSensor\")"Adja hozzá a filtermodule modult ikerként az üzembehelyezési jegyzékhez. Szúrja be a következő JSON-tartalmat a szakasz alján, a
modulesContent$edgeHub modul ikerpéldánya után:"filtermodule": { "properties.desired":{ "TemperatureThreshold":25 } }Mentse a deployment.template.json fájlt.
A megoldás felépítése és feltöltése
Frissítette a modul kódját és az üzembehelyezési sablont, hogy megismerje az üzembe helyezés néhány alapvető alapfogalmat. Most már készen áll a modul tárolórendszerképének összeállítására és a tárolóregisztrációs adatbázisba való leküldésére.
A Visual Studio Code nyissa meg a deployment.template.json üzembehelyezési jegyzékfájlt. A deployment jegyzék a célzott IoT Edge eszközön konfigurálni kívánt modulokat ismerteti. Az üzembe helyezés előtt frissítenie kell a Azure Container Registry hitelesítő adatait és a modul lemezképeit a megfelelő createOptions értékekkel. A createOptions értékekkel kapcsolatos további információkért lásd: Az IoT Edge modulok tároló-létrehozási beállításainak konfigurálása.
Ha Azure Container Registry használ a modulkép tárolásához, adja hozzá hitelesítő adatait a modulesContent > edgeAgent > settings > registryCredentials szakaszához. Cserélje le myacr a saját regisztrációs nevére, majd adja meg a jelszavát és a bejelentkezési szerver címét. Példa:
"registryCredentials": {
"myacr": {
"username": "myacr",
"password": "<your_acr_password>",
"address": "myacr.azurecr.io"
}
}
Adja hozzá vagy cserélje le a következő szövegformázott tartalmat a createOptions értékre az egyes felsorolt rendszerek (edgeHub és *edgeAgent) és egyéni modulok (filtermodule és tempSensor) között. Szükség esetén módosítsa az értékeket:
"createOptions": "{\"HostConfig\":{\"PortBindings\":{\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}],\"443/tcp\":[{\"HostPort\":\"443\"}]}}}"
A konfigurációnak például a filtermodule következőhöz hasonlónak kell lennie:
"filtermodule": {
"version": "1.0",
"type": "docker",
"status": "running",
"restartPolicy": "always",
"settings": {
"image": "myacr.azurecr.io/filtermodule:0.0.1-amd64",
"createOptions": "{\"HostConfig\":{\"PortBindings\":{\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}],\"443/tcp\":[{\"HostPort\":\"443\"}]}}}"
}
Modul felépítése Docker-képként
Nyissa meg a Visual Studio Code integrált terminált a Terminal > New Terminal kiválasztásával.
dotnet publish A parancs használatával hozza létre a linuxos és amd64-architektúrához készült tárolórendszerképet. Módosítsa a könyvtárat a projekt filtermodule könyvtárára, és futtassa a dotnet publish parancsot.
dotnet publish --os linux --arch x64 /t:PublishContainer
A iotedgedev eszközsablon jelenleg a .NET 7.0 verziót célozza meg, amelynek támogatása 2024 májusában megszűnt. Frissítse a projektet a .NET 8.0 -ra (LTS, 2026 novemberétől támogatott) a filtermodule.csproj fájl szerkesztésével, valamint a TargetFramework és PackageReference értékek módosításával. A filtermodule.csproj fájlnak így kell kinéznie:
<Project Sdk="Microsoft.NET.Sdk.Worker">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Azure.Devices.Client" Version="1.42.0" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="8.0.0" />
</ItemGroup>
</Project>
Címkézze fel a Docker-rendszerképet a tárolóregisztrációs adatbázis adataival, verziójával és architektúrájával. Cserélje myacr a saját adatbázis nevére.
docker tag filtermodule myacr.azurecr.io/filtermodule:0.0.1-amd64
Leküldéses modul Docker-rendszerképe
Adja meg a tárolóregisztrációs adatbázis hitelesítő adatait a Dockernek, hogy az le tudja küldeni a tárolólemezképet a tárolóregisztrációs adatbázisban lévő tárolóba.
Jelentkezzen be a Dockerbe az Azure Container Registry (ACR) hitelesítő adataival:
docker login -u <ACR username> -p <ACR password> <ACR login server>Előfordulhat, hogy biztonsági figyelmeztetést kap, amely a használatát
--password-stdinjavasolja. Bár ez az ajánlott eljárás éles forgatókönyvekhez, az oktatóanyag hatókörén kívül esik. Éles tárolóregisztrációs adatbázis hitelesítéséhez használjon szolgáltatási főkulcsot vagy tárház hatókörű jogkivonatokat a rendszergazdai hitelesítő adatok helyett. További információ: A tárolóregisztrációs adatbázishoz való hozzáférés kezelése és a Docker bejelentkezési referenciája .Jelentkezzen be az Azure Container Registry-be. Az
azszükséges a parancs használatához. Ez a parancs a tárolóregisztrációs adatbázisban található felhasználónevet és jelszót kéri a Beállítások > hozzáférési kulcsaiban:az acr login -n <ACR registry name>Tipp.
Ha az oktatóanyag bármely pontján kijelentkezik, a folytatáshoz ismételje meg a Docker és az Azure Container Registry bejelentkezési lépéseit.
Küldje le a modul rendszerképét a helyi beállításjegyzékbe vagy egy tárolóregisztrációs adatbázisba:
docker push <ImageName>Példa:
# Push the Docker image to the local registry docker push localhost:5000/filtermodule:0.0.1-amd64 # Or push the Docker image to an Azure Container Registry. Replace myacr with your Azure Container Registry name. az acr login --name myacr docker push myacr.azurecr.io/filtermodule:0.0.1-amd64
Az üzembehelyezési sablon frissítése
Frissítse az üzembehelyezési sablont deployment.template.json a tárolóregisztrációs adatbázis lemezképének helyével. Ha például egy Azure Container Registry myacr.azurecr.io-t használ, és a rendszerképe filtermodule:0.0.1-amd64, frissítse a filtermodule konfigurációt a következő értékre:
"filtermodule": {
"version": "1.0",
"type": "docker",
"status": "running",
"restartPolicy": "always",
"settings": {
"image": "myacr.azurecr.io/filtermodule:0.0.1-amd64",
"createOptions": "{\"HostConfig\":{\"PortBindings\":{\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}],\"443/tcp\":[{\"HostPort\":\"443\"}]}}}"
}
}
A Visual Studio Code explorerben kattintson a jobb gombbal a deployment.template.json fájlra, és válassza a Build and Push IoT Edge Solution lehetőséget.
A build és feltöltési parancs három műveletet indít el. Először létrehoz egy új mappát a konfiguráció nevű megoldásban, amely tartalmazza a teljes üzembehelyezési jegyzékfájlt, amely az üzembe helyezési sablonban és más megoldásfájlokban található információkból épül fel. Másodszor, a tárolórendszerkép létrehozásához fut docker build a célarchitektúra megfelelő dockerfile-fájlja alapján. Ezután leküldi docker push a rendszerkép-adattárat a tárolóregisztrációs adatbázisba.
Ez a folyamat első alkalommal több percet is igénybe vehet, de a parancsok legközelebbi futtatása gyorsabb lesz.
Nem kötelező: A modul és a rendszerkép frissítése
Ha módosítja a modul kódját, újra kell építenie és le kell küldenie a modul lemezképét a tárolóregisztrációs adatbázisba. Az ebben a szakaszban ismertetett lépésekkel frissítheti a build- és tárolórendszerképet. Ezt a szakaszt kihagyhatja, ha nem módosította a modul kódját.
Nyissa meg a deployment.amd64.json fájlt az újonnan létrehozott konfigurációs mappában. A fájlnév a célarchitektúrát tükrözi, ezért más, ha másik architektúrát választott.
Figyelje meg, hogy a helyőrzőket tartalmazó két paraméter már tartalmazza a megfelelő értékeket. A registryCredentials szakasz az .env fájlból lekért beállításjegyzékbeli felhasználónevet és jelszót tartalmazza. A filtermodule teljes képtárház a module.json fájlból származó névvel, verzióval és architektúracímkével rendelkezik.
Nyissa meg a module.json fájlt a filtermodule mappában.
Módosítsa a modul lemezképének verziószámát. Például növelje a javítás verziószámát
"version": "0.0.2"úgy, mintha egy kis javítást végzett volna a modul kódjában.Tipp.
A modulverziók engedélyezik a verziókövetést, és lehetővé teszik a módosítások tesztelését egy kis eszközcsoporton, mielőtt üzembe helyeznénk a frissítéseket az éles környezetben. Ha nem növeli a modul verzióját a buildelés és a leküldés előtt, akkor felülírja az adattárat a tárolóregisztrációs adatbázisban.
Mentse a módosításokat a module.json fájlba.
Hozza létre és küldje el a frissített képet egy 0.0.2-es verziócímkével. Ha például a rendszerképet a helyi beállításjegyzékhez vagy egy Azure tárolóregisztrációs adatbázishoz szeretné létrehozni és leküldeni, használja a következő parancsokat:
# Build the container image for Linux and amd64 architecture.
dotnet publish --os linux --arch x64
# For local registry:
# Tag the image with version 0.0.2, x64 architecture, and the local registry.
docker tag filtermodule localhost:5000/filtermodule:0.0.2-amd64
# For Azure Container Registry:
# Tag the image with version 0.0.2, x64 architecture, and your container registry information. Replace **myacr** with your own registry name.
docker tag filtermodule myacr.azurecr.io/filtermodule:0.0.2-amd64
Kattintson a jobb gombbal a deployment.template.json fájlra, és válassza újra a Build és Push IoT Edge Solution lehetőséget.
Nyissa meg újra a deployment.amd64.json fájlt. Figyelje meg, hogy a buildelési rendszer nem hoz létre új fájlt a buildelési és leküldéses parancs ismételt futtatásakor. Ehelyett ugyanazokat a fájlfrissítéseket, hogy tükrözzék a változásokat. A szűrőmodul képe most a tároló 0.0.2-es verziójára mutat.
A buildelési és leküldéses parancs további ellenőrzéséhez lépjen a Azure portálra, és keresse meg a tárolóregisztrációs adatbázist. A tárolóregisztrációs adatbázisban válassza az Adattárak lehetőséget, majd a szűrőmodul-t. Ellenőrizze, hogy a kép mindkét verzióját eltolják-e a regisztrációs adatbázisba.
Hibaelhárítás
Ha hibát tapasztal a modulrendszerkép létrehozásakor és leküldésekor, az gyakran a docker-konfigurációval kapcsolatos a fejlesztői gépen. A konfiguráció áttekintéséhez használja az alábbi ellenőrzéseket:
- A
docker loginparancsot a tárolóregisztrációból kimásolt hitelesítő adatokkal futtatta? Ezek a hitelesítő adatok eltérnek a Azure való bejelentkezéshez használt hitelesítő adatoktól. - Helyes a konténertároló? Rendelkezik a megfelelő tárolóregisztrációs adatbázis nevével és a megfelelő modul nevével? Nyissa meg a module.json fájlt a filtermodule mappában az ellenőrzéshez. Az adattár értékének hasonlónak kell lennie a registry name.azurecr.io/filtermodule< értékéhez>.
- Ha más nevet használt, mint a filtermodule a modulhoz, ez a név konzisztens az egész megoldásban?
- A gép ugyanazt a tárolótípust futtatja, mint amelyet ön készít? Ez az oktatóanyag Linux IoT Edge-eszközökhöz készült, ezért a Visual Studio Code oldalsávjában az amd64 vagy az arm32v7 jelzésnek kell lennie, és a Docker Desktopnak Linux-tárolókat kell futtatnia.
Modulok üzembe helyezése az eszközön
Ellenőrizte, hogy vannak-e beépített tárolólemezképek a tárolóregisztrációs adatbázisban, ezért ideje üzembe helyezni őket egy eszközön. Győződjön meg arról, hogy a IoT Edge eszköz működik.
Az IoT Edge Azure CLI set-modules parancs használatával telepítse a modulokat az Azure IoT Hub-ra. Ha például a deployment.template.json fájlban definiált modulokat szeretné telepíteni az my-iot-hub IoT Hub-ra az my-device IoT Edge eszköz számára, használja az alábbi parancsot. Cserélje le a hub-name, device-id és login IoT Hub connection string értékeket a saját értékére.
az iot edge set-modules --hub-name my-iot-hub --device-id my-device --content ./deployment.template.json --login "HostName=my-iot-hub.azure-devices.net;SharedAccessKeyName=iothubowner;SharedAccessKey=<SharedAccessKey>"
Tipp.
Keresse meg az IoT Hub kapcsolati karakterláncát, beleértve a megosztott hozzáférési kulcsot is, az Azure portálon. Lépjen a IoT Hub, és válassza a Biztonsági beállítások > Megosztott hozzáférési szabályzatok > iothubowner lehetőséget.
Az Visual Studio Code explorer Azure IoT Hub szakaszában bontsa ki a Devices elemet az IoT-eszközök listájának megtekintéséhez.
Kattintson a jobb gombbal arra az IoT Edge eszközre, amelyhez telepíteni szeretné, majd válassza a A központi telepítés létrehozása egyetlen eszközhöz.
A fájlkezelőben lépjen a konfigurációs mappába, majd válassza ki a deployment.amd64.json fájlt.
Ne használja a deployment.template.json fájlt, amely nem tartalmazza a tárolóregisztrációs adatbázis hitelesítő adatait vagy a modul rendszerképének értékeit. Ha Linux ARM32-eszközt céloz meg, az üzembehelyezési jegyzék neve deployment.arm32v7.json.
Az eszköz alatt bontsa ki a Modulok elemet az üzembe helyezett és a futó modulok listájának megtekintéséhez. Válassza a frissítés gombot. Látnia kell az eszközön futó új tempSensor és filtermodule modulokat.
A modulok elindítása eltarthat néhány percig. Az IoT Edge futtatókörnyezet megkapja az új üzembehelyezési jegyzékfájlt, letölti a modul képfájljait a tároló futtatókörnyezetéből, majd elindítja az egyes új modulokat.
Üzenetek megtekintése az eszközről
A mintamodul kódja a bemeneti üzenetsoron keresztül fogadja az üzeneteket, és a kimeneti üzenetsoron keresztül küldi el őket. Az üzembehelyezési jegyzék beállítja azokat az útvonalakat, amelyek üzeneteket küldenek filtermoduletempSensor fájlból, majd továbbítják filtermodule üzeneteit a IoT Hub. Az Azure IoT Edge és Azure IoT Hub bővítmények lehetővé teszik az eszközről érkező üzenetek megjelenítését, amint azok belépnek az IoT Hubba.
A Visual Studio Code explorerben válassza ki a figyelni kívánt IoT Edge eszközt, majd válassza a Start Monitorozás beépített eseményvégpont lehetőséget.
A Visual Studio Code kimeneti ablakában megtekintheti, hogy az üzenetek érkeznek az IoT Hubba.
Módosítások megtekintése az eszközön
Az eszközön zajló események megtekintéséhez az ebben a szakaszban található parancsokkal vizsgálja meg az eszközön futó IoT Edge futtatókörnyezetet és modulokat.
Ezek a parancsok a IoT Edge eszközre, nem a fejlesztői gépre vannak. Ha virtuális gépet használ IoT Edge eszközéhez, csatlakozzon hozzá most. Az Azure-ban lépjen a virtuális gép áttekintő lapjára, és válassza a Connect lehetőséget az SSH-kapcsolat eléréséhez.
Tekintse meg az eszközön üzembe helyezett összes modult, és ellenőrizze azok állapotát:
iotedge listNégy modul látható: a két IoT Edge futtatókörnyezeti modul, a tempSensor és a filtermodule. Mind a négyet futóként kell megjelölni.
Egy adott modul naplóinak vizsgálata:
iotedge logs <module name>A modulnevek megkülönböztetik a kis- és nagybetűket.
A tempSensor és a filtermodule naplók megjelenítik az általuk feldolgozott üzeneteket. Az edgeAgent modul elindítja a többi modult, így a naplói információkat tartalmaznak az üzembehelyezési jegyzékről. Ha egy modul nem szerepel a listában, vagy nem fut, ellenőrizze az edgeAgent-naplókban a hibákat. A edgeHub modul kezeli a modulok és a IoT Hub közötti kommunikációt. Ha a modulok futnak, de az üzenetek nem érkeznek meg a IoT Hub, ellenőrizze a edgeHub naplóit a hibákért.
Az erőforrások tisztítása
Ha folytatni szeretné a következő ajánlott cikket, tartsa meg a létrehozott erőforrásokat és konfigurációkat, és használja újra őket. Azt is megteheti, hogy ugyanazt a IoT Edge eszközt használja, mint egy teszteszközt. Ellenkező esetben a díjak elkerülése érdekében törölje a cikkben használt helyi konfigurációt és Azure erőforrásokat.
Azure-erőforrások törlése
Nem vonhatja vissza Azure erőforrások és erőforráscsoportok törlését. Figyeljen, nehogy véletlenül rossz erőforráscsoportot vagy erőforrásokat töröljön. Ha a IoT Hub egy meglévő erőforráscsoporton belül hozta létre, amelyben meg szeretné tartani az erőforrásokat, csak magát a IoT Hub erőforrást törölje, ne az erőforráscsoportot.
Az erőforrások törlése:
- Jelentkezzen be a Azure portálra, majd válassza a Csoportokat.
- Válassza ki a IoT Edge teszterőforrásokat tartalmazó erőforráscsoport nevét.
- Tekintse át az erőforráscsoport által tartalmazott erőforrások listáját. Ha mindet törölni szeretné, válassza az Erőforráscsoport törlése lehetőséget. Ha csak néhányat szeretne törölni, jelölje ki az egyes erőforrásokat, hogy egyenként törölje őket.
Következő lépések
Ebben az oktatóanyagban beállítja a Visual Studio Code a fejlesztői gépen, és üzembe helyezi az első IoT Edge modult olyan kóddal, amely szűri a IoT Edge eszköz által létrehozott nyers adatokat.
Folytassa a következő oktatóanyagokkal, amelyekből megtudhatja, hogyan Azure IoT Edge lehetővé teszi Azure felhőszolgáltatások üzembe helyezését az adatok peremhálózati feldolgozásához és elemzéséhez.