请选择 进入手机版 | 继续访问电脑版
查看: 922|回复: 0

[技术交流] Lierda_NB860&MB960&MB260MQTT对接Lierda X平台指导(下)

[复制链接]

50

主题

409

帖子

1309

积分

利尔达员工

Rank: 9Rank: 9Rank: 9

积分
1309
发表于 2022-3-29 09:50:31 | 显示全部楼层 |阅读模式
1.设备入网
设备上报的通用入网Topic/sys/device/join
智能设备在进行正式的数据通信之前,必须先向 IoT 平台请求入网。设备应主动与IoT 平台建立 TCPSocket 链接。在成功建立链接后,设备必须向平台发送请求入网数据帧,以让平台为设备分配通信资源;否则平台将拒绝与设备进行通信。
请求入网数据帧使用的Command 2;数据帧格式和内容如下所示:
{ "MessageId" : 1231,
"HeaderCtrl":2, //命令码
"Mode":0, //0:不加密, 1:加密
"Nonce":10, //1-128 随机数
"Payload":{
"OpenID":"E0C040B1",
"ProductID":"A4BC6002",
"NodeEui":"....", //设备标识
"ClientID":"....", //认证后返回的 ClientID "Type":0,//0:一型一密免注册,1:一型一密预注册,2:一机一密预注册
"Sign":"FE448731"
}
}
设备向 IoT 平台发起的入网请求数据帧中包含了 Payload 域,用于携带额外的信息。 Payload 域中包含的内容及说明如下所示:
<OpenID >
硬件设备所属厂商的唯一标识 ID,固定 8 位 16 进制字符串并由 IoT 平台分配。
<;ProductID>
硬件设备所属产品的唯一标识 ID,固定 8 位 16 进制字符串并由 IoT 平台分配。
<NodeEUI>
智能硬件设备的唯一标识  ID,可以根据不同的应用场景,由 IoT 平台、硬件设备所属厂商  或者应用集成商来分配.
<Type>
硬件设备类型,0:一型一密免注册,1:一型一密预注册,2:一机一密预注册
<Sign>
硬件设备向IoT平台请求入网的时候,使用加密算法对特定字段进行加密运算所生成的数据, 提交给平台。平台据此判断是否允许该设备入网
平台收到入网请求后,根据当前产品类型是免注册还是预注册,重新计算Sign 并与设备上报的 Sign 值进行对比,不同类型设备的Sign 计算规则详见第二小节
平台收到智能设备的入网请求数据帧并成功认证设备身份后,会为该设备分配通信资源 ,然后使用同样的Command(2)响应设备 。IoT平台返回Topic: /sys/{openId}/{productId}/{deviceId}/downlink,响应智能设备入网请求的数据如下:
{"HeaderCtrl":2, //命令码
"MessageId": 1231,
"Mode":0,//0:不加密, 1:加密
"Nonce":10,//1-128 随机数
"Payload":{
"Code":0,
"SessionID":"4655434B"
}
}
Join 指令的Code 说明: 对于智能设备请求入网指令(Join),Code定义为平台回复设备的入网请求的响应码。
响应码定义如下表所示:
响应码(code
响应码的说明
  
0
  
入网请求处理成功:表示  IoT 平台成功处理请求并成功为设备分配通 信资源,允许设备入网。
  
1
  
入网请求处理失败:IoT  平台系统繁忙,暂时无法处理入网请求。建 议智能设备重试。
  
2
  
入网请求处理失败:入网所使用的产品未注册,无法处理入网请求。  建议检查 OpenID ProductID 是否正确。
  
3
  
入网请求处理失败:设备入网请求的签名(Sign)值不正确。建议 检查 ProductKey 是否正确,或者签名算法是否使用正确。
  
4
  
设备已禁用,请启用设备再试
  
5
  
参数 type 错误,请检查 type 参数和,后台产品 type 一致
如果智能设备发送了入网请求,等待超时后没有收到平台的任何回复,则有可能是网络 问题导致数据丢失,建议检查网络并重试。只有响应码(Code)值为0 的时候,响应数据中的 Payload 中所携带的SessionID 才是 IoT 平台分配的有效的SessionID:
字段
说明
  
SessionID
  
后续跟 IoT 平台进行通信的会话 ID,用于计算应用数据的加密密钥 SessionKey;如果使用非加密模式可以忽略此值。
设备成功入网后,IoT 平台返回了 SessionID。设备需要使用入网安全密钥 ProductKey 和本次回复中的随机数 Nonce 来计算生成后续与 IoT 平台进行通信过程中用于加密用户应 用数据的密钥(SessionKey),计算方法如下描述(伪代码):
加密方式:AES128_ECB_PKCS5PaddingSessionKey = ENCRYPT( ProductKey , SessionID + Nonce); 示例如下:
ProductKey A0 1A 24 79 67 25 73 DF 84 53 7D F4 C7 3D 3F CC
SessionID46 55 43 4B
Nonce123):7B
则拼接结果为:46 5543 4B 7B 加密运算结果为:40 8C79 0F 85 BF 60 E6 D4 F1 C1 3C 6A 5C 4C 8B SessionKey =408C790F85BF60E6D4F1C13C6A5C4C8B 如果使用非加密模式进行应用数据的传输,则可以忽略此步骤,即不需要计算 SessionKey 的值。 特别注意:智能设备的入网请求数据如果设置了Mode 1,则平台会在设备心跳和设备数据上行时检查设备的 SessionKey 是否过期,如果平台监测到设备的 SessionKey 过期,则会主动更新设备 SessionKey 并下发给设备;如果入网请求数据设置了 Mode 位为 0,则平台不会检查设备的 SessionKey 是否过期。
备注:
设备每次与 IoT 平台建立新的 MQTT 链接后(首次连接或者断线重连),都必须向平台重新请求入网,否则平台将拒绝与设备进行通信。
2.
2.   入网sing值计算2.1       一型一密免注册
加密方式:AES128_ECB_PKCS5Padding
Sign = AES128(ProductKey, OpenID + ProductID +NodeEui + Nonce);
示例如下:
ProductKey(十六进制)A0 1A 24 79 67 25 73 DF 84 53 7D F4C7 3D 3F CC
OpenID(十六进制):11 15 43 4B
ProductID(十六进制):11 1E 1B C8
NodeEui11100001):31 31 31 30 30 30 30 31 (十六进制)
Nonce123):7B (十六进制)
则拼接结果为:11 1543 4B 11 1E 1B C8 31 31 31 30 30 30 30 31 7B
加密运算结果为:
5A59C8629543138F2479A2D482CE8CA3FA55300DC69B40A93516DE439425E757
Sign值为运算结果高4bytes5A 59 C8 62
2.2     一型一密预注册 or 一机一密预注册
加密方式:AES128_ECB_PKCS5Padding
Sign = AES128(ProductKey, OpenID + ProductID +DeviceSecret + Nonce);
示例如下:
ProductKey(十六进制)A0 1A 24 79 67 25 73 DF 84 53 7D F4C7 3D 3F CC
OpenID(十六进制):11 15 43 4B
ProductID(十六进制):11 1E 1B C8
DeviceSecret(十六进制): F2 05 C3 81 36 60 A0 8A BB 8A 87 90 FA 3F A3 BA
Nonce123):7B (十六进制)
则拼接结果为:
11 15 43 4B 11 1E 1B C8 F2 05 C3 81 36 60 A0 8A BB8A 87 90 FA 3F A3 BA 7B
加密运算结果为:
611A805300FF5DA40DE11A9C6647FB30CA1447621F415393974DD7C9A76595F9
Sign值为运算结果高4bytes61 1A 80 53

