Упражнение — развертывание функции Azure в IoT Edge

Завершено

Отфильтруйте отправляемые устройством данные телеметрии.

Помните, что вы хотите свести к минимуму объем данных, отправляемых из каждого хранилища. Чтобы уменьшить объем данных телеметрии, отправляемых приложению IoT Central, перед отправкой нужно отфильтровать данные на устройстве IoT Edge.

Здесь вы будете использовать Функции Azure, запущенные на устройстве IoT Edge, для реализации фильтра. Фильтр гарантирует, что устройство будет отправлять данные телеметрии только тогда, когда температура окружающей среды превышает 21 °C.

Примечание.

Это необязательное упражнение. Если вы хотите выполнить это упражнение, перед началом работы нужно будет создать подписку Azure. Если у вас нет учетной записи Azure или вы не хотите создавать ее сейчас, можно ознакомиться с инструкциями, чтобы понять, какие сведения будут представлены.

Настройка реестра контейнеров

На устройство IoT Edge потребуется загрузить пользовательский модуль Функций Azure, который реализует фильтр, и установить его. Модули IoT Edge упакованы в виде образов, совместимых с Docker, которые можно хранить в репозитории контейнеров. Вы решаете использовать Реестр контейнеров Azure (ACR) для хранения нового модуля. Кроме того, воспользуйтесь ACR для компиляции контейнера из исходного проекта.

Выполните следующие команды, чтобы добавить реестр контейнеров в свою группу ресурсов в Azure.

REGISTRY_NAME="edgecentral$RANDOM"
az acr create -n $REGISTRY_NAME -g <rgn>[sandbox resource group name]</rgn> --sku Standard --admin-enabled true
az acr credential show -n $REGISTRY_NAME
echo "Your registry name is: $REGISTRY_NAME"

Запишите имя реестра и значения password, которые будут использоваться позже в течение этого урока.

Создание проекта Функций Azure

Вы используете язык C# для реализации функции. Выполните следующие команды, чтобы установить шаблон проекта, а затем сгенерировать основу проекта.

dotnet new -i Microsoft.Azure.IoT.Edge.Function
dotnet new aziotedgefunction -n FilterFunction -r $REGISTRY_NAME.azurecr.io/filterfunction
cd FilterFunction
ls

Выполните следующую команду, чтобы заменить существующий файл FilterFunction. cs такой реализацией, в которой фильтруются данные телеметрии для температуры компьютера.

curl -O https://raw.githubusercontent.com/Azure-Samples/iot-central-docs-samples/main/iotedge/FilterFunction.cs

Теперь создайте образ и отправьте его в реестр контейнеров. Выполнение этой команды займет несколько минут.

az acr build --registry $REGISTRY_NAME --image filterfunction:v1 -f Dockerfile.amd64 .

Вы можете получить список образов в реестре с помощью следующей команды.

az acr repository list --name $REGISTRY_NAME

Обновление манифеста развертывания

Чтобы использовать новый модуль фильтра на устройстве IoT Edge, обновите манифест развертывания с новой версией.

Скачайте новый манифест развертывания и определение интерфейса на локальный компьютер, щелкнув правой кнопкой мыши следующие ссылки и выбрав Сохранить как:

Откройте EnvironmentalSensorManifestFilter-1-4.json в текстовом редакторе и обновите его, чтобы использовать модуль фильтра из реестра контейнеров:

  1. Замените три экземпляра <YOUR CONTAINER REGISTRY NAME> с именем реестра контейнеров. Имя выглядит вот так: edgecentral27912.
  2. Замените <YOUR CONTAINER REGISTRY PASSWORD> паролем, записанным вами ранее на этом уроке.
  3. Сохраните изменения.

