【IoT】物联网NB-IoT之移动oneNET平台硬件接入

article/2025/10/20 12:17:33

主要实现开发者实际的终端设备在 OneNET 平台上的创建、连接和数据交互。在完成用户注册和产品创建后,即可根据相关所创建产品的协议类型选择相应的硬件接入的开发。

接入流程可参见下图:

1、LWM2M 协议 - NB-IoT

测试接入流程分为平台域和设备域,用于进行首次接入体验,以便对平台的功能以及接入协议有大致的了解。

 测试流程图: 基于 NB 模组 / SDK 方式接入流程

接入步骤如下

Step1 创建产品,选择接入协议:

首先需要在平台创建一个 NB-IoT 产品,在设备接入协议选择时选择 LWM2M 协议(因NB-IOT 设备需通过 NB 基站接入平台,创建产品时联网方式请选择“移动蜂窝网络”)。

创建产品后,记录该产品的用户ID

Step2 创建设备,记录设备ID等信息

创建设备有两种方式:

第一种 可以通过页面点击添加设备,输入设备名称和鉴权信息(即 IMEI、IMSI - 通过 AT 指令可以获取)并记录下该设备编号,参考 Blog 设备接入实例。

第二种 可以通过调用创建设备 API 实现设备的创建,输入设备的设备名、接入协议、鉴权信息以及 MasterKey 等信息,即可在平台上创建设备。

Step3 移植 SDK 或搭载 NB 模组,建立 UDP 连接

结合 NB-IOT 设备的实际接入方式,目前来看主要有两种:

第一种,NB-IOT 设备搭载了已经实现接入 OneNET 平台的 NB 模组,设备通过 NB 模组和 NB 基站以及核心网等网元连接,实现和 OneNET 平台进行交互,完成同 bootstrap 服务器建立 UDP 连接。

具体方式为设备上电后通过发送 AT 指令给模组,同时携带 endpoint name 参数(也即鉴权信息IMEI、IMSI等信息)实现设备和平台之间的 UDP 连接。连接建立成功后,bootstrap 服务器会返回的 LWM2M 接入服务器地址和端口;

已经实现接入 OneNET 平台的 NB 模组部分展示见下表:

厂商名称产品类型产品型号
广和通模组N700-CN
移远模组BC95
骐俊物联模组ML5330
SIMCom模组SIM7000C-N
新华三模组IM2209
中兴微电子芯片RoseFinch7100
高通芯片MDM9206
MTK芯片MT2625
华为海思芯片Boudica120
华为海思芯片Boudica150

第二种,NB-IOT 设备搭载的 NB 模组未实现接入 OneNET 平台,该情况建议有两种方式:

第一种方式开展 NB 模组接入 OneNET 的适配工作;另外一种方式需要用户下载 NB-IOT 的SDK,开展相应的开发工作自行移植至设备的MCU中。

若SDK已成功移植至MCU后,可在MCU中配置好 bootstrap 服务器地址、端口号,以及 endpoint name 参数(也即鉴权信息IMEI、IMSI等信息)信息后,通过SDK实现和 bootstrap 服务器的UDP连接。连接建立成功后,bootstrap 服务器会返回的 LWM2M 接入服务器地址和端口。

bootstrap 服务器域名为:nbiotbt.heclouds.com 端口号为:5683

Step4 建立设备与平台间的协议连接

在Step3中完成设备获取 LWM2M 接入服务器的地址后,设备会自动完成和平台间的协议连接。

Step5 设备资源列表查看

在Step4中完成设备上线后,通过点击最右边的“资源列表”按钮可以进入该设备的资源列表中进行信息查看。设备上线后会上传一个资源列表到平台中,平台可以对这些资源做读、写、执行、订阅等操作。

在资源列表中可以看到设备下的对象名称、实例个数和属性个数。

Step6 设备属性查看,资源数据操作

在Step5中看到设备资源列表后,点击某个具体的对象名称后可以看到具体的对象实例以及该对象实例下的属性值等信息。在该页面上可以实现对具体某个属性的读、写、执行以及查看详情等权限,完成对设备某个具体属性的实际操作。 

Step7 结合实际场景开展 NB-IOT 应用 通过Step1-6上述操作,可以实现对具体 NB-IOT 设备的连接、资源列表查看、对象属性的读、写、执行等实际操作等,满足在NB环境下整个NB-IOT应用的开展。

在设备接入OneNET平台之前,设备侧需完成由OneNET平台提供的基础通信套件SDK的移植工作。目前,按SDK集成在终端的方式可将终端分为如下三类:

a、“MCU+NB 通信模组”架构中,SDK 移植到 MCU 中;

b、“MCU+NB 通信模组”架构中,SDK 移植到 NB 通信模组中;

c、“NB 芯片”的 SOC 架构中,SDK 移植到 NB 芯片中。

2、接入实例

基于 M5310 模组实现 NB 设备接入实例 - LWM2M。

2.1、上电初始化 

注意:每个 AT 命令之间应该留有一定时间间隔

