新的v3.0.0 Sparkplug®规范对之前版本进行了整理和正式化。根据Eclipse Sparkplug工作组的说法,其目标是澄清v2.2版本中存在的模糊不清的地方,并明确规范性的陈述,同时保持v2.2规范的总体意图。
例如,新规范的第2章“原则”取代了2.2规范中的“背景”章节。现在,它详细描述了Sparkplug的关键原则,第5章“操作行为”非常详细地描述了Sparkplug环境的操作方面。该组织还包括了MQTT v5.0的特定设置,特别是关于不同会话设置的设置,例如MQTT 3.1.1中的“清除会话”与v5.0中的“清除开始”。
Sparkplug基础设施对MQTT服务器(在规范文件中,将“MQTT代理”称为“MQTT服务器”)有特定的要求。任何完全符合MQTT v3.1.1的服务器/代理都将符合Sparkplug基础设施的要求。
然而,并不是MQTT规范的所有功能都是必需的。
基本要求功能包括:
- 用于数据的QoS 0(最多一次)
- 用于状态管理的QoS 1(至少一次)
- 保留消息支持
- 状态管理的“遗嘱消息”(LWT)
- 支持通配符
规范区分了“符合Sparkplug MQTT服务器”和“了解Sparkplug MQTT服务器”。让我们快速看看两者之间的区别。
符合Sparkplug MQTT服务器
符合Sparkplug MQTT服务器必须支持以下功能:
- 在QoS 0上发布和订阅
- 在QoS 1上发布和订阅
- 遗嘱消息的所有方面,包括使用保留标志和QoS 1
- 保留标志的所有方面
了解Sparkplug MQTT服务器
而了解Sparkplug MQTT服务器包括了符合Sparkplug MQTT服务器的所有方面,并且必须具备以下额外的能力:
- 在MQTT服务器传递NBIRTH消息时,存储NBIRTH消息
- 将NBIRTH消息提供在以下形式的主题上:
$sparkplug/certificates/{namespace}/{group_id}/NBIRTH/{edge_node_id}
假设group_id=GROUP1和edge_node_id=EON1,则必须在主题上提供NBIRTH消息:$sparkplug/certificates/spBv1.0/GROUP1/NBIRTH/EON1
- 将NBIRTH消息提供在以下形式的主题上:
$sparkplug/certificates/{namespace}/{group_id}/NBIRTH/{edge_node_id}
并将MQTT保留标志设置为true
- 将DBIRTH消息提供在以下形式的主题上:
$sparkplug/certificates/namespace/group_id/DBIRTH/edge_node_id/device_id
假设group_id=GROUP1,edge_node_id=EON1和device_id=DEVICE1,则必须在主题上提供DBIRTH消息:$sparkplug/certificates/spBv1.0/GROUP1/DBIRTH/EON1/DEVICE1
- 将DBIRTH消息提供在以下形式的主题上:
$sparkplug/certificates/{namespace}/{group_id}/DBIRTH/{edge_node_id}/{device_id}
并将MQTT保留标志设置为true
此外,了解Sparkplug MQTT服务器还可以替换NDEATH消息的时间戳。如果这样做,它必须将时间戳设置为UTC时间,以尝试将NDEATH传递给订阅客户端的时间。
因此,了解Sparkplug MQTT服务器扩展了Sparkplug的状态管理方法。简而言之,出生和死亡证书现在被存储为保留消息,并提供了新引入的主题结构$sparkplug/certificates/#。
更新NDEATH消息的时间戳的这一可选功能是这个版本的亮点。这些时间戳由于“遗嘱功能”而存储在代理中。遗嘱消息包含在MQTT连接尝试中,并且将包含无条件客户端断开连接的时间戳,实际上是未知的。这个(可选的)时间戳更新LWT消息发布解决了这个问题。
![相对于2.2版本,Sparkplug规范版本3.0更新了什么?插图 相对于2.2版本,Sparkplug规范版本3.0更新了什么?-MQTT中文站](https://image.mqtt.cn/wp-content/uploads/2023/10/2023103113343619.png)
通过Sparkplug®兼容性计划让终端用户知道您已经准备好了
Sparkplug兼容性计划允许软件和硬件供应商证明其产品与Eclipse Sparkplug和基于MQTT的物联网基础设施兼容,并为之获得认证。
获得认证的供应商使集成商和终端用户能够轻松地采购与Sparkplug规范兼容的设备和软件产品。该计划确保其解决方案能够与工业物联网中最常见的设备和网络无缝集成。
要获得认证,供应商的产品必须通过多个开源测试,以确认其符合Sparkplug技术兼容性工具包(TCK)的标准。如果产品通过了兼容性测试,Sparkplug工作组将将其添加到其官方的兼容产品列表中(可以在其网站上找到)。一旦获得许可,供应商可以使用Sparkplug兼容的标志向外界宣传其兼容性。
https://sparkplug.eclipse.org/compatibility/get-listed/
以下是您需要了解有关TCK的信息…
Sparkplug技术兼容性工具包(TCK)
适当的Sparkplug实施需要完全兼容以下组件:
- 网络边缘节点/设备,
- 主要应用程序,当然还有
- MQTT代理。
Sparkplug技术兼容性工具包(TCK)提供了指南,验证所有待认证的组件是否符合Sparkplug规范。
TCK是一个Web应用程序,包括一个带有HiveMQ扩展和Web界面的HiveMQ代理。Web界面提供了对兼容性测试的访问。
![相对于2.2版本,Sparkplug规范版本3.0更新了什么?插图1 相对于2.2版本,Sparkplug规范版本3.0更新了什么?-MQTT中文站](https://image.mqtt.cn/wp-content/uploads/2023/10/2023103113372627.png)
TCK可以在Eclipse Sparkplug存储库中找到。
要使用JDK 11构建Sparkplug TCK HiveMQ扩展(JDK 17不起作用),请从GitHub中的“sparkplug/tck”进行检出并运行./gradlew。您可以在项目文件夹的build/hivemq-extension中找到扩展工件。
您必须向HiveMQ代理添加WebSocket监听器,并将扩展包含在HiveMQ的扩展文件夹中。启动或重新启动HiveMQ后,扩展即可使用。
如果您想要在自己的IDE中直接运行或调试HiveMQ扩展,请使用./gradlew runHivemqWithExtension。在此Gradle目标中,HiveMQ Community Edition将自动下载并根据Gradle构建文件中的任务完全配置为TCK扩展。
如上所述,基于Nuxt.js(Vue.js)的Web控制台控制TCK。确保您的计算机上有最新版本的yarn和node.js。Mac用户应该查找brew install yarn和brew install node。如果出现错误消息:“env:node:No such file or directory”,这意味着未安装node。在这种情况下,您可以使用yarn install和yarn dev(有关更多详细信息,请参阅webconsole readme)来安装和启动Web控制台。
TCK Web控制台可以通过浏览器中的http://localhost:3000访问:
您可以为主机应用程序、边缘节点和MQTT代理选择Sparkplug符合性配置文件。
主机应用程序配置文件包含用于测试以下内容的测试:
- 会话建立
- 会话终止
- 发送命令
- 边缘会话终止
- 消息排序和
- 多个MQTT服务器(代理)。
边缘节点测试包括
- 会话建立
- 会话终止
- 发送数据、发送复杂数据
- 接收命令
- 主机和多个MQTT服务器(代理)。
使用代理配置可以测试MQTT代理是否符合Sparkplug规范并具有了解Sparkplug的功能。
结论
尽管没有太多新规定,但新规范已经整理了许多主题,并更严格和全面地阐述了它们。然而,真正的收获主要在于证书产品或甚至检查产品的Sparkplug兼容性的可能性。这不仅对制造商有增值,也对终端用户有增值。
回复