背景
由于电信NB模组限制,使用了电信物NB联网卡的设备在连接公网时需要经过电信的CTWing平台,此时设备如果要做 FOTA升级则需要经过CTWing平台配置转发才能使用OneOS FOTA平台实现升级相关的操作。
访问电信CTWing平台 https://www.CTWing.cn/ 注册账号 然后做个人实名认证;进入控制台 并开通天翼物联网平台(AIoT)-通用组件服务。
如图,在应用管理中创建第三方应用,应用名称、应用分类、应用描述按实际使用填写,是否在AEP选择是,应用权限为AEP自身能力。
如图 产品名称、产品分类、设备型号等字段根据产品自定义填写。
节点类型:选择设备
接入方式:设备直连
网络类型:NB-IoT
通信协议:LWM2M
数据加密方式:明文
认证方式:IMEI认证
Endpoint格式:imei
是否已有电信官方认证通过的profile:否
是否透传:否
消息格式:JSON/紧凑型二进制(对应设备选择的数据传输方式,这里以JSON格式为例说明
产品创建成功后 需要在服务定义中建立属性,主要有fota_data属性,product_id属性,业务数据属性。点击右下角新增属性,接口入口如下图所示:
属性标识必须为fota_data,属性为string类型,用于包含fota的数据,最好设置最大数据长度1024以上,这里设置的2048。
属性标识必须为product_id,属性为int32类型,用于传输ctw平台产品字段。
用户需要传送到自己平台的业务数据,本字段按用户自己需求定义,示例中标识位data。
在产品--服务定义--服务列表 中建立服务,fota需要2条服务分别用于上传数据和下发指令,配置入口如下图。
数据上传服务,上报请求数据用的服务,需要包含fota_data,product_id两条属性,配置如下。
数据类型:数据上报
服务ID:可自定义,在端侧配置相同ID即可
服务名称:可自定义
服务标识:fota_data_report
参数列表:添加属性中配置的fota_data和product_id属性对应的属性名称
指令下发服务,用于将fota平台返回数据下发到设备,需要包含fota_data属性,配置如下。
服务类型:指令下发
服务ID:可自定义
服务名称:可自定义
服务标识:fota_data_distribute
参数列表:添加建立的fota_data属性对应属性名称
自定义服务,用户自身需要上传到自己平台的一些业务服务,这里给个参考设置,具体配置根据用户自身服务定义,示例中服务ID位789,服务标识为data。
在消息流转->目的地管理中的HTTP添加新增目的,URL自动填写http://218.201.45.140: 58084 /ctwpush/devicedata,不使用消息加密,该地址fota平台接受规则引擎转发数据的地址,之后再按照用户自身数据要求,添加转发到业务服务器的地址。
规则引擎配置可参考https://www.CTWing.cn/gzyq/107#/callback配置。
在规则引擎中,创建规则引擎,使用可视化创建
选择简单规则,产品选择需要的产品,如demo,数据级别选择产品级别。
选择字段中,在字段列表中勾选fota_data和product_id两个属性字段以及自定义函数列表中的获取设备ID。
选择条件中选择fota_data字段<>空(既foat_data字段不是空就匹配)。
点击保存,提交前添加规则描述。
创建转发数据。
选择 添加操作:为发送到HTTP(S)接口
HTTP(S)接口:选择消息路由中设置的fota平台地址
参数模板:{"product_id":"%product_id%","deviceId":"%func-deviceId%","fota_data":"%fota_data%"},既分别发送产品id,设备id,fota请求数据到fota平台。
点击返回规则列表,选择启用规则。
这时fota数据的规则已经配置好了,可以参考fota数据的规则配置业务数据的规则,匹配条件改为fota_data字段为空即可。
这是在ctw平台的配置除去产品中添加设备外其他配置已经完成。
为了保证规则引擎转发功能能正常使用,需要提交部分CTWing产品信息到OneOS-FOTA项目接口人,需要提交的信息有:
产品ID和Master-APIkey
第三方应用中的App Key和App Secret
登录OneOS-FOTA平台https://os.iot.10086.cn/otaplatform/ProjectHome,添加项目,其参数选项有
项目名称:可自定义,用于界面显示
OEM:可自定义,用于端侧配置
平台:按产品使用的型号选择,用于端侧配置
操作系统:选择RTOS
设备类型:按产品选择
设备型号:可自定义,用于端侧配置
OTA类型:必须选择精简版
完成项目创建后,选择主页中间顶部栏,进入在线差分平台。如下图:
选择刚刚创建的项目,并选择相应的配置参数,上传前置版本和目标版本包文件,点击下一步,进入差分包制作过程。
等待差分包制作完成,点击立即部署,就可以返回主页。进入当前项目查询制作差分包的版本的信息和差分信息 如下图 :
端侧使用OneOS_cube,menuconfig中的Components-OTA-Fota by CMIOT中配置,配置信息如图:
Oem:对应fota平台中的OEM字段
Model:对应fota平台中设备型号字段
Product id:对应fota平台中的product ID
Product secret:对应fota平台中的Product secret
Device type:对应fota平台中的设备类型
Platform:对应fota平台中的平台
CTWing product id:对应ctw平台中的产品id
CTWing fota data report service id:对应ctw平台中fota数据上报的服务id
The msg type report to CTWing:对应ctw平台中建立产品时选择的消息格式,支持JSON(2)和紧凑二进制(1)
上传消息格式请参考ctw平台说明https://www.CTWing.cn/sbjr/32。
上传业务数据有两种使用方式。
此情景上传的业务请求只包含业务数据,比如JSON格式消息为{"product_id":15059965," data":"123456”}
这种情景下,因为规则引擎设置的是fota_data字段为空转发业务平台,fota_data字段不为空转发fota平台,所以在业务消息中没有见fota_data置空,只能在每次请求完成fota后发送一条消息将fota_data字段置空。这样因为fota_data置空的这条消息能匹配转发业务平台,所以业务平台会再次转发条最后保存的业务消息,并且在进行fota请求的同时不能转发业务数据
此情景上传的业务请求包含业务数据和fota_data置空消息,比如JSON格式消息为{"product_id":15059965," data":"123456”,”fota_data”:””}
这样就不需要每次fota请求后专门将fota_data置空,所以代码中将fota_data置空这条配置删除,cmiot_self.c中smiot_send_enpty_data_to_CTWing返回改为cmiot_false
到此,你就可以正常使用OneOS FOTA的全部功能了。