Oktatóanyag: IoT Edge-modulok fejlesztése a Visual Studio Code használatával

A következőkre vonatkozik:IoT Edge 1.5 pipa IoT Edge 1.5 IoT Edge 1.4 pipa IoT Edge 1.4

Fontos

Az IoT Edge 1.5 LTS és az IoT Edge 1.4 LTS támogatott kiadások. Az IoT Edge 1.4 LTS 2024. november 12-én megszűnik. Ha egy korábbi kiadáson dolgozik, olvassa el az IoT Edge frissítése című témakört.

Ez az oktatóanyag végigvezeti a saját kód fejlesztésén és üzembe helyezésén egy IoT Edge-eszközön. Az Azure IoT Edge-modulokkal olyan kódot helyezhet üzembe, amely közvetlenül az IoT Edge-eszközökön implementálja az üzleti logikát. A kód linuxos eszközökre való üzembe helyezése rövid útmutatójában létrehozott egy IoT Edge-eszközt, és üzembe helyezett egy modult az Azure Marketplace-ről.

Ez a cikk két IoT Edge-fejlesztési eszköz lépéseit tartalmazza.

  • Az Azure IoT Edge fejlesztői eszköz parancssora (CLI). Ezt az eszközt előnyben részesítik a fejlesztéshez.
  • Azure IoT Edge-eszközök Visual Studio Code-bővítményhez . A bővítmény karbantartási módban van.

Az eszközverzió 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:

  • Állítsa be a fejlesztőgépet.
  • Új projekt létrehozásához használja az IoT Edge-eszközöket.
  • Hozza létre a projektet Docker-tárolóként, és tárolja egy Azure-tárolóregisztrációs adatbázisban.
  • Telepítse a kódot egy IoT Edge-eszközön.

Az oktatóanyagban létrehozott IoT Edge-modul szűri az eszköz által létrehozott hőmérsékleti adatokat. Csak akkor küld felfelé irányuló üzeneteket, amikor a hőmérséklet egy megadott küszöbérték felett van. Ez a fajta peremhálózati elemzés a felhőbe küldött és ott tárolt adatok mennyiségének csökkentésére használható.

Előfeltételek

Fejlesztői gép:

  • Használja a saját számítógépét vagy egy virtuális gépet.
  • A fejlesztői gépnek támogatnia kell a beágyazott virtualizálást egy tárolómotor futtatásához.
  • A legtöbb olyan operációs rendszer, amely képes tárolómotort futtatni, használható IoT Edge-modulok linuxos eszközökhöz való fejlesztésére. Ez az oktatóanyag Windows rendszerű számítógépet használ, de a macOS vagy Linux rendszeren ismert különbségeket mutat be.
  • A Visual Studio Code telepítése
  • Telepítse az Azure CLI-t.

Egy Azure IoT Edge-eszköz:

Felhőerőforrások:

  • Ingyenes vagy standard szintű IoT Hub az Azure-ban.

Ha nem rendelkezik Azure-előfizetéssel, első lépésként hozzon létre egy ingyenes Azure-fiókot.

Tipp.

Útmutatás a Visual Studio Code vagy a Visual Studio 2022 interaktív hibakereséséhez:

Ez az oktatóanyag bemutatja a Visual Studio Code fejlesztési lépéseit.

Fő fogalmak

Ez az oktatóanyag egy IoT Edge-modul fejlesztését mutatja be. Az 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 Hubba. További információ: Az Azure IoT Edge-modulok ismertetése.

