Подключение устройств через прозрачный шлюз IoT Edge

Устройство IoT Edge может служить шлюзом, который обеспечивает соединения между другими устройствами в локальной сети и вашим приложением IoT Central. Шлюз используется, когда устройство не может получить доступ к приложению IoT Central напрямую.

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

Diagram that shows IoT Edge as a transparent gateway.

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

В этой статье показано, как реализовать сценарий с помощью среды выполнения IoT Edge 1.4.

Необходимые компоненты

Для выполнения задач из этой статьи необходимо следующее:

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

Импорт манифеста развертывания

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

  1. Перейдите к манифестам Edge.

  2. Выберите +Создать, введите имя манифеста развертывания, например прозрачный шлюз , а затем отправьте скачанный ранее файл EdgeTransparentGatewayManifest.json .

  3. Выберите "Создать", чтобы сохранить манифест развертывания в приложении.

Добавление шаблонов устройств

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

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

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

  1. Создайте шаблон устройства и выберите тип шаблона Устройство IoT.

  2. На странице Настройка мастера введите имя шаблона устройства, например Thermostat (Термостат).

  3. После создания шаблона устройства выберите команду Импортировать модель. Выберите модель, например файл thermostat-1.json, загруженный ранее.

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

  5. публикация шаблона устройства;

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

  1. Создайте шаблон устройства и выберите тип шаблона Azure IoT Edge.

  2. На странице Настройка мастера введите имя шаблона устройства, например Edge Gateway (Шлюз Edge).

  3. На странице настройки мастера проверка Это устройство шлюза.

  4. На странице Отзыв выберите Создать.

  5. На странице "Создание модели" выберите "Пользовательская модель".

  6. Добавьте запись в раздел Связи в шаблоне подчиненного устройства.

На следующем снимке экрана показана страница "Связи " для устройства шлюза IoT Edge с подчиненными устройствами, используюющими шаблон устройства Thermostat :

Screenshot showing IoT Edge gateway device template relationship with a thermostat downstream device template.

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

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

Добавление устройств

При добавлении устройств в приложение IoT Central можно определить связь между подчиненными устройствами и прозрачным шлюзом.

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

  1. Перейдите на страницу устройств в приложении IoT Central.

  2. Добавьте экземпляр устройства прозрачного шлюза IoT Edge. При добавлении устройства убедитесь, что выбран манифест развертывания прозрачного шлюза . В этой статье для устройства шлюза принимается идентификатор edgegateway.

  3. Добавьте один или несколько экземпляров подчиненных устройств. В этой статье подчиненными устройствами являются термостаты с идентификаторами thermostat1 и thermostat2.

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

На следующем снимке экрана на странице Подчиненные устройства можно увидеть список устройств, подключенных к шлюзу.

Screenshot that shows the list of downstream devices connected to a transparent gateway.

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

Перед развертыванием устройств необходимо подготовить следующие данные.

  • Область идентификатора приложения IoT Central.
  • Значения идентификаторов устройств для шлюза и подчиненных устройств.
  • Значения Первичного ключа для шлюза и подчиненных устройств.

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

Совет

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

Развертывание шлюза и устройств

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

Совет

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

Чтобы опробовать конфигурацию с прозрачным шлюзом, нажмите следующую кнопку, чтобы развернуть две виртуальные машины Linux. Одна виртуальная машина установлена среда выполнения IoT Edge 1.4 и является прозрачным шлюзом IoT Edge. Другая виртуальная машина — это нижнее устройство, в котором выполняется код для отправки имитированной телеметрии термостата:

Deploy to Azure Button

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

  1. Перейдите на страницу Устройства в приложении IoT Central. Если устройство шлюза IoT Edge подключено к IoT Central, у него будет отображаться состояние Подготовлено.

  2. Откройте устройство шлюза IoT Edge и проверьте состояние модулей на странице модули. Если среда выполнения IoT Edge запущена успешно, модули $edgeAgent и $edgeHub будут в состоянии Выполняется:

    Screenshot showing the $edgeAgent and $edgeHub version 1.4 modules running on the IoT Edge gateway.

    Совет

    Возможно, придется подождать несколько минут, пока виртуальная машина загрузится и завершится подготовка устройства к работе в приложении IoT Central.

