Передача полезных данных между устройствами и DPS

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

Сценарии использования

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

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

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

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

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

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

{ 
    "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 показан текст успешного ответа для регистрации с помощью аттестации доверенного платформенного модуля.

{
   "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 и может содержать любые данные, относящиеся к решению Интернета вещей или сценарию.

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

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

Поддержка IoT Edge

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

Ниже приведен пример фрагмента кода, из /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"
}

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