Az IoT Edge-modulok fejlesztésekor fontos megérteni a fejlesztőgép és a cél IoT Edge-eszköz közötti különbséget, amelyben a modul üzembe helyezve van. 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 az, hogy valaki egy modult fejleszt egy Windows-számítógépen, amely egy IoT Edge-et futtató Linux-eszközt kíván megcélozza. 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 Az IoT Edge for Linuxot Windows rendszeren használja, 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 az IoT Edge-et Linux-tárolókkal futtató eszközöket célozza meg. Az előnyben részesített operációs rendszert mindaddig használhatja, amíg a fejlesztőgép Linux-tárolókat futtat. Azt javasoljuk, hogy a Visual Studio Code-ot linuxos tárolókkal fejlessze, ezért ezt használja ez az oktatóanyag. Használhatja a Visual Studiót 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 Visual Studio Code-ban és a Visual Studióban futó Linux-tárolók 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
Azure Stream Analytics
Azure Machine Learning
Nyelvek C
C#
Java
Node.js
Python
C
C#
További információ Azure IoT Edge for Visual Studio Code Azure IoT Edge Tools for Visual Studio 2019
Azure IoT Edge Tools for Visual Studio 2022

Tárolómotor telepítése

Az IoT Edge-modulok tárolókként vannak csomagolva, ezért a fejlesztési gépen Docker-kompatibilis tárolókezelő rendszerre van szükség az összeállításukhoz és kezelésükhöz. A Docker Desktopot a funkciók támogatása és népszerűsége miatt javasoljuk fejlesztésre. A WindowsOn futó Docker Desktop lehetővé teszi a Linux-tárolók és a Windows-tárolók közötti váltást, hogy különböző típusú IoT Edge-eszközökhöz fejleszthesse a modulokat.

A Docker dokumentációját használva telepítse a fejlesztőgépre:

Eszközök beállítása

Telepítse a Python-alapú Azure IoT Edge fejlesztői eszközt az IoT Edge-megoldás létrehozásához. Két lehetőség kínálkozik:

Fontos

A Visual Studio Code-bővítményhez készült Azure IoT Edge-eszközök karbantartási módban használhatók. Az előnyben részesített fejlesztési eszköz a parancssori (CLI) Azure IoT Edge fejlesztői eszköz.

Az IoT Edge-modulok fejlesztéséhez használja a Visual Studio Code IoT-bővítményeit. 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 az IoT Edge-eszközök monitorozását és kezelését. Ebben a szakaszban telepíti a Visual Studio Code-ot és az IoT-bővítményt, majd beállítja az Azure-fiókját az IoT Hub-erőforrások Visual Studio Code-ból való kezeléséhez.

  1. Telepítse az Azure IoT Edge-bővítményt .

  2. Telepítse az Azure IoT Hub bővítményt.

  3. A bővítmények telepítése után nyissa meg a parancskatalógust a Parancskatalógus megtekintése>gombra kattintva.

  4. A parancskatalógusban keresse meg és válassza ki az Azure IoT Hubot: Válassza az IoT Hubot. Kövesse az utasításokat az Azure-előfizetés és az IoT Hub kiválasztásához.

  5. Nyissa meg a Visual Studio Code Explorer szakaszát a bal oldali tevékenységsáv ikonjának kiválasztásával, vagy a Nézetkezelő> kiválasztásával.

  6. 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 Hubhoz társított eszközöket és IoT Edge-eszközöket kell látnia.

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 az Azure IoT Edge - és Az Azure IoT Hub-bővítmények használatával készít egy modult, és létrehoz egy tárolórendszerképet a fájlokból. Ezután ezt a rendszerképet leküldi a rendszerképeit tároló és felügyelő beállításjegyzékbe. Végül üzembe helyezi a rendszerképet a beállításjegyzékből az IoT Edge-eszközön való futtatáshoz.

Fontos

Az Azure IoT Edge Visual Studio Code bővítmény karbantartási módban van.

Bármilyen Docker-kompatibilis beállításjegyzéket használhat a tárolólemezképek tárolásához. Két népszerű Docker-beállításjegyzék-szolgáltatás az Azure Container Registry és a Docker Hub. Ez az oktatóanyag az Azure Container Registryt használja.

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 az Azure-ban:

  1. Az Azure Portalon válassza az Erőforrás létrehozása>Tárolók>Container Registry elemet.

  2. 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 az IoT Edge gyorsútmutatói és oktatóanyagai során létrehozott összes teszterőforráshoz. Például: IoTEdgeResources.
    Beállításjegyzék neve Egyedi nevet adjon meg.
    Hely Válassza ki az Önhöz legközelebb eső helyet.
    Termékváltozat Válassza az Alapszintű lehetőséget.
  3. Válassza a Véleményezés + létrehozás, majd a Létrehozás lehetőséget.

  4. A megnyitáshoz válassza ki az új tárolóregisztrációs adatbázist az Azure Portal KezdőlapJának Erőforrások szakaszából.

  5. A tárolóregisztrációs adatbázis bal oldali ablaktábláján válassza az Access-kulcsokat a Gépház alatt található menüből.

    Képernyőkép a Hozzáférési kulcsok menü helyéről.

  6. Engedélyezze Rendszergazda 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.

  7. 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

