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


Как передавать полезные данные между устройствами и DPS

Устройства, которые регистрируются в DPS, должны предоставить идентификатор регистрации и допустимые учетные данные (ключи или сертификаты X.509) в процессе регистрации. Однако могут существовать решения или сценарии Интернета вещей, в которых требуются дополнительные данные с устройства. Например, веб-сервис настраиваемой политики выделения может использовать такие сведения, как номер модели устройства, чтобы выбрать Центр Интернета вещей для предоставления устройства. Аналогичным образом устройство может потребовать дополнительных данных в ответе регистрации, чтобы упростить логику на стороне клиента. DPS предоставляет возможность устройства отправлять и получать необязательную полезную нагрузку при их регистрации.

Когда использовать

Распространенные сценарии отправки необязательной нагрузки:

  • Пользовательские политики распределения могут использовать нагрузку устройства, чтобы выбрать центр обработки данных IoT для устройства или установить его первоначальный двойник устройства. Например, вы можете распределять устройства на основе модели устройства. В этом случае можно настроить устройство для передачи информации о его модели при регистрации. DPS передает полезные данные устройства в пользовательский веб-хук выделения. Затем веб-перехватчик может определить, к какому IoT-хабу будет назначено устройство на основе информации о модели устройства. При необходимости веб-перехватчик также может возвращать данные обратно на устройство в виде объекта JSON в ответе веб-перехватчика. Дополнительные сведения см. в разделе "Использование нагрузок устройства в пользовательском распределении ресурсов".

  • Устройства IoT Plug and Play (PnP) могут использовать полезные данные для отправки идентификатора модели при регистрации в DPS. Примеры этого использования можно найти в примерах PnP в пакете SDK или примерах репозиториев. Например, термостат C# PnP или контроллер температуры Node.js PnP.

  • Устройства IoT Central, которые подключаются через DPS, должны соблюсти конвенциям IoT Plug and Play и отправлять свой идентификатор модели при регистрации. IoT Central использует идентификатор модели для назначения устройства правильному шаблону устройства. Дополнительные сведения см. в статье о реализации устройств и рекомендациях для IoT Central.

Устройство отправляет полезные данные в службу DPS

Когда ваше устройство вызывает Register Device для регистрации в DPS, оно может включать дополнительные данные в свойство полезной нагрузки. Например, в следующем формате JSON показано тело запроса на регистрацию с помощью аттестации TPM.

{ 
    "registrationId": "mydevice", 
    "tpm": { 
        "endorsementKey": "xxxx-device-endorsement-key-xxxx", 
        "storageRootKey": "xxx-device-storage-root-key-xxxx" 
    }, 
    "payload": { A JSON object that contains your additional data } 
} 

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

Служба DPS возвращает данные на устройство

DPS может вернуть данные устройству через ответ на регистрацию. В настоящее время эта функция используется исключительно в пользовательских сценариях выделения. Если веб-перехватчик настраиваемой политики выделения должен вернуть данные на устройство, он может передать данные обратно в виде объекта JSON в ответе веб-перехватчика. DPS затем передаст эти данные обратно в свойство registrationState.payload в ответе Register Device. Например, в следующем JSON показано тело успешного ответа для регистрации с использованием аттестации доверенного платформенного модуля (TPM).

{
   "operationId":"5.316aac5bdc130deb.b1e02da8-xxxx-xxxx-xxxx-7ea7a6b7f550",
   "status":"assigned",
   "registrationState":{
      "registrationId":"my-tpm-device",
      "createdDateTimeUtc":"2022-08-31T22:02:50.5163352Z",
      "assignedHub":"sample-iot-hub-1.azure-devices.net",
      "deviceId":"my-tpm-device",
      "status":"assigned",
      "substatus":"initialAssignment",
      "lastUpdatedDateTimeUtc":"2022-08-31T22:02:50.7370676Z",
      "etag":"xxxx-etag-value-xxxx",
      "tpm": {"authenticationKey": "xxxx-encrypted-authentication-key-xxxxx"},
      "payload": { A JSON object that contains the data returned by the webhook }
   }
}

Свойство полезной нагрузки должно быть объектом JSON и может содержать любые данные, относящиеся к вашему IoT-решению или сценарию.

Поддержка пакета SDK

Эта функция доступна в клиентских пакетах SDK для C, C#, Java и Node.js. Дополнительные сведения о пакетах Azure IoT SDK, доступных для IoT Hub и Службы подготовки устройств IoT Hub, см. в Microsoft Azure IoT SDKs.

Поддержка IoT Edge

Начиная с версии 1.4 IoT Edge поддерживает отправку полезных данных, содержащихся в JSON-файле. Файл полезных данных считывается и отправляется в DPS, когда устройство (повторно) зарегистрировано, что обычно происходит при первом выполнении iotedge config apply. Вы также можете принудительно перечитать и зарегистрировать его с помощью команды CLI iotedge system reprovision для повторного конфигурирования.

Ниже приведен пример фрагмента из /etc/aziot/config.toml, в котором свойству payload присвоен путь к локальному JSON-файлу.

   [provisioning]
   source = "dps"
   global_endpoint = "https://global.azure-devices-provisioning.net"
   id_scope = "0ab1234C5D6"

   # Uncomment to send a custom payload during DPS registration
   payload = { uri = "file:///home/aziot/payload.json" }
 

Файл полезных данных (в данном случае /home/aziot/payload.json) может содержать любой допустимый json, например:

{
    "modelId": "dtmi:com:example:edgedevice;1"
}

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