NB-IOT开发流程---基于中国电信物联网平台实现平台对接

作者:MIRIII    提交时间:2019-06-25    点击:5266    TAGS:NB IOT 电信

 天翼物联注册

微信公众号搜索“天翼物联产业联盟”注册,完成后会收到邮件,主要包括2个地址(以下地址2019.06.29有效,请关注公告,此地址有可能会变更)

https://develop.ct10649.com:8093

https://develop.local.ct10649.com:8843

包括帐号及密码,第一次登陆请更改密码。上面2个地址中第1个是应用管理平台,第2个是连接管理平台,各有侧重,开发过程中,均需配置,2者数据互通。


 应用开发

主要步骤包括 使用邮件里面的2个地址,建立应用,编辑profile,开发编解码插件,设备联网并上报数据,建立应用服务器,在线测试。

初次接触的同学可能不理解profile和编解码插件分别指代什么,举个例子,某温湿度传感设备上传指令如下:010304112233444BC6,其中温度为1122,湿度为3344。则profile就是一个表示该设备能力的文件,说白了,该文件定义了2个字段温度,湿度,设定好字段类型等参数即可。而编解码插件就是将原始数据解析,即温度=1122,湿度=3344。当然,如果有下发指令的也会包括进去。

如果仅仅是测试,以上步骤就完成了。

如果要通过联合测试,并取得报告,还有几件事情要做。

1 如果采用透传,则不能使用在线编解码插件开发,必须采用线下开发的形式(限定JAVA语言,MVN编译),如果离线开发的最好使用pluginDetector.jar插件测试工具先测试通过再上传。

2 如果对接华为平台,则必须提供https接口,这个涉及到CA证书,电信平台同时支持http,https,在一般情况下,采用http即可。(如果证书错误,会提示503错误,后面有详细说明证书制作方法)

3 如果要通过测试进入正式平台,还需要校验签名(signtool.exe)

以上完成,就可以联系电信测试人员进行联合测试了,测试完成,1周内就会下发测试报告。(注意:应用服务器需要对各项操作返回均保留原始日志,联合测试过程中电信测试人员会要求提供应用服务器各项请求数据收发截图,并与电信平台进行比对,只有比对通过才能通过测试。包括设备数据变化订阅接口的推送数据等等。)


 编解码插件开发

一、按照《中国电信物联网开放平台编解码库开发与升级指南.pdf》文档来操作;

二、在完成profile文件的编写条件下,根据已有的编解码插件codecdemo来修改

其中包含几个重要文件:

1>CmdProcess.java

   修改serviceI

2>ProtocolAdapterImpl.java   (代码实现,包含实现接口IProtocolAdapter的类)

   修改厂商名称和设备型号

3>ReportProcess.java(上报程序)

   修改填写私有字段

4>ProtocolServiceImplTest.java(测试用例)

5>Pom.xml(Maven的配置文件)

均需按照要求及我们自己在profile文件中的定义来修改

三、修改完成之后进行编解码 maven 打包

 (在此之前要做好搭建 eclipse+Java+mvn插件开发环境工作)

参考:

Maven的安装及配置:

https://jingyan.baidu.com/article/d8072ac45d3660ec94cefd51.html

JDK环境变量配置:(若之前已经配置好则不需要)

https://jingyan.baidu.com/article/ca41422fe3b7261eae99edc6.html

完成插件编程后使用 maven进行打包, windows 中步骤如下:

a. 打开 DOS 窗口,进入 pom.xml 所在的目录;

b. 输入 maven 打包命令: mvn package。

c. DOS 窗口中显示“BUILD SUCCESS”后,打开与pom.xml 目录同级的 target 文件夹,获取打包好的 jar。

 注意 jar 的命名规范:设备类型-厂商 ID-设备型号-版本.jar,例如: Lightbox_Huawei_NBDevice-1.0.0.jar:

1. com 目录存放的是 class 文件。

2. META-INF 下存放的是OSGI 框架下的 jar 的描述文件(根据 pom.xml 配置生成的)。

3. OSGI-INF 下存放的是服务配置文件,把编解码注册为服务,供平台调用。

4.其他 jar 是编解码引用到的 jar 包。


四、制作插件包

1、将编解码 jar 包和描述文件打包成 ZIP 格式的插件包。

2. 新建文件夹命名为"package",包含一个 preload/子文件夹。

3. 在"package"文件夹中,新建package-info.json文件。

4.选中"package"文件夹中的全部文件,使用winRAR 等压缩工具打包成 ZIP 格式的压缩包 package.zip(注意package.zip 下不能包含 package 这层目录)。

5.使用离线签名工具对 package.zip 进行签名,然后可以通过 IoT 联接管理平台安装编解码插件。待签名的软件包存放的路径请勿包括中文,否则会验签失败。

参考《NB-IoT编解码插件检测工具使用说明.pdf》


五、使用本地工具signtool测试插件和profile文件,详见《NB-IoT编解码插件检测工具使用说明.pdf》

若检测正确即可以向OceanConnect平台上传profile和编解码插件


六、注册设备

1、登录OceanConnect平台,单击“我的设备 > 注册设备”,即可看到应用下所有已上传的Profile,单击选中需要注册设备对应的Profile。