Az Azure IoT Edge bővítmény projektsablonokat kínál a Visual Studio Code összes támogatott IoT Edge-modulnyelvéhez. Ezek a sablonok rendelkeznek azokkal a fájlokkal és kódokkal, amelyekre egy munkamodul üzembe helyezéséhez szükség van az 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 fejlesztői eszköz leegyszerűsíti az Azure IoT Edge fejlesztését a környezeti változók által hajtott parancsokra. Az IoT Edge-fejlesztés első lépéseit az IoT Edge Fejlesztői tároló és az IoT Edge-megoldás állványzata biztosítja, amely egy alapértelmezett modullal és az összes szükséges konfigurációs fájllal rendelkezik.

  1. Hozzon létre egy könyvtárat a megoldáshoz a választott elérési úttal. Váltson át a iotedgesolution címtárra.

    mkdir c:\dev\iotedgesolution
    cd c:\dev\iotedgesolution
    
  2. Az iotedgedev solution init paranccsal hozzon létre egy megoldást, és állítsa be az Azure IoT Hubot a választott fejlesztési nyelven.

    iotedgedev solution init --template csharp
    

Az iotedgedev megoldás init szkriptje több lépés elvégzését kéri, például:

  • Hitelesítés az Azure-ban
  • 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-ot és az 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 tartalmazhat.

  1. Válassza a Parancskatalógus megtekintése>lehetőséget.
  2. A parancskatalógusban adja meg és futtassa az Azure IoT Edge: New IoT Edge Solution parancsot.
  3. 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.
  4. Adja meg a megoldás nevét.
  5. Válassza ki az előnyben részesített fejlesztési nyelvhez tartozó modulsablont, hogy az legyen a megoldás első modulja.
  6. Adja meg a modul nevét. Válasszon egy egyedi nevet a tárolóregisztrációs adatbázisban.
  7. Adja meg a modul rendszerképtárának nevét. A Visual Studio Code automatikusan feltölti a modul nevét a localhost:5000/<your modulnévvel>. Cserélje le a saját beállításjegyzék-adataira. Ha helyi Docker-beállításjegyzéket használ a teszteléshez, használja a localhostot . Ha az Azure Container Registryt használja, használja a bejelentkezési 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 <beállításjegyzék neve.azurecr.io>. Csak a localhost:5000 sztringrészt cserélje le úgy, hogy a végeredmény úgy nézzen ki, mint <a beállításjegyzék neve.azurecr.io/<> your modul neve.>

A Visual Studio Code felveszi 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 a megoldásban találhatók:

  • A .vscode mappa launch.json konfigurációs fájlt tartalmaz.

  • Egy modulmappa , amely minden modulhoz almappákkal rendelkezik. Az egyes modulok almappáiban a module.json fájl szabályozza a modulok felépítését és üzembe helyezését.

  • Egy .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 deployment.template.json nevű modultelepítési fájl, és deployment.debug.template.json listázni az eszközön üzembe helyezendő modulokat. Alapértelmezés szerint a lista tartalmazza az IoT Edge rendszermoduljait (edgeAgent és edgeHub) és a mintamodulokat, például:

    Feljegyzés

    A telepített modulok pontos száma a választott nyelvtől függhet.

