在Azure IoT中预配设备时如何发送自定义负载?

时间:2019-03-27 09:09:21

标签: java azure iot azure-iot-hub azure-iot-sdk

我正在尝试使用Azure IoT设备配置服务将设备配置到Azure IoT,其中我正在使用管理注册组下的自定义分配策略。

当设备注册到DPS(设备供应服务)时,它会触发Azure功能,我将在其中确定将设备分配给哪个IoT中心。

在我的职能中,我必须基于一些自定义有效负载来做出此决定,在将其注册到DPS时需要从设备发送这些自定义有效负载。

注册时如何将自定义有效负载从设备发送到DPS,这样我就可以在Azure功能中获取该有效负载并做出决定了?

我将Java用作编程语言。

3 个答案:

答案 0 :(得分:1)

如果您使用的是基于X.509的身份验证,则您的Azure功能将在请求中(在clientCertificate字段中获取实际的证书。

因此,您可能想在证书中使用可以在函数中读取的自定义字段,然后根据其内容分配选择的IoT中心。

另一种方法可能更优雅,因为在证书中具有自定义字段可能会公开最好保留为私有的信息,这将是在单独的商店中维护registrationId,customerId,customerId等之间的映射,可以在您的Azure函数中查询。

答案 1 :(得分:0)

我通过单独发送自定义有效负载而不是在证书的自定义字段中实现了Node.js中的上述功能。 Here是用于处理node.js中Azure函数中的自定义有效负载的链接。根据Azure文档here,C,C#,JAVA和Node.js客户端SDK中提供了此功能。

关于在设备注册期间here发送有效载荷是您在Java中应该使用的方法。

使用上述方法,您可以避免在证书的自定义字段中暴露数据。

答案 2 :(得分:0)

实际上,Azure SDK 支持在通过设备预配客户端注册设备时发送自定义负载。请参阅 .NET SDK https://docs.microsoft.com/es-es/dotnet/api/microsoft.azure.devices.provisioning.client.provisioningregistrationadditionaldata?view=azure-dotnet

中的 ProvisioningRegistrationAdditionalData 类

我认为 Java SKD 中的等效项是 AdditionalData Class https://docs.microsoft.com/es-es/java/api/com.microsoft.azure.sdk.iot.provisioning.device.additionaldata?view=azure-java-stable

此外,您还可以在注册设备时使用 DPS REST API 提供自定义负载。在这篇博文 (Register Device using rest API of Azure device provisioning service?) 的答案中,您可以找到使用 curl 为设备配置自定义负载的请求示例。

curl -L -i -X PUT --cert ./chain.pem --key ./iot-device-1.key.pem -H 'Content-Type: application/json' -H 'Content-Encoding:  utf-8' -d '{"registrationId": "iot-device-1", "payload": {"CustomProperty": "CustomValue"}}' https://global.azure-devices-provisioning.net/XXXXXXXXXXX/registrations/iot-device-1/register?api-version=2019-03-31

另请查看该答案所基于的帖子 (http://busbyland.com/azure-iot-device-provisioning-service-via-rest-part-1/) 和 REST API 文档 (https://docs.microsoft.com/es-es/rest/api/iot-dps/runtimeregistration/registerdevice)。