4G设备通过自定义透传数据对接联通IoT
联通IoT自定义透传数据接入流程
联通IoT ULink自定义透传数据接入流程
联通平台支持自定义协议和ULink协议。产品开发流程见下图:

本文讨论的是用户通过自定义协议接入联通IoT平台实现自身业务平台。
一、创建产品
- 产品信息:产品名称,产品品类,型号,品牌。
- 节点类型:设备,网关,中继
产品信息和节点类型,根据自己的产品进行填写即可。
- 联网与数据:
- 联网方式:根据自己设备通信模组类型进行填写,这里我用的是测试模组是联通4G模块。
- 交互协议:根据设备模块支持的协议方式进行选择,这里我们选择MQTT。
- 数据格式:
- ULink:联通平台定义的ULink数据格式协议,采用Json格式,设备严格按照文档定义的Json格式进行组装和解析。
- 自定义:非ULink数据格式协议,比如我们用到的16进制协议。
- 功能参数校验格式:
定义校验的模式,是否进行严格校验等。

二、创建设备
需要连接联通IoT平台的设备首先要在联通平台上创建设备。

- 所属产品:需要是创建过的产品
- 设备名称:根据需要自己定义
- 设备ID:设备的唯一标识,一般用设备的MAC地址或者IMEI号,序列号等。
根据以上描述,接入联通IoT的每个设备都需要创建设备,这个时候可以通过批量添加的方式。

录入设备成功后,会生成设备,在生成的设备详情里面,可以看到设备的属性。

- 产品pk: 设备所属的产品pk
- 设备ID: 设备的唯一标识ID
- devSecret: 设备的连接密码,在后续的设备连接中需要用到进行设备登录验证。
三、调试开发
调试开发分为三个主体。
- 应用平台
- 联通IoT
- 设备端
本次调试,设备端和联通IoT平台之间通过mqtt客户端调试。
应用平台和联通IoT平台之间通过postman调试
1. 设备连接登录调试(设备->联通IoT->应用平台)
* 通过mqtt客户端模拟设备连接
设备连接联通IoT平台的情况下,默认是需要进行进行登录校验的,mqtt连接的时候携带密码。
而每个设备的密码password是根据devSecret生成的。
devSecret是在联通平台录入devId后IoT生产的。
对于大批量设备生产的情况下,设备devId需要先批量导入平台,然后再把生成的devSecret提供给工厂,工厂需要在设备出厂之前一个一个录入到设备端。

如果数据校验不要求太严格,可以设置设备登录安全校验为:不校验

这样的情况下,就不用关心设备的devSecret了。
设备端可以用mqtt客户端进行模拟。具体配置如下:
- mqtt连接address和port根据上图所示即可
- ClientID:组成方式如上图所示:dev:{pk}:{devId}

在不开启设备登录校验的情况下,如下图所示:
- User Name:可以用devId
- password:用随机的密码进行填充。

点击连接即可连接成功。
* 通过mqtt客户端模拟设备上报数据(publish)

如上图所示填入对应的topic即可,然后在消息输入栏输入想要上报的数据。
- 通过mqtt客户端模拟设备接收订阅数据(subscribe)

subscribe同理,填入对应的topic。
关于设备端的topic,可以在设备的详情中查看,如下:

设备connect成功后,在平台可以看到设备默认会上报两条数据。
第一条是设备登出消息(devLogout)
第二条是设备登录消息(devLogin)

此消息是可以通过在产品端配置回调地址,推送给应用平台的,如下:


2. 设备数据上报调试(设备->联通IoT->应用平台)
首先设置数据回调地址:

然后在功能定义里面创建自定义参数和命令如下:
说明:本文讨论的是设备自定义数据,通过联通IoT平台透传裸数据到应用平台,应用平台将自定义的裸数据通过联通IoT平台下发到设备。端对端处理,双端保证数据纯净,联通IoT不参与数据处理。


创建好自定义参数后,在创建命令,需要将需要的参数放到对应的命令里。
这里的使用方法是,上报的数据,需要在ULink的Upload里面填充命令标识符。
如下消息格式:

如果在脚本中不把设备端上报的数据,组装成这个格式,则无法通过联通平台推送给应用平台。
我们此方法是将设备上报的数据组成标识符为:upload的命令。
参数填充到rawdata里面。
由于我们采用的是自定义数据格式上报,那么基本逻辑是:
- 设备端上报自定义格式的联通IoT,比如16进制字符串(D1AA3412345ADFF),联通IoT平台收到后会放入数据解析脚本进行解析。

- 根据脚本解析成功后,会转成联通IoT平台的ULink协议格式,即为自定义的参数和命令中的格式。

- 联通IoT平台会把此消息根据ULink格式推送给订阅的URL地址

其中iot_sys_req字段则是经过联通转换成ULink的协议,作为整个字符串放入了iot_sys_req中。
iot_sys*_*params字段则是自定义参数rawdata。
按照我们设计,应用平台只需要对iot_sys*_*params的rawdata进行解析处理即可。
至此设备上报数据流程完成。
3. 应用平台下发数据到设备调试(设备->联通IoT->应用平台)
应用平台下发是通过HTTP进行下发的。
我们采用postman客户端来模拟应用平台的请求。
根据ULink协议描述,调用API接口是需要进行token认证的。
官方提供了Java的token组装示例。
python的token组装示例如下:
1 |
|
生成token如下:accessKey=6qF8AN78EYWq6TbIMqXVYQtj&path=%2Fapi%2Fdevice%2FcloudSend%2Fbad23dbd1f73418786b03d5b15122fab%2Fcmtest×tamp=1640588922745&method=SHA1&sign=fae5fecf14e192497815f909967bbb408c214fc3
生成完token之后,再通过postman进行调用api测试。

http消息body填充的json体是根据文档描述进行的:

而两个参数,cmd和params是根据之前创建的参数和命令进行填充。
联通IoT平台在收到消息后,会通过脚本将数据进行解析。

此脚本是将rawdata取出,返回出去,然后联通IoT下发给设备。
如此设备在订阅的地址即可收到应用平台下发的裸数据:D900AF0123456789123123123




