Megosztás a következőn keresztül:


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

A következőkre vonatkozik:IoT Edge 1.5 ellenőrző jel IoT Edge 1.5

Fontos

Az IoT Edge 1.5 LTS a támogatott kiadás. 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 bemutatja, hogyan fejlesztheti és helyezheti üzembe a kódot egy IoT Edge-eszközön. Az Azure IoT Edge-modulok lehetővé teszik az üzleti logikát közvetlenül az IoT Edge-eszközön futtató kód üzembe helyezését. A Kód linuxos eszközökre való üzembe helyezése rövid útmutatójában beállít 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 ismerteti:

  • A fejlesztéshez előnyben részesített Azure IoT Edge fejlesztői eszköz parancssora (CLI).
  • Az Azure IoT Edge-eszközök a Visual Studio Code bővítményhez , 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 az IoT Edge-eszközökkel
  • A projekt létrehozása Docker-tárolóként , és tárolása 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ői 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 rendszer használható IoT Edge-modulok linuxos eszközökhöz való fejlesztéséhez. Ez az oktatóanyag Windows rendszerű 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 az Azure CLI-t.

Egy Azure IoT Edge-eszköz:

Felhőerőforrások:

Ha még nem rendelkezik Azure-fiókkal, első lépésként hozzon létre egy ingyenes fiókot.

Tipp.

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

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. 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 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 tisztában kell lennie a fejlesztőgép és a cél IoT Edge-eszköz közötti különbségekkel, ahol 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 egy modul fejlesztése windowsos számítógépen egy IoT Edge-t futtató Linux-eszköz megcélzására. 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, 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. Használja az előnyben részesített operációs rendszert, amíg a fejlesztői gép Linux-tárolókat futtat. A Visual Studio Code linuxos tárolókkal való fejlesztéshez ajánlott, ezért ez az oktatóanyag használja. 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 (felhőalapú szolgáltatás)
Azure Stream Analytics
Azure Machine Learning
Nyelvek C
C#
Jáva
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 Desktop népszerű választás a fejlesztéshez, mivel erős funkciótámogatással rendelkezik. 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, í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:

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 áll rendelkezésre:

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 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ök és IoT Edge-eszközök láthatók.

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 feltölti ezt a képet egy tároló regiszterbe, amely tárolja és kezeli a képeket. 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.
    SKU 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 a Beállítások menü Hozzáférési kulcsait.

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

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

  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 tartalmazzák az összes fájlt és kódot, amely egy munkamodul üzembe helyezéséhez szükséges az IoT Edge teszteléséhez, vagy kiindulási 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 parancsokkal. Segít az IoT Edge-fejlesztés első lépéseiben az IoT Edge Fejlesztői tároló és az IoT Edge-megoldás állványzatával, amely egy alapértelmezett modult és az összes szükséges konfigurációs fájlt tartalmazza.

  1. Hozzon létre egy könyvtárat a megoldáshoz a kívánt elérési úton. Váltson a iotedgesolution könyvtárra.

    mkdir c:\dev\iotedgesolution
    cd c:\dev\iotedgesolution
    
  2. iotedgedev solution init A 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
    

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-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 is 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 képadattá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 <>. 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>.

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 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 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 a 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 modul lemezképeinek edgeAgent és edgeHub. 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 Beállításokbe 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 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 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 használjon egy Ubuntu virtuális gépet IoT Edge-eszközként, és tartsa meg 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 az ablak alján található oldalsávon a parancsikon ikonját.
  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 mintakódot, amely a szimulált érzékelőadatokat a SimulatedTemperatureSensor modulból veszi át, és irányítja azokat az IoT Hubra. A mintamodul fogadja az üzeneteket, és átadja őket. A folyamat funkciói egy fontos fogalmat mutatnak be az IoT Edge-ben: 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 .NET-hez készült IoT Hub SDK ModuleClient osztályát használja.

  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 using 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 változót temperatureThreshold az ModuleBackgroundService osztá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 elküldje az IoT Hubnak.

    static int temperatureThreshold { get; set; } = 25;
    
  4. Adja hozzá a MessageBody, Machineés Ambient 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 a függvényt ExecuteAsync . 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 létrehozás után a ModuleClient kód beolvassa az temperatureThreshold é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-központból egy úgynevezett input1végponton keresztül.

    Cserélje le a ProcessMessageAsync metó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ódust SetDesiredPropertyUpdateCallbackAsync a 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át ExecuteAsync a 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á a OnDesiredPropertiesUpdate metódust az ModuleBackgroundService osztá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 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 metódust FilterMessages . 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. Emellett hozzáadja a MessageType tulajdonságot az üzenethez, és a következő értékre Alertvan á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;
        }
    }
    
  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 a routes szakaszt a $edgeHub modul ikerpéldányában. Frissítse az sensorTofiltermodule útvonalat úgy, hogy a input1 elemet a inputFromSensor elemre cseréli:

    "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 szakasz alján, a modulesContent$edgeHub modul ikerpéldánya 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. Az értékekről createOptions további információt az IoT Edge-modulok tároló-létrehozási beállításainak konfigurálása című témakörben talál.

