我们可以使用 Azure IoT 边缘模块配置下游设备吗?

Can we provision the downstream devices using Azure IoT edge modules?

我可以使用设备配置服务 (DPS) 来配置使用边缘模块的下游设备吗?对于身份转换网关场景,Edge 网关应该拥有所有下游设备的连接字符串,还是可以使用 DPS 服务获取连接字符串?

在具有下游设备的情况下,设备预配服务目前根本无法通过 IoT Edge 工作。

根据我的经验,如果您使用的是 x.509 证书,则必须单独设置每个下游设备,并具有将父设备(IoT Edge 设备)分配给下游设备的机制。 (目前,我认为这是在预览中,属性 名称称为您需要设置的 deviceScope)。

文档还说:"Identity translation - Devices that cannot connect to IoT Hub can connect to a gateway device.." 这意味着在身份转换情况下,您的下游设备对 IoT 中心不可见,因此对 DPS 也是可见的,但它可能与您的 IoT Edge 设备位于同一网络中。

现在,根据业务案例,如果您的下游设备与 IoT 中心根本没有连接和可见性,另一种方法是您根本不将下游设备注册为设备。例如,您可以尝试将数据推送到 RabittMQ 服务器,并在 IoT Edge 上有一个模块订阅、获取数据并发送到 IoT 中心。或者,如果您的下游设备只有本地网络访问权限,请在其中一个 IoT Edge 模块中设置某种端点,然后将数据从下游设备发送到该端点。

您可以拥有一个自定义模块,它将通过 DPS 进行供应工作。从 1.6 版本的 Edge Runtime 开始,没有内置的子设备配置。没有什么可以阻止您编写一个模块来代理来自您的子设备的 dps 调用,或者如果您进行协议转换则实现您的自定义握手。

下面是DPS设备注册的调用结构:

 const registrationOptions = {
        url: `https://${dpsEndpoint}/${idScope}/registrations/${deviceId}/register?api-version=${dpsVersion}`,
        method: 'PUT',
        json: true,
        insecure: true,
        rejectUnauthorized: false,
        headers: { Authorization: sasToken },
        body: bodyJson,
    };

您的设备可以通过边缘模块自行注册,或者如果您使用协议转换,边缘模块可以注册设备。您会发现以下 github 存储库有助于了解网关如何注册子设备。 https://github.com/Azure/iotc-device-bridge