即使将边缘用作网关,叶子/下游设备也可以直接连接到物联网吗?

时间:2019-07-12 07:13:48

标签: azure azure-iot-hub azure-iot-edge azure-iot-suite

我正在尝试将物联网边缘设备设置为边缘网关。我们不希望叶子/传感器/下游设备直接连接到互联网/云,因此,我希望物联网边缘网关(顾名思义)能够桥接下游设备与云/物联网之间的连接。毂。但是,我意识到在任何设备级别,iot-hub / edge的连接字符串都只是

iothub-with-gatewayhostwayAppendment的连接字符串

这使我假设下游设备将消息传输到云/ 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)

1 个答案:

答案 0 :(得分:2)

如果您的连接字符串包含网关主机名-并且您在设备上使用的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中心主机名。