Packet


概述

组包库接口,提供几个协议的组包接口,还有相关的粘包和分包处理。标准协议有Modbus、HJ212、MQTT,另外一个Simple协议是易传平台用到的一个简单协议。


常量

MQTT消息类型

所有MQTT消息类型定义:

  • Packet.MQTT.CONNECT
  • Packet.MQTT.CONNACK
  • Packet.MQTT.PUBLISH
  • Packet.MQTT.PUBACK
  • Packet.MQTT.PUBREC
  • Packet.MQTT.PUBREL
  • Packet.MQTT.PUBCOMP
  • Packet.MQTT.SUBSCRIBE
  • Packet.MQTT.SUBACK
  • Packet.MQTT.UNSUBSCRIBE
  • Packet.MQTT.UNSUBACK
  • Packet.MQTT.PINGREQ
  • Packet.MQTT.PINGRESP
  • Packet.MQTT.DISCONNECT

以上常量与MQTT协议的定义一致,即分别对应1~14。


Simple协议

Simple协议是易传平台用到的一个简单协议,具体内容详见物联网通用设备接口协议文档

函数

Parser.create

创建一个Simple协议的解析对象,一般需要赋给一个全局变量,以便保持一个不断解析数据的生命周期。

  • Packet.Simple.Parser.create(callback [,buflen [,header]])
参数 必选 类型 说明
callback true function 解析到一个完整包进的处理回调函数,格式为function cb(data),data为数据主体,类型为Bytes
buflen false int 解析数据包的缓冲区大小,一般为数据包主体可能的最大长度,默认为512字节
header false int 一个字节的协议头,默认为0xEA
return Object 用于持续解析数据包的对象

parse

解析一包数据,本函数为上面方法创建的对象的方法。

  • parserObject.parse(data)
参数 必选 类型 说明
data true Bytes 接收到的数据
return null 无返回

packet

组一个Simple协议包。

  • Packet.Simple.packet(data_string | data_bytes [,header])
参数 必选 类型 说明
data_string true String 数据段主体的字符串
data_bytes true Bytes 数据段主体的字节流
header false int 一个字节的协议头,默认为0xEA
return bytes 完整的协议包字节流

isValid

判断一个数据包是否是有效的Simple协议包。

  • Packet.Simple.isValid(data [,header])
参数 必选 类型 说明
data true bytes 要判断的数据包
header false int 一个字节的协议头,默认为0xEA
return bool true,有效;false, 无效

Modbus协议

Modbus协议的相关方法,本协议没有特定包头,所以没有粘包和分包的处理,每次解析都当一个协议包处理,所以不需要缓冲区。

函数

Parser.create

创建一个Modbus协议的解析对象,一般需要赋给一个全局变量,以便保持一个不断解析数据的生命周期。

  • Packet.Modbus.Parser.create(callback)
参数 必选 类型 说明
callback true function 解析到一个完整包进的处理回调函数,格式为function cb(data),data是一个对象,有三个属性:"addr",地址,类型为int;"cmd",功能码,类型为int;"data",数据,类型为Bytes
return Object 用于持续解析数据包的对象

parse

解析一包数据,本函数为上面方法创建的对象的方法。

  • parserObject.parse(data)
参数 必选 类型 说明
data true Bytes 接收到的数据
return null 无返回

packet

组一个Modbus协议包,有常见四种格式。其他格式需要自己组包,参见Modbus例子

  • Packet.Modbus.packet(addr, cmd, code)
  • Packet.Modbus.packet(addr, cmd, data)
  • Packet.Modbus.packet(addr, cmd, reg, count)
  • Packet.Modbus.packet(addr, cmd, reg, count, data)
参数 必选 类型 说明
addr true int 一个字节的设备地址
cmd true int 一个字节的功能码
code false int 错误码,一般用于从机返回错误码
data false Bytes 数据,一般格式化为一个字节的长度加数据本身字节流
reg false int 要操作的起始寄存器地址
count false int 要操作的寄存器个数
return bytes 完整的协议包字节流

isValid

判断一个数据包是否是有效的Modbus协议包。

  • Packet.Modbus.isValid(data)
参数 必选 类型 说明
data true bytes 要判断的数据包
return bool true,有效;false, 无效

HJ212协议

HJ212协议的相关方法。

函数

Parser.create

创建一个HJ212协议的解析对象,一般需要赋给一个全局变量,以便保持一个不断解析数据的生命周期。

  • Packet.HJ212.Parser.create(callback [,buflen])
参数 必选 类型 说明
callback true function 解析到一个完整包进的处理回调函数,格式为function cb(data),data是数据段主体,类型为String
buflen false int 解析数据包的缓冲区大小,一般为数据包主体可能的最大长度,默认为1024字节
return Object 用于持续解析数据包的对象

parse

解析一包数据,本函数为上面方法创建的对象的方法。

  • parserObject.parse(data)
参数 必选 类型 说明
data true Bytes 接收到的数据
return null 无返回

packet

组一个HJ212协议包。

  • Packet.HJ212.packet(data)
参数 必选 类型 说明
data true String 数据段主体
return String 完整的协议包字符串

isValid

