BC26通过LWM2M接入电信AEP平台(透传模式)

本文详细介绍了LWM2M物联网协议,包括其对象和资源概念,以及CoAP和DTLS等关键技术。重点阐述了在AEP平台上如何配置LWM2M产品,支持IMEI和SM9认证方式,并详细讲解了非透传模式下Json格式的数据上报和解析规则。此外,还提供了模组侧的AT指令操作示例,展示了如何与AEP平台进行透传模式的数据交互。

非透传模式 Json格式接入https://blog.csdn.net/qlexcel/article/details/117484450

LWM2M协议简介

  LwM2M(lightweight Machine to Machine),是由OMA(open Mobile Alliance)定义的物联网协议, 主要使用在资源受限(包括存储、 功耗等)的NB终端。
  协议特点:
在这里插入图片描述
  LWM2M 把设备上的服务抽象为 Object 和 Resource, 并在 XML 文件中定义各种 Object 的属性和功能。
  LWM2M Objects: 每个对象对应客户端的某个特定功能实体。 LWM2M 规范定义了标准Objects, 比如urn:oma:lwm2m:oma:1; (LWM2M Server Object)、 urn:oma:lwm2m:oma:3; (Device Object), 每个object下可以有很多resource。 比如Device Object可以有Manufacturer, Model Number等resource。
  LWM2M Protocol定义了一些逻辑操作, 比如Read、 Write、 Execute等。
  CoAP是IETF定义的Constrained Application Protocol, 用来做LWM2M的传输层, 下层可以是UDP或者SMS, UDP是必须支持的, SMS可选。
  DTLS用来保证客户端和服务器间的安全性。
  支持IMEI认证和SM9认证两种设备认证方式。

AEP平台操作

进入AEP官网,完成注册 https://www.ctwing.cn/

进入“AEP控制台”

在这里插入图片描述

选择“设备接入”

在这里插入图片描述

选择“LWM2M”协议

在这里插入图片描述

创建产品

在这里插入图片描述
  填写的信息如上图所示,下面介绍下意义。
  产品名称和产品类别根据实际需要填写, 网络类型选择NB-IoT, 通讯协议选择 LWM2M。
  认证方式支持IMEI认证和SM9认证, SM9认证需要在物联网市场购买安全服务

  • IMEI认证, 平台对设备的IMEI进行有效性、 唯一性校验
  • SM9认证, 平台为设备提供一对公钥-私钥, 设备侧用私钥进行签名, 平台用公钥验签

  Endpoint 即Endpoint Client Name, 是LWM2M设备的标识, 平台支持的Endpoint格式有四种:

  1. IMEI, 不带前缀的15位IMEI号
  2. urn:imei:##################, 前缀“urn:imei:” + IMEI的格式
  3. urn:imei-imsi:##################-#####################, 前缀“urn:imei-imsi:” + IMEI + IMSI的格式
  4. urn:imei+sm9:###############+###…, 前缀“urn:imei+sm9:” + IMEI + SM9签名信息

  前2种只携带IMEI信息; 第3种携带了IMEI和IMSI信息, 适用于需要上报IMSI的场景; 第4种是SM9认证方式必须使用的格式。 需要根据具体的通信模组选择使用哪种格式, 并保证设备登录时携带的Endpoint格式与产品的Endpoint格式一致, 否则认证失败。
  是否已有电信官方认证通过的profile, 可以支持lwm2m协议设备由原NB网关迁移到AEP平台上。 选择该模式的产品, 可通过接口将经电信官
方认证的profile文件上传, 平台默认将profile文件转换为物模型形式, 产品服务完全按照profile文件定义。
  透传标记只针对Object19有效。 选择非透传, 需要在平台添加属性及服务, 用于数据的解析; 选择透传, 平台则不对Object19的数据进行解
析。
  省电模式支持PSM、 DRX、 eDRX三种, 根据终端支持的类型进行选择

  • PSM模式: 设备在数据连接终止或周期性TAU完成后进入PSM状态, PSM态的设备处于休眠状态, 不再侦听信号。 平台的下行数据不会立
    即下发, 缓存直到设备退出PSM态才会下发。
  • DRX模式: 非连续接收模式, 由于DRX周期短, 平台下行数据可以立即下发(如果设备在注册时Binding Mode支持Qmode,则按Qmode方
    式下发指令, 即采用空闲时间窗进行激活态到休眠态的切换) 。
  • eDRX模式: 增强型非连续接收, DRX周期更长, 对时延要求高, 需要根据设备是否休眠选择消息缓存或者立即下发。 创建eDRX模式的产品, 需要输入设备实际的eDRX周期, 用于下发指令的超时时间判断。

  创建好后,在产品中心中出现一个产品:
在这里插入图片描述
在详情中可以看到很多信息
在这里插入图片描述
拖到最下面把服务器IP和端口号记好,后面模组接入要用
在这里插入图片描述

添加设备

  往刚才创建的产品中添加新的设备。一个产品中可以有很多个设备。比如一个智能家居产品,可以包含扫地机器人设备、烟感设备等。
