Sparkplug规范-6.Sparkplug MQTT主题名

基于SCADA系统使用MQTT,获得一个可用的消息中间件(Message Oriented Middleware, MOM),首先必须定义主题名。MQTT妙在你可以随便用一个主题,例如“波特兰/温度”,连接到MQTT服务器,发布温度值,那些想利用温度数据的MQTT客户端应用需要先理解主题名。

发布出来的MQTT消息都包含主题负载,是MQTT消息的主体,传输时以字节数来度量。Sparkplug 规范设计在保证含义准确、易于理解同时,避免冗长的主题名给数据交换带宽和时长带来负面影响。

    6.1 Sparkplug MQTT主题名元素

所有采用Sparkplug 规范的MQTT客户端需遵循如下主题名结构:

namespace/group_id/message_type/edge_node_id/[device_id]

        6.1.1 namespace元素

namespace是主题名的根元素,定义了剩余元素的结构和相关负载数据的编码。目前,Sparkplug规范定义了两种namespace,一个对应Sparkplug负载定义A,另一个对应Sparkplug负载定义B。

对于Sparkplug A负载定义,namespace为UTF-8字符串:

“spAv1.0”

对于Sparkplug B负载定义,namespace为UTF-8字符串:

“spBv1.0”

注意,Sparkplug版本不管是A还是B,主题名和会话状态管理都是相同的。A和B两个版本的Sparkplug MQTT消息负载编码格式在附件中分别定义。

        6.1.2 group_id元素

group_id元素提供对MQTT 边缘节点的逻辑分组。group_id可以是任意合法的UTF-8字符串,但不能含有保留字符+/#。为减少带宽占用,应语义明确并尽可能短。例如,在油气应用中,一条管线上各段MQTT EoN的group_id相同;工厂应用可以按照分厂或产线来对MQTT 边缘节点进行分组。

        6.1.3 message_type元素

message_type元素说明消息的负载如何处理。注意,负载的编码取决于namespace元素所指的Sparkplug版本。

Sparkplug主题名定义了如下message_type

  • NBIRTH – MQTT 边缘节点上线
  • NDEATH – MQTT 边缘节点下线
  • DBIRTH – 设备上线
  • DDEATH – 设备下线
  • NDATA – 节点数据(从节点读数据)
  • DDATA – 设备数据(从设备读数据)
  • NCMD – 节点命令(向节点写数据)
  • DCMD – 设备命令(向设备写数据)
  • STATE – 主应用状态

每个message_type元素详细说明见下文。

        6.1.4 edge_node_id元素

edge_node_id元素唯一标识MQTT 边缘节点,group_id/edge_node_id必须是唯一的。edge_node_id可以是任意合法的UTF-8字符串,但不能含有保留字符+/#。EoN发布每条消息都要带上edge_node_id,因此要尽可能短。

        6.1.5 device_id元素

device_id元素标识一台关联到MQTT 边缘节点的(物理的或逻辑的)设备。device_id元素是可选的,一些消息直接源于或发送到edge_node_id,不需要device_iddevice_id可以是任意合法的UTF-8字符串,但不能含有保留字符+/#。同一个边缘节点下的device_id必须唯一,不同边缘节点之间的device_id可以重复,每次发布设备消息都要带上device_id元素,因此要尽可能短。

 

链接:

0. 目录

5. 通用消息流

7. Sparkplug MQTT消息类型

猜你喜欢

转载自blog.csdn.net/xhydongda/article/details/114263558
今日推荐