0

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

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

  • 每隔一分钟:请求所有“$edgeHub”模块身份孪生
  • 将“$edgeHub”报告的客户端保存在数据库中
  • 从此数据库中获取时间线

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

从 '$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 监视设备状态的更多信息的回复。

4

3 回答 3

2

1.查询

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

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

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

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

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

IS_OBJECT($twin.properties.reported.clients)

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

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

于 2020-11-30T14:21:44.213 回答
0

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

于 2020-12-01T04:03:15.103 回答
-1

另一种方法,尝试将设备生命周期事件 Device connected,Device Disconnected 从事件网格发送到事件中心。并从事件中心将其发送到任何端点以处理事件,即可能是从事件中心侦听事件的模块。

所以流程将是这样的 -> IoT Hub Blade -> Events -> Add Subscription -> Add Event hub 命名空间端点

于 2020-12-01T09:34:47.573 回答