2、在Profile详情页,填写“设备名称”和“设备标识码”,单击“注册”按钮注册设备。

设备名称:用于区分不同设备,名称可自定义(如NBLightbox)。

设备标识码:设备唯一标识。使用NB模组对接时,填写模组的IMEI号码。

3、单击“我的设备”,查看对应设备是否注册成功。如果注册成功,可以看到设备处于“OFFLINE”状态。

4、终端入网

终端入网的详细步骤如下所示:

Step 1:终端上电,执行“AT+NRB”复位终端。如果返回OK,表示终端正常运行。

Step 2:执行“AT+CFUN=0”关闭功能开关。如果执行成功,返回OK。

Step 3:执行“AT+NTSETID=1,设备ID”设置设备ID。设备ID为NB模组的IMEI号,如果执行成功,返回OK。 我们这里是“AT+NTSETID=1,863703034540745” 863703034511811

Step 4:执行“AT+NCDP=IP, PORT”设置需要对接IoT平台的地址,端口为5683。如果执行成功,返回OK。我们这里是“AT+NCDP=180.101.147.115,5683”

Step 5:执行“AT+CFUN=1”开启功能开关。如果执行成功,返回OK。

Step 6:执行“AT+NBAND=频段”设置频段。如果执行成功,返回OK。频段信息可以咨询NB模组厂商。我们这里是“AT+NBAND=5”

Step 7:执行“AT+CGDCONT=1,“IP”,“APN”设置核心网APN。如果执行成功,返回 OK。核心网APN可联系运营商(与运营商网络对接时)或者OpenLab负责人(与OpenLab网络对接时)进行获取。(注:此步骤可省略)

Step 8:执行“AT+CGATT=1”进行终端入网。如果执行成功,返回OK。

Step 9:执行“AT+CGPADDR”查询终端是否获取到核心网分配的IP地址,如果获取到IP地址,表示终端入网成功。

Step 10:执行“AT+NNMI=1”设置下行数据通知功能,如果执行成功,返回OK


5、数据上报

串口工具中上报数据

执行“AT+NMGS=7,00002016050101”发送上行数据,如果上行数据发送成功,返回OK。由于设置了“AT+NNMI=1”,如果编解码插件中写了IoT平台对上报数据的应答,则上行数据发送成功后会自动获取应答数据。

上报数据的AT命令为:AT+NMGS=7,00002016050101。具体解析如下:

1. AT+NMGS=N,XXXXXXXXXX为上报数据的AT命令格式,其中“N”表示一共上报几个字节,后面为具体的上报字节内容,以十六进制字符串表示。这些需要提前在编解码插件中写好。

2. 本例中,一共上报7个字节,分别为“00”、“00”、“20”、“16”、“05”、“01”、“01”。其中,第一个字节“00”表示上报数据deviceReq,第二个字节“00”表示没有后续数据

第三个字节“20”表示temperatureCur(当前温度32),第四个字节“16”表示humidityCur(当前湿度22),第五个字节“05”表示batteryCur(当前电压值5V),第六个字节“01”表示lock1State(锁1状态关闭),第七个字节“01”表示lock2State(锁2状态关闭)。

注:这些内容与profile文件和编解码插件是一一对应的。

由于本例中的编解码插件写了上报数据应答,在上报数据成功后会收到“+NNMI:4,00000000”的应答。(ACK后面还需修改) 

6、 IoT平台中查看数据

Step 1 登录SP Portal,点击菜单“设备管理> 设备”,可看到注册设备已由“离线”状态变为“在线”状态。

Step 2 单击与deviceId对应的注册设备,进入”设备列表 > 网关”页。

Step 3 在”设备列表 > 网关”页,选择”数据”项,即可看到已经上报且被解析后的json数据。

(或者OceanConnect平台,点击我的设备->设备详情->历史数据)

在实际应用中,数据到达平台后,可以通过两种方式在应用服务器中接收数据:

1.调用数据查询类接口,从平台取出缓存的数据至应用服务器。

2.调用订阅接口,设置好推送地址,数据到达平台后会按照既定的IP地址将主动将数据推送至应用服务器。


 电信NBIOT平台的CA证书上传-消息订阅回调地址检测503错误

在NBIOT北向开发过程中,遇到消息订阅回调地址检测503错误,经过论坛查询与文档查阅一直都没有解决问题,大多人都说是RESTful地址格式问题,但其实不是。最终发现是我们在电信平台创建应用时,上传CA证书中.pem证书问题。我是在阿里云申请的免费证书,将证书下载下来后,如果直接将PEM格式文件上传到电信平台,那么消息订阅回调地址检测503错误,那为什么CA证书不正确,因为我们上传CA证书只包含了一级CERTIFICATE!!而实际上是有多级,如下图(CHROME浏览器):

 在证书路径下可以看到有三级证书:

那么我们需要导出其它二级证书信息,如图:

 

 

证书导出向导一定要选择BASE64

然后下一步,保存好cer文件,重复以上步骤,一级一级导出,如图:

导出完毕后,.cer文件用记事本打开,将里面内容依次复制粘贴到.pem文件中,如下图:

完成后,再将.pem上传到电信nb lot平台CA证书中,更新服务器上原来pem文件即可。

再登录电信NBIOT平台进行检测,我们可以看到通过检测: