Руководство. Проверка подключения к центру Интернета вещей с помощью имитированного устройства

В этом руководстве описано, как применять инструменты на портале Центра Интернета вещей Azure и команды Azure CLI для проверки возможности подключения устройств. В этом руководстве используется простая имитация устройства, выполняемая на обычном компьютере.

Если у вас нет подписки Azure, создайте бесплатную учетную запись, прежде чем приступить к работе.

В этом руководстве описано следующее:

  • проверка аутентификации устройств;
  • Проверка подключения с устройства в облако
  • Проверка подключения из облака на устройство
  • проверка синхронизации двойников устройств.

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

  • В этом руководстве используется Azure CLI для создания облачных ресурсов. Существует два способа выполнения команд CLI:

    Примечание.

    В этой статье используется последняя версия расширения Azure IoT под названием azure-iot. Прежняя версия называется azure-cli-iot-ext. В каждый момент времени должна быть установлена только одна версия. Проверить установленные расширения можно с помощью команды az extension list.

    Используйте az extension remove --name azure-cli-iot-ext, чтобы удалить устаревшую версию расширения.

    Используйте az extension add --name azure-iot, чтобы добавить новую версию расширения.

    Чтобы узнать, какие расширения установлены, используйте az extension list.

  • Пример приложения, выполняемого в этом руководстве, использует Node.js. Вам потребуется установить Node.js 10 x.x или более поздней версии на компьютере для разработки.

    • Node.js, предназначенный для нескольких платформ, можно скачать здесь: nodejs.org.

    • Текущую версию Node.js на компьютере, на котором ведется разработка, можно проверить, используя следующую команду:

      node --version
      
  • Клонируйте или скачайте пример проекта Node.js из примеров Интернета вещей Azure для Node.js.

  • Убедитесь, что в брандмауэре открыт порт 8883. Пример устройства в этом руководстве использует протокол MQTT, который передает данные через порт 8883. В некоторых корпоративных и академических сетях этот порт может быть заблокирован. Дополнительные сведения и способы устранения этой проблемы см. в разделе о подключении к Центру Интернета вещей по протоколу MQTT.

Создание Центра Интернета вещей

В этом разделе описано, как использовать Azure CLI для создания центра Интернета вещей и группы ресурсов. Группа ресурсов Azure является логическим контейнером, в котором происходит развертывание ресурсов Azure и управление ими. Центр Интернета вещей действует в качестве центра сообщений для двусторонней связи между приложением Интернета вещей и устройствами.

Если у вас уже есть центр Интернета вещей в подписке Azure, этот раздел можно пропустить.

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

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

    • При использовании Cloud Shell нажмите кнопку Попробовать в командах интерфейса командной строки, чтобы запустить Cloud Shell в разделенном окне браузера. Или можно открыть Cloud Shell в отдельной вкладке браузера.
    • Если вы используете Azure CLI локально, запустите консольное приложение CLI и войдите в Azure CLI.
  2. Запустите az extension add, чтобы установить или обновить расширение azure-iot до текущей версии.

    az extension add --upgrade --name azure-iot
    
  3. В приложении CLI выполните команду az group create, чтобы создать группу ресурсов. В следующей команде создается группа ресурсов с именем MyResourceGroup в расположении eastus.

    Примечание.

    При необходимости можно задать другое расположение. Чтобы отобразить доступные расположения, выполните команду az account list-locations. В рамках работы с этим кратким руководством используется eastus, как показано в примере команды.

    az group create --name MyResourceGroup --location eastus
    
  4. Создайте Центр Интернета вещей с помощью команды az iot hub create. Создание Центра Интернета вещей может занять несколько минут.

    YourIotHubName Замените этот заполнитель и окружающие фигурные скобки в указанной ниже команде именем своего центра Интернета вещей. Имя центра Интернета вещей должно быть уникальным по всему Azure. Используйте имя центра Интернета вещей при работе с оставшейся частью этого краткого руководства везде вместо заполнителя.

    az iot hub create --resource-group MyResourceGroup --name {your_iot_hub_name}
    

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