Настройка шлюза

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

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

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

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

    # Clone the repo
    cd ~
    git clone https://github.com/Azure/iotedge.git
    
    # Generate the demo certificates
    mkdir certs
    cd certs
    cp ~/iotedge/tools/CACertificates/*.cnf .
    cp ~/iotedge/tools/CACertificates/certGen.sh .
    ./certGen.sh create_root_and_intermediate
    ./certGen.sh create_edge_device_ca_certificate "mycacert"
    

    После выполнения вышеприведенных команд следующие файлы будут готовы к использованию в дальнейших шагах.

    • ~/certs/certs/azure-iot-test-only.root.ca.cert.pem — сертификат корневого ЦС, используемый для создания всех остальных демонстрационных сертификатов, для тестирования сценария IoT Edge.
    • ~/certs/certs/iot-edge-device-mycacert-full-chain.cert.pem — сертификат ЦС устройства, на который ссылается файл конфигурации IoT Edge. В сценарии со шлюзом с помощью этого сертификата ЦС устройство IoT Edge подтверждает свое удостоверение подчиненным устройствам.
    • ~/certs/private/iot-edge-device-mycacert.key.pem — закрытый ключ, связанный с сертификатом ЦС устройства.

    Подробнее об этих демонстрационных сертификатах см. в статье Создание демонстрационных сертификатов для тестирования функций устройства IoT Edge.

  3. Откройте файл config.toml в текстовом редакторе. Например:

    sudo nano /etc/aziot/config.toml
    
  4. Найдите следующие параметры в файле конфигурации. Добавьте параметры сертификата следующим образом:

    trust_bundle_cert = "file:///home/AzureUser/certs/certs/azure-iot-test-only.root.ca.cert.pem"
    
    [edge_ca]
    cert = "file:///home/AzureUser/certs/certs/iot-edge-device-ca-mycacert-full-chain.cert.pem"
    pk = "file:///home/AzureUser/certs/private/iot-edge-device-ca-mycacert.key.pem"
    

    В предыдущем примере предполагается, что вы вошли в систему как AzureUser и создали сертификат ЦС устройства с именем mycacert.

  5. Сохраните изменения и перезапустите среду выполнения IoT Edge:

    sudo iotedge config apply
    

Если среда выполнения IoT Edge после внесенных изменений запустится успешно, то состояние модулей $edgeAgent и $edgeHub на странице Модули устройства шлюза в IoT Central изменится на Выполняется.

Если среда выполнения не запускается, проверка изменения, внесенные в файл конфигурации IoT Edge, и ознакомьтесь с разделом "Устранение неполадок устройства IoT Edge".

Ваш прозрачный шлюз настроен и готов начать пересылку данных телеметрии от подчиненных устройств.

Подключение подчиненного устройства

IoT Central использует службу подготовки устройств (DPS) для подготовки устройств в IoT Central. В настоящее время IoT Edge не может использовать DPS подготовить нижнее устройство к приложению IoT Central. Ниже показано, как подготовить thermostat1 устройство вручную. Для выполнения этих действий вам потребуется среда с установленным Python и подключением к Интернету. Проверьте пакет SDK Для Python Для Интернета вещей Azure для текущих требований к версии Python. В Azure Cloud Shell предварительно установлен Python:

  1. Выполните следующую команду, чтобы установить модуль azure.iot.device:

    pip install azure.iot.device
    
  2. Выполните следующую команду, чтобы скачать скрипт Python, который выполняет подготовку устройства:

    wget https://raw.githubusercontent.com/Azure-Samples/iot-central-docs-samples/main/transparent-gateway-1-4/provision_device.py
    
  3. Чтобы подготовить нижестоящее thermostat1 устройство в приложении IoT Central, выполните следующие команды, заменив {your application id scope} и {your device primary key}. Вы запишите эти значения при добавлении устройств в приложение IoT Central:

    export IOTHUB_DEVICE_DPS_DEVICE_ID=thermostat1
    export IOTHUB_DEVICE_DPS_ID_SCOPE={your application id scope}
    export IOTHUB_DEVICE_DPS_DEVICE_KEY={your device primary key}
    python provision_device.py
    

В приложении IoT Central убедитесь, что состояние устройства для thermostat1 устройства теперь подготовлено.

Настройка подчиненного устройства

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

На виртуальную машину leafdevice нужно установить копию сертификата корневого ЦС, созданного на виртуальной машине edgegateway. Скопируйте файл /home/AzureUser/certs/certs/azure-iot-test-only.root.ca.cert.pem с виртуальной машины edgegateway в свой домашний каталог на виртуальной машине leafdevice. Для копирования файлов между виртуальными машинами Linux можно использовать команду scp . Например, с leafdevice компьютера:

scp AzureUser@edgegateway:/home/AzureUser/certs/certs/azure-iot-test-only.root.ca.cert.pem .

Сведения о том, как проверить подключение от подчиненного устройства к шлюзу, см. в разделе Тестирование подключения к шлюзу.

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

  1. Используйте SSH для подключения к виртуальной машине и входа в нее leafdevice .

  2. Загрузите пример на Python в свой домашний каталог:

    cd ~
    wget https://raw.githubusercontent.com/Azure-Samples/iot-central-docs-samples/main/transparent-gateway-1-4/simple_thermostat.py
    
  3. Установите модуль Python для устройств Интернет вещей Azure:

    sudo apt update
    sudo apt install python3-pip
    pip3 install azure.iot.device
    
  4. Задайте переменные среды, чтобы настроить пример. Замените {your device shared key} на первичный ключ thermostat1, который вы записали ранее. В значениях переменных ниже предполагается, что имя виртуальной машины шлюза — edgegateway, а идентификатор устройства термостата — thermostat1:

    export IOTHUB_DEVICE_SECURITY_TYPE=connectionString
    export IOTHUB_DEVICE_CONNECTION_STRING="HostName=edgegateway;DeviceId=thermostat1;SharedAccessKey={your device shared key}"
    export IOTEDGE_ROOT_CA_CERT_PATH=~/azure-iot-test-only.root.ca.cert.pem
    

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

  5. Чтобы запустить код, выполните следующую команду:

    python3 simple_thermostat.py
    

    Выходные данные этой команды выглядят наподобие следующего:

    Connecting using Connection String HostName=edgegateway;DeviceId=thermostat1;SharedAccessKey={your device shared key}
    Listening for command requests and property updates
    Press Q to quit
    Sending telemetry for temperature
    Sent message
    Sent message
    Sent message
    ...
    

    Совет

    Если возникает ошибка при попытке подключения нижестоящего устройства. Попробуйте повторно запустить шаги подготовки устройства.

  6. Чтобы просмотреть телеметрию в IoT Central, перейдите на страницу Обзор устройства thermostat1:

    Screenshot showing telemetry from the downstream device.

    На странице Сведения можно просмотреть значения свойств, отправляемые подчиненным устройством, а со страницы Команды можно выполнять команды на подчиненном устройстве.