Руководство по разработке модуля IoT Edge с кодом C# и его развертывание на имитированном устройствеTutorial: Develop a C# IoT Edge module and deploy to your simulated device

Вы можете использовать модули Azure IoT Edge для развертывания кода, который реализует бизнес-логику непосредственно на устройствах IoT Edge.You can use Azure IoT Edge modules to deploy code that implements your business logic directly to your IoT Edge devices. В этом руководстве рассматриваются создание и развертывание модуля IoT Edge, который фильтрует данные датчика.This tutorial walks you through creating and deploying an IoT Edge module that filters sensor data. Вы будете использовать имитированное устройство IoT Edge, созданное с помощью процедуры развертывания Azure IoT Edge на имитированном устройстве, описанной в кратких руководствах для Windows или Linux.You'll use the simulated IoT Edge device that you created in the Deploy Azure IoT Edge on a simulated device in Windows or Linux quickstarts. Из этого руководства вы узнаете, как выполнять следующие задачи:In this tutorial, you learn how to:

  • Создать модуль IoT Edge на основе пакета SDK .NET Core 2.1 с помощью Visual Studio Code.Use Visual Studio Code to create an IoT Edge module that's based on the .NET Core 2.1 SDK.
  • Использовать Visual Studio Code и Docker для создания образа Docker и его публикации в реестре.Use Visual Studio Code and Docker to create a Docker image and publish it to your registry.
  • Развертывать модуль на устройстве IoT Edge.Deploy the module to your IoT Edge device.
  • Просматривать сформированные данные.View generated data.

Модуль IoT Edge, создаваемый в этом руководстве, фильтрует данные температуры, которые создаются устройством.The IoT Edge module that you create in this tutorial filters the temperature data that's generated by your device. Оно отправляет сообщения, только если температура превышает заданное пороговое значение.It only sends messages upstream if the temperature is above a specified threshold. Такой тип пограничного анализа удобен для сокращения объема данных, передаваемых в облако и сохраняемых в нем.This type of analysis at the edge is useful for reducing the amount of data that's communicated to and stored in the cloud.

Если у вас еще нет подписки Azure, создайте бесплатную учетную запись Azure, прежде чем начинать работу.If you don't have an Azure subscription, create a free account before you begin.

Предварительные требованияPrerequisites

Устройство Azure IoT Edge.An Azure IoT Edge device:

  • В качестве устройства Azure IoT Edge можно использовать компьютер, на котором ведется разработка, или виртуальную машину. Для этого выполните действия, описанные в кратком руководстве для устройств Linux или Windows.You can use your development machine or a virtual machine as an Edge device by following the steps in the quickstart for Linux or Windows devices.

Облачные ресурсы.Cloud resources:

Ресурсы разработки.Development resources:

Создание реестра контейнеровCreate a container registry

В этом руководстве описано, как создать модуль с помощью расширения Azure IoT Edge для Visual Studio Code и образ контейнера из файлов.In this tutorial, you use the Azure IoT Edge extension for Visual Studio Code to build a module and create a container image from the files. Затем вы отправите этот образ в реестр, содержащий ваши образы и управляющий ими.Then you push this image to a registry that stores and manages your images. Наконец, вы развернете свой образ из реестра для выполнения на устройстве IoT Edge.Finally, you deploy your image from your registry to run on your IoT Edge device.

Для хранения образов контейнеров можно использовать любые реестры, совместимые с Docker.You can use any Docker-compatible registry to hold your container images. Две популярные службы реестров Docker — Реестр контейнеров Azure и Docker Hub.Two popular Docker registry services are Azure Container Registry and Docker Hub. В этом руководстве используется реестр контейнеров Azure.This tutorial uses Azure Container Registry.

