一、介绍
设备接入是物联网(IoT)生态系统的关键组成部分,而不同厂商的设备之间缺乏统一的标准和规范,对接时需要进行大量的适配工作,增加了开发难度和时间成本。
为了应对这一挑战,美的楼宇科技研究院团队专门打造了一款具备泛化协议接入的边缘产品:driver-box。
它基于插件化的架构设计,将主流的通信协议(Modbus、Bacnet、HTTP、MQTT等)和私有化 TCP 协议完美的融合在一个应用服务中。并结合动态解析脚本,以一种灵活的方式提供设备数据的解析、清洗、再加工等能力。
Gitee:https://gitee.com/iBUILDING-X/driver-box
文档:https://ibuilding-x.gitee.io/driver-box/
二、优点
-
高效接入:标准协议配置化接入,非标协议低代码动态适配,实现设备快速接入。
-
接入即标准:设备数据采集之后立即执行标准化加工:统一模型、统一服务、统一流程。
-
数据降噪:感知并消除异常数据、重复性无意义数据,提升数据采集质量。
-
资源优化:基于对IoT的理解和经验,提供定向调优策略。
三、更新内容
早期的 driver-box 融合了各类主流物联网协议,能够非常方便的对接各类设备,再将采集到的设备数据转发至 Edgex 的消息总线,相当于是一款万能驱动服务。
但这种模式存在一个弊端:对于一些简单的场景,driver-box 内置的多数协议是多余的,且 edgex 的整套微服务架构对此类场景而言又过于复杂。
所以在v0.4版本中,我们对 driver-box 代码作了全面重构,使其更加趋于模块化设计。未来 driver-box 将具备协议层和数据转发层自由组织的能力,实现特定场景、设备、协议的定向编译。
协议层根据项目实际情况按需引入插件,数据转发层可绕过 edgex 架构直接上云或转发至边缘服务。使得 driver-box 可以更加高效地运行在更低规格的边缘网关中。
代码演示
driver-box内置数据转发层实现:export.DefaultExport
,目前还是个空实现,后续会调整成mqtt上报。
func main() { driverbox.Start([]export.Export{&export.DefaultExport{}}) select {} }
若数据转发层为:Edgex,可引用:driverbox-edgex
func main() { driverbox.Start([]export.Export{&edgex.EdgexExport{}}) select {} }
数据转发层支持多 Export 共存,提供设备数据多目的地的分发能力。
例如下面的示例,设备采集到的数据同时上报给了 edgex 总线和 iBUILDING 平台(非开源模块)。
func main() { //注册通信插件 driverbox.RegisterPlugin("bacnet", &bacnet.Plugin{}) //上报Edgex driverbox.Start([]export.Export{ &edgex.EdgexExport{}, //上报Edgex消息总线 ibuilding.NewExport(), //直接上报云端 }) select {} }
除此之外,示例中还通过driverbox.RegisterPlugin
注册了 bacnet 协议插件用于扩展 driver-box 的能力。
四、最后
driver-box 适用于各种不同的应用场景,包括且不限于智慧城市、智慧工厂、智慧园区、智慧家居、智慧医院等。我们期望通过开源这种开放、共享和协作的组织文化,促进创新和创造力的释放,从而推动社会的进步和发展。在此,非常欢迎更多的社区同学,共同参与到 driver-box 的项目建设中来。
还没有评论,来说两句吧...