Az 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.

  1. A Visual Studio Code-ban nyissa meg deployment.template.json üzembehelyezési jegyzékfájlt. Az üzembehelyezési jegyzék egy JSON-dokumentum, amely leírja a célzott IoT Edge-eszközön konfigurálni kívánt modulokat.

  2. Módosítsa a futtatókörnyezet verzióját a rendszer futtatókörnyezeti moduljának lemezképeinek edgeAgent és edgeHub esetében. Ha például az 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 az 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óregisztrációs adatbázis hitelesítő adatait az Azure-ból, és feltölteni ő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:

  1. Ha az 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 Gépház> Access-kulcsok menüjéből szerezheti be az Azure Portalon.

  2. Nyissa meg az .env fájlt a modulmegoldásban.

  3. Adja hozzá az Azure-tárolóregisztrációs adatbázisból másolt felhasználónevet és jelszót . Példa:

    CONTAINER_REGISTRY_SERVER="myacr.azurecr.io"
    CONTAINER_REGISTRY_USERNAME="myacr"
    CONTAINER_REGISTRY_PASSWORD="<registry_password>"
    
  4. Mentse a módosításokat az .env fájlba.

Feljegyzés

Ez az oktatóanyag rendszergazdai bejelentkezési hitelesítő adatokat használ az Azure Container Registryhez, amelyek kényelmesek a fejlesztési és tesztelési forgatókönyvekhez. Ha készen áll az éles forgatókönyvekre, javasoljuk a minimális jogosultságú hitelesítési lehetőséget, például a szolgáltatásnevek vagy az adattár 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

Ki kell választania 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álunk IoT Edge-eszközként, és megtartjuk az alapértelmezett amd64-et.

Ha módosítania kell a megoldás célarchitektúráját, kövesse az alábbi lépéseket.

  1. Nyissa meg a parancskatalógust, és keresse meg az Azure IoT Edge: Set Default Target Platform for Edge Solution (Alapértelmezett célplatform beállítása edge-megoldáshoz) parancskatalógust, vagy válassza a parancsikon ikont az ablak alján található oldalsávon.

  2. 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 egy mintakódot, amely a szimulált érzékelő adatait veszi át a SimulatedTemperatureSensor modulból, és átirányítja azokat az IoT Hubra. A mintamodul üzeneteket fogad, majd továbbadja őket. A folyamat funkciói az IoT Edge-ben egy fontos fogalmat mutatnak be, így kommunikálnak egymással a modulok.

