
ONENET设备终端接入协议4MQTT.docx
21页MQTT )Message Queuing Telemetry Transport版本号修订日期修订内容说明2015/9/8草稿2016/4/8重构Liuyuan2016/4/19丰富报文格式,业务流程Leihong2016/7/13增加设备间订阅,创建 topic功能Leihong目录1 说明 错误!未定义书签2 接入流程 错误!未定义书签3 Packet格式说明 错误!未定义书签Fixed header 错误!未定义书签Variable Header &Payload 错误!未定义书签4 支持的packet错误!未定义书签CONNECT!误!未定义书签Fixed Header错误!未定义书签VariableHeader 错误!未定义书签Payload错误!未定义书签CONNACK 错误!未定义书签Fixed Header错误!未定义书签VariableHeader 错误!未定义书签PUBLISH (client -> server) 错误!未定义书签Fixed header错误!未定义书签VariableHeader 错误!未定义书签Payload错误!未定义书签PUBLISH (server -> client) 错误!未定义书签。
Fixed header错误!未定义书签VariableHeader 错误!未定义书签Payload错误!未定义书签PUBACK错误!未定义书签Fixed header错误!未定义书签VariableHeader 错误!未定义书签SUBSCRIBE 错误!未定义书签Fixed header错误!未定义书签VariableHeader 错误!未定义书签Payload错误!未定义书签SUBACK错误!未定义书签Fixed header错误!未定义书签VariableHeader 错误!未定义书签Payload错误!未定义书签UNSUBSCRIBE昔误!未定义书签Fixed header错误!未定义书签VariableHeader 错误!未定义书签Payload错误!未定义书签UNSUBACK错误!未定义书签Fixed header错误!未定义书签VariableHeader 错误!未定义书签5 接入流程 错误!未定义书签连接鉴权 错误!未定义书签消息发布 错误!未定义书签数据点上报错误!未定义书签平台命令(下发&回复)错误!未定义书签创建Topic错误!未定义书签订阅 错误!未定义书签取消订阅 错误!未定义书签。
推送设备Topic错误!未定义:说明MQTT协议详细内容请参见 MQTT version官方文档,本文档对此不做详细说明, 仅指明OneNet的要求、默认参数、以及当前实现与MQTT官方文档的差异该版本支持的功能:鉴权;数据点上报(平台指定topic);创建topic;获取项目的topic列表;订阅/取消平台的topic;设备间topic订阅;平台命令下发;Qos0(c S) ,Qos1(C->S);接入流程访问平台注册用户;用户根据业务情况,在“连接请求”章节中选择 EDP登录方式(目前公测阶段,页面还未提供 MQTT登录选项,登录方式与EDP兼容);登录需填写设备相关属性,在项目下新增设备,获取项目 ID、设备ID,以及authinfo等信息;设备发送TCP连接请求到以下地址,发送封装的报文与平台交互平台服务器地址,TCP端口 6002Packet格式说明包格式包含三部分:Fixed Header所有packet中都必须有Varable Header部分包含有Payload部分包含有Fixed headerBit76543210byte 1MQTT Packet Type0000byte2 - 5Remaining Length (该字段占用 1-4个字节)该版本支持的所有类型:名字值流向描述CONNECT1C->S客户端请求与服务端建立连接CONNACK2S->C服务端确认连接建立PUBLISH3C S发布消息PUBACK4C S收到发布消息确认SUBSCRIBE8C->S订阅请求SUBACK9S->C订阅确认UNSUBSCRIBE10C->S取消订阅UNSUBACK11S->C取消订阅确认Variable Header &Payload消息类型Variable HeaderPayloadCONNECT有有CONNACK有有PUBLISH有有PUBACK有无SUBSCRIBE有有SUBACK有有UNSUBSCRIBE有有UNSUBACK有无支持的packetCONNECTFixed HeaderBit76543210byte 1MQTT Packet Type0000byte2 - 5Remaining Length (该字段占用 1-4个字节)VariableHeaderDescription76543210byte 1-2ProtocolNameLength0000000000000100byte 3M,01001101byte 4Q'01010001byte 5T,01010100byte 6T,01010100Byte7Protocol Level00000001Byte8Connect FlagUser flagPassword flagWillRetainFlagWillQos FlagWillFlagCleanSessionFlagReserveByte9-10KeepAlive版本必须设置为4,平台只支持版本 v ,不支持更老的版本。
使用第三方客户端时需要注意选择正确的版本user flag 与 password flag平台不允许匿名登陆,因此这两个标志位在连接时必须设置为 1,否则认为协议错误,平台将会断开连接will flag 与 Willretainflag/Willqosflag平台暂不支持 will flag , WillRetain Flag与 WillQos Flag必须设置为 0CleanSessionFlag若客户端将clean session标志位设置为0,当其断开后,平台将会保存 session, session需保持的内容包含:客户端订阅的topic列表.客户端保存session的内容包含:已经发送到服务端的但还没有收到确认的 Qos1消息列表.待发送的Qos0列表.Reserve保留位,置0KeepAlive保活时间每个客户端可自定义设置连接保持时间,最短 120秒,最长65535秒PayloadDescriptionr是否必须存在格式Field1Client Identifier是2字节字串长度 + utf8字串Field2UserName是2字节字串长度 + utf8字串Field3UserPassword是2字节字串长度 + utf8字串与鉴权相关的字段包含 client id , username和password ,支持鉴权方式。
字段设置消息示例client_id设置为平台创建设备时的设 备idusername设置为项目 IDpassword设置为鉴权信息(auth_info )”client_id= ”123”username="433223"password="注册的鉴权信息"各字段说明如下:项目ID:在平台添加项目时平台生成的 ID;鉴权信息(auth_info ):在平台申请设备时填写设备的 auth_info属性(数字+字母的字符串),该属性需要产品内具备唯一性;CONNACKFixed HeaderBit76543210byte 1MQTT Packet Type0000byte2 - 5Remaining Length (该字段占用 1-4个字节)VariableHeaderDescription76543210byte 1Acknowledge Flags0000000Spbyte 2Return CodexxxxxxxxSp: Session Present Flag session信息在服务器已保持,置 1;未保存,置 0返回码说明:返回码描述0成功1协议版本错误2非法的clientid3服务不PJ用4用户名或密码错误5非法链接(比如token非法)失败:*如果connect包不符合协议内容约束,则直接断掉连接,而不需要发送 connack包.*如果鉴权或授权失败,回复一个带非 0错误码的connack包.成功:*必须断掉重复的 clientid.*执行cleansession对应的操作.*必须回复一个 connack,回复码为0.*开始消息传递,并加入 keepalive的监视.PS:客户端需要等到服务端的 connack报文,才能发送后续的数据包 .PUBLISH( client -> server)Fixed headerBit76543210byte 1MQTT Packet TypeDUP flagQoS LevelRETAINbyte2 - 5Remaining Length (该字段占用 1-4个字节)DUP:QoS1:如果为0,则表示是第一次发送该包,如果为 1,则表示为重复发送的包。
Qos0: DUP必须为0QOS:指定了该publish包的qos等级如下RETAIN:暂不实现Qos值Bit2Bit1描述000取多发送次101至少发送一次PS该版本只实现Qos0, Qos1VariableHeaderDescription格式是否必须Field1TopicName「2字节字串长度 + utf8字串是Field2。
