Поделиться через


Руководство. Отправка данных через прозрачный шлюз

Область применения:yes icon IoT Edge 1.1

Это важно

Дата окончания поддержки IoT Edge 1.1 была 13 декабря 2022 г. Проверьте жизненный цикл продукта Майкрософт , чтобы узнать, как поддерживается этот продукт, служба, технология или API. Дополнительные сведения об обновлении до последней версии IoT Edge см. в разделе "Обновление IoT Edge".

В этой статье мы снова используем виртуальную машину разработки в качестве имитированного устройства. Однако вместо отправки данных непосредственно в Центр Интернета вещей устройство отправляет данные на устройство IoT Edge, настроенное как прозрачный шлюз.

Мы отслеживаем операцию устройства IoT Edge, пока имитированное устройство отправляет данные. После завершения работы устройства мы рассмотрим данные в учетной записи хранения, чтобы убедиться, что все работало должным образом.

Обычно этот шаг выполняется разработчиком облака или устройства.

В этом разделе руководства вы узнаете, как:

  • Выполните сборку и запуск нижестоящего устройства.
  • Убедитесь, что созданные данные хранятся в хранилище BLOB-объектов Azure.
  • Убедитесь, что модель машинного обучения классифицировала данные устройства.

Предпосылки

Эта статья является частью серии руководств по использованию Машинного обучения Azure в IoT Edge. Каждая статья в серии основана на работе, приведенной в предыдущей статье. Если вы попали на эту статью напрямую, посетите первую статью в серии.

Проверка соединений устройства

Повторно используйте проект DeviceHarness для имитации нижнего устройства. Для подключения к прозрачному шлюзу требуются два дополнительных элемента:

  • Зарегистрируйте сертификат, чтобы нижнее устройство Интернета вещей доверяло центру сертификации, используемому средой выполнения IoT Edge. В нашем случае подключенное устройство — это виртуальная машина разработки.
  • Добавьте полное доменное имя шлюза edge (FQDN) в строку подключения устройства.

Просмотрите код, чтобы узнать, как реализованы эти два элемента.

  1. На компьютере разработки откройте Visual Studio Code.

  2. > Используйтефайл Open Folder... для открытия C:\source\IoTEdgeAndMlSample\DeviceHarness.

  3. Просмотрите метод InstallCertificate() в Program.cs.

  4. Обратите внимание, что если код находит путь к сертификату, он вызывает метод CertificateManager.InstallCACert для установки сертификата на компьютере.

  5. Теперь просмотрите метод GetIotHubDevice в классе TurbofanDevice.

  6. Когда пользователь задает полное доменное имя шлюза с помощью параметра -g, это значение передается этому методу в качестве gatewayFqdn переменной, которая добавляется к строке подключения устройства.

    connectionString = $"{connectionString};GatewayHostName={gatewayFqdn.ToLower()}";
    

Сборка и запуск нижестоящего устройства

  1. После того как проект DeviceHarness по-прежнему открыт в Visual Studio Code, создайте проект. В меню "Терминал " выберите "Выполнить задачу сборки" и выберите "Сборка".

  2. Найдите полное доменное имя (FQDN) для пограничного шлюза, перейдя на устройство IoT Edge (виртуальная машина Linux) на портале Azure и скопируйте значение DNS-имени на странице обзора.

  3. Запустите устройство Интернета вещей (виртуальная машина Linux), если оно еще не запущено.

  4. Откройте терминал Visual Studio Code. В меню терминала выберите "Новый терминал " и выполните следующую команду, заменив <edge_device_fqdn> DNS-имя, скопированное на устройстве IoT Edge (виртуальная машина Linux):

    dotnet run -- --gateway-host-name "<edge_device_fqdn>" --certificate C:\edgecertificates\certs\azure-iot-test-only.root.ca.cert.pem --max-devices 1
    
  5. Приложение пытается установить сертификат на компьютер разработки. Когда это произойдет, примите предупреждение системы безопасности.

  6. При появлении запроса на строку подключения Центра Интернета вещей щелкните многоточие (...) на панели устройств Центра Интернета вещей Azure и выберите "Копировать строку подключения Центра Интернета вещей". Вставьте значение в терминал.

  7. Вы увидите такие выходные данные:

    Found existing device: Client_001
    Using device connection string: HostName=<your hub>.azure-devices.net;DeviceId=Client_001;SharedAccessKey=xxxxxxx; GatewayHostName=iotedge-xxxxxx.<region>.cloudapp.azure.com
    Device: 1 Message count: 50
    Device: 1 Message count: 100
    Device: 1 Message count: 150
    Device: 1 Message count: 200
    Device: 1 Message count: 250
    

    Обратите внимание на добавление "GatewayHostName" в строку подключения устройства, которая приводит к тому, что устройство будет взаимодействовать через Центр Интернета вещей через прозрачный шлюз IoT Edge.

Проверка выходных данных

Выходные данные устройства IoT Edge

Выходные данные модуля avroFileWriter можно легко наблюдать, просматривая устройство IoT Edge.

  1. Подключитесь через SSH к виртуальной машине IoT Edge.

  2. Найдите файлы, записанные на диск.

    find /data/avrofiles -type f
    
  3. Выходные данные команды будут выглядеть следующим образом:

    /data/avrofiles/2019/4/18/22/10.avro
    

    У вас может быть несколько файлов в зависимости от времени выполнения.

  4. Обратите внимание на метки времени. Модуль avroFileWriter отправляет файлы в облако, если время последнего изменения файла превышает 10 минут назад (см. MODIFIED_FILE_TIMEOUT в uploader.py модуля avroFileWriter).

  5. После истечения 10 минут модуль должен отправить файлы. Если отправка выполнена успешно, она удаляет файлы с диска.