Minden modulhoz több bemeneti és kimeneti üzenetsor is deklarálható a kódban. Az eszközön futó IoT Edge Hub egy modul kimenetéből egy vagy több modul bemenetébe 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 modulban 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-hez készült IoT Hub SDK-ból.

  1. A Visual Studio Code Explorerben nyissa meg a modulok>szűrőmodulját>ModuleBackgroundService.cs.

  2. A filtermodule névtér előtt adjon hozzá három utasí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 JsonConvert
    
  3. Adja hozzá a temperatureThreshold változót a ModuleBackgroundService osztályhoz. Ez a változó azt az értéket állítja be, amelyet a mért hőmérsékletnek túl kell lépnie ahhoz, hogy a rendszer elküldje az adatokat az IoT Hubnak.

    static int temperatureThreshold { get; set; } = 25;
    
  4. Adja hozzá a MessageBody, a Gép és a Környezeti osztá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;}
    }
    
  5. Keresse meg az ExecuteAsync függvényt. Ez a függvény létrehoz és konfigurál egy ModuleClient-objektumot , amely lehetővé teszi a modul számára, hogy a helyi Azure IoT Edge-futtatókörnyezethez csatlakozva üzeneteket küldjön és fogadjon. A ModuleClient objektum létrehozása után a kód beolvassa a temperatureThreshold értéket a modul ikerdokumentumának kívánt tulajdonságaiból. A kód regisztrál egy visszahívást, hogy üzeneteket fogadjon egy IoT Edge-központból egy input1 nevű végponton keresztül.

    Cserélje le a ProcessMessageAsync metódus hívását egy újra, amely frissíti a végpont nevét és a bemenet érkezésekor hívott metódust. Emellett adjon hozzá egy SetDesiredPropertyUpdateCallbackAsync metódust a kívánt tulajdonságok frissítéséhez. A módosítás végrehajtásához cserélje le az ExecuteAsync metódus utolsó soráta 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);
    
  6. Adja hozzá az onDesiredPropertiesUpdate metódust a ModuleBackgroundService osztályhoz. Ez a metódus a kívánt tulajdonságok frissítéseit fogadja a modul ikerdokumentumától, és ennek megfelelően frissíti a temperatureThreshold változót. Minden modul rendelkezik saját ikerdokumentummal, amelyekkel 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;
    }
    
  7. Adja hozzá a FilterMessages metódust . Ezt a metódust akkor hívja meg a rendszer, amikor a modul üzenetet kap az IoT Edge-központtól. Kiszűri a modul ikerdokumentumán keresztül beállított hőmérsékleti határérték alatti hőmérsékleteket jelentő üzeneteket. Ezenkívül a MessageType tulajdonságot is hozzáadja az üzenethez, amelynek értéke Alert (Figyelmeztetés).

    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;
        }
    }
    
  8. Mentse a ModuleBackgroundService.cs fájlt.

  9. A Visual Studio Code Explorerben nyissa meg a deployment.template.json fájlt az IoT Edge-megoldás munkaterületén.

  10. 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 az útvonalak szakaszt a $edgeHub modul ikerpéldányában. Frissítse a sensorTofiltermodule útvonalat a következőre inputFromSensorcserélveinput1:

    "sensorTofiltermodule": "FROM /messages/modules/tempSensor/outputs/temperatureOutput INTO BrokeredEndpoint(\"/modules/filtermodule/inputs/inputFromSensor\")"
    
  11. Adja hozzá a filtermodule modul ikerpéldányát az üzembehelyezési jegyzékhez. Szúrja be a következő JSON-tartalmat a modulesContent szakasz alján, az $edgeHub modul ikerdokumentuma után:

       "filtermodule": {
           "properties.desired":{
               "TemperatureThreshold":25
           }
       }
    
  12. Mentse a deployment.template.json fájlt.

A megoldás létrehozása és leküldé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-ban nyissa meg a deployment.template.json üzembehelyezési jegyzékfájlt. Az üzembe helyezési jegyzék ismerteti a célzott IoT Edge-eszközön konfigurálni kívánt modulokat. Az üzembe helyezés előtt frissítenie kell az Azure Container Registry hitelesítő adatait és a modul lemezképeit a megfelelő createOptions értékekkel. A createOption-értékekkel kapcsolatos további információkért tekintse meg az IoT Edge-modulok tároló-létrehozási beállításainak konfigurálását ismertető témakört.

Ha egy Azure Container Registryt használ a modul lemezképének tárolásához, adja hozzá a hitelesítő adatait a modulesContent>edgeAgent>settings>registryCredentials szakaszához deployment.template.json. Cserélje le a myacr-et a saját beállításjegyzék-nevére, és adja meg a jelszavát és a bejelentkezési kiszolgáló 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ő sztringezett tartalmat a felsorolt rendszerek (edgeHub és edgeAgent) és egyéni modulok (filtermodule és tempSensor) createOptions értékére. 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 szűrőmodul konfigurációjának például a 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\"}]}}}"
}

Build modul Docker-rendszerképe

Nyissa meg a Visual Studio Code integrált terminálját az Új terminál terminál>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 filtermodule könyvtárra a projektben, és futtassa a dotnet publish parancsot.

dotnet publish --os linux --arch x64 /t:PublishContainer

Az iotedgedev eszközsablon jelenleg a .NET 7.0-t célozza meg. Ha a .NET egy másik verzióját szeretné megcélozni, szerkesztheti a filtermodule.csproj fájlt, és módosíthatja a TargetFramework és a PackageReference értékeket. Ha például a .NET 8.0-t szeretné megcélozni, a filtermodule.csproj fájlnak a következőképpen 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 le a myacr-et a saját beállításjegyzék-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.

  1. 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. További információkért tekintse meg a Docker bejelentkezési referenciát.

  2. Jelentkezzen be az Azure Container Registrybe. A parancs használatához telepítenie kell az Azure CLI-taz. Ez a parancs a Gépház Access kulcsokban található tárolóregisztrációs adatbázisban >található felhasználónevet és jelszót kéri.

    az acr login -n <ACR registry name>
    

    Tipp.

    Ha az oktatóanyag bármely pontján kijelentkezik, ismételje meg a Docker és az Azure Container Registry bejelentkezési lépéseit a folytatáshoz.

  3. Küldje el 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 Azure Container Registry-myacr.azurecr.io használ, és a rendszerkép filtermodule:0.0.1-amd64, frissítse a filtermodule konfigurációját a következőre:

"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 (IoT Edge-megoldás létrehozása és leküldése) lehetőséget.

A buildelési és leküldéses 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 beállításjegyzék hitelesítő adatai szakaszában lekérte a beállításjegyzék felhasználónevét és jelszavát az .env fájlból. A filtermodule a teljes képtárat a module.json fájlból származó névvel, verzióval és architektúracímkével rendelkezik.

  1. Nyissa meg a module.json fájlt a filtermodule mappában.

  2. 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.

  3. 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 ismét a jobb gombbal a deployment.template.json fájlra, majd válassza ismét a Build and Push IoT Edge Solution (IoT Edge-megoldás létrehozása és leküldése) 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 az Azure Portalra , é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 szűrje a szűrőmodult. Ellenőrizze, hogy a rendszerkép mindkét verziója le van-e küldve a beállításjegyzékbe.

Képernyőkép arról, hogy hol tekintheti meg mindkét rendszerképverziót a tárolóregisztrációs adatbázisban.

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:

  • Futtatta a parancsot a docker login tárolóregisztrációs adatbázisból kimásolt hitelesítő adatokkal? Ezek a hitelesítő adatok eltérnek az Azure-ba való bejelentkezéshez használt hitelesítő adatoktól.
  • Helyes a tárolóadattár? 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 úgy kell kinéznie, mint a beállításjegyzék neve.azurecr.io/filtermodule>.<
  • 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-nak amd64-et vagy arm32v7-et kell mondania az oldalsávon, a Docker Desktopnak pedig 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 az IoT Edge-eszköz működik.

Az IoT Edge Azure CLI set-modules parancsával üzembe helyezheti a modulokat az Azure IoT Hubon. Ha például a deployment.template.json fájlban definiált modulokat az IoT Hub my-iot-hubra szeretné telepíteni az eszközöm IoT Edge-eszközéhez, használja az alábbi parancsot. Cserélje le a központnév, az eszközazonosító és a bejelentkezési IoT Hub kapcsolati sztring értékeit a sajátjaira.

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.

Az IoT Hub kapcsolati sztring az Azure Portal megosztott hozzáférési kulcsával együtt is megtalálható. Nyissa meg az IoT Hub >biztonsági beállításait>, és nyissa meg az iothubowner megosztott hozzáférési szabályzatait>.

  1. A Visual Studio Code Explorer Azure IoT Hub szakaszában bontsa ki az Eszközök elemet az IoT-eszközök listájának megtekintéséhez.

  2. Kattintson a jobb gombbal arra az IoT Edge-eszközre, amelybe telepíteni szeretné, majd válassza az Üzembe helyezés létrehozása önálló eszközhöz lehetőséget.

  3. 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.

  4. 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örnyezetnek meg kell kapnia az új üzembehelyezési jegyzékfájlt, le kell húznia a modul lemezképeit a tároló futtatókörnyezetéből, majd el kell indítania minden új modult.

Ü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 továbbítja őket. Az üzembehelyezési jegyzék deklarált útvonalakat, amelyek üzeneteket továbbítottak a tempSensorból való szűréshez, majd továbbította az üzeneteket a filtermodule-bólaz IoT Hubra. Az Azure IoT Edge és az Azure IoT Hub bővítmények lehetővé teszik, hogy üzeneteket láthasson, amikor az egyes eszközökről érkeznek az IoT Hubra.

  1. A Visual Studio Code Explorerben kattintson a jobb gombbal a figyelni kívánt IoT Edge-eszközre, majd válassza a Beépített eseményvégpont figyelésének indítása parancsot.

  2. A Visual Studio Code kimeneti ablakában megtekintheti az IoT Hubra érkező üzeneteket.

    Képernyőkép arról, hogy hol tekintheti meg a bejövő eszközt a felhőbeli üzenetekbe.