M5310
OK//开机启动信息
AT//开机之后循环发送AT直到返回OK,证明模块初始化正常
OK
AT+COPS=1,2,"46000"//设置手动注册移动运营MNC
OK
AT+NEARFCN=0,3555//锁定频点为3555,锁频可以有效减小搜网时间,但是频点设置错误会导
//致搜网失败,建议通常情况下不要设置锁频
OK
AT+CSCON=1//打开信号提示自动上报
OK
AT+CEREG=1//打开注册信息自动上报
OK
+CSCON:1//自动上报的网络信号提示——已连接
+CEREG:1,19E6,94,7//自动上报的网络注册信息——1-本地网络已注册入网,5-漫游已
//注册,其它情况为注册异常,详细请参考AT命令手册 //如果未使能自动上报,则用户需要使用AT+CEREG?查询注册状态
AT+CGDCONT?
+CGDCONT:0,"IP",
"nbiot.MNC002.MCC460.GPRS",,0,0
//查询当前APN,次步骤可省略
OK-

注:需要确认入网状态为已注册才能进行后续数据收发操作,如果不使用自动上报功能,可使用 AT+CEREG? 命令主动查询当前注册状态直到变为已注册,目前测试开机注册时间范围为 20s-120s

2.2、UDP 数据收发

2.2.1、创建 UDP Socket

AT+NSOCR=<type>,<protocol>,<listen prt="">[,<receive control="">]

例如:

AT+NSOCR="DGRAM",17,2334,1//创建本地UDP监听端口,开启数据到达自动上报
0//创建成功返回socket编号,数值0-6,最多监听7个端口
OK//创建UDP成功

2.2.2、发送UDP数据 向目的UDP地址发送数据可使用AT+NSOST或AT+NSOSTF命令,如下, AT+NSOST=<socket>,<remote_addr>,<remote_port>,<length>,<data> AT+NSOSTF=<socket>,<remote_addr>,<remote_port>,<flag>,<length>,<data> 例如:

AT+NSOST=0,183.230.40.150,
36000,10,30313233343536373839
---
0,10//第0号Socket成功发送10 Byte UDP数据
OK
+NSONMI:0,30//第0号Socket接收到30 Bytes数据

2.2.3、接收UDP数据 当接收到UDP数据时,可以使用AT+NSORF读取,当读取长度大于实际接收长度时,返回缓冲区实际接收数据长度

AT+NSORF=<socket>,<req_length>---
+NSONMI:0,30//提示第0号Socket接收到30 Bytes数据
AT+NSORF=0,30//读取接收到的30Bytes数据,
0,183.230.40.150,36000,30,
5B3131372E3136392E33362E
31353A323137395D30313233343536373839,0
//读取到183.230.40.150:36000发过来的30Bytes数据

注:本示例的测试服务器为中移物联网公司内部测试服务器,会自动回复”[远程IP:端口]接收数据”,只做测试用途,不保证服务器功能。

2.4、关闭UDP

AT+NSOCL=''//''为2.1创建时系统分配的id
OK-

2.3、OneNET 数据收发

2.3.1、OneNET 平台端创建设备

访问 OneNET 门户网站:OneNET - 中国移动物联网开放平台 ,创建NB-IOT产品及设备。 创建设备所使用的鉴权信息 imei 及 imsi 需要记录并在终端登录时使用,返回的 device_id 为平台端创建的设备接入标识,如果需要查询设备信息,需要提供设备 id。

2.3.2、设备注册流程

(1)版本统一与创建基础通信套件

AT+MIPLVER?
+MIPLVER: 版本号
OK
该指令验证终端基础通信套件版本是否符合送测声明,直接在客户端读取通信套件版本信息,并将读取的版本信息与送测时声明的版本对比。
AT+MIPLCREATE
+MIPLCREATE:ref值(通常为0)
OK
为基础通信套件添加对象和实例,并从终端侧向OneNet平台侧发起注册过程,注册成功则判定创建通信套件成功。

(2)向通信套件添加 objec t组

AT+MIPLADDOBJ=0,3303,2,"11",6,1
OK
AT+MIPLADDOBJ=0,3306,1,"1",5,0
OK

LWM2M 规范定义了每个对象对应客户端的某个特定功能实体 object,instance 代表着这个 object 的不同实例。通过 objectid 和instanceid 可以确认到一个指定的 object 实例;而每个 object 下可以有多个 resource 属性数据。例如:一个设备有芯片温度传感器与外界温度传感器的值须上报,温度传感器便是一种 object 对象,而具体到某个温度传感器则需要 instanceid 来区分;某个温度传感器所对应的单位、温度等数值可视为其 resource 属性,具体的编码规范可参照IPSO规范或OMA模型规范Open Mobile Alliance - LwM2M Registry 。

终端侧向 OneNet 平台侧注册,检查 OneNet 平台侧下发的 discover 请求,discover 请求中包含 3303、3306 则判定添加成功。

(3)发起注册请求

A、注册操作

设备发送注册请求到平台侧,平台侧接收到设备发送的注册信息,在平台侧检查设备注册情况。

AT+MIPLOPEN=0,3600,30

OK

+MIPLEVENT: 0,6

+MIPLDISCOVER:0,msgid,3303

+MIPLDISCOVER:0,msgid,3306

+MIPLOBSERVE:0,msgid,1,3303,0,-1

+MIPLOBSERVE:0,msgid,1,3303,1,-1

+MIPLOBSERVE:0,msgid,1,3306,0,-1

