Iot edge 报告客户端状态的时间线

Timeline of Iot edge reported clients status

如何绘制(我的意思是获取数据绘制)IotHub设备客户端连接状态的时间线?

我想从我的所有设备中绘制可用性状态时间表,为此我正在执行以下操作:

当我的设备数量增加时,我会做很多请求,我想知道是否有其他优化的方法可以使用 Azure 物联网资源来做。​​

从“$edgeHub”模块 Twin 我得到了样本:

"reported": {
  "clients": {
    "iot/device": {
      "status": "Connected",
      "lastConnectedTimeUtc": "2020-11-30T12:00:41.5918442Z",
      "lastDisconnectedTimeUtc": "2020-11-30T12:00:41.5737114Z"
    }
  }

对于 API 个调用,我正在使用 https://github.com/amenzhinsky/iothub

感谢任何帮助我调查更多有关 Azure 监控设备状态的回复。

1。查询

与其一一请求所有模块孪生,我会选择使用 IoT 中心查询。

SELECT * FROM devices.modules WHERE is_defined(properties.reported.clients)

我不知道你的 SDK 是否支持,但大多数(如果不是全部)官方 SDK 都支持 运行 查询。这将 return 每个具有 clients 报告 属性 定义的模块孪生。您可以 运行 按计划进行,然后按照您最初的计划将该输出保存到数据库中。

2。将所有模块孪生事件路由到端点

这个有点棘手,但您可以根据查询路由 device/module 更改。然后,您可以将所有事件路由到一个单独的端点。路线类似于:

IS_OBJECT($twin.properties.reported.clients)

您可以阅读有关消息路由的更多信息here。这种方法的好处是您无需向 IoT 中心发出任何请求并实时接收更改。您甚至可以使用 Azure 流分析来使用这些事件,它原生支持输出到 Power BI、Table 存储和 Cosmos DB。结果:您没有编写任何代码,仅使用了 Azure 服务。如果你想利用 Azure 流分析,你可能需要咨询 Azure 定价计算器。

注意:我没有彻底测试解决方案 #2,但理论上这 应该 有效。

要添加到@matthijs-van-der-veer 的回答,您还可以订阅设备孪生更改并更新孪生更改事件的计数器。

另一种方法,尝试将设备生命周期事件设备已连接、设备已断开连接从事件网格发送到事件中心。然后从事件中心将其发送到任何端点以处理事件,即可能是从事件中心侦听事件的模块。

所以流程会是这样-> IoT 中心 Blade -> 事件 -> 添加订阅 -> 添加事件中心命名空间终结点