Módosítások megtekintése az eszközön

Ha látni szeretné, hogy mi történik az eszközön, az ebben a szakaszban található parancsokkal vizsgálja meg az IoT Edge-futtatókörnyezetet és az eszközön futó modulokat.

Az ebben a szakaszban található parancsok az IoT Edge-eszközhöz tartoznak, nem a fejlesztőgéphez. Ha virtuális gépet használ az IoT Edge-eszközhöz, csatlakozzon hozzá most. Az Azure-ban nyissa meg a virtuális gép áttekintő oldalát, és válassza ki a Csatlakozás a biztonságos rendszerhéj-kapcsolat eléréséhez.

  • Tekintse meg az eszközön üzembe helyezett összes modult, és ellenőrizze azok állapotát:

    iotedge list
    

    Négy modulnak kell megjelennie: a két IoT Edge-futtatókörnyezeti modul, a tempSensor és a filtermodule. A listában mind a négynek futnia kell.

  • Egy adott modul naplóinak vizsgálata:

    iotedge logs <module name>
    

    Az IoT Edge-modulok megkülönböztetik a kis- és nagybetűket.

    A tempSensor és a filtermodule naplóinak meg kell jeleníteniük a feldolgozandó üzeneteket. Az edgeAgent modul felelős a többi modul elindításáért, így a naplói rendelkeznek az üzembehelyezési jegyzék implementálásával kapcsolatos információkkal. Ha úgy találja, hogy egy modul nem szerepel a listán, vagy nem fut, az edgeAgent-naplókban valószínűleg vannak hibák. Az edgeHub-modul felel a modulok és az IoT Hub közötti kommunikációért. Ha a modulok már futnak, de az üzenetek nem érkeznek meg az IoT Hubra, az edgeHub-naplókban valószínűleg megjelennek a hibák.

Az erőforrások eltávolítása

Ha azt tervezi, hogy a következő ajánlott cikkel folytatja, megtarthatja és újból felhasználhatja a létrehozott erőforrásokat és konfigurációkat. Azt is megteheti, hogy ugyanezt az IoT Edge-eszközt használja teszteszközként.

Ellenkező esetben törölheti a cikkben használt helyi konfigurációkat és Azure-erőforrásokat a díjak elkerülése érdekében.

Azure-erőforrások törlése

Az Azure-erőforrások és -erőforráscsoportok törlése visszafordíthatatlan. Figyeljen, nehogy véletlenül rossz erőforráscsoportot vagy erőforrásokat töröljön. Ha egy meglévő erőforráscsoporton belül hozta létre az IoT Hubot, amelynek erőforrásait meg szeretné tartani, csak magát az IoT Hub-erőforrást törölje, nem pedig az erőforráscsoportot.

Az erőforrások törlése:

  1. Jelentkezzen be az Azure Portalra, és válassza az Erőforráscsoportok elemet.

  2. Válassza ki az IoT Edge teszterőforrásokat tartalmazó erőforráscsoport nevét.

  3. Tekintse át az erőforráscsoportban található 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 bizonyos elemeket szeretne törölni, az egyes erőforrásokra kattintva külön törölheti őket.

Következő lépések

Ebben az oktatóanyagban beállítja a Visual Studio Code-ot a fejlesztői gépen, és üzembe helyezte az első IoT Edge-modult, amely kódot tartalmaz az IoT Edge-eszköz által létrehozott nyers adatok szűréséhez.

Folytathatja a következő oktatóanyagokat, amelyekből megtudhatja, hogyan segíthet az Azure IoT Edge az Azure-felhőszolgáltatások üzembe helyezésében az adatok peremhálózati feldolgozásához és elemzéséhez.