Eclipse Vorto:物联网设备集成的下一步
亚历山大·埃德尔曼
你好(中文为“你好”),我在新加坡工作,自 2006 年以来一直在罗伯特博世担任软件工程师。我对物联网充满热情,并相信开放标准决定了各种物联网平台上的设备之间的成功交互.这就是我积极参与 Eclipse IoT Vorto 项目的原因,该项目旨在提供基于云的工具来统一描述物联网设备,并将它们集成到基于开放物联网标准的各种物联网平台中。除了物联网极客的一面,我喜欢亚洲美食,这让我可以练习我的筷子技巧。你也可以看到我在球场上和我的朋友们打几个网球。
看看智能工厂和家庭等例子,联网设备不仅提高了公司的成本和资源效率,还提高了生活的安全性和便利性。由于设备和传感器制造商数量庞大,制造商、平台和集成商面临着新的挑战。
主要问题是如何确保连接的设备可以无缝通信 使用云平台,无论制造商、技术和系统如何。过去,开发人员构建了专门为具有相同 API 的有限设备集而设计的 IoT 解决方案。在更改设备类型或切换设备制造商时,设备集成需要耗时的重构才能与新设备配合使用。
想象一下,您计划集成一个物联网解决方案以在大型农作物农场进行资产跟踪。您不仅要跟踪当前位置,还要跟踪拖拉机、犁和其他农业设备的温度和加速度。
在考虑选择合适的物联网设备时,会出现两个问题:
- 我们如何才能找出哪些设备具有我们想要的功能类型?
- 我们如何避免特定设备之间的紧密耦合,以便在不进行过多重构的情况下更轻松地切换到类似设备?
这就是开源 Eclipse Vorto 的用武之地。
Eclipse Vorto 简介
资料来源:Eclipse Vorto
Eclipse Vorto 提供了一个称为 Vorto 信息模型的抽象层,以及一种领域特定语言 (DSL),它描述了连接设备的所有元信息,如属性和功能。
通过添加一个抽象层,我们创建了一个一致的接口,允许我们使用具有相似功能的不同类型的设备。
Eclipse Vorto 项目基于四个主要组件构建:
- Vorto DSL: Vorto DSL 是一种可读且易于理解的特定领域语言,专门设计为即使非开发人员也可以使用。它用于创建不同设备的抽象模型。
- 元模型: 元模型用于定义不同实体(如信息模型、功能块和数据类型)之间的关系。
- 代码生成器: 基于 DSL 和元模型,代码生成器提供了一种复杂但简单的方法来创建源代码,以便将定义的物联网设备与物联网解决方案平台方便地集成。
- Vorto 存储库: 存储库用于存储、管理和分发创建的信息模型和功能块以供重复使用。
Eclipse Vorto 是完全开源的,由 Eclipse IoT 工作组在博世的管理下开发。
蒂姆·格罗斯曼
作为一名德国计算机科学专业的学生,在过去的一年半里,我在博世的 3 个不同部门承担了任务。我对开源和教育科技技术特别感兴趣。我相信物联网和自动化在改变和改善人们生活、工作和享受生活的方式方面具有巨大的潜力。作为一个充满热情的学习者和开发者,我总是热衷于学习新的技能和工具。除了日常工作之外,我还为 Instagram 构建并维护了世界上最大的免费开源自动化机器人。闲暇之余,我喜欢和朋友一起爬山,到国外旅游。
Eclipse Vorto 实践
让我们看一个更具体的例子来更好地理解这个抽象。想象一下,一家农业企业想要跟踪用于收集小麦作物的车辆和资产。在拥有多台收割机、拖拉机和其他资产的大型农场中,我们想知道每辆车的使用时间及其位置历史。
将此类信息与温度和湿度值相结合,我们可以为所有车辆和资产启用智能维护计划。每个车辆和资产的位置也为我们提供了防盗能力。
提供此类功能的解决方案之一是来自博世的资产追踪解决方案 (TRACI)。