Если вы еще не создали реестр контейнеров, выполните эти действия, чтобы создать новый реестр в Azure:If you don't already have a container registry, follow these steps to create a new one in Azure:

  1. На портале Azure выберите Создать ресурс > Контейнеры > Реестр контейнеров.In the Azure portal, select Create a resource > Containers > Container Registry.

  2. Предоставьте следующие значения для создания реестра контейнеров:Provide the following values to create your container registry:

    ПолеField ЗначениеValue
    Имя реестраRegistry name Укажите уникальное имя.Provide a unique name.
    ПодпискаSubscription Из раскрывающегося списка выберите подписку.Select a subscription from the drop-down list.
    Группа ресурсовResource group Мы рекомендуем использовать одну группу ресурсов для всех тестовых ресурсов, которые вы создаете во время работы с краткими руководствами по IoT Edge.We recommend that you use the same resource group for all of the test resources that you create during the IoT Edge quickstarts and tutorials. Например, IoTEdgeResources.For example, IoTEdgeResources.
    РасположениеLocation Выберите расположение рядом с вами.Choose a location close to you.
    Пользователь-администраторAdmin user Установите значение Включить.Set to Enable.
    SKUSKU Выберите Базовый.Select Basic.
  3. Нажмите кнопку Создать.Select Create.

  4. После создания реестра контейнеров перейдите к нему, а затем выберите Ключи доступа.After your container registry is created, browse to it, and then select Access keys.

  5. Скопируйте значения Сервер входа, Имя пользователя и Пароль.Copy the values for Login server, Username, and Password. Они потребуются позже в этом руководстве для предоставления доступа к реестру контейнеров.You use these values later in the tutorial to provide access to the container registry.

Создание проекта модуля IoT EdgeCreate an IoT Edge module project

На следующих этапах показано, как создать проект модуля IoT Edge на основе .NET Сore 2.0 с использованием Visual Studio Code и расширения Azure IoT Edge.The following steps create an IoT Edge module project that's based on the .NET Core 2.0 SDK by using Visual Studio Code and the Azure IoT Edge extension.

Создание решенияCreate a new solution

Создайте шаблон решения C#, который можно настроить с помощью собственного кода.Create a C# solution template that you can customize with your own code.

  1. В Visual Studio Code выберите Представление > Палитра команд для открытия палитры команд VS Code.In Visual Studio Code, select View > Command Palette to open the VS Code command palette.

  2. В палитре команд введите и выполните команду Azure: Sign in (Azure: Вход) и следуйте инструкциям, чтобы войти в свою учетную запись Azure.In the command palette, enter and run the command Azure: Sign in and follow the instructions to sign in your Azure account. Если вход был выполнен, то этот шаг можно пропустить.If you're already signed in, you can skip this step.

  3. В палитре команд введите и выполните команду Azure IoT Edge: New IoT Edge solution.In the command palette, enter and run the command Azure IoT Edge: New IoT Edge solution. Следуйте инструкциям на экране в палитре команд для создания решения.Follow the prompts in the command palette to create your solution.

    ПолеField ЗначениеValue
    Выбор папкиSelect folder Выберите расположение на компьютере разработчика для VS Code, чтобы создать файлы решения.Choose the location on your development machine for VS Code to create the solution files.
    Введите название решения.Provide a solution name Введите описательное имя решения или примите имя по умолчанию EdgeSolution.Enter a descriptive name for your solution or accept the default EdgeSolution.
    Выбор шаблона модуляSelect module template Выберите модуль C#.Choose C# Module.
    Указание имени модуляProvide a module name Присвойте модулю имя CSharpModule.Name your module CSharpModule.
    Указание репозитория изображений Docker для модуляProvide Docker image repository for the module Репозиторий изображений включает в себя имя реестра контейнеров и имя образа контейнера.An image repository includes the name of your container registry and the name of your container image. Образ контейнера предварительно заполняется на последнем шаге.Your container image is prepopulated from the last step. Замените localhost:5000 на значение сервера входа из реестра контейнеров Azure.Replace localhost:5000 with the login server value from your Azure container registry. Вы можете извлечь сервер входа на странице "Обзор" реестра контейнеров на портале Azure.You can retrieve the login server from the Overview page of your container registry in the Azure portal. Окончательная строка выглядит так: <registry name>.azurecr.io/csharpmodule.The final string looks like <registry name>.azurecr.io/csharpmodule.

    Выбор репозитория образа Docker

Окно VS Code загружает рабочую область решения IoT Edge.The VS Code window loads your IoT Edge solution workspace. Рабочая область решения содержит пять компонентов верхнего уровня.The solution workspace contains five top-level components. Папка modules содержит код C# для модуля, а также файлы Dockerfile для создания модуля в качестве образа контейнера.The modules folder contains the C# code for your module as well as Dockerfiles for building your module as a container image. Файл .env хранит учетные данные реестра контейнеров.The .env file stores your container registry credentials. Файл deployment.template.json содержит сведения, которые среда выполнения IoT Edge использует для развертывания модулей на устройстве.The deployment.template.json file contains the information that the IoT Edge runtime uses to deploy modules on a device. Файл deployment.debug.template.json содержит отладочные версии модулей.And deployment.debug.template.json file containers the debug version of modules. Работая с этим руководством, вы не будете изменять папку .vscode или файл .gitignore.You won't edit the .vscode folder or .gitignore file in this tutorial.