3.   AT示例流程
AT+MQTTCFG="host",0,"mqtt.xiot.senthink.com",1883

OK

AT+MQTTCFG="clientid",0,"B6E092A55**********6D694AD5"

OK

[11:31:16.270]发→◇AT+MQTTCONN=0,0,0,"5D*****E-3******9-865186*********","6387**********F9A0*******051"

+MQTTCONNACK: 0,0,0

OK

AT+MQTTSUB=0,1,"/sys/5D*****E/3*******9/865186*******/downlink",1

+MQTTSUBACK: 0,1,0

OK
AT+MQTTPUB=0,1,0,0,"/sys/device/join","{"MessageId":1231,"HeaderCtrl": 2,"Mode": 1,"Nonce":123,"Payload": {"OpenID": "5D*****E","ProductID": "3*******9","NodeEui":"865186*******","ClientID":"B6E092A55**********6D694AD5", "Type":2,"Sign": "1fb6a0da"}}"

[11:40:42.489]收←◆
+MQTTPUBACK: 0,1,0

OK

+MQTTRECV:0,3,1,0,/sys/5D*****E/3*******9/865186*******/downlink,{"HeaderCtrl":2,"Mode":1,"Nonce":14,"Payload":{"Code":0,"SessionID":"75FC7DC3"},"MessageId":1231}

AT+MQTTPUB=0,1,0,0,"/sys/5D*****E/3*******9/865186*******/uplink","{"MessageId" :1231,"HeaderCtrl":4,"Mode":1,"Nonce":10,"Payload":"CB96395F5065FD121D88B1593EFE"}"

+MQTTPUBACK: 0,1,0

OK

+MQTTRECV:0,4,1,0,/sys/5D*****E/3*******9/865186*******/downlink,{"MessageId":1231,"HeaderCtrl":4,"Code":"200","Msg":"SUCCESS"}

+MQTTRECV:0,5,1,0,/sys/5D*****E/3*******9/865186*******/downlink,{"HeaderCtrl":7,"Mode":0,"Nonce":48,"Payload":"wwdwdwd","MessageId":751504437}
备注:
设备上报数据可在运行日志中查看;下发透传数据可在在线调试中实现。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表