Эта версия манифеста развертывания.

  • Добавляет модуль с созданной вами функцией Azure.

    "filterfunction": {
      "version": "1.0",
      "type": "docker",
      "status": "running",
      "restartPolicy": "always",
      "settings": {
        "image": "<YOUR CONTAINER REGISTRY NAME>.azurecr.io/filterfunction:v1",
        "createOptions": ""
      }
    
  • Направляет выходные данные модуля SimulatedTemperatureSensor в модуль filterfunction перед отправкой отфильтрованных данных телеметрии в приложение IoT Central.

    "routes": {
        "FilterFunctionToIoTCentral": "FROM /messages/modules/filterfunction/outputs/* INTO $upstream",
        "sensorToFilterFunction": "FROM /messages/modules/SimulatedTemperatureSensor/outputs/temperatureOutput INTO BrokeredEndpoint(\"/modules/filterfunction/inputs/input1\")"
      },
    

Чтобы отправить новый манифест развертывания, выполните следующие действия.

  1. В приложении IoT Central перейдите к манифестам Edge и выберите манифест датчикаокружающей среды.

  2. На странице "Настройка" отправьте новый файл EnvironmentalSensorManifestFilter-1-4.json. Выберите Далее.

  3. На странице "Проверка и завершение " отображается новый модуль filterfunction . Выберите Сохранить.

  4. Перейдите к устройству Edge датчика окружающей среды — устройство store-001 на странице "Устройства " и выберите модули.

  5. На странице "Модули" выберите "Управление манифестом>", чтобы назначить пограничный манифест. Выберите манифест датчика окружающей среды.

  6. Список модулей теперь включает в себя запущенный модуль filterfunction :

Screenshot that shows the FilterFunction module running on the IoT Edge device.

Обновление шаблона устройства для использования нового модуля

Устройство IoT Edge теперь отправляет данные телеметрии через интерфейс фильтрации вместо интерфейса телеметрии . Поэтому необходимо обновить шаблон и представления устройства:

  1. Перейдите к устройству Edge датчика окружающей среды на странице шаблонов устройств.

  2. Выберите модули и выберите "Импортировать модули" из манифеста.

  3. В диалоговом окне "Импорт модулей" выберите "Датчик среды" и нажмите кнопку "Импорт".

Screenshot that shows the FilterFunction module added to the device template.

Теперь новый модуль отправляет данные телеметрии в IoT Central. Затем добавьте интерфейс в новый модуль фильтра, который задает данные телеметрии и обновляет диаграмму.

  1. Выберите Модуль FilterFunction, а затем — + Добавить унаследованный интерфейс. Для просмотра этого параметра может потребоваться выбрать ....
  2. Выберите плитку Интерфейс импорта. Выберите ранее скачанный файл TelemetryInterfaceFilter.json.

Вы можете удалить исходный интерфейс Телеметрия, так как SimulatedTemperatureModule больше не отправляет данные телеметрии прямо в IoT Central. Выходные данные этого модуля направляется средой выполнения IoT Edge в модуль FilterFunction.

  1. Выберите интерфейс Телеметрия в модуле SimulatedTemperatureSensor.
  2. Выберите Удалить, а затем подтвердите операцию.

Измените представление Просмотр телеметрии устройства IoT Edge, чтобы отобразить данные телеметрии, отправляемые модулем FilterFunction.

  1. В шаблоне устройства выберите представление Просмотр телеметрии устройства IoT Edge, а затем выберите параметр Изменить на плитке диаграммы.
  2. Добавьте значения для данных телеметрии ambient/temperature, humidity, machine/temperature и pressure.
  3. Выберите Обновить, а затем — Сохранить, чтобы сохранить изменения.
  4. Нажмите кнопку Опубликовать, чтобы опубликовать новую версию шаблона устройства.

Проверьте свою работу

Чтобы просмотреть отфильтрованные данные телеметрии с устройства IoT Edge, выполните следующие действия.

  1. Перейдите к устройству store-001 на странице "Устройства ".

  2. Выберите представление Просмотр телеметрии устройства IoT Edge.

  3. На диаграмме видны отфильтрованные данные телеметрии. Не отображаются значения средней температуры окружающей среды менее 21,0 градусов.

    Screenshot that shows telemetry plot with no average ambient temperature values less than 21.

Если устройство, как представляется, перестает отправлять данные телеметрии, скорее всего, это связано с тем, что модуль SimulatedTemperatureSensor останавливается после отправки 500 сообщений. Если перезапустить виртуальную машину, счетчик сбрасывается, и, как видите, поток данных телеметрии возобновился.

az vm restart --resource-group <rgn>[sandbox resource group name]</rgn> \
  --name $(az vm list --resource-group <rgn>[sandbox resource group name]</rgn> --query [0].name -o tsv)