Если вы не указывали реестр контейнеров при создании решения, но приняли значение по умолчанию localhost:5000, у вас не будет файла .env.If you didn't specify a container registry when creating your solution, but accepted the default localhost:5000 value, you won't have a .env file.

Добавление учетных данных реестраAdd your registry credentials

Файл среды хранит учетные данные для реестра контейнеров и совместно использует их со средой выполнения IoT Edge.The environment file stores the credentials for your container registry and shares them with the IoT Edge runtime. Среде выполнения нужны эти учетные данные, чтобы извлечь частный образ на устройство IoT Edge.The runtime needs these credentials to pull your private images onto the IoT Edge device.

  1. Откройте в обозревателе VS Code файл с расширением ENV.In the VS Code explorer, open the .env file.
  2. Обновите поля с именем пользователя и паролем, скопированные из своего реестра контейнера Azure.Update the fields with the username and password values that you copied from your Azure container registry.
  3. Сохраните этот файл.Save this file.

Обновление модуля с помощью пользовательского кодаUpdate the module with custom code

  1. В обозревателе VS Code выберите modules > NodeModule > app.js.In the VS Code explorer, open modules > CSharpModule > Program.cs.

  2. В верхней части пространства имен CSharpModule добавьте три инструкции для типов, которые будут использоваться позже.At the top of the CSharpModule namespace, add three using statements for types that are used later:

    using System.Collections.Generic;     // For KeyValuePair<>
    using Microsoft.Azure.Devices.Shared; // For TwinCollection
    using Newtonsoft.Json;                // For JsonConvert
    
  3. Добавьте переменную temperatureThreshold к классу Program.Add the temperatureThreshold variable to the Program class. Эта переменная устанавливает значение, которое должно быть измеренной температурой, чтобы данные были отправлены в Центр Интернета вещей.This variable sets the value that the measured temperature must exceed for the data to be sent to the IoT hub.

    static int temperatureThreshold { get; set; } = 25;
    
  4. Добавьте MessageBody, Machine и Ambient к классу Program.Add the MessageBody, Machine, and Ambient classes to the Program class. Эти классы определяют ожидаемую схему текста входящего сообщения.These classes define the expected schema for the body of incoming messages.

    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. В методе Init код создает и настраивает объект ModuleClient.In the Init method, the code creates and configures a ModuleClient object. Этот объект позволяет модулю подключаться к локальной среде выполнения Azure IoT Edge для отправки и получения сообщений.This object allows the module to connect to the local Azure IoT Edge runtime to send and receive messages. Строка подключения, используемая в методе Init, предоставляется модулю средой выполнения IoT Edge.The connection string that's used in the Init method is supplied to the module by the IoT Edge runtime. После создания ModuleClient код считывает значение temperatureThreshold из требуемых свойств двойника модуля.After creating the ModuleClient, the code reads the temperatureThreshold value from the module twin's desired properties. Этот код регистрирует обратный вызов для получения сообщений из концентратора IoT Edge через input1 конечной точки.The code registers a callback to receive messages from an IoT Edge hub via the input1 endpoint. Замените метод SetInputMessageHandlerAsync новым и добавьте метод SetDesiredPropertyUpdateCallbackAsync для обновления нужного свойства.Replace the SetInputMessageHandlerAsync method with a new one, and add a SetDesiredPropertyUpdateCallbackAsync method for updates to the desired properties. Чтобы внести это изменение, замените последнюю строку метода Init следующим кодом:To make this change, replace the last line of the Init method with the following code:

    // Register a callback for messages that are received by the module.
    // await ioTHubModuleClient.SetInputMessageHandlerAsync("input1", PipeMessage, iotHubModuleClient);
    
    // Read the TemperatureThreshold value from the module twin's desired properties
    var moduleTwin = await ioTHubModuleClient.GetTwinAsync();
    var moduleTwinCollection = moduleTwin.Properties.Desired;
    try {
        temperatureThreshold = moduleTwinCollection["TemperatureThreshold"];
    } catch(ArgumentOutOfRangeException e) {
        Console.WriteLine($"Property TemperatureThreshold not exist: {e.Message}"); 
    }
    
    // Attach a callback for updates to the module twin's desired properties.
    await ioTHubModuleClient.SetDesiredPropertyUpdateCallbackAsync(OnDesiredPropertiesUpdate, null);
    
    // Register a callback for messages that are received by the module.
    await ioTHubModuleClient.SetInputMessageHandlerAsync("input1", FilterMessages, ioTHubModuleClient);
    
  6. Добавьте метод onDesiredPropertiesUpdate к классу Program.Add the onDesiredPropertiesUpdate method to the Program class. Этот метод принимает изменения требуемых свойств из двойника модуля и соответствующим образом изменяет переменную temperatureThreshold.This method receives updates on the desired properties from the module twin, and updates the temperatureThreshold variable to match. У каждого модуля есть собственный модуль-двойник, что позволяет настроить код, выполняемый в модуле, непосредственно из облака.All modules have their own module twin, which lets you configure the code that's running inside a module directly from the cloud.

    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. Замените метод PipeMessage методом FilterMessages.Replace the PipeMessage method with the FilterMessages method. Этот метод вызывается каждый раз, когда модуль получает сообщение из центра IoT Edge.This method is called whenever the module receives a message from the IoT Edge hub. Он отфильтровывает сообщения о температуре ниже порогового значения, настроенного с помощью двойника модуля.It filters out messages that report temperatures below the temperature threshold set via the module twin. Он также добавляет свойство MessageType в сообщение со значением Alert.It also adds the MessageType property to the message with the value set to Alert.

    static 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}");
                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. Сохраните этот файл.Save this file.

  9. В обозревателе VS Code откройте файл deployment.template.json в рабочей области решения IoT Edge.In the VS Code explorer, open the deployment.template.json file in your IoT Edge solution workspace. Этот файл указывает $edgeAgent развернуть два модуля: tempSensor и CSharpModule.This file tells the $edgeAgent to deploy two modules: tempSensor and CSharpModule. На панели состояния VS Code для устройства IoT Edge указана платформа по умолчанию amd64, т. е. модуль CSharpModule использует версию образа для Linux amd64.The default platform of your IoT Edge is set to amd64 in your VS Code status bar, which means your CSharpModule is set to Linux amd64 version of the image. При необходимости измените платформу по умолчанию на панели состояния с amd64 на arm32v7 или windows-amd64 в соответствии с архитектурой вашего устройства IoT Edge.Change the default platform in status bar from amd64 to arm32v7 or windows-amd64 if that is your IoT Edge device's architecture.

    Убедитесь, что шаблон содержит правильное имя модуля, а не имя SampleModule по умолчанию, которое можно изменить при создании решения IoT Edge.Verify that the template has the correct module name, not the default SampleModule name that you changed when you created the IoT Edge solution.

    Общие сведения о манифестах развертывания см. в статье Сведения об использовании, настройке и повторном использовании модулей Azure IoT Edge (предварительная версия).To learn more about deployment manifests, see Understand how IoT Edge modules can be used, configured, and reused.

    В файле deployment.template.json есть раздел registryCredentials, который хранит учетные данные реестра Docker.In the deployment.template.json file, the registryCredentials section stores your Docker registry credentials. Фактическое имя пользователя хранится в файле ENV, который Git игнорирует.The actual username and password pairs are stored in the .env file, which is ignored by git.

  10. Добавьте двойник модуля CSharpModule в манифест развертывания.Add the CSharpModule module twin to the deployment manifest. Вставьте следующее содержимое JSON в нижней части раздела modulesContent после двойника модуля $edgeHub:Insert the following JSON content at the bottom of the modulesContent section, after the $edgeHub module twin:

       "CSharpModule": {
           "properties.desired":{
               "TemperatureThreshold":25
           }
       }
    

    Добавьте двойник модуля в шаблон развертывания.

  11. Сохраните этот файл.Save this file.