判断一个数据包是否是有效的HJ212协议包。

  • Packet.HJ212.isValid(data_string | data_bytes)
参数 必选 类型 说明
data_string true String 要判断的数据包
data_bytes true Bytes 要判断的数据包
return bool true,有效;false, 无效

MQTT协议

MQTT协议的相关方法,主要实现MQTT 3.1.1客户端的方法。目前不支持编码,不支持TLS传输。

函数

Parser.create

创建一个MQTT协议的解析对象,一般需要赋给一个全局变量,以便保持一个不断解析数据的生命周期。

  • Packet.MQTT.Parser.create(callback [,buflen])
参数 必选 类型 说明
callback true function 解析到一个完整包进的处理回调函数,格式为function cb(data),data是一个对象,其中必包含属性“type",协议包的消息类型,值为常量MQTT消息类型之一;其他属性见下面回调对象说明
buflen false int 解析数据包的缓冲区大小,一般为数据包主体可能的最大长度,默认为512字节
return Object 用于持续解析数据包的对象


回调对象说明
消息类型 属性 类型 说明
CONNACK present int session present
code int return code
PUBLISH qos int qos
dup int dup
retain int retain
topic String 主题
id int 包id,qos大于0时有效
body Bytes 消息主体
PUBACK id int 包id
PUBREC id int 包id
PUBREL id int 包id
PUBCOMP id int 包id
SUBACK id int 包id
SUBACK code Array 整数数组,每个值对应每个订阅主题的结果
UNSUBACK id int 包id
PINGRESP 无其他属性
特殊情况 data bytes 为了处理可能未识别的情况,如为其他消息类型,或识别格式不正确,均把数据返回,用户自行解析

parse

解析一包数据,本函数为上面方法创建的对象的方法。

  • parserObject.parse(data)
参数 必选 类型 说明
data true Bytes 接收到的数据
return null 无返回

packet

组一个MQTT协议包,主要用于扩展。

  • Packet.MQTT.packet(type, data [,qos [,dup [,retain]]])
参数 必选 类型 说明
type true int 消息类型
data true Bytes 数据段主体
qos false int qos,默认为0
dup false int dup,默认为0
retain false int retain,默认为0
return Bytes 完整的协议包字节流

connect

组一个MQTT CONNECT协议包。

  • Packet.MQTT.connect(clientid [,keepalive [,clearsession [,username [,password]]]])
参数 必选 类型 说明
clientid true String 客户端ID
keepalive false int 客户端发包之间的最大时间间隔,默认为0
clearsession false int 清除会话,默认为1
username false String 用户名,默认无
password false String 密码,默认无
return Bytes 完整的协议包字节流

disconnect

组一个MQTT DISCONNECT协议包。

  • Packet.MQTT.disconnect()
参数 必选 类型 说明
return Bytes 完整的协议包字节流

ping

组一个MQTT PINGREQ协议包。

  • Packet.MQTT.ping()
参数 必选 类型 说明
return Bytes 完整的协议包字节流

subscribe

组一个MQTT SUBSCRIBE协议包。

  • Packet.MQTT.subscribe(id, topic1, qos1, [,topic2, qos2 [,...]])
参数 必选 类型 说明
id true int 包id
topic1 true String 订阅的主题1
qos1 true int 订阅的qos1
topic2 false String 订阅的主题2到主题n,与qos参数必须成对使用
qos2 false int 订阅的qos 2到qos n
return Bytes 完整的协议包字节流

unsubscribe

组一个MQTT UNSUBSCRIBE协议包。

  • Packet.MQTT.unsubscribe(id, topic1, [,topic2, [,...]])
参数 必选 类型 说明
id true int 包id
topic1 true String 取消订阅的主题1
topic2 false String 取消订阅的主题2到主题n
return Bytes 完整的协议包字节流

publish

组一个MQTT PUBLISH协议包。

  • Packet.MQTT.publish(topic, [body, [,qos, [,id [,dup [,retain]]]])
参数 必选 类型 说明
topic true String 发布消息的主题
body false String或Bytes 发布消息的主体
qos false int qos
id false int qos大于0时有效,qos为0时用任意值
dup false String dup
retain false String retain
return Bytes 完整的协议包字节流

puback

组一个MQTT PUBACK协议包。

  • Packet.MQTT.puback(id)
参数 必选 类型 说明
id true int 包id
return Bytes 完整的协议包字节流

pubrec

组一个MQTT PUBREC协议包。

  • Packet.MQTT.pubrec(id)
参数 必选 类型 说明
id true int 包id
return Bytes 完整的协议包字节流

pubrel

组一个MQTT PUBREL协议包。

  • Packet.MQTT.pubrel(id)
参数 必选 类型 说明
id true int 包id
return Bytes 完整的协议包字节流

pubcomp

组一个MQTT PUBCOMP协议包。

  • Packet.MQTT.pubcomp(id)
参数 必选 类型 说明
id true int 包id
return Bytes 完整的协议包字节流

isValid

判断一个数据包是否是有效的MQTT协议包。

  • Packet.MQTT.isValid(data)
参数 必选 类型 说明
data true Bytes 要判断的数据包
return bool true,有效;false, 无效