如何使用IoT设备SDK连接到IoT Edge系统模块

时间:2019-05-31 10:08:09

标签: c# azure azure-iot-edge

我知道我们可以使用IoT Device SDK通过模块的连接字符串与IoT Edge设备中的模块进行通信。我可以连接到非系统边缘模块,但不能连接到系统模块。我想知道是否确实不允许这样做,是否有人知道对此的引用?

我指的是github中的官方示例。

这里是c# sample for module

ModuleClient moduleClient = ModuleClient.CreateFromConnectionString(s_moduleConnectionString, s_transportType);

var sample = new TwinSample(moduleClient);
sample.RunSampleAsync().GetAwaiter().GetResult(); // this call the code below

//My breakpoint in RunSampleAsync()
//it hangs at the line below
Twin twin = await _moduleClient.GetTwinAsync().ConfigureAwait(false);

我希望它对系统模块和非系统模块的行为相同。非系统模块可以正常工作。

1 个答案:

答案 0 :(得分:1)

您可以编写作为模块部署到运行IoT Edge的设备的代码。您的模块可以查询自己的twin和属性。包含边缘运行时的系统模块($edgeAgent$edgeHub)可以自己做。您不应尝试使用系统模块之一的身份连接到IoT中心,因为它会与系统模块冲突。

您可以在Azure门户中看到任何模块的双胞胎,包括系统模块双胞胎。您还可以将service SDK与共享访问策略一起使用以获取此信息。 (RegistryManager示例here演示了如何连接到IoT中心以获取孪生信息。它仅显示设备而非模块,但概念相似。)

边缘集线器(也称为$edgeHub)确实具有本地缓存​​,在该缓存中,它暂时保留接收到的消息,直到可以将它们传递到其他模块或云中为止。此缓存没有公共接口,它完全是内部的,存储在其中的数据格式随时可能更改,因此您不应尝试访问它。