Сборка решения IoT EdgeBuild your IoT Edge solution

В предыдущем разделе вы создали решение IoT Edge и добавили код CSharpModule, который будет отфильтровывать сообщения, где указанная температура компьютера ниже допустимого порогового значения.In the previous section, you created an IoT Edge solution and added code to the CSharpModule to filter out messages where the reported machine temperature is below the acceptable threshold. Теперь необходимо создать решение в качестве образа контейнера и передать его в реестр контейнеров.Now you need to build the solution as a container image and push it to your container registry.

  1. Войдите в Docker, введя следующую команду в окне интегрированного терминала Visual Studio Code.Sign in to Docker by entering the following command in the Visual Studio Code integrated terminal. Затем можно отправить образ модуля в Реестр контейнеров Azure.Then you can push your module image to your Azure container registry.

    docker login -u <ACR username> -p <ACR password> <ACR login server>
    

    Укажите имя пользователя, пароль и сервер входа, скопированные из Реестра контейнеров Azure при его создании.Use the username, password, and login server that you copied from your Azure container registry in the first section. Вы также можете получить эти значения из раздела Ключи доступа в разделе реестра на портале Azure.You can also retrieve these values from the Access keys section of your registry in the Azure portal.

  2. В обозревателе VS Code щелкните правой кнопкой мыши файл deployment.template.json и выберите Build and Push IoT Edge solution (Создать и отправить решение IoT Edge).In the VS Code explorer, right-click the deployment.template.json file and select Build and Push IoT Edge solution.