Служба хранилища Azure

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

  1. На компьютере разработки откройте Visual Studio Code.

  2. На панели "ХРАНИЛИЩЕ AZURE" в окне изучения перейдите к дереву, чтобы найти учетную запись хранения.

  3. Разверните узел контейнеров Blob.

  4. Из работы, которую мы сделали в предыдущей части руководства, мы ожидаем, что контейнер ruldata должен содержать сообщения с RUL. Разверните узел ruldata.

  5. Вы увидите один или несколько BLOB-файлов с именами, например: <IoT Hub Name>/<partition>/<year>/<month>/<day>/<hour>/<minute>.

  6. Щелкните правой кнопкой мыши один из файлов и выберите "Скачать BLOB-объект ", чтобы сохранить файл на компьютере разработки.

  7. Затем разверните узел uploadturbofanfiles . В предыдущей статье мы задали это расположение в качестве целевого объекта для файлов, отправленных модулем avroFileWriter.

  8. Щелкните правой кнопкой мыши файлы и выберите "Скачать BLOB-объект ", чтобы сохранить его на компьютере разработки.

Чтение содержимого файла Avro

Мы включили простую программу командной строки для чтения файла Avro и возврата строки JSON сообщений в файле. В этом разделе мы установим и запустим его.

  1. Откройте терминал в Visual Studio Code (терминал>Новый терминал).

  2. Установите hubavroreader:

    pip install c:\source\IoTEdgeAndMlSample\HubAvroReader
    
  3. Используйте hubavroreader для чтения файла Avro, скачанного из ruldata.

    hubavroreader <avro file with ath> | more
    
  4. Обратите внимание, что текст сообщения выглядит так, как мы и ожидали, с идентификатором устройства и прогнозируемым оставшимся сроком службы.

    {
        "Body": {
            "ConnectionDeviceId": "Client_001",
            "CorrelationId": "3d0bc256-b996-455c-8930-99d89d351987",
            "CycleTime": 1.0,
            "PredictedRul": 170.1723693909444
        },
        "EnqueuedTimeUtc": "<time>",
        "Properties": {
            "ConnectionDeviceId": "Client_001",
            "CorrelationId": "3d0bc256-b996-455c-8930-99d89d351987",
            "CreationTimeUtc": "01/01/0001 00:00:00",
            "EnqueuedTimeUtc": "01/01/0001 00:00:00"
        },
        "SystemProperties": {
            "connectionAuthMethod": "{\"scope\":\"module\",\"type\":\"sas\",\"issuer\":\"iothub\",\"acceptingIpFilterRule\":null}",
            "connectionDeviceGenerationId": "636857841798304970",
            "connectionDeviceId": "aaTurbofanEdgeDevice",
            "connectionModuleId": "turbofanRouter",
            "contentEncoding": "utf-8",
            "contentType": "application/json",
            "correlationId": "3d0bc256-b996-455c-8930-99d89d351987",
            "enqueuedTime": "<time>",
            "iotHubName": "mledgeiotwalkthroughhub"
        }
    }
    
  5. Выполните ту же команду, передав файл Avro, который вы скачали из uploadturbofanfiles.

  6. Как ожидалось, эти сообщения содержат все данные датчика и операционные параметры из исходного сообщения. Эти данные можно использовать для улучшения модели RUL на периферийном устройстве.

    {
        "Body": {
            "CycleTime": 1.0,
            "OperationalSetting1": -0.0005000000237487257,
            "OperationalSetting2": 0.00039999998989515007,
            "OperationalSetting3": 100.0,
            "PredictedRul": 170.17236328125,
            "Sensor1": 518.6699829101562,
            "Sensor10": 1.2999999523162842,
            "Sensor11": 47.29999923706055,
            "Sensor12": 522.3099975585938,
            "Sensor13": 2388.010009765625,
            "Sensor14": 8145.31982421875,
            "Sensor15": 8.424599647521973,
            "Sensor16": 0.029999999329447746,
            "Sensor17": 391.0,
            "Sensor18": 2388.0,
            "Sensor19": 100.0,
            "Sensor2": 642.3599853515625,
            "Sensor20": 39.11000061035156,
            "Sensor21": 23.353700637817383,
            "Sensor3": 1583.22998046875,
            "Sensor4": 1396.8399658203125,
            "Sensor5": 14.619999885559082,
            "Sensor6": 21.610000610351562,
            "Sensor7": 553.969970703125,
            "Sensor8": 2387.9599609375,
            "Sensor9": 9062.169921875
        },
            "ConnectionDeviceId": "Client_001",
            "CorrelationId": "70df0c98-0958-4c8f-a422-77c2a599594f",
            "CreationTimeUtc": "0001-01-01T00:00:00+00:00",
            "EnqueuedTimeUtc": "<time>"
    }
    

Очистите ресурсы

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

  1. Удалите группы ресурсов, созданные для хранения виртуальной машины разработки, виртуальной машины IoT Edge, Центра Интернета вещей, учетной записи хранения, службы рабочей области машинного обучения (и созданные ресурсы: реестр контейнеров, Application Insights, хранилище ключей, учетная запись хранения).

  2. Удалите проект машинного обучения в записных книжках Azure.

  3. Если вы клонировали репозиторий локально, закройте все окна PowerShell или VS Code, ссылающиеся на локальный репозиторий, а затем удалите каталог репозитория.

  4. При локальном создании сертификатов удалите папку c:\edgeCertificates.

Дальнейшие шаги

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

Чтобы продолжить изучение возможностей IoT Edge, попробуйте следующее: