即使将边缘用作网关,leaf/downstream 设备是否直接连接到 iot-hub?

Do leaf/downstream devices connect directly to iot-hub even when edge is used as gateway?

我正在尝试将物联网边缘设备设置为边缘网关。我们不希望我们的 leaf/sensor/downstream 设备直接连接到 internet/cloud,因此我希望 iot-edge-gateway(顾名思义)桥接下游设备和 cloud/iot-hub。但是,我意识到 iot-hub/edge 在任何设备级别的连接字符串只是

连接字符串为 iothub-with-gatewayhostwayAppended

这让我假设下游设备将消息传输到端点 (prolly messages/* ) 到 cloud/iot-hub 并且网关从那里获取它(也许然后处理该数据)并将其转发回去到 $upstream,它避开了网关的整个点。

这里是 IOT-EDGE-GATEWAY 的消息路由部分 https://docs.microsoft.com/en-us/azure/iot-edge/how-to-create-transparent-gateway,在来自下游设备的路由消息部分

{
    "routes":{
        "sensorToAIInsightsInput1":"FROM /messages/* WHERE NOT IS_DEFINED($connectionModuleId) INTO BrokeredEndpoint(\"/modules/ai_insights/inputs/input1\")", 
        "AIInsightsToIoTHub":"FROM /messages/modules/ai_insights/outputs/output1 INTO $upstream" 
    } 
}

听起来像是网关正在将落在内置端点(默认)上的消息路由到 $upstream。我在网络上找不到关于此主题的任何其他更清晰的文档。如果有人解决这个问题,我将不胜感激。我期待边缘网关的连接字符串(我在设备端提到的是 localhost:port 而不是 cloudaddress+gatewayhostname)

如果您的连接字符串包含网关主机名 - 并且您在设备上使用的 SDK 可以正确处理此问题,则设备仅连接到网关,而不连接到 IoT 中心。

您可以在此处查看 .NET SDK 中的示例:

this.HostName = builder.GatewayHostName == null || builder.GatewayHostName == "" ? builder.HostName : builder.GatewayHostName;

https://github.com/Azure/azure-iot-sdk-csharp/blob/f86cb76470326f5af8426f3c2695279f51f6e0c8/iothub/device/src/IotHubConnectionString.cs#L30

如果设置了网关主机名,它实际上会覆盖连接的 IoT 中心主机名。