После указания службе Visual Studio Code создать решение, сначала она запишет данные в шаблон развертывания, а затем в новой папке config создаст файл deployment.json. Затем выполняются две команды в интегрированном терминале: docker build и docker push.When you tell Visual Studio Code to build your solution, it first takes the information in the deployment template and generates a deployment.json file in a new folder named config. Then, it runs two commands in the integrated terminal: docker build and docker push. Они создают код, упаковывают его в контейнер CSharpModule.dll и передают в реестр контейнера, который был указан при инициализации решения.These two commands build your code, containerize the CSharpModule.dll, and then push the code to the container registry that you specified when you initialized the solution.

Полный адрес образа контейнера с тегом можно увидеть в окне интегрированного терминала VS Code.You can see the full container image address with tag in the VS Code integrated terminal. Адрес образа создается на основе информации из файла module.json в формате <repository>:<version>-<platform>.The image address is built from information that's in the module.json file with the format <repository>:<version>-<platform>. В этом руководстве он должен выглядеть так: registryname.azurecr.io/csharpmodule:0.0.1-amd64.For this tutorial, it should look like registryname.azurecr.io/csharpmodule:0.0.1-amd64.

Развертывание и запуск решенияDeploy and run the solution

При использовании руководства по настройке устройства IoT Edge модуль был развернут с помощью портала Azure.In the quickstart article that you used to set up your IoT Edge device, you deployed a module by using the Azure portal. Модули также можно развертывать с помощью расширения Azure IoT Toolkit для Visual Studio Code.You can also deploy modules using the Azure IoT Toolkit extension for Visual Studio Code. У вас уже есть манифест развертывания, подготовленный для вашего сценария (см. файл deployment.json).You already have a deployment manifest prepared for your scenario, the deployment.json file. Теперь вам осталось выбрать устройство для получения развертывания.All you need to do now is select a device to receive the deployment.

  1. В палитре команд VS Code выберите команду Azure IoT Hub: Select IoT Hub (Центр Интернета вещей Azure: выбрать Центр Интернета вещей).In the VS Code command palette, run Azure IoT Hub: Select IoT Hub.

  2. Выберите подписку и Центр Интернета вещей, содержащий устройство IoT Edge, которое нужно настроить.Choose the subscription and IoT hub that contain the IoT Edge device that you want to configure.

  3. В обозревателе VS Code разверните раздел Azure IoT Hub Devices (Устройства Центра Интернета вещей Azure).In the VS Code explorer, expand the Azure IoT Hub Devices section.

  4. Щелкните имя устройства IoT Edge правой кнопкой мыши, а затем выберите Create Deployment for Single Device (Создание развертывания для одного устройства).Right-click the name of your IoT Edge device, then select Create Deployment for Single Device.

    Создание развертывания для одного устройства

  5. Выберите файл deployment.json в папке config и щелкните Select Edge Deployment Manifest (Выбрать манифест развертывания Edge).Select the deployment.json file in the config folder and then click Select Edge Deployment Manifest. Не используйте файл deployment.template.json.Do not use the deployment.template.json file.

  6. Нажмите кнопку "Обновить".Click the refresh button. Вы должны увидеть новый модуль CSharpModule, работающий вместе с модулем TempSensor, а также $edgeAgent и $edgeHub.You should see the new CSharpModule running along with the TempSensor module and the $edgeAgent and $edgeHub.

