【问题标题】:Do leaf/downstream devices connect directly to iot-hub even when edge is used as gateway?即使边缘用作网关,叶/下游设备是否直接连接到 iot-hub?
【发布时间】:2019-07-12 07:13:48
【问题描述】:

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

connection-string-for-iothub-with-gatewayhostwayAppended

这让我假设下游设备将消息传输到端点(prolly 消息/*)到 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 的内容)

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 根据文档,网关主机名位于 /etc/iotedge/config.yaml 。在我看来,它只是我的边缘设备的名称(不是我期望的主机地址/IP 加上端口)。我只是想知道叶流设备如何在没有网络地址的情况下将数据/消息传输到设备/边缘网关。
    • 如果您希望叶设备连接到您的边缘设备,那么您需要使用本地网络上可解析的网关主机名。
    • 是的,这正是我的意思。我想我必须在本地 DNS 中设置我的 config.yaml 中指定的“主机名”。
    • 是的,config.yaml 中的 hostname 应该是 DNS 可解析的。另外:如果您为此下游设备建立了父/子关系,那么您可以通过直接调用网关作为连接主机来简化连接字符串。例如:HostName=myGatewayDevice;DeviceId=myDownstreamDevice;SharedAccessKey=xxxyyyzzz 来源:docs.microsoft.com/en-us/azure/iot-edge/…
    • 另外,您在 config.yaml 中的“主机名”可以只是边缘设备的 IP 地址。它不必是 FQDN。它只需要匹配连接字符串中的 GatewayHostName (即,如果您在连接字符串中使用 IP 地址,那么您还必须使用 IP 地址作为 config.yaml 中的“主机名”)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多