问题描述
我们正在尝试创建一个简单的本地UI(在Windows 10 Edge框上运行的独立桌面应用程序),以在IoT Edge设备上显示总体运行状况和诊断指标。如果/当设备未连接到互联网(离线)时,UI必须可见。我们想要显示模块列表,它们的状态,上次连接时间等。所有这些信息都可以在“模块双胞胎”中找到,但是我看不到任何在离线状态下本地访问模块双胞胎的方法。是否有这些双胞胎的本地/影子副本,或者没有任何API可以查询每个模块的报告属性?
我们对edgeHub和edgeAgent模块特别感兴趣,因为它们包含有关所有其他模块的信息,但是除了shell命令iotedge list
,{{1}之外,我看不到任何API可以查询那些模块。 }等。
唯一的解决方案似乎是以编程方式执行这些shell命令并从StandardOutput刮取结果输出。似乎应该有更好的方法。
解决方法
如果我想在IoT Edge流程之外且离线时访问模块twin,则可能会mount a volume to the module并将报告的属性保存在JSON文件中。这样,您的本地UI可以访问主机上的文件。当然,这确实意味着模块的双胞胎现在在主机上处于可读的未加密状态。
更复杂的情况是在每个模块上公开HTTP端点以访问最近的已知值。您需要指定一个在每个模块上打开的端口,此功能才能起作用。您可以在部署json中打开端口:
"createOptions": {
"ExposedPorts": {
"80/tcp": {}
}
}
,
此外,请考虑利用1.0.10版本中系统模块中的新内置指标。这是一个实验室,可以帮助您使用候选发布者位进行端到端设置: https://labs.iotedge.dev/codelabs/monitor-iotedge