Просмотр сформированных данныхView generated data

Когда вы примените манифест развертывания к устройству IoT Edge, в среде выполнения IoT Edge на устройстве начнется сбор сведений о новом развертывании и выполнение операций.Once you apply the deployment manifest to your IoT Edge device, the IoT Edge runtime on the device collects the new deployment information and starts executing on it. Работа всех выполняющихся на устройстве модулей, которые не включены в манифест развертывания, будет остановлена.Any modules running on the device that aren't included in the deployment manifest are stopped. А модули, которых нет на устройстве, будут запущены.Any modules missing from the device are started.

Сведения о состоянии устройства IoT Edge можно просмотреть в разделе Azure IoT Hub Devices (Устройства Центра Интернета вещей Azure) в обозревателе Visual Studio Code.You can view the status of your IoT Edge device using the Azure IoT Hub Devices section of the Visual Studio Code explorer. Разверните раздел со сведениями об устройстве, чтобы просмотреть список развернутых и запущенных модулей.Expand the details of your device to see a list of deployed and running modules.

На самом устройстве IoT Edge можно просмотреть состояние развертывания модулей с помощью команды iotedge list.On the IoT Edge device itself you can see the status of your deployment modules using the command iotedge list. Вы увидите четыре модуля: два модуля среды выполнения IoT Edge, tempSensor и пользовательский модуль, который вы создали в рамках этого руководства.You should see four modules: the two IoT Edge runtime modules, tempSensor, and the custom module that you created in this tutorial. Запуск всех модулей может занять несколько минут, поэтому выполните команду повторно, если сразу отображаются не все модули.It may take a few minutes for all the modules to start, so rerun the command if you don't see them all initially.

Чтобы просмотреть сообщения, создаваемые любым модулем, используйте команду iotedge logs <module name>.To view the messages being generated by any module, use the command iotedge logs <module name>.

Сообщения можно просматривать после их поступления в центр Интернета вещей с помощью Visual Studio Code.You can view the messages as they arrive at your IoT hub using Visual Studio Code.

  1. Для отслеживания данных, поступающих в Центр Интернета вещей, нажмите кнопку с многоточием (...), а затем выберите Start Monitoring D2C Messages (Начать мониторинг сообщений D2C).To monitor data that arrives at the IoT hub, select the ellipsis (...), and then select Start Monitoring D2C Messages.
  2. Для отслеживания сообщений D2C для конкретного устройства щелкните его правой кнопкой мыши в списке и выберите Start Monitoring D2C Messages (Начать мониторинг сообщений D2C).To monitor the D2C message for a specific device, right-click the device in the list, and select Start Monitoring D2C Messages.
  3. Чтобы перестать отслеживать данные, выполните команду Azure IoT Hub: Stop monitoring D2C message (Центр Интернета вещей Azure: остановить мониторинг сообщений D2C) в палитре команд.To stop monitoring data, run the command Azure IoT Hub: Stop monitoring D2C message in the command palette.
  4. Для просмотра или обновления двойника модуля щелкните модуль правой кнопкой мыши в списке и выберите Edit module twin (Редактирование двойника модуля).To view or update the module twin, right-click the module in the list, and select Edit module twin. Чтобы обновить двойник модуля, сохраните двойник файла JSON, затем щелкните правой кнопкой мыши область редактора и выберите Update Module Twin (Обновить двойник модуля).To update the module twin, save the twin JSON file, right-click the editor area, and select Update Module Twin.
  5. Чтобы просмотреть журналы Docker, установите Docker для VS Code.To view Docker logs, install Docker for VS Code. Локально запущенные модули можно найти в обозревателе Docker.You can find your running modules locally in Docker explorer. В контекстном меню выберите пункт Показать журналы для просмотра в интегрированном терминале.In the context menu, select Show Logs to view in the integrated terminal.

Очистка ресурсовClean up resources

Если вы планируете перейти к следующей рекомендуемой статье, можно сохранить созданные и повторно используемые ресурсы и конфигурации.If you plan to continue to the next recommended article, you can keep the resources and configurations that you created and reuse them. Это же устройство IoT Edge также можно использовать в качестве тестового устройства.You can also keep using the same IoT Edge device as a test device.

