随着物联网行业的快速发展,涌现出越来越多物联网云服务平台。如何快速实现应用开发,如何管理,如何让设备快速上云,成为关注的焦点。
本文将描述如何使用nb860系列模组通过mqtt指令快速接入利尔达iot基础服务平台,并介绍两者数据交互操作流程,详细的at交互流程可以帮助用户或开发人员尽快完成相关的应用开发。
所需产品本次接入的利尔达iot基础服务平台是我司自主研发的云平台,为设备提供安全可靠的连接管理能力,整合物联网产业链上下游,向下连接智能设备,向上承接物联网应用,形成端到云完整链路物联网解决方案,赋能企业各类iot场景接入。
另外用到的利尔达nb860/mb960/mb260系列模组是基于5g nb-iot芯片自主开发的第三代nb-iot模组。该款模组集高性价比、高安全性和低功耗等优点于一身,新增蓝牙、opencpu、gnss定位等能力,为智能表计、智能烟感、智能停车、智慧路灯等百万级成熟nb-iot应用提供了更优选择。
利尔达nb860/mb960/mb260系列模组支持tcp/udp、mqtt、lwm2m等多种协议接入云平台,为行业应用开发提供了更多的可能性。今天文章第一期将为大家介绍利尔达nb860模组基于mqtt协议快速接入利尔达iot基础服务平台,实现数据交互。
快速上云设备端完整at示例流程
向上滑动阅览
//配置服务器ip及域名
at+mqttcfg=host,0,mqtt.xiot.senthink.com,1883
ok
//配置客户端标识
at+mqttcfg=clientid,0,b6e092a55031428493af6aad6d694ad5
ok
//连接服务器
[1116.270]发→◇at+mqttconn=0,0,0,5d6a3e7e-35884709-865186050012583,6387e4120edd5a214f9a07d4bd2fb051
+mqttconnack: 0,0,0
ok
//订阅mqtt消息at+mqttsub=0,1,/sys/5d6a3e7e/35884709/865186050012583/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: 5d6a3e7e, productid: 35884709,nodeeui: 865186050012583,clientid: b6e092a55031428493af6aad6d694ad5, type: 2,sign: 1fb6a0da}}
[1142.489]收←◆+mqttpuback: 0,1,0
ok
//收到服务器下发数据
+mqttrecv: 0,3,1,0,/sys/5d6a3e7e/35884709/865186050012583/downlink,{headerctrl:2,mode:1,nonce:14,payload:{code:0,sessionid:75fc7dc3},messageid:1231}
//上发设备端数据at+mqttpub=0,1,0,0,/sys/5d6a3e7e/35884709/865186050012583/uplink,{ messageid : 1231,headerctrl:4,mode:1,nonce:10,payload:cb96395f5065fd121d88b1593efe}+mqttpuback: 0,1,0
ok
//收到服务器下发数据
+mqttrecv: 0,4,1,0,/sys/5d6a3e7e/35884709/865186050012583/downlink,{messageid:1231,headerctrl:4,code:200,msg:success}
+mqttrecv: 0,5,1,0,/sys/5d6a3e7e/35884709/865186050012583/downlink,{headerctrl:7,mode:0,nonce:48,payload:wwdwdwd,messageid:751504437}
如上图所示,示例流程展示了设备在配置及连接后进行收发数据的调试操作,在实际应用开发中通过开发mcu代码适配参数,即可完成了订阅推送(应用app/web)前所有开发工作,下文将以上步骤给大家做详细讲解。
lierda x平台操作流程※ 用户注册
1.访问https://account.xiot.senthink.com/login,点击注册按钮,进入注册页面2.填写注册信息,完成注册3.完成信息认证,开通物联网平台
图1 注册页面※ 设备接入前准备事项设备在接入利尔达iot基础服务平台之前,需要先完成下事项:1.在平台提供的管理后台注册一个硬件厂商账号,云平台会为该账号分配一个厂商的唯一标识openid;2.注册厂商账号后,需要在平台提供的管理后台上创建一个产品类,云平台会为该产品分配一个产品的唯一标识 productid 以及产品的密钥 productkey(用于入网加密以及会话 key 的更新,注意保密!);3.设备接入利尔达iot基础服务平台之前,必须要将基础参数烧录进设备。*至此,接入前的准备工作完成!
※ 注册,创建产品设备前提条件:已在利尔达iot基础服务平台注册账号。
图2 产品创建页面
步骤1:创建产品
1.登录物联网平台控制台2.在云平台页面,找到产品管理,单击产品管理进入产品详情页面。在中间导航栏,选择创建产品,单击创建产品,如下图所示。
图3 产品创建
步骤2:设置物模型、topic消息等,添加自定义topic
1.登录物联网平台控制台。2.在产品管理页面,找到对应的产品,单击产品进入产品详情页面。3.在产品页面,找到需要自定义topic类的产品,并单击对应操作栏中的查看按钮。4、在产品详情页面,单击topic类详情 > 自定义topic > 定义topic类。5、配置参数,单击确认。
图4 新建topic
步骤3:创建设备
1、登录物联网平台控制台。2、在左侧导航栏,选择设备管理 > 设备列表。3、在设备页面,单击添加设备。4、在添加设备对话框中,输入设备信息,单击确认。
图5 设备创建
执行结果设备注册成功后,将自动弹出设备证书弹框。您可以查看、一键复制设备证书信息,包含deviceid、devicesecret、openid、productid和productkey,是设备与物联网平台进行通信的重要身份认证,建议您妥善保管。
后续步骤1.在设备列表页,单击对应设备,进入设备详情页。您可以查看设备证书信息、数据加密密钥、继承产品的基础信息、禁用/启用设备、设备状态、激活时间、最后在线/离线时间等。2.在设备详情页,可对设备在线调试、远程配置和日志分析。3.在设备列表页,可以删除不再使用的设备。删除设备不可撤回,请谨慎操作。至此,平台侧操作已全部完成。
※ 设备侧操作上电检查流程1.at //判断模组是否上电开机成功2.at+cfun=1 //关闭飞行模式3.at+cereg? //判断ps域附着状态,第二个参数为1或5表示附着正常。
设置服务端ip或域名使用at+mqttcfg=host,0,host_name,1883命令设置服务端ip或域名。其中,:服务端的ip或域名:1~2000字节字符串。lierdax平台mqtt接入默认域名为:mqtt.xiot.senthink.com,1883。示例:at+mqttcfg=host,0,mqtt.xiot.senthink.com,1883
设置客户端标识使用at+mqttcfg=clientid,,命令设置客户端标识 连接id:取值0~2。 客户端标识符:字符串类型,1~128字节字符串。贤芯平台clientid可在设备详情页查看。
示例:at+mqttcfg=clientid,0,acf37***************ea9f3582
连接服务端使用at+mqttconn=,,,,命令连接服务端,在收到+mqttconnack: 0,0,0 ok即已经成功连接上平台。 连接id:取值0~2。ssl tcp连接使能:0:不采用;1:采用ssl tcp连接。will_flag 遗嘱标志,取值0或1:0:不带遗嘱;1:connect报文带有遗嘱。 用户名:0~512字节的字符串。 密码:0~512字节的字符串。注:贤芯平台登录账号以及密码在创建设备时自动生成,可在设备详情页查看。示例:
at+mqttconn=0,0,0,5*******-********-8************3,7*******************ab2c2
订阅mqtt消息
使用at+mqttsub=,,,[,,]
[,,]命令订阅消息,已经订阅成功的消息可在平台上的设备topic列表查看。
连接id:取值0~2。
报文标识符:取值1~65535。
主题名:0~512字节字符串。一次最多可订阅3个主题。
订阅消息qos等级:取值0~2。
示例:
at+mqttsub=0,1,/sys/5********/*********/86**********83/downlink,1
收←◆
+mqttsuback: 0,1,0
ok
设备请求入网(join)
设备上报的通用入网 topic:/sys/device/join
设备在进行正式的数据通信之前,必须先向 iot 平台请求入网。设备应主动与 iot 平台建立 tcp socket 链接。在成功建立链接后,设备必须向平台发送请求入网数据帧,以让平台为设备分配通信资源;否则平台将拒绝与设备进行通信。
请求入网数据帧使用的 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域中包含的内容及说明如下所示:
平台收到入网请求后,根据当前产品类型是免注册还是预注册,重新计算 sign 并与设备上报的 sign 值进行对比,不同类型设备的 sign 计算规则详见2.4小节。
平台收到设备的入网请求数据帧并成功认证设备身份后,会为该设备分配通信资源 ,然后使用同样的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 的时候,响应数据中的 payload 中所携带的 sessionid 才是 iot 平台分配的有效的 sessionid:
设备成功入网后,iot平台返回了 sessionid。设备需要使用入网安全密钥productkey和本次回复中的随机数nonce来计算生成后续与 iot平台进行通信过程中用于加密用户应用数据的密钥(sessionkey),计算方法如下描述(伪代码):
加密方式:aes128_ecb_pkcs5padding sessionkey = encrypt( productkey , sessionid + nonce);
示例:
productkey :a0 1a 24 79 67 25 73 df 84 53 7d f4 c7 3d 3f cc
sessionid:46 55 43 4b
nonce(123):7b
则拼接结果为:46 55 43 4b 7b 加密运算结果为:40 8c 79 0f 85 bf 60 e6 d4 f1 c1 3c 6a 5c 4c 8b sessionkey = 408c790f85bf60e6d4f1c13c6a5c4c8b
如果使用非加密模式进行应用数据的传输,则可以忽略此步骤,即不需要计算 sessionkey 的值。
特别注意:设备的入网请求数据如果设置了mode 为1,则平台会在设备心跳和设备数据上行时检查设备的sessionkey是否过期,如果平台监测到设备的sessionkey过期,则会主动更新设备sessionkey并下发给设备;如果入网请求数据设置了 mode 位为 0,则平台不会检查设备的 sessionkey 是否过期。
入网sing值计算请参考文档《lierda_nb860&mb960&mb260_application_notes_mqtt对接lierda x平台》
备注:
设备每次与 iot 平台建立新的 mqtt 链接后(首次连接或者断线重连),都必须向平台重新请求入网,否则平台将拒绝与设备进行通信。
数据交互
通过at+mqttpub=,,,,,命令向平台发布消息。
连接id:取值0~2。
报文标识符:取值1~65535。
发布消息qos等级:取值0~2。
保留标志:取值0~1。
主题名:0~512字节字符串。
有效载荷:0~1500字节字符串。
示例:
at+mqttpub=0,1,0,0,/sys/5********/*********/86**********83/uplink,{ messageid :
1231,headerctrl:4,mode:1,nonce:10,payload:cb963****************efe}
□
[1112.040]收←◆
[1112.060]收←◆
+mqttpuback: 0,1,0
ok
[1113.680]收←◆
+mqttrecv:0,8,1,0,/sys/5********/*********/86**********83/downlink,{messageid:1231,headerctrl:4,code:200,msg:success}
+mqttrecv:0,9,1,0,/sys/5********/*********/86**********83/uplink_ack,{messageid:1231,headerctrl:4,code:200,msg:success}
设备上报数据可在运行日志中查看;下发透传数据可在在线调试中实现。
至此,我们已完成基于mqtt协议的端(lierda nb860模组)到云(lierda x平台)对接并实现数据交互功能。下一期我们将介绍nb860模组配合x平台进行云云对接快速上云,敬请期待。
人类与AI的对话频率 正在进入一个前所未有的大爆炸时代
RF-Labs表面贴装引脚电阻器和终端
继苹果安卓强制收取30%税费后,微软承诺不会禁用任何开发者应用
宝马将在中国和欧洲推出的紧凑型的电动宝马iX3
华为Pay来袭 手机厂商集体“投靠”NFC支付
【技术分享】Lierda NB860+Lierda 云平台——云管端协作让万物互联更简单(一)
张忠谋、蔡明介谈双通并购案,对台湾半导体产业链影响
二代iPhoneSE? 苹果下月发布又一款廉价iPhone
传苹果Mac电脑中采用自主开发的芯片_英特尔芯片将被取代?
电感如何达到饱和状态?饱和如何影响电路?检测电感饱和的方法
七号信令传输如何变为MPLS,也就是如何用IP承载?
麻省理工研发超级信号放大器 可放大Wi-Fi的信号
PCIe(PCI Express) 3.0新标准将于11月份
【新申请】新SRRC容易Fail点分享 2.4G和5.8G的干扰规避判定方法
L293D电机驱动器的引脚功能
新 MacBook Pro 成为首款《消费者报告》不推荐的苹果笔计本
国产科学仪器摘金夺银!国仪量子用户包揽首届微课大赛一二等奖
基于GEME-3000主控制器和计算机视觉组件实现自动化定位系统的设计
中国汽车芯片创新联盟在京正式成立
新冠疫情期间医疗机构如何预防网络黑客的攻击