在OneNet平台侧(http://api.heclouds.com)查看终端在线状态(图标为绿色),终端在线则判定设备注册成功。

控制平台下判断注册操作的API报文示例

GET http://api.heclouds.com/devices/status?imei=<终端设备IMEI>&devIds=<onenet分配的设备id> HTTP/1.1 Host: api.heclouds.com/ api-key: OneNet分配的api-key Content-Length: 0 终端侧预期回复: online : true

B、无参数更新注册

AT+MIPLUPDATE=0,0,0 OK +MIPLEVENT:0,11 终端侧在本次lifetime周期之内发送不携带参数的更新注册信息到平台侧,平台侧对该更新注册信息回应,确认检查终端侧是否收到平台侧的回应。

C、参数变动更新注册 AT+MIPLUPDATE=0,3600,1 OK +MIPLEVENT:0,11 终端侧在本次lifetime周期之内发送携带参数的更新注册信息到平台侧,平台侧对该更新注册信息回应确认,检查终端侧是否收到平台侧的回应。

2.3.3、数据上报流程 

用户上报数据

AT+MIPLNOTIFY=0,msgid1,3303,0,5700,4,4,98,0,0

OK

AT+MIPLNOTIFY=0,msgid2,3303,0,5601,4,4,88,0,0

OK

在OneNet平台侧查看终端上报最新数据和历史数据,数据完整且正确则判定成功。

控制平台下判断注销操作的API报文示例

GET http://api.heclouds.com/devices/设备ID/datapoints?imei=<终端设备IMEI>

HTTP/1.1

Host: api.heclouds.com/

api-key: OneNet分配的api-key

Content-Length: 0

终端侧预期回复:

{"errno":0,"data":{5700和5601最新数据},"error":"succ"}

2.3.4、设备 Bootstrap 流程

在设备已初始化且基础通信套件(配置信息包含Bootstrap服务器地址coap://183.230.40.39:5683)已创建成功且基础通信套件已添加对象和实例(3303、3306)且Bootstrap服务器就绪条件下,客户端向平台侧发起注册以触发Bootstrap过程并检查Bootstrap过程是否成功。

AT+MIPLOPEN=0,3600,30

OK

+MIPLEVENT: 0,1

+MIPLEVENT: 0,2

+MIPLEVENT: 0,6

+MIPLDISCOVER:0,msgid,3303

+MIPLDISCOVER:0,msgid,3306

+MIPLOBSERVE:0,msgid,1,3303,0,-1

+MIPLOBSERVE:0,msgid,1,3303,1,-1

+MIPLOBSERVE:0,msgid,1,3306,0,-1

在OneNet平台侧(http://api.heclouds.com)查看终端在线状态(图标为绿色),终端在线则判定Bootstrap过程成功。

控制平台下判断Bootstrap操作的API报文示例

GET http://api.heclouds.com/devices/status?imei=<终端设备IMEI>&devIds=<onenet分配的设备id> HTTP/1.1

Host: api.heclouds.com/

api-key: OneNet分配的api-key

Content-Length: 0

终端侧预期回复:online : true

2.3.5、设备管理流程

设备管理目前版本提供6操作:discover、read、write、execute、write-attributes、observe、

MCU应在执行平台下发的规定操作后数秒内(建议3s)上报对应操作结果,否则传输信息可能丢失。

(1) discover操作

设备发送注册请求到平台侧,检查设备接收到的平台侧信息中的Discover请求信息,并回应Discover请求,在平台侧检查设备资源情况。

AT+MIPLOPEN=0,3600,30

OK

+MIPLEVENT: 0,6

+MIPLDISCOVER:0,msgid1,3303

+MIPLDISCOVER:0,msgid2,3306

+MIPLOBSERVE:0,msgid3,1,3303,0,-1

+MIPLOBSERVE:0,msgid4,1,3303,1,-1

+MIPLOBSERVE:0,msgid5,1,3306,0,-1

AT+MIPLDISCOVERRSP=0,msgid1,1,34,"5700;5701;5601;5602;5603;5604;5605"

AT+MIPLDISCOVERRSP=0,msgid2,1,24,"5850;5851;5852;5853;5750"

OK

在OneNet平台侧查看终端资源列表,完整显示终端设备的实例和资源信息则判定成功。

控制平台下获取discover状态的API报文示例:

GET http://api.heclouds.com/nbiot/resources?imei=<终端设备IMEI>&obj_id=3303&obj_inst_id=0 HTTP/1.1

Host: api.heclouds.com/

api-key: OneNet分配的api-key

Content-Length: 0

预期结果:

终端设备的完整对象、实例、资源列表信息。

(2) read操作

A、读取 resource 请求

平台侧向设备发送指定资源的 Read 操作请求,设备收到消息后,终端通信套件获取设备的资源值信息返回给平台侧,在平台侧检查读取结果。

AT+MIPLREADRSP=0,msgid,1,3303,0,5700,4,4,20.123,0,0

OK

OneNet平台侧预期结果:

{"errno":0,"data":[{"res":[{"val":20.123,"res_id":5700}],"obj_inst_id":0}],"error":"succ"}

控制平台下读操作的API报文示例:

GET http://api.heclouds.com/nbiot?imei=<终端设备IMEI>&obj_id=3303&obj_inst_id=0&res_id=5700 HTTP/1.1

Host: api.heclouds.com/

api-key: OneNet分配的api-key

Content-Length: 0

终端侧预期回复:

+MIPLREAD:0,msgid,3303,0,5700

B、读取 instance 请求

平台侧向设备发送指定实例的Read操作请求,设备收到消息后,终端通信套件获取设备的实例资源信息返回给平台侧,在平台侧检查读取结果。

AT+MIPLREADRSP=0,msgid,1,3303,0,5700,4,4,20.123,5,0

AT+MIPLREADRSP=0,msgid,1,3303,0,5701,1,3, "Cel",4,0

AT+MIPLREADRSP=0,msgid,1,3303,0,5601,4,4,10.123,3,0

AT+MIPLREADRSP=0,msgid,1,3303,0,5602,4,4,60.2,2,0

AT+MIPLREADRSP=0,msgid,1,3303,0,5603,4,4,0.0,1,0

AT+MIPLREADRSP=0,msgid,1,3303,0,5604,4,4,99.0,0,0

OK

OK

OneNet平台侧预期结果:

{"errno":0,"data":[{"res":[{"val":20.123,"res_id":5700},{"val":"Cel","res_id":5701},{"val":10.123,"res_id":5601},{"val":60.2,"res_id":5602},{"val":0.0,"res_id":5603},{"val":99.0,"res_id":5604}],"obj_inst_id":0}],"error":"succ"}

控制平台下读操作的API报文示例:

GET http://api.heclouds.com/nbiot?imei=<终端设备IMEI>&obj_id=3303&obj_inst_id=0 HTTP/1.1

Host: api.heclouds.com/

api-key: OneNet分配的api-key

Content-Length: 0

终端侧预期回复:

+MIPLREAD:0,msgid,3303,0,-1

C、读取 object 请求

平台侧向设备发送指定对象的 Read 操作请求,设备收到消息后,终端通信套件获取设备的对象实例资源信息返回给平台侧,在平台侧检查读取结果。

AT+MIPLREADRSP=0,msgid,1,3303,0,5701,1,3, "Cel",3,0

AT+MIPLREADRSP=0,msgid,1,3303,0,5602,4,4,50.123,2,0

AT+MIPLREADRSP=0,msgid,1,3303,1,5701,1,3, "Cel",1,0

AT+MIPLREADRSP=0,msgid,1,3303,1,5602,4,4,55.123,0,0

OK

OK

OK

OK

OneNET平台侧预期结果:

{"errno":0,"data":[{"res":[{"val":"Cel","res_id":5701},{"val":50.123,"res_id":5602}],"obj_inst_id":0},{"res":[{"val":"Cel","res_id":5701},{"val":55.123,"res_id":5602}],"obj_inst_id":1}],"error":"succ"}

控制平台下读操作的API报文示例:

GET http://api.heclouds.com/nbiot?imei=<终端设备IMEI>&obj_id=3303 HTTP/1.1

Host: api.heclouds.com/

api-key: OneNet分配的api-key

Content-Length: 0

终端侧预期回复:

+MIPLREAD:0,msgid,3303,-1,-1

资源读取API报文协议如下:

操作Read(资源读取)
lwm2m-URIaddress /{Object ID}/{Object Instance ID}/{Resource ID}
参数说明{ Object ID }:必选,如设备上的传感器类型;
{ Object Instance ID }:可选,该类型传感器的编号;
{Resource ID}:可选,该传感器的某种类型的数据,如温度的当前值,最大值等
CoAP-MethodGET
CoAP-Option Option1:Uri-Path(11):{Object ID}
Option 2:Uri-Path(11):{Object Instance ID}
Option 3:Uri-Path(11):{Resource ID}
Option 4:Accept(17): 第1节中的Content Format表中的类型,如application/vnd.oma.lwm2m+tlv这个参数是指明读取数据的格式。
CoAP-payload-
Success2.05 Content
Failure4.00 Bad Request, 4.01 Unauthorized, 4.04 Not Found, 4.05 Method Not Allowed

注:每次read操作后模块响应上报COAP报文长度应小于512Bytes。

(3) write操作

A、写入 source 请求

平台侧向设备发送指定资源的Write操作请求,设备收到消息后,终端通信套件将指定值写入指定资源,在终端侧检查写入结果。

AT+MIPLWRITERSP=0,msgid,2

OK

OneNet平台侧预期结果:

{"errno":0,"error":"succ"}

控制平台下写操作的API报文示例:

POST http:// /api.heclouds.com/nbiot?imei=<终端设备IMEI>&obj_id=3306&obj_inst_id=0&mode=2 HTTP/1.1 Host: api.heclouds.com/ api-key: OneNet分配的api-key Content-Length: 47 //数值根据HTTP报文实际body大小修改 Content-Type:application/json HTTP内容:{"data":[{"res_id":5850,"val":1}]} 终端侧预期回复: +MIPLWRITE:0,msgid,3306,0,5850,2,1,01,0,0

B、写入 instance 请求

平台侧向设备发送指定实例的Write操作请求,设备收到消息后,终端通信套件将指定值写入指定实例下的资源,在终端侧检查写入结果。

AT+MIPLWRITERSP=0,msgid,2

OK

OneNet平台侧预期结果:{"errno":0,"error":"succ"}

控制平台下写操作的 API 报文示例:

POST http:// /api.heclouds.com/nbiot?imei=<终端设备IMEI>&obj_id=3306&obj_inst_id=0&mode=2 HTTP/1.1

Host: api.heclouds.com/

api-key: OneNet分配的api-key

Content-Length: 47 //数值根据HTTP报文实际body大小修改

Content-Type:application/json

HTTP内容:{"data":[{"res_id":5850,"val":1},{"res_id":5851,"val":22}]}

终端侧预期回复:

+MIPLWRITE:0,msgid,3306,0,5850,2,1,01,0,1

+MIPLWRITE:0,msgid,3306,0,5851,2,1,16,0,0

资源写入API报文协议如下:

操作Write(资源写入)
lwm2m-URIaddress /{Object ID}/{Object Instance ID}/{Resource ID}/{NewValue}
参数说明 { Object ID }:必选,如设备上的传感器类型;{ Object Instance ID }:必选,该类型传感器的编号;
{Resource ID}:必选,该传感器的某种类型的数据,如温度的当前值,最大值等;
{NewValue}:必选,写入的资源属性值。
CoAP-Method PUT/POSTCoAP-Option Option 1:Uri-Path(11):{Object ID}
Option 2:Uri-Path(11):{Object Instance ID}
Option 3:Uri-Path(11):{Resource ID}
Option 4:Content-Format(12):格式为Content Format表中的几种格式,
如application/vnd.oma.lwm2m+tlv
CoAP-payload{NewValue},数据格式为Option4中指定的数据格式
Success2.04 Changed
Failure4.00 Bad Request, 4.01 Unauthorized, 4.04 Not Found, 4.05 Method Not Allowed

注:每次write操作下发COAP报文长度应小于512Bytes,故下发数据段长度最大480Bytes。

(4) execute 操作

平台侧向设备发送指定资源的Exec操作请求,设备收到消息后,终端通信套件将操作值写入指定资源,在终端侧检查执行结果。

AT+MIPLEXECUTERSP=0,msgid,2

OK

OneNet平台侧预期结果:{"errno":0,"error":"succ"}

控制平台下发 execute 消息的 API 报文示例:

POST http://api.heclouds.com/nbiot/execute? imei=<终端设备IMEI>&obj_id=3303&obj_inst_id=0&res_id=5605 HTTP/1.1

api-key:OneNet分配的api-key

Host: api.heclouds.com

Content-Length: 21 //数值根据HTTP报文实际body大小修改

Content-Type:application/json

HTTP内容:{"args":"reset"}

终端侧预期回复:

+MIPLEXECUTE:0,msgid,3303,0,5605,5, "reset"

资源执行API报文协议如下:

操作Execute(资源执行)
lwm2m-URIaddress /{Object ID}/{Object Instance ID}/{Resource ID}/{Arguments}
参数说明{ Object ID }:必选,如设备上的传感器类型;
{ Object Instance ID }:必选,该类型传感器的编号;
{Resource ID}:必选,该传感器的某种类型的数据,如温度的当前值,最大值等;
{Arguments}:可选,待执行的命令,如重启,关机等。
CoAP-MethodPOST
CoAP-OptionOption 1:Uri-Path(11):{Object ID}
Option 2:Uri-Path(11):{Object Instance ID}
Option 3:Uri-Path(11):{Resource ID}
CoAP-payload{Arguments},格式为Content Format表中的text/plain格式
Success2.05 Changed
Failure4.00 Bad Request, 4.01 Unauthorized, 4.04 Not Found, 4.05 Method Not Allowed

注:每次execute操作下发COAP报文长度应小于512Bytes,故下发数据段长度最大480Bytes。

(5) Write-Attributes操作

平台侧向设备发送指定资源的Write-Attributes操作请求,设备收到消息后,终端通信套件将属性值写入指定资源,在终端侧检查执行结果。

AT+MIPLPARAMETERRSP=0,msgid1,2

AT+MIPLPARAMETERRSP=0,msgid2,2

OK

OK

OneNet平台侧预期结果:{"errno":0,"error":"succ"} {"errno":0,"error":"succ"}

控制平台下发Write-Attributes消息的API报文示例:

POST http://api.heclouds.com/nbiot/observe? imei=<终端设备IMEI>&cancel=false&obj_id=3303&obj_inst_id=0&res_id=5700&pmin=15&pmax=60>=50<=0&st=2 HTTP/1.1

POST http://api.heclouds.com/nbiot/observe? imei=<终端设备IMEI>&cancel=false&obj_id=3303&obj_inst_id=0&res_id=5601&pmin=18&pmax=90>=60<=0&st=2 HTTP/1.1

api-key:OneNet分配的api-key

Host: api.heclouds.com

Content-Length: 21 //数值根据HTTP报文实际body大小修改

Content-Type:application/json

{"args": " reset "}

终端侧预期回复:

+MIPLPARAMETER:0,msgid1,3303,0,5700,37,"pmin=15;pmax=60;lt=0.0;gt=50.0;st=2.0"

+MIPLPARAMETER:0,msgid2,3303,0,5601,37,"pmin=18;pmax=90;lt=0.0;gt=60.0;st=2.0"

(6) Observe操作

A、观察resource请求

平台侧向设备发送指定资源的Observe操作请求,设备收到消息后,终端通信套件订阅指定资源,在终端侧检查执行结果。

AT+MIPLPARAMETERRSP=0,msgid1,2

AT+MIPLPARAMETERRSP=0,msgid2,2

OK

OK

+MIPLOBSERVE:0,msgid3,1,3303,0,5700

+MIPLOBSERVE:0,msgid4,1,3303,0,5601

AT+MIPLOBSERVERSP=0,msgid3,1

AT+MIPLOBSERVERSP=0,msgid4,1

OK

OK

OneNet平台侧预期结果:

{"errno":0,"error":"succ"}

{"errno":0,"error":"succ"}

控制平台下观察操作的API报文示例:

GET http://api.heclouds.com/nbiot/observe?imei=<终端设备IMEI>&cancel=false&obj_id=3303&obj_inst_id=0&res_id=5700&pmin=15&pmax=60>=50<=0&st=2 HTTP/1.1

GET http://api.heclouds.com/nbiot/observe?imei=<终端设备IMEI>&cancel=false&obj_id=3303&obj_inst_id=0&res_id=5601&pmin=18&pmax=90>=60<=0&st=2 HTTP/1.1

api-key:OneNet分配的api-key

Host: api.heclouds.com

Content-Length: 21 //数值根据HTTP报文实际body大小修改

Content-Type:application/json

终端侧预期回复:

+MIPLPARAMETER:0,msgid1,3303,0,5700,37,"pmin=15;pmax=60;lt=0.0;gt=50.0;st=2.0"

+MIPLPARAMETER:0,msgid2,3303,0,5601,37,"pmin=18;pmax=90;lt=0.0;gt=60.0;st=2.0"

B、观察instance请求

平台侧向设备发送指定实例的Observe操作请求,设备收到消息后,终端通信套件订阅指定实例,在终端侧检查执行结果。

AT+MIPLOBSERVERSP=0,msgid,1

OK

OneNet平台侧预期结果:

{"errno":0,"error":"succ"}

控制平台下观察操作的API报文示例:

GET http://api.heclouds.com/nbiot/observe?imei=<终端设备IMEI>&cancel=false&obj_id=3303&obj_inst_id=0 HTTP/1.1

api-key:OneNet分配的api-key

Host: api.heclouds.com

Content-Length: 21 //数值根据HTTP报文实际body大小修改

Content-Type:application/json

终端侧预期回复:

+MIPLOBSERVE:0,msgid,1,3303,0,-1

C、观察object请求

平台侧向设备发送指定对象的Observe操作请求,设备收到消息后,终端通信套件订阅指定对象,在终端侧检查执行结果。

AT+MIPLOBSERVERSP=0,msgid,1

OK

OneNet平台侧预期结果:

{"errno":0,"error":"succ"}

控制平台下观察操作的API报文示例:

GET http://api.heclouds.com/nbiot/observe?imei=<终端设备IMEI>&cancel=false&obj_id=3303 HTTP/1.1

api-key:OneNet分配的api-key

Host: api.heclouds.com

Content-Length: 21 //数值根据HTTP报文实际body大小修改

Content-Type:application/json

终端侧预期回复:

+MIPLOBSERVE:0,msgid,1,3303,-1,-1

D、取消观察resource请求

平台侧向设备发送指定资源的取消观察的操作请求,设备收到消息后,终端通信套件取消订阅指定资源,在终端侧检查执行结果。

AT+MIPLOBSERVERSP=0,msgid,1

OK

OneNet平台侧预期结果:

{"errno":0,"error":"succ"}

控制平台下取消观察操作的API报文示例:

GET http://api.heclouds.com/nbiot/observe?imei=<终端设备IMEI>&cancel=true&obj_id=3303&obj_inst_id=0&res_id=5700 HTTP/1.1

api-key:OneNet分配的api-key

Host: api.heclouds.com

Content-Length: 21 //数值根据HTTP报文实际body大小修改

Content-Type:application/json

终端侧预期回复:

+MIPLOBSERVE:0,msgid,0,3303,0,5700

E、取消观察instance请求

平台侧向设备发送指定实例的取消观察的操作请求,设备收到消息后,终端通信套件取消订阅指定实例,在终端侧检查执行结果。

AT+MIPLOBSERVERSP=0,msgid,1

OK

OneNet平台侧预期结果:

{"errno":0,"error":"succ"}

控制平台下取消观察操作的API报文示例:

GET http://api.heclouds.com/nbiot/observe?imei=<终端设备IMEI>&cancel=true&obj_id=3303&obj_inst_id=0 HTTP/1.1

api-key:OneNet分配的api-key

Host: api.heclouds.com

Content-Length: 21 //数值根据HTTP报文实际body大小修改

Content-Type:application/json

终端侧预期回复:

+MIPLOBSERVE:0,msgid,0,3303,0,-1

F、取消观察odject请求

平台侧向设备发送指定对象的取消观察的操作请求,设备收到消息后,终端通信套件取消订阅指定对象,在终端侧检查执行结果。

AT+MIPLOBSERVERSP=0,msgid,1

OK

OneNet平台侧预期结果:

{"errno":0,"error":"succ"}

控制平台下取消观察操作的API报文示例:

GET http://api.heclouds.com/nbiot/observe?imei=<终端设备IMEI>&cancel=true&obj_id=3303 HTTP/1.1

api-key:OneNet分配的api-key

Host: api.heclouds.com

Content-Length: 21 //数值根据HTTP报文实际body大小修改

Content-Type:application/json

终端侧预期回复:

+MIPLOBSERVE:0,msgid,0,3303,-1,-1

2.3.6、设备注销流程

AT+MIPLCLOSE=0

OK

在OneNet平台侧查看终端离线状态(图标为灰色),终端离线则判定注销成功。

AT+MIPLDELETE=0(ref值通常为0)

OK

终端侧向OneNet平台侧发起注册过程,注册失败则判定删除通信套件成功。

AT+MIPLDELOBJ=0,3306

OK

终端侧向OneNet平台侧注销后再次注册,检查OneNet平台侧下发的discover请求,discover请求中不包含3306则判定对象3306删除成功

控制平台下判断注销操作的API报文示例

GET http://api.heclouds.com/devices/status?imei=<终端设备IMEI>&devIds=<onenet分配的设备id> HTTP/1.1

Host: api.heclouds.com/

api-key: OneNet分配的api-key

Content-Length: 0

终端侧预期回复:

online : false

注:用户亦可在向平台发送注销请求后执行销毁实例,此时模组会自动删除所有object。

用户亦可直接执行销毁实例,模组将会在向平台提出注销请求后删除object再销毁Object以及通信实例。 </onenet分配的设备id></onenet分配的设备id></onenet分配的设备id></req_length></remote_port></remote_addr></remote_port></remote_addr>

基于 MCU 实现 NB 设备接入实例 - LWM2M

基于MCU的方式实现NB设备接入,即通过移植 SDK 至设备 MCU 中,通过 MCU 和模组进行交互实现连接到 OneNET 平台。该情况适用于实验阶段或是终端设备对接入 OneNET 平台有较紧急意愿,但设备所用模组暂未支持接入 OneNET 的情况下。
具体的接入实例及步骤见下:

(1)首先需要完成对 SDK 的移植操作,实现把SDK植入所需连接到OneNET的MCU芯片中;

(2)网络配置。在连接 OneNET 平台之前需要对设备侧进行网络配置:

包括接入机的地址和鉴权信息等参数(即IMEI、IMSI)。

同时还需要对设备和平台所交互的资源进行资源配置,在设备端的SDK中,设备上所有与onenet进行交互的数据变量都需要表示为资源,比如温湿度传感器的温度和湿度分别可以表示为2个资源,配置好资源属性后,设备在向服务器注册的过程中会携带相应的资源列表 , 服务器端会主动向设备订阅(Observe)资源列表中所有资源。

属性描述
objid描述了设备上的传感器类型
instid描述了该类型传感器的编号
resid描述传感器的某种类型的数据,如温度的当前值,最大值,最小值
flag该资源的可操作性,支持的类型有可读/可写/可执行
type该资源的数据类型,支持的类型有bool/int/float/string/bin
write用户写该资源的钩子函数
execute用户执行该资源的钩子函数

注意:objid和resid是不能够随意定义的,必须遵守《IPSO-Smart-Objects-Expansion-Pack》文档中的规定

配置示例:

(3)心跳设置。设备端的SDK在初始化的时候会设置lifetime的值,并在向服务器注册的时候上传该值,SDK在到期后会主动向服务器发送Update消息,如服务器端未收到Update消息,服务器端将抛弃所有上报的Notify消息并向该设备发送RST消息。

(4)数据发送。如果有资源的值被更新了,需要调用nbiot_device_notify通知SDK该资源的值发生了变化,由SDK择机上传至onenet。

(5)下行处理。 命令由第三方应用发送至onenet,并由云平台转发至终端设备,读写命令和执行命令均直接发送至终端,SDK会自动调用该命令对应的资源中的write钩子函数或者execute钩子函数,用户只需要编写该两个函数即可以完成下行命令的处理。


http://chatgpt.dhexx.cn/article/vPpohJix.shtml

相关文章

【安装工具】【ARM-DS-5】成功破解ARM DS-5 v5.26.0 + 配置高通MDM9026芯片的demo==》成功编译得到demo.bin文件

Note&#xff1a;Win7 64环境 安装破解ARM DS-5 v5.26.0 http://blog.csdn.net/qq_27295631/article/details/68582582 验证破解成功 安装MinGW http://blog.csdn.net/qq_27295631/article/details/68582582 设置系统属性-环境变量(bin/lib/inc) ARMBIN C:\Program Files…

把乌托邦变成细密画:华为如何思考家居IoT?

奥尔罕帕穆克凭借他的名作《我的名字叫红》一举跃入20世纪文学史&#xff0c;而这部广为人知的作品也让我们知道了一种绘画史上非常奇特的艺术形式&#xff1a;细密画。 这种流传自希腊罗马&#xff0c;盛行于波斯帝国的艺术样式&#xff0c;特点是要在书的扉页、边框&#xff…

MDM9607平台 Secure Boot调试记录

本博客只涉及技术问题,尊重原创,不涉及商用问题。 目录 一 概述... 4 二 原理及流程... 4 2.1 安全启动原理... 4 2.2 安全启动结构图:... 5 2.3 安全启动流程图... 5 三 证书简介... 6 四 签名镜像格式... 7 五 熔丝熔断... 7 5.1 熔断使能... 7 5.2 熔断过程..…

MDM9205简介

大家好&#xff0c;今天小白给大家介绍下高通新推出的下一代物联网专用调制解调器Qualcomm 9205&#xff0c;欢迎一起学习交流。 去年12月17日&#xff0c;高通宣布推出下一代物联网&#xff08;IoT&#xff09;专用调制解调器Qualcomm 9205。全新Qualcomm 9205 LTE调制解调器…

基于机智云gokit4.0(G)和MDM9206的 小型智能气象站

项目介绍 小型气象站广泛应用于气象、农业、环境检测和治理等领域。小型气象站对空气温湿度、光照、风速、风向、雨量、土壤湿度、蒸发量、大气压力等环境气象要素进行全天候现场检测。通过更换不同的传感器&#xff0c;该装置也可用于楼宇环境监控、安防、智慧农业等领域。 由…

MWC2018 机智云发布gokit4.0G全栈IoT开发套件,支持高通MDM9206

MWC2018 机智云发布gokit4.0G全栈IoT开发套件&#xff0c;支持高通MDM9206 NB-IoT/eMTC 继2月14日Qualcomm高通宣布&#xff0c;推出面向Qualcomm MDM9206LTE IoT全球多模调制解调器的全新LTEIoT软件开发包&#xff08;SDK&#xff09;&#xff0c;并已预集成机智云物联网云平…

【沙龙】基于MDM9206芯片的gokit4(G)的应用实操

导读 紧跟前沿通信技术、Get最新开发技能&#xff0c;高通Qualcomm&机智云&移远通信高级工程师手把手教开发&#xff1a;通过GoKit4(G)MDM9206快速接入机智云&#xff0c;4小时掌握高通MDM9206 C-IoT SDK实现不同IoT应用场景的方法&#xff0c;实现NB-IoT产品原型设计…

在线公开课】基于MDM9206的GoKit4(G)在线公开课

【在线公开课】基于MDM9206的GoKit4(G)在线公开课 基于Qualcomm C-IoT SDK的物联网开发以及GoKit4应用开发指导 MDM9206 LTE IoT调制解调器是一款专为支持全球多模功能而打造的解决方案&#xff0c;它可支持eMTC&#xff08;Cat M1&#xff09;、NB-IoT&#xff08;Cat NB-1&…

MDM9206简介

MDM9206简介 大家好&#xff0c;今天小白给大家介绍一下当前很火热的一款多模多频的高通的NB-IOT芯片&#xff0c;欢迎一起讨论学习。 1. MDM9206芯片的发展背景 接下来我们看看该款具有代表性的多模多频NB-IOT芯片是基于什么样的大背景下产生的&#xff1f; 从2G、3G如今的…

VMware虚拟机centOS7的终端命令:权限不够

我的VMware虚拟机centOS7在终端命令的时候老是跟我说权限不够&#xff1a; 然后我就去网上查查查&#xff01;有一个大佬的博客非常完美的解决了我的问题&#xff01; (5条消息) VM虚拟机CentOS7提升用户权限_JzjSunshine的博客-CSDN博客 现在&#xff1a; 但是我高兴了太早我执…

centos中常用命令

centos中常用命令 一:使用 CentOS 常用命令查看 cpu 如果觉得需要看的更加舒服 grep “model name” /proc/cpuinfo | cut -f2 -d: 二.使用 CentOS 常用命令查看 cpu 是 32 位还是 64 位 查看 CPU 位数(32 or 64) 三:使用 CentOS 常用命令查看当前 linux 的版本 more /etc/r…

CentOS 7关闭防火墙命令

1、命令行界面输入命令“systemctl status firewalld.service”并按下回车键。 2、然后在下方可以查看得到“active&#xff08;running&#xff09;”&#xff0c;此时说明防火墙已经被打开了。 3、在命令行中输入systemctl stop firewalld.service命令&#xff0c;进行关闭…

centos命令源码获取

源码链接 https://vault.centos.org/7.9.2009/os/Source/SPackages/ 查看本地命令版本 which ls rpm -qf /usr/bin/ls下载指定命令的rpm包 wget https://vault.centos.org/7.9.2009/os/Source/SPackages/coreutils-8.22-24.el7.src.rpm提取源码 rpm2cpio coreutils-8.22-24.…

centos下所有命令都不能用

问题描述&#xff1a; 解决办法&#xff1a; --- export PATH"/usr/sbin:/usr/bin:/usr/local/bin:/usr/local/sbin:/bin:/sbin" 总的来说&#xff0c;不说运行在linux上的一些应用&#xff0c;或者你之前部署过的产品&#xff0c;就是很多linux的基本命令&#xff0…

centos linux升级命令,在CentOS系统下包更新的命令

在CentOS系统下包更新的命令 更新和升级yum update 全部更新 yum update package1 更新指定程序包package1 yum check-update 检查可更新的程序 yum upgrade package1 升级指定程序包package1 yum groupupdate group1 升级程序组group1 更多命令 一、安装yum install 全部安装 …

centos常用命令大全

文章目录 命令帮助查询操作压缩、解压网络相关文件操作命令文件与目录操作查看文件内容文本内容处理yum安装器系统相关简单命令修改密码策略 命令帮助 【要执行的命令】 --help 查询操作 全局查找 find / -name 【查询的内容】 压缩、解压 解压tar.gz结尾的压缩文件 tar -…

盘点大数据开发常用的四种编程语言

1.Python语言 如果你的数据科学家不使用R&#xff0c;他们可能就会彻底了解Python。如果你有一个需要NLP处理的项目&#xff0c;就会面临数量多得让人眼花缭乱的选择&#xff0c;包括经典的NTLK、使用GenSim的主题建模&#xff0c;或者超快、准确的spaCy。还有Juypter/iPython…

学习大数据,公司常用开发的编程语言是什么?

最近有不少初学者来问到&#xff0c;学习大数据&#xff0c;学习spark公司主要使用那些语言编写&#xff0c;每听到这一个问题&#xff0c;起码还是很不错的&#xff0c;证明你已经开始学习大数据了&#xff0c;并了解大数据Spark是可以使用多种语言来实现开发的&#xff0c;那…

大数据分析语言Python的价值和意义

Python提供了大量用于处理大数据的库。就开发代码而言&#xff0c;您还可以比其他任何编程语言更快地使用Python处理大数据。这两个方面使世界各地的开发人员能够将Python视为大数据项目的首选语言。要获得有关Python及其各种应用程序的深入知识&#xff0c;您可以咨询AAA教育支…