为了创建这个特定设备的数字模型,我们需要一些基本的构建块,用于组装 TRACI 信息模型。
跟踪设备最重要的组件之一是电池。为了能够监控每个设备的电池状态,我们可以在所谓的功能块中描述状态。
功能块是一种通用模型,以后可以在其他设备信息模型中重复使用。
我们可以这样定义:
命名空间 org.eclipse.vorto 版本 1.0.0 显示名称“电池” 描述“电池功能块” 类别外围 使用 org.eclipse.vorto.Voltage ; 1.0.0 功能块电池扩展 org.eclipse.vorto.Voltage { 地位 { 强制剩余容量为浮动这里我们描述一个功能块 抽象地描述了某个实体,其中包含一个介于 0 和 100 之间的强制性数值。
由于我们的状态是一个百分比值,我们可以进一步抽象它,再次使不同的组件可重用。因此,我们将创建所谓的 Datatype .在这里,我们可以定义一个实体(在本例中为百分比),它具有相同的限制,即介于 0 和 100 之间的数值。
命名空间 org.eclipse.vorto.types 版本 1.0.0 显示名称“百分比” 描述“百分比的数据类型” 类别单位 实体百分比{ 强制值为浮点数一旦我们创建了这个数据类型,它就可以在我们的电池功能块中导入和使用,并替换具体的实现。
命名空间 org.eclipse.vorto 版本 1.0.0 显示名称“电池” 描述“电池功能块” 类别外围 使用 org.eclipse.vorto.types.Percentage ; 1.0.0 使用 org.eclipse.vorto.Voltage ; 1.0.0 功能块电池扩展 org.eclipse.vorto.Voltage { 地位 { 强制剩余容量百分比 } }我们可以对集成到我们的 TRACI 设备中的所有传感器(如温度传感器)重复此过程 , GPS , 加速 , 和连接模块 .然后可以将所有这些功能块组装在 Vorto 信息模型中 然后可以将其用作代码生成器的起点,为您生成设备集成代码存根。
命名空间 com.bosch.ps 版本 1.0.0 显示名称“Traci” 描述“Traci 的信息模型” 使用 org.eclipse.vorto.Geolocation; 1.0.0 使用 org.eclipse.vorto.Acceleration; 1.0.0 使用 org.eclipse.vorto.MagneticStrength; 1.0.0 使用 org.eclipse.vorto.Temperature; 1.0.0 使用 org.eclipse.vorto.Battery; 1.0.0 使用 org.eclipse.vorto.Connectivity; 1.0.0 信息模型 Traci { 功能块{ 电池作为电池 位置作为地理定位 加速度作为加速度 温度作为温度 磁性强度作为磁性强度 蓝牙连接作为连接 lorawanConnectivity 作为连接 } }好吧,那我们做这一切是为了什么?
假设我们现在想要使用其他制造商提供的与 TRACI 设备具有相似功能的设备。我们已经创建了一个集成了 TRACI 设备的 IoT 解决方案,如果要重构我们的系统以与来自不同制造商的设备配合使用将是一个巨大的痛苦。
由于我们已经定义了我们的功能块和数据类型,我们可以为我们的新设备定义一个新的信息模型,它使用与 TRACI 模型相同的功能块。
让我们将 TRACI 模型与具有类似功能的产品 NimbeLink 的 NL-AT2VS 进行比较。
命名空间 com.nimbelink.nl 版本 1.0.0 显示名称“NLAT2VS” 描述“NLAT2VS的信息模型” 使用 org.eclipse.vorto.Geolocation; 1.0.0 使用 org.eclipse.vorto.Battery; 1.0.0 使用 org.eclipse.vorto.Connectivity; 1.0.0 使用 org.eclipse.vorto.Temperature; 1.0.0 使用 org.eclipse.vorto.Humidity; 1.0.0 使用 org.eclipse.vorto.Acceleration; 1.0.0 信息模型 NLAT2VS { 功能块{ 电池作为电池 加速度作为加速度 位置作为地理定位 温度作为温度 湿度作为湿度 wifiConnectivity 作为连接 作为连接性的蜂窝连接 } }我们可以看到,在这个模型中,即使连接模块也有所不同,但仍然使用抽象的连接功能块。抽象允许我们替换或组合具有相似功能的不同设备,而无需太多集成开销。
哪些人应该使用 Eclipse Vorto?
鉴于 IoT 解决方案的制造、集成和开发所涉及的实体的多样性,将从 Eclipse Vorto 中受益最大的实体是:
设备制造商
Eclipse Vorto 可以帮助设备制造商实现与现有基础设施中其他设备的互操作性。在选择要集成的设备时,灵活性对客户来说是一个巨大的优势。
通过使用技术独立的信息模型,设备制造商避免了为所有类型的目标平台生成实现方式的开销。这通过发布可以使用代码生成器转换为具体集成的信息模型来节省金钱和时间。
使用 Eclipse Vorto 的一大优势是设备协议层的进一步演进与设备控制器逻辑分离。

物联网平台
物联网平台必须连接来自各种制造商的各种不同的物联网设备,并支持所有不同的协议和格式。通过使用 Eclipse Vorto 的代码生成器,可以通过部分或完整的源代码生成大大减少这项工作。
此外,Vorto 存储库充当运行时存储库,允许平台以 JSON 模式检索设备功能。然后可以在数字孪生中解释和验证这些模式,或用于引导连接器以进行通信。
尽管这意味着增加初始开发工作,但考虑到大量设备和物联网的增长,它会随着时间的推移而获得回报。
解决方案开发人员
在将连接设备和智能传感器集成到 IoT 解决方案中时,开发人员需要涵盖范围广泛的不同设备 API,这会导致巨大的编码开销。 Eclipse Vorto 可以通过提供代码生成器来减少所涉及的开发工作量,这些代码生成器提供可简化设备集成的通用代码存根。

展望物联网的未来
通过保证互操作性和协调设备接口,Eclipse Vorto 有可能改变设备制造商、物联网平台运营商和应用程序开发人员使用物联网设备的方式。
它可以减少制造商的开发工作,并简化平台提供商和集成商的设备集成,同时解决提到的许多物联网开发挑战。
如果您想了解有关该项目的更多信息,请务必查看 GitHub 存储库并给它一个 star。
你也可以试试 并使用 Vorto 存储库中提供的复杂的设备创建、集成和可视化教程。
物联网技术