Прежде чем обмениваться данными с Центром Интернета вещей, устройство должно пройти на нем аутентификацию. Вы можете применить инструмент Устройства Интернета вещей из раздела Управление устройствами на портале управления, чтобы изменить параметры устройств и (или) проверить их ключи аутентификации. В этом разделе руководства описано, как добавить тестовое устройство, получить его ключ и проверить возможность его подключения к концентратору. Позже вы сбросите ключ аутентификации и узнаете, что происходит при попытке устройства подключиться с устаревшим ключом.

Регистрация устройства

Устройство должно быть зарегистрировано в центре Интернета вещей, прежде чем оно сможет подключиться. В этом разделе рассматривается создание удостоверения устройства с помощью Azure CLI.

Если устройство уже зарегистрировано в центре Интернета вещей, этот раздел можно пропустить.

Создание удостоверения устройства:

  1. В оболочке CLI выполните команду az iot hub device-identity create. Эта команда создает удостоверение устройства.

    your_iot_hub_name. Замените этот заполнитель именем вашего центра Интернета вещей.

    myDevice. Это имя можно использовать для идентификатора устройства в этой статье или указать другое имя устройства.

    az iot hub device-identity create --device-id myDevice --hub-name {your_iot_hub_name}
    
  2. Выполните команду az iot hub device-identity connection-string show.

    az iot hub device-identity connection-string show --device-id myDevice --hub-name {your_iot_hub_name}
    

    Выходные данные строки подключения имеют следующий формат:

    HostName=<your IoT Hub name>.azure-devices.net;DeviceId=<your device id>;SharedAccessKey=<some value>
    
  3. Сохраните строку подключения в безопасном расположении.

Примечание.

Оставьте приложения CLI открытым. Оно понадобится вам на последующих шагах.

Имитация тестового устройства

Чтобы имитировать устройство, отправляющее данные телеметрии в Центр Интернета вещей, запустите скачаемое ранее приложение Node.js имитированного устройства.

  1. В окне терминала на компьютере разработки перейдите в корневую папку примера Node.js проекта, который вы скачали. Затем перейдите к папке iot-hub\Tutorials\ConnectivityTests.

  2. Установите необходимые библиотеки и запустите приложение имитированного устройства, выполнив в окне терминала следующие команды: Используйте устройство, строка подключения, которое вы записали при регистрации устройства.

    npm install
    node SimulatedDevice-1.js "{your_device_connection_string}"
    

    В окне терминала отображается сообщение об успешном подключении к центру:

    Screenshot that shows the simulated device connecting.

Итак, вы успешно прошли аутентификацию при подключении устройства с помощью ключа устройства, созданного Центром Интернета вещей.

Сброс ключей

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

  1. Чтобы сбросить первичный ключ устройства для устройства, выполните команду az iot hub device-identity update :

    # Generate a new Base64 encoded key using the current date
    read key < <(date +%s | sha256sum | base64 | head -c 32)
    
    # Reset the primary device key for test device
    az iot hub device-identity update --device-id {your_device_id} --set authentication.symmetricKey.primaryKey=$key --hub-name {your_iot_hub_name}
    
  2. В окне терминала на компьютере разработки снова запустите приложение имитированного устройства:

    npm install
    node SimulatedDevice-1.js "{your_device_connection_string}"
    

    Теперь при попытке подключения вы увидите следующую ошибку аутентификации:

    Screenshot that shows the connection failing after the key reset.

Создание маркера подписанного URL-адреса (SAS)

Если устройство использует один из пакетов SDK для устройств Центра Интернета вещей, код библиотеки из этого пакета SDK создает маркер SAS для аутентификации в Центре Интернета вещей. Маркер SAS создается на основе имени Центра Интернета вещей, имени устройства и ключа устройства.

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

Примечание.

Пример SimulatedDevice 2.js включает инструкции по созданию маркера SAS с помощью пакета SDK и без него.

  1. Выполните команду az iot hub genereate-sas-token, чтобы создать известный маркер SAS с помощью CLI:

    az iot hub generate-sas-token --device-id {your_device_id} --hub-name {your_iot_hub_name}
    
  2. Скопируйте полный текст созданного маркера SAS. Маркер SAS выглядит следующим образом: SharedAccessSignature sr=tutorials-iot-hub.azure-devices.net%2Fdevices%2FmyDevice&sig=xxxxxx&se=111111

  3. На компьютере разработки в окне терминала перейдите в корневую папку скачанного тестового проекта Node.js. Затем перейдите к папке iot-hub\Tutorials\ConnectivityTests.

  4. Установите необходимые библиотеки и запустите приложение имитированного устройства, выполнив в окне терминала следующие команды:

    npm install
    node SimulatedDevice-2.js "{Your SAS token}"
    

    В окне терминала отображается сообщение об успешном подключении к центру с помощью маркера SAS:

    Screenshot that shows a successful connection using a SAS token.

Итак, вы успешно прошли аутентификацию при подключении устройства с помощью маркера SAS, созданного командой интерфейса командной строки. Файл SimulatedDevice 2.js содержит пример кода, создающего маркер SAS.

Протоколы

Для подключения к Центру Интернета вещей устройство можно использовать любой из следующих протоколов:

Протокол Исходящий порт
MQTT 8883
MQTT через WebSocket. 443
AMQP 5671
AMQP через WebSocket; 443
HTTPS 443

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

Screenshot that shows a connection error when the outbound port is blocked.

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

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

Отправка сообщений устройства в облако

  1. Так как мы сбросим строка подключения для устройства в предыдущем разделе, используйте команду az iot hub device-identity connection-string show, чтобы получить обновленный строка подключения:

    az iot hub device-identity connection-string show --device-id {your_device_id} --output table --hub-name {your_iot_hub_name}
    
  2. Чтобы запустить имитированное устройство для отправки сообщений, перейдите в папку iot-hub\Tutorials\ConnectivityTests в скачанном коде.

  3. Установите необходимые библиотеки и запустите приложение имитированного устройства, выполнив в окне терминала следующие команды:

    npm install
    node SimulatedDevice-3.js "{your_device_connection_string}"
    

    В окне терминала отображаются сведения о попытке отправить телеметрию в Центр Интернета вещей.

    Screenshot that shows the simulated device sending messages.

Мониторинг входящих сообщений

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

  1. В портал Azure выберите центр Интернета вещей в раскрывающемся списке "Ресурс".

  2. Выберите метрики из раздела "Мониторинг " в меню навигации.

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

    Screenshot showing left pane metrics.

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

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

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

  1. В окне терминала запустите приложение имитированного устройства, выполнив следующую команду:

    node SimulatedDevice-3.js "{your_device_connection_string}"
    
  2. В отдельном окне используйте команду az iot hub invoke-device-method для вызова прямого метода на устройстве:

    az iot hub invoke-device-method --device-id {your_device_id} --method-name TestMethod --timeout 10 --method-payload '{"key":"value"}' --hub-name {your_iot_hub_name}
    

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

    Screenshot that shows the device confirming that the direct method was received.

    Когда имитированное устройство успешно принимает вызов прямого метода, оно возвращает подтверждение в центр:

    Screenshot showing that the device returns a direct method acknowledgment.

Проверка синхронизации двойников

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

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

  1. В окне терминала запустите приложение имитированного устройства, выполнив следующую команду:

    node SimulatedDevice-3.js "{your_device_connection_string}"
    
  2. В отдельном окне выполните команду az iot hub device-twin show , чтобы убедиться, что концентратор получил от устройства сообщаемые свойства:

    az iot hub device-twin show --device-id {your_device_id} --hub-name {your_iot_hub_name}
    

    В выходных данных команды вы увидите свойство devicelaststarted в разделе сообщаемых свойств. Это свойство содержит дату и время последнего запуска имитированного устройства.

    Screenshot showing the reported properties of a device.

  3. Чтобы убедиться, что концентратор может отправлять нужные значения свойств на устройство, используйте команду az iot hub device-twin update :

    az iot hub device-twin update --set properties.desired='{"mydesiredproperty":"propertyvalue"}' --device-id {your_device_id} --hub-name {your_iot_hub_name}
    

    Имитированное устройство выводит следующее сообщение, когда получает обновленное значение требуемого свойства от Центра Интернета вещей:

    Screenshot that shows the device confirming that the desired properties update was received.

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

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

Если вам больше не требуется Центр Интернета вещей, удалите его и группу ресурсов на портале. Для этого выберите группу ресурсов, содержащую центр Интернета вещей, и нажмите кнопку "Удалить".

Следующие шаги

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