在这里插入图片描述
  设备名称自定义即可,填写NB模组的IMEI,保持默认开启自动订阅。
  IMEI长度为8-17个字节, 它是设备的唯一标识, 平台不允许重复添加
  选择自动订阅, 平台会针对设备支持的Object自动发起Observe流程, 否则需要手动发起Observe流程。

电信AEP平台接受的数据格式

  经过上面的步骤,在平台上建立起了模组对应IMEI号的设备。接下来就需要模组给平台上的该设备上传或下载数据了。首先看下平台接受的数据格式。

  Object 19 ( LwM2M APPDATA) 可以用于应用层业务数据的封装, 实现包括业务数据上报、 业务指令下发、 终端事件上报等功能。
  目前平台仅支持Data字段, 其他字段暂时不支持, 即:

  • 消息上行通过/19/0/0传送
  • 消息下行通过/19/1/0传送

  对于Data字段, 平台既支持数据透传也支持数据解析( 非透传) 。对于非透传设备, 数据格式支持紧凑二进制和Json两种格式。

一、 非透传设备(透传模式可以忽略)

  非透传设备上报的业务数据, 平台需要对业务数据进行解析, 因此数据格式必须遵守平台关于Object19的约定, 目前Object19支持紧凑二进制和Json两种数据格式。

1、 紧凑二进制格式

  业务数据上报、 事件上报、 无线参数上报的Data字段编码格式:
在这里插入图片描述

  • CMDType: 必填字段, 1Byte, 数据上报-0x02; 事件上报-0x07; 无线参数上报-0x03;
  • ServiceID: 必填字段, 2Bytes, 填写平台分配的服务ID
  • Payload_length: 必填字段, 2Bytes, 根据payload长度填写
  • Payload: 类型为Binary, Parameter1、 Parameter2等需要按照对应服务的属性列表的顺序填写, Parameter的类型要与属性类型一致。

  业务指令下发、 指令下发响应的Data字段编码格式:
在这里插入图片描述

  • CMDType: 必填字段, 1Byte, 下行指令固定为0x06, 指令响应固定为0x86
  • ServiceID: 必填字段, 2Bytes, 填写平台分配的服务ID
  • TaskID: 必填字段, 2Bytes, 由平台分配, 用于关联下发指令和回复响应, 指令和响应中的TaskID必须一致
  • Payload_length: 必填字段, 2Bytes, Payload的长度
  • Payload: 类型为Binary, 按照服务定义的属性( 或参数) 进行编码和解码

示例1、 设备上报两个属性
在这里插入图片描述
服务ID: 1, 属性1: 5个字节的定长字符串“hello”, 属性2: 2个字节的整型, 值为100。 首先需要将属性值转换为十六进制, 字符串“hello”转换
为十六进制为: 0x68656C6C6F(参照ASCII码表转换) , 100的十六进制为0x0064。 编码过程为:
CMDType: 0x02
ServiceID: 0x0001
Payload_length: 0x0007
Payload: 0x68656C6C6F0064
因此19/0/0的Data字段应填: 020001000768656C6C6F0064

示例2、 设备上报的属性为变长字符串
在这里插入图片描述
服务ID: 2, 属性: 变长字符串, 长度为5个字节, 值为: “hello”。 变长字符串在编码时需要携带2个字节的长度, 即属性1编码后的数据是
0x000568656C6C6F。 编码过程为:
CMDType: 0x02
ServiceID: 0x0002
Payload_length: 0x0007
Payload: 0x000568656C6C6F
因此19/0/0的Data字段应填: 0200020007000568656C6C6F

示例3、 指令下发和响应
在这里插入图片描述
下发的指令服务ID: 8001(0x1F41), TaskID: 1, 参数为1个字节整形: 1-获取当前时间, 0-时钟同步。编码过程为:
CMDType: 0x06
ServiceID: 0x1F41
TaskID: 0x0001
Payload_length: 0x0001
Payload: 01
19/1/0的Data字段为十六进制: 061F410001000101, 解析出指令内容为“获取当前时间”, 设备需要将系统时间通过响应发给平台。

指令响应的服务ID: 9001(0x2329), TaskID: 1, 参数为12字节的定长字符串“201812251300”, 编码过程为:
CMDType: 0x86
ServiceID: 0x2329
TaskID: 0x0001
Payload_length: 0x000C
Payload: 0x323031383132323531333030
指令响应19/0/0的Data字段应填: 8623290001000C323031383132323531333030

2、 JSON格式

  业务数据上报、 事件上报、 无线参数上报的Data部分应满足以下格式:
{“serviceId”: XXXX, parameter1:value1, parameter2:value2}
  “serviceId”的值为对应服务的服务ID, parameter1、 parameter2对应服务中每个属性, 用属性标识进行替换, value1、 value2对应属性值, 按照定义的属性类型填写。

  业务指令下发、 指令下发响应的Data部分应满足以下格式:
{“serviceId”:XXXX, “taskId”:XXXX, parameter:value}
  “serviceId”的值为对应服务的服务ID, "taskId"由平台分配, 用于关联下发指令和回复的响应。 parameter和value按照服务定义的属性来填写。

