首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >报告客户状态的时间线

报告客户状态的时间线
EN

Stack Overflow用户
提问于 2020-11-30 13:18:33
回答 3查看 114关注 0票数 0

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

我想从我的所有设备中绘制一个可用性状态时间表,因为我正在做以下工作:

  • 每隔一分钟一次:请求所有“$edgeHub”模块标识双胞胎
  • 将“$edgeHub”报告的客户端保存在数据库中
  • 从这个数据库中获取时间线

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

从“$edgeHub”模块Twin中,我得到了以下示例:

代码语言:javascript
运行
复制
"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监控设备状态的响应。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-11-30 14:21:44

1.查询

我将选择使用IoT集线器查询,而不是一个一个地请求所有的模块双胞胎。

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

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

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

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

IS_OBJECT($twin.properties.reported.clients)

您可以阅读关于消息路由这里的更多信息。这种方法的好处是,您不会对IoT集线器进行任何请求并实时接收更改。您甚至可以使用使用这些事件,它支持本地输出到Power、Table存储和Cosmos DB。结果:您没有编写代码,只使用Azure服务。如果你想利用,你可能需要咨询Azure定价计算器。

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

票数 2
EN

Stack Overflow用户

发布于 2020-12-01 04:03:15

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

票数 0
EN

Stack Overflow用户

发布于 2020-12-01 09:34:47

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

因此,流程将类似于-> IoT集线器->事件->添加订阅->添加事件集线器命名空间端点

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65074343

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档