В противном случае чтобы избежать расходов, можно удалить локальные конфигурации и ресурсы Azure, созданные в рамках этой статьи.Otherwise, you can delete the local configurations and the Azure resources that you created in this article to avoid charges.

Удаление ресурсов AzureDelete Azure resources

Удаление ресурсов Azure и групп ресурсов является необратимым.Deleting Azure resources and resource groups is irreversible. Будьте внимательны, чтобы случайно не удалить не ту группу ресурсов или не те ресурсы.Make sure that you don't accidentally delete the wrong resource group or resources. Если вы создали Центр Интернета вещей в группе ресурсов, содержащей ресурсы, которые нужно сохранить, удалите только ресурс Центра Интернета вещей, не удаляя всю группу ресурсов.If you created the IoT hub inside an existing resource group that has resources that you want to keep, delete only the IoT hub resource itself, instead of deleting the resource group.

Удаление ресурсов:To delete the resources:

  1. Войдите в портал Azure и выберитеГруппы ресурсов.Sign in to the Azure portal and select Resource groups.

  2. Выберите группу ресурсов, содержащую тестовые ресурсы IoT Edge.Select the name of the resource group that contains your IoT Edge test resources.

  3. Просмотрите список ресурсов, содержащихся в группе ресурсов.Review the list of resources contained in your resource group. Если вы хотите удалить их все, щелкните Удалить группу ресурсов.If you want to delete all of them, you can select Delete resource group. Если вы хотите удалить только некоторые из них, щелкните нужные ресурсы отдельно.If you want to delete only some of them, you can click into each resource to delete them individually.

Удаление локальных ресурсовDelete local resources

Если вы хотите удалить среду выполнения IoT Edge и связанные ресурсы с устройства, используйте команды в соответствии с операционной системой устройства.If you want to remove the IoT Edge runtime and related resources from your device, use the appropriate commands for your device operating system.

WindowsWindows

Удалите среду выполнения IoT Edge.Uninstall the IoT Edge runtime.

. {Invoke-WebRequest -useb aka.ms/iotedge-win} | Invoke-Expression; `
Uninstall-SecurityDaemon

При удалении среды выполнения IoT Edge созданные с ее помощью контейнеры остановятся, но будут по-прежнему храниться на устройстве.When the IoT Edge runtime is removed, the containers that it created are stopped, but still exist on your device. Просмотрите все контейнеры.View all containers.

docker ps -a

Удалите контейнеры среды выполнения, созданные на устройстве.Delete the runtime containers that were created on your device.

docker rm -f edgeHub
docker rm -f edgeAgent

Удалите дополнительные контейнеры, которые указаны в выходных данных docker ps, ссылаясь на имена контейнеров.Delete any additional containers that were listed in the docker ps output by referring to the container names.

LinuxLinux

Удалите среду выполнения IoT Edge.Remove the IoT Edge runtime.

sudo apt-get remove --purge iotedge

При удалении среды выполнения IoT Edge созданные с ее помощью контейнеры остановятся, но будут по-прежнему храниться на устройстве.When the IoT Edge runtime is removed, the containers that it created are stopped, but still exist on your device. Просмотрите все контейнеры.View all containers.

sudo docker ps -a

Удалите контейнеры среды выполнения, созданные на устройстве.Delete the runtime containers that were created on your device.

docker rm -f edgeHub
docker rm -f edgeAgent

Удалите дополнительные контейнеры, которые указаны в выходных данных docker ps, ссылаясь на имена контейнеров.Delete any additional containers that were listed in the docker ps output by referring to the container names.

Удалите среду выполнения контейнера.Remove the container runtime.

sudo apt-get remove --purge moby

Дополнительная информацияNext steps

В этом руководстве вы создали модуль IoT Edge с кодом для фильтрации необработанных данных, созданных устройством IoT Edge.In this tutorial, you created an IoT Edge module with code to filter raw data that's generated by your IoT Edge device. Когда вы будете готовы создавать собственные модули, больше об этом см. в разделе Использование Visual Studio Code для разработки и отладки модулей C# для Azure IoT Edge.When you're ready to build your own modules, you can learn more about how to develop a C# module with Azure IoT Edge for Visual Studio Code. Перейдите к следующим руководствам, чтобы узнать о других способах, с помощью которых Azure IoT Edge может помочь вам превратить данные в бизнес-аналитику на пограничном устройстве.You can continue on to the next tutorials to learn other ways that Azure IoT Edge can help you turn data into business insights at the edge.