示例
定义如下物模型:
在这里插入图片描述
在这里插入图片描述
数据上报Data部分数据为
{“serviceId”: 1, “temperature”:36.5, “humidity”:20.5}

指令下发Data部分数据为
{“serviceId”:8001, “taskId”:2, “temperature”:30.5}

指令下发响应Data部分数据为
{“serviceId”:9001, “taskId”:2, “temperature”:30.5}

二、 透传设备

  平台对19/0/0、 19/1/0的Data字段不进行解析, 支持任意格式的业务数据的透传。

模组侧操作

  本文是介绍的透传模式通信,也就是模组把数据给平台,平台直接接收,模组发送什么,平台就接收到什么数据,不做任何处理。因此就没有非透传设备的那些数据格式了。

1、AT

AT
OK

查看返回OK,模组通信正常

2、AT+CGPADDR=1

AT+CGPADDR=1
+CGPADDR: 1,56.3.104.7

OK

检查NB模组的IP地址。

3、AT+QLWCLOSE

AT+QLWCLOSE
OK

CLOSE OK

  关闭上次的连接。只有建立连接了才能关闭,才会回复OK。如果回复error,不用管,说明没有建立连接。

4、AT+QLWDEL

AT+QLWDEL
OK

删除上次的LWM2M的连接

5、AT+QLWSERV=“221.229.214.202”,5683

AT+QLWSERV="221.229.214.202",5683
OK

设置电信AEP的IP地址和端口号,在产品详情中去看
在这里插入图片描述

6、AT+QLWCONF=“866971030565266”

AT+QLWCONF="866971030565266"

OK

设置接口LWM2M的NB模组的IMEI号

其中IMEI号可以通过指令 AT+CGSN=1 从模组中获取。

7、AT+QLWADDOBJ=19,0,1,“0”

AT+QLWADDOBJ=19,0,1,"0"
OK

添加 LWM2M对象, 19/0/0 上行链路

8、AT+QLWADDOBJ=19,1,1,“0”

AT+QLWADDOBJ=19,1,1,"0"
OK

添加 LWM2M 对象,19/0/1 下行链路

9、AT+QLWOPEN=0

AT+QLWOPEN=0
OK

CONNECT OK

+QLWOBSERVE: 0,19,0,0

开始注册IoT平台,并使用直接推送模式

10、AT+QLWCFG=“dataformat”,1,1

AT+QLWCFG="dataformat",1,1
OK

设置发送和接收的数据为十六进制的字符串模式。

11、AT+QLWDATASEND=19,0,0,5,30656C6C6F,0x0000

AT+QLWDATASEND=19,0,0,5,30656C6C6F,0x0000
OK

使用NON模式上报数据,此模式不需要IoT平台应答。
此时可以在AEP平台上去看接收的数据。
先查下设备的ID,并复制
在这里插入图片描述
粘贴到搜索框中,点搜索,即可查询到接收到的数据。解码方式要选16进制。
在这里插入图片描述
可以看到电信AEP平台接收到的数据与NB模组发送的数据一致。
再通过电信AEP平台下发一条指令12345,这里是字符串,NB模组将收到5字节数据。
在这里插入图片描述
因为模组处于PSM状态,不是与基站时刻连接的,因此平台下发数据NB模组不会立马收到,而是等NB模组再次与服务端连接时才会收到。我们再发送一条6字节的十六进制数据202122232425

AT+QLWDATASEND=19,0,0,6,202122232425,0x0000
OK

+QLWDATARECV: 19,1,0,5,3132333435

可以看到NB模组收到了5个字节数据:3132333435,这正是服务端下发的数据。

12、AT+QLWCLOSE

AT+QLWCLOSE
OK

CLOSE OK

取消电信AEP的LWM2M注册

13、AT+QLWDEL

AT+QLWDEL
OK

删除LWM2M的连接

另外,如果需要以文本字符串的格式透传数据给电信AEP平台,AT指令示例为:

AT+QLWCFG="dataformat",0,0
OK
AT+QLWDATASEND=19,0,0,50,{"serviceId":1,"temperature":36.1,"humidity":30.5},0x0000
OK

在这里插入图片描述

完整的AT流程

AT
OK
AT+CGPADDR=1
+CGPADDR: 1,56.70.128.189

OK
AT+QLWSERV="221.229.214.202",5683
OK
AT+QLWCONF="866971030565266"
OK
AT+QLWADDOBJ=19,0,1,"0"
OK
AT+QLWADDOBJ=19,1,1,"0"
OK
AT+QLWOPEN=0
OK

CONNECT OK

+QLWOBSERVE: 0,19,0,0
AT+QLWCFG="dataformat",1,1
OK
AT+QLWDATASEND=19,0,0,5,30656C6C6F,0x0000
OK
AT+QLWDATASEND=19,0,0,6,202122232425,0x0000
OK

+QLWDATARECV: 19,1,0,5,3132333435
AT+QLWCFG="dataformat",0,0
OK
AT+QLWDATASEND=19,0,0,50,{"serviceId":1,"temperature":36.1,"humidity":30.5},0x0000
OK
AT+QLWCLOSE
OK

CLOSE OK
AT+QLWDEL
OK
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qlexcel

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值