Ha egy Azure Container Registry használatával tárolja a modul rendszerképét, adja hozzá a hitelesítő adatait a modulesContent > edgeAgent > settings > registryCredentialsdeployment.template.jsonszakaszá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\"}]}}}"
}

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 projekt filtermodule könyvtárára, é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 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 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.

  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 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, ismételje meg a Docker és az Azure Container Registry bejelentkezési lépéseit a folytatáshoz.

  3. 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 ön az Azure Container Registry myacr.azurecr.io szolgáltatást használja, és a rendszerkép filtermodule:0.0.1-amd64, frissítse a filtermodule konfiguráció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 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.

  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, és 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 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-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özpont nevét, eszközazonosítóját és bejelentkezési adatait az IoT Hub kapcsolati sztringértékei közül a saját értékeire.

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 sztringet, beleértve a megosztott hozzáférési kulcsot is az Azure Portalon. Nyissa meg az IoT Hubot, és válassza a Biztonsági beállítások > megosztott hozzáférési szabályzatok > iothubowner elemét.

  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örnyezet megkapja az új üzembehelyezési jegyzékfájlt, lekéri a modul lemezképeit 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 a tempSensorszűrőmoduljához, majd továbbítják az üzeneteket a filtermodule-ból az IoT Hubra. Az Azure IoT Edge és az Azure IoT Hub bővítmények lehetővé teszik az üzenetek megjelenítését az IoT Hub eszközről való érkezésekor.

  1. A Visual Studio Code Explorerben válassza ki a figyelni kívánt IoT Edge-eszközt, majd válassza a Beépített eseményvégpont monitorozásának indítása lehetőséget.

  2. A Visual Studio Code kimeneti ablakában láthatja, hogy az üzenetek megérkeznek az IoT Hubra.

    Képernyőkép a Visual Studio Code kimeneti ablakáról, amelyen a bejövő eszközről a felhőbe irányuló üzenetek láthatók.

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

Az eszközön zajló események megtekintéséhez használja az ebben a szakaszban található parancsokat az IoT Edge-futtatókörnyezet és az eszközön futó modulok vizsgálatához.

Ezek a parancsok az IoT Edge-eszközhöz tartoznak, nem a fejlesztői 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 a Csatlakozás lehetőséget 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 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. Az edgeHub-modul kezeli a modulok és az IoT Hub közötti kommunikációt. Ha a modulok futnak, de az üzenetek nem érkeznek az IoT Hubra, ellenőrizze az edgeHub-naplókat , hogy vannak-e hibák.

Az erőforrások eltávolí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 ugyanezt az IoT Edge-eszközt használja teszteszközként. 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

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 az IoT Hubot egy meglévő erőforráscsoporton belül hozta létre, amelyben meg szeretné tartani az erőforrásokat, 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á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, az egyes erőforrásokat egyenként is törölheti.

Következő lépések

Ebben az oktatóanyagban beállítja a Visual Studio Code-ot a fejlesztői gépen, és üzembe helyezi az első IoT Edge-modult olyan kóddal, amely szűri az IoT Edge-eszköz által létrehozott nyers adatokat.

Folytassa a következő oktatóanyagokkal, amelyekből megtudhatja, hogy az Azure IoT Edge hogyan teszi lehetővé az Azure-felhőszolgáltatások üzembe helyezését az adatok peremhálózati feldolgozásához és elemzéséhez.