OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com

118
中移物联网有限公司 OneNET 开发文档中心 OneNET 平台 MQTT 接入开发文档

Transcript of OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com

Page 1: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com

中移物联网有限公司 OneNET 开发文档中心

OneNET 平台 MQTT 接入开发文档

中移物联网有限公司 OneNET 开发文档中心

版本更新信息

欢迎访问 OneNET 官方网站注册用户获取最新文档

版本号 修订日期 修订内容 作者 说明

V10 20187 新版本 陈小波张小波 敬威肖勇

V101 20180713 部分说明优化 陈小波张小波 敬威肖勇

中移物联网有限公司 OneNET 开发文档中心

目录 第一章 文档说明 6

第二章 MQTT协议接入流程 7

21 设备接入平台流程图 8

22 应用开发流程图 9

第三章 终端设备接入 OneNET 平台流程 11

31 终端设备接入 OneNET 平台前的准备工作 11

311 硬件准备 11

312 软件准备 11

32 终端设备接入 OneNET 平台步骤 12

321 OneNET 平台创建产品及设备 12

322 终端设备软硬件初始化 15

323 终端创建设备及资源 15

324 登录 OneNET 平台 15

325 设备数据点上报 16

326 创建应用 16

33 设备批量接入 20

331 平台设备批量复制 21

332 应用平台调用新增设备 API 27

333 终端调用注册 API 27

34 设备 ID与产品序列号 29

第四章 第三方应用开发 31

41 第三方应用接入 OneNET平台 31

412 第三方应用平台接入验证程序 32

413 OneNET 平台配置第三方应用平台 32

42 OneNET平台数据推送 34

421 明文消息 34

422 密文消息 35

423 消息相关字段说明 35

424 加密算法详述 36

中移物联网有限公司 OneNET 开发文档中心

43 API接口 37

432 设备 39

433 数据流 45

434 数据点 47

435 二进制数据 52

436 触发器 52

437 命令 57

438 视频能力 60

439 APIKEY 60

4310 消息订阅 64

第五章 接入实例 67

51 MQTT-device 接入 67

511 工具下载 67

512 界面说明 68

513 使用方法 68

52 基于麒麟开发板的 MQTT接入实例 77

521 搭建开发环境 77

522 连接硬件准备 79

523 工程实例 81

524 开发工程文件 82

525 编译下载 83

第六章 MQTT协议详解 85

61 设备与平台通信协议包格式 85

62 平台支持数据包类型 86

621 CONNECT(客户端请求与服务端建立连接 client -gt server) 86

622 CONNACK (服务端确认连接建立) 90

623 PUBLISH(发布消息 client -gt server) 91

624 PUBLISH(发布消息 server -gt client) 92

625 PUBACK(收到发布消息确认) 93

626 PUBREC(发布消息收到) 94

627 PUBREL(发布消息释放) 94

628 PUBCOMP(发布消息完成) 94

629 SUBSCRIBE(订阅请求) 95

6210 SUBACK(订阅确认) 96

中移物联网有限公司 OneNET 开发文档中心

6211 UNSUBSCRIBE(取消订阅) 96

6212 UNSUBACK(取消订阅确认) 97

6213 PING(客户端发送 PING(连接保活)命令) 97

6214 PINGRSP(PING命令回复) 98

6215 DISCONNECT(断开连接) 98

第七章 设备开发流程 99

71 连接鉴权 99

72 消息发布 99

721 数据点上报 99

722 平台命令(下发amp回复) 107

73 创建 Topic 110

74 订阅 111

75 取消订阅 111

76 推送设备 Topic 112

761 Publish报文推送 112

762 HTTP请求推送 115

77 离线 Topic 116

78 数据点订阅 116

第八章 常见问题 FAQ 117

81 终端设备接入 OneNET 平台的常见问题 117

82 API调用的常见问题 117

83 使用 OneNET 平台遇到的常见问题 118

中移物联网有限公司 OneNET 开发文档中心

第一章 文档说明

编写此开发文档是为了让开发人员使用 MQTT协议快速接入 OneNET 平台形

成基于设备上传数据的物联网应用开发

通过阅读此文档开发人员可以了解 OneNET 平台接入的总体流程包括设

备使用 MQTT协议接入 OneNET平台步骤基于 OneNET平台开发上层应用

文档适用人员熟悉 MQTT 协议设备接入侧需要具备一定功底的嵌入式开

发人员北向 API调用的开发人员需要具备一定的应用软件开发能力

注意建议以公司名义先注册 OneNET 平台账号

中移物联网有限公司 OneNET 开发文档中心

第二章 MQTT 协议接入流程

MQTT (Message Queue Telemetry Transport)遥测传输协议使用 TCPIP 提

供网络连接能够对负载内容实现消息屏蔽传输开销小可以有效降低网络流

量其主要提供了订阅发布两种消息模式更为简约轻量易于使用特别适

合于受限环境(带宽低网络延迟高网络通信不稳定)的消息分发属于物联

网(Internet of Thing)的一个标准传输协议

嵌入式设备选择 MQTT 协议优点

1 轻量级的 machine-to-machine 通信协议

2 发布(publish)订阅(subscribe)模式

3 基于 TCPIP支持 QoS

4 长连接协议

5 终端数据点上报支持的数据点类型包括

o 整型(int)

o 浮点数(float)

o 字符串(string)

o JSON 格式

6 适合于低带宽不可靠连接嵌入式设备CPU 内存资源紧张

典型应用场景

MQTT 协议适用于设备和平台需要保持长连接的使用场景MQTT 特点在

于可以实现设备间的消息单播以及组播可以不依赖于其他服务(下发命令服务

推送服务等)实现让设备以应用服务器的方式对真实设备进行管理和控制

以门禁系统为例应用服务器(虚拟设备)可以订阅每个门禁(真实设备)

的统计数据的 topic对所有门禁的数据进行统计分析每个门禁也可以订阅自

身开关门的 topic应用服务器凭此可以远程控制每个门禁的状态

中移物联网有限公司 OneNET 开发文档中心

21 设备接入平台流程图

平台

TCP连接创建产品

发送连接报文

连接应答

数据应答

发送数据报文

生成连接报文

数据应答

发送数据报文

终端

发送下行命令 下发命令

解析下行命令

生成存储数据报文

生成存储数据报文

解析连接应答

解析数据应答

解析数据应答

必要流程

可选流程

存储到数据流

存储到数据流

数据源 创建应用

心跳应答

发送心跳报文生成心跳报文

解析心跳应答

平台操作

设备操作

创建设备

图2-1 设备接入OneNET平台流程图

1) 创建产品

根据产品功能需求选择接入协议重要参数产品 ID注册码产品 APIKey

(见附录一)

2) 创建设备

通过 TCP直接与平台直连的终端在进行接入之前平台上必须要先存在一

个与之一一对应的虚拟设备可以通过开发者中心或者 API 注册创建设备接口

来创建重要参数设备 ID鉴权信息

3) 建立 TCP连接

不同协议有着不同的固定 IP地址与端口

中移物联网有限公司 OneNET 开发文档中心

4) 建立设备连接

通过 1)2)中的参数(一般为产品 ID+鉴权信息+设备 ID)生成连接报文

发送连接报文建立终端与 2)中新建设备的一一对应关系

5) 发送数据报文

按照连接协议生成数据报文发送至平台

6) 创建应用

7) 使用平台下发命令接口或者 API向设备发送指令

22 应用开发流程图

应用开发主要是通过 Rsetful API 的方式实现和 OneNET 平台进行交互对

接在您完成产品创建以及硬件接入后即可根据相关所接入的硬件设备以及所

上传的数据进行相关产品的开发

OneNET 平台提供的应用开发 API分为需要终端响应和只需 OneNET 平台

响应两类下面分别用两个流程图描述这两类 API 的开发流程图 2-2为需

要终端响应的 API 调用流程其中虚线部分只有离线命令的读写下发命令才

有该流程图 2-3为只需平台响应的 API 调用流程

在应用开发平台调用 API 之前 必须与 OneNET 平台建立连接建立连

接的过程和 API 调用流程一并在图中进行了标注

中移物联网有限公司 OneNET 开发文档中心

图2-2 需要终端响应的API流程

终端设备 OneNET平台 应用开发平台

1配置应用开发地址Token等参数

2向应用开发平台发起URLampToken验证

3解析验证请求参数返回验证消息

应用平台与OneNET平台已经建立连接

4调用API指令HTTP请求

5返回平台侧执行结果错误代码和uuid

6API指令执行完毕

图2-3 不需要终端响应的API流程

终端设备 OneNET平台 应用开发平台

1配置应用开发地址Token等参数

2向应用开发平台发起URLampToken验证

3解析验证请求参数返回验证消息

应用平台与OneNET平台已经建立连接

4调用API指令HTTP请求MQTT请求

5返回平台侧执行结果错误代码和uuid

6相应指令请求返回数据 推送数据及执行结果给应用平台

7API指令执行完毕

中移物联网有限公司 OneNET 开发文档中心

第三章 终端设备接入 OneNET 平台流程

终端设备与 OneNET 平台进行数据交互需经过公网到达平台根据 OneNET

平台与网络运营商的关系终端设备智能网关OneNET平台以及第三方应用四

者的网络关系可归纳如图 3-1所示

图3-1 终端设备与服务器网络关系

图 3-1 中终端设备或智能网关设备与 OneNet 平台使用 TCPIP 建立网络连

接使用 MQTT协议进行与平台进行数据通信

31 终端设备接入 OneNET 平台前的准备工作

311 硬件准备

设备终端接入 OneNET平台的通信方式也是多种多样的比较常用的有 GPRS

无线 WIFI以太网口GPRS 方式需要 GPRS 模块和 SIM 卡的支持无线 WIFI 模

块需要 WIFI 模块支持WIFI 模块推荐选用 ESP8266 串口 WIFI 模块GPRS 模块

推荐选用 SIM900A模块

312 软件准备

设备终端接入 OneNET 平台使用 MQTT 协议使用嵌入式设备需移植 SDK

到 MCU详见麒麟发开板接入实例

中移物联网有限公司 OneNET 开发文档中心

32 终端设备接入 OneNET 平台步骤

321 OneNET 平台创建产品及设备

3211 注册用户账号

进入 OneNET官网(httpsopeniot10086cn)点击首页右上角的ldquo注

册rdquo按钮注册用户账号

OneNET 支持ldquo个人用户rdquo和ldquo企业用户rdquo两种注册方式你可以根据您的

实际情况选择注册方式

以个人用户注册为例用户需在对应选项依次填写用户名用户密码所在

地手机号码图片验证码以及手机验证码并完成注册注册页面如图 3-2所

示注册完成后回到主页点击ldquo登录rdquo即可进入 OneNET 的官方主页并由

此进入到你的ldquo开发者中心rdquo

如果客户产品后续需要进行规模化量产建议以企业的名义进行注册注册

时注意注册信息的准确填写另外个人版和企业版在功能上无差异

图3-2 用户账号注册页面

3212 创建产品和设备

在进入到你的ldquo开发者中心rdquo后点击右上角的 ldquo创建产品rdquo在弹出页面中

按照提示填写产品的基本信息进行产品创建在创建过程中请您按照提示尽

可能完整全面地填写相应内容这样更方便您后期对产品进行管理

创建产品页面如图 3-3 和图 3-4其中设备接入方式选择ldquo公开协议rdquo联网

方式选择跟据实际设备进行选择设备接入协议选择ldquoMQTTrdquo

中移物联网有限公司 OneNET 开发文档中心

产品创建完成后页面弹出ldquo创建产品成功rdquo如图 3-5所示点击ldquo立即

添加设备rdquo显示如图 3-6所示界面依次填写ldquo设备名称rdquo鉴权信息设备

名称自定义鉴权信息用于平台对终端设备鉴权每台设备具有唯一性建议设

置为产品出厂编号方便管理鉴权信息需写入设备

图3-3 创建产品页面

中移物联网有限公司 OneNET 开发文档中心

图3-4 创建产品页面

图3-5 创建产品成功页面

中移物联网有限公司 OneNET 开发文档中心

图3-6 添加设备页面

322 终端设备软硬件初始化

终端设备在上电以后需要完成设备的软硬件初始化硬件初始化包括各个

硬件模块的上电处理器的寄存器初始化工作模式初始化等等软件初始化包

括基础通信套件初始化应用接口初始化应用程序初始化等等

323 终端创建设备及资源

终端设备创建设备(device_id)配置产品 ID鉴权信息注册码连接

服务器 IP端口号等信息创建成功后与平台建立登陆连接连接成功后即可向

平台上报数据点

324 登录 OneNET平台

终端设备的基础通信套件完成初始化以及设备资源创建完成后可向

OneNET平台发送登陆请求返回登录结果如果参数错误或者登录超时平台会

返回登录失败如果验证通过平台会返回登录成功

若终端设备登录平台成功设备名称左边的圆形图标会由灰色(离线状态)

变成绿色(在线状态)如图 3-7所示

中移物联网有限公司 OneNET 开发文档中心

图3-7 平台侧设备状态显示

325 设备数据点上报

终端设备与平台成功建立连接后设备使用 publish 报文向平台上报数据点

平台收到数据点后保存到对应数据流下方便应用查阅数据点上报格式以及类型详见

721

图3-8 平台侧收到设备数据流显示

326 创建应用

用户可以利用上传的数据创建相关的应用发布直观的展示页面目前在平台应用孵化

器中提供了曲线图柱状图表盘物体位置图片和开关等应用

在产品详情页面点击ldquo应用管理rdquo进入应用管理主界面如下图

中移物联网有限公司 OneNET 开发文档中心

图3-9 应用管理模块

点击ldquo创建应用rdquo输入应用名称点击ldquo创建rdquo如下图

图3-10 新应用创建

保存成功后点击编辑按键进入应用编辑页面如下图

中移物联网有限公司 OneNET 开发文档中心

图3-11 应用编辑入口

图3-12 应用编辑界面

在应用编辑页面中使用左侧的控件进行应用编辑此例中我们选择表盘控件来显示

刚刚上传的数据点击表盘控件如下图所示

中移物联网有限公司 OneNET 开发文档中心

图3-13 表盘控件添加

在右侧的属性中选择设备以及数据源(及刚刚上传的数据流)如下图

图3-14 表盘控件数据流绑定

在确定好数据流之后可以看到表盘回显示成我们添加的数据的值其他的

刷新频率以及表盘显示样式读者可以自行更具需求加以修改

完成应用编辑之后点击右上角保存按钮退出应用编辑

在应用管理页面点击该应用即可查看编辑好的应用页面

中移物联网有限公司 OneNET 开发文档中心

图3-15 保存应用

图3-16 应用查看与分享

该应用可以通过共享ldquo发布链接rdquo的方式将该应用共享给他人

33 设备批量接入

单个设备可以通过平台的开发者中心添加设备的方式进行创建若用户有多

个设备直接与平台 TCP连接的终端通过手动添加需耗费大量时间人力OneNET

中移物联网有限公司 OneNET 开发文档中心

为大批量接入用户提供 3种批量创建设备的方案

331 平台设备批量复制

此种方式为选择某个设备作为复制的模板通过导入 EXCEL的方式进行设备

复制厂商可以在小批量测试时使用该功能

在设备列表中点击查看详情

图3-17 设备批量接入

在设备详情页面点击批量导入设备信息

中移物联网有限公司 OneNET 开发文档中心

图3-18 导入设备信息

点击批量复制

图3-19 批量复制

中移物联网有限公司 OneNET 开发文档中心

目前提供三种批量创建的方式 excel 导入的方式为主要接入方式选择

excel导入点击下载模板

图3-20 快速导入

图3-21 Excel导入

打开下载下来的 excel模板表中的 titledesctags等均为将要批量导

入的设备的数据其中的 title 和 auth_info 为必填选项title 为设备名

中移物联网有限公司 OneNET 开发文档中心

auth_info对应设备的鉴权信息

图3-22 Excel格式

填写 3个设备信息

图3-23 Excel内容

三个设备的 title和 auth_info都一样均为 20170808000012017080800002

2017080800003保存该表格点击ldquo点击上传rdquo上传保存好的 excel 文件

点击ldquo确定导入批量rdquo

中移物联网有限公司 OneNET 开发文档中心

图3-24 导入上传

图3-25 确认创建

可以看到在原设备目录下新增了 3个设备其名称分别为 2017080800001

20170808000022017080800003

中移物联网有限公司 OneNET 开发文档中心

图3-26 批量创建的设备

点击设备详情可以看到设备目录下各个设备的鉴权信息与表格中所填

写的内容一致

图3-27 设备ID及鉴权信息

至此完成了通过批量设备复制的方式完成设备批量创建的过程用户如果

要使用这个功能需要将自己终端的出厂序列号整理到这个 excel表中然后利

中移物联网有限公司 OneNET 开发文档中心

用上传表格的方式进行批量创建

332 应用平台调用新增设备 API

OneNET 提供了创建设备的 API接口

图3-28 新增设备API接口

其中的 auth_info 参数对应着设备的鉴权信息通过调用此 API 接口可以

实现在平台上新增设备的功能用户如果有自己的第三方应用平台进行设备管理

可以通过多次调用此接口的方式进行设备的批量创建在调用接口时需要确保每

次调用的 auth_info 参数对应着自己的每一个终端不同的出厂序列号

333 终端调用注册 API

API 实际是 HTTP 协议的通信协议终端也可以通过封装 HTTP 包发送注册

中移物联网有限公司 OneNET 开发文档中心

设备请求的方式调用 API

终端调用注册 API 创建设备并接入的流程如图 3-29所示

平台

TCP连接协议接入机

创建产品

发送连接报文

连接应答

数据应答

发送数据报文

生成连接报文

设备

发送下行命令 下发命令

解析下行命令

生成存储数据报文

解析连接应答

解析数据应答

必要流程

可选流程

存储到数据流 数据源 创建应用

心跳应答

发送心跳报文生成心跳报文

解析心跳应答

平台操作

设备操作

利用设备本身的sn和产品的设备注册码生成注册报文

TCP连接API服务器

发送注册报文

注册应答

解析设备ID

创建设备

设备开机

读取硬件中烧录的设备编号(sn)

图3-29 终端调用注册API接入流程

1) 创建产品

重要参数产品 ID注册码产品 APIKey(见附录一)

2) 生成并发送注册报文

每一个用户终端中都有厂商烧录的唯一出厂序列号(sn)终端上电

之后应该首先读取自己的 sn然后通过 1)中的注册码和 sn 一起组成注

册报文

注册报文格式如下例

POST httpapihecloudscomregister_deregister_code=6TM7OkhNsTjATvFx HTTP11

Host apihecloudscom

Content-Length 48

中移物联网有限公司 OneNET 开发文档中心

sn02136616511001titletestdevice0001

其中

6TM7OkhNsTjATvFx 为产品注册码

02136616511001 是本例中模拟的设备唯一编号

testdevice0001 是本例中模拟的设备名

若上传的数据格式以及参数鉴权均正确则平台会返回设备创建成功

返回设备 ID以及该设备对应的设备 api-key

HTTP11 200 OK

Date Wed 09 Aug 2017 064821 GMT

Content-Type applicationjson

Content-Length 95

Connection keep-alive

Server Apache-Coyote11

Pragma no-cache

errno0datadevice_id11142371keyq9Mw0zqiAPjTwqfyCk2mWrUi8=errorsucc

3) 在步骤 2)完成之后平台上的设备就已经成功创建了终端需要

重新 TCP连接到对应协议的服务器上完成设备连接(与设备进行映射)以

及上传数据的操作

34 设备 ID 与产品序列号

通过 OneNET构建的物联网系统中有两套比较重要的编码设备 ID与产品序列号

(SN)其中

产品序列号是由厂商指定的在厂商的产品范围内是保持唯一的在出厂前烧写到每

一个终端中通常包含在与平台通信的数据中并以条形码的方式贴在产品的包装上用

于从用户的角度区分每一个独立的终端

设备 ID是在平台创建设备时由 OneNET分配的平台范围内唯一的编号应用于第三

方平台调用 OneNET API时使用

在创建设备时OneNET平台需要用户以设备 sn为参数进行设备创建成功之后平

台会分配一个设备 ID这样 OneNET内部就有了一个 sn-设备 ID的映射关系

终端登陆使用的鉴权信息是出厂时烧写好的 sn鉴权通过之后平台可以将该终端

上传是数据放到对应的设备中

上层应用通过创建设备 API或者查询设备 API建立 sn-设备 ID映射表在需要操作

某一设备时首先可以获取的是终端的 sn号(因为对用户是可见的)通过映射表获取设

中移物联网有限公司 OneNET 开发文档中心

备 ID然后再通过 API访问 OneNET平台上的对应设备

两套编码在物联网系统中的应用位置如下图所示

物联网应用

OneNET

终端

(烧写sn)

HTTP API 以设备ID为参数进行API访问

接入协议以sn为鉴权参数进行设备连接

设备

设备名

设备ID

设备sn

设备标签

sn 设备ID

snmdash设备ID映射表

中移物联网有限公司 OneNET 开发文档中心

第四章 第三方应用开发

第三方应用与 OneNET 平台的业务逻辑关系如图 4-1 所示第三方应用与

OneNET平台之间通过 HTTPS请求应答的方式实现数据交互OneNET 平台为第三

方应用提供封装好的 API 接口应用平台通过调用这些 API 接口完成对 OneNET

平台的读写执行以及设备管理请求然后 OneNET 平台会将相应的指令请求发送

到终端设备OneNET 平台收到终端设备响应的数据及设备信息后会将数据及

设备信息推送到应用平台完成应答

下面将分别介绍第三方应用接入 OneNET 平台的步骤OneNET平台提供的数

据推送功能以及 OneNET 平台为第三方应用封装好的 API接口

图4-1 第三方应用与OneNET平台的逻辑关系

41 第三方应用接入 OneNET 平台

第三方应用与 OneNET平台实现数据交互的前提是已经建立连接第三方应

用接入 OneNET平台的开发流程如图 4-2所示包括三个步骤

(1) 在 OneNET 平台创建了设备该设备有对应的真实设备且能正常上报

数据

(2) 用户已经开发并部署了 OneNET平台验证接入的程序

(3) 在 OneNET 平台正确配置了第三方应用数据接收的地址(URL)

Token以及其他参数

中移物联网有限公司 OneNET 开发文档中心

在确保上述第(1)步已经实现的基础上下面将分别讲述第(2)步和第

(3)步的实现过程

图4-2 数据推送的开发流程

412 第三方应用平台接入验证程序

第三方应用平台接入验证程序工作流程如下所述当 OneNET 平台完成对第

三方开发平台的配置后会向第三方开发平台发起 URLampToken验证接入验证程

序对平台发送的验证参数进行验证验证通过后第三方开发平台会向 OneNET

平台返回验证消息当 OneNET 平台收到验证消息后说明第三方开发平台与

OneNET平台已建立连接

目前 OneNET平台为第三方应用平台提供接入验证程序的 SDK有 Javaphp

Nodejs和 C四个版本

SDK 下载地址httpsopeniot10086cndocart432html118 -ldquo数

据推送rdquo

413 OneNET 平台配置第三方应用平台

在 OneNET平台对第三方应用平台的配置界面如图 4-3所示

URL第三方开发平台的地址

Token可以自定义用于第三方开发平台接入平台握手验证

消息加解密方式有明文模式和安全模式当启用安全模式后平台端需要

用户自定义 AESKey 或者由平台随机生成在应用程序中使用该 AESKey 解密消

中移物联网有限公司 OneNET 开发文档中心

推送时间限制(秒)和推送数据限制(个)设置ldquo推送时间限制rdquoldquo推送数

据限制rdquo可以实现批量推送数据减少服务器压力当满足ldquo推送时间限制rdquo和

ldquo推送数据限制rdquo要求后OneNET 将给第三方推送数据如果没有设置ldquo推送

时间限制rdquo和ldquo推送数据限制rdquo将默认数据实时推送

图4-3 第三方开发平台的配置界面

当用户成功在 OneNET 平台配置了第三方开发平台服务器地址后点击ldquo提

交rdquo按钮后OneNET 平台会向第三方应用平台发起 URLampToken 验证请求验证

通过且收到第三方返回的验证消息后则第三方应用平台与 OneNET 平台已建立

连接之后OneNET 平台在收到设备数据时会将设备数据推送到已配置的第三

方应用平台

用户数据接收服务程序接收到 OneNET平台发送的 ldquoURLampTokenrdquo验证请求

请求的格式形如httpipporttestmsg=xxxampnonce=xxxampsignature=xxx

蓝色字体部分为用户在 OneNET平台配置的 URL常规的验证流程如下

(1)在请求中获取参数ldquononcerdquoldquomsgrdquo的值将ldquotokenrdquo(此为页面

配置参数 token的值)ldquononcerdquoldquomsgrdquo的值计算 MD5(token+nonce+msg)

加密值并且编码为 Base64字符串值

中移物联网有限公司 OneNET 开发文档中心

(2)将上一步中 Base64字符串值通过 URL Decode 计算后的值与请求参数

ldquosignaturerdquo的值进行对比如果相等则表示 token验证成功

(3)如果 token 验证成功向 OneNET 平台返回ldquomsgrdquo参数值否则返回

其他值

说明如果用户不想验证 Token 的有效性可以忽略以上步骤并直接向

OneNET平台返回ldquomsgrdquo参数值

42 OneNET 平台数据推送

平台以 HTTPS POST 请求形式向第三方应用平台注册地址推送数据推送数

据相关信息以 JSON 串的形式置于 HTTPS请求中的 body部分

第三方应用平台在接收数据时会接收到数据的明文消息或者密文消息

明文消息中以ldquotyperdquo的数值区分不同的消息而密文消息与明文消息的区别

是ldquomsgrdquo部分经过了加密处理下面将分别对明文消息密文消息以及消息相

关字段和密文的加密算法进行说明

421 明文消息

明文消息有两种消息类型分别为数据点消息和设备上下线消息而数据点

消息又分为单条数据点消息和数据点消息批量形式数据点消息批量形式中的不

同数据点是以不同时间戳区分的

(1)数据点消息(type=1)

msg

type 1

dev_id 2016617

ds_id datastream_id

at 1466133706841

value 42

msg_signature message signature

nonce abcdefgh

(2)数据点消息批量形式(type=1)

msg [

type 1

dev_id 2016617

ds_id datastream_id

中移物联网有限公司 OneNET 开发文档中心

at 1466133706841

value 42

type 1

dev_id 2016617

ds_id datastream_id

at 1466133706842

value43

]

msg_signature message signature

nonce abcdefgh

(3)设备上下线消息(type=2)

msg

type 2

dev_id 2016617

status 0

login_type 1

at 1466133706841

msg_signature message signature

nonce abcdefgh

422 密文消息

密文消息中的ldquoenc_msgrdquo是由明文消息中的ldquomsgrdquo采用 AES 加密算法而

enc_msgxxxx

msg_signature

message signature

nonceabcdefgh

423 消息相关字段说明

表4-1 消息相关字段说明

字段 字段说明

type 标识数据类型当前版本范围[15]

dev_id 设备 ID

ds_id 公 开 协 议 中 的 数 据 流 ID 其 格 式 为

objectID_instanceID_resourceID

at 平台时间戳单位 ms

value 具体数据部分为设备上传至平台或触发的相关

数据

中移物联网有限公司 OneNET 开发文档中心

status 设备上下线标识

0-下线 1-上线

login_type

设备登陆协议类型

1EDP 2nwx 3JTEXT 5JT808 6

MODBUS 7MQTT 8gr2010NB-IoT

cmd_type

命令响应的类型

1设备收到 cmd的 ACK 响应信息 2设备收到

cmd的 Confirm响应信息

cmd_id 命令 ID

msg_signatur

e 消息摘要

nonce 用于计算消息摘要的随机串

enc_msg 加密密文消息体对明文 JSON串(msg字段)的

加密

424 加密算法详述

平台基于 AES算法提供加解密技术具体阐述如下

EncodingAESKey 即消息加解密 Key 的 BASE64编码形式长度固定为 43

个字符从 a-zA-Z0-9共 62个字符中选取由服务开启时填写后

也可申请修改

AES密钥计算为 AESKey=Base64_Decode(EncodingAESKey + ldquo=rdquo)

EncodingAESKey 尾部填充一个字符的ldquo=rdquo 用 Base64_Decode 生成 32

个字节的 AESKey

AES采用 CBC 模式秘钥长度为 32 个字节(256位)数据采用

PKCS7填充 初始化 iv向量取秘钥前 16字节 PKCS7K为秘钥字

节数(采用 32)buf为待加密的内容N为其字节数Buf 需要被填

充为 K的整数倍在 buf的尾部填充(K-NK)个字节每个字节的内容

是(K- NK)具体详见toolsietforghtmlrfc2315

BASE64采用 MIME格式字符包括大小写字母各 26个加上 10个数

字和加号ldquo+rdquo斜杠ldquordquo一共 64个字符等号ldquo=rdquo用作后缀填

出于安全考虑平台网站提供了修改 EncodingAESKey的功能(在

EncodingAESKey 可能泄漏时进行修改对应上第三方平台申请时填写

的接收消息的加密对称密钥)所以建议保存当前的和上一次的

中移物联网有限公司 OneNET 开发文档中心

EncodingAESKey若当前 EncodingAESKey 生成的 AESKey解密失败则

尝试用上一次的 AESKey的解密

平台的加密消息部分为 enc_msg= Base64_Encode( AES_Encrypt

[random(16B)+msg_len(4B)+msg] )即以 16字节随机字节串拼接 4字

节表示消息体长度的字节串(此处 4 字节长度表示为网络字节序)再加

上消息本身的字节串作为 AES加密的明文再以 AES算法对明文进行加

密生成密文最后对密文进行 BASE64 的编码操作生成加密消息体

对加密消息体的解密流程为1)首先进行加密消息体的 BASE64 解码操作

aes_msg=Base64_Decode(enc_msg)2)对获取的解码内容以 AES 算法进行解密

操作获取明文部分plain_msg=AES_Decrypt(aes_msg)解密中使用的秘钥由

EncodingAESKey 计算得来使用的初始化 iv 向量为计算出的 aes 秘钥的前 16

字节3)去掉 plain_msg 的前 16 字节再以前 4 字节取出消息体长度根据消

息体长度获取真实的消息部分(推荐以消息体长度获取真实消息以兼容

plain_msg 未来可能出现的结构变更)表示加密传输的数据后两字段与明文

传输一致

43 API 接口

第三方开发平台应用层通过 Rsetful API 的方式和 OneNET平台进行交互对

接实现命令的下发数据的读写以及相关业务的交互

针对 MQTT 协议目前主要开发了以下 API 用来实现第三方开发平台向

OneNET平台请求读写执行以及设备管理请求具体见下表 4-2下面分别对每一

种 API进行说明

表4-2 API功能说明

API 类别 操作对象 API名称

需要终端响应 只需平台响应

设备

注册

更新设备注册属性

新增

更新

精确查询单个设备

中移物联网有限公司 OneNET 开发文档中心

模糊查询设备

批量查询设备状态

删除

数据流

新增

更新

查询单个数据流

查询多个数据流

删除

数据点

新增

查询

二进制数

新增

查询

触发器

新增

更新

查询单个触发器

模糊查询触发器

删除

触发数据内容

命令

发送命令

查询命令状态

查询命令相应

查询设备历史命令

视频能力 获取播放地址

APIKEY

新增

更新

查看

删除

消息订阅

按 Topic发送命令

查询订阅指定 Topic设备的列表

查询设备订阅的 Topic列表

删除产品的 Topic

查询产品的 Topic

中移物联网有限公司 OneNET 开发文档中心

432 设备

4321 注册

表4-3 设备注册

HTTP方法 POST

URL apihecloudscomregister_de

URL参数 register_code=6TM1OkhNsTjATvFx 设备注册码(必填)

HTTP内容

(示例)

sn 2015031401421 设备唯一标识 string类型最长 512字符

mac C89346DA4373 设备唯一 mac标识最长 32字符

title myedpdevice 设备名(可选) 最长 32个字符

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

keyQ1VdWoEvdkCye=d1=HcCSP6LvCw= 新设备 apikey

device_id 325018 设备 ID

说明

1 响应消息中 errno 表示错误码error 表示错误原因如果创建设备失

败则没有 data字段

2 snmac一定要必填其中一个而且只可以传一个用于鉴权就是设备

新增中的 auth_info

3 此接口根据产品设置的不同默认 allow_dup=true可以生成新设备及

key或获取原有设备及 key见下表

表4-4 对应表

产品允许重复 sn 在产品中已存在 sn 在产品中不存在

allow_dup=true 是 sn 对应的设备 id 和 key 新的设备 id 和 key

allow_dup=false 否 报错 新的设备 id 和 key

中移物联网有限公司 OneNET 开发文档中心

此接口返回的新设备默认设备名均为auto_register均为私有设

备设备协议与产品协议相同

4322 更新设备注册属性

表4-5 更新设备注册属性

HTTP方法 PUT

URL apihecloudscomregister_attr

HTTP头部 api-key xxxxddddsssaaa 必须为 masterkey

HTTP内容

(示例)

allow_dup true|false是否允许重复提交相同的设备 sn 默认 true

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

默认 allow_dup 为 true主要用于设备注册码创建设备属性限制

4323 新增

表4-6 新增设备注册属性

HTTP方法 POST

URL apihecloudscomdevices

HTTP头部 api-key xxxxddddsssaaa 必须为 masterkey

HTTP内容

(示例)

title mydevice 设备名

desc some description 设备描述(可选)

tags [chinamobile] 设备标签(可选可为一个或多个)

protocolMQTT 选择一种接入协议(可选默认为 HTTP)

location lon 106 lat 29 ele 370设备位置纬度

经度 高度(可选)

private true| false 设备私密性(可选默认为 ture)

auth_info 201503041a5829151 MQTT设备设备唯一编号

other version 100 manu china mobile 其他信息(可

选JSON格式可自定义)

HTTP响应响

应消息内容

(实例)

errno 0

error succ

data

中移物联网有限公司 OneNET 开发文档中心

device_id233444 平台分配的设备 ID

4324 更新

表4-7 更新

HTTP方法 PUT

URL apihecloudscomdevicesdevice_id

HTTP头部 api-key xxxxddddsssaaa masterkey或设备 apikey

HTTP内容

(示例)

title mydevice 设备名(可选)

desc some description 设备描述(可选)

tags [chinamobile] 设备标签(可选)

protocolMQTT 选择一种接入协议(可选)

location lon106 lat 29 ele 370设备位置经度

纬度 高度(可选)

private true| false 设备私密性(可选)

auth_info201503041a5829151 MQTT设备设备唯一编号(可选)

other version 100 manufacturer china mobile 其

他信息(可选)

HTTP响应响

应消息内容

(示例)

errno 0

error succ

中移物联网有限公司 OneNET 开发文档中心

4325 精确查询单个设备

表4-8 精确查询单个设备

HTTP方法 GET

URL apihecloudscomdevicesdevice_id

HTTP头部 api-key xxxxddddsssaaa masterkey 或设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

iddevice_id

tags [chinamobile]

onlinetrue|false

protocolMQTT

titlemy device1

descsome description

create_time2015-09-16 102222

privatetrue|false

locationele370lat17609lon17703

auth_infohellip

otherversion100manufacturerchina mobile

keys[titledevice-auto-keykey2JO3B12O1]

数据流

datastreams[

create_time 2014-10-23 202222

iddatastream_id1

unitcelsius

unit_symbolC

uuid 231a5aa9-9de4-5f2e-9e0f-015181c98429

]

4326 模糊查询设备

表4-9 模糊查询设备

HTTP方法 GET

URL apihecloudscomdevices

中移物联网有限公司 OneNET 开发文档中心

URL 参数

key_words=my 匹配关键字(可选从 id和 title字段中左匹配)

auth_info=203x1 鉴权信息(可选对应注册时的 sn参数唯一设

备编号)

tag=mobile 标签(可选)

online=true| false 在线状态(可选)

private=true| false 私密性(可选)

page=1 指定页码最大页数为 10000(可选)

per_page=30 指定每页输出设备个数默认 30最多 100(可选)

device_id=235122 指定设备 ID多个用逗号分隔最多 100个(可

选)

begin=2016-06-20 起始时间包括当天(可选)

end=2016-06-20 结束时间包括当天(可选)

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

total_count1

per_page30

page1

devices

[

id3497307

titlemy device1

desc device desc

privatetrue

protocolMQTT

onlinefalse

locationlon10655231191544001lat29535451246673

create_time2013-02-11 122233

auth_infoSYSz=8QY3r7aTQ48UKfqPnB=PybYRo=

]

4327 批量查询设备最新数据

表4-10 批量查询设备最新数据

HTTP方法 GET

中移物联网有限公司 OneNET 开发文档中心

URL apihecloudscomdevicesdatapoints

URL参数 devIds=1221122331123 设备 id用逗号隔开限制 1000 个设备

HTTP头部 api-key xxxxddddsssaaa masterkey 或设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

error ldquosuccrdquo

data

devices [

id 12323 设备 id

title daf设备名

datastreams

[

id temperature数据流名称

at 2017-02-12 102222数据流更新时间

value 12数据流最新数据

hellip

helliphellip

]

hellip

hellip

]

4328 删除

表4-11 删除设备

HTTP方法 DELETE

URL apihecloudscomdevicesdevice_id

HTTP头部 api-key xxxxddddsssaaa 可为设备级别的 Key

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

中移物联网有限公司 OneNET 开发文档中心

说明删除设备会删除该设备下所有数据流和数据点删除设备动作是异步

的系统会在后续逐步删除该设备下的数据流和数据点

433 数据流

4331 新增

表4-12 新增数据流

HTTP方法 POST

URL apihecloudscomdevicesdevice_iddatastreams

HTTP头部 api-key xxxxddddsssaaa masterkey 或设备 apikey

HTTP内容

(示例)

idtemperature 数据流名称 示例温度

tags[Tag1Tag2] 数据流标签(可选可以为一个或多个)

unitcelsius 单位(可选)

unit_symbolC 单位符号(可选)

HTTP响应响

应消息内容

(示例)

errno 0

data

ds_uuid 9e6bcac9-2c6f-59d5-adae-3955df2e7bce平台分配

数据流 UUID

error succ

4332 更新

表4-13 更新数据流属性

HTTP方法 PUT

URL apihecloudscomdevicesdevice_iddatastreamsdatastream_id

示例apihecloudscomdevices421240datastreamstemperature

HTTP头部 api-key xxxxddddsssaaa masterkey 或设备 apikey

HTTP内容

(示例)

tags[Tag1Tag2] 数据流标签(可选)

unitcelsius 单位(可选)

unit_symbolC 单位符号(可选)

HTTP响应响

应消息内容

(示例)

errno 0

error succ

中移物联网有限公司 OneNET 开发文档中心

4333 查询单个数据流

表4-14 查询单个数据流

HTTP方法 GET

URL apihecloudscomdevicesdevice_iddatastreams

URL参数 datastreams_ids = 查看的 datastream的 id

HTTP头部 api-key xxxxddddsssaaa masterkey 或该设备的设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

data [

update_at 2018-06-29 112938 数据流最后更新时

id 湿度 数据流名称

create_time 2018-06-28 170548数据流创建时间

current_value 53845013最新数据点

]

error succ

4334 查询多个数据流

表4-15 查询多个数据流

HTTP方法 GET

URL apihecloudscomdevicesdevice_iddatastreams

URL 参数

datastream_ids= 查看的 datastream的 id多个 id之间用英文逗号

分开(参数缺省时为查询所有数据流)

示例

apionenetcomdevices1234datastreamsdatastream_ids=tempgps

表示查看 temp和 gps两个数据流的信息

HTTP头部 api-key xxxxddddsssaaa masterkey 或者 该设备的设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data 数据流信息

[

idtemperature 数据流名称设备范围内唯一

tags[Tag1Tag2] 数据流标签

unitcelsius 单位

unit_symbolC单位符号

create_timexxxx-xx-xx 102222 创建时间

中移物联网有限公司 OneNET 开发文档中心

current_valuehellip该数据流下数据点最新值

update_atxx-xx-xx该数据流下数据点最新上传时间

]

[

idhumi 数据流名称设备范围内唯一

tags[Tag1Tag2]

unit_symbol

create_timexxxx-xx-xx 102222

current_valuehellip

update_atxx-xx-xx

]

[]

4335 删除

表4-16 删除数据流

HTTP方法 DELETE

URL apihecloudscomdevicesdevice_iddatastreamsdatastream_id

URL参数 无

HTTP头部 api-key xxxxddddsssaaa masterkey 或者设备 key

HTTP响应响

应消息内容

(示例)

errno 0

error succ

434 数据点

4341 新增

中移物联网有限公司 OneNET 开发文档中心

表4-17 新增数据点

HTTP方法 POST

URL apihecloudscomdevicesdevice_iddatapoints

URL参数 type=3 上传数据类型(可选默认为完整 JSON型见 HTTP内容示

例)

HTTP头部 api-key xxxxddddsssaaa masterkey 或者 设备 apikey

HTTP内容

(示例)

datastreams

[

id temperature 数据流名称或数据流模板名称

datapoints [

at 2013-04-22T003543 上传数据点时间可选如

果为空则设备云会取当前时间如果存在其格式必须为 YYYY-MM-

DDThhmmss的形式(例如2015-03-22T223112)

value 42 上传数据点值

at 2013-04-22T005543

value 84 上传数据点值

]

id key 数据流名称或数据流模板名称

datapoints [

at 2013-04-22T003543上传数据点时间可选

value hellip上传数据点值

at 2013-04-22T003543

value hellip上传数据点值

]

hellip

]

中移物联网有限公司 OneNET 开发文档中心

HTTP 响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

1 可以一次性向设备云上传多个数据流每个数据流中可以包括多个数据

点示例程序表示向设备云上数据流 temperature 和数据流 key上传数据其中

temperature数据流有两个数据点key数据流也有两个数据点

2 如果某个数据流不存在则在增加数据点时设备云会自动创建一个新

的数据流注意新数据流的 datastream id 不可为空

3 数据点表示在某个时刻该数据流的值其 at表示时间为可选字段如

果为空则设备云会取当前时间如果存在其格式必须为YYYY-MM-DDThhmmss

的形式(例如2015-03-22T223112)

4 数据点中的 value表示具体的值其值为 JSON对象可以为整型浮点

型字符串多种类型如果 value部分用双引号括起来则其在设备云存储为字

符串如果不用双引号括起来则其表示数值字符编码现在只支持 UTF-8

5 数据点对应的时间是数据点的标识的一部分相同时间的两个数据点

设备云会同时对这两个相同时间的数据点进行保存不会出现覆盖另一个数据点

的情况一般如果 at 部分取空设备云会取系统时间精度为毫秒如果在一

条命令中某一个数据流包含多个数据点都没有 at 字段设备云将会对所有数据

点进行保存

6 新增数据点支持如下简写方式在请求的 URL中增加 type字段指示所

使用的格式类型目前 type支持 345三种情况

URLapihecloudscomdevices2214570datapointstype=3

示例temperature225humidity952

表示在数据流 temperature中增加一个数据点 225在 humidity 中增加一

个数据点 952

URLapihecloudscomdevices2214570datapointstype=4

示例temperature2015-03-22T223112225

表示在数据流 temperature中加一个数据点在 2015年 3月 22 日 22点 31

中移物联网有限公司 OneNET 开发文档中心

分 12秒的值为 225

URLapihecloudscomdevices2214570datapointstype=5

示例temperature2015-03-22T223112225pm2589

表示在数据流 temperature中加一个数据点即 2015年 3月 22 日 22点 31

分 12秒的值为 225在数据流 pm25中添加一个数据点即当前时间的值为 89

4342 查询

表4-18 查询数据点

HTTP方法 GET

URL apihecloudscomdevicesdevice_iddatapoints

URL 参数

datastream_id=abc 查询的数据流多个数据流之间用逗号分隔

(可选)

start=2015-01-10T080035 提取数据点的开始时间(可选)

end=2015-01-10T080035 提取数据点的结束时间(可选)

duration=3600 查询时间区间(可选单位为秒)

start+duration按时间顺序返回从 start开始一段时间内的数据点

end+duration按时间倒序返回从 end回溯一段时间内的数据点

limit=100 限定本次请求最多返回的数据点数0ltnlt=6000(可选

默认 1440)

cursor= 指定本次请求继续从 cursor位置开始提取数据(可选)

sort=DESC | ASC 值为 DESC|ASC时间排序方式DESC倒序ASC升

序默认升序

ltnlt=6000(可选默认 1440)

HTTP头部 api-key xxxxddddsssaaa masterkey 或者 该设备的设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

cursor70921_3771908_1472355096

datastreams[

idtemperature数据流名称或数据流模板名称

datapoints[

at xxxx-xx-xx 102222value42数据点上传时间和

at xxxx-xx-xx 102222value84

]

中移物联网有限公司 OneNET 开发文档中心

idkey 数据流名称或数据流模板名称

datapoints[

at xxxx-xx-xx 102222valuehellip

atxxxx-xx-xx 102222valuehellip

]

hellip

]

1 若不携带任何参数平台返回本设备所存在的所有数据流中的最新数据

(这一种情况下查询时出现时延较大的性能问题建议在 URL 参数中加上

newadd参数并将其值赋为 true如 newadd=true)

2 若不携带数据流 id参数携带 limit 参数时会返回该设备每个数据流

最多 limit 条数据

3 若要查看某一条数据流数据需在上述 URL中增加参数 datastream_id

4

apihecloudscomdevices564280datapointsdatastream_id=tempamplimit

=10会返回数据流temp中最近的 10个数据点

5 要查看某一条数据流在某个时间范围内的数据可以在增加 start和 end

参数

示例

apihecloudscomdevices564280datapointsdatastream_id=temper

atureampstart=2013-05-12T171233ampend=2013-06-12T172233 表示查询本设

备对应的数据流在 2013 年 5 月 12 日 17 点 12 分 33 秒到 17 点 22 分 33 秒的数

据点注意如果 start 参数存在end参数不存在表示取 start后的所有数据

如果 start 不存在end 存在设备云会忽略 end参数注意日期时间格式格

式必须为示例中的格式YYYY-MM-DDThhmmss例如2013-05-12T171233

日期和时间之间用大写字母 T 分隔start 和 end 之间的时间间隔最大为 1 年

超过一年会忽略

如果指定了 start 参数则可能返回的数据点的数目会很多此时默认会返

回最多 100 个数据点可以使用 limit 参数设定返回多少个数据点最大为

6000个数据点当实际的数据点数目多于 limit 限定的数目时返回的 json串

中移物联网有限公司 OneNET 开发文档中心

中会有一个 cursor 字段下一次请求的命令行中可以携带此 cursor 字段表示接

着遍历本数据流此 cursor字段标识上次取出数据点后下一个数据点的位置

435 二进制数据

4351 新增

将二进制数据将作为数据点保存到设备下的某个数据流中设备云返回该二

进制数据的索引号

表4-19 新增二进制数据

HTTP方法 POST

URL apihecloudscombindata

URL参数 device_id=421590 数据所属设备(必选)

datastream_id=bin 该数据所属已经存在的数据流(必选)

HTTP头部 api-key xxxxddddsssaaa masterkey 或者该设备的设备 key

HTTP 内 容

(示例)

普通二进制数据文件图像等

(最大限制为 800上传时间间隔需大于 1ms)

HTTP响应响

应消息内容

(示例)

errno 0

error succ

data

index3491506_1475204886914_bin 二进制数据索引号

4352 查询

表4-20 查询二进制数据

HTTP方法 GET

URL apihecloudscombindataindex

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

普通二进制数据文件图像等二进制形式数据

436 触发器

4361 新增

表4-21 新增触发器

HTTP方法 POST

中移物联网有限公司 OneNET 开发文档中心

URL apihecloudscomtriggers

HTTP头部 api-key xxxxddddsssaaa 必须为 masterkey

HTTP内容

(示例)

titlewen du jian kong 设备名(可选)

ds_idgps 数据流名称(id)(可选)

dev_ids[10272345615523] 设备 ID(可选)

ds_uuids[ 数据流 uuid(可选)

9ad09uac-7446-512f-b07c-90jdnzj8120ad

4599436e-7146-5349-b07c-79fa0919cs62

]

urlxxbbcom

typegt | gt= | lt | lt= | == | inout | in | out |change | frozen |

live

threshold100 阙值根据 type不同见以下说明

1) type 为gt|gt=|lt|lt=|==时threshold必须为数值

2) type为 inout时threshold 设置为lolmt40 uplmt52 表示

数据流的值首次进入或离开闭区间[4052]时触发

3) type为 change时threshold 参数不用传递当上传的值有改变时触发

告警

4) type为 frozen时threshold 为数值指定距离最后一次数据上报多少

秒内未上报数据触发告警同时被监控对象进入 frozen状态

5) type 为 live 时threshold 为数值指定距离最后一次数据上报多少秒

后上报数据触发告警

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

tirgger_id233444 触发器 ID

说明

1触发器的含义是当指定范围内的数据点满足触发条件的要求时会向

url参数指定的地址发送 post请求

2触发器有三种工作触发模式

1)在请求参数中单独指定了 ds_id不包括其他参数那么当前项目下

中移物联网有限公司 OneNET 开发文档中心

所有设备的数据流中数据流名称符合 ds_id 的数据都会进入触发判断逻辑

2)在请求参数中单独指定了 ds_uuids 数组那么只有这些指定的数据

流会进入触发判断逻辑

3)在请求参数中指定了 ds_id 和 dev_ids那么只有这些指定的设备的

数据流会进入触发判断逻辑

4362 更新

表4-22 更新触发器属性

HTTP方法 PUT

URL apihecloudscomtriggerstirgger_id

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP内容

(示例)

titlewen du jian kong

ds_uuids[

9ad09uac-7446-512f-b07c-90jdnzj8120ad

4599436e-7146-5349-b07c-79fa0919cs62

]

urlxxbbcom

typegt | gt= | lt | lt= | == | inout | in | out | exp | change |

frozen | live

threshold100

注若要修改 type需要对应设置 threshold

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

4363 查询单个触发器

表4-23 查询单个触发器

HTTP方法 GET

URL apihecloudscomtriggerstirgger_id

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

idtrigger_id1

中移物联网有限公司 OneNET 开发文档中心

titlewen du jian kong

ds_uuids[

datastream1_uuidrdquo

datastream2_uuidrdquo

datastream3_uuidrdquo

]

urlxxbbcom

typegt|gt=|lt|lt=|==|in|out|exp|change|frozen|live

threshold100

invalidtrue 触发器是否已失效

create_timexx-xx-xx 102222

4364 模糊查询触发器

表4-24 模糊查询触发器

HTTP方法 GET

URL apihecloudscomtriggers

URL 参数

title=name 指定触发器名称

page=1 指定页码可选

per_page=10 指定每页输出个数可选默认 10最多 100

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

total_count600

per_page30

page1

triggers[

idtrigger_id1

titlewen du jian kong

ds_uuids

[datastream1_uuidrdquo datastream2_uuidrdquo]

urlxxbbcom

typegt|gt=|lt|lt=|==|in|out|exp|change|frozen|live

threshold100

invalidtrue 触发器是否已失效

create_timeXXXXXXXX

中移物联网有限公司 OneNET 开发文档中心

]

说明触发器失效是指触发器所依赖的数据流或者设备被删除了此时触发

器永远不会有效触发事件

4365 删除

表4-25 删除触发器

HTTP方法 DELETE

URL apihecloudscomtriggerstirgger_id

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno 0

error succ

4366 触发数据内容

触发数据是指当 OneNET 设备云判断某个触发器的触发条件满足时会通过

POST方式向外抛出的 URL请求在 HTTP的 POST消息体中会携带如下格式的 JSON

字符串

表4-26 触发器内容

数据内容

(示例)

trigger

id1

threshold90

typegt

current_data[

dev_id2656

ds_idgps

ds_uuidFWEF-ZFW-ZFW-ZFWW

at2009-09-07T121602001403Z

value100

dev_id2656

ds_idtemper

中移物联网有限公司 OneNET 开发文档中心

ds_uuidFEWEF-ZFWFWW-WFWW-FWEFFWW

at2009-09-07T121602001403Z

value882

]

437 命令

命令是指应用发送命令数据给 OneNET设备云再由 OneNET设备云转发给终

端设备终端设备收到命令后可以向设备云反馈响应的一种工作机制命令下发

后应用可以通过 API查询命令状态和提取命令的响应数据

命令的执行步骤如下

1应用通过 API 向设备云发送命令数据

2设备云生成该命令的 uuid作为该命令的唯一标识并向应用返回同时向

终端设备转发命令数据

3 终端设备收到命令数据后执行命令数据可以生成响应也可以不响应

4设备云跟踪记录命令的响应如果设备有响应就关联命令 uuid和响应

结果

5应用通过 API 向设备云提取命令执行结果(API 请求中携带命令 uuid 标

识)

特别说明

命令下发到终端设备后如果终端设备 10 秒内未收到响应则此命令的状

态将被设置为超时应用通过 API 查询命令状态时会反馈超时超过 10 秒后

收到的响应会被丢弃

终端设备针对同一条命令回复多条命令响应只有在未超时时间内收到的最

后一条是有效响应前面的响应包将会被覆盖因此终端设备应该对每个命令只

有一个响应包

4371 发送命令

表4-27 发送命令

HTTP方法 POST

URL apihecloudscomcmds

URL 参数 device_id=415120 接收该数据的设备 ID(必选)

中移物联网有限公司 OneNET 开发文档中心

qos=0 | 1 是否需要响应默认为 0

0不需要响应即最多发送一次不关心设备是否响应

1需要响应如果设备收到命令后没有响应则会在下一次设备登陆

时若命令在有效期内(有效期定义参见 timeout参数)则会继续发送

对响应时间无限制多次响应以最后一次为准

本参数仅当 type=0时有效

timeout=300 命令有效时间默认 0

0在线命令若设备在线下发给设备若设备离线直接丢弃

gt0 离线命令若设备在线下发给设备若设备离线在当前时间

加 timeout时间内为有效期有效期内若设备上线则下发给设备单

位秒有效围0~2678400

本参数仅当 type=0时有效

type=0 | 1 默认 00发送 CMD_REQ包1发送 PUSH_DATA包

HTTP头部 api-key xxxxddddsssaaa masterkey或者设备 apikey

HTTP内容 用户自定义数据jsonstring二进制数据(小于 64K)

HTTP响应响

应消息内容

(示例)

errno 0

error succ

data

cmd_uuid2302-312-FWs 命令 id

4372 查询命令状态

表4-28 查询命令状态

HTTP方法 GET

URL apihecloudscomcmdscmd_uuid

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno 0

error succ

data

status1

0设备不在线|Device not online

1命令已创建| Command Created

2命令已发往设备| Command Sent

3命令发往设备失败| Send Command Failed

4设备正常响应| Command Response Received

5命令执行超时| Command Response Timeout

6设备响应消息过长 | Command Response Too Large

descldquosendingrdquo

中移物联网有限公司 OneNET 开发文档中心

4373 查询命令响应

表4-29 查询命令响应

HTTP方法 GET

URL apihecloudscomcmdscmd_uuidresp

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP 响应响

应消息内容

用户设备返回的响应内容

4374 查询设备历史命令

表4-30 查询设备历史命令

HTTP方法 GET

URL apihecloudscomcmdshistoryltdevice_idgtltdevice_idgt

URL 参数

start=2015-01-10T080035 查询的开始时间(可选)

end=2015-01-10T080535 查询的结束时间(可选)

page=1 指定页码最大页数为 10000(可选)

per_page=30 指定每页输出设备个数默认 30最多 100(可选)

HTTP头部 api-key xxxxddddsssaaa

HTTP响应响

应消息内容

errno 0

error succ

data

page 1当前页码

per_page 10当前每页总数

total_count 100

items [

cmd_uuid 2302-312-FWs

device_id 2设备 ID

expire_time 2016-07-05 000000过期时间

status 0命令状态

send_time 2016-07-05 000000发送时间

confirm_time 2016-07-05 000000响应时间

confirm_body 2463726571007b202274797022 响应内容

16进制字符

body 2463726571007b202274797022请求内容16进制字符

hellip

中移物联网有限公司 OneNET 开发文档中心

hellip

]

438 视频能力

4381 获取播放地址

表4-31 获取播放地址

HTTP方法 GET

URL apihecloudscomipcrtmp_address

URL 参数

device_id= 接收该数据的设备 ID(必填)

channel_id = 对应数据流名称中的 channelnum

protocol_type = 播放协议类型 0rtmp1hls2http-flv

HTTP头部 api-key xxxxddddsssaaa masterkey或者设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

errorrdquosuccrdquo

ldquodatardquo

addripport

accessTokenldquo字符串rdquo

439 APIKEY

4391 新增

表4-32 新增 APIKEY

HTTP方法 POST

URL apihecloudscomkeys

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP内容

(示例)

title sharing key key 的命名

permissions [

resources [ 被授权的资源

中移物联网有限公司 OneNET 开发文档中心

dev_id 424 被授权的设备 id

dev_id 425 被授权的设备 id

hellip

hellip

]

access_methods [ 被授权的命令

get

put

post

]

]

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data key2302-312-FWs key_string

说明授权命令是可选的另外被授权的命令也可以是 getputpost 的

一个或几个如只授权 get和 put命令

access_methods [getput]

4392 更新

表4-33 更新 APIKEY

HTTP方法 PUT

URL apihecloudscomkeyskey_string

HTTP头部 api-key xxxxddddsssaaa masterkey(注只能为 master-key)

HTTP内容

(示例)

title sharing key key 的命名

permissions [

resources [ 被授权的资源

dev_id 424 被授权的设备 id

ds_idfan1 数据流 id可选

中移物联网有限公司 OneNET 开发文档中心

dev_id 425 被授权的设备 id

ds_idfan1 数据流 id可选

hellip

hellip

]

access_methods [ 被授权的命令可选

get

put

post

]

]

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

说明

1对于 masterkey 不允许更新操作masterkey 默认具有最大权限可以访

问该用户名下所有设备所有数据

可以进行 POSTGETPUTDELETE操作如果更新 master key 系统会返回

失败

2授权命令是可选的另外被授权的命令也可以是 getputpost 的一个

或几个如只授权 get和 put命令

access_methods [getput]

3API key 更新是覆盖操作会将原来存在的授权资源和授权命令覆盖不

会保留原来的授权资源和授权命令

4393 查看

中移物联网有限公司 OneNET 开发文档中心

表4-34 查看 APIKEY

HTTP方法 GET

URL httpapihecloudscomkeys

URL 参数

key = FWJPO-FZFHW-FFEWB可选只查看该 key相关信息

page = 1 指定页码 可选

per_page = 10 指定每页输出个数可选默认 10最多 100

device_id = xxbbcc可选只查看与该设备相关的非 master-key

HTTP头部 api-key xxxxddddsssaaa masterkey(注只能为 master-key)

HTTP响应响

应消息内容

(示例)

errno 0

data

per_page 30

total_count 2

keys [

create_time 2015-11-04 142552

title Auto-generated-master-key

key 03GeDLYk0WNk1V338g7yndKZYkQA

create_time 2015-12-03 100041

permissions [

resources [

dev_id 564280

]

]

title 设备 1测试 Key

key vuHebEWefiU2Ueo5ouoCc1CUsYQ=

]

page 1

error succ

中移物联网有限公司 OneNET 开发文档中心

4394 删除

表4-35 删除 APIKEY

HTTP方法 DELETE

URL httpapihecloudscomkeyskey_string

HTTP头部 api-key xxxxddddsssaaa masterkey(注只能为 master-key)

HTTP 响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

4310 消息订阅

43101 按 Topic 发送命令

表4-36 按 Topic 发送命令

HTTP方法 POST

URL apihecloudscommqtt

URL参数 topic=xxx 设备订阅的主题(必选)

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP 内 容

(示例)

HTTP响应响

应消息内容

(示例)

errno0

errorldquosuccrdquo

data

total_count1

per_page30

page1

devices [123123433333]

43102 查询订阅指定 Topic设备的列表

表4-37 查询订阅制定 Topic设备的列表

HTTP方法 GET

URL apihecloudscommqtttopic_device

URL 参数

topic=xxx 设备订阅的主题(必选)

page=1 当前页码 必填大于等于 1

per_page=10 每页 必填范围 1-1000

中移物联网有限公司 OneNET 开发文档中心

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP内容

(示例)

HTTP响应响

应消息内容

(示例)

errno0

errorldquosuccrdquo

data

total_count1

per_page30

page1

devices [123123433333]

43103 查询设备订阅的 Topic列表

表4-38 查询设备订阅的 Topic列表

HTTP方法 GET

URL apihecloudscommqttdevice_topicdevice_id

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno0

errorldquosuccrdquo

data

[topic_name1 topic_name2 topic_name3]

43104 删除产品的 Topic

表4-39 删除产品的 Topic

HTTP方法 DELETE

URL apihecloudscommqtttopic

URL参数 name=xxx topic名(必选)

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno0

errorldquosuccrdquo

中移物联网有限公司 OneNET 开发文档中心

43105 查询产品的 Topic

表4-40 查询产品的 Topic

HTTP方法 GET

URL apihecloudscommqtttopic

URL参数 无

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno0

errorldquosuccrdquo

data

[topic_name1topic_name2topic_name3]

中移物联网有限公司 OneNET 开发文档中心

第五章 接入实例

51 MQTT-device 接入

511 工具下载

为方便开发人员直观感受使用 mqtt 协议进入平台的便利可使用平台提供

的 MQTT 设备模拟器进行接入平台请在首页-gt开发文档-gt资源下载-gt13 调试

工具下载进行下载如下图

图5-1 资源下载

下载地址

httpupfileshecloudscom123ueditor201707125d5bc37eca39c0c5b7a5bcb9

0e451eeerar

中移物联网有限公司 OneNET 开发文档中心

512 界面说明

图5-2 界面说明

513 使用方法

5131 创建产品

如 323 的过程在设备接入协议中选择 MQTT

中移物联网有限公司 OneNET 开发文档中心

图5-3 选择连接协议

5132 创建设备

如 323描述在平台上新建一个设备

5133 建立连接

在产品概况中可以查看产品 ID此信息填入模拟器 ProductID一栏如下图

图5-4 产品ID

在平台上进入设备信息页面可查看设备 ID及鉴权信息(此鉴权信息是新建设备时候填

写的鉴权信息)如下图

中移物联网有限公司 OneNET 开发文档中心

图5-5 设备ID及鉴权信息

相应把设备 ID及鉴权信息填入模拟器之中然后点击连接按钮如果未弹出提示对话

框则表示设备鉴权成功如下图

图5-6 连接成功

中移物联网有限公司 OneNET 开发文档中心

5135订阅与发布

演示本操作需要在 OneNet平台建立两个基于 MQTT协议的设备一个用于消息发布

另一个用于消息订阅

图5-7 设备状态

开启两个模拟器分别模拟以上两个设备然后建立连接

首先使用订阅主题打开第一个模拟器模拟消息订阅者

图5-8 订阅主题

其次发布主题打开第二个模拟器模拟消息发布者

中移物联网有限公司 OneNET 开发文档中心

图5-9 发布主题

经过以上两个操作后查看模拟消息订阅者的模拟器则收到了主题

为rdquotopic_namerdquo的消息如下图

中移物联网有限公司 OneNET 开发文档中心

图5-10 收到的主题

5136接收平台指令

建立连接后模拟器也可接收来自平台的指令具体操作如下

先打开模拟器-gt建立连接-gt选中【[OneNet]平台指令接收】选项栏利用平台下发指

令功能下发如下图平台下发指令

图5-11 平台发送命令

中移物联网有限公司 OneNET 开发文档中心

图5-12 下发指令

填写好将要发送的消息后点击【发送命令】按钮则模拟器成功接收到来自平台的

数据如下图模拟器截图

图5-13 模拟器收到的指令

5137上传数据点

Mqtt支持 Json 数据格式上报数据现根据 Json几种格式举一些例来演示怎么利用

模拟器上传数据

1)使用 Json数据 Type1上传 Json数据

datastreams[idtemperaturedatapoints[value255]]

中移物联网有限公司 OneNET 开发文档中心

如下模拟器上传数据界面

图5-14 Type1数据格式

则在平台数据展示中则可看到上传的数据点

图5-15 收到数据展示

2)使用 Json数据 Type3示例 Json数据为

temp32humi98

模拟器发送数据截图

中移物联网有限公司 OneNET 开发文档中心

图5-16 Type3数据格式

平台数据展示截图

图5-17 数据展示

3)使用 Json数据 Type4示例 Json数据为

temperature233pm2589

模拟器上传数据截图

中移物联网有限公司 OneNET 开发文档中心

图5-18 Type5数据格式

平台接收数据展示截图

图5-19 数据展示

52 基于麒麟开发板的 MQTT 接入实例

OneNet 平台为使用户能快速接入发布麒麟座开发板官网提交您的创意免

费申请开发板下面利用麒麟座开发板 V31 演示开发板采集温湿度使用 MQTT发

送到平台的接入流程

开发板申请链接httpsopeniot10086cneventdetail185html

521 搭建开发环境

OneNET 平台提供的麒麟座开发板是基予 STM32 单片机开发的一块功能应用

板开发板包含 MCU温湿度传感器GSM 模块WIFI 模块电源模块键盘

中移物联网有限公司 OneNET 开发文档中心

LED以及 lcd显示接口等满足用户对平台接入的基本需求能快速接入到平台

资料包配备完整工程代码方便工程移植等使用

目前 STM32 开发常用的 IDE 有 IARMDK 等我挑选 MDK 作为开发工具打

开工具包先安装 MDK511A安装完毕后再安装 MDKCM511A开发板所有资料软件

工具包下载案例包

案例包下载链接

httpspanbaiducoms1UB1qZGrVuovSVdbqqXP0Lglistpath=2F

图5-20 MDK包

安装完毕并安装 license详细步骤不做演示

中移物联网有限公司 OneNET 开发文档中心

522 连接硬件准备

5221 开发板接线

图5-21 开发板接线图

电源DC-5V

运行信息USART1-MicroUSB 线

软件下载ST-Link

中移物联网有限公司 OneNET 开发文档中心

5222 ESP8266跳线帽连接

图5-22 ESP8266跳线帽连接

中移物联网有限公司 OneNET 开发文档中心

5223 M6312跳线帽连接

图5-23 M6312跳线帽连接

523 工程实例

例程使用最简单易懂的方式编写着重让大家明白接入流程和协议

10~12 协议专属例程是展示该协议下的专用功能比如 EDP 的 PushData

中移物联网有限公司 OneNET 开发文档中心

HTTP 注册新设备MQTT 的订阅发布等具体使用方法查看该目录下的《使用

说明》

图5-24 工程文件

524 开发工程文件

中移物联网有限公司 OneNET 开发文档中心

图5-25 工程文件

图5-26 工程结构

默认已创建好产品以及设备打开文件工程 onenetc 和 esp8266c 修改例

程的 WIFI 信息和平台信息

分别在 esp8266c 的 36和 onenetc的 414345行

图5-27 更改项

525 编译下载

开发版接串口会有相应状态显示平台设备显示在线状态绿色为连接成功

设备在线灰色表示未连接并在数据展示中显示对应主题的所有数据

中移物联网有限公司 OneNET 开发文档中心

图5-28 连接成功

图5-29 收到数据

其他实例详情请见httpsopeniot10086cnbbsthread-1266-1-1html

中移物联网有限公司 OneNET 开发文档中心

第六章 MQTT 协议详解

61 设备与平台通信协议包格式

协议就是通信双方的一个约定即表示第 1字节传输的什么第 2字节

传输的什么helliphellip在 MQTT协议中一个 MQTT 数据包由固定头(Fixed

header) 可变头(Variable header) 消息体(payload)三部分构成

MQTT 数据包结构固定头部+可变头部+消息体

固定头(Fixed header)存在于所有 MQTT数据包中表示数据包类型及

数据包的分组类标识固定头格式如下

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 - 5 Remaining Length(该字段占用 1-4个字节)

目前平台版本支持的 Packet Type如下

名字 值 流向 描述

CONNECT 1 C-gtS 客户端请求与服务端建立连接

CONNACK 2 S-gtC 服务端确认连接建立

PUBLISH 3 CS 发布消息

PUBACK 4 CS 收到发布消息确认

PUBREC 5 CS 发布消息收到

PUBREL 6 CS 发布消息释放

PUBCOMP 7 CS 发布消息完成

SUBSCRIBE 8 C-gtS 订阅请求

SUBACK 9 S-gtC 订阅确认

UNSUBSCRIBE 10 C-gtS 取消订阅

UNSUBACK 11 S-gtC 取消订阅确认

PING 12 C-gtS 客户端发送 PING(连接保活)命令

PINGRSP 13 S-gtC PING命令回复

DISCONNECT 14 C-gtS 断开连接

可变头(Variable header)存在于部分 MQTT 数据包中数据包类型决定

了可变头是否存在及其具体内容

消息体(Payload)存在于部分 MQTT 数据包中表示客户端收到的具体内

中移物联网有限公司 OneNET 开发文档中心

不同类型数据包中可变头和消息体包含关系如下

消息类型 Variabl

e

Header

Payloa

d

CONNECT 有 有

CONNACK 有 有

PUBLISH 有 有

PUBACK 有 无

PUBREC 有 无

PUBREL 有 无

PUBCOMP 有 无

SUBSCRIBE 有 有

SUBACK 有 有

UNSUBSCRIBE 有 有

UNSUBACK 有 无

PING 无 无

PINGRSP 无 无

DISCONNECT 无 无

62 平台支持数据包类型

621 CONNECT(客户端请求与服务端建立连接 client -gt server)

固定头(Fixed Header)

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 - 5 Remaining Length(该字段占用 1-4个字节)

MQTT Packet Type 值为 0001表示该数据包为请求连接数据包

Remaining Length 剩余长度占 1-4字节

可变头(Variable Header)

包含内容如下

Description 7 6 5 4 3 2 1 0

byte

1-2

ProtocolNa

me Length

0 0 0 0 0 0 0 0

0 0 0 0 0 1 0 0

byte

3

lsquoMrsquo 0 1 0 0 1 1 0 1

byte

4

lsquoQrsquo 0 1 0 1 0 0 0 1

中移物联网有限公司 OneNET 开发文档中心

byte

5

lsquoTrsquo 0 1 0 1 0 1 0 0

byte

6

lsquoTrsquo 0 1 0 1 0 1 0 0

Byte

7

Protocol

Level

0 0 0 0 0 0 0 1

Byte

8

Connect

Flag

Use

r

flag

Passwo

rd

flag

WillReta

in

Flag

WillQo

s Flag

WillFl

ag

CleanSessi

on

Flag

Reser

ve

Byte

9-10

KeepAlive

(1) 版本

Protocol Level 必须设置为 4平台只支持协议版本 v 311不支持更老

的版本使用第三方客户端时需要注意选择正确的版本

(2) user flag 与 password flag

平台不允许匿名登陆因此这两个标志位在连接时必须设置为 1否则认为

协议错误平台将会断开连接

(3) Will flag 与 WillretainflagWillQosFlag

Will flag 为 0时WillQosFlag 和 WillRetainFlag 必须为 0Will Flag

为 1时WillQosFlag 只能为 012

1当该设备下一次正常上线后服务器会清除之前的 will 消息(包括

retain 消息)

2如果设备上线时设置了 Will Topic 和 msg且将 WillRetainFlag 设

置为 1只有设备异常断开后服务器才会将该 Will msg 分发给新的 Will

Topic 的订阅者且 Qos 级别以订阅的 Request qos 级别为准

3如果设备上线时设置了 Will Topic 和 msg且将 WillRetainFlag 设

置为 0服务器不会存储该消息当设备异常断开后会将该 Will msg 以设

备设置的 WillQosFlag的 Qos级别进行分发

(4) CleanSessionFlag

若客户端将 clean session 标志位设置为 0当其断开后平台将会保存

sessionsession 需保持的内容包含

客户端订阅的 topic列表

中移物联网有限公司 OneNET 开发文档中心

还未完成确认的 Qos1Qos2级别的 publish消息

客户端保存 session 的内容包含

已经发送到服务端的但还没有收到确认的 Qos1Qos2消息列表

待发送的 Qos0列表

若客户端将 clean session 标志位设置为 1当其断开后平台会清除设备

的订阅列表及未完成确认的 Qos1Qos2 的 publish消息

(5) Reserve

保留位置 0

(6) KeepAlive 保活时间

每个客户端可自定义设置连接保持时间最短 120秒最长 65535 秒

消息体(Payload) Description 是否必须存在 格式

Field1 Client

Identifier

是 2字节字串长度 + utf8字

Field2 UserName 是 2字节字串长度 + utf8字

Field3 UserPassword 是 2字节字串长度 + utf8字

目前平台支持的方式为以后两种

方式 1设备 ID项目 ID鉴权信息(auth_info)

字段设置 消息示例

client_id设置为平台创建设备时的

设备 id

username设置为ldquo项目 IDrdquo

password设置为ldquo鉴权信息

(auth_info)rdquo

client_id=rdquo123rdquo

username=rdquo433223rdquo

password=rdquo注册的鉴权信息rdquo

各字段说明如下

鉴权信息(auth_info)在平台申请设备时填写设备的 auth_info 属性(数

字+字母的字符串)该属性需要产品内具备唯一性(可使用设备出厂唯一编号)

方式 2设备 ID + APIKey(项目 ID也需要填写)

字段设置 消息示例

client_id设置为平台创建设备时的

设备 ID

username设置为ldquo项目 IDrdquo

client_id=rdquo123rdquo

username=rdquo433223rdquo

password=Api Key

中移物联网有限公司 OneNET 开发文档中心

password设置为ldquoAPI鉴权信息

(auth_info)rdquo

项目 ID在平台添加项目时平台生成的 ID

APIKey在平台上创建产品时生成的 APIKey

连接包实例如下

Send one mqtt packet

FixHeader

PacketTag = 16

PacketType = 1

RemainLength = 34

VariableHeaderConnect

protocol_name_len_= 4

protocol_name_= MQTT

protocol_level_= 4

connect_flag_= 192

keep_alive_= 12000

client_id_len_= 8

client_id_= 34764813

usr_name_len_= 6

usr_name_= 150295

password_len_= 4

password_= push

MQTT0x10 0x22 0x00 0x04 0x4D 0x51 0x54 0x54 0x04 0xC0 0x2E 0xE0 0x00 0x08 0x33

0x34 0x37 0x36 0x34 0x38 0x31 0x33 0x00 0x06 0x31 0x35 0x30 0x32 0x39 0x35 0x00

0x04 0x70 0x75 0x73 0x68

Send One Packet Succ

中移物联网有限公司 OneNET 开发文档中心

622 CONNACK (服务端确认连接建立)

Fixed Header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type = 2 0 0 0 0

byte2 - 5 Remaining Length(该字段占用 1-4个字节)

Variable Header

Description 7 6 5 4 3 2 1 0

byte 1 Acknowledge Flags 0 0 0 0 0 0 0 Sp

byte 2 Return Code x x x x x x x x

Sp Session Present Flagsession信息在服务器已保持置 1未保存置

0

返回码说明

返回码 描述

0 成功

1 协议版本错误

2 非法的 clientid

3 服务不可用

4 用户名或密码错误

中移物联网有限公司 OneNET 开发文档中心

5 非法链接(比如 token非法)

失败

如果 connect包不符合协议内容约束则直接断掉连接而不需要发送 conn

ack包

如果鉴权或授权失败回复一个带非 0错误码的 connack包

成功

必须断掉重复的 clientid

执行 cleansession 对应的操作

必须回复一个 connack回复码为 0

开始消息传递并加入 keepalive的监视

PS客户端需要等到服务端的 connack报文才能发送后续的数据包

623 PUBLISH(发布消息 client -gt server)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type DUP f

lag

QoS Level RETAI

N

byte2 - 5 Remaining Length(该字段占用 1-4 个字节)

DUP

QoS2Qos1如果为 0则表示是第一次发送该包如果为 1则表示

为重复发送的包

Qos0DUP 必须为 0

中移物联网有限公司 OneNET 开发文档中心

QoS 指定了该 publish包的 Qos 等级如下

Qos 值 Bit2 Bit1 描述

0 0 0 最多发送一次

1 0 1 至少发送一次

2 1 0 只发送一次

RETAIN 保留标志位如果为 1服务器存储最新一条 RETAIN消息以便

分发给新的订阅者如果 RETAIN为 1Payload 为空服务器分发该消息后会

清空该 topic 下的 RETAIN 消息

PS该版本实现了 Qos0Qos1Qos2

Variable Header

Description 格式 是否必须

Field1 TopicName 2 字节字串长度 + utf8字

Field2 PacketIdent

ifier

2 字节 QoS0否QoS1Qos2是

Payload

内容根据不同业务自定义

624 PUBLISH(发布消息 server -gt client)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type DUP f

lag

Qos Level RETAIN

byte2 - 5 Remaining Length(该字段占用 1-4个字节)

DUP

Qos2QoS1如果为 0则表示是第一次发送该包如果为 1则表示

为重复发送的包

中移物联网有限公司 OneNET 开发文档中心

Qos0DUP 必须为 0

QOS 指定了该 publish包的 qos等级如下

Qos 值 Bit2 Bit1 描述

0 0 0 最多发送一次

1 0 1 至少发送一次

2 1 0 只发送一次

RETAIN如果服务器分发的消息是 RETAIN 消息则将该标志位置 1否则置

0

PS该版本实现 Qos0Qos1Qos2其中服务器分发消息的 Qos级别是以 Clien

t-gtServer 发送的 publish 包的 qos 等级为准非订阅的 topic 的 Qos 等级R

etain 消息是以订阅的 Request Qos 级别进行推送

VariableHeader

Description 格式

Field1 TopicName 2 字节字串长度 + utf8字

Payload

内容根据不同业务自定义

625 PUBACK(收到发布消息确认)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

中移物联网有限公司 OneNET 开发文档中心

626 PUBREC(发布消息收到)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

627 PUBREL(发布消息释放)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

628 PUBCOMP(发布消息完成)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

中移物联网有限公司 OneNET 开发文档中心

byte 1~

2

PacketIdentifier PacketIdentifier

629 SUBSCRIBE(订阅请求)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

Payload

Description 格式

Byte1~

n

TopicName 2 字节字串长度 + utf8字

Byten+

1

Request Qos 服务质量要求(只能为 0

12)

topic 说明

可以包含一个或多个 topic

topic必须是数字英文反斜杠()的组合目前不支持通配符

每个客户端最多订阅 100个 topic

以下 topic 被系统保留使用(客户端不能订阅)

类型 说明

$开头 平台保留

中移物联网有限公司 OneNET 开发文档中心

6210 SUBACK(订阅确认)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

Payload

Description 7 6 5 4 3 2 1 0

byte 1 retcode

返回码说明

返回码 描述

0x00 成功(granted qos = 0)

0x01 成功(granted qos = 1)

0x02 成功(granted qos = 2)

0x80 失败

6211 UNSUBSCRIBE(取消订阅)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

中移物联网有限公司 OneNET 开发文档中心

Payload

Description 格式

Byte1~

n

TopicName 2 字节字串长度 + utf8字

可以包含一个或多个 topic

6212 UNSUBACK(取消订阅确认)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

6213 PING(客户端发送 PING(连接保活)命令)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

NULL NULL

注PING命令无 VariableHeader

中移物联网有限公司 OneNET 开发文档中心

6214 PINGRSP(PING命令回复)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

NULL NULL

注PINGRSP无 VariableHeader

6215 DISCONNECT(断开连接)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

NULL NULL

注DISCONNECT无 VariableHeader

中移物联网有限公司 OneNET 开发文档中心

第七章 设备开发流程

71 连接鉴权

Device Onenet

(Connect)鉴权请求

(ConnAck)鉴权结果

加载session

鉴权

图7-1 连接鉴权

设备向平台发起 connect 请求connect 中携带鉴权信息具体

参见(报文格式参考 621)

平台拿到鉴权信息进行鉴权

鉴权通过后如果 cleansession=0 平台将会加载保存的设备

的一些信息如订阅列表(621中描述)

如果 cleansession=1 设备没有保存信息在平台则不加载设

备相关信息

返回鉴权结果 ConnAck(报文格式参考 621)

72 消息发布

721 数据点上报

设备使用 publish 报文来上传数据点 报文格式如下

中移物联网有限公司 OneNET 开发文档中心

VariableHeader

Field 名称 说明 格式

Field1 TopicName=rdquo$dprdquo $dp 为系统上传数据点

的指令

2字节字串长度 + utf8

字串

Payload

Payload包含真正的数据点内容支持的格式如下

Byte 1 Bit0-5数据类型指示目前支持

Type = 1

Type = 2

Type = 3

Type = 4

Type = 5

Type = 6

Type = 7

Bit6-7 flags 根据具体类型不同意义

Type6Type7这两种需要填写时间戳的数据类型

如果填入了时间戳则须将 bit7 置 1否则置 0(即

忽略数据类型说明中的日期时间相关字段)

0 0 0 0 0 0 0 1

Byte 2 根据数据类型指示不同

Byte n

中移物联网有限公司 OneNET 开发文档中心

数据类型 1(type == 1)格式说明

数据类型 2(type == 2)格式说明

Byte 1 数据点类型值1 1JSON 格式 1 字符串 0 0 0 0 0 0 0 1

Byte 2 指示后面 json 字符串长度

固定两字节长度高位字节值为 0x00

Byte 3 固定两字节长度低位字节值为 0x41

Byte 4

ldquodatastreamsrdquo[ 可以同时传递多个数据流

ldquoidrdquordquotemperaturerdquo

ldquodatapointsrdquo[数据流可以有多个数据点

rdquoatrdquordquo2013-04-22 222222rdquo可选

rdquovaluerdquo 365用户自定义

]

ldquoidrdquordquolocationrdquo

ldquodatapointsrdquo[hellip]

hellip

]

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

Byte n

Byte 1 数据点类型指示type=2 二进制数据 0 0 0 0 0 0 1 0

Byte 2 指示后面 json 字符串长度

固定两字节长度-高位字节值为 0x00

Byte 3 固定两字节长度-低位字节值为 0x10

Byte 4

rdquods_idrdquordquoimagerdquo 创建数据流时定义的 ID(必填)

ldquoatrdquordquo2014-10-25 122323rdquo 时间(可选)

rdquodescrdquo字符串或 json 对象对该数据的描述(可选)

hellip

Byte n

Byte n+1 指示后面二进制数据长度

固定四字节长度-第 1 字节(最高)值为 0x00

Byte n+1 固定四字节长度-第 2 字节值为 0x00

Byte n+2 固定四字节长度-第 3 字节值为 0x01

Byte n+3 固定四字节长度-第 4 字节(最低)值为 0x00

Byte n+4 该域目前最大支持 3M

中移物联网有限公司 OneNET 开发文档中心

数据类型 3(type == 3)格式说明

数据类型 4(type ==4)格式说明

hellip 本例中的该域 256 字节数据

Byte n+260

Byte 1 数据点类型指示type=3 JSON 格式 2 字符串 0 0 0 0 0 0 1 1

Byte 2 指示后面字符串长度

固定两字节长度高位字节值为 0x00

Byte 3 固定两字节长度低位字节值为 0x46

Byte 4 通用格式

ldquodatastream_id1rdquordquovalue1rdquo

ldquodatastream_id2rdquordquovalue2rdquo

hellip

示例

ldquotemperaturerdquo225rdquohumidityrdquordquo952rdquo

hellip

hellip

hellip

hellip

Byte n

Byte 1 数据点类型指示type=4 JSON 格式 3 字符串 0 0 0 0 0 1 0 0

Byte 2 指示后面字符串长度

固定两字节长度高位字节值为 0x00

Byte 3 固定两字节长度低位字节值为 0x46

Byte 4 通用格式

ldquodatastream_id1rdquoldquodatetime1rdquordquovalue1rdquo

ldquodatastream_id2rdquo ldquodatetime2rdquordquovalue2rdquo

hellip

示例

ldquotemperaturerdquoldquo2015-03-22 223112rdquo225

hellip

hellip

hellip

hellip

Byte n

中移物联网有限公司 OneNET 开发文档中心

数据类型 5(type == 5)格式说明

数据类型 6(type == 6)格式说明

Byte 1 数据点类型指示type=5 自定义分隔符 0 0 0 0 0 1 0 1

Byte 2 指示后面字符串长度

固定两字节长度高位字节值为 0x00

Byte 3 固定两字节长度低位字节值为 0x41

Byte 4 消息中最前面两字节为用户自定义的域中分隔符和域间分隔符

这两个分隔符不能相同比如采用逗号作为域中分隔符分号作

为域间分隔符的格式如下

feild0feild1hellipfeildn

其中每个 field 格式支持 3种

field 格式 1 3 个子字段分别是数据流 ID时间戳数据值

通用格式

Datastream_iddatetimevalue

field 格式 2 2 个子字段分别是数据流 ID 和数据值省略时

间戳通用格式

Datastream_idvalue

field 格式 3 1 个子字段省略了数据 ID 和时间戳只传输数

据值平台将用该域(feild)所在的位置号(从 0 开始)作为数据

流 ID通用格式

value

示例

(1)temperature2015-03-22

223112225102pm258910

(2)temperature2015-03-22

223112225102pm258910

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

Byte n

Byte 1 数据类型指示type=6 带时间自定义分隔符 0 0 0 0 0 1 1 0

Byte 2 年(后两位)例如 2016 年则该字节为 16 0 0 0 1 0 0 0 0

Byte 3 月(1-12)

Byte 4 日(1-31)

Byte 5 小时(0~23)

Byte 6 分钟(0~59)

Byte 7 秒(0~59)

Byte 8 指示后面字符串长度

固定两字节长度高位字节值为 0x00

Byte 9 固定两字节长度低位字节值为 0x41

Byte 10 消息中最前面两字节为用户自定义的域中分隔符和域间分隔符

具体格式见 type=5 说明若相关域中没有时间戳则采用本类

hellip

中移物联网有限公司 OneNET 开发文档中心

数据类型 7(type == 7)格式说明(每次最多 500个数据流的浮点数)

hellip 型的默认时间戳当作数据点的时间来存储

Byte n

Byte 1 Bit0-5 数据类型指示type=7 可离散浮点数数据流

Bit6保留置 0

Bit7 时间指示位1携带 6字节时间

1 0 0 0 0 1 1 1

Byte 2 年(后两位)例如 2016 年则该字节为 16 0 0 0 1 0 0 0 0

Byte 3 月(1-12)

Byte 4 日(1-31)

Byte 5 小时(0~23)

Byte 6 分钟(0~59)

Byte7 秒(0~59)

Byte 8 数据流名称(取值范围 1-65535)

高位字节值为 0x00

Byte 9 低位字节值为 0x01

Byte10 数据流个数(取值范围 1-500)

高位字节值为 0x00

Byte11 低位字节值为 0x01

Byte 10 4 字节 float 类型低位在前高位在后

Byte 11

Byte 12

Byte 13

Byte n 数据流名称(取值范围 1-65535)

高位字节值为 0x24

Byte n+1 低位字节值为 0x37

Byte n+2 数据流个数(取值范围 1-500)

高位字节值为 0x01

Byte n+3 低位字节值为 0x00

Byte n+2 4 字节 float 类型低位在前高位在后

Byte n+4

Byte n+5

Byte n+6

中移物联网有限公司 OneNET 开发文档中心

7211 Qos0(Client-gtServer)

Device OneNet

Publish $dp(Qos0)

存储

图7-2 QoS连接图

设备发布 Qos0 消息(上报数据点)

平台收到上报数据点后保存起来

7212 Qos1(Client-gtServer)

Device OneNet

Publish $dp(Qos1)

存储

PubAck

图7-3 Qos1连接图

设备发布 Qos1 消息(上报数据点)

中移物联网有限公司 OneNET 开发文档中心

平台收到上报数据点后保存起来

平台给设备回复相应的 PubAck (报文格式参考 625)

7213 Qos2(Client-gtServer)

Device OneNet

Publish $dp(Qos2)

存储

PubRec

PubRel

PubComp

图7-4 Qos2连接图

设备发布 Qos2 消息(上报数据点)

平台收到上报数据点后保存起来

平台给设备回复相应的 PubRec报文

设备需回复平台 PubRel报文如超时不回平台则会断开相应连接

平台给设备回复 PubComp报文

注数据点上报功能不支持 Retain 特性

中移物联网有限公司 OneNET 开发文档中心

722 平台命令(下发amp回复)

7221 命令下发

平台使用 publish 报文来下发平台指令 报文格式如下

FixHeader

参考 623

VariableHeader

Field 名称 说明 格式

Field1 TopicName=rdquo$creqcmduuidrdquo $creq为系统下发

Cmd 的 指 令

cmduuid为该条指

令的 uuid

2字节字串长度 +

utf8字串

Payload

Payload包含真正的指令内容

72211 Qos0(Server-gtClient)

DeviceOneNet

Publish $creq(Qos0)

图7-5 Qos0命令下发

命令下发

平台向设备发送 topic为$creq的消息(该 topic为平台命令)

中移物联网有限公司 OneNET 开发文档中心

设备收到 topic 为$creq 的 topic 时需将其作为平台下发的指令来处

注目前命令下发以 Qos0级别进行推送

7222 命令回复

设备使用 publish 报文来回复平台指令 报文格式如下

FixHeader

参考 623

VariableHeader

Field 名称 说明 格式

Field1 TopicName=rdquo$crspcmduuidrdquo $crsp为系统处理

设备回复 cmd 的

指令cmduuid为

该条指令的 uuid

2字节字串长度 +

utf8字串

Payload

Payload包含真正回复的指令内容

72221 Qos0(Client-gtServer)

DeviceOneNet

Pulish $crsp(Qos0)

图7-6 Qos0下发命令

中移物联网有限公司 OneNET 开发文档中心

72222 Qos1(Clientlt-gt Server)

DeviceOneNet

Pulish $crsp(Qos1)

Puback

图7-7 Qos1下发命令

如果设备回复响应时以 Qos1回复则平台需要给设备回复一个 Puback 报文

72223 Qos2(Clientlt-gt Server)

DeviceOneNet

Pulish $crsp(Qos2)

PubRec

PubRel

PubComp

图7-8 Qos2下发命令

如果设备回复响应时以 Qos2回复则

1平台需回复设备一个 PubRec报文

中移物联网有限公司 OneNET 开发文档中心

2设备在收到 PubRec后需向平台回复 PubRel报文

3平台收到 PubRel 报文后向设备回复 PubComp报文

73 创建 Topic

Device OneNet

HTTP 请求

HTTP 响应

图7-9 创建Topic

设备通过发送 HTTP请求进行 topic 的创建操作

平台收到请求后创建 topic 并返回结果

请求及响应定义如下

HTTP方法 POST

URL httpapihecloudscommqtttopic

HTTP头部 api-keyxxxx-ffff-zzzzz必须 master key

URL参数

HTTP body

内容

ldquonamerdquordquoxxxxxxrdquo topic 名字只能由英文下划线反斜杠组成最长

1024个字符同一产品下 topic name 不重复

成功返回

errno 0

errorldquosuccrdquo

说明 每个产品最多 100个 topic

中移物联网有限公司 OneNET 开发文档中心

74 订阅

Device OneNet

Subscribe

Suback

更新设备订阅列表

图7-10 订阅

设备发起订阅请求(报文格式参考 629)

平台收到请求后更新 topic列表

平台给设备回复 SubAck (报文格式参考 6210)

注subscribe 的 request qos级别可以为 012

75 取消订阅

Device OneNet

UnSubscribe

UnSuback

更新设备订阅列表

图7-11取消订阅

中移物联网有限公司 OneNET 开发文档中心

设备发起取消订阅请求 (报文格式参考 6211)

平台收到请求后更新 topic 列表

平台给设备回复 UnSubAck (报文格式参考 6212)

76 推送设备 Topic

761 Publish 报文推送

Qos0设备使用 Qos 级别为 0的 Publish报文来进行推送

Device OneNet

Publish(Qos0)

Device

以Qos0 Publish到订阅设备

图7-12 Qos0推送

设备发起推送 topic请求(以 Qos0级别)

平台收到请求后将 topic以 Qos0级别推送到相关订阅设备(支持离线设

备推送)

平台不返回 PubAck或 PubRec 等报文

Qos1

设备使用 Qos级别为 1的 publish报文来推送 Topic

中移物联网有限公司 OneNET 开发文档中心

Device OneNet

Publish(Qos1)

PubAck

Device

以Qos1 Publish到订阅设备

设备回复平台 PubAck

图7-13 Qos1发布

设备发起推送 topic请求(以 Qos1级别)

平台收到请求后将 topic以 Qos1级别推送到相关订阅设备(支持离线设

备推送)

平台返回 PubAck 报文

Qos2

设备使用 Qos级别为 2的 publish报文来推送 Topic

中移物联网有限公司 OneNET 开发文档中心

Device OneNet

Publish(Qos2)

PubRec

Device

以Qos2 Publish到订阅设备

PubRec

PubRel

PubComp

PubRel

PubComp

图7-14 Qos2推送

设备发起推送 topic请求(以 Qos2级别)

平台收到请求后回复 PubRec报文

设备收到 PubRec后需回复 PubRel报文 (如超时不回复平台会断开与设

备的连接)

平台收到 PubRel 报文后回复 PubComp 给设备

平台在回复 PubComp 后会以 Qos2 级别推送到相关订阅设备(支持离线设

备推送)

设备需回复 PubRec报文 (如超时不回复平台会断开与设备的连接)

平台发送 PubRel 报文给设备

设备需回复 PubComp(发布完成)

Publish报文的格式如下

FixHeader

参考 623

中移物联网有限公司 OneNET 开发文档中心

VariableHeader

Field 名称 说明 格式

Field1 TopicName 填写设备订阅的 topic 2字节字串长度 + utf8

字串

Payload

Payload为设备自定义内容

762 HTTP 请求推送

Device OneNet

HTTP 请求

HTTP 响应

Device

Publish到订阅设备

图7-15 HTTP请求

设备以 HTTP 的方式发起推送 topic 请求

平台收到请求后将 topic推送到相关订阅设备 (目前只支持在线推送)

平台返回推送结果

请求及响应定义如下 HTTP方法 POST

URL httpapihecloudscommqtt

HTTP头部 api-keyxxxx-ffff-zzzzz必须 master key

URL参数 topic=ldquoXXXXXXrdquo必选在发送 mqtt协议的 topic 必填

HTTP body内容 用户自定义 Json 或二进制数据(小于 64K)

成功返回

errno 0

errorldquosuccrdquo

中移物联网有限公司 OneNET 开发文档中心

77 离线 Topic

推送 Topic只针对在线设备进行 topic 消息的推送离线设备不会收到订阅

的 topic 的消息离线 Topic则会将该消息推送给在线以及离线设备

1 如果设备在上线时设置了 clean session flag服务端会删除其订阅的

topic及相关的离线 topic消息

2 如果设备没有设置 clean session flag如果有与该设备相关的离线

topic消息则在鉴权成功后将离线消息推送给设备

3 遗嘱消息(will msg)只会推送给订阅了该 will topic的在线的设备离

线设备不会收到

4 离线消息的有效期默认为 2 天(暂不支持用户设定有效期)服务器只会

推送在 2天内的最近 10 条消息

78 数据点订阅

数据点订阅同一产品下的设备可以订阅其他设备的数据点订阅的 topic

格式为deviceid数据流名称即

被关注的设备在上传了该数据流名称的数据点后订阅了该 topic的其他设备都

会收到上传的数据点

1 AB设备的 deviceid分别为 92779278

2 A 设备订阅了名为92789527 的 topic(9278 为设备 B 的 id9527 为 B

设备上传的数据流名称)

3 B 设备上传了名为 9527的数据流(数据点为 11 1578hellip)

4 A 设备会收到多条(取决于设备 B 上传的数据点的个数)推送的 topic 名

为92789527 的 publish消息消息的 payload中则包含设备 B 上传的数据

注目前支持订阅的数据点的类型为 Type1~Type7(详见 721节)

中移物联网有限公司 OneNET 开发文档中心

第八章 常见问题 FAQ

用户在基于 OneNET 平台进行产品开发的过程中可能会遇到各种各样的问

题开发过程中遇到的问题一方面可以参考 OneNET 文档中心的文档或者本文

档前几个章节的内容另一方面用户可以参考本章节总结的常见问题希望这些

文档能对用户在开发过程中有一定的指导和帮助

本章将分三个小节对用户在开发产品过程中可能遇到的问题进行梳理分别

为终端设备接入 OneNET平台的常见问题API调用的常见问题和 OneNET平台

的能力

81 终端设备接入 OneNET 平台的常见问题

序号 问题描述 原因分析 解决方法

1

2

3

4

5

6

7

82 API 调用的常见问题

序号 问题描述 原因分析 解决方法

1

2

3

4

5

6

7

8

9

中移物联网有限公司 OneNET 开发文档中心

83 使用 OneNET平台遇到的常见问题

序号 问题描述 原因分析 解决方法

1

2

3

4

5

6

7

8

Page 2: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com

中移物联网有限公司 OneNET 开发文档中心

版本更新信息

欢迎访问 OneNET 官方网站注册用户获取最新文档

版本号 修订日期 修订内容 作者 说明

V10 20187 新版本 陈小波张小波 敬威肖勇

V101 20180713 部分说明优化 陈小波张小波 敬威肖勇

中移物联网有限公司 OneNET 开发文档中心

目录 第一章 文档说明 6

第二章 MQTT协议接入流程 7

21 设备接入平台流程图 8

22 应用开发流程图 9

第三章 终端设备接入 OneNET 平台流程 11

31 终端设备接入 OneNET 平台前的准备工作 11

311 硬件准备 11

312 软件准备 11

32 终端设备接入 OneNET 平台步骤 12

321 OneNET 平台创建产品及设备 12

322 终端设备软硬件初始化 15

323 终端创建设备及资源 15

324 登录 OneNET 平台 15

325 设备数据点上报 16

326 创建应用 16

33 设备批量接入 20

331 平台设备批量复制 21

332 应用平台调用新增设备 API 27

333 终端调用注册 API 27

34 设备 ID与产品序列号 29

第四章 第三方应用开发 31

41 第三方应用接入 OneNET平台 31

412 第三方应用平台接入验证程序 32

413 OneNET 平台配置第三方应用平台 32

42 OneNET平台数据推送 34

421 明文消息 34

422 密文消息 35

423 消息相关字段说明 35

424 加密算法详述 36

中移物联网有限公司 OneNET 开发文档中心

43 API接口 37

432 设备 39

433 数据流 45

434 数据点 47

435 二进制数据 52

436 触发器 52

437 命令 57

438 视频能力 60

439 APIKEY 60

4310 消息订阅 64

第五章 接入实例 67

51 MQTT-device 接入 67

511 工具下载 67

512 界面说明 68

513 使用方法 68

52 基于麒麟开发板的 MQTT接入实例 77

521 搭建开发环境 77

522 连接硬件准备 79

523 工程实例 81

524 开发工程文件 82

525 编译下载 83

第六章 MQTT协议详解 85

61 设备与平台通信协议包格式 85

62 平台支持数据包类型 86

621 CONNECT(客户端请求与服务端建立连接 client -gt server) 86

622 CONNACK (服务端确认连接建立) 90

623 PUBLISH(发布消息 client -gt server) 91

624 PUBLISH(发布消息 server -gt client) 92

625 PUBACK(收到发布消息确认) 93

626 PUBREC(发布消息收到) 94

627 PUBREL(发布消息释放) 94

628 PUBCOMP(发布消息完成) 94

629 SUBSCRIBE(订阅请求) 95

6210 SUBACK(订阅确认) 96

中移物联网有限公司 OneNET 开发文档中心

6211 UNSUBSCRIBE(取消订阅) 96

6212 UNSUBACK(取消订阅确认) 97

6213 PING(客户端发送 PING(连接保活)命令) 97

6214 PINGRSP(PING命令回复) 98

6215 DISCONNECT(断开连接) 98

第七章 设备开发流程 99

71 连接鉴权 99

72 消息发布 99

721 数据点上报 99

722 平台命令(下发amp回复) 107

73 创建 Topic 110

74 订阅 111

75 取消订阅 111

76 推送设备 Topic 112

761 Publish报文推送 112

762 HTTP请求推送 115

77 离线 Topic 116

78 数据点订阅 116

第八章 常见问题 FAQ 117

81 终端设备接入 OneNET 平台的常见问题 117

82 API调用的常见问题 117

83 使用 OneNET 平台遇到的常见问题 118

中移物联网有限公司 OneNET 开发文档中心

第一章 文档说明

编写此开发文档是为了让开发人员使用 MQTT协议快速接入 OneNET 平台形

成基于设备上传数据的物联网应用开发

通过阅读此文档开发人员可以了解 OneNET 平台接入的总体流程包括设

备使用 MQTT协议接入 OneNET平台步骤基于 OneNET平台开发上层应用

文档适用人员熟悉 MQTT 协议设备接入侧需要具备一定功底的嵌入式开

发人员北向 API调用的开发人员需要具备一定的应用软件开发能力

注意建议以公司名义先注册 OneNET 平台账号

中移物联网有限公司 OneNET 开发文档中心

第二章 MQTT 协议接入流程

MQTT (Message Queue Telemetry Transport)遥测传输协议使用 TCPIP 提

供网络连接能够对负载内容实现消息屏蔽传输开销小可以有效降低网络流

量其主要提供了订阅发布两种消息模式更为简约轻量易于使用特别适

合于受限环境(带宽低网络延迟高网络通信不稳定)的消息分发属于物联

网(Internet of Thing)的一个标准传输协议

嵌入式设备选择 MQTT 协议优点

1 轻量级的 machine-to-machine 通信协议

2 发布(publish)订阅(subscribe)模式

3 基于 TCPIP支持 QoS

4 长连接协议

5 终端数据点上报支持的数据点类型包括

o 整型(int)

o 浮点数(float)

o 字符串(string)

o JSON 格式

6 适合于低带宽不可靠连接嵌入式设备CPU 内存资源紧张

典型应用场景

MQTT 协议适用于设备和平台需要保持长连接的使用场景MQTT 特点在

于可以实现设备间的消息单播以及组播可以不依赖于其他服务(下发命令服务

推送服务等)实现让设备以应用服务器的方式对真实设备进行管理和控制

以门禁系统为例应用服务器(虚拟设备)可以订阅每个门禁(真实设备)

的统计数据的 topic对所有门禁的数据进行统计分析每个门禁也可以订阅自

身开关门的 topic应用服务器凭此可以远程控制每个门禁的状态

中移物联网有限公司 OneNET 开发文档中心

21 设备接入平台流程图

平台

TCP连接创建产品

发送连接报文

连接应答

数据应答

发送数据报文

生成连接报文

数据应答

发送数据报文

终端

发送下行命令 下发命令

解析下行命令

生成存储数据报文

生成存储数据报文

解析连接应答

解析数据应答

解析数据应答

必要流程

可选流程

存储到数据流

存储到数据流

数据源 创建应用

心跳应答

发送心跳报文生成心跳报文

解析心跳应答

平台操作

设备操作

创建设备

图2-1 设备接入OneNET平台流程图

1) 创建产品

根据产品功能需求选择接入协议重要参数产品 ID注册码产品 APIKey

(见附录一)

2) 创建设备

通过 TCP直接与平台直连的终端在进行接入之前平台上必须要先存在一

个与之一一对应的虚拟设备可以通过开发者中心或者 API 注册创建设备接口

来创建重要参数设备 ID鉴权信息

3) 建立 TCP连接

不同协议有着不同的固定 IP地址与端口

中移物联网有限公司 OneNET 开发文档中心

4) 建立设备连接

通过 1)2)中的参数(一般为产品 ID+鉴权信息+设备 ID)生成连接报文

发送连接报文建立终端与 2)中新建设备的一一对应关系

5) 发送数据报文

按照连接协议生成数据报文发送至平台

6) 创建应用

7) 使用平台下发命令接口或者 API向设备发送指令

22 应用开发流程图

应用开发主要是通过 Rsetful API 的方式实现和 OneNET 平台进行交互对

接在您完成产品创建以及硬件接入后即可根据相关所接入的硬件设备以及所

上传的数据进行相关产品的开发

OneNET 平台提供的应用开发 API分为需要终端响应和只需 OneNET 平台

响应两类下面分别用两个流程图描述这两类 API 的开发流程图 2-2为需

要终端响应的 API 调用流程其中虚线部分只有离线命令的读写下发命令才

有该流程图 2-3为只需平台响应的 API 调用流程

在应用开发平台调用 API 之前 必须与 OneNET 平台建立连接建立连

接的过程和 API 调用流程一并在图中进行了标注

中移物联网有限公司 OneNET 开发文档中心

图2-2 需要终端响应的API流程

终端设备 OneNET平台 应用开发平台

1配置应用开发地址Token等参数

2向应用开发平台发起URLampToken验证

3解析验证请求参数返回验证消息

应用平台与OneNET平台已经建立连接

4调用API指令HTTP请求

5返回平台侧执行结果错误代码和uuid

6API指令执行完毕

图2-3 不需要终端响应的API流程

终端设备 OneNET平台 应用开发平台

1配置应用开发地址Token等参数

2向应用开发平台发起URLampToken验证

3解析验证请求参数返回验证消息

应用平台与OneNET平台已经建立连接

4调用API指令HTTP请求MQTT请求

5返回平台侧执行结果错误代码和uuid

6相应指令请求返回数据 推送数据及执行结果给应用平台

7API指令执行完毕

中移物联网有限公司 OneNET 开发文档中心

第三章 终端设备接入 OneNET 平台流程

终端设备与 OneNET 平台进行数据交互需经过公网到达平台根据 OneNET

平台与网络运营商的关系终端设备智能网关OneNET平台以及第三方应用四

者的网络关系可归纳如图 3-1所示

图3-1 终端设备与服务器网络关系

图 3-1 中终端设备或智能网关设备与 OneNet 平台使用 TCPIP 建立网络连

接使用 MQTT协议进行与平台进行数据通信

31 终端设备接入 OneNET 平台前的准备工作

311 硬件准备

设备终端接入 OneNET平台的通信方式也是多种多样的比较常用的有 GPRS

无线 WIFI以太网口GPRS 方式需要 GPRS 模块和 SIM 卡的支持无线 WIFI 模

块需要 WIFI 模块支持WIFI 模块推荐选用 ESP8266 串口 WIFI 模块GPRS 模块

推荐选用 SIM900A模块

312 软件准备

设备终端接入 OneNET 平台使用 MQTT 协议使用嵌入式设备需移植 SDK

到 MCU详见麒麟发开板接入实例

中移物联网有限公司 OneNET 开发文档中心

32 终端设备接入 OneNET 平台步骤

321 OneNET 平台创建产品及设备

3211 注册用户账号

进入 OneNET官网(httpsopeniot10086cn)点击首页右上角的ldquo注

册rdquo按钮注册用户账号

OneNET 支持ldquo个人用户rdquo和ldquo企业用户rdquo两种注册方式你可以根据您的

实际情况选择注册方式

以个人用户注册为例用户需在对应选项依次填写用户名用户密码所在

地手机号码图片验证码以及手机验证码并完成注册注册页面如图 3-2所

示注册完成后回到主页点击ldquo登录rdquo即可进入 OneNET 的官方主页并由

此进入到你的ldquo开发者中心rdquo

如果客户产品后续需要进行规模化量产建议以企业的名义进行注册注册

时注意注册信息的准确填写另外个人版和企业版在功能上无差异

图3-2 用户账号注册页面

3212 创建产品和设备

在进入到你的ldquo开发者中心rdquo后点击右上角的 ldquo创建产品rdquo在弹出页面中

按照提示填写产品的基本信息进行产品创建在创建过程中请您按照提示尽

可能完整全面地填写相应内容这样更方便您后期对产品进行管理

创建产品页面如图 3-3 和图 3-4其中设备接入方式选择ldquo公开协议rdquo联网

方式选择跟据实际设备进行选择设备接入协议选择ldquoMQTTrdquo

中移物联网有限公司 OneNET 开发文档中心

产品创建完成后页面弹出ldquo创建产品成功rdquo如图 3-5所示点击ldquo立即

添加设备rdquo显示如图 3-6所示界面依次填写ldquo设备名称rdquo鉴权信息设备

名称自定义鉴权信息用于平台对终端设备鉴权每台设备具有唯一性建议设

置为产品出厂编号方便管理鉴权信息需写入设备

图3-3 创建产品页面

中移物联网有限公司 OneNET 开发文档中心

图3-4 创建产品页面

图3-5 创建产品成功页面

中移物联网有限公司 OneNET 开发文档中心

图3-6 添加设备页面

322 终端设备软硬件初始化

终端设备在上电以后需要完成设备的软硬件初始化硬件初始化包括各个

硬件模块的上电处理器的寄存器初始化工作模式初始化等等软件初始化包

括基础通信套件初始化应用接口初始化应用程序初始化等等

323 终端创建设备及资源

终端设备创建设备(device_id)配置产品 ID鉴权信息注册码连接

服务器 IP端口号等信息创建成功后与平台建立登陆连接连接成功后即可向

平台上报数据点

324 登录 OneNET平台

终端设备的基础通信套件完成初始化以及设备资源创建完成后可向

OneNET平台发送登陆请求返回登录结果如果参数错误或者登录超时平台会

返回登录失败如果验证通过平台会返回登录成功

若终端设备登录平台成功设备名称左边的圆形图标会由灰色(离线状态)

变成绿色(在线状态)如图 3-7所示

中移物联网有限公司 OneNET 开发文档中心

图3-7 平台侧设备状态显示

325 设备数据点上报

终端设备与平台成功建立连接后设备使用 publish 报文向平台上报数据点

平台收到数据点后保存到对应数据流下方便应用查阅数据点上报格式以及类型详见

721

图3-8 平台侧收到设备数据流显示

326 创建应用

用户可以利用上传的数据创建相关的应用发布直观的展示页面目前在平台应用孵化

器中提供了曲线图柱状图表盘物体位置图片和开关等应用

在产品详情页面点击ldquo应用管理rdquo进入应用管理主界面如下图

中移物联网有限公司 OneNET 开发文档中心

图3-9 应用管理模块

点击ldquo创建应用rdquo输入应用名称点击ldquo创建rdquo如下图

图3-10 新应用创建

保存成功后点击编辑按键进入应用编辑页面如下图

中移物联网有限公司 OneNET 开发文档中心

图3-11 应用编辑入口

图3-12 应用编辑界面

在应用编辑页面中使用左侧的控件进行应用编辑此例中我们选择表盘控件来显示

刚刚上传的数据点击表盘控件如下图所示

中移物联网有限公司 OneNET 开发文档中心

图3-13 表盘控件添加

在右侧的属性中选择设备以及数据源(及刚刚上传的数据流)如下图

图3-14 表盘控件数据流绑定

在确定好数据流之后可以看到表盘回显示成我们添加的数据的值其他的

刷新频率以及表盘显示样式读者可以自行更具需求加以修改

完成应用编辑之后点击右上角保存按钮退出应用编辑

在应用管理页面点击该应用即可查看编辑好的应用页面

中移物联网有限公司 OneNET 开发文档中心

图3-15 保存应用

图3-16 应用查看与分享

该应用可以通过共享ldquo发布链接rdquo的方式将该应用共享给他人

33 设备批量接入

单个设备可以通过平台的开发者中心添加设备的方式进行创建若用户有多

个设备直接与平台 TCP连接的终端通过手动添加需耗费大量时间人力OneNET

中移物联网有限公司 OneNET 开发文档中心

为大批量接入用户提供 3种批量创建设备的方案

331 平台设备批量复制

此种方式为选择某个设备作为复制的模板通过导入 EXCEL的方式进行设备

复制厂商可以在小批量测试时使用该功能

在设备列表中点击查看详情

图3-17 设备批量接入

在设备详情页面点击批量导入设备信息

中移物联网有限公司 OneNET 开发文档中心

图3-18 导入设备信息

点击批量复制

图3-19 批量复制

中移物联网有限公司 OneNET 开发文档中心

目前提供三种批量创建的方式 excel 导入的方式为主要接入方式选择

excel导入点击下载模板

图3-20 快速导入

图3-21 Excel导入

打开下载下来的 excel模板表中的 titledesctags等均为将要批量导

入的设备的数据其中的 title 和 auth_info 为必填选项title 为设备名

中移物联网有限公司 OneNET 开发文档中心

auth_info对应设备的鉴权信息

图3-22 Excel格式

填写 3个设备信息

图3-23 Excel内容

三个设备的 title和 auth_info都一样均为 20170808000012017080800002

2017080800003保存该表格点击ldquo点击上传rdquo上传保存好的 excel 文件

点击ldquo确定导入批量rdquo

中移物联网有限公司 OneNET 开发文档中心

图3-24 导入上传

图3-25 确认创建

可以看到在原设备目录下新增了 3个设备其名称分别为 2017080800001

20170808000022017080800003

中移物联网有限公司 OneNET 开发文档中心

图3-26 批量创建的设备

点击设备详情可以看到设备目录下各个设备的鉴权信息与表格中所填

写的内容一致

图3-27 设备ID及鉴权信息

至此完成了通过批量设备复制的方式完成设备批量创建的过程用户如果

要使用这个功能需要将自己终端的出厂序列号整理到这个 excel表中然后利

中移物联网有限公司 OneNET 开发文档中心

用上传表格的方式进行批量创建

332 应用平台调用新增设备 API

OneNET 提供了创建设备的 API接口

图3-28 新增设备API接口

其中的 auth_info 参数对应着设备的鉴权信息通过调用此 API 接口可以

实现在平台上新增设备的功能用户如果有自己的第三方应用平台进行设备管理

可以通过多次调用此接口的方式进行设备的批量创建在调用接口时需要确保每

次调用的 auth_info 参数对应着自己的每一个终端不同的出厂序列号

333 终端调用注册 API

API 实际是 HTTP 协议的通信协议终端也可以通过封装 HTTP 包发送注册

中移物联网有限公司 OneNET 开发文档中心

设备请求的方式调用 API

终端调用注册 API 创建设备并接入的流程如图 3-29所示

平台

TCP连接协议接入机

创建产品

发送连接报文

连接应答

数据应答

发送数据报文

生成连接报文

设备

发送下行命令 下发命令

解析下行命令

生成存储数据报文

解析连接应答

解析数据应答

必要流程

可选流程

存储到数据流 数据源 创建应用

心跳应答

发送心跳报文生成心跳报文

解析心跳应答

平台操作

设备操作

利用设备本身的sn和产品的设备注册码生成注册报文

TCP连接API服务器

发送注册报文

注册应答

解析设备ID

创建设备

设备开机

读取硬件中烧录的设备编号(sn)

图3-29 终端调用注册API接入流程

1) 创建产品

重要参数产品 ID注册码产品 APIKey(见附录一)

2) 生成并发送注册报文

每一个用户终端中都有厂商烧录的唯一出厂序列号(sn)终端上电

之后应该首先读取自己的 sn然后通过 1)中的注册码和 sn 一起组成注

册报文

注册报文格式如下例

POST httpapihecloudscomregister_deregister_code=6TM7OkhNsTjATvFx HTTP11

Host apihecloudscom

Content-Length 48

中移物联网有限公司 OneNET 开发文档中心

sn02136616511001titletestdevice0001

其中

6TM7OkhNsTjATvFx 为产品注册码

02136616511001 是本例中模拟的设备唯一编号

testdevice0001 是本例中模拟的设备名

若上传的数据格式以及参数鉴权均正确则平台会返回设备创建成功

返回设备 ID以及该设备对应的设备 api-key

HTTP11 200 OK

Date Wed 09 Aug 2017 064821 GMT

Content-Type applicationjson

Content-Length 95

Connection keep-alive

Server Apache-Coyote11

Pragma no-cache

errno0datadevice_id11142371keyq9Mw0zqiAPjTwqfyCk2mWrUi8=errorsucc

3) 在步骤 2)完成之后平台上的设备就已经成功创建了终端需要

重新 TCP连接到对应协议的服务器上完成设备连接(与设备进行映射)以

及上传数据的操作

34 设备 ID 与产品序列号

通过 OneNET构建的物联网系统中有两套比较重要的编码设备 ID与产品序列号

(SN)其中

产品序列号是由厂商指定的在厂商的产品范围内是保持唯一的在出厂前烧写到每

一个终端中通常包含在与平台通信的数据中并以条形码的方式贴在产品的包装上用

于从用户的角度区分每一个独立的终端

设备 ID是在平台创建设备时由 OneNET分配的平台范围内唯一的编号应用于第三

方平台调用 OneNET API时使用

在创建设备时OneNET平台需要用户以设备 sn为参数进行设备创建成功之后平

台会分配一个设备 ID这样 OneNET内部就有了一个 sn-设备 ID的映射关系

终端登陆使用的鉴权信息是出厂时烧写好的 sn鉴权通过之后平台可以将该终端

上传是数据放到对应的设备中

上层应用通过创建设备 API或者查询设备 API建立 sn-设备 ID映射表在需要操作

某一设备时首先可以获取的是终端的 sn号(因为对用户是可见的)通过映射表获取设

中移物联网有限公司 OneNET 开发文档中心

备 ID然后再通过 API访问 OneNET平台上的对应设备

两套编码在物联网系统中的应用位置如下图所示

物联网应用

OneNET

终端

(烧写sn)

HTTP API 以设备ID为参数进行API访问

接入协议以sn为鉴权参数进行设备连接

设备

设备名

设备ID

设备sn

设备标签

sn 设备ID

snmdash设备ID映射表

中移物联网有限公司 OneNET 开发文档中心

第四章 第三方应用开发

第三方应用与 OneNET 平台的业务逻辑关系如图 4-1 所示第三方应用与

OneNET平台之间通过 HTTPS请求应答的方式实现数据交互OneNET 平台为第三

方应用提供封装好的 API 接口应用平台通过调用这些 API 接口完成对 OneNET

平台的读写执行以及设备管理请求然后 OneNET 平台会将相应的指令请求发送

到终端设备OneNET 平台收到终端设备响应的数据及设备信息后会将数据及

设备信息推送到应用平台完成应答

下面将分别介绍第三方应用接入 OneNET 平台的步骤OneNET平台提供的数

据推送功能以及 OneNET 平台为第三方应用封装好的 API接口

图4-1 第三方应用与OneNET平台的逻辑关系

41 第三方应用接入 OneNET 平台

第三方应用与 OneNET平台实现数据交互的前提是已经建立连接第三方应

用接入 OneNET平台的开发流程如图 4-2所示包括三个步骤

(1) 在 OneNET 平台创建了设备该设备有对应的真实设备且能正常上报

数据

(2) 用户已经开发并部署了 OneNET平台验证接入的程序

(3) 在 OneNET 平台正确配置了第三方应用数据接收的地址(URL)

Token以及其他参数

中移物联网有限公司 OneNET 开发文档中心

在确保上述第(1)步已经实现的基础上下面将分别讲述第(2)步和第

(3)步的实现过程

图4-2 数据推送的开发流程

412 第三方应用平台接入验证程序

第三方应用平台接入验证程序工作流程如下所述当 OneNET 平台完成对第

三方开发平台的配置后会向第三方开发平台发起 URLampToken验证接入验证程

序对平台发送的验证参数进行验证验证通过后第三方开发平台会向 OneNET

平台返回验证消息当 OneNET 平台收到验证消息后说明第三方开发平台与

OneNET平台已建立连接

目前 OneNET平台为第三方应用平台提供接入验证程序的 SDK有 Javaphp

Nodejs和 C四个版本

SDK 下载地址httpsopeniot10086cndocart432html118 -ldquo数

据推送rdquo

413 OneNET 平台配置第三方应用平台

在 OneNET平台对第三方应用平台的配置界面如图 4-3所示

URL第三方开发平台的地址

Token可以自定义用于第三方开发平台接入平台握手验证

消息加解密方式有明文模式和安全模式当启用安全模式后平台端需要

用户自定义 AESKey 或者由平台随机生成在应用程序中使用该 AESKey 解密消

中移物联网有限公司 OneNET 开发文档中心

推送时间限制(秒)和推送数据限制(个)设置ldquo推送时间限制rdquoldquo推送数

据限制rdquo可以实现批量推送数据减少服务器压力当满足ldquo推送时间限制rdquo和

ldquo推送数据限制rdquo要求后OneNET 将给第三方推送数据如果没有设置ldquo推送

时间限制rdquo和ldquo推送数据限制rdquo将默认数据实时推送

图4-3 第三方开发平台的配置界面

当用户成功在 OneNET 平台配置了第三方开发平台服务器地址后点击ldquo提

交rdquo按钮后OneNET 平台会向第三方应用平台发起 URLampToken 验证请求验证

通过且收到第三方返回的验证消息后则第三方应用平台与 OneNET 平台已建立

连接之后OneNET 平台在收到设备数据时会将设备数据推送到已配置的第三

方应用平台

用户数据接收服务程序接收到 OneNET平台发送的 ldquoURLampTokenrdquo验证请求

请求的格式形如httpipporttestmsg=xxxampnonce=xxxampsignature=xxx

蓝色字体部分为用户在 OneNET平台配置的 URL常规的验证流程如下

(1)在请求中获取参数ldquononcerdquoldquomsgrdquo的值将ldquotokenrdquo(此为页面

配置参数 token的值)ldquononcerdquoldquomsgrdquo的值计算 MD5(token+nonce+msg)

加密值并且编码为 Base64字符串值

中移物联网有限公司 OneNET 开发文档中心

(2)将上一步中 Base64字符串值通过 URL Decode 计算后的值与请求参数

ldquosignaturerdquo的值进行对比如果相等则表示 token验证成功

(3)如果 token 验证成功向 OneNET 平台返回ldquomsgrdquo参数值否则返回

其他值

说明如果用户不想验证 Token 的有效性可以忽略以上步骤并直接向

OneNET平台返回ldquomsgrdquo参数值

42 OneNET 平台数据推送

平台以 HTTPS POST 请求形式向第三方应用平台注册地址推送数据推送数

据相关信息以 JSON 串的形式置于 HTTPS请求中的 body部分

第三方应用平台在接收数据时会接收到数据的明文消息或者密文消息

明文消息中以ldquotyperdquo的数值区分不同的消息而密文消息与明文消息的区别

是ldquomsgrdquo部分经过了加密处理下面将分别对明文消息密文消息以及消息相

关字段和密文的加密算法进行说明

421 明文消息

明文消息有两种消息类型分别为数据点消息和设备上下线消息而数据点

消息又分为单条数据点消息和数据点消息批量形式数据点消息批量形式中的不

同数据点是以不同时间戳区分的

(1)数据点消息(type=1)

msg

type 1

dev_id 2016617

ds_id datastream_id

at 1466133706841

value 42

msg_signature message signature

nonce abcdefgh

(2)数据点消息批量形式(type=1)

msg [

type 1

dev_id 2016617

ds_id datastream_id

中移物联网有限公司 OneNET 开发文档中心

at 1466133706841

value 42

type 1

dev_id 2016617

ds_id datastream_id

at 1466133706842

value43

]

msg_signature message signature

nonce abcdefgh

(3)设备上下线消息(type=2)

msg

type 2

dev_id 2016617

status 0

login_type 1

at 1466133706841

msg_signature message signature

nonce abcdefgh

422 密文消息

密文消息中的ldquoenc_msgrdquo是由明文消息中的ldquomsgrdquo采用 AES 加密算法而

enc_msgxxxx

msg_signature

message signature

nonceabcdefgh

423 消息相关字段说明

表4-1 消息相关字段说明

字段 字段说明

type 标识数据类型当前版本范围[15]

dev_id 设备 ID

ds_id 公 开 协 议 中 的 数 据 流 ID 其 格 式 为

objectID_instanceID_resourceID

at 平台时间戳单位 ms

value 具体数据部分为设备上传至平台或触发的相关

数据

中移物联网有限公司 OneNET 开发文档中心

status 设备上下线标识

0-下线 1-上线

login_type

设备登陆协议类型

1EDP 2nwx 3JTEXT 5JT808 6

MODBUS 7MQTT 8gr2010NB-IoT

cmd_type

命令响应的类型

1设备收到 cmd的 ACK 响应信息 2设备收到

cmd的 Confirm响应信息

cmd_id 命令 ID

msg_signatur

e 消息摘要

nonce 用于计算消息摘要的随机串

enc_msg 加密密文消息体对明文 JSON串(msg字段)的

加密

424 加密算法详述

平台基于 AES算法提供加解密技术具体阐述如下

EncodingAESKey 即消息加解密 Key 的 BASE64编码形式长度固定为 43

个字符从 a-zA-Z0-9共 62个字符中选取由服务开启时填写后

也可申请修改

AES密钥计算为 AESKey=Base64_Decode(EncodingAESKey + ldquo=rdquo)

EncodingAESKey 尾部填充一个字符的ldquo=rdquo 用 Base64_Decode 生成 32

个字节的 AESKey

AES采用 CBC 模式秘钥长度为 32 个字节(256位)数据采用

PKCS7填充 初始化 iv向量取秘钥前 16字节 PKCS7K为秘钥字

节数(采用 32)buf为待加密的内容N为其字节数Buf 需要被填

充为 K的整数倍在 buf的尾部填充(K-NK)个字节每个字节的内容

是(K- NK)具体详见toolsietforghtmlrfc2315

BASE64采用 MIME格式字符包括大小写字母各 26个加上 10个数

字和加号ldquo+rdquo斜杠ldquordquo一共 64个字符等号ldquo=rdquo用作后缀填

出于安全考虑平台网站提供了修改 EncodingAESKey的功能(在

EncodingAESKey 可能泄漏时进行修改对应上第三方平台申请时填写

的接收消息的加密对称密钥)所以建议保存当前的和上一次的

中移物联网有限公司 OneNET 开发文档中心

EncodingAESKey若当前 EncodingAESKey 生成的 AESKey解密失败则

尝试用上一次的 AESKey的解密

平台的加密消息部分为 enc_msg= Base64_Encode( AES_Encrypt

[random(16B)+msg_len(4B)+msg] )即以 16字节随机字节串拼接 4字

节表示消息体长度的字节串(此处 4 字节长度表示为网络字节序)再加

上消息本身的字节串作为 AES加密的明文再以 AES算法对明文进行加

密生成密文最后对密文进行 BASE64 的编码操作生成加密消息体

对加密消息体的解密流程为1)首先进行加密消息体的 BASE64 解码操作

aes_msg=Base64_Decode(enc_msg)2)对获取的解码内容以 AES 算法进行解密

操作获取明文部分plain_msg=AES_Decrypt(aes_msg)解密中使用的秘钥由

EncodingAESKey 计算得来使用的初始化 iv 向量为计算出的 aes 秘钥的前 16

字节3)去掉 plain_msg 的前 16 字节再以前 4 字节取出消息体长度根据消

息体长度获取真实的消息部分(推荐以消息体长度获取真实消息以兼容

plain_msg 未来可能出现的结构变更)表示加密传输的数据后两字段与明文

传输一致

43 API 接口

第三方开发平台应用层通过 Rsetful API 的方式和 OneNET平台进行交互对

接实现命令的下发数据的读写以及相关业务的交互

针对 MQTT 协议目前主要开发了以下 API 用来实现第三方开发平台向

OneNET平台请求读写执行以及设备管理请求具体见下表 4-2下面分别对每一

种 API进行说明

表4-2 API功能说明

API 类别 操作对象 API名称

需要终端响应 只需平台响应

设备

注册

更新设备注册属性

新增

更新

精确查询单个设备

中移物联网有限公司 OneNET 开发文档中心

模糊查询设备

批量查询设备状态

删除

数据流

新增

更新

查询单个数据流

查询多个数据流

删除

数据点

新增

查询

二进制数

新增

查询

触发器

新增

更新

查询单个触发器

模糊查询触发器

删除

触发数据内容

命令

发送命令

查询命令状态

查询命令相应

查询设备历史命令

视频能力 获取播放地址

APIKEY

新增

更新

查看

删除

消息订阅

按 Topic发送命令

查询订阅指定 Topic设备的列表

查询设备订阅的 Topic列表

删除产品的 Topic

查询产品的 Topic

中移物联网有限公司 OneNET 开发文档中心

432 设备

4321 注册

表4-3 设备注册

HTTP方法 POST

URL apihecloudscomregister_de

URL参数 register_code=6TM1OkhNsTjATvFx 设备注册码(必填)

HTTP内容

(示例)

sn 2015031401421 设备唯一标识 string类型最长 512字符

mac C89346DA4373 设备唯一 mac标识最长 32字符

title myedpdevice 设备名(可选) 最长 32个字符

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

keyQ1VdWoEvdkCye=d1=HcCSP6LvCw= 新设备 apikey

device_id 325018 设备 ID

说明

1 响应消息中 errno 表示错误码error 表示错误原因如果创建设备失

败则没有 data字段

2 snmac一定要必填其中一个而且只可以传一个用于鉴权就是设备

新增中的 auth_info

3 此接口根据产品设置的不同默认 allow_dup=true可以生成新设备及

key或获取原有设备及 key见下表

表4-4 对应表

产品允许重复 sn 在产品中已存在 sn 在产品中不存在

allow_dup=true 是 sn 对应的设备 id 和 key 新的设备 id 和 key

allow_dup=false 否 报错 新的设备 id 和 key

中移物联网有限公司 OneNET 开发文档中心

此接口返回的新设备默认设备名均为auto_register均为私有设

备设备协议与产品协议相同

4322 更新设备注册属性

表4-5 更新设备注册属性

HTTP方法 PUT

URL apihecloudscomregister_attr

HTTP头部 api-key xxxxddddsssaaa 必须为 masterkey

HTTP内容

(示例)

allow_dup true|false是否允许重复提交相同的设备 sn 默认 true

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

默认 allow_dup 为 true主要用于设备注册码创建设备属性限制

4323 新增

表4-6 新增设备注册属性

HTTP方法 POST

URL apihecloudscomdevices

HTTP头部 api-key xxxxddddsssaaa 必须为 masterkey

HTTP内容

(示例)

title mydevice 设备名

desc some description 设备描述(可选)

tags [chinamobile] 设备标签(可选可为一个或多个)

protocolMQTT 选择一种接入协议(可选默认为 HTTP)

location lon 106 lat 29 ele 370设备位置纬度

经度 高度(可选)

private true| false 设备私密性(可选默认为 ture)

auth_info 201503041a5829151 MQTT设备设备唯一编号

other version 100 manu china mobile 其他信息(可

选JSON格式可自定义)

HTTP响应响

应消息内容

(实例)

errno 0

error succ

data

中移物联网有限公司 OneNET 开发文档中心

device_id233444 平台分配的设备 ID

4324 更新

表4-7 更新

HTTP方法 PUT

URL apihecloudscomdevicesdevice_id

HTTP头部 api-key xxxxddddsssaaa masterkey或设备 apikey

HTTP内容

(示例)

title mydevice 设备名(可选)

desc some description 设备描述(可选)

tags [chinamobile] 设备标签(可选)

protocolMQTT 选择一种接入协议(可选)

location lon106 lat 29 ele 370设备位置经度

纬度 高度(可选)

private true| false 设备私密性(可选)

auth_info201503041a5829151 MQTT设备设备唯一编号(可选)

other version 100 manufacturer china mobile 其

他信息(可选)

HTTP响应响

应消息内容

(示例)

errno 0

error succ

中移物联网有限公司 OneNET 开发文档中心

4325 精确查询单个设备

表4-8 精确查询单个设备

HTTP方法 GET

URL apihecloudscomdevicesdevice_id

HTTP头部 api-key xxxxddddsssaaa masterkey 或设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

iddevice_id

tags [chinamobile]

onlinetrue|false

protocolMQTT

titlemy device1

descsome description

create_time2015-09-16 102222

privatetrue|false

locationele370lat17609lon17703

auth_infohellip

otherversion100manufacturerchina mobile

keys[titledevice-auto-keykey2JO3B12O1]

数据流

datastreams[

create_time 2014-10-23 202222

iddatastream_id1

unitcelsius

unit_symbolC

uuid 231a5aa9-9de4-5f2e-9e0f-015181c98429

]

4326 模糊查询设备

表4-9 模糊查询设备

HTTP方法 GET

URL apihecloudscomdevices

中移物联网有限公司 OneNET 开发文档中心

URL 参数

key_words=my 匹配关键字(可选从 id和 title字段中左匹配)

auth_info=203x1 鉴权信息(可选对应注册时的 sn参数唯一设

备编号)

tag=mobile 标签(可选)

online=true| false 在线状态(可选)

private=true| false 私密性(可选)

page=1 指定页码最大页数为 10000(可选)

per_page=30 指定每页输出设备个数默认 30最多 100(可选)

device_id=235122 指定设备 ID多个用逗号分隔最多 100个(可

选)

begin=2016-06-20 起始时间包括当天(可选)

end=2016-06-20 结束时间包括当天(可选)

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

total_count1

per_page30

page1

devices

[

id3497307

titlemy device1

desc device desc

privatetrue

protocolMQTT

onlinefalse

locationlon10655231191544001lat29535451246673

create_time2013-02-11 122233

auth_infoSYSz=8QY3r7aTQ48UKfqPnB=PybYRo=

]

4327 批量查询设备最新数据

表4-10 批量查询设备最新数据

HTTP方法 GET

中移物联网有限公司 OneNET 开发文档中心

URL apihecloudscomdevicesdatapoints

URL参数 devIds=1221122331123 设备 id用逗号隔开限制 1000 个设备

HTTP头部 api-key xxxxddddsssaaa masterkey 或设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

error ldquosuccrdquo

data

devices [

id 12323 设备 id

title daf设备名

datastreams

[

id temperature数据流名称

at 2017-02-12 102222数据流更新时间

value 12数据流最新数据

hellip

helliphellip

]

hellip

hellip

]

4328 删除

表4-11 删除设备

HTTP方法 DELETE

URL apihecloudscomdevicesdevice_id

HTTP头部 api-key xxxxddddsssaaa 可为设备级别的 Key

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

中移物联网有限公司 OneNET 开发文档中心

说明删除设备会删除该设备下所有数据流和数据点删除设备动作是异步

的系统会在后续逐步删除该设备下的数据流和数据点

433 数据流

4331 新增

表4-12 新增数据流

HTTP方法 POST

URL apihecloudscomdevicesdevice_iddatastreams

HTTP头部 api-key xxxxddddsssaaa masterkey 或设备 apikey

HTTP内容

(示例)

idtemperature 数据流名称 示例温度

tags[Tag1Tag2] 数据流标签(可选可以为一个或多个)

unitcelsius 单位(可选)

unit_symbolC 单位符号(可选)

HTTP响应响

应消息内容

(示例)

errno 0

data

ds_uuid 9e6bcac9-2c6f-59d5-adae-3955df2e7bce平台分配

数据流 UUID

error succ

4332 更新

表4-13 更新数据流属性

HTTP方法 PUT

URL apihecloudscomdevicesdevice_iddatastreamsdatastream_id

示例apihecloudscomdevices421240datastreamstemperature

HTTP头部 api-key xxxxddddsssaaa masterkey 或设备 apikey

HTTP内容

(示例)

tags[Tag1Tag2] 数据流标签(可选)

unitcelsius 单位(可选)

unit_symbolC 单位符号(可选)

HTTP响应响

应消息内容

(示例)

errno 0

error succ

中移物联网有限公司 OneNET 开发文档中心

4333 查询单个数据流

表4-14 查询单个数据流

HTTP方法 GET

URL apihecloudscomdevicesdevice_iddatastreams

URL参数 datastreams_ids = 查看的 datastream的 id

HTTP头部 api-key xxxxddddsssaaa masterkey 或该设备的设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

data [

update_at 2018-06-29 112938 数据流最后更新时

id 湿度 数据流名称

create_time 2018-06-28 170548数据流创建时间

current_value 53845013最新数据点

]

error succ

4334 查询多个数据流

表4-15 查询多个数据流

HTTP方法 GET

URL apihecloudscomdevicesdevice_iddatastreams

URL 参数

datastream_ids= 查看的 datastream的 id多个 id之间用英文逗号

分开(参数缺省时为查询所有数据流)

示例

apionenetcomdevices1234datastreamsdatastream_ids=tempgps

表示查看 temp和 gps两个数据流的信息

HTTP头部 api-key xxxxddddsssaaa masterkey 或者 该设备的设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data 数据流信息

[

idtemperature 数据流名称设备范围内唯一

tags[Tag1Tag2] 数据流标签

unitcelsius 单位

unit_symbolC单位符号

create_timexxxx-xx-xx 102222 创建时间

中移物联网有限公司 OneNET 开发文档中心

current_valuehellip该数据流下数据点最新值

update_atxx-xx-xx该数据流下数据点最新上传时间

]

[

idhumi 数据流名称设备范围内唯一

tags[Tag1Tag2]

unit_symbol

create_timexxxx-xx-xx 102222

current_valuehellip

update_atxx-xx-xx

]

[]

4335 删除

表4-16 删除数据流

HTTP方法 DELETE

URL apihecloudscomdevicesdevice_iddatastreamsdatastream_id

URL参数 无

HTTP头部 api-key xxxxddddsssaaa masterkey 或者设备 key

HTTP响应响

应消息内容

(示例)

errno 0

error succ

434 数据点

4341 新增

中移物联网有限公司 OneNET 开发文档中心

表4-17 新增数据点

HTTP方法 POST

URL apihecloudscomdevicesdevice_iddatapoints

URL参数 type=3 上传数据类型(可选默认为完整 JSON型见 HTTP内容示

例)

HTTP头部 api-key xxxxddddsssaaa masterkey 或者 设备 apikey

HTTP内容

(示例)

datastreams

[

id temperature 数据流名称或数据流模板名称

datapoints [

at 2013-04-22T003543 上传数据点时间可选如

果为空则设备云会取当前时间如果存在其格式必须为 YYYY-MM-

DDThhmmss的形式(例如2015-03-22T223112)

value 42 上传数据点值

at 2013-04-22T005543

value 84 上传数据点值

]

id key 数据流名称或数据流模板名称

datapoints [

at 2013-04-22T003543上传数据点时间可选

value hellip上传数据点值

at 2013-04-22T003543

value hellip上传数据点值

]

hellip

]

中移物联网有限公司 OneNET 开发文档中心

HTTP 响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

1 可以一次性向设备云上传多个数据流每个数据流中可以包括多个数据

点示例程序表示向设备云上数据流 temperature 和数据流 key上传数据其中

temperature数据流有两个数据点key数据流也有两个数据点

2 如果某个数据流不存在则在增加数据点时设备云会自动创建一个新

的数据流注意新数据流的 datastream id 不可为空

3 数据点表示在某个时刻该数据流的值其 at表示时间为可选字段如

果为空则设备云会取当前时间如果存在其格式必须为YYYY-MM-DDThhmmss

的形式(例如2015-03-22T223112)

4 数据点中的 value表示具体的值其值为 JSON对象可以为整型浮点

型字符串多种类型如果 value部分用双引号括起来则其在设备云存储为字

符串如果不用双引号括起来则其表示数值字符编码现在只支持 UTF-8

5 数据点对应的时间是数据点的标识的一部分相同时间的两个数据点

设备云会同时对这两个相同时间的数据点进行保存不会出现覆盖另一个数据点

的情况一般如果 at 部分取空设备云会取系统时间精度为毫秒如果在一

条命令中某一个数据流包含多个数据点都没有 at 字段设备云将会对所有数据

点进行保存

6 新增数据点支持如下简写方式在请求的 URL中增加 type字段指示所

使用的格式类型目前 type支持 345三种情况

URLapihecloudscomdevices2214570datapointstype=3

示例temperature225humidity952

表示在数据流 temperature中增加一个数据点 225在 humidity 中增加一

个数据点 952

URLapihecloudscomdevices2214570datapointstype=4

示例temperature2015-03-22T223112225

表示在数据流 temperature中加一个数据点在 2015年 3月 22 日 22点 31

中移物联网有限公司 OneNET 开发文档中心

分 12秒的值为 225

URLapihecloudscomdevices2214570datapointstype=5

示例temperature2015-03-22T223112225pm2589

表示在数据流 temperature中加一个数据点即 2015年 3月 22 日 22点 31

分 12秒的值为 225在数据流 pm25中添加一个数据点即当前时间的值为 89

4342 查询

表4-18 查询数据点

HTTP方法 GET

URL apihecloudscomdevicesdevice_iddatapoints

URL 参数

datastream_id=abc 查询的数据流多个数据流之间用逗号分隔

(可选)

start=2015-01-10T080035 提取数据点的开始时间(可选)

end=2015-01-10T080035 提取数据点的结束时间(可选)

duration=3600 查询时间区间(可选单位为秒)

start+duration按时间顺序返回从 start开始一段时间内的数据点

end+duration按时间倒序返回从 end回溯一段时间内的数据点

limit=100 限定本次请求最多返回的数据点数0ltnlt=6000(可选

默认 1440)

cursor= 指定本次请求继续从 cursor位置开始提取数据(可选)

sort=DESC | ASC 值为 DESC|ASC时间排序方式DESC倒序ASC升

序默认升序

ltnlt=6000(可选默认 1440)

HTTP头部 api-key xxxxddddsssaaa masterkey 或者 该设备的设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

cursor70921_3771908_1472355096

datastreams[

idtemperature数据流名称或数据流模板名称

datapoints[

at xxxx-xx-xx 102222value42数据点上传时间和

at xxxx-xx-xx 102222value84

]

中移物联网有限公司 OneNET 开发文档中心

idkey 数据流名称或数据流模板名称

datapoints[

at xxxx-xx-xx 102222valuehellip

atxxxx-xx-xx 102222valuehellip

]

hellip

]

1 若不携带任何参数平台返回本设备所存在的所有数据流中的最新数据

(这一种情况下查询时出现时延较大的性能问题建议在 URL 参数中加上

newadd参数并将其值赋为 true如 newadd=true)

2 若不携带数据流 id参数携带 limit 参数时会返回该设备每个数据流

最多 limit 条数据

3 若要查看某一条数据流数据需在上述 URL中增加参数 datastream_id

4

apihecloudscomdevices564280datapointsdatastream_id=tempamplimit

=10会返回数据流temp中最近的 10个数据点

5 要查看某一条数据流在某个时间范围内的数据可以在增加 start和 end

参数

示例

apihecloudscomdevices564280datapointsdatastream_id=temper

atureampstart=2013-05-12T171233ampend=2013-06-12T172233 表示查询本设

备对应的数据流在 2013 年 5 月 12 日 17 点 12 分 33 秒到 17 点 22 分 33 秒的数

据点注意如果 start 参数存在end参数不存在表示取 start后的所有数据

如果 start 不存在end 存在设备云会忽略 end参数注意日期时间格式格

式必须为示例中的格式YYYY-MM-DDThhmmss例如2013-05-12T171233

日期和时间之间用大写字母 T 分隔start 和 end 之间的时间间隔最大为 1 年

超过一年会忽略

如果指定了 start 参数则可能返回的数据点的数目会很多此时默认会返

回最多 100 个数据点可以使用 limit 参数设定返回多少个数据点最大为

6000个数据点当实际的数据点数目多于 limit 限定的数目时返回的 json串

中移物联网有限公司 OneNET 开发文档中心

中会有一个 cursor 字段下一次请求的命令行中可以携带此 cursor 字段表示接

着遍历本数据流此 cursor字段标识上次取出数据点后下一个数据点的位置

435 二进制数据

4351 新增

将二进制数据将作为数据点保存到设备下的某个数据流中设备云返回该二

进制数据的索引号

表4-19 新增二进制数据

HTTP方法 POST

URL apihecloudscombindata

URL参数 device_id=421590 数据所属设备(必选)

datastream_id=bin 该数据所属已经存在的数据流(必选)

HTTP头部 api-key xxxxddddsssaaa masterkey 或者该设备的设备 key

HTTP 内 容

(示例)

普通二进制数据文件图像等

(最大限制为 800上传时间间隔需大于 1ms)

HTTP响应响

应消息内容

(示例)

errno 0

error succ

data

index3491506_1475204886914_bin 二进制数据索引号

4352 查询

表4-20 查询二进制数据

HTTP方法 GET

URL apihecloudscombindataindex

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

普通二进制数据文件图像等二进制形式数据

436 触发器

4361 新增

表4-21 新增触发器

HTTP方法 POST

中移物联网有限公司 OneNET 开发文档中心

URL apihecloudscomtriggers

HTTP头部 api-key xxxxddddsssaaa 必须为 masterkey

HTTP内容

(示例)

titlewen du jian kong 设备名(可选)

ds_idgps 数据流名称(id)(可选)

dev_ids[10272345615523] 设备 ID(可选)

ds_uuids[ 数据流 uuid(可选)

9ad09uac-7446-512f-b07c-90jdnzj8120ad

4599436e-7146-5349-b07c-79fa0919cs62

]

urlxxbbcom

typegt | gt= | lt | lt= | == | inout | in | out |change | frozen |

live

threshold100 阙值根据 type不同见以下说明

1) type 为gt|gt=|lt|lt=|==时threshold必须为数值

2) type为 inout时threshold 设置为lolmt40 uplmt52 表示

数据流的值首次进入或离开闭区间[4052]时触发

3) type为 change时threshold 参数不用传递当上传的值有改变时触发

告警

4) type为 frozen时threshold 为数值指定距离最后一次数据上报多少

秒内未上报数据触发告警同时被监控对象进入 frozen状态

5) type 为 live 时threshold 为数值指定距离最后一次数据上报多少秒

后上报数据触发告警

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

tirgger_id233444 触发器 ID

说明

1触发器的含义是当指定范围内的数据点满足触发条件的要求时会向

url参数指定的地址发送 post请求

2触发器有三种工作触发模式

1)在请求参数中单独指定了 ds_id不包括其他参数那么当前项目下

中移物联网有限公司 OneNET 开发文档中心

所有设备的数据流中数据流名称符合 ds_id 的数据都会进入触发判断逻辑

2)在请求参数中单独指定了 ds_uuids 数组那么只有这些指定的数据

流会进入触发判断逻辑

3)在请求参数中指定了 ds_id 和 dev_ids那么只有这些指定的设备的

数据流会进入触发判断逻辑

4362 更新

表4-22 更新触发器属性

HTTP方法 PUT

URL apihecloudscomtriggerstirgger_id

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP内容

(示例)

titlewen du jian kong

ds_uuids[

9ad09uac-7446-512f-b07c-90jdnzj8120ad

4599436e-7146-5349-b07c-79fa0919cs62

]

urlxxbbcom

typegt | gt= | lt | lt= | == | inout | in | out | exp | change |

frozen | live

threshold100

注若要修改 type需要对应设置 threshold

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

4363 查询单个触发器

表4-23 查询单个触发器

HTTP方法 GET

URL apihecloudscomtriggerstirgger_id

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

idtrigger_id1

中移物联网有限公司 OneNET 开发文档中心

titlewen du jian kong

ds_uuids[

datastream1_uuidrdquo

datastream2_uuidrdquo

datastream3_uuidrdquo

]

urlxxbbcom

typegt|gt=|lt|lt=|==|in|out|exp|change|frozen|live

threshold100

invalidtrue 触发器是否已失效

create_timexx-xx-xx 102222

4364 模糊查询触发器

表4-24 模糊查询触发器

HTTP方法 GET

URL apihecloudscomtriggers

URL 参数

title=name 指定触发器名称

page=1 指定页码可选

per_page=10 指定每页输出个数可选默认 10最多 100

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

total_count600

per_page30

page1

triggers[

idtrigger_id1

titlewen du jian kong

ds_uuids

[datastream1_uuidrdquo datastream2_uuidrdquo]

urlxxbbcom

typegt|gt=|lt|lt=|==|in|out|exp|change|frozen|live

threshold100

invalidtrue 触发器是否已失效

create_timeXXXXXXXX

中移物联网有限公司 OneNET 开发文档中心

]

说明触发器失效是指触发器所依赖的数据流或者设备被删除了此时触发

器永远不会有效触发事件

4365 删除

表4-25 删除触发器

HTTP方法 DELETE

URL apihecloudscomtriggerstirgger_id

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno 0

error succ

4366 触发数据内容

触发数据是指当 OneNET 设备云判断某个触发器的触发条件满足时会通过

POST方式向外抛出的 URL请求在 HTTP的 POST消息体中会携带如下格式的 JSON

字符串

表4-26 触发器内容

数据内容

(示例)

trigger

id1

threshold90

typegt

current_data[

dev_id2656

ds_idgps

ds_uuidFWEF-ZFW-ZFW-ZFWW

at2009-09-07T121602001403Z

value100

dev_id2656

ds_idtemper

中移物联网有限公司 OneNET 开发文档中心

ds_uuidFEWEF-ZFWFWW-WFWW-FWEFFWW

at2009-09-07T121602001403Z

value882

]

437 命令

命令是指应用发送命令数据给 OneNET设备云再由 OneNET设备云转发给终

端设备终端设备收到命令后可以向设备云反馈响应的一种工作机制命令下发

后应用可以通过 API查询命令状态和提取命令的响应数据

命令的执行步骤如下

1应用通过 API 向设备云发送命令数据

2设备云生成该命令的 uuid作为该命令的唯一标识并向应用返回同时向

终端设备转发命令数据

3 终端设备收到命令数据后执行命令数据可以生成响应也可以不响应

4设备云跟踪记录命令的响应如果设备有响应就关联命令 uuid和响应

结果

5应用通过 API 向设备云提取命令执行结果(API 请求中携带命令 uuid 标

识)

特别说明

命令下发到终端设备后如果终端设备 10 秒内未收到响应则此命令的状

态将被设置为超时应用通过 API 查询命令状态时会反馈超时超过 10 秒后

收到的响应会被丢弃

终端设备针对同一条命令回复多条命令响应只有在未超时时间内收到的最

后一条是有效响应前面的响应包将会被覆盖因此终端设备应该对每个命令只

有一个响应包

4371 发送命令

表4-27 发送命令

HTTP方法 POST

URL apihecloudscomcmds

URL 参数 device_id=415120 接收该数据的设备 ID(必选)

中移物联网有限公司 OneNET 开发文档中心

qos=0 | 1 是否需要响应默认为 0

0不需要响应即最多发送一次不关心设备是否响应

1需要响应如果设备收到命令后没有响应则会在下一次设备登陆

时若命令在有效期内(有效期定义参见 timeout参数)则会继续发送

对响应时间无限制多次响应以最后一次为准

本参数仅当 type=0时有效

timeout=300 命令有效时间默认 0

0在线命令若设备在线下发给设备若设备离线直接丢弃

gt0 离线命令若设备在线下发给设备若设备离线在当前时间

加 timeout时间内为有效期有效期内若设备上线则下发给设备单

位秒有效围0~2678400

本参数仅当 type=0时有效

type=0 | 1 默认 00发送 CMD_REQ包1发送 PUSH_DATA包

HTTP头部 api-key xxxxddddsssaaa masterkey或者设备 apikey

HTTP内容 用户自定义数据jsonstring二进制数据(小于 64K)

HTTP响应响

应消息内容

(示例)

errno 0

error succ

data

cmd_uuid2302-312-FWs 命令 id

4372 查询命令状态

表4-28 查询命令状态

HTTP方法 GET

URL apihecloudscomcmdscmd_uuid

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno 0

error succ

data

status1

0设备不在线|Device not online

1命令已创建| Command Created

2命令已发往设备| Command Sent

3命令发往设备失败| Send Command Failed

4设备正常响应| Command Response Received

5命令执行超时| Command Response Timeout

6设备响应消息过长 | Command Response Too Large

descldquosendingrdquo

中移物联网有限公司 OneNET 开发文档中心

4373 查询命令响应

表4-29 查询命令响应

HTTP方法 GET

URL apihecloudscomcmdscmd_uuidresp

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP 响应响

应消息内容

用户设备返回的响应内容

4374 查询设备历史命令

表4-30 查询设备历史命令

HTTP方法 GET

URL apihecloudscomcmdshistoryltdevice_idgtltdevice_idgt

URL 参数

start=2015-01-10T080035 查询的开始时间(可选)

end=2015-01-10T080535 查询的结束时间(可选)

page=1 指定页码最大页数为 10000(可选)

per_page=30 指定每页输出设备个数默认 30最多 100(可选)

HTTP头部 api-key xxxxddddsssaaa

HTTP响应响

应消息内容

errno 0

error succ

data

page 1当前页码

per_page 10当前每页总数

total_count 100

items [

cmd_uuid 2302-312-FWs

device_id 2设备 ID

expire_time 2016-07-05 000000过期时间

status 0命令状态

send_time 2016-07-05 000000发送时间

confirm_time 2016-07-05 000000响应时间

confirm_body 2463726571007b202274797022 响应内容

16进制字符

body 2463726571007b202274797022请求内容16进制字符

hellip

中移物联网有限公司 OneNET 开发文档中心

hellip

]

438 视频能力

4381 获取播放地址

表4-31 获取播放地址

HTTP方法 GET

URL apihecloudscomipcrtmp_address

URL 参数

device_id= 接收该数据的设备 ID(必填)

channel_id = 对应数据流名称中的 channelnum

protocol_type = 播放协议类型 0rtmp1hls2http-flv

HTTP头部 api-key xxxxddddsssaaa masterkey或者设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

errorrdquosuccrdquo

ldquodatardquo

addripport

accessTokenldquo字符串rdquo

439 APIKEY

4391 新增

表4-32 新增 APIKEY

HTTP方法 POST

URL apihecloudscomkeys

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP内容

(示例)

title sharing key key 的命名

permissions [

resources [ 被授权的资源

中移物联网有限公司 OneNET 开发文档中心

dev_id 424 被授权的设备 id

dev_id 425 被授权的设备 id

hellip

hellip

]

access_methods [ 被授权的命令

get

put

post

]

]

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data key2302-312-FWs key_string

说明授权命令是可选的另外被授权的命令也可以是 getputpost 的

一个或几个如只授权 get和 put命令

access_methods [getput]

4392 更新

表4-33 更新 APIKEY

HTTP方法 PUT

URL apihecloudscomkeyskey_string

HTTP头部 api-key xxxxddddsssaaa masterkey(注只能为 master-key)

HTTP内容

(示例)

title sharing key key 的命名

permissions [

resources [ 被授权的资源

dev_id 424 被授权的设备 id

ds_idfan1 数据流 id可选

中移物联网有限公司 OneNET 开发文档中心

dev_id 425 被授权的设备 id

ds_idfan1 数据流 id可选

hellip

hellip

]

access_methods [ 被授权的命令可选

get

put

post

]

]

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

说明

1对于 masterkey 不允许更新操作masterkey 默认具有最大权限可以访

问该用户名下所有设备所有数据

可以进行 POSTGETPUTDELETE操作如果更新 master key 系统会返回

失败

2授权命令是可选的另外被授权的命令也可以是 getputpost 的一个

或几个如只授权 get和 put命令

access_methods [getput]

3API key 更新是覆盖操作会将原来存在的授权资源和授权命令覆盖不

会保留原来的授权资源和授权命令

4393 查看

中移物联网有限公司 OneNET 开发文档中心

表4-34 查看 APIKEY

HTTP方法 GET

URL httpapihecloudscomkeys

URL 参数

key = FWJPO-FZFHW-FFEWB可选只查看该 key相关信息

page = 1 指定页码 可选

per_page = 10 指定每页输出个数可选默认 10最多 100

device_id = xxbbcc可选只查看与该设备相关的非 master-key

HTTP头部 api-key xxxxddddsssaaa masterkey(注只能为 master-key)

HTTP响应响

应消息内容

(示例)

errno 0

data

per_page 30

total_count 2

keys [

create_time 2015-11-04 142552

title Auto-generated-master-key

key 03GeDLYk0WNk1V338g7yndKZYkQA

create_time 2015-12-03 100041

permissions [

resources [

dev_id 564280

]

]

title 设备 1测试 Key

key vuHebEWefiU2Ueo5ouoCc1CUsYQ=

]

page 1

error succ

中移物联网有限公司 OneNET 开发文档中心

4394 删除

表4-35 删除 APIKEY

HTTP方法 DELETE

URL httpapihecloudscomkeyskey_string

HTTP头部 api-key xxxxddddsssaaa masterkey(注只能为 master-key)

HTTP 响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

4310 消息订阅

43101 按 Topic 发送命令

表4-36 按 Topic 发送命令

HTTP方法 POST

URL apihecloudscommqtt

URL参数 topic=xxx 设备订阅的主题(必选)

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP 内 容

(示例)

HTTP响应响

应消息内容

(示例)

errno0

errorldquosuccrdquo

data

total_count1

per_page30

page1

devices [123123433333]

43102 查询订阅指定 Topic设备的列表

表4-37 查询订阅制定 Topic设备的列表

HTTP方法 GET

URL apihecloudscommqtttopic_device

URL 参数

topic=xxx 设备订阅的主题(必选)

page=1 当前页码 必填大于等于 1

per_page=10 每页 必填范围 1-1000

中移物联网有限公司 OneNET 开发文档中心

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP内容

(示例)

HTTP响应响

应消息内容

(示例)

errno0

errorldquosuccrdquo

data

total_count1

per_page30

page1

devices [123123433333]

43103 查询设备订阅的 Topic列表

表4-38 查询设备订阅的 Topic列表

HTTP方法 GET

URL apihecloudscommqttdevice_topicdevice_id

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno0

errorldquosuccrdquo

data

[topic_name1 topic_name2 topic_name3]

43104 删除产品的 Topic

表4-39 删除产品的 Topic

HTTP方法 DELETE

URL apihecloudscommqtttopic

URL参数 name=xxx topic名(必选)

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno0

errorldquosuccrdquo

中移物联网有限公司 OneNET 开发文档中心

43105 查询产品的 Topic

表4-40 查询产品的 Topic

HTTP方法 GET

URL apihecloudscommqtttopic

URL参数 无

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno0

errorldquosuccrdquo

data

[topic_name1topic_name2topic_name3]

中移物联网有限公司 OneNET 开发文档中心

第五章 接入实例

51 MQTT-device 接入

511 工具下载

为方便开发人员直观感受使用 mqtt 协议进入平台的便利可使用平台提供

的 MQTT 设备模拟器进行接入平台请在首页-gt开发文档-gt资源下载-gt13 调试

工具下载进行下载如下图

图5-1 资源下载

下载地址

httpupfileshecloudscom123ueditor201707125d5bc37eca39c0c5b7a5bcb9

0e451eeerar

中移物联网有限公司 OneNET 开发文档中心

512 界面说明

图5-2 界面说明

513 使用方法

5131 创建产品

如 323 的过程在设备接入协议中选择 MQTT

中移物联网有限公司 OneNET 开发文档中心

图5-3 选择连接协议

5132 创建设备

如 323描述在平台上新建一个设备

5133 建立连接

在产品概况中可以查看产品 ID此信息填入模拟器 ProductID一栏如下图

图5-4 产品ID

在平台上进入设备信息页面可查看设备 ID及鉴权信息(此鉴权信息是新建设备时候填

写的鉴权信息)如下图

中移物联网有限公司 OneNET 开发文档中心

图5-5 设备ID及鉴权信息

相应把设备 ID及鉴权信息填入模拟器之中然后点击连接按钮如果未弹出提示对话

框则表示设备鉴权成功如下图

图5-6 连接成功

中移物联网有限公司 OneNET 开发文档中心

5135订阅与发布

演示本操作需要在 OneNet平台建立两个基于 MQTT协议的设备一个用于消息发布

另一个用于消息订阅

图5-7 设备状态

开启两个模拟器分别模拟以上两个设备然后建立连接

首先使用订阅主题打开第一个模拟器模拟消息订阅者

图5-8 订阅主题

其次发布主题打开第二个模拟器模拟消息发布者

中移物联网有限公司 OneNET 开发文档中心

图5-9 发布主题

经过以上两个操作后查看模拟消息订阅者的模拟器则收到了主题

为rdquotopic_namerdquo的消息如下图

中移物联网有限公司 OneNET 开发文档中心

图5-10 收到的主题

5136接收平台指令

建立连接后模拟器也可接收来自平台的指令具体操作如下

先打开模拟器-gt建立连接-gt选中【[OneNet]平台指令接收】选项栏利用平台下发指

令功能下发如下图平台下发指令

图5-11 平台发送命令

中移物联网有限公司 OneNET 开发文档中心

图5-12 下发指令

填写好将要发送的消息后点击【发送命令】按钮则模拟器成功接收到来自平台的

数据如下图模拟器截图

图5-13 模拟器收到的指令

5137上传数据点

Mqtt支持 Json 数据格式上报数据现根据 Json几种格式举一些例来演示怎么利用

模拟器上传数据

1)使用 Json数据 Type1上传 Json数据

datastreams[idtemperaturedatapoints[value255]]

中移物联网有限公司 OneNET 开发文档中心

如下模拟器上传数据界面

图5-14 Type1数据格式

则在平台数据展示中则可看到上传的数据点

图5-15 收到数据展示

2)使用 Json数据 Type3示例 Json数据为

temp32humi98

模拟器发送数据截图

中移物联网有限公司 OneNET 开发文档中心

图5-16 Type3数据格式

平台数据展示截图

图5-17 数据展示

3)使用 Json数据 Type4示例 Json数据为

temperature233pm2589

模拟器上传数据截图

中移物联网有限公司 OneNET 开发文档中心

图5-18 Type5数据格式

平台接收数据展示截图

图5-19 数据展示

52 基于麒麟开发板的 MQTT 接入实例

OneNet 平台为使用户能快速接入发布麒麟座开发板官网提交您的创意免

费申请开发板下面利用麒麟座开发板 V31 演示开发板采集温湿度使用 MQTT发

送到平台的接入流程

开发板申请链接httpsopeniot10086cneventdetail185html

521 搭建开发环境

OneNET 平台提供的麒麟座开发板是基予 STM32 单片机开发的一块功能应用

板开发板包含 MCU温湿度传感器GSM 模块WIFI 模块电源模块键盘

中移物联网有限公司 OneNET 开发文档中心

LED以及 lcd显示接口等满足用户对平台接入的基本需求能快速接入到平台

资料包配备完整工程代码方便工程移植等使用

目前 STM32 开发常用的 IDE 有 IARMDK 等我挑选 MDK 作为开发工具打

开工具包先安装 MDK511A安装完毕后再安装 MDKCM511A开发板所有资料软件

工具包下载案例包

案例包下载链接

httpspanbaiducoms1UB1qZGrVuovSVdbqqXP0Lglistpath=2F

图5-20 MDK包

安装完毕并安装 license详细步骤不做演示

中移物联网有限公司 OneNET 开发文档中心

522 连接硬件准备

5221 开发板接线

图5-21 开发板接线图

电源DC-5V

运行信息USART1-MicroUSB 线

软件下载ST-Link

中移物联网有限公司 OneNET 开发文档中心

5222 ESP8266跳线帽连接

图5-22 ESP8266跳线帽连接

中移物联网有限公司 OneNET 开发文档中心

5223 M6312跳线帽连接

图5-23 M6312跳线帽连接

523 工程实例

例程使用最简单易懂的方式编写着重让大家明白接入流程和协议

10~12 协议专属例程是展示该协议下的专用功能比如 EDP 的 PushData

中移物联网有限公司 OneNET 开发文档中心

HTTP 注册新设备MQTT 的订阅发布等具体使用方法查看该目录下的《使用

说明》

图5-24 工程文件

524 开发工程文件

中移物联网有限公司 OneNET 开发文档中心

图5-25 工程文件

图5-26 工程结构

默认已创建好产品以及设备打开文件工程 onenetc 和 esp8266c 修改例

程的 WIFI 信息和平台信息

分别在 esp8266c 的 36和 onenetc的 414345行

图5-27 更改项

525 编译下载

开发版接串口会有相应状态显示平台设备显示在线状态绿色为连接成功

设备在线灰色表示未连接并在数据展示中显示对应主题的所有数据

中移物联网有限公司 OneNET 开发文档中心

图5-28 连接成功

图5-29 收到数据

其他实例详情请见httpsopeniot10086cnbbsthread-1266-1-1html

中移物联网有限公司 OneNET 开发文档中心

第六章 MQTT 协议详解

61 设备与平台通信协议包格式

协议就是通信双方的一个约定即表示第 1字节传输的什么第 2字节

传输的什么helliphellip在 MQTT协议中一个 MQTT 数据包由固定头(Fixed

header) 可变头(Variable header) 消息体(payload)三部分构成

MQTT 数据包结构固定头部+可变头部+消息体

固定头(Fixed header)存在于所有 MQTT数据包中表示数据包类型及

数据包的分组类标识固定头格式如下

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 - 5 Remaining Length(该字段占用 1-4个字节)

目前平台版本支持的 Packet Type如下

名字 值 流向 描述

CONNECT 1 C-gtS 客户端请求与服务端建立连接

CONNACK 2 S-gtC 服务端确认连接建立

PUBLISH 3 CS 发布消息

PUBACK 4 CS 收到发布消息确认

PUBREC 5 CS 发布消息收到

PUBREL 6 CS 发布消息释放

PUBCOMP 7 CS 发布消息完成

SUBSCRIBE 8 C-gtS 订阅请求

SUBACK 9 S-gtC 订阅确认

UNSUBSCRIBE 10 C-gtS 取消订阅

UNSUBACK 11 S-gtC 取消订阅确认

PING 12 C-gtS 客户端发送 PING(连接保活)命令

PINGRSP 13 S-gtC PING命令回复

DISCONNECT 14 C-gtS 断开连接

可变头(Variable header)存在于部分 MQTT 数据包中数据包类型决定

了可变头是否存在及其具体内容

消息体(Payload)存在于部分 MQTT 数据包中表示客户端收到的具体内

中移物联网有限公司 OneNET 开发文档中心

不同类型数据包中可变头和消息体包含关系如下

消息类型 Variabl

e

Header

Payloa

d

CONNECT 有 有

CONNACK 有 有

PUBLISH 有 有

PUBACK 有 无

PUBREC 有 无

PUBREL 有 无

PUBCOMP 有 无

SUBSCRIBE 有 有

SUBACK 有 有

UNSUBSCRIBE 有 有

UNSUBACK 有 无

PING 无 无

PINGRSP 无 无

DISCONNECT 无 无

62 平台支持数据包类型

621 CONNECT(客户端请求与服务端建立连接 client -gt server)

固定头(Fixed Header)

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 - 5 Remaining Length(该字段占用 1-4个字节)

MQTT Packet Type 值为 0001表示该数据包为请求连接数据包

Remaining Length 剩余长度占 1-4字节

可变头(Variable Header)

包含内容如下

Description 7 6 5 4 3 2 1 0

byte

1-2

ProtocolNa

me Length

0 0 0 0 0 0 0 0

0 0 0 0 0 1 0 0

byte

3

lsquoMrsquo 0 1 0 0 1 1 0 1

byte

4

lsquoQrsquo 0 1 0 1 0 0 0 1

中移物联网有限公司 OneNET 开发文档中心

byte

5

lsquoTrsquo 0 1 0 1 0 1 0 0

byte

6

lsquoTrsquo 0 1 0 1 0 1 0 0

Byte

7

Protocol

Level

0 0 0 0 0 0 0 1

Byte

8

Connect

Flag

Use

r

flag

Passwo

rd

flag

WillReta

in

Flag

WillQo

s Flag

WillFl

ag

CleanSessi

on

Flag

Reser

ve

Byte

9-10

KeepAlive

(1) 版本

Protocol Level 必须设置为 4平台只支持协议版本 v 311不支持更老

的版本使用第三方客户端时需要注意选择正确的版本

(2) user flag 与 password flag

平台不允许匿名登陆因此这两个标志位在连接时必须设置为 1否则认为

协议错误平台将会断开连接

(3) Will flag 与 WillretainflagWillQosFlag

Will flag 为 0时WillQosFlag 和 WillRetainFlag 必须为 0Will Flag

为 1时WillQosFlag 只能为 012

1当该设备下一次正常上线后服务器会清除之前的 will 消息(包括

retain 消息)

2如果设备上线时设置了 Will Topic 和 msg且将 WillRetainFlag 设

置为 1只有设备异常断开后服务器才会将该 Will msg 分发给新的 Will

Topic 的订阅者且 Qos 级别以订阅的 Request qos 级别为准

3如果设备上线时设置了 Will Topic 和 msg且将 WillRetainFlag 设

置为 0服务器不会存储该消息当设备异常断开后会将该 Will msg 以设

备设置的 WillQosFlag的 Qos级别进行分发

(4) CleanSessionFlag

若客户端将 clean session 标志位设置为 0当其断开后平台将会保存

sessionsession 需保持的内容包含

客户端订阅的 topic列表

中移物联网有限公司 OneNET 开发文档中心

还未完成确认的 Qos1Qos2级别的 publish消息

客户端保存 session 的内容包含

已经发送到服务端的但还没有收到确认的 Qos1Qos2消息列表

待发送的 Qos0列表

若客户端将 clean session 标志位设置为 1当其断开后平台会清除设备

的订阅列表及未完成确认的 Qos1Qos2 的 publish消息

(5) Reserve

保留位置 0

(6) KeepAlive 保活时间

每个客户端可自定义设置连接保持时间最短 120秒最长 65535 秒

消息体(Payload) Description 是否必须存在 格式

Field1 Client

Identifier

是 2字节字串长度 + utf8字

Field2 UserName 是 2字节字串长度 + utf8字

Field3 UserPassword 是 2字节字串长度 + utf8字

目前平台支持的方式为以后两种

方式 1设备 ID项目 ID鉴权信息(auth_info)

字段设置 消息示例

client_id设置为平台创建设备时的

设备 id

username设置为ldquo项目 IDrdquo

password设置为ldquo鉴权信息

(auth_info)rdquo

client_id=rdquo123rdquo

username=rdquo433223rdquo

password=rdquo注册的鉴权信息rdquo

各字段说明如下

鉴权信息(auth_info)在平台申请设备时填写设备的 auth_info 属性(数

字+字母的字符串)该属性需要产品内具备唯一性(可使用设备出厂唯一编号)

方式 2设备 ID + APIKey(项目 ID也需要填写)

字段设置 消息示例

client_id设置为平台创建设备时的

设备 ID

username设置为ldquo项目 IDrdquo

client_id=rdquo123rdquo

username=rdquo433223rdquo

password=Api Key

中移物联网有限公司 OneNET 开发文档中心

password设置为ldquoAPI鉴权信息

(auth_info)rdquo

项目 ID在平台添加项目时平台生成的 ID

APIKey在平台上创建产品时生成的 APIKey

连接包实例如下

Send one mqtt packet

FixHeader

PacketTag = 16

PacketType = 1

RemainLength = 34

VariableHeaderConnect

protocol_name_len_= 4

protocol_name_= MQTT

protocol_level_= 4

connect_flag_= 192

keep_alive_= 12000

client_id_len_= 8

client_id_= 34764813

usr_name_len_= 6

usr_name_= 150295

password_len_= 4

password_= push

MQTT0x10 0x22 0x00 0x04 0x4D 0x51 0x54 0x54 0x04 0xC0 0x2E 0xE0 0x00 0x08 0x33

0x34 0x37 0x36 0x34 0x38 0x31 0x33 0x00 0x06 0x31 0x35 0x30 0x32 0x39 0x35 0x00

0x04 0x70 0x75 0x73 0x68

Send One Packet Succ

中移物联网有限公司 OneNET 开发文档中心

622 CONNACK (服务端确认连接建立)

Fixed Header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type = 2 0 0 0 0

byte2 - 5 Remaining Length(该字段占用 1-4个字节)

Variable Header

Description 7 6 5 4 3 2 1 0

byte 1 Acknowledge Flags 0 0 0 0 0 0 0 Sp

byte 2 Return Code x x x x x x x x

Sp Session Present Flagsession信息在服务器已保持置 1未保存置

0

返回码说明

返回码 描述

0 成功

1 协议版本错误

2 非法的 clientid

3 服务不可用

4 用户名或密码错误

中移物联网有限公司 OneNET 开发文档中心

5 非法链接(比如 token非法)

失败

如果 connect包不符合协议内容约束则直接断掉连接而不需要发送 conn

ack包

如果鉴权或授权失败回复一个带非 0错误码的 connack包

成功

必须断掉重复的 clientid

执行 cleansession 对应的操作

必须回复一个 connack回复码为 0

开始消息传递并加入 keepalive的监视

PS客户端需要等到服务端的 connack报文才能发送后续的数据包

623 PUBLISH(发布消息 client -gt server)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type DUP f

lag

QoS Level RETAI

N

byte2 - 5 Remaining Length(该字段占用 1-4 个字节)

DUP

QoS2Qos1如果为 0则表示是第一次发送该包如果为 1则表示

为重复发送的包

Qos0DUP 必须为 0

中移物联网有限公司 OneNET 开发文档中心

QoS 指定了该 publish包的 Qos 等级如下

Qos 值 Bit2 Bit1 描述

0 0 0 最多发送一次

1 0 1 至少发送一次

2 1 0 只发送一次

RETAIN 保留标志位如果为 1服务器存储最新一条 RETAIN消息以便

分发给新的订阅者如果 RETAIN为 1Payload 为空服务器分发该消息后会

清空该 topic 下的 RETAIN 消息

PS该版本实现了 Qos0Qos1Qos2

Variable Header

Description 格式 是否必须

Field1 TopicName 2 字节字串长度 + utf8字

Field2 PacketIdent

ifier

2 字节 QoS0否QoS1Qos2是

Payload

内容根据不同业务自定义

624 PUBLISH(发布消息 server -gt client)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type DUP f

lag

Qos Level RETAIN

byte2 - 5 Remaining Length(该字段占用 1-4个字节)

DUP

Qos2QoS1如果为 0则表示是第一次发送该包如果为 1则表示

为重复发送的包

中移物联网有限公司 OneNET 开发文档中心

Qos0DUP 必须为 0

QOS 指定了该 publish包的 qos等级如下

Qos 值 Bit2 Bit1 描述

0 0 0 最多发送一次

1 0 1 至少发送一次

2 1 0 只发送一次

RETAIN如果服务器分发的消息是 RETAIN 消息则将该标志位置 1否则置

0

PS该版本实现 Qos0Qos1Qos2其中服务器分发消息的 Qos级别是以 Clien

t-gtServer 发送的 publish 包的 qos 等级为准非订阅的 topic 的 Qos 等级R

etain 消息是以订阅的 Request Qos 级别进行推送

VariableHeader

Description 格式

Field1 TopicName 2 字节字串长度 + utf8字

Payload

内容根据不同业务自定义

625 PUBACK(收到发布消息确认)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

中移物联网有限公司 OneNET 开发文档中心

626 PUBREC(发布消息收到)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

627 PUBREL(发布消息释放)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

628 PUBCOMP(发布消息完成)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

中移物联网有限公司 OneNET 开发文档中心

byte 1~

2

PacketIdentifier PacketIdentifier

629 SUBSCRIBE(订阅请求)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

Payload

Description 格式

Byte1~

n

TopicName 2 字节字串长度 + utf8字

Byten+

1

Request Qos 服务质量要求(只能为 0

12)

topic 说明

可以包含一个或多个 topic

topic必须是数字英文反斜杠()的组合目前不支持通配符

每个客户端最多订阅 100个 topic

以下 topic 被系统保留使用(客户端不能订阅)

类型 说明

$开头 平台保留

中移物联网有限公司 OneNET 开发文档中心

6210 SUBACK(订阅确认)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

Payload

Description 7 6 5 4 3 2 1 0

byte 1 retcode

返回码说明

返回码 描述

0x00 成功(granted qos = 0)

0x01 成功(granted qos = 1)

0x02 成功(granted qos = 2)

0x80 失败

6211 UNSUBSCRIBE(取消订阅)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

中移物联网有限公司 OneNET 开发文档中心

Payload

Description 格式

Byte1~

n

TopicName 2 字节字串长度 + utf8字

可以包含一个或多个 topic

6212 UNSUBACK(取消订阅确认)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

6213 PING(客户端发送 PING(连接保活)命令)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

NULL NULL

注PING命令无 VariableHeader

中移物联网有限公司 OneNET 开发文档中心

6214 PINGRSP(PING命令回复)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

NULL NULL

注PINGRSP无 VariableHeader

6215 DISCONNECT(断开连接)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

NULL NULL

注DISCONNECT无 VariableHeader

中移物联网有限公司 OneNET 开发文档中心

第七章 设备开发流程

71 连接鉴权

Device Onenet

(Connect)鉴权请求

(ConnAck)鉴权结果

加载session

鉴权

图7-1 连接鉴权

设备向平台发起 connect 请求connect 中携带鉴权信息具体

参见(报文格式参考 621)

平台拿到鉴权信息进行鉴权

鉴权通过后如果 cleansession=0 平台将会加载保存的设备

的一些信息如订阅列表(621中描述)

如果 cleansession=1 设备没有保存信息在平台则不加载设

备相关信息

返回鉴权结果 ConnAck(报文格式参考 621)

72 消息发布

721 数据点上报

设备使用 publish 报文来上传数据点 报文格式如下

中移物联网有限公司 OneNET 开发文档中心

VariableHeader

Field 名称 说明 格式

Field1 TopicName=rdquo$dprdquo $dp 为系统上传数据点

的指令

2字节字串长度 + utf8

字串

Payload

Payload包含真正的数据点内容支持的格式如下

Byte 1 Bit0-5数据类型指示目前支持

Type = 1

Type = 2

Type = 3

Type = 4

Type = 5

Type = 6

Type = 7

Bit6-7 flags 根据具体类型不同意义

Type6Type7这两种需要填写时间戳的数据类型

如果填入了时间戳则须将 bit7 置 1否则置 0(即

忽略数据类型说明中的日期时间相关字段)

0 0 0 0 0 0 0 1

Byte 2 根据数据类型指示不同

Byte n

中移物联网有限公司 OneNET 开发文档中心

数据类型 1(type == 1)格式说明

数据类型 2(type == 2)格式说明

Byte 1 数据点类型值1 1JSON 格式 1 字符串 0 0 0 0 0 0 0 1

Byte 2 指示后面 json 字符串长度

固定两字节长度高位字节值为 0x00

Byte 3 固定两字节长度低位字节值为 0x41

Byte 4

ldquodatastreamsrdquo[ 可以同时传递多个数据流

ldquoidrdquordquotemperaturerdquo

ldquodatapointsrdquo[数据流可以有多个数据点

rdquoatrdquordquo2013-04-22 222222rdquo可选

rdquovaluerdquo 365用户自定义

]

ldquoidrdquordquolocationrdquo

ldquodatapointsrdquo[hellip]

hellip

]

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

Byte n

Byte 1 数据点类型指示type=2 二进制数据 0 0 0 0 0 0 1 0

Byte 2 指示后面 json 字符串长度

固定两字节长度-高位字节值为 0x00

Byte 3 固定两字节长度-低位字节值为 0x10

Byte 4

rdquods_idrdquordquoimagerdquo 创建数据流时定义的 ID(必填)

ldquoatrdquordquo2014-10-25 122323rdquo 时间(可选)

rdquodescrdquo字符串或 json 对象对该数据的描述(可选)

hellip

Byte n

Byte n+1 指示后面二进制数据长度

固定四字节长度-第 1 字节(最高)值为 0x00

Byte n+1 固定四字节长度-第 2 字节值为 0x00

Byte n+2 固定四字节长度-第 3 字节值为 0x01

Byte n+3 固定四字节长度-第 4 字节(最低)值为 0x00

Byte n+4 该域目前最大支持 3M

中移物联网有限公司 OneNET 开发文档中心

数据类型 3(type == 3)格式说明

数据类型 4(type ==4)格式说明

hellip 本例中的该域 256 字节数据

Byte n+260

Byte 1 数据点类型指示type=3 JSON 格式 2 字符串 0 0 0 0 0 0 1 1

Byte 2 指示后面字符串长度

固定两字节长度高位字节值为 0x00

Byte 3 固定两字节长度低位字节值为 0x46

Byte 4 通用格式

ldquodatastream_id1rdquordquovalue1rdquo

ldquodatastream_id2rdquordquovalue2rdquo

hellip

示例

ldquotemperaturerdquo225rdquohumidityrdquordquo952rdquo

hellip

hellip

hellip

hellip

Byte n

Byte 1 数据点类型指示type=4 JSON 格式 3 字符串 0 0 0 0 0 1 0 0

Byte 2 指示后面字符串长度

固定两字节长度高位字节值为 0x00

Byte 3 固定两字节长度低位字节值为 0x46

Byte 4 通用格式

ldquodatastream_id1rdquoldquodatetime1rdquordquovalue1rdquo

ldquodatastream_id2rdquo ldquodatetime2rdquordquovalue2rdquo

hellip

示例

ldquotemperaturerdquoldquo2015-03-22 223112rdquo225

hellip

hellip

hellip

hellip

Byte n

中移物联网有限公司 OneNET 开发文档中心

数据类型 5(type == 5)格式说明

数据类型 6(type == 6)格式说明

Byte 1 数据点类型指示type=5 自定义分隔符 0 0 0 0 0 1 0 1

Byte 2 指示后面字符串长度

固定两字节长度高位字节值为 0x00

Byte 3 固定两字节长度低位字节值为 0x41

Byte 4 消息中最前面两字节为用户自定义的域中分隔符和域间分隔符

这两个分隔符不能相同比如采用逗号作为域中分隔符分号作

为域间分隔符的格式如下

feild0feild1hellipfeildn

其中每个 field 格式支持 3种

field 格式 1 3 个子字段分别是数据流 ID时间戳数据值

通用格式

Datastream_iddatetimevalue

field 格式 2 2 个子字段分别是数据流 ID 和数据值省略时

间戳通用格式

Datastream_idvalue

field 格式 3 1 个子字段省略了数据 ID 和时间戳只传输数

据值平台将用该域(feild)所在的位置号(从 0 开始)作为数据

流 ID通用格式

value

示例

(1)temperature2015-03-22

223112225102pm258910

(2)temperature2015-03-22

223112225102pm258910

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

Byte n

Byte 1 数据类型指示type=6 带时间自定义分隔符 0 0 0 0 0 1 1 0

Byte 2 年(后两位)例如 2016 年则该字节为 16 0 0 0 1 0 0 0 0

Byte 3 月(1-12)

Byte 4 日(1-31)

Byte 5 小时(0~23)

Byte 6 分钟(0~59)

Byte 7 秒(0~59)

Byte 8 指示后面字符串长度

固定两字节长度高位字节值为 0x00

Byte 9 固定两字节长度低位字节值为 0x41

Byte 10 消息中最前面两字节为用户自定义的域中分隔符和域间分隔符

具体格式见 type=5 说明若相关域中没有时间戳则采用本类

hellip

中移物联网有限公司 OneNET 开发文档中心

数据类型 7(type == 7)格式说明(每次最多 500个数据流的浮点数)

hellip 型的默认时间戳当作数据点的时间来存储

Byte n

Byte 1 Bit0-5 数据类型指示type=7 可离散浮点数数据流

Bit6保留置 0

Bit7 时间指示位1携带 6字节时间

1 0 0 0 0 1 1 1

Byte 2 年(后两位)例如 2016 年则该字节为 16 0 0 0 1 0 0 0 0

Byte 3 月(1-12)

Byte 4 日(1-31)

Byte 5 小时(0~23)

Byte 6 分钟(0~59)

Byte7 秒(0~59)

Byte 8 数据流名称(取值范围 1-65535)

高位字节值为 0x00

Byte 9 低位字节值为 0x01

Byte10 数据流个数(取值范围 1-500)

高位字节值为 0x00

Byte11 低位字节值为 0x01

Byte 10 4 字节 float 类型低位在前高位在后

Byte 11

Byte 12

Byte 13

Byte n 数据流名称(取值范围 1-65535)

高位字节值为 0x24

Byte n+1 低位字节值为 0x37

Byte n+2 数据流个数(取值范围 1-500)

高位字节值为 0x01

Byte n+3 低位字节值为 0x00

Byte n+2 4 字节 float 类型低位在前高位在后

Byte n+4

Byte n+5

Byte n+6

中移物联网有限公司 OneNET 开发文档中心

7211 Qos0(Client-gtServer)

Device OneNet

Publish $dp(Qos0)

存储

图7-2 QoS连接图

设备发布 Qos0 消息(上报数据点)

平台收到上报数据点后保存起来

7212 Qos1(Client-gtServer)

Device OneNet

Publish $dp(Qos1)

存储

PubAck

图7-3 Qos1连接图

设备发布 Qos1 消息(上报数据点)

中移物联网有限公司 OneNET 开发文档中心

平台收到上报数据点后保存起来

平台给设备回复相应的 PubAck (报文格式参考 625)

7213 Qos2(Client-gtServer)

Device OneNet

Publish $dp(Qos2)

存储

PubRec

PubRel

PubComp

图7-4 Qos2连接图

设备发布 Qos2 消息(上报数据点)

平台收到上报数据点后保存起来

平台给设备回复相应的 PubRec报文

设备需回复平台 PubRel报文如超时不回平台则会断开相应连接

平台给设备回复 PubComp报文

注数据点上报功能不支持 Retain 特性

中移物联网有限公司 OneNET 开发文档中心

722 平台命令(下发amp回复)

7221 命令下发

平台使用 publish 报文来下发平台指令 报文格式如下

FixHeader

参考 623

VariableHeader

Field 名称 说明 格式

Field1 TopicName=rdquo$creqcmduuidrdquo $creq为系统下发

Cmd 的 指 令

cmduuid为该条指

令的 uuid

2字节字串长度 +

utf8字串

Payload

Payload包含真正的指令内容

72211 Qos0(Server-gtClient)

DeviceOneNet

Publish $creq(Qos0)

图7-5 Qos0命令下发

命令下发

平台向设备发送 topic为$creq的消息(该 topic为平台命令)

中移物联网有限公司 OneNET 开发文档中心

设备收到 topic 为$creq 的 topic 时需将其作为平台下发的指令来处

注目前命令下发以 Qos0级别进行推送

7222 命令回复

设备使用 publish 报文来回复平台指令 报文格式如下

FixHeader

参考 623

VariableHeader

Field 名称 说明 格式

Field1 TopicName=rdquo$crspcmduuidrdquo $crsp为系统处理

设备回复 cmd 的

指令cmduuid为

该条指令的 uuid

2字节字串长度 +

utf8字串

Payload

Payload包含真正回复的指令内容

72221 Qos0(Client-gtServer)

DeviceOneNet

Pulish $crsp(Qos0)

图7-6 Qos0下发命令

中移物联网有限公司 OneNET 开发文档中心

72222 Qos1(Clientlt-gt Server)

DeviceOneNet

Pulish $crsp(Qos1)

Puback

图7-7 Qos1下发命令

如果设备回复响应时以 Qos1回复则平台需要给设备回复一个 Puback 报文

72223 Qos2(Clientlt-gt Server)

DeviceOneNet

Pulish $crsp(Qos2)

PubRec

PubRel

PubComp

图7-8 Qos2下发命令

如果设备回复响应时以 Qos2回复则

1平台需回复设备一个 PubRec报文

中移物联网有限公司 OneNET 开发文档中心

2设备在收到 PubRec后需向平台回复 PubRel报文

3平台收到 PubRel 报文后向设备回复 PubComp报文

73 创建 Topic

Device OneNet

HTTP 请求

HTTP 响应

图7-9 创建Topic

设备通过发送 HTTP请求进行 topic 的创建操作

平台收到请求后创建 topic 并返回结果

请求及响应定义如下

HTTP方法 POST

URL httpapihecloudscommqtttopic

HTTP头部 api-keyxxxx-ffff-zzzzz必须 master key

URL参数

HTTP body

内容

ldquonamerdquordquoxxxxxxrdquo topic 名字只能由英文下划线反斜杠组成最长

1024个字符同一产品下 topic name 不重复

成功返回

errno 0

errorldquosuccrdquo

说明 每个产品最多 100个 topic

中移物联网有限公司 OneNET 开发文档中心

74 订阅

Device OneNet

Subscribe

Suback

更新设备订阅列表

图7-10 订阅

设备发起订阅请求(报文格式参考 629)

平台收到请求后更新 topic列表

平台给设备回复 SubAck (报文格式参考 6210)

注subscribe 的 request qos级别可以为 012

75 取消订阅

Device OneNet

UnSubscribe

UnSuback

更新设备订阅列表

图7-11取消订阅

中移物联网有限公司 OneNET 开发文档中心

设备发起取消订阅请求 (报文格式参考 6211)

平台收到请求后更新 topic 列表

平台给设备回复 UnSubAck (报文格式参考 6212)

76 推送设备 Topic

761 Publish 报文推送

Qos0设备使用 Qos 级别为 0的 Publish报文来进行推送

Device OneNet

Publish(Qos0)

Device

以Qos0 Publish到订阅设备

图7-12 Qos0推送

设备发起推送 topic请求(以 Qos0级别)

平台收到请求后将 topic以 Qos0级别推送到相关订阅设备(支持离线设

备推送)

平台不返回 PubAck或 PubRec 等报文

Qos1

设备使用 Qos级别为 1的 publish报文来推送 Topic

中移物联网有限公司 OneNET 开发文档中心

Device OneNet

Publish(Qos1)

PubAck

Device

以Qos1 Publish到订阅设备

设备回复平台 PubAck

图7-13 Qos1发布

设备发起推送 topic请求(以 Qos1级别)

平台收到请求后将 topic以 Qos1级别推送到相关订阅设备(支持离线设

备推送)

平台返回 PubAck 报文

Qos2

设备使用 Qos级别为 2的 publish报文来推送 Topic

中移物联网有限公司 OneNET 开发文档中心

Device OneNet

Publish(Qos2)

PubRec

Device

以Qos2 Publish到订阅设备

PubRec

PubRel

PubComp

PubRel

PubComp

图7-14 Qos2推送

设备发起推送 topic请求(以 Qos2级别)

平台收到请求后回复 PubRec报文

设备收到 PubRec后需回复 PubRel报文 (如超时不回复平台会断开与设

备的连接)

平台收到 PubRel 报文后回复 PubComp 给设备

平台在回复 PubComp 后会以 Qos2 级别推送到相关订阅设备(支持离线设

备推送)

设备需回复 PubRec报文 (如超时不回复平台会断开与设备的连接)

平台发送 PubRel 报文给设备

设备需回复 PubComp(发布完成)

Publish报文的格式如下

FixHeader

参考 623

中移物联网有限公司 OneNET 开发文档中心

VariableHeader

Field 名称 说明 格式

Field1 TopicName 填写设备订阅的 topic 2字节字串长度 + utf8

字串

Payload

Payload为设备自定义内容

762 HTTP 请求推送

Device OneNet

HTTP 请求

HTTP 响应

Device

Publish到订阅设备

图7-15 HTTP请求

设备以 HTTP 的方式发起推送 topic 请求

平台收到请求后将 topic推送到相关订阅设备 (目前只支持在线推送)

平台返回推送结果

请求及响应定义如下 HTTP方法 POST

URL httpapihecloudscommqtt

HTTP头部 api-keyxxxx-ffff-zzzzz必须 master key

URL参数 topic=ldquoXXXXXXrdquo必选在发送 mqtt协议的 topic 必填

HTTP body内容 用户自定义 Json 或二进制数据(小于 64K)

成功返回

errno 0

errorldquosuccrdquo

中移物联网有限公司 OneNET 开发文档中心

77 离线 Topic

推送 Topic只针对在线设备进行 topic 消息的推送离线设备不会收到订阅

的 topic 的消息离线 Topic则会将该消息推送给在线以及离线设备

1 如果设备在上线时设置了 clean session flag服务端会删除其订阅的

topic及相关的离线 topic消息

2 如果设备没有设置 clean session flag如果有与该设备相关的离线

topic消息则在鉴权成功后将离线消息推送给设备

3 遗嘱消息(will msg)只会推送给订阅了该 will topic的在线的设备离

线设备不会收到

4 离线消息的有效期默认为 2 天(暂不支持用户设定有效期)服务器只会

推送在 2天内的最近 10 条消息

78 数据点订阅

数据点订阅同一产品下的设备可以订阅其他设备的数据点订阅的 topic

格式为deviceid数据流名称即

被关注的设备在上传了该数据流名称的数据点后订阅了该 topic的其他设备都

会收到上传的数据点

1 AB设备的 deviceid分别为 92779278

2 A 设备订阅了名为92789527 的 topic(9278 为设备 B 的 id9527 为 B

设备上传的数据流名称)

3 B 设备上传了名为 9527的数据流(数据点为 11 1578hellip)

4 A 设备会收到多条(取决于设备 B 上传的数据点的个数)推送的 topic 名

为92789527 的 publish消息消息的 payload中则包含设备 B 上传的数据

注目前支持订阅的数据点的类型为 Type1~Type7(详见 721节)

中移物联网有限公司 OneNET 开发文档中心

第八章 常见问题 FAQ

用户在基于 OneNET 平台进行产品开发的过程中可能会遇到各种各样的问

题开发过程中遇到的问题一方面可以参考 OneNET 文档中心的文档或者本文

档前几个章节的内容另一方面用户可以参考本章节总结的常见问题希望这些

文档能对用户在开发过程中有一定的指导和帮助

本章将分三个小节对用户在开发产品过程中可能遇到的问题进行梳理分别

为终端设备接入 OneNET平台的常见问题API调用的常见问题和 OneNET平台

的能力

81 终端设备接入 OneNET 平台的常见问题

序号 问题描述 原因分析 解决方法

1

2

3

4

5

6

7

82 API 调用的常见问题

序号 问题描述 原因分析 解决方法

1

2

3

4

5

6

7

8

9

中移物联网有限公司 OneNET 开发文档中心

83 使用 OneNET平台遇到的常见问题

序号 问题描述 原因分析 解决方法

1

2

3

4

5

6

7

8

Page 3: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com

中移物联网有限公司 OneNET 开发文档中心

目录 第一章 文档说明 6

第二章 MQTT协议接入流程 7

21 设备接入平台流程图 8

22 应用开发流程图 9

第三章 终端设备接入 OneNET 平台流程 11

31 终端设备接入 OneNET 平台前的准备工作 11

311 硬件准备 11

312 软件准备 11

32 终端设备接入 OneNET 平台步骤 12

321 OneNET 平台创建产品及设备 12

322 终端设备软硬件初始化 15

323 终端创建设备及资源 15

324 登录 OneNET 平台 15

325 设备数据点上报 16

326 创建应用 16

33 设备批量接入 20

331 平台设备批量复制 21

332 应用平台调用新增设备 API 27

333 终端调用注册 API 27

34 设备 ID与产品序列号 29

第四章 第三方应用开发 31

41 第三方应用接入 OneNET平台 31

412 第三方应用平台接入验证程序 32

413 OneNET 平台配置第三方应用平台 32

42 OneNET平台数据推送 34

421 明文消息 34

422 密文消息 35

423 消息相关字段说明 35

424 加密算法详述 36

中移物联网有限公司 OneNET 开发文档中心

43 API接口 37

432 设备 39

433 数据流 45

434 数据点 47

435 二进制数据 52

436 触发器 52

437 命令 57

438 视频能力 60

439 APIKEY 60

4310 消息订阅 64

第五章 接入实例 67

51 MQTT-device 接入 67

511 工具下载 67

512 界面说明 68

513 使用方法 68

52 基于麒麟开发板的 MQTT接入实例 77

521 搭建开发环境 77

522 连接硬件准备 79

523 工程实例 81

524 开发工程文件 82

525 编译下载 83

第六章 MQTT协议详解 85

61 设备与平台通信协议包格式 85

62 平台支持数据包类型 86

621 CONNECT(客户端请求与服务端建立连接 client -gt server) 86

622 CONNACK (服务端确认连接建立) 90

623 PUBLISH(发布消息 client -gt server) 91

624 PUBLISH(发布消息 server -gt client) 92

625 PUBACK(收到发布消息确认) 93

626 PUBREC(发布消息收到) 94

627 PUBREL(发布消息释放) 94

628 PUBCOMP(发布消息完成) 94

629 SUBSCRIBE(订阅请求) 95

6210 SUBACK(订阅确认) 96

中移物联网有限公司 OneNET 开发文档中心

6211 UNSUBSCRIBE(取消订阅) 96

6212 UNSUBACK(取消订阅确认) 97

6213 PING(客户端发送 PING(连接保活)命令) 97

6214 PINGRSP(PING命令回复) 98

6215 DISCONNECT(断开连接) 98

第七章 设备开发流程 99

71 连接鉴权 99

72 消息发布 99

721 数据点上报 99

722 平台命令(下发amp回复) 107

73 创建 Topic 110

74 订阅 111

75 取消订阅 111

76 推送设备 Topic 112

761 Publish报文推送 112

762 HTTP请求推送 115

77 离线 Topic 116

78 数据点订阅 116

第八章 常见问题 FAQ 117

81 终端设备接入 OneNET 平台的常见问题 117

82 API调用的常见问题 117

83 使用 OneNET 平台遇到的常见问题 118

中移物联网有限公司 OneNET 开发文档中心

第一章 文档说明

编写此开发文档是为了让开发人员使用 MQTT协议快速接入 OneNET 平台形

成基于设备上传数据的物联网应用开发

通过阅读此文档开发人员可以了解 OneNET 平台接入的总体流程包括设

备使用 MQTT协议接入 OneNET平台步骤基于 OneNET平台开发上层应用

文档适用人员熟悉 MQTT 协议设备接入侧需要具备一定功底的嵌入式开

发人员北向 API调用的开发人员需要具备一定的应用软件开发能力

注意建议以公司名义先注册 OneNET 平台账号

中移物联网有限公司 OneNET 开发文档中心

第二章 MQTT 协议接入流程

MQTT (Message Queue Telemetry Transport)遥测传输协议使用 TCPIP 提

供网络连接能够对负载内容实现消息屏蔽传输开销小可以有效降低网络流

量其主要提供了订阅发布两种消息模式更为简约轻量易于使用特别适

合于受限环境(带宽低网络延迟高网络通信不稳定)的消息分发属于物联

网(Internet of Thing)的一个标准传输协议

嵌入式设备选择 MQTT 协议优点

1 轻量级的 machine-to-machine 通信协议

2 发布(publish)订阅(subscribe)模式

3 基于 TCPIP支持 QoS

4 长连接协议

5 终端数据点上报支持的数据点类型包括

o 整型(int)

o 浮点数(float)

o 字符串(string)

o JSON 格式

6 适合于低带宽不可靠连接嵌入式设备CPU 内存资源紧张

典型应用场景

MQTT 协议适用于设备和平台需要保持长连接的使用场景MQTT 特点在

于可以实现设备间的消息单播以及组播可以不依赖于其他服务(下发命令服务

推送服务等)实现让设备以应用服务器的方式对真实设备进行管理和控制

以门禁系统为例应用服务器(虚拟设备)可以订阅每个门禁(真实设备)

的统计数据的 topic对所有门禁的数据进行统计分析每个门禁也可以订阅自

身开关门的 topic应用服务器凭此可以远程控制每个门禁的状态

中移物联网有限公司 OneNET 开发文档中心

21 设备接入平台流程图

平台

TCP连接创建产品

发送连接报文

连接应答

数据应答

发送数据报文

生成连接报文

数据应答

发送数据报文

终端

发送下行命令 下发命令

解析下行命令

生成存储数据报文

生成存储数据报文

解析连接应答

解析数据应答

解析数据应答

必要流程

可选流程

存储到数据流

存储到数据流

数据源 创建应用

心跳应答

发送心跳报文生成心跳报文

解析心跳应答

平台操作

设备操作

创建设备

图2-1 设备接入OneNET平台流程图

1) 创建产品

根据产品功能需求选择接入协议重要参数产品 ID注册码产品 APIKey

(见附录一)

2) 创建设备

通过 TCP直接与平台直连的终端在进行接入之前平台上必须要先存在一

个与之一一对应的虚拟设备可以通过开发者中心或者 API 注册创建设备接口

来创建重要参数设备 ID鉴权信息

3) 建立 TCP连接

不同协议有着不同的固定 IP地址与端口

中移物联网有限公司 OneNET 开发文档中心

4) 建立设备连接

通过 1)2)中的参数(一般为产品 ID+鉴权信息+设备 ID)生成连接报文

发送连接报文建立终端与 2)中新建设备的一一对应关系

5) 发送数据报文

按照连接协议生成数据报文发送至平台

6) 创建应用

7) 使用平台下发命令接口或者 API向设备发送指令

22 应用开发流程图

应用开发主要是通过 Rsetful API 的方式实现和 OneNET 平台进行交互对

接在您完成产品创建以及硬件接入后即可根据相关所接入的硬件设备以及所

上传的数据进行相关产品的开发

OneNET 平台提供的应用开发 API分为需要终端响应和只需 OneNET 平台

响应两类下面分别用两个流程图描述这两类 API 的开发流程图 2-2为需

要终端响应的 API 调用流程其中虚线部分只有离线命令的读写下发命令才

有该流程图 2-3为只需平台响应的 API 调用流程

在应用开发平台调用 API 之前 必须与 OneNET 平台建立连接建立连

接的过程和 API 调用流程一并在图中进行了标注

中移物联网有限公司 OneNET 开发文档中心

图2-2 需要终端响应的API流程

终端设备 OneNET平台 应用开发平台

1配置应用开发地址Token等参数

2向应用开发平台发起URLampToken验证

3解析验证请求参数返回验证消息

应用平台与OneNET平台已经建立连接

4调用API指令HTTP请求

5返回平台侧执行结果错误代码和uuid

6API指令执行完毕

图2-3 不需要终端响应的API流程

终端设备 OneNET平台 应用开发平台

1配置应用开发地址Token等参数

2向应用开发平台发起URLampToken验证

3解析验证请求参数返回验证消息

应用平台与OneNET平台已经建立连接

4调用API指令HTTP请求MQTT请求

5返回平台侧执行结果错误代码和uuid

6相应指令请求返回数据 推送数据及执行结果给应用平台

7API指令执行完毕

中移物联网有限公司 OneNET 开发文档中心

第三章 终端设备接入 OneNET 平台流程

终端设备与 OneNET 平台进行数据交互需经过公网到达平台根据 OneNET

平台与网络运营商的关系终端设备智能网关OneNET平台以及第三方应用四

者的网络关系可归纳如图 3-1所示

图3-1 终端设备与服务器网络关系

图 3-1 中终端设备或智能网关设备与 OneNet 平台使用 TCPIP 建立网络连

接使用 MQTT协议进行与平台进行数据通信

31 终端设备接入 OneNET 平台前的准备工作

311 硬件准备

设备终端接入 OneNET平台的通信方式也是多种多样的比较常用的有 GPRS

无线 WIFI以太网口GPRS 方式需要 GPRS 模块和 SIM 卡的支持无线 WIFI 模

块需要 WIFI 模块支持WIFI 模块推荐选用 ESP8266 串口 WIFI 模块GPRS 模块

推荐选用 SIM900A模块

312 软件准备

设备终端接入 OneNET 平台使用 MQTT 协议使用嵌入式设备需移植 SDK

到 MCU详见麒麟发开板接入实例

中移物联网有限公司 OneNET 开发文档中心

32 终端设备接入 OneNET 平台步骤

321 OneNET 平台创建产品及设备

3211 注册用户账号

进入 OneNET官网(httpsopeniot10086cn)点击首页右上角的ldquo注

册rdquo按钮注册用户账号

OneNET 支持ldquo个人用户rdquo和ldquo企业用户rdquo两种注册方式你可以根据您的

实际情况选择注册方式

以个人用户注册为例用户需在对应选项依次填写用户名用户密码所在

地手机号码图片验证码以及手机验证码并完成注册注册页面如图 3-2所

示注册完成后回到主页点击ldquo登录rdquo即可进入 OneNET 的官方主页并由

此进入到你的ldquo开发者中心rdquo

如果客户产品后续需要进行规模化量产建议以企业的名义进行注册注册

时注意注册信息的准确填写另外个人版和企业版在功能上无差异

图3-2 用户账号注册页面

3212 创建产品和设备

在进入到你的ldquo开发者中心rdquo后点击右上角的 ldquo创建产品rdquo在弹出页面中

按照提示填写产品的基本信息进行产品创建在创建过程中请您按照提示尽

可能完整全面地填写相应内容这样更方便您后期对产品进行管理

创建产品页面如图 3-3 和图 3-4其中设备接入方式选择ldquo公开协议rdquo联网

方式选择跟据实际设备进行选择设备接入协议选择ldquoMQTTrdquo

中移物联网有限公司 OneNET 开发文档中心

产品创建完成后页面弹出ldquo创建产品成功rdquo如图 3-5所示点击ldquo立即

添加设备rdquo显示如图 3-6所示界面依次填写ldquo设备名称rdquo鉴权信息设备

名称自定义鉴权信息用于平台对终端设备鉴权每台设备具有唯一性建议设

置为产品出厂编号方便管理鉴权信息需写入设备

图3-3 创建产品页面

中移物联网有限公司 OneNET 开发文档中心

图3-4 创建产品页面

图3-5 创建产品成功页面

中移物联网有限公司 OneNET 开发文档中心

图3-6 添加设备页面

322 终端设备软硬件初始化

终端设备在上电以后需要完成设备的软硬件初始化硬件初始化包括各个

硬件模块的上电处理器的寄存器初始化工作模式初始化等等软件初始化包

括基础通信套件初始化应用接口初始化应用程序初始化等等

323 终端创建设备及资源

终端设备创建设备(device_id)配置产品 ID鉴权信息注册码连接

服务器 IP端口号等信息创建成功后与平台建立登陆连接连接成功后即可向

平台上报数据点

324 登录 OneNET平台

终端设备的基础通信套件完成初始化以及设备资源创建完成后可向

OneNET平台发送登陆请求返回登录结果如果参数错误或者登录超时平台会

返回登录失败如果验证通过平台会返回登录成功

若终端设备登录平台成功设备名称左边的圆形图标会由灰色(离线状态)

变成绿色(在线状态)如图 3-7所示

中移物联网有限公司 OneNET 开发文档中心

图3-7 平台侧设备状态显示

325 设备数据点上报

终端设备与平台成功建立连接后设备使用 publish 报文向平台上报数据点

平台收到数据点后保存到对应数据流下方便应用查阅数据点上报格式以及类型详见

721

图3-8 平台侧收到设备数据流显示

326 创建应用

用户可以利用上传的数据创建相关的应用发布直观的展示页面目前在平台应用孵化

器中提供了曲线图柱状图表盘物体位置图片和开关等应用

在产品详情页面点击ldquo应用管理rdquo进入应用管理主界面如下图

中移物联网有限公司 OneNET 开发文档中心

图3-9 应用管理模块

点击ldquo创建应用rdquo输入应用名称点击ldquo创建rdquo如下图

图3-10 新应用创建

保存成功后点击编辑按键进入应用编辑页面如下图

中移物联网有限公司 OneNET 开发文档中心

图3-11 应用编辑入口

图3-12 应用编辑界面

在应用编辑页面中使用左侧的控件进行应用编辑此例中我们选择表盘控件来显示

刚刚上传的数据点击表盘控件如下图所示

中移物联网有限公司 OneNET 开发文档中心

图3-13 表盘控件添加

在右侧的属性中选择设备以及数据源(及刚刚上传的数据流)如下图

图3-14 表盘控件数据流绑定

在确定好数据流之后可以看到表盘回显示成我们添加的数据的值其他的

刷新频率以及表盘显示样式读者可以自行更具需求加以修改

完成应用编辑之后点击右上角保存按钮退出应用编辑

在应用管理页面点击该应用即可查看编辑好的应用页面

中移物联网有限公司 OneNET 开发文档中心

图3-15 保存应用

图3-16 应用查看与分享

该应用可以通过共享ldquo发布链接rdquo的方式将该应用共享给他人

33 设备批量接入

单个设备可以通过平台的开发者中心添加设备的方式进行创建若用户有多

个设备直接与平台 TCP连接的终端通过手动添加需耗费大量时间人力OneNET

中移物联网有限公司 OneNET 开发文档中心

为大批量接入用户提供 3种批量创建设备的方案

331 平台设备批量复制

此种方式为选择某个设备作为复制的模板通过导入 EXCEL的方式进行设备

复制厂商可以在小批量测试时使用该功能

在设备列表中点击查看详情

图3-17 设备批量接入

在设备详情页面点击批量导入设备信息

中移物联网有限公司 OneNET 开发文档中心

图3-18 导入设备信息

点击批量复制

图3-19 批量复制

中移物联网有限公司 OneNET 开发文档中心

目前提供三种批量创建的方式 excel 导入的方式为主要接入方式选择

excel导入点击下载模板

图3-20 快速导入

图3-21 Excel导入

打开下载下来的 excel模板表中的 titledesctags等均为将要批量导

入的设备的数据其中的 title 和 auth_info 为必填选项title 为设备名

中移物联网有限公司 OneNET 开发文档中心

auth_info对应设备的鉴权信息

图3-22 Excel格式

填写 3个设备信息

图3-23 Excel内容

三个设备的 title和 auth_info都一样均为 20170808000012017080800002

2017080800003保存该表格点击ldquo点击上传rdquo上传保存好的 excel 文件

点击ldquo确定导入批量rdquo

中移物联网有限公司 OneNET 开发文档中心

图3-24 导入上传

图3-25 确认创建

可以看到在原设备目录下新增了 3个设备其名称分别为 2017080800001

20170808000022017080800003

中移物联网有限公司 OneNET 开发文档中心

图3-26 批量创建的设备

点击设备详情可以看到设备目录下各个设备的鉴权信息与表格中所填

写的内容一致

图3-27 设备ID及鉴权信息

至此完成了通过批量设备复制的方式完成设备批量创建的过程用户如果

要使用这个功能需要将自己终端的出厂序列号整理到这个 excel表中然后利

中移物联网有限公司 OneNET 开发文档中心

用上传表格的方式进行批量创建

332 应用平台调用新增设备 API

OneNET 提供了创建设备的 API接口

图3-28 新增设备API接口

其中的 auth_info 参数对应着设备的鉴权信息通过调用此 API 接口可以

实现在平台上新增设备的功能用户如果有自己的第三方应用平台进行设备管理

可以通过多次调用此接口的方式进行设备的批量创建在调用接口时需要确保每

次调用的 auth_info 参数对应着自己的每一个终端不同的出厂序列号

333 终端调用注册 API

API 实际是 HTTP 协议的通信协议终端也可以通过封装 HTTP 包发送注册

中移物联网有限公司 OneNET 开发文档中心

设备请求的方式调用 API

终端调用注册 API 创建设备并接入的流程如图 3-29所示

平台

TCP连接协议接入机

创建产品

发送连接报文

连接应答

数据应答

发送数据报文

生成连接报文

设备

发送下行命令 下发命令

解析下行命令

生成存储数据报文

解析连接应答

解析数据应答

必要流程

可选流程

存储到数据流 数据源 创建应用

心跳应答

发送心跳报文生成心跳报文

解析心跳应答

平台操作

设备操作

利用设备本身的sn和产品的设备注册码生成注册报文

TCP连接API服务器

发送注册报文

注册应答

解析设备ID

创建设备

设备开机

读取硬件中烧录的设备编号(sn)

图3-29 终端调用注册API接入流程

1) 创建产品

重要参数产品 ID注册码产品 APIKey(见附录一)

2) 生成并发送注册报文

每一个用户终端中都有厂商烧录的唯一出厂序列号(sn)终端上电

之后应该首先读取自己的 sn然后通过 1)中的注册码和 sn 一起组成注

册报文

注册报文格式如下例

POST httpapihecloudscomregister_deregister_code=6TM7OkhNsTjATvFx HTTP11

Host apihecloudscom

Content-Length 48

中移物联网有限公司 OneNET 开发文档中心

sn02136616511001titletestdevice0001

其中

6TM7OkhNsTjATvFx 为产品注册码

02136616511001 是本例中模拟的设备唯一编号

testdevice0001 是本例中模拟的设备名

若上传的数据格式以及参数鉴权均正确则平台会返回设备创建成功

返回设备 ID以及该设备对应的设备 api-key

HTTP11 200 OK

Date Wed 09 Aug 2017 064821 GMT

Content-Type applicationjson

Content-Length 95

Connection keep-alive

Server Apache-Coyote11

Pragma no-cache

errno0datadevice_id11142371keyq9Mw0zqiAPjTwqfyCk2mWrUi8=errorsucc

3) 在步骤 2)完成之后平台上的设备就已经成功创建了终端需要

重新 TCP连接到对应协议的服务器上完成设备连接(与设备进行映射)以

及上传数据的操作

34 设备 ID 与产品序列号

通过 OneNET构建的物联网系统中有两套比较重要的编码设备 ID与产品序列号

(SN)其中

产品序列号是由厂商指定的在厂商的产品范围内是保持唯一的在出厂前烧写到每

一个终端中通常包含在与平台通信的数据中并以条形码的方式贴在产品的包装上用

于从用户的角度区分每一个独立的终端

设备 ID是在平台创建设备时由 OneNET分配的平台范围内唯一的编号应用于第三

方平台调用 OneNET API时使用

在创建设备时OneNET平台需要用户以设备 sn为参数进行设备创建成功之后平

台会分配一个设备 ID这样 OneNET内部就有了一个 sn-设备 ID的映射关系

终端登陆使用的鉴权信息是出厂时烧写好的 sn鉴权通过之后平台可以将该终端

上传是数据放到对应的设备中

上层应用通过创建设备 API或者查询设备 API建立 sn-设备 ID映射表在需要操作

某一设备时首先可以获取的是终端的 sn号(因为对用户是可见的)通过映射表获取设

中移物联网有限公司 OneNET 开发文档中心

备 ID然后再通过 API访问 OneNET平台上的对应设备

两套编码在物联网系统中的应用位置如下图所示

物联网应用

OneNET

终端

(烧写sn)

HTTP API 以设备ID为参数进行API访问

接入协议以sn为鉴权参数进行设备连接

设备

设备名

设备ID

设备sn

设备标签

sn 设备ID

snmdash设备ID映射表

中移物联网有限公司 OneNET 开发文档中心

第四章 第三方应用开发

第三方应用与 OneNET 平台的业务逻辑关系如图 4-1 所示第三方应用与

OneNET平台之间通过 HTTPS请求应答的方式实现数据交互OneNET 平台为第三

方应用提供封装好的 API 接口应用平台通过调用这些 API 接口完成对 OneNET

平台的读写执行以及设备管理请求然后 OneNET 平台会将相应的指令请求发送

到终端设备OneNET 平台收到终端设备响应的数据及设备信息后会将数据及

设备信息推送到应用平台完成应答

下面将分别介绍第三方应用接入 OneNET 平台的步骤OneNET平台提供的数

据推送功能以及 OneNET 平台为第三方应用封装好的 API接口

图4-1 第三方应用与OneNET平台的逻辑关系

41 第三方应用接入 OneNET 平台

第三方应用与 OneNET平台实现数据交互的前提是已经建立连接第三方应

用接入 OneNET平台的开发流程如图 4-2所示包括三个步骤

(1) 在 OneNET 平台创建了设备该设备有对应的真实设备且能正常上报

数据

(2) 用户已经开发并部署了 OneNET平台验证接入的程序

(3) 在 OneNET 平台正确配置了第三方应用数据接收的地址(URL)

Token以及其他参数

中移物联网有限公司 OneNET 开发文档中心

在确保上述第(1)步已经实现的基础上下面将分别讲述第(2)步和第

(3)步的实现过程

图4-2 数据推送的开发流程

412 第三方应用平台接入验证程序

第三方应用平台接入验证程序工作流程如下所述当 OneNET 平台完成对第

三方开发平台的配置后会向第三方开发平台发起 URLampToken验证接入验证程

序对平台发送的验证参数进行验证验证通过后第三方开发平台会向 OneNET

平台返回验证消息当 OneNET 平台收到验证消息后说明第三方开发平台与

OneNET平台已建立连接

目前 OneNET平台为第三方应用平台提供接入验证程序的 SDK有 Javaphp

Nodejs和 C四个版本

SDK 下载地址httpsopeniot10086cndocart432html118 -ldquo数

据推送rdquo

413 OneNET 平台配置第三方应用平台

在 OneNET平台对第三方应用平台的配置界面如图 4-3所示

URL第三方开发平台的地址

Token可以自定义用于第三方开发平台接入平台握手验证

消息加解密方式有明文模式和安全模式当启用安全模式后平台端需要

用户自定义 AESKey 或者由平台随机生成在应用程序中使用该 AESKey 解密消

中移物联网有限公司 OneNET 开发文档中心

推送时间限制(秒)和推送数据限制(个)设置ldquo推送时间限制rdquoldquo推送数

据限制rdquo可以实现批量推送数据减少服务器压力当满足ldquo推送时间限制rdquo和

ldquo推送数据限制rdquo要求后OneNET 将给第三方推送数据如果没有设置ldquo推送

时间限制rdquo和ldquo推送数据限制rdquo将默认数据实时推送

图4-3 第三方开发平台的配置界面

当用户成功在 OneNET 平台配置了第三方开发平台服务器地址后点击ldquo提

交rdquo按钮后OneNET 平台会向第三方应用平台发起 URLampToken 验证请求验证

通过且收到第三方返回的验证消息后则第三方应用平台与 OneNET 平台已建立

连接之后OneNET 平台在收到设备数据时会将设备数据推送到已配置的第三

方应用平台

用户数据接收服务程序接收到 OneNET平台发送的 ldquoURLampTokenrdquo验证请求

请求的格式形如httpipporttestmsg=xxxampnonce=xxxampsignature=xxx

蓝色字体部分为用户在 OneNET平台配置的 URL常规的验证流程如下

(1)在请求中获取参数ldquononcerdquoldquomsgrdquo的值将ldquotokenrdquo(此为页面

配置参数 token的值)ldquononcerdquoldquomsgrdquo的值计算 MD5(token+nonce+msg)

加密值并且编码为 Base64字符串值

中移物联网有限公司 OneNET 开发文档中心

(2)将上一步中 Base64字符串值通过 URL Decode 计算后的值与请求参数

ldquosignaturerdquo的值进行对比如果相等则表示 token验证成功

(3)如果 token 验证成功向 OneNET 平台返回ldquomsgrdquo参数值否则返回

其他值

说明如果用户不想验证 Token 的有效性可以忽略以上步骤并直接向

OneNET平台返回ldquomsgrdquo参数值

42 OneNET 平台数据推送

平台以 HTTPS POST 请求形式向第三方应用平台注册地址推送数据推送数

据相关信息以 JSON 串的形式置于 HTTPS请求中的 body部分

第三方应用平台在接收数据时会接收到数据的明文消息或者密文消息

明文消息中以ldquotyperdquo的数值区分不同的消息而密文消息与明文消息的区别

是ldquomsgrdquo部分经过了加密处理下面将分别对明文消息密文消息以及消息相

关字段和密文的加密算法进行说明

421 明文消息

明文消息有两种消息类型分别为数据点消息和设备上下线消息而数据点

消息又分为单条数据点消息和数据点消息批量形式数据点消息批量形式中的不

同数据点是以不同时间戳区分的

(1)数据点消息(type=1)

msg

type 1

dev_id 2016617

ds_id datastream_id

at 1466133706841

value 42

msg_signature message signature

nonce abcdefgh

(2)数据点消息批量形式(type=1)

msg [

type 1

dev_id 2016617

ds_id datastream_id

中移物联网有限公司 OneNET 开发文档中心

at 1466133706841

value 42

type 1

dev_id 2016617

ds_id datastream_id

at 1466133706842

value43

]

msg_signature message signature

nonce abcdefgh

(3)设备上下线消息(type=2)

msg

type 2

dev_id 2016617

status 0

login_type 1

at 1466133706841

msg_signature message signature

nonce abcdefgh

422 密文消息

密文消息中的ldquoenc_msgrdquo是由明文消息中的ldquomsgrdquo采用 AES 加密算法而

enc_msgxxxx

msg_signature

message signature

nonceabcdefgh

423 消息相关字段说明

表4-1 消息相关字段说明

字段 字段说明

type 标识数据类型当前版本范围[15]

dev_id 设备 ID

ds_id 公 开 协 议 中 的 数 据 流 ID 其 格 式 为

objectID_instanceID_resourceID

at 平台时间戳单位 ms

value 具体数据部分为设备上传至平台或触发的相关

数据

中移物联网有限公司 OneNET 开发文档中心

status 设备上下线标识

0-下线 1-上线

login_type

设备登陆协议类型

1EDP 2nwx 3JTEXT 5JT808 6

MODBUS 7MQTT 8gr2010NB-IoT

cmd_type

命令响应的类型

1设备收到 cmd的 ACK 响应信息 2设备收到

cmd的 Confirm响应信息

cmd_id 命令 ID

msg_signatur

e 消息摘要

nonce 用于计算消息摘要的随机串

enc_msg 加密密文消息体对明文 JSON串(msg字段)的

加密

424 加密算法详述

平台基于 AES算法提供加解密技术具体阐述如下

EncodingAESKey 即消息加解密 Key 的 BASE64编码形式长度固定为 43

个字符从 a-zA-Z0-9共 62个字符中选取由服务开启时填写后

也可申请修改

AES密钥计算为 AESKey=Base64_Decode(EncodingAESKey + ldquo=rdquo)

EncodingAESKey 尾部填充一个字符的ldquo=rdquo 用 Base64_Decode 生成 32

个字节的 AESKey

AES采用 CBC 模式秘钥长度为 32 个字节(256位)数据采用

PKCS7填充 初始化 iv向量取秘钥前 16字节 PKCS7K为秘钥字

节数(采用 32)buf为待加密的内容N为其字节数Buf 需要被填

充为 K的整数倍在 buf的尾部填充(K-NK)个字节每个字节的内容

是(K- NK)具体详见toolsietforghtmlrfc2315

BASE64采用 MIME格式字符包括大小写字母各 26个加上 10个数

字和加号ldquo+rdquo斜杠ldquordquo一共 64个字符等号ldquo=rdquo用作后缀填

出于安全考虑平台网站提供了修改 EncodingAESKey的功能(在

EncodingAESKey 可能泄漏时进行修改对应上第三方平台申请时填写

的接收消息的加密对称密钥)所以建议保存当前的和上一次的

中移物联网有限公司 OneNET 开发文档中心

EncodingAESKey若当前 EncodingAESKey 生成的 AESKey解密失败则

尝试用上一次的 AESKey的解密

平台的加密消息部分为 enc_msg= Base64_Encode( AES_Encrypt

[random(16B)+msg_len(4B)+msg] )即以 16字节随机字节串拼接 4字

节表示消息体长度的字节串(此处 4 字节长度表示为网络字节序)再加

上消息本身的字节串作为 AES加密的明文再以 AES算法对明文进行加

密生成密文最后对密文进行 BASE64 的编码操作生成加密消息体

对加密消息体的解密流程为1)首先进行加密消息体的 BASE64 解码操作

aes_msg=Base64_Decode(enc_msg)2)对获取的解码内容以 AES 算法进行解密

操作获取明文部分plain_msg=AES_Decrypt(aes_msg)解密中使用的秘钥由

EncodingAESKey 计算得来使用的初始化 iv 向量为计算出的 aes 秘钥的前 16

字节3)去掉 plain_msg 的前 16 字节再以前 4 字节取出消息体长度根据消

息体长度获取真实的消息部分(推荐以消息体长度获取真实消息以兼容

plain_msg 未来可能出现的结构变更)表示加密传输的数据后两字段与明文

传输一致

43 API 接口

第三方开发平台应用层通过 Rsetful API 的方式和 OneNET平台进行交互对

接实现命令的下发数据的读写以及相关业务的交互

针对 MQTT 协议目前主要开发了以下 API 用来实现第三方开发平台向

OneNET平台请求读写执行以及设备管理请求具体见下表 4-2下面分别对每一

种 API进行说明

表4-2 API功能说明

API 类别 操作对象 API名称

需要终端响应 只需平台响应

设备

注册

更新设备注册属性

新增

更新

精确查询单个设备

中移物联网有限公司 OneNET 开发文档中心

模糊查询设备

批量查询设备状态

删除

数据流

新增

更新

查询单个数据流

查询多个数据流

删除

数据点

新增

查询

二进制数

新增

查询

触发器

新增

更新

查询单个触发器

模糊查询触发器

删除

触发数据内容

命令

发送命令

查询命令状态

查询命令相应

查询设备历史命令

视频能力 获取播放地址

APIKEY

新增

更新

查看

删除

消息订阅

按 Topic发送命令

查询订阅指定 Topic设备的列表

查询设备订阅的 Topic列表

删除产品的 Topic

查询产品的 Topic

中移物联网有限公司 OneNET 开发文档中心

432 设备

4321 注册

表4-3 设备注册

HTTP方法 POST

URL apihecloudscomregister_de

URL参数 register_code=6TM1OkhNsTjATvFx 设备注册码(必填)

HTTP内容

(示例)

sn 2015031401421 设备唯一标识 string类型最长 512字符

mac C89346DA4373 设备唯一 mac标识最长 32字符

title myedpdevice 设备名(可选) 最长 32个字符

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

keyQ1VdWoEvdkCye=d1=HcCSP6LvCw= 新设备 apikey

device_id 325018 设备 ID

说明

1 响应消息中 errno 表示错误码error 表示错误原因如果创建设备失

败则没有 data字段

2 snmac一定要必填其中一个而且只可以传一个用于鉴权就是设备

新增中的 auth_info

3 此接口根据产品设置的不同默认 allow_dup=true可以生成新设备及

key或获取原有设备及 key见下表

表4-4 对应表

产品允许重复 sn 在产品中已存在 sn 在产品中不存在

allow_dup=true 是 sn 对应的设备 id 和 key 新的设备 id 和 key

allow_dup=false 否 报错 新的设备 id 和 key

中移物联网有限公司 OneNET 开发文档中心

此接口返回的新设备默认设备名均为auto_register均为私有设

备设备协议与产品协议相同

4322 更新设备注册属性

表4-5 更新设备注册属性

HTTP方法 PUT

URL apihecloudscomregister_attr

HTTP头部 api-key xxxxddddsssaaa 必须为 masterkey

HTTP内容

(示例)

allow_dup true|false是否允许重复提交相同的设备 sn 默认 true

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

默认 allow_dup 为 true主要用于设备注册码创建设备属性限制

4323 新增

表4-6 新增设备注册属性

HTTP方法 POST

URL apihecloudscomdevices

HTTP头部 api-key xxxxddddsssaaa 必须为 masterkey

HTTP内容

(示例)

title mydevice 设备名

desc some description 设备描述(可选)

tags [chinamobile] 设备标签(可选可为一个或多个)

protocolMQTT 选择一种接入协议(可选默认为 HTTP)

location lon 106 lat 29 ele 370设备位置纬度

经度 高度(可选)

private true| false 设备私密性(可选默认为 ture)

auth_info 201503041a5829151 MQTT设备设备唯一编号

other version 100 manu china mobile 其他信息(可

选JSON格式可自定义)

HTTP响应响

应消息内容

(实例)

errno 0

error succ

data

中移物联网有限公司 OneNET 开发文档中心

device_id233444 平台分配的设备 ID

4324 更新

表4-7 更新

HTTP方法 PUT

URL apihecloudscomdevicesdevice_id

HTTP头部 api-key xxxxddddsssaaa masterkey或设备 apikey

HTTP内容

(示例)

title mydevice 设备名(可选)

desc some description 设备描述(可选)

tags [chinamobile] 设备标签(可选)

protocolMQTT 选择一种接入协议(可选)

location lon106 lat 29 ele 370设备位置经度

纬度 高度(可选)

private true| false 设备私密性(可选)

auth_info201503041a5829151 MQTT设备设备唯一编号(可选)

other version 100 manufacturer china mobile 其

他信息(可选)

HTTP响应响

应消息内容

(示例)

errno 0

error succ

中移物联网有限公司 OneNET 开发文档中心

4325 精确查询单个设备

表4-8 精确查询单个设备

HTTP方法 GET

URL apihecloudscomdevicesdevice_id

HTTP头部 api-key xxxxddddsssaaa masterkey 或设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

iddevice_id

tags [chinamobile]

onlinetrue|false

protocolMQTT

titlemy device1

descsome description

create_time2015-09-16 102222

privatetrue|false

locationele370lat17609lon17703

auth_infohellip

otherversion100manufacturerchina mobile

keys[titledevice-auto-keykey2JO3B12O1]

数据流

datastreams[

create_time 2014-10-23 202222

iddatastream_id1

unitcelsius

unit_symbolC

uuid 231a5aa9-9de4-5f2e-9e0f-015181c98429

]

4326 模糊查询设备

表4-9 模糊查询设备

HTTP方法 GET

URL apihecloudscomdevices

中移物联网有限公司 OneNET 开发文档中心

URL 参数

key_words=my 匹配关键字(可选从 id和 title字段中左匹配)

auth_info=203x1 鉴权信息(可选对应注册时的 sn参数唯一设

备编号)

tag=mobile 标签(可选)

online=true| false 在线状态(可选)

private=true| false 私密性(可选)

page=1 指定页码最大页数为 10000(可选)

per_page=30 指定每页输出设备个数默认 30最多 100(可选)

device_id=235122 指定设备 ID多个用逗号分隔最多 100个(可

选)

begin=2016-06-20 起始时间包括当天(可选)

end=2016-06-20 结束时间包括当天(可选)

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

total_count1

per_page30

page1

devices

[

id3497307

titlemy device1

desc device desc

privatetrue

protocolMQTT

onlinefalse

locationlon10655231191544001lat29535451246673

create_time2013-02-11 122233

auth_infoSYSz=8QY3r7aTQ48UKfqPnB=PybYRo=

]

4327 批量查询设备最新数据

表4-10 批量查询设备最新数据

HTTP方法 GET

中移物联网有限公司 OneNET 开发文档中心

URL apihecloudscomdevicesdatapoints

URL参数 devIds=1221122331123 设备 id用逗号隔开限制 1000 个设备

HTTP头部 api-key xxxxddddsssaaa masterkey 或设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

error ldquosuccrdquo

data

devices [

id 12323 设备 id

title daf设备名

datastreams

[

id temperature数据流名称

at 2017-02-12 102222数据流更新时间

value 12数据流最新数据

hellip

helliphellip

]

hellip

hellip

]

4328 删除

表4-11 删除设备

HTTP方法 DELETE

URL apihecloudscomdevicesdevice_id

HTTP头部 api-key xxxxddddsssaaa 可为设备级别的 Key

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

中移物联网有限公司 OneNET 开发文档中心

说明删除设备会删除该设备下所有数据流和数据点删除设备动作是异步

的系统会在后续逐步删除该设备下的数据流和数据点

433 数据流

4331 新增

表4-12 新增数据流

HTTP方法 POST

URL apihecloudscomdevicesdevice_iddatastreams

HTTP头部 api-key xxxxddddsssaaa masterkey 或设备 apikey

HTTP内容

(示例)

idtemperature 数据流名称 示例温度

tags[Tag1Tag2] 数据流标签(可选可以为一个或多个)

unitcelsius 单位(可选)

unit_symbolC 单位符号(可选)

HTTP响应响

应消息内容

(示例)

errno 0

data

ds_uuid 9e6bcac9-2c6f-59d5-adae-3955df2e7bce平台分配

数据流 UUID

error succ

4332 更新

表4-13 更新数据流属性

HTTP方法 PUT

URL apihecloudscomdevicesdevice_iddatastreamsdatastream_id

示例apihecloudscomdevices421240datastreamstemperature

HTTP头部 api-key xxxxddddsssaaa masterkey 或设备 apikey

HTTP内容

(示例)

tags[Tag1Tag2] 数据流标签(可选)

unitcelsius 单位(可选)

unit_symbolC 单位符号(可选)

HTTP响应响

应消息内容

(示例)

errno 0

error succ

中移物联网有限公司 OneNET 开发文档中心

4333 查询单个数据流

表4-14 查询单个数据流

HTTP方法 GET

URL apihecloudscomdevicesdevice_iddatastreams

URL参数 datastreams_ids = 查看的 datastream的 id

HTTP头部 api-key xxxxddddsssaaa masterkey 或该设备的设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

data [

update_at 2018-06-29 112938 数据流最后更新时

id 湿度 数据流名称

create_time 2018-06-28 170548数据流创建时间

current_value 53845013最新数据点

]

error succ

4334 查询多个数据流

表4-15 查询多个数据流

HTTP方法 GET

URL apihecloudscomdevicesdevice_iddatastreams

URL 参数

datastream_ids= 查看的 datastream的 id多个 id之间用英文逗号

分开(参数缺省时为查询所有数据流)

示例

apionenetcomdevices1234datastreamsdatastream_ids=tempgps

表示查看 temp和 gps两个数据流的信息

HTTP头部 api-key xxxxddddsssaaa masterkey 或者 该设备的设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data 数据流信息

[

idtemperature 数据流名称设备范围内唯一

tags[Tag1Tag2] 数据流标签

unitcelsius 单位

unit_symbolC单位符号

create_timexxxx-xx-xx 102222 创建时间

中移物联网有限公司 OneNET 开发文档中心

current_valuehellip该数据流下数据点最新值

update_atxx-xx-xx该数据流下数据点最新上传时间

]

[

idhumi 数据流名称设备范围内唯一

tags[Tag1Tag2]

unit_symbol

create_timexxxx-xx-xx 102222

current_valuehellip

update_atxx-xx-xx

]

[]

4335 删除

表4-16 删除数据流

HTTP方法 DELETE

URL apihecloudscomdevicesdevice_iddatastreamsdatastream_id

URL参数 无

HTTP头部 api-key xxxxddddsssaaa masterkey 或者设备 key

HTTP响应响

应消息内容

(示例)

errno 0

error succ

434 数据点

4341 新增

中移物联网有限公司 OneNET 开发文档中心

表4-17 新增数据点

HTTP方法 POST

URL apihecloudscomdevicesdevice_iddatapoints

URL参数 type=3 上传数据类型(可选默认为完整 JSON型见 HTTP内容示

例)

HTTP头部 api-key xxxxddddsssaaa masterkey 或者 设备 apikey

HTTP内容

(示例)

datastreams

[

id temperature 数据流名称或数据流模板名称

datapoints [

at 2013-04-22T003543 上传数据点时间可选如

果为空则设备云会取当前时间如果存在其格式必须为 YYYY-MM-

DDThhmmss的形式(例如2015-03-22T223112)

value 42 上传数据点值

at 2013-04-22T005543

value 84 上传数据点值

]

id key 数据流名称或数据流模板名称

datapoints [

at 2013-04-22T003543上传数据点时间可选

value hellip上传数据点值

at 2013-04-22T003543

value hellip上传数据点值

]

hellip

]

中移物联网有限公司 OneNET 开发文档中心

HTTP 响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

1 可以一次性向设备云上传多个数据流每个数据流中可以包括多个数据

点示例程序表示向设备云上数据流 temperature 和数据流 key上传数据其中

temperature数据流有两个数据点key数据流也有两个数据点

2 如果某个数据流不存在则在增加数据点时设备云会自动创建一个新

的数据流注意新数据流的 datastream id 不可为空

3 数据点表示在某个时刻该数据流的值其 at表示时间为可选字段如

果为空则设备云会取当前时间如果存在其格式必须为YYYY-MM-DDThhmmss

的形式(例如2015-03-22T223112)

4 数据点中的 value表示具体的值其值为 JSON对象可以为整型浮点

型字符串多种类型如果 value部分用双引号括起来则其在设备云存储为字

符串如果不用双引号括起来则其表示数值字符编码现在只支持 UTF-8

5 数据点对应的时间是数据点的标识的一部分相同时间的两个数据点

设备云会同时对这两个相同时间的数据点进行保存不会出现覆盖另一个数据点

的情况一般如果 at 部分取空设备云会取系统时间精度为毫秒如果在一

条命令中某一个数据流包含多个数据点都没有 at 字段设备云将会对所有数据

点进行保存

6 新增数据点支持如下简写方式在请求的 URL中增加 type字段指示所

使用的格式类型目前 type支持 345三种情况

URLapihecloudscomdevices2214570datapointstype=3

示例temperature225humidity952

表示在数据流 temperature中增加一个数据点 225在 humidity 中增加一

个数据点 952

URLapihecloudscomdevices2214570datapointstype=4

示例temperature2015-03-22T223112225

表示在数据流 temperature中加一个数据点在 2015年 3月 22 日 22点 31

中移物联网有限公司 OneNET 开发文档中心

分 12秒的值为 225

URLapihecloudscomdevices2214570datapointstype=5

示例temperature2015-03-22T223112225pm2589

表示在数据流 temperature中加一个数据点即 2015年 3月 22 日 22点 31

分 12秒的值为 225在数据流 pm25中添加一个数据点即当前时间的值为 89

4342 查询

表4-18 查询数据点

HTTP方法 GET

URL apihecloudscomdevicesdevice_iddatapoints

URL 参数

datastream_id=abc 查询的数据流多个数据流之间用逗号分隔

(可选)

start=2015-01-10T080035 提取数据点的开始时间(可选)

end=2015-01-10T080035 提取数据点的结束时间(可选)

duration=3600 查询时间区间(可选单位为秒)

start+duration按时间顺序返回从 start开始一段时间内的数据点

end+duration按时间倒序返回从 end回溯一段时间内的数据点

limit=100 限定本次请求最多返回的数据点数0ltnlt=6000(可选

默认 1440)

cursor= 指定本次请求继续从 cursor位置开始提取数据(可选)

sort=DESC | ASC 值为 DESC|ASC时间排序方式DESC倒序ASC升

序默认升序

ltnlt=6000(可选默认 1440)

HTTP头部 api-key xxxxddddsssaaa masterkey 或者 该设备的设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

cursor70921_3771908_1472355096

datastreams[

idtemperature数据流名称或数据流模板名称

datapoints[

at xxxx-xx-xx 102222value42数据点上传时间和

at xxxx-xx-xx 102222value84

]

中移物联网有限公司 OneNET 开发文档中心

idkey 数据流名称或数据流模板名称

datapoints[

at xxxx-xx-xx 102222valuehellip

atxxxx-xx-xx 102222valuehellip

]

hellip

]

1 若不携带任何参数平台返回本设备所存在的所有数据流中的最新数据

(这一种情况下查询时出现时延较大的性能问题建议在 URL 参数中加上

newadd参数并将其值赋为 true如 newadd=true)

2 若不携带数据流 id参数携带 limit 参数时会返回该设备每个数据流

最多 limit 条数据

3 若要查看某一条数据流数据需在上述 URL中增加参数 datastream_id

4

apihecloudscomdevices564280datapointsdatastream_id=tempamplimit

=10会返回数据流temp中最近的 10个数据点

5 要查看某一条数据流在某个时间范围内的数据可以在增加 start和 end

参数

示例

apihecloudscomdevices564280datapointsdatastream_id=temper

atureampstart=2013-05-12T171233ampend=2013-06-12T172233 表示查询本设

备对应的数据流在 2013 年 5 月 12 日 17 点 12 分 33 秒到 17 点 22 分 33 秒的数

据点注意如果 start 参数存在end参数不存在表示取 start后的所有数据

如果 start 不存在end 存在设备云会忽略 end参数注意日期时间格式格

式必须为示例中的格式YYYY-MM-DDThhmmss例如2013-05-12T171233

日期和时间之间用大写字母 T 分隔start 和 end 之间的时间间隔最大为 1 年

超过一年会忽略

如果指定了 start 参数则可能返回的数据点的数目会很多此时默认会返

回最多 100 个数据点可以使用 limit 参数设定返回多少个数据点最大为

6000个数据点当实际的数据点数目多于 limit 限定的数目时返回的 json串

中移物联网有限公司 OneNET 开发文档中心

中会有一个 cursor 字段下一次请求的命令行中可以携带此 cursor 字段表示接

着遍历本数据流此 cursor字段标识上次取出数据点后下一个数据点的位置

435 二进制数据

4351 新增

将二进制数据将作为数据点保存到设备下的某个数据流中设备云返回该二

进制数据的索引号

表4-19 新增二进制数据

HTTP方法 POST

URL apihecloudscombindata

URL参数 device_id=421590 数据所属设备(必选)

datastream_id=bin 该数据所属已经存在的数据流(必选)

HTTP头部 api-key xxxxddddsssaaa masterkey 或者该设备的设备 key

HTTP 内 容

(示例)

普通二进制数据文件图像等

(最大限制为 800上传时间间隔需大于 1ms)

HTTP响应响

应消息内容

(示例)

errno 0

error succ

data

index3491506_1475204886914_bin 二进制数据索引号

4352 查询

表4-20 查询二进制数据

HTTP方法 GET

URL apihecloudscombindataindex

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

普通二进制数据文件图像等二进制形式数据

436 触发器

4361 新增

表4-21 新增触发器

HTTP方法 POST

中移物联网有限公司 OneNET 开发文档中心

URL apihecloudscomtriggers

HTTP头部 api-key xxxxddddsssaaa 必须为 masterkey

HTTP内容

(示例)

titlewen du jian kong 设备名(可选)

ds_idgps 数据流名称(id)(可选)

dev_ids[10272345615523] 设备 ID(可选)

ds_uuids[ 数据流 uuid(可选)

9ad09uac-7446-512f-b07c-90jdnzj8120ad

4599436e-7146-5349-b07c-79fa0919cs62

]

urlxxbbcom

typegt | gt= | lt | lt= | == | inout | in | out |change | frozen |

live

threshold100 阙值根据 type不同见以下说明

1) type 为gt|gt=|lt|lt=|==时threshold必须为数值

2) type为 inout时threshold 设置为lolmt40 uplmt52 表示

数据流的值首次进入或离开闭区间[4052]时触发

3) type为 change时threshold 参数不用传递当上传的值有改变时触发

告警

4) type为 frozen时threshold 为数值指定距离最后一次数据上报多少

秒内未上报数据触发告警同时被监控对象进入 frozen状态

5) type 为 live 时threshold 为数值指定距离最后一次数据上报多少秒

后上报数据触发告警

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

tirgger_id233444 触发器 ID

说明

1触发器的含义是当指定范围内的数据点满足触发条件的要求时会向

url参数指定的地址发送 post请求

2触发器有三种工作触发模式

1)在请求参数中单独指定了 ds_id不包括其他参数那么当前项目下

中移物联网有限公司 OneNET 开发文档中心

所有设备的数据流中数据流名称符合 ds_id 的数据都会进入触发判断逻辑

2)在请求参数中单独指定了 ds_uuids 数组那么只有这些指定的数据

流会进入触发判断逻辑

3)在请求参数中指定了 ds_id 和 dev_ids那么只有这些指定的设备的

数据流会进入触发判断逻辑

4362 更新

表4-22 更新触发器属性

HTTP方法 PUT

URL apihecloudscomtriggerstirgger_id

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP内容

(示例)

titlewen du jian kong

ds_uuids[

9ad09uac-7446-512f-b07c-90jdnzj8120ad

4599436e-7146-5349-b07c-79fa0919cs62

]

urlxxbbcom

typegt | gt= | lt | lt= | == | inout | in | out | exp | change |

frozen | live

threshold100

注若要修改 type需要对应设置 threshold

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

4363 查询单个触发器

表4-23 查询单个触发器

HTTP方法 GET

URL apihecloudscomtriggerstirgger_id

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

idtrigger_id1

中移物联网有限公司 OneNET 开发文档中心

titlewen du jian kong

ds_uuids[

datastream1_uuidrdquo

datastream2_uuidrdquo

datastream3_uuidrdquo

]

urlxxbbcom

typegt|gt=|lt|lt=|==|in|out|exp|change|frozen|live

threshold100

invalidtrue 触发器是否已失效

create_timexx-xx-xx 102222

4364 模糊查询触发器

表4-24 模糊查询触发器

HTTP方法 GET

URL apihecloudscomtriggers

URL 参数

title=name 指定触发器名称

page=1 指定页码可选

per_page=10 指定每页输出个数可选默认 10最多 100

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

total_count600

per_page30

page1

triggers[

idtrigger_id1

titlewen du jian kong

ds_uuids

[datastream1_uuidrdquo datastream2_uuidrdquo]

urlxxbbcom

typegt|gt=|lt|lt=|==|in|out|exp|change|frozen|live

threshold100

invalidtrue 触发器是否已失效

create_timeXXXXXXXX

中移物联网有限公司 OneNET 开发文档中心

]

说明触发器失效是指触发器所依赖的数据流或者设备被删除了此时触发

器永远不会有效触发事件

4365 删除

表4-25 删除触发器

HTTP方法 DELETE

URL apihecloudscomtriggerstirgger_id

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno 0

error succ

4366 触发数据内容

触发数据是指当 OneNET 设备云判断某个触发器的触发条件满足时会通过

POST方式向外抛出的 URL请求在 HTTP的 POST消息体中会携带如下格式的 JSON

字符串

表4-26 触发器内容

数据内容

(示例)

trigger

id1

threshold90

typegt

current_data[

dev_id2656

ds_idgps

ds_uuidFWEF-ZFW-ZFW-ZFWW

at2009-09-07T121602001403Z

value100

dev_id2656

ds_idtemper

中移物联网有限公司 OneNET 开发文档中心

ds_uuidFEWEF-ZFWFWW-WFWW-FWEFFWW

at2009-09-07T121602001403Z

value882

]

437 命令

命令是指应用发送命令数据给 OneNET设备云再由 OneNET设备云转发给终

端设备终端设备收到命令后可以向设备云反馈响应的一种工作机制命令下发

后应用可以通过 API查询命令状态和提取命令的响应数据

命令的执行步骤如下

1应用通过 API 向设备云发送命令数据

2设备云生成该命令的 uuid作为该命令的唯一标识并向应用返回同时向

终端设备转发命令数据

3 终端设备收到命令数据后执行命令数据可以生成响应也可以不响应

4设备云跟踪记录命令的响应如果设备有响应就关联命令 uuid和响应

结果

5应用通过 API 向设备云提取命令执行结果(API 请求中携带命令 uuid 标

识)

特别说明

命令下发到终端设备后如果终端设备 10 秒内未收到响应则此命令的状

态将被设置为超时应用通过 API 查询命令状态时会反馈超时超过 10 秒后

收到的响应会被丢弃

终端设备针对同一条命令回复多条命令响应只有在未超时时间内收到的最

后一条是有效响应前面的响应包将会被覆盖因此终端设备应该对每个命令只

有一个响应包

4371 发送命令

表4-27 发送命令

HTTP方法 POST

URL apihecloudscomcmds

URL 参数 device_id=415120 接收该数据的设备 ID(必选)

中移物联网有限公司 OneNET 开发文档中心

qos=0 | 1 是否需要响应默认为 0

0不需要响应即最多发送一次不关心设备是否响应

1需要响应如果设备收到命令后没有响应则会在下一次设备登陆

时若命令在有效期内(有效期定义参见 timeout参数)则会继续发送

对响应时间无限制多次响应以最后一次为准

本参数仅当 type=0时有效

timeout=300 命令有效时间默认 0

0在线命令若设备在线下发给设备若设备离线直接丢弃

gt0 离线命令若设备在线下发给设备若设备离线在当前时间

加 timeout时间内为有效期有效期内若设备上线则下发给设备单

位秒有效围0~2678400

本参数仅当 type=0时有效

type=0 | 1 默认 00发送 CMD_REQ包1发送 PUSH_DATA包

HTTP头部 api-key xxxxddddsssaaa masterkey或者设备 apikey

HTTP内容 用户自定义数据jsonstring二进制数据(小于 64K)

HTTP响应响

应消息内容

(示例)

errno 0

error succ

data

cmd_uuid2302-312-FWs 命令 id

4372 查询命令状态

表4-28 查询命令状态

HTTP方法 GET

URL apihecloudscomcmdscmd_uuid

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno 0

error succ

data

status1

0设备不在线|Device not online

1命令已创建| Command Created

2命令已发往设备| Command Sent

3命令发往设备失败| Send Command Failed

4设备正常响应| Command Response Received

5命令执行超时| Command Response Timeout

6设备响应消息过长 | Command Response Too Large

descldquosendingrdquo

中移物联网有限公司 OneNET 开发文档中心

4373 查询命令响应

表4-29 查询命令响应

HTTP方法 GET

URL apihecloudscomcmdscmd_uuidresp

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP 响应响

应消息内容

用户设备返回的响应内容

4374 查询设备历史命令

表4-30 查询设备历史命令

HTTP方法 GET

URL apihecloudscomcmdshistoryltdevice_idgtltdevice_idgt

URL 参数

start=2015-01-10T080035 查询的开始时间(可选)

end=2015-01-10T080535 查询的结束时间(可选)

page=1 指定页码最大页数为 10000(可选)

per_page=30 指定每页输出设备个数默认 30最多 100(可选)

HTTP头部 api-key xxxxddddsssaaa

HTTP响应响

应消息内容

errno 0

error succ

data

page 1当前页码

per_page 10当前每页总数

total_count 100

items [

cmd_uuid 2302-312-FWs

device_id 2设备 ID

expire_time 2016-07-05 000000过期时间

status 0命令状态

send_time 2016-07-05 000000发送时间

confirm_time 2016-07-05 000000响应时间

confirm_body 2463726571007b202274797022 响应内容

16进制字符

body 2463726571007b202274797022请求内容16进制字符

hellip

中移物联网有限公司 OneNET 开发文档中心

hellip

]

438 视频能力

4381 获取播放地址

表4-31 获取播放地址

HTTP方法 GET

URL apihecloudscomipcrtmp_address

URL 参数

device_id= 接收该数据的设备 ID(必填)

channel_id = 对应数据流名称中的 channelnum

protocol_type = 播放协议类型 0rtmp1hls2http-flv

HTTP头部 api-key xxxxddddsssaaa masterkey或者设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

errorrdquosuccrdquo

ldquodatardquo

addripport

accessTokenldquo字符串rdquo

439 APIKEY

4391 新增

表4-32 新增 APIKEY

HTTP方法 POST

URL apihecloudscomkeys

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP内容

(示例)

title sharing key key 的命名

permissions [

resources [ 被授权的资源

中移物联网有限公司 OneNET 开发文档中心

dev_id 424 被授权的设备 id

dev_id 425 被授权的设备 id

hellip

hellip

]

access_methods [ 被授权的命令

get

put

post

]

]

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data key2302-312-FWs key_string

说明授权命令是可选的另外被授权的命令也可以是 getputpost 的

一个或几个如只授权 get和 put命令

access_methods [getput]

4392 更新

表4-33 更新 APIKEY

HTTP方法 PUT

URL apihecloudscomkeyskey_string

HTTP头部 api-key xxxxddddsssaaa masterkey(注只能为 master-key)

HTTP内容

(示例)

title sharing key key 的命名

permissions [

resources [ 被授权的资源

dev_id 424 被授权的设备 id

ds_idfan1 数据流 id可选

中移物联网有限公司 OneNET 开发文档中心

dev_id 425 被授权的设备 id

ds_idfan1 数据流 id可选

hellip

hellip

]

access_methods [ 被授权的命令可选

get

put

post

]

]

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

说明

1对于 masterkey 不允许更新操作masterkey 默认具有最大权限可以访

问该用户名下所有设备所有数据

可以进行 POSTGETPUTDELETE操作如果更新 master key 系统会返回

失败

2授权命令是可选的另外被授权的命令也可以是 getputpost 的一个

或几个如只授权 get和 put命令

access_methods [getput]

3API key 更新是覆盖操作会将原来存在的授权资源和授权命令覆盖不

会保留原来的授权资源和授权命令

4393 查看

中移物联网有限公司 OneNET 开发文档中心

表4-34 查看 APIKEY

HTTP方法 GET

URL httpapihecloudscomkeys

URL 参数

key = FWJPO-FZFHW-FFEWB可选只查看该 key相关信息

page = 1 指定页码 可选

per_page = 10 指定每页输出个数可选默认 10最多 100

device_id = xxbbcc可选只查看与该设备相关的非 master-key

HTTP头部 api-key xxxxddddsssaaa masterkey(注只能为 master-key)

HTTP响应响

应消息内容

(示例)

errno 0

data

per_page 30

total_count 2

keys [

create_time 2015-11-04 142552

title Auto-generated-master-key

key 03GeDLYk0WNk1V338g7yndKZYkQA

create_time 2015-12-03 100041

permissions [

resources [

dev_id 564280

]

]

title 设备 1测试 Key

key vuHebEWefiU2Ueo5ouoCc1CUsYQ=

]

page 1

error succ

中移物联网有限公司 OneNET 开发文档中心

4394 删除

表4-35 删除 APIKEY

HTTP方法 DELETE

URL httpapihecloudscomkeyskey_string

HTTP头部 api-key xxxxddddsssaaa masterkey(注只能为 master-key)

HTTP 响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

4310 消息订阅

43101 按 Topic 发送命令

表4-36 按 Topic 发送命令

HTTP方法 POST

URL apihecloudscommqtt

URL参数 topic=xxx 设备订阅的主题(必选)

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP 内 容

(示例)

HTTP响应响

应消息内容

(示例)

errno0

errorldquosuccrdquo

data

total_count1

per_page30

page1

devices [123123433333]

43102 查询订阅指定 Topic设备的列表

表4-37 查询订阅制定 Topic设备的列表

HTTP方法 GET

URL apihecloudscommqtttopic_device

URL 参数

topic=xxx 设备订阅的主题(必选)

page=1 当前页码 必填大于等于 1

per_page=10 每页 必填范围 1-1000

中移物联网有限公司 OneNET 开发文档中心

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP内容

(示例)

HTTP响应响

应消息内容

(示例)

errno0

errorldquosuccrdquo

data

total_count1

per_page30

page1

devices [123123433333]

43103 查询设备订阅的 Topic列表

表4-38 查询设备订阅的 Topic列表

HTTP方法 GET

URL apihecloudscommqttdevice_topicdevice_id

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno0

errorldquosuccrdquo

data

[topic_name1 topic_name2 topic_name3]

43104 删除产品的 Topic

表4-39 删除产品的 Topic

HTTP方法 DELETE

URL apihecloudscommqtttopic

URL参数 name=xxx topic名(必选)

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno0

errorldquosuccrdquo

中移物联网有限公司 OneNET 开发文档中心

43105 查询产品的 Topic

表4-40 查询产品的 Topic

HTTP方法 GET

URL apihecloudscommqtttopic

URL参数 无

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno0

errorldquosuccrdquo

data

[topic_name1topic_name2topic_name3]

中移物联网有限公司 OneNET 开发文档中心

第五章 接入实例

51 MQTT-device 接入

511 工具下载

为方便开发人员直观感受使用 mqtt 协议进入平台的便利可使用平台提供

的 MQTT 设备模拟器进行接入平台请在首页-gt开发文档-gt资源下载-gt13 调试

工具下载进行下载如下图

图5-1 资源下载

下载地址

httpupfileshecloudscom123ueditor201707125d5bc37eca39c0c5b7a5bcb9

0e451eeerar

中移物联网有限公司 OneNET 开发文档中心

512 界面说明

图5-2 界面说明

513 使用方法

5131 创建产品

如 323 的过程在设备接入协议中选择 MQTT

中移物联网有限公司 OneNET 开发文档中心

图5-3 选择连接协议

5132 创建设备

如 323描述在平台上新建一个设备

5133 建立连接

在产品概况中可以查看产品 ID此信息填入模拟器 ProductID一栏如下图

图5-4 产品ID

在平台上进入设备信息页面可查看设备 ID及鉴权信息(此鉴权信息是新建设备时候填

写的鉴权信息)如下图

中移物联网有限公司 OneNET 开发文档中心

图5-5 设备ID及鉴权信息

相应把设备 ID及鉴权信息填入模拟器之中然后点击连接按钮如果未弹出提示对话

框则表示设备鉴权成功如下图

图5-6 连接成功

中移物联网有限公司 OneNET 开发文档中心

5135订阅与发布

演示本操作需要在 OneNet平台建立两个基于 MQTT协议的设备一个用于消息发布

另一个用于消息订阅

图5-7 设备状态

开启两个模拟器分别模拟以上两个设备然后建立连接

首先使用订阅主题打开第一个模拟器模拟消息订阅者

图5-8 订阅主题

其次发布主题打开第二个模拟器模拟消息发布者

中移物联网有限公司 OneNET 开发文档中心

图5-9 发布主题

经过以上两个操作后查看模拟消息订阅者的模拟器则收到了主题

为rdquotopic_namerdquo的消息如下图

中移物联网有限公司 OneNET 开发文档中心

图5-10 收到的主题

5136接收平台指令

建立连接后模拟器也可接收来自平台的指令具体操作如下

先打开模拟器-gt建立连接-gt选中【[OneNet]平台指令接收】选项栏利用平台下发指

令功能下发如下图平台下发指令

图5-11 平台发送命令

中移物联网有限公司 OneNET 开发文档中心

图5-12 下发指令

填写好将要发送的消息后点击【发送命令】按钮则模拟器成功接收到来自平台的

数据如下图模拟器截图

图5-13 模拟器收到的指令

5137上传数据点

Mqtt支持 Json 数据格式上报数据现根据 Json几种格式举一些例来演示怎么利用

模拟器上传数据

1)使用 Json数据 Type1上传 Json数据

datastreams[idtemperaturedatapoints[value255]]

中移物联网有限公司 OneNET 开发文档中心

如下模拟器上传数据界面

图5-14 Type1数据格式

则在平台数据展示中则可看到上传的数据点

图5-15 收到数据展示

2)使用 Json数据 Type3示例 Json数据为

temp32humi98

模拟器发送数据截图

中移物联网有限公司 OneNET 开发文档中心

图5-16 Type3数据格式

平台数据展示截图

图5-17 数据展示

3)使用 Json数据 Type4示例 Json数据为

temperature233pm2589

模拟器上传数据截图

中移物联网有限公司 OneNET 开发文档中心

图5-18 Type5数据格式

平台接收数据展示截图

图5-19 数据展示

52 基于麒麟开发板的 MQTT 接入实例

OneNet 平台为使用户能快速接入发布麒麟座开发板官网提交您的创意免

费申请开发板下面利用麒麟座开发板 V31 演示开发板采集温湿度使用 MQTT发

送到平台的接入流程

开发板申请链接httpsopeniot10086cneventdetail185html

521 搭建开发环境

OneNET 平台提供的麒麟座开发板是基予 STM32 单片机开发的一块功能应用

板开发板包含 MCU温湿度传感器GSM 模块WIFI 模块电源模块键盘

中移物联网有限公司 OneNET 开发文档中心

LED以及 lcd显示接口等满足用户对平台接入的基本需求能快速接入到平台

资料包配备完整工程代码方便工程移植等使用

目前 STM32 开发常用的 IDE 有 IARMDK 等我挑选 MDK 作为开发工具打

开工具包先安装 MDK511A安装完毕后再安装 MDKCM511A开发板所有资料软件

工具包下载案例包

案例包下载链接

httpspanbaiducoms1UB1qZGrVuovSVdbqqXP0Lglistpath=2F

图5-20 MDK包

安装完毕并安装 license详细步骤不做演示

中移物联网有限公司 OneNET 开发文档中心

522 连接硬件准备

5221 开发板接线

图5-21 开发板接线图

电源DC-5V

运行信息USART1-MicroUSB 线

软件下载ST-Link

中移物联网有限公司 OneNET 开发文档中心

5222 ESP8266跳线帽连接

图5-22 ESP8266跳线帽连接

中移物联网有限公司 OneNET 开发文档中心

5223 M6312跳线帽连接

图5-23 M6312跳线帽连接

523 工程实例

例程使用最简单易懂的方式编写着重让大家明白接入流程和协议

10~12 协议专属例程是展示该协议下的专用功能比如 EDP 的 PushData

中移物联网有限公司 OneNET 开发文档中心

HTTP 注册新设备MQTT 的订阅发布等具体使用方法查看该目录下的《使用

说明》

图5-24 工程文件

524 开发工程文件

中移物联网有限公司 OneNET 开发文档中心

图5-25 工程文件

图5-26 工程结构

默认已创建好产品以及设备打开文件工程 onenetc 和 esp8266c 修改例

程的 WIFI 信息和平台信息

分别在 esp8266c 的 36和 onenetc的 414345行

图5-27 更改项

525 编译下载

开发版接串口会有相应状态显示平台设备显示在线状态绿色为连接成功

设备在线灰色表示未连接并在数据展示中显示对应主题的所有数据

中移物联网有限公司 OneNET 开发文档中心

图5-28 连接成功

图5-29 收到数据

其他实例详情请见httpsopeniot10086cnbbsthread-1266-1-1html

中移物联网有限公司 OneNET 开发文档中心

第六章 MQTT 协议详解

61 设备与平台通信协议包格式

协议就是通信双方的一个约定即表示第 1字节传输的什么第 2字节

传输的什么helliphellip在 MQTT协议中一个 MQTT 数据包由固定头(Fixed

header) 可变头(Variable header) 消息体(payload)三部分构成

MQTT 数据包结构固定头部+可变头部+消息体

固定头(Fixed header)存在于所有 MQTT数据包中表示数据包类型及

数据包的分组类标识固定头格式如下

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 - 5 Remaining Length(该字段占用 1-4个字节)

目前平台版本支持的 Packet Type如下

名字 值 流向 描述

CONNECT 1 C-gtS 客户端请求与服务端建立连接

CONNACK 2 S-gtC 服务端确认连接建立

PUBLISH 3 CS 发布消息

PUBACK 4 CS 收到发布消息确认

PUBREC 5 CS 发布消息收到

PUBREL 6 CS 发布消息释放

PUBCOMP 7 CS 发布消息完成

SUBSCRIBE 8 C-gtS 订阅请求

SUBACK 9 S-gtC 订阅确认

UNSUBSCRIBE 10 C-gtS 取消订阅

UNSUBACK 11 S-gtC 取消订阅确认

PING 12 C-gtS 客户端发送 PING(连接保活)命令

PINGRSP 13 S-gtC PING命令回复

DISCONNECT 14 C-gtS 断开连接

可变头(Variable header)存在于部分 MQTT 数据包中数据包类型决定

了可变头是否存在及其具体内容

消息体(Payload)存在于部分 MQTT 数据包中表示客户端收到的具体内

中移物联网有限公司 OneNET 开发文档中心

不同类型数据包中可变头和消息体包含关系如下

消息类型 Variabl

e

Header

Payloa

d

CONNECT 有 有

CONNACK 有 有

PUBLISH 有 有

PUBACK 有 无

PUBREC 有 无

PUBREL 有 无

PUBCOMP 有 无

SUBSCRIBE 有 有

SUBACK 有 有

UNSUBSCRIBE 有 有

UNSUBACK 有 无

PING 无 无

PINGRSP 无 无

DISCONNECT 无 无

62 平台支持数据包类型

621 CONNECT(客户端请求与服务端建立连接 client -gt server)

固定头(Fixed Header)

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 - 5 Remaining Length(该字段占用 1-4个字节)

MQTT Packet Type 值为 0001表示该数据包为请求连接数据包

Remaining Length 剩余长度占 1-4字节

可变头(Variable Header)

包含内容如下

Description 7 6 5 4 3 2 1 0

byte

1-2

ProtocolNa

me Length

0 0 0 0 0 0 0 0

0 0 0 0 0 1 0 0

byte

3

lsquoMrsquo 0 1 0 0 1 1 0 1

byte

4

lsquoQrsquo 0 1 0 1 0 0 0 1

中移物联网有限公司 OneNET 开发文档中心

byte

5

lsquoTrsquo 0 1 0 1 0 1 0 0

byte

6

lsquoTrsquo 0 1 0 1 0 1 0 0

Byte

7

Protocol

Level

0 0 0 0 0 0 0 1

Byte

8

Connect

Flag

Use

r

flag

Passwo

rd

flag

WillReta

in

Flag

WillQo

s Flag

WillFl

ag

CleanSessi

on

Flag

Reser

ve

Byte

9-10

KeepAlive

(1) 版本

Protocol Level 必须设置为 4平台只支持协议版本 v 311不支持更老

的版本使用第三方客户端时需要注意选择正确的版本

(2) user flag 与 password flag

平台不允许匿名登陆因此这两个标志位在连接时必须设置为 1否则认为

协议错误平台将会断开连接

(3) Will flag 与 WillretainflagWillQosFlag

Will flag 为 0时WillQosFlag 和 WillRetainFlag 必须为 0Will Flag

为 1时WillQosFlag 只能为 012

1当该设备下一次正常上线后服务器会清除之前的 will 消息(包括

retain 消息)

2如果设备上线时设置了 Will Topic 和 msg且将 WillRetainFlag 设

置为 1只有设备异常断开后服务器才会将该 Will msg 分发给新的 Will

Topic 的订阅者且 Qos 级别以订阅的 Request qos 级别为准

3如果设备上线时设置了 Will Topic 和 msg且将 WillRetainFlag 设

置为 0服务器不会存储该消息当设备异常断开后会将该 Will msg 以设

备设置的 WillQosFlag的 Qos级别进行分发

(4) CleanSessionFlag

若客户端将 clean session 标志位设置为 0当其断开后平台将会保存

sessionsession 需保持的内容包含

客户端订阅的 topic列表

中移物联网有限公司 OneNET 开发文档中心

还未完成确认的 Qos1Qos2级别的 publish消息

客户端保存 session 的内容包含

已经发送到服务端的但还没有收到确认的 Qos1Qos2消息列表

待发送的 Qos0列表

若客户端将 clean session 标志位设置为 1当其断开后平台会清除设备

的订阅列表及未完成确认的 Qos1Qos2 的 publish消息

(5) Reserve

保留位置 0

(6) KeepAlive 保活时间

每个客户端可自定义设置连接保持时间最短 120秒最长 65535 秒

消息体(Payload) Description 是否必须存在 格式

Field1 Client

Identifier

是 2字节字串长度 + utf8字

Field2 UserName 是 2字节字串长度 + utf8字

Field3 UserPassword 是 2字节字串长度 + utf8字

目前平台支持的方式为以后两种

方式 1设备 ID项目 ID鉴权信息(auth_info)

字段设置 消息示例

client_id设置为平台创建设备时的

设备 id

username设置为ldquo项目 IDrdquo

password设置为ldquo鉴权信息

(auth_info)rdquo

client_id=rdquo123rdquo

username=rdquo433223rdquo

password=rdquo注册的鉴权信息rdquo

各字段说明如下

鉴权信息(auth_info)在平台申请设备时填写设备的 auth_info 属性(数

字+字母的字符串)该属性需要产品内具备唯一性(可使用设备出厂唯一编号)

方式 2设备 ID + APIKey(项目 ID也需要填写)

字段设置 消息示例

client_id设置为平台创建设备时的

设备 ID

username设置为ldquo项目 IDrdquo

client_id=rdquo123rdquo

username=rdquo433223rdquo

password=Api Key

中移物联网有限公司 OneNET 开发文档中心

password设置为ldquoAPI鉴权信息

(auth_info)rdquo

项目 ID在平台添加项目时平台生成的 ID

APIKey在平台上创建产品时生成的 APIKey

连接包实例如下

Send one mqtt packet

FixHeader

PacketTag = 16

PacketType = 1

RemainLength = 34

VariableHeaderConnect

protocol_name_len_= 4

protocol_name_= MQTT

protocol_level_= 4

connect_flag_= 192

keep_alive_= 12000

client_id_len_= 8

client_id_= 34764813

usr_name_len_= 6

usr_name_= 150295

password_len_= 4

password_= push

MQTT0x10 0x22 0x00 0x04 0x4D 0x51 0x54 0x54 0x04 0xC0 0x2E 0xE0 0x00 0x08 0x33

0x34 0x37 0x36 0x34 0x38 0x31 0x33 0x00 0x06 0x31 0x35 0x30 0x32 0x39 0x35 0x00

0x04 0x70 0x75 0x73 0x68

Send One Packet Succ

中移物联网有限公司 OneNET 开发文档中心

622 CONNACK (服务端确认连接建立)

Fixed Header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type = 2 0 0 0 0

byte2 - 5 Remaining Length(该字段占用 1-4个字节)

Variable Header

Description 7 6 5 4 3 2 1 0

byte 1 Acknowledge Flags 0 0 0 0 0 0 0 Sp

byte 2 Return Code x x x x x x x x

Sp Session Present Flagsession信息在服务器已保持置 1未保存置

0

返回码说明

返回码 描述

0 成功

1 协议版本错误

2 非法的 clientid

3 服务不可用

4 用户名或密码错误

中移物联网有限公司 OneNET 开发文档中心

5 非法链接(比如 token非法)

失败

如果 connect包不符合协议内容约束则直接断掉连接而不需要发送 conn

ack包

如果鉴权或授权失败回复一个带非 0错误码的 connack包

成功

必须断掉重复的 clientid

执行 cleansession 对应的操作

必须回复一个 connack回复码为 0

开始消息传递并加入 keepalive的监视

PS客户端需要等到服务端的 connack报文才能发送后续的数据包

623 PUBLISH(发布消息 client -gt server)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type DUP f

lag

QoS Level RETAI

N

byte2 - 5 Remaining Length(该字段占用 1-4 个字节)

DUP

QoS2Qos1如果为 0则表示是第一次发送该包如果为 1则表示

为重复发送的包

Qos0DUP 必须为 0

中移物联网有限公司 OneNET 开发文档中心

QoS 指定了该 publish包的 Qos 等级如下

Qos 值 Bit2 Bit1 描述

0 0 0 最多发送一次

1 0 1 至少发送一次

2 1 0 只发送一次

RETAIN 保留标志位如果为 1服务器存储最新一条 RETAIN消息以便

分发给新的订阅者如果 RETAIN为 1Payload 为空服务器分发该消息后会

清空该 topic 下的 RETAIN 消息

PS该版本实现了 Qos0Qos1Qos2

Variable Header

Description 格式 是否必须

Field1 TopicName 2 字节字串长度 + utf8字

Field2 PacketIdent

ifier

2 字节 QoS0否QoS1Qos2是

Payload

内容根据不同业务自定义

624 PUBLISH(发布消息 server -gt client)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type DUP f

lag

Qos Level RETAIN

byte2 - 5 Remaining Length(该字段占用 1-4个字节)

DUP

Qos2QoS1如果为 0则表示是第一次发送该包如果为 1则表示

为重复发送的包

中移物联网有限公司 OneNET 开发文档中心

Qos0DUP 必须为 0

QOS 指定了该 publish包的 qos等级如下

Qos 值 Bit2 Bit1 描述

0 0 0 最多发送一次

1 0 1 至少发送一次

2 1 0 只发送一次

RETAIN如果服务器分发的消息是 RETAIN 消息则将该标志位置 1否则置

0

PS该版本实现 Qos0Qos1Qos2其中服务器分发消息的 Qos级别是以 Clien

t-gtServer 发送的 publish 包的 qos 等级为准非订阅的 topic 的 Qos 等级R

etain 消息是以订阅的 Request Qos 级别进行推送

VariableHeader

Description 格式

Field1 TopicName 2 字节字串长度 + utf8字

Payload

内容根据不同业务自定义

625 PUBACK(收到发布消息确认)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

中移物联网有限公司 OneNET 开发文档中心

626 PUBREC(发布消息收到)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

627 PUBREL(发布消息释放)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

628 PUBCOMP(发布消息完成)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

中移物联网有限公司 OneNET 开发文档中心

byte 1~

2

PacketIdentifier PacketIdentifier

629 SUBSCRIBE(订阅请求)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

Payload

Description 格式

Byte1~

n

TopicName 2 字节字串长度 + utf8字

Byten+

1

Request Qos 服务质量要求(只能为 0

12)

topic 说明

可以包含一个或多个 topic

topic必须是数字英文反斜杠()的组合目前不支持通配符

每个客户端最多订阅 100个 topic

以下 topic 被系统保留使用(客户端不能订阅)

类型 说明

$开头 平台保留

中移物联网有限公司 OneNET 开发文档中心

6210 SUBACK(订阅确认)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

Payload

Description 7 6 5 4 3 2 1 0

byte 1 retcode

返回码说明

返回码 描述

0x00 成功(granted qos = 0)

0x01 成功(granted qos = 1)

0x02 成功(granted qos = 2)

0x80 失败

6211 UNSUBSCRIBE(取消订阅)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

中移物联网有限公司 OneNET 开发文档中心

Payload

Description 格式

Byte1~

n

TopicName 2 字节字串长度 + utf8字

可以包含一个或多个 topic

6212 UNSUBACK(取消订阅确认)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

6213 PING(客户端发送 PING(连接保活)命令)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

NULL NULL

注PING命令无 VariableHeader

中移物联网有限公司 OneNET 开发文档中心

6214 PINGRSP(PING命令回复)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

NULL NULL

注PINGRSP无 VariableHeader

6215 DISCONNECT(断开连接)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

NULL NULL

注DISCONNECT无 VariableHeader

中移物联网有限公司 OneNET 开发文档中心

第七章 设备开发流程

71 连接鉴权

Device Onenet

(Connect)鉴权请求

(ConnAck)鉴权结果

加载session

鉴权

图7-1 连接鉴权

设备向平台发起 connect 请求connect 中携带鉴权信息具体

参见(报文格式参考 621)

平台拿到鉴权信息进行鉴权

鉴权通过后如果 cleansession=0 平台将会加载保存的设备

的一些信息如订阅列表(621中描述)

如果 cleansession=1 设备没有保存信息在平台则不加载设

备相关信息

返回鉴权结果 ConnAck(报文格式参考 621)

72 消息发布

721 数据点上报

设备使用 publish 报文来上传数据点 报文格式如下

中移物联网有限公司 OneNET 开发文档中心

VariableHeader

Field 名称 说明 格式

Field1 TopicName=rdquo$dprdquo $dp 为系统上传数据点

的指令

2字节字串长度 + utf8

字串

Payload

Payload包含真正的数据点内容支持的格式如下

Byte 1 Bit0-5数据类型指示目前支持

Type = 1

Type = 2

Type = 3

Type = 4

Type = 5

Type = 6

Type = 7

Bit6-7 flags 根据具体类型不同意义

Type6Type7这两种需要填写时间戳的数据类型

如果填入了时间戳则须将 bit7 置 1否则置 0(即

忽略数据类型说明中的日期时间相关字段)

0 0 0 0 0 0 0 1

Byte 2 根据数据类型指示不同

Byte n

中移物联网有限公司 OneNET 开发文档中心

数据类型 1(type == 1)格式说明

数据类型 2(type == 2)格式说明

Byte 1 数据点类型值1 1JSON 格式 1 字符串 0 0 0 0 0 0 0 1

Byte 2 指示后面 json 字符串长度

固定两字节长度高位字节值为 0x00

Byte 3 固定两字节长度低位字节值为 0x41

Byte 4

ldquodatastreamsrdquo[ 可以同时传递多个数据流

ldquoidrdquordquotemperaturerdquo

ldquodatapointsrdquo[数据流可以有多个数据点

rdquoatrdquordquo2013-04-22 222222rdquo可选

rdquovaluerdquo 365用户自定义

]

ldquoidrdquordquolocationrdquo

ldquodatapointsrdquo[hellip]

hellip

]

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

Byte n

Byte 1 数据点类型指示type=2 二进制数据 0 0 0 0 0 0 1 0

Byte 2 指示后面 json 字符串长度

固定两字节长度-高位字节值为 0x00

Byte 3 固定两字节长度-低位字节值为 0x10

Byte 4

rdquods_idrdquordquoimagerdquo 创建数据流时定义的 ID(必填)

ldquoatrdquordquo2014-10-25 122323rdquo 时间(可选)

rdquodescrdquo字符串或 json 对象对该数据的描述(可选)

hellip

Byte n

Byte n+1 指示后面二进制数据长度

固定四字节长度-第 1 字节(最高)值为 0x00

Byte n+1 固定四字节长度-第 2 字节值为 0x00

Byte n+2 固定四字节长度-第 3 字节值为 0x01

Byte n+3 固定四字节长度-第 4 字节(最低)值为 0x00

Byte n+4 该域目前最大支持 3M

中移物联网有限公司 OneNET 开发文档中心

数据类型 3(type == 3)格式说明

数据类型 4(type ==4)格式说明

hellip 本例中的该域 256 字节数据

Byte n+260

Byte 1 数据点类型指示type=3 JSON 格式 2 字符串 0 0 0 0 0 0 1 1

Byte 2 指示后面字符串长度

固定两字节长度高位字节值为 0x00

Byte 3 固定两字节长度低位字节值为 0x46

Byte 4 通用格式

ldquodatastream_id1rdquordquovalue1rdquo

ldquodatastream_id2rdquordquovalue2rdquo

hellip

示例

ldquotemperaturerdquo225rdquohumidityrdquordquo952rdquo

hellip

hellip

hellip

hellip

Byte n

Byte 1 数据点类型指示type=4 JSON 格式 3 字符串 0 0 0 0 0 1 0 0

Byte 2 指示后面字符串长度

固定两字节长度高位字节值为 0x00

Byte 3 固定两字节长度低位字节值为 0x46

Byte 4 通用格式

ldquodatastream_id1rdquoldquodatetime1rdquordquovalue1rdquo

ldquodatastream_id2rdquo ldquodatetime2rdquordquovalue2rdquo

hellip

示例

ldquotemperaturerdquoldquo2015-03-22 223112rdquo225

hellip

hellip

hellip

hellip

Byte n

中移物联网有限公司 OneNET 开发文档中心

数据类型 5(type == 5)格式说明

数据类型 6(type == 6)格式说明

Byte 1 数据点类型指示type=5 自定义分隔符 0 0 0 0 0 1 0 1

Byte 2 指示后面字符串长度

固定两字节长度高位字节值为 0x00

Byte 3 固定两字节长度低位字节值为 0x41

Byte 4 消息中最前面两字节为用户自定义的域中分隔符和域间分隔符

这两个分隔符不能相同比如采用逗号作为域中分隔符分号作

为域间分隔符的格式如下

feild0feild1hellipfeildn

其中每个 field 格式支持 3种

field 格式 1 3 个子字段分别是数据流 ID时间戳数据值

通用格式

Datastream_iddatetimevalue

field 格式 2 2 个子字段分别是数据流 ID 和数据值省略时

间戳通用格式

Datastream_idvalue

field 格式 3 1 个子字段省略了数据 ID 和时间戳只传输数

据值平台将用该域(feild)所在的位置号(从 0 开始)作为数据

流 ID通用格式

value

示例

(1)temperature2015-03-22

223112225102pm258910

(2)temperature2015-03-22

223112225102pm258910

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

Byte n

Byte 1 数据类型指示type=6 带时间自定义分隔符 0 0 0 0 0 1 1 0

Byte 2 年(后两位)例如 2016 年则该字节为 16 0 0 0 1 0 0 0 0

Byte 3 月(1-12)

Byte 4 日(1-31)

Byte 5 小时(0~23)

Byte 6 分钟(0~59)

Byte 7 秒(0~59)

Byte 8 指示后面字符串长度

固定两字节长度高位字节值为 0x00

Byte 9 固定两字节长度低位字节值为 0x41

Byte 10 消息中最前面两字节为用户自定义的域中分隔符和域间分隔符

具体格式见 type=5 说明若相关域中没有时间戳则采用本类

hellip

中移物联网有限公司 OneNET 开发文档中心

数据类型 7(type == 7)格式说明(每次最多 500个数据流的浮点数)

hellip 型的默认时间戳当作数据点的时间来存储

Byte n

Byte 1 Bit0-5 数据类型指示type=7 可离散浮点数数据流

Bit6保留置 0

Bit7 时间指示位1携带 6字节时间

1 0 0 0 0 1 1 1

Byte 2 年(后两位)例如 2016 年则该字节为 16 0 0 0 1 0 0 0 0

Byte 3 月(1-12)

Byte 4 日(1-31)

Byte 5 小时(0~23)

Byte 6 分钟(0~59)

Byte7 秒(0~59)

Byte 8 数据流名称(取值范围 1-65535)

高位字节值为 0x00

Byte 9 低位字节值为 0x01

Byte10 数据流个数(取值范围 1-500)

高位字节值为 0x00

Byte11 低位字节值为 0x01

Byte 10 4 字节 float 类型低位在前高位在后

Byte 11

Byte 12

Byte 13

Byte n 数据流名称(取值范围 1-65535)

高位字节值为 0x24

Byte n+1 低位字节值为 0x37

Byte n+2 数据流个数(取值范围 1-500)

高位字节值为 0x01

Byte n+3 低位字节值为 0x00

Byte n+2 4 字节 float 类型低位在前高位在后

Byte n+4

Byte n+5

Byte n+6

中移物联网有限公司 OneNET 开发文档中心

7211 Qos0(Client-gtServer)

Device OneNet

Publish $dp(Qos0)

存储

图7-2 QoS连接图

设备发布 Qos0 消息(上报数据点)

平台收到上报数据点后保存起来

7212 Qos1(Client-gtServer)

Device OneNet

Publish $dp(Qos1)

存储

PubAck

图7-3 Qos1连接图

设备发布 Qos1 消息(上报数据点)

中移物联网有限公司 OneNET 开发文档中心

平台收到上报数据点后保存起来

平台给设备回复相应的 PubAck (报文格式参考 625)

7213 Qos2(Client-gtServer)

Device OneNet

Publish $dp(Qos2)

存储

PubRec

PubRel

PubComp

图7-4 Qos2连接图

设备发布 Qos2 消息(上报数据点)

平台收到上报数据点后保存起来

平台给设备回复相应的 PubRec报文

设备需回复平台 PubRel报文如超时不回平台则会断开相应连接

平台给设备回复 PubComp报文

注数据点上报功能不支持 Retain 特性

中移物联网有限公司 OneNET 开发文档中心

722 平台命令(下发amp回复)

7221 命令下发

平台使用 publish 报文来下发平台指令 报文格式如下

FixHeader

参考 623

VariableHeader

Field 名称 说明 格式

Field1 TopicName=rdquo$creqcmduuidrdquo $creq为系统下发

Cmd 的 指 令

cmduuid为该条指

令的 uuid

2字节字串长度 +

utf8字串

Payload

Payload包含真正的指令内容

72211 Qos0(Server-gtClient)

DeviceOneNet

Publish $creq(Qos0)

图7-5 Qos0命令下发

命令下发

平台向设备发送 topic为$creq的消息(该 topic为平台命令)

中移物联网有限公司 OneNET 开发文档中心

设备收到 topic 为$creq 的 topic 时需将其作为平台下发的指令来处

注目前命令下发以 Qos0级别进行推送

7222 命令回复

设备使用 publish 报文来回复平台指令 报文格式如下

FixHeader

参考 623

VariableHeader

Field 名称 说明 格式

Field1 TopicName=rdquo$crspcmduuidrdquo $crsp为系统处理

设备回复 cmd 的

指令cmduuid为

该条指令的 uuid

2字节字串长度 +

utf8字串

Payload

Payload包含真正回复的指令内容

72221 Qos0(Client-gtServer)

DeviceOneNet

Pulish $crsp(Qos0)

图7-6 Qos0下发命令

中移物联网有限公司 OneNET 开发文档中心

72222 Qos1(Clientlt-gt Server)

DeviceOneNet

Pulish $crsp(Qos1)

Puback

图7-7 Qos1下发命令

如果设备回复响应时以 Qos1回复则平台需要给设备回复一个 Puback 报文

72223 Qos2(Clientlt-gt Server)

DeviceOneNet

Pulish $crsp(Qos2)

PubRec

PubRel

PubComp

图7-8 Qos2下发命令

如果设备回复响应时以 Qos2回复则

1平台需回复设备一个 PubRec报文

中移物联网有限公司 OneNET 开发文档中心

2设备在收到 PubRec后需向平台回复 PubRel报文

3平台收到 PubRel 报文后向设备回复 PubComp报文

73 创建 Topic

Device OneNet

HTTP 请求

HTTP 响应

图7-9 创建Topic

设备通过发送 HTTP请求进行 topic 的创建操作

平台收到请求后创建 topic 并返回结果

请求及响应定义如下

HTTP方法 POST

URL httpapihecloudscommqtttopic

HTTP头部 api-keyxxxx-ffff-zzzzz必须 master key

URL参数

HTTP body

内容

ldquonamerdquordquoxxxxxxrdquo topic 名字只能由英文下划线反斜杠组成最长

1024个字符同一产品下 topic name 不重复

成功返回

errno 0

errorldquosuccrdquo

说明 每个产品最多 100个 topic

中移物联网有限公司 OneNET 开发文档中心

74 订阅

Device OneNet

Subscribe

Suback

更新设备订阅列表

图7-10 订阅

设备发起订阅请求(报文格式参考 629)

平台收到请求后更新 topic列表

平台给设备回复 SubAck (报文格式参考 6210)

注subscribe 的 request qos级别可以为 012

75 取消订阅

Device OneNet

UnSubscribe

UnSuback

更新设备订阅列表

图7-11取消订阅

中移物联网有限公司 OneNET 开发文档中心

设备发起取消订阅请求 (报文格式参考 6211)

平台收到请求后更新 topic 列表

平台给设备回复 UnSubAck (报文格式参考 6212)

76 推送设备 Topic

761 Publish 报文推送

Qos0设备使用 Qos 级别为 0的 Publish报文来进行推送

Device OneNet

Publish(Qos0)

Device

以Qos0 Publish到订阅设备

图7-12 Qos0推送

设备发起推送 topic请求(以 Qos0级别)

平台收到请求后将 topic以 Qos0级别推送到相关订阅设备(支持离线设

备推送)

平台不返回 PubAck或 PubRec 等报文

Qos1

设备使用 Qos级别为 1的 publish报文来推送 Topic

中移物联网有限公司 OneNET 开发文档中心

Device OneNet

Publish(Qos1)

PubAck

Device

以Qos1 Publish到订阅设备

设备回复平台 PubAck

图7-13 Qos1发布

设备发起推送 topic请求(以 Qos1级别)

平台收到请求后将 topic以 Qos1级别推送到相关订阅设备(支持离线设

备推送)

平台返回 PubAck 报文

Qos2

设备使用 Qos级别为 2的 publish报文来推送 Topic

中移物联网有限公司 OneNET 开发文档中心

Device OneNet

Publish(Qos2)

PubRec

Device

以Qos2 Publish到订阅设备

PubRec

PubRel

PubComp

PubRel

PubComp

图7-14 Qos2推送

设备发起推送 topic请求(以 Qos2级别)

平台收到请求后回复 PubRec报文

设备收到 PubRec后需回复 PubRel报文 (如超时不回复平台会断开与设

备的连接)

平台收到 PubRel 报文后回复 PubComp 给设备

平台在回复 PubComp 后会以 Qos2 级别推送到相关订阅设备(支持离线设

备推送)

设备需回复 PubRec报文 (如超时不回复平台会断开与设备的连接)

平台发送 PubRel 报文给设备

设备需回复 PubComp(发布完成)

Publish报文的格式如下

FixHeader

参考 623

中移物联网有限公司 OneNET 开发文档中心

VariableHeader

Field 名称 说明 格式

Field1 TopicName 填写设备订阅的 topic 2字节字串长度 + utf8

字串

Payload

Payload为设备自定义内容

762 HTTP 请求推送

Device OneNet

HTTP 请求

HTTP 响应

Device

Publish到订阅设备

图7-15 HTTP请求

设备以 HTTP 的方式发起推送 topic 请求

平台收到请求后将 topic推送到相关订阅设备 (目前只支持在线推送)

平台返回推送结果

请求及响应定义如下 HTTP方法 POST

URL httpapihecloudscommqtt

HTTP头部 api-keyxxxx-ffff-zzzzz必须 master key

URL参数 topic=ldquoXXXXXXrdquo必选在发送 mqtt协议的 topic 必填

HTTP body内容 用户自定义 Json 或二进制数据(小于 64K)

成功返回

errno 0

errorldquosuccrdquo

中移物联网有限公司 OneNET 开发文档中心

77 离线 Topic

推送 Topic只针对在线设备进行 topic 消息的推送离线设备不会收到订阅

的 topic 的消息离线 Topic则会将该消息推送给在线以及离线设备

1 如果设备在上线时设置了 clean session flag服务端会删除其订阅的

topic及相关的离线 topic消息

2 如果设备没有设置 clean session flag如果有与该设备相关的离线

topic消息则在鉴权成功后将离线消息推送给设备

3 遗嘱消息(will msg)只会推送给订阅了该 will topic的在线的设备离

线设备不会收到

4 离线消息的有效期默认为 2 天(暂不支持用户设定有效期)服务器只会

推送在 2天内的最近 10 条消息

78 数据点订阅

数据点订阅同一产品下的设备可以订阅其他设备的数据点订阅的 topic

格式为deviceid数据流名称即

被关注的设备在上传了该数据流名称的数据点后订阅了该 topic的其他设备都

会收到上传的数据点

1 AB设备的 deviceid分别为 92779278

2 A 设备订阅了名为92789527 的 topic(9278 为设备 B 的 id9527 为 B

设备上传的数据流名称)

3 B 设备上传了名为 9527的数据流(数据点为 11 1578hellip)

4 A 设备会收到多条(取决于设备 B 上传的数据点的个数)推送的 topic 名

为92789527 的 publish消息消息的 payload中则包含设备 B 上传的数据

注目前支持订阅的数据点的类型为 Type1~Type7(详见 721节)

中移物联网有限公司 OneNET 开发文档中心

第八章 常见问题 FAQ

用户在基于 OneNET 平台进行产品开发的过程中可能会遇到各种各样的问

题开发过程中遇到的问题一方面可以参考 OneNET 文档中心的文档或者本文

档前几个章节的内容另一方面用户可以参考本章节总结的常见问题希望这些

文档能对用户在开发过程中有一定的指导和帮助

本章将分三个小节对用户在开发产品过程中可能遇到的问题进行梳理分别

为终端设备接入 OneNET平台的常见问题API调用的常见问题和 OneNET平台

的能力

81 终端设备接入 OneNET 平台的常见问题

序号 问题描述 原因分析 解决方法

1

2

3

4

5

6

7

82 API 调用的常见问题

序号 问题描述 原因分析 解决方法

1

2

3

4

5

6

7

8

9

中移物联网有限公司 OneNET 开发文档中心

83 使用 OneNET平台遇到的常见问题

序号 问题描述 原因分析 解决方法

1

2

3

4

5

6

7

8

Page 4: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com

中移物联网有限公司 OneNET 开发文档中心

43 API接口 37

432 设备 39

433 数据流 45

434 数据点 47

435 二进制数据 52

436 触发器 52

437 命令 57

438 视频能力 60

439 APIKEY 60

4310 消息订阅 64

第五章 接入实例 67

51 MQTT-device 接入 67

511 工具下载 67

512 界面说明 68

513 使用方法 68

52 基于麒麟开发板的 MQTT接入实例 77

521 搭建开发环境 77

522 连接硬件准备 79

523 工程实例 81

524 开发工程文件 82

525 编译下载 83

第六章 MQTT协议详解 85

61 设备与平台通信协议包格式 85

62 平台支持数据包类型 86

621 CONNECT(客户端请求与服务端建立连接 client -gt server) 86

622 CONNACK (服务端确认连接建立) 90

623 PUBLISH(发布消息 client -gt server) 91

624 PUBLISH(发布消息 server -gt client) 92

625 PUBACK(收到发布消息确认) 93

626 PUBREC(发布消息收到) 94

627 PUBREL(发布消息释放) 94

628 PUBCOMP(发布消息完成) 94

629 SUBSCRIBE(订阅请求) 95

6210 SUBACK(订阅确认) 96

中移物联网有限公司 OneNET 开发文档中心

6211 UNSUBSCRIBE(取消订阅) 96

6212 UNSUBACK(取消订阅确认) 97

6213 PING(客户端发送 PING(连接保活)命令) 97

6214 PINGRSP(PING命令回复) 98

6215 DISCONNECT(断开连接) 98

第七章 设备开发流程 99

71 连接鉴权 99

72 消息发布 99

721 数据点上报 99

722 平台命令(下发amp回复) 107

73 创建 Topic 110

74 订阅 111

75 取消订阅 111

76 推送设备 Topic 112

761 Publish报文推送 112

762 HTTP请求推送 115

77 离线 Topic 116

78 数据点订阅 116

第八章 常见问题 FAQ 117

81 终端设备接入 OneNET 平台的常见问题 117

82 API调用的常见问题 117

83 使用 OneNET 平台遇到的常见问题 118

中移物联网有限公司 OneNET 开发文档中心

第一章 文档说明

编写此开发文档是为了让开发人员使用 MQTT协议快速接入 OneNET 平台形

成基于设备上传数据的物联网应用开发

通过阅读此文档开发人员可以了解 OneNET 平台接入的总体流程包括设

备使用 MQTT协议接入 OneNET平台步骤基于 OneNET平台开发上层应用

文档适用人员熟悉 MQTT 协议设备接入侧需要具备一定功底的嵌入式开

发人员北向 API调用的开发人员需要具备一定的应用软件开发能力

注意建议以公司名义先注册 OneNET 平台账号

中移物联网有限公司 OneNET 开发文档中心

第二章 MQTT 协议接入流程

MQTT (Message Queue Telemetry Transport)遥测传输协议使用 TCPIP 提

供网络连接能够对负载内容实现消息屏蔽传输开销小可以有效降低网络流

量其主要提供了订阅发布两种消息模式更为简约轻量易于使用特别适

合于受限环境(带宽低网络延迟高网络通信不稳定)的消息分发属于物联

网(Internet of Thing)的一个标准传输协议

嵌入式设备选择 MQTT 协议优点

1 轻量级的 machine-to-machine 通信协议

2 发布(publish)订阅(subscribe)模式

3 基于 TCPIP支持 QoS

4 长连接协议

5 终端数据点上报支持的数据点类型包括

o 整型(int)

o 浮点数(float)

o 字符串(string)

o JSON 格式

6 适合于低带宽不可靠连接嵌入式设备CPU 内存资源紧张

典型应用场景

MQTT 协议适用于设备和平台需要保持长连接的使用场景MQTT 特点在

于可以实现设备间的消息单播以及组播可以不依赖于其他服务(下发命令服务

推送服务等)实现让设备以应用服务器的方式对真实设备进行管理和控制

以门禁系统为例应用服务器(虚拟设备)可以订阅每个门禁(真实设备)

的统计数据的 topic对所有门禁的数据进行统计分析每个门禁也可以订阅自

身开关门的 topic应用服务器凭此可以远程控制每个门禁的状态

中移物联网有限公司 OneNET 开发文档中心

21 设备接入平台流程图

平台

TCP连接创建产品

发送连接报文

连接应答

数据应答

发送数据报文

生成连接报文

数据应答

发送数据报文

终端

发送下行命令 下发命令

解析下行命令

生成存储数据报文

生成存储数据报文

解析连接应答

解析数据应答

解析数据应答

必要流程

可选流程

存储到数据流

存储到数据流

数据源 创建应用

心跳应答

发送心跳报文生成心跳报文

解析心跳应答

平台操作

设备操作

创建设备

图2-1 设备接入OneNET平台流程图

1) 创建产品

根据产品功能需求选择接入协议重要参数产品 ID注册码产品 APIKey

(见附录一)

2) 创建设备

通过 TCP直接与平台直连的终端在进行接入之前平台上必须要先存在一

个与之一一对应的虚拟设备可以通过开发者中心或者 API 注册创建设备接口

来创建重要参数设备 ID鉴权信息

3) 建立 TCP连接

不同协议有着不同的固定 IP地址与端口

中移物联网有限公司 OneNET 开发文档中心

4) 建立设备连接

通过 1)2)中的参数(一般为产品 ID+鉴权信息+设备 ID)生成连接报文

发送连接报文建立终端与 2)中新建设备的一一对应关系

5) 发送数据报文

按照连接协议生成数据报文发送至平台

6) 创建应用

7) 使用平台下发命令接口或者 API向设备发送指令

22 应用开发流程图

应用开发主要是通过 Rsetful API 的方式实现和 OneNET 平台进行交互对

接在您完成产品创建以及硬件接入后即可根据相关所接入的硬件设备以及所

上传的数据进行相关产品的开发

OneNET 平台提供的应用开发 API分为需要终端响应和只需 OneNET 平台

响应两类下面分别用两个流程图描述这两类 API 的开发流程图 2-2为需

要终端响应的 API 调用流程其中虚线部分只有离线命令的读写下发命令才

有该流程图 2-3为只需平台响应的 API 调用流程

在应用开发平台调用 API 之前 必须与 OneNET 平台建立连接建立连

接的过程和 API 调用流程一并在图中进行了标注

中移物联网有限公司 OneNET 开发文档中心

图2-2 需要终端响应的API流程

终端设备 OneNET平台 应用开发平台

1配置应用开发地址Token等参数

2向应用开发平台发起URLampToken验证

3解析验证请求参数返回验证消息

应用平台与OneNET平台已经建立连接

4调用API指令HTTP请求

5返回平台侧执行结果错误代码和uuid

6API指令执行完毕

图2-3 不需要终端响应的API流程

终端设备 OneNET平台 应用开发平台

1配置应用开发地址Token等参数

2向应用开发平台发起URLampToken验证

3解析验证请求参数返回验证消息

应用平台与OneNET平台已经建立连接

4调用API指令HTTP请求MQTT请求

5返回平台侧执行结果错误代码和uuid

6相应指令请求返回数据 推送数据及执行结果给应用平台

7API指令执行完毕

中移物联网有限公司 OneNET 开发文档中心

第三章 终端设备接入 OneNET 平台流程

终端设备与 OneNET 平台进行数据交互需经过公网到达平台根据 OneNET

平台与网络运营商的关系终端设备智能网关OneNET平台以及第三方应用四

者的网络关系可归纳如图 3-1所示

图3-1 终端设备与服务器网络关系

图 3-1 中终端设备或智能网关设备与 OneNet 平台使用 TCPIP 建立网络连

接使用 MQTT协议进行与平台进行数据通信

31 终端设备接入 OneNET 平台前的准备工作

311 硬件准备

设备终端接入 OneNET平台的通信方式也是多种多样的比较常用的有 GPRS

无线 WIFI以太网口GPRS 方式需要 GPRS 模块和 SIM 卡的支持无线 WIFI 模

块需要 WIFI 模块支持WIFI 模块推荐选用 ESP8266 串口 WIFI 模块GPRS 模块

推荐选用 SIM900A模块

312 软件准备

设备终端接入 OneNET 平台使用 MQTT 协议使用嵌入式设备需移植 SDK

到 MCU详见麒麟发开板接入实例

中移物联网有限公司 OneNET 开发文档中心

32 终端设备接入 OneNET 平台步骤

321 OneNET 平台创建产品及设备

3211 注册用户账号

进入 OneNET官网(httpsopeniot10086cn)点击首页右上角的ldquo注

册rdquo按钮注册用户账号

OneNET 支持ldquo个人用户rdquo和ldquo企业用户rdquo两种注册方式你可以根据您的

实际情况选择注册方式

以个人用户注册为例用户需在对应选项依次填写用户名用户密码所在

地手机号码图片验证码以及手机验证码并完成注册注册页面如图 3-2所

示注册完成后回到主页点击ldquo登录rdquo即可进入 OneNET 的官方主页并由

此进入到你的ldquo开发者中心rdquo

如果客户产品后续需要进行规模化量产建议以企业的名义进行注册注册

时注意注册信息的准确填写另外个人版和企业版在功能上无差异

图3-2 用户账号注册页面

3212 创建产品和设备

在进入到你的ldquo开发者中心rdquo后点击右上角的 ldquo创建产品rdquo在弹出页面中

按照提示填写产品的基本信息进行产品创建在创建过程中请您按照提示尽

可能完整全面地填写相应内容这样更方便您后期对产品进行管理

创建产品页面如图 3-3 和图 3-4其中设备接入方式选择ldquo公开协议rdquo联网

方式选择跟据实际设备进行选择设备接入协议选择ldquoMQTTrdquo

中移物联网有限公司 OneNET 开发文档中心

产品创建完成后页面弹出ldquo创建产品成功rdquo如图 3-5所示点击ldquo立即

添加设备rdquo显示如图 3-6所示界面依次填写ldquo设备名称rdquo鉴权信息设备

名称自定义鉴权信息用于平台对终端设备鉴权每台设备具有唯一性建议设

置为产品出厂编号方便管理鉴权信息需写入设备

图3-3 创建产品页面

中移物联网有限公司 OneNET 开发文档中心

图3-4 创建产品页面

图3-5 创建产品成功页面

中移物联网有限公司 OneNET 开发文档中心

图3-6 添加设备页面

322 终端设备软硬件初始化

终端设备在上电以后需要完成设备的软硬件初始化硬件初始化包括各个

硬件模块的上电处理器的寄存器初始化工作模式初始化等等软件初始化包

括基础通信套件初始化应用接口初始化应用程序初始化等等

323 终端创建设备及资源

终端设备创建设备(device_id)配置产品 ID鉴权信息注册码连接

服务器 IP端口号等信息创建成功后与平台建立登陆连接连接成功后即可向

平台上报数据点

324 登录 OneNET平台

终端设备的基础通信套件完成初始化以及设备资源创建完成后可向

OneNET平台发送登陆请求返回登录结果如果参数错误或者登录超时平台会

返回登录失败如果验证通过平台会返回登录成功

若终端设备登录平台成功设备名称左边的圆形图标会由灰色(离线状态)

变成绿色(在线状态)如图 3-7所示

中移物联网有限公司 OneNET 开发文档中心

图3-7 平台侧设备状态显示

325 设备数据点上报

终端设备与平台成功建立连接后设备使用 publish 报文向平台上报数据点

平台收到数据点后保存到对应数据流下方便应用查阅数据点上报格式以及类型详见

721

图3-8 平台侧收到设备数据流显示

326 创建应用

用户可以利用上传的数据创建相关的应用发布直观的展示页面目前在平台应用孵化

器中提供了曲线图柱状图表盘物体位置图片和开关等应用

在产品详情页面点击ldquo应用管理rdquo进入应用管理主界面如下图

中移物联网有限公司 OneNET 开发文档中心

图3-9 应用管理模块

点击ldquo创建应用rdquo输入应用名称点击ldquo创建rdquo如下图

图3-10 新应用创建

保存成功后点击编辑按键进入应用编辑页面如下图

中移物联网有限公司 OneNET 开发文档中心

图3-11 应用编辑入口

图3-12 应用编辑界面

在应用编辑页面中使用左侧的控件进行应用编辑此例中我们选择表盘控件来显示

刚刚上传的数据点击表盘控件如下图所示

中移物联网有限公司 OneNET 开发文档中心

图3-13 表盘控件添加

在右侧的属性中选择设备以及数据源(及刚刚上传的数据流)如下图

图3-14 表盘控件数据流绑定

在确定好数据流之后可以看到表盘回显示成我们添加的数据的值其他的

刷新频率以及表盘显示样式读者可以自行更具需求加以修改

完成应用编辑之后点击右上角保存按钮退出应用编辑

在应用管理页面点击该应用即可查看编辑好的应用页面

中移物联网有限公司 OneNET 开发文档中心

图3-15 保存应用

图3-16 应用查看与分享

该应用可以通过共享ldquo发布链接rdquo的方式将该应用共享给他人

33 设备批量接入

单个设备可以通过平台的开发者中心添加设备的方式进行创建若用户有多

个设备直接与平台 TCP连接的终端通过手动添加需耗费大量时间人力OneNET

中移物联网有限公司 OneNET 开发文档中心

为大批量接入用户提供 3种批量创建设备的方案

331 平台设备批量复制

此种方式为选择某个设备作为复制的模板通过导入 EXCEL的方式进行设备

复制厂商可以在小批量测试时使用该功能

在设备列表中点击查看详情

图3-17 设备批量接入

在设备详情页面点击批量导入设备信息

中移物联网有限公司 OneNET 开发文档中心

图3-18 导入设备信息

点击批量复制

图3-19 批量复制

中移物联网有限公司 OneNET 开发文档中心

目前提供三种批量创建的方式 excel 导入的方式为主要接入方式选择

excel导入点击下载模板

图3-20 快速导入

图3-21 Excel导入

打开下载下来的 excel模板表中的 titledesctags等均为将要批量导

入的设备的数据其中的 title 和 auth_info 为必填选项title 为设备名

中移物联网有限公司 OneNET 开发文档中心

auth_info对应设备的鉴权信息

图3-22 Excel格式

填写 3个设备信息

图3-23 Excel内容

三个设备的 title和 auth_info都一样均为 20170808000012017080800002

2017080800003保存该表格点击ldquo点击上传rdquo上传保存好的 excel 文件

点击ldquo确定导入批量rdquo

中移物联网有限公司 OneNET 开发文档中心

图3-24 导入上传

图3-25 确认创建

可以看到在原设备目录下新增了 3个设备其名称分别为 2017080800001

20170808000022017080800003

中移物联网有限公司 OneNET 开发文档中心

图3-26 批量创建的设备

点击设备详情可以看到设备目录下各个设备的鉴权信息与表格中所填

写的内容一致

图3-27 设备ID及鉴权信息

至此完成了通过批量设备复制的方式完成设备批量创建的过程用户如果

要使用这个功能需要将自己终端的出厂序列号整理到这个 excel表中然后利

中移物联网有限公司 OneNET 开发文档中心

用上传表格的方式进行批量创建

332 应用平台调用新增设备 API

OneNET 提供了创建设备的 API接口

图3-28 新增设备API接口

其中的 auth_info 参数对应着设备的鉴权信息通过调用此 API 接口可以

实现在平台上新增设备的功能用户如果有自己的第三方应用平台进行设备管理

可以通过多次调用此接口的方式进行设备的批量创建在调用接口时需要确保每

次调用的 auth_info 参数对应着自己的每一个终端不同的出厂序列号

333 终端调用注册 API

API 实际是 HTTP 协议的通信协议终端也可以通过封装 HTTP 包发送注册

中移物联网有限公司 OneNET 开发文档中心

设备请求的方式调用 API

终端调用注册 API 创建设备并接入的流程如图 3-29所示

平台

TCP连接协议接入机

创建产品

发送连接报文

连接应答

数据应答

发送数据报文

生成连接报文

设备

发送下行命令 下发命令

解析下行命令

生成存储数据报文

解析连接应答

解析数据应答

必要流程

可选流程

存储到数据流 数据源 创建应用

心跳应答

发送心跳报文生成心跳报文

解析心跳应答

平台操作

设备操作

利用设备本身的sn和产品的设备注册码生成注册报文

TCP连接API服务器

发送注册报文

注册应答

解析设备ID

创建设备

设备开机

读取硬件中烧录的设备编号(sn)

图3-29 终端调用注册API接入流程

1) 创建产品

重要参数产品 ID注册码产品 APIKey(见附录一)

2) 生成并发送注册报文

每一个用户终端中都有厂商烧录的唯一出厂序列号(sn)终端上电

之后应该首先读取自己的 sn然后通过 1)中的注册码和 sn 一起组成注

册报文

注册报文格式如下例

POST httpapihecloudscomregister_deregister_code=6TM7OkhNsTjATvFx HTTP11

Host apihecloudscom

Content-Length 48

中移物联网有限公司 OneNET 开发文档中心

sn02136616511001titletestdevice0001

其中

6TM7OkhNsTjATvFx 为产品注册码

02136616511001 是本例中模拟的设备唯一编号

testdevice0001 是本例中模拟的设备名

若上传的数据格式以及参数鉴权均正确则平台会返回设备创建成功

返回设备 ID以及该设备对应的设备 api-key

HTTP11 200 OK

Date Wed 09 Aug 2017 064821 GMT

Content-Type applicationjson

Content-Length 95

Connection keep-alive

Server Apache-Coyote11

Pragma no-cache

errno0datadevice_id11142371keyq9Mw0zqiAPjTwqfyCk2mWrUi8=errorsucc

3) 在步骤 2)完成之后平台上的设备就已经成功创建了终端需要

重新 TCP连接到对应协议的服务器上完成设备连接(与设备进行映射)以

及上传数据的操作

34 设备 ID 与产品序列号

通过 OneNET构建的物联网系统中有两套比较重要的编码设备 ID与产品序列号

(SN)其中

产品序列号是由厂商指定的在厂商的产品范围内是保持唯一的在出厂前烧写到每

一个终端中通常包含在与平台通信的数据中并以条形码的方式贴在产品的包装上用

于从用户的角度区分每一个独立的终端

设备 ID是在平台创建设备时由 OneNET分配的平台范围内唯一的编号应用于第三

方平台调用 OneNET API时使用

在创建设备时OneNET平台需要用户以设备 sn为参数进行设备创建成功之后平

台会分配一个设备 ID这样 OneNET内部就有了一个 sn-设备 ID的映射关系

终端登陆使用的鉴权信息是出厂时烧写好的 sn鉴权通过之后平台可以将该终端

上传是数据放到对应的设备中

上层应用通过创建设备 API或者查询设备 API建立 sn-设备 ID映射表在需要操作

某一设备时首先可以获取的是终端的 sn号(因为对用户是可见的)通过映射表获取设

中移物联网有限公司 OneNET 开发文档中心

备 ID然后再通过 API访问 OneNET平台上的对应设备

两套编码在物联网系统中的应用位置如下图所示

物联网应用

OneNET

终端

(烧写sn)

HTTP API 以设备ID为参数进行API访问

接入协议以sn为鉴权参数进行设备连接

设备

设备名

设备ID

设备sn

设备标签

sn 设备ID

snmdash设备ID映射表

中移物联网有限公司 OneNET 开发文档中心

第四章 第三方应用开发

第三方应用与 OneNET 平台的业务逻辑关系如图 4-1 所示第三方应用与

OneNET平台之间通过 HTTPS请求应答的方式实现数据交互OneNET 平台为第三

方应用提供封装好的 API 接口应用平台通过调用这些 API 接口完成对 OneNET

平台的读写执行以及设备管理请求然后 OneNET 平台会将相应的指令请求发送

到终端设备OneNET 平台收到终端设备响应的数据及设备信息后会将数据及

设备信息推送到应用平台完成应答

下面将分别介绍第三方应用接入 OneNET 平台的步骤OneNET平台提供的数

据推送功能以及 OneNET 平台为第三方应用封装好的 API接口

图4-1 第三方应用与OneNET平台的逻辑关系

41 第三方应用接入 OneNET 平台

第三方应用与 OneNET平台实现数据交互的前提是已经建立连接第三方应

用接入 OneNET平台的开发流程如图 4-2所示包括三个步骤

(1) 在 OneNET 平台创建了设备该设备有对应的真实设备且能正常上报

数据

(2) 用户已经开发并部署了 OneNET平台验证接入的程序

(3) 在 OneNET 平台正确配置了第三方应用数据接收的地址(URL)

Token以及其他参数

中移物联网有限公司 OneNET 开发文档中心

在确保上述第(1)步已经实现的基础上下面将分别讲述第(2)步和第

(3)步的实现过程

图4-2 数据推送的开发流程

412 第三方应用平台接入验证程序

第三方应用平台接入验证程序工作流程如下所述当 OneNET 平台完成对第

三方开发平台的配置后会向第三方开发平台发起 URLampToken验证接入验证程

序对平台发送的验证参数进行验证验证通过后第三方开发平台会向 OneNET

平台返回验证消息当 OneNET 平台收到验证消息后说明第三方开发平台与

OneNET平台已建立连接

目前 OneNET平台为第三方应用平台提供接入验证程序的 SDK有 Javaphp

Nodejs和 C四个版本

SDK 下载地址httpsopeniot10086cndocart432html118 -ldquo数

据推送rdquo

413 OneNET 平台配置第三方应用平台

在 OneNET平台对第三方应用平台的配置界面如图 4-3所示

URL第三方开发平台的地址

Token可以自定义用于第三方开发平台接入平台握手验证

消息加解密方式有明文模式和安全模式当启用安全模式后平台端需要

用户自定义 AESKey 或者由平台随机生成在应用程序中使用该 AESKey 解密消

中移物联网有限公司 OneNET 开发文档中心

推送时间限制(秒)和推送数据限制(个)设置ldquo推送时间限制rdquoldquo推送数

据限制rdquo可以实现批量推送数据减少服务器压力当满足ldquo推送时间限制rdquo和

ldquo推送数据限制rdquo要求后OneNET 将给第三方推送数据如果没有设置ldquo推送

时间限制rdquo和ldquo推送数据限制rdquo将默认数据实时推送

图4-3 第三方开发平台的配置界面

当用户成功在 OneNET 平台配置了第三方开发平台服务器地址后点击ldquo提

交rdquo按钮后OneNET 平台会向第三方应用平台发起 URLampToken 验证请求验证

通过且收到第三方返回的验证消息后则第三方应用平台与 OneNET 平台已建立

连接之后OneNET 平台在收到设备数据时会将设备数据推送到已配置的第三

方应用平台

用户数据接收服务程序接收到 OneNET平台发送的 ldquoURLampTokenrdquo验证请求

请求的格式形如httpipporttestmsg=xxxampnonce=xxxampsignature=xxx

蓝色字体部分为用户在 OneNET平台配置的 URL常规的验证流程如下

(1)在请求中获取参数ldquononcerdquoldquomsgrdquo的值将ldquotokenrdquo(此为页面

配置参数 token的值)ldquononcerdquoldquomsgrdquo的值计算 MD5(token+nonce+msg)

加密值并且编码为 Base64字符串值

中移物联网有限公司 OneNET 开发文档中心

(2)将上一步中 Base64字符串值通过 URL Decode 计算后的值与请求参数

ldquosignaturerdquo的值进行对比如果相等则表示 token验证成功

(3)如果 token 验证成功向 OneNET 平台返回ldquomsgrdquo参数值否则返回

其他值

说明如果用户不想验证 Token 的有效性可以忽略以上步骤并直接向

OneNET平台返回ldquomsgrdquo参数值

42 OneNET 平台数据推送

平台以 HTTPS POST 请求形式向第三方应用平台注册地址推送数据推送数

据相关信息以 JSON 串的形式置于 HTTPS请求中的 body部分

第三方应用平台在接收数据时会接收到数据的明文消息或者密文消息

明文消息中以ldquotyperdquo的数值区分不同的消息而密文消息与明文消息的区别

是ldquomsgrdquo部分经过了加密处理下面将分别对明文消息密文消息以及消息相

关字段和密文的加密算法进行说明

421 明文消息

明文消息有两种消息类型分别为数据点消息和设备上下线消息而数据点

消息又分为单条数据点消息和数据点消息批量形式数据点消息批量形式中的不

同数据点是以不同时间戳区分的

(1)数据点消息(type=1)

msg

type 1

dev_id 2016617

ds_id datastream_id

at 1466133706841

value 42

msg_signature message signature

nonce abcdefgh

(2)数据点消息批量形式(type=1)

msg [

type 1

dev_id 2016617

ds_id datastream_id

中移物联网有限公司 OneNET 开发文档中心

at 1466133706841

value 42

type 1

dev_id 2016617

ds_id datastream_id

at 1466133706842

value43

]

msg_signature message signature

nonce abcdefgh

(3)设备上下线消息(type=2)

msg

type 2

dev_id 2016617

status 0

login_type 1

at 1466133706841

msg_signature message signature

nonce abcdefgh

422 密文消息

密文消息中的ldquoenc_msgrdquo是由明文消息中的ldquomsgrdquo采用 AES 加密算法而

enc_msgxxxx

msg_signature

message signature

nonceabcdefgh

423 消息相关字段说明

表4-1 消息相关字段说明

字段 字段说明

type 标识数据类型当前版本范围[15]

dev_id 设备 ID

ds_id 公 开 协 议 中 的 数 据 流 ID 其 格 式 为

objectID_instanceID_resourceID

at 平台时间戳单位 ms

value 具体数据部分为设备上传至平台或触发的相关

数据

中移物联网有限公司 OneNET 开发文档中心

status 设备上下线标识

0-下线 1-上线

login_type

设备登陆协议类型

1EDP 2nwx 3JTEXT 5JT808 6

MODBUS 7MQTT 8gr2010NB-IoT

cmd_type

命令响应的类型

1设备收到 cmd的 ACK 响应信息 2设备收到

cmd的 Confirm响应信息

cmd_id 命令 ID

msg_signatur

e 消息摘要

nonce 用于计算消息摘要的随机串

enc_msg 加密密文消息体对明文 JSON串(msg字段)的

加密

424 加密算法详述

平台基于 AES算法提供加解密技术具体阐述如下

EncodingAESKey 即消息加解密 Key 的 BASE64编码形式长度固定为 43

个字符从 a-zA-Z0-9共 62个字符中选取由服务开启时填写后

也可申请修改

AES密钥计算为 AESKey=Base64_Decode(EncodingAESKey + ldquo=rdquo)

EncodingAESKey 尾部填充一个字符的ldquo=rdquo 用 Base64_Decode 生成 32

个字节的 AESKey

AES采用 CBC 模式秘钥长度为 32 个字节(256位)数据采用

PKCS7填充 初始化 iv向量取秘钥前 16字节 PKCS7K为秘钥字

节数(采用 32)buf为待加密的内容N为其字节数Buf 需要被填

充为 K的整数倍在 buf的尾部填充(K-NK)个字节每个字节的内容

是(K- NK)具体详见toolsietforghtmlrfc2315

BASE64采用 MIME格式字符包括大小写字母各 26个加上 10个数

字和加号ldquo+rdquo斜杠ldquordquo一共 64个字符等号ldquo=rdquo用作后缀填

出于安全考虑平台网站提供了修改 EncodingAESKey的功能(在

EncodingAESKey 可能泄漏时进行修改对应上第三方平台申请时填写

的接收消息的加密对称密钥)所以建议保存当前的和上一次的

中移物联网有限公司 OneNET 开发文档中心

EncodingAESKey若当前 EncodingAESKey 生成的 AESKey解密失败则

尝试用上一次的 AESKey的解密

平台的加密消息部分为 enc_msg= Base64_Encode( AES_Encrypt

[random(16B)+msg_len(4B)+msg] )即以 16字节随机字节串拼接 4字

节表示消息体长度的字节串(此处 4 字节长度表示为网络字节序)再加

上消息本身的字节串作为 AES加密的明文再以 AES算法对明文进行加

密生成密文最后对密文进行 BASE64 的编码操作生成加密消息体

对加密消息体的解密流程为1)首先进行加密消息体的 BASE64 解码操作

aes_msg=Base64_Decode(enc_msg)2)对获取的解码内容以 AES 算法进行解密

操作获取明文部分plain_msg=AES_Decrypt(aes_msg)解密中使用的秘钥由

EncodingAESKey 计算得来使用的初始化 iv 向量为计算出的 aes 秘钥的前 16

字节3)去掉 plain_msg 的前 16 字节再以前 4 字节取出消息体长度根据消

息体长度获取真实的消息部分(推荐以消息体长度获取真实消息以兼容

plain_msg 未来可能出现的结构变更)表示加密传输的数据后两字段与明文

传输一致

43 API 接口

第三方开发平台应用层通过 Rsetful API 的方式和 OneNET平台进行交互对

接实现命令的下发数据的读写以及相关业务的交互

针对 MQTT 协议目前主要开发了以下 API 用来实现第三方开发平台向

OneNET平台请求读写执行以及设备管理请求具体见下表 4-2下面分别对每一

种 API进行说明

表4-2 API功能说明

API 类别 操作对象 API名称

需要终端响应 只需平台响应

设备

注册

更新设备注册属性

新增

更新

精确查询单个设备

中移物联网有限公司 OneNET 开发文档中心

模糊查询设备

批量查询设备状态

删除

数据流

新增

更新

查询单个数据流

查询多个数据流

删除

数据点

新增

查询

二进制数

新增

查询

触发器

新增

更新

查询单个触发器

模糊查询触发器

删除

触发数据内容

命令

发送命令

查询命令状态

查询命令相应

查询设备历史命令

视频能力 获取播放地址

APIKEY

新增

更新

查看

删除

消息订阅

按 Topic发送命令

查询订阅指定 Topic设备的列表

查询设备订阅的 Topic列表

删除产品的 Topic

查询产品的 Topic

中移物联网有限公司 OneNET 开发文档中心

432 设备

4321 注册

表4-3 设备注册

HTTP方法 POST

URL apihecloudscomregister_de

URL参数 register_code=6TM1OkhNsTjATvFx 设备注册码(必填)

HTTP内容

(示例)

sn 2015031401421 设备唯一标识 string类型最长 512字符

mac C89346DA4373 设备唯一 mac标识最长 32字符

title myedpdevice 设备名(可选) 最长 32个字符

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

keyQ1VdWoEvdkCye=d1=HcCSP6LvCw= 新设备 apikey

device_id 325018 设备 ID

说明

1 响应消息中 errno 表示错误码error 表示错误原因如果创建设备失

败则没有 data字段

2 snmac一定要必填其中一个而且只可以传一个用于鉴权就是设备

新增中的 auth_info

3 此接口根据产品设置的不同默认 allow_dup=true可以生成新设备及

key或获取原有设备及 key见下表

表4-4 对应表

产品允许重复 sn 在产品中已存在 sn 在产品中不存在

allow_dup=true 是 sn 对应的设备 id 和 key 新的设备 id 和 key

allow_dup=false 否 报错 新的设备 id 和 key

中移物联网有限公司 OneNET 开发文档中心

此接口返回的新设备默认设备名均为auto_register均为私有设

备设备协议与产品协议相同

4322 更新设备注册属性

表4-5 更新设备注册属性

HTTP方法 PUT

URL apihecloudscomregister_attr

HTTP头部 api-key xxxxddddsssaaa 必须为 masterkey

HTTP内容

(示例)

allow_dup true|false是否允许重复提交相同的设备 sn 默认 true

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

默认 allow_dup 为 true主要用于设备注册码创建设备属性限制

4323 新增

表4-6 新增设备注册属性

HTTP方法 POST

URL apihecloudscomdevices

HTTP头部 api-key xxxxddddsssaaa 必须为 masterkey

HTTP内容

(示例)

title mydevice 设备名

desc some description 设备描述(可选)

tags [chinamobile] 设备标签(可选可为一个或多个)

protocolMQTT 选择一种接入协议(可选默认为 HTTP)

location lon 106 lat 29 ele 370设备位置纬度

经度 高度(可选)

private true| false 设备私密性(可选默认为 ture)

auth_info 201503041a5829151 MQTT设备设备唯一编号

other version 100 manu china mobile 其他信息(可

选JSON格式可自定义)

HTTP响应响

应消息内容

(实例)

errno 0

error succ

data

中移物联网有限公司 OneNET 开发文档中心

device_id233444 平台分配的设备 ID

4324 更新

表4-7 更新

HTTP方法 PUT

URL apihecloudscomdevicesdevice_id

HTTP头部 api-key xxxxddddsssaaa masterkey或设备 apikey

HTTP内容

(示例)

title mydevice 设备名(可选)

desc some description 设备描述(可选)

tags [chinamobile] 设备标签(可选)

protocolMQTT 选择一种接入协议(可选)

location lon106 lat 29 ele 370设备位置经度

纬度 高度(可选)

private true| false 设备私密性(可选)

auth_info201503041a5829151 MQTT设备设备唯一编号(可选)

other version 100 manufacturer china mobile 其

他信息(可选)

HTTP响应响

应消息内容

(示例)

errno 0

error succ

中移物联网有限公司 OneNET 开发文档中心

4325 精确查询单个设备

表4-8 精确查询单个设备

HTTP方法 GET

URL apihecloudscomdevicesdevice_id

HTTP头部 api-key xxxxddddsssaaa masterkey 或设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

iddevice_id

tags [chinamobile]

onlinetrue|false

protocolMQTT

titlemy device1

descsome description

create_time2015-09-16 102222

privatetrue|false

locationele370lat17609lon17703

auth_infohellip

otherversion100manufacturerchina mobile

keys[titledevice-auto-keykey2JO3B12O1]

数据流

datastreams[

create_time 2014-10-23 202222

iddatastream_id1

unitcelsius

unit_symbolC

uuid 231a5aa9-9de4-5f2e-9e0f-015181c98429

]

4326 模糊查询设备

表4-9 模糊查询设备

HTTP方法 GET

URL apihecloudscomdevices

中移物联网有限公司 OneNET 开发文档中心

URL 参数

key_words=my 匹配关键字(可选从 id和 title字段中左匹配)

auth_info=203x1 鉴权信息(可选对应注册时的 sn参数唯一设

备编号)

tag=mobile 标签(可选)

online=true| false 在线状态(可选)

private=true| false 私密性(可选)

page=1 指定页码最大页数为 10000(可选)

per_page=30 指定每页输出设备个数默认 30最多 100(可选)

device_id=235122 指定设备 ID多个用逗号分隔最多 100个(可

选)

begin=2016-06-20 起始时间包括当天(可选)

end=2016-06-20 结束时间包括当天(可选)

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

total_count1

per_page30

page1

devices

[

id3497307

titlemy device1

desc device desc

privatetrue

protocolMQTT

onlinefalse

locationlon10655231191544001lat29535451246673

create_time2013-02-11 122233

auth_infoSYSz=8QY3r7aTQ48UKfqPnB=PybYRo=

]

4327 批量查询设备最新数据

表4-10 批量查询设备最新数据

HTTP方法 GET

中移物联网有限公司 OneNET 开发文档中心

URL apihecloudscomdevicesdatapoints

URL参数 devIds=1221122331123 设备 id用逗号隔开限制 1000 个设备

HTTP头部 api-key xxxxddddsssaaa masterkey 或设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

error ldquosuccrdquo

data

devices [

id 12323 设备 id

title daf设备名

datastreams

[

id temperature数据流名称

at 2017-02-12 102222数据流更新时间

value 12数据流最新数据

hellip

helliphellip

]

hellip

hellip

]

4328 删除

表4-11 删除设备

HTTP方法 DELETE

URL apihecloudscomdevicesdevice_id

HTTP头部 api-key xxxxddddsssaaa 可为设备级别的 Key

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

中移物联网有限公司 OneNET 开发文档中心

说明删除设备会删除该设备下所有数据流和数据点删除设备动作是异步

的系统会在后续逐步删除该设备下的数据流和数据点

433 数据流

4331 新增

表4-12 新增数据流

HTTP方法 POST

URL apihecloudscomdevicesdevice_iddatastreams

HTTP头部 api-key xxxxddddsssaaa masterkey 或设备 apikey

HTTP内容

(示例)

idtemperature 数据流名称 示例温度

tags[Tag1Tag2] 数据流标签(可选可以为一个或多个)

unitcelsius 单位(可选)

unit_symbolC 单位符号(可选)

HTTP响应响

应消息内容

(示例)

errno 0

data

ds_uuid 9e6bcac9-2c6f-59d5-adae-3955df2e7bce平台分配

数据流 UUID

error succ

4332 更新

表4-13 更新数据流属性

HTTP方法 PUT

URL apihecloudscomdevicesdevice_iddatastreamsdatastream_id

示例apihecloudscomdevices421240datastreamstemperature

HTTP头部 api-key xxxxddddsssaaa masterkey 或设备 apikey

HTTP内容

(示例)

tags[Tag1Tag2] 数据流标签(可选)

unitcelsius 单位(可选)

unit_symbolC 单位符号(可选)

HTTP响应响

应消息内容

(示例)

errno 0

error succ

中移物联网有限公司 OneNET 开发文档中心

4333 查询单个数据流

表4-14 查询单个数据流

HTTP方法 GET

URL apihecloudscomdevicesdevice_iddatastreams

URL参数 datastreams_ids = 查看的 datastream的 id

HTTP头部 api-key xxxxddddsssaaa masterkey 或该设备的设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

data [

update_at 2018-06-29 112938 数据流最后更新时

id 湿度 数据流名称

create_time 2018-06-28 170548数据流创建时间

current_value 53845013最新数据点

]

error succ

4334 查询多个数据流

表4-15 查询多个数据流

HTTP方法 GET

URL apihecloudscomdevicesdevice_iddatastreams

URL 参数

datastream_ids= 查看的 datastream的 id多个 id之间用英文逗号

分开(参数缺省时为查询所有数据流)

示例

apionenetcomdevices1234datastreamsdatastream_ids=tempgps

表示查看 temp和 gps两个数据流的信息

HTTP头部 api-key xxxxddddsssaaa masterkey 或者 该设备的设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data 数据流信息

[

idtemperature 数据流名称设备范围内唯一

tags[Tag1Tag2] 数据流标签

unitcelsius 单位

unit_symbolC单位符号

create_timexxxx-xx-xx 102222 创建时间

中移物联网有限公司 OneNET 开发文档中心

current_valuehellip该数据流下数据点最新值

update_atxx-xx-xx该数据流下数据点最新上传时间

]

[

idhumi 数据流名称设备范围内唯一

tags[Tag1Tag2]

unit_symbol

create_timexxxx-xx-xx 102222

current_valuehellip

update_atxx-xx-xx

]

[]

4335 删除

表4-16 删除数据流

HTTP方法 DELETE

URL apihecloudscomdevicesdevice_iddatastreamsdatastream_id

URL参数 无

HTTP头部 api-key xxxxddddsssaaa masterkey 或者设备 key

HTTP响应响

应消息内容

(示例)

errno 0

error succ

434 数据点

4341 新增

中移物联网有限公司 OneNET 开发文档中心

表4-17 新增数据点

HTTP方法 POST

URL apihecloudscomdevicesdevice_iddatapoints

URL参数 type=3 上传数据类型(可选默认为完整 JSON型见 HTTP内容示

例)

HTTP头部 api-key xxxxddddsssaaa masterkey 或者 设备 apikey

HTTP内容

(示例)

datastreams

[

id temperature 数据流名称或数据流模板名称

datapoints [

at 2013-04-22T003543 上传数据点时间可选如

果为空则设备云会取当前时间如果存在其格式必须为 YYYY-MM-

DDThhmmss的形式(例如2015-03-22T223112)

value 42 上传数据点值

at 2013-04-22T005543

value 84 上传数据点值

]

id key 数据流名称或数据流模板名称

datapoints [

at 2013-04-22T003543上传数据点时间可选

value hellip上传数据点值

at 2013-04-22T003543

value hellip上传数据点值

]

hellip

]

中移物联网有限公司 OneNET 开发文档中心

HTTP 响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

1 可以一次性向设备云上传多个数据流每个数据流中可以包括多个数据

点示例程序表示向设备云上数据流 temperature 和数据流 key上传数据其中

temperature数据流有两个数据点key数据流也有两个数据点

2 如果某个数据流不存在则在增加数据点时设备云会自动创建一个新

的数据流注意新数据流的 datastream id 不可为空

3 数据点表示在某个时刻该数据流的值其 at表示时间为可选字段如

果为空则设备云会取当前时间如果存在其格式必须为YYYY-MM-DDThhmmss

的形式(例如2015-03-22T223112)

4 数据点中的 value表示具体的值其值为 JSON对象可以为整型浮点

型字符串多种类型如果 value部分用双引号括起来则其在设备云存储为字

符串如果不用双引号括起来则其表示数值字符编码现在只支持 UTF-8

5 数据点对应的时间是数据点的标识的一部分相同时间的两个数据点

设备云会同时对这两个相同时间的数据点进行保存不会出现覆盖另一个数据点

的情况一般如果 at 部分取空设备云会取系统时间精度为毫秒如果在一

条命令中某一个数据流包含多个数据点都没有 at 字段设备云将会对所有数据

点进行保存

6 新增数据点支持如下简写方式在请求的 URL中增加 type字段指示所

使用的格式类型目前 type支持 345三种情况

URLapihecloudscomdevices2214570datapointstype=3

示例temperature225humidity952

表示在数据流 temperature中增加一个数据点 225在 humidity 中增加一

个数据点 952

URLapihecloudscomdevices2214570datapointstype=4

示例temperature2015-03-22T223112225

表示在数据流 temperature中加一个数据点在 2015年 3月 22 日 22点 31

中移物联网有限公司 OneNET 开发文档中心

分 12秒的值为 225

URLapihecloudscomdevices2214570datapointstype=5

示例temperature2015-03-22T223112225pm2589

表示在数据流 temperature中加一个数据点即 2015年 3月 22 日 22点 31

分 12秒的值为 225在数据流 pm25中添加一个数据点即当前时间的值为 89

4342 查询

表4-18 查询数据点

HTTP方法 GET

URL apihecloudscomdevicesdevice_iddatapoints

URL 参数

datastream_id=abc 查询的数据流多个数据流之间用逗号分隔

(可选)

start=2015-01-10T080035 提取数据点的开始时间(可选)

end=2015-01-10T080035 提取数据点的结束时间(可选)

duration=3600 查询时间区间(可选单位为秒)

start+duration按时间顺序返回从 start开始一段时间内的数据点

end+duration按时间倒序返回从 end回溯一段时间内的数据点

limit=100 限定本次请求最多返回的数据点数0ltnlt=6000(可选

默认 1440)

cursor= 指定本次请求继续从 cursor位置开始提取数据(可选)

sort=DESC | ASC 值为 DESC|ASC时间排序方式DESC倒序ASC升

序默认升序

ltnlt=6000(可选默认 1440)

HTTP头部 api-key xxxxddddsssaaa masterkey 或者 该设备的设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

cursor70921_3771908_1472355096

datastreams[

idtemperature数据流名称或数据流模板名称

datapoints[

at xxxx-xx-xx 102222value42数据点上传时间和

at xxxx-xx-xx 102222value84

]

中移物联网有限公司 OneNET 开发文档中心

idkey 数据流名称或数据流模板名称

datapoints[

at xxxx-xx-xx 102222valuehellip

atxxxx-xx-xx 102222valuehellip

]

hellip

]

1 若不携带任何参数平台返回本设备所存在的所有数据流中的最新数据

(这一种情况下查询时出现时延较大的性能问题建议在 URL 参数中加上

newadd参数并将其值赋为 true如 newadd=true)

2 若不携带数据流 id参数携带 limit 参数时会返回该设备每个数据流

最多 limit 条数据

3 若要查看某一条数据流数据需在上述 URL中增加参数 datastream_id

4

apihecloudscomdevices564280datapointsdatastream_id=tempamplimit

=10会返回数据流temp中最近的 10个数据点

5 要查看某一条数据流在某个时间范围内的数据可以在增加 start和 end

参数

示例

apihecloudscomdevices564280datapointsdatastream_id=temper

atureampstart=2013-05-12T171233ampend=2013-06-12T172233 表示查询本设

备对应的数据流在 2013 年 5 月 12 日 17 点 12 分 33 秒到 17 点 22 分 33 秒的数

据点注意如果 start 参数存在end参数不存在表示取 start后的所有数据

如果 start 不存在end 存在设备云会忽略 end参数注意日期时间格式格

式必须为示例中的格式YYYY-MM-DDThhmmss例如2013-05-12T171233

日期和时间之间用大写字母 T 分隔start 和 end 之间的时间间隔最大为 1 年

超过一年会忽略

如果指定了 start 参数则可能返回的数据点的数目会很多此时默认会返

回最多 100 个数据点可以使用 limit 参数设定返回多少个数据点最大为

6000个数据点当实际的数据点数目多于 limit 限定的数目时返回的 json串

中移物联网有限公司 OneNET 开发文档中心

中会有一个 cursor 字段下一次请求的命令行中可以携带此 cursor 字段表示接

着遍历本数据流此 cursor字段标识上次取出数据点后下一个数据点的位置

435 二进制数据

4351 新增

将二进制数据将作为数据点保存到设备下的某个数据流中设备云返回该二

进制数据的索引号

表4-19 新增二进制数据

HTTP方法 POST

URL apihecloudscombindata

URL参数 device_id=421590 数据所属设备(必选)

datastream_id=bin 该数据所属已经存在的数据流(必选)

HTTP头部 api-key xxxxddddsssaaa masterkey 或者该设备的设备 key

HTTP 内 容

(示例)

普通二进制数据文件图像等

(最大限制为 800上传时间间隔需大于 1ms)

HTTP响应响

应消息内容

(示例)

errno 0

error succ

data

index3491506_1475204886914_bin 二进制数据索引号

4352 查询

表4-20 查询二进制数据

HTTP方法 GET

URL apihecloudscombindataindex

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

普通二进制数据文件图像等二进制形式数据

436 触发器

4361 新增

表4-21 新增触发器

HTTP方法 POST

中移物联网有限公司 OneNET 开发文档中心

URL apihecloudscomtriggers

HTTP头部 api-key xxxxddddsssaaa 必须为 masterkey

HTTP内容

(示例)

titlewen du jian kong 设备名(可选)

ds_idgps 数据流名称(id)(可选)

dev_ids[10272345615523] 设备 ID(可选)

ds_uuids[ 数据流 uuid(可选)

9ad09uac-7446-512f-b07c-90jdnzj8120ad

4599436e-7146-5349-b07c-79fa0919cs62

]

urlxxbbcom

typegt | gt= | lt | lt= | == | inout | in | out |change | frozen |

live

threshold100 阙值根据 type不同见以下说明

1) type 为gt|gt=|lt|lt=|==时threshold必须为数值

2) type为 inout时threshold 设置为lolmt40 uplmt52 表示

数据流的值首次进入或离开闭区间[4052]时触发

3) type为 change时threshold 参数不用传递当上传的值有改变时触发

告警

4) type为 frozen时threshold 为数值指定距离最后一次数据上报多少

秒内未上报数据触发告警同时被监控对象进入 frozen状态

5) type 为 live 时threshold 为数值指定距离最后一次数据上报多少秒

后上报数据触发告警

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

tirgger_id233444 触发器 ID

说明

1触发器的含义是当指定范围内的数据点满足触发条件的要求时会向

url参数指定的地址发送 post请求

2触发器有三种工作触发模式

1)在请求参数中单独指定了 ds_id不包括其他参数那么当前项目下

中移物联网有限公司 OneNET 开发文档中心

所有设备的数据流中数据流名称符合 ds_id 的数据都会进入触发判断逻辑

2)在请求参数中单独指定了 ds_uuids 数组那么只有这些指定的数据

流会进入触发判断逻辑

3)在请求参数中指定了 ds_id 和 dev_ids那么只有这些指定的设备的

数据流会进入触发判断逻辑

4362 更新

表4-22 更新触发器属性

HTTP方法 PUT

URL apihecloudscomtriggerstirgger_id

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP内容

(示例)

titlewen du jian kong

ds_uuids[

9ad09uac-7446-512f-b07c-90jdnzj8120ad

4599436e-7146-5349-b07c-79fa0919cs62

]

urlxxbbcom

typegt | gt= | lt | lt= | == | inout | in | out | exp | change |

frozen | live

threshold100

注若要修改 type需要对应设置 threshold

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

4363 查询单个触发器

表4-23 查询单个触发器

HTTP方法 GET

URL apihecloudscomtriggerstirgger_id

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

idtrigger_id1

中移物联网有限公司 OneNET 开发文档中心

titlewen du jian kong

ds_uuids[

datastream1_uuidrdquo

datastream2_uuidrdquo

datastream3_uuidrdquo

]

urlxxbbcom

typegt|gt=|lt|lt=|==|in|out|exp|change|frozen|live

threshold100

invalidtrue 触发器是否已失效

create_timexx-xx-xx 102222

4364 模糊查询触发器

表4-24 模糊查询触发器

HTTP方法 GET

URL apihecloudscomtriggers

URL 参数

title=name 指定触发器名称

page=1 指定页码可选

per_page=10 指定每页输出个数可选默认 10最多 100

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

total_count600

per_page30

page1

triggers[

idtrigger_id1

titlewen du jian kong

ds_uuids

[datastream1_uuidrdquo datastream2_uuidrdquo]

urlxxbbcom

typegt|gt=|lt|lt=|==|in|out|exp|change|frozen|live

threshold100

invalidtrue 触发器是否已失效

create_timeXXXXXXXX

中移物联网有限公司 OneNET 开发文档中心

]

说明触发器失效是指触发器所依赖的数据流或者设备被删除了此时触发

器永远不会有效触发事件

4365 删除

表4-25 删除触发器

HTTP方法 DELETE

URL apihecloudscomtriggerstirgger_id

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno 0

error succ

4366 触发数据内容

触发数据是指当 OneNET 设备云判断某个触发器的触发条件满足时会通过

POST方式向外抛出的 URL请求在 HTTP的 POST消息体中会携带如下格式的 JSON

字符串

表4-26 触发器内容

数据内容

(示例)

trigger

id1

threshold90

typegt

current_data[

dev_id2656

ds_idgps

ds_uuidFWEF-ZFW-ZFW-ZFWW

at2009-09-07T121602001403Z

value100

dev_id2656

ds_idtemper

中移物联网有限公司 OneNET 开发文档中心

ds_uuidFEWEF-ZFWFWW-WFWW-FWEFFWW

at2009-09-07T121602001403Z

value882

]

437 命令

命令是指应用发送命令数据给 OneNET设备云再由 OneNET设备云转发给终

端设备终端设备收到命令后可以向设备云反馈响应的一种工作机制命令下发

后应用可以通过 API查询命令状态和提取命令的响应数据

命令的执行步骤如下

1应用通过 API 向设备云发送命令数据

2设备云生成该命令的 uuid作为该命令的唯一标识并向应用返回同时向

终端设备转发命令数据

3 终端设备收到命令数据后执行命令数据可以生成响应也可以不响应

4设备云跟踪记录命令的响应如果设备有响应就关联命令 uuid和响应

结果

5应用通过 API 向设备云提取命令执行结果(API 请求中携带命令 uuid 标

识)

特别说明

命令下发到终端设备后如果终端设备 10 秒内未收到响应则此命令的状

态将被设置为超时应用通过 API 查询命令状态时会反馈超时超过 10 秒后

收到的响应会被丢弃

终端设备针对同一条命令回复多条命令响应只有在未超时时间内收到的最

后一条是有效响应前面的响应包将会被覆盖因此终端设备应该对每个命令只

有一个响应包

4371 发送命令

表4-27 发送命令

HTTP方法 POST

URL apihecloudscomcmds

URL 参数 device_id=415120 接收该数据的设备 ID(必选)

中移物联网有限公司 OneNET 开发文档中心

qos=0 | 1 是否需要响应默认为 0

0不需要响应即最多发送一次不关心设备是否响应

1需要响应如果设备收到命令后没有响应则会在下一次设备登陆

时若命令在有效期内(有效期定义参见 timeout参数)则会继续发送

对响应时间无限制多次响应以最后一次为准

本参数仅当 type=0时有效

timeout=300 命令有效时间默认 0

0在线命令若设备在线下发给设备若设备离线直接丢弃

gt0 离线命令若设备在线下发给设备若设备离线在当前时间

加 timeout时间内为有效期有效期内若设备上线则下发给设备单

位秒有效围0~2678400

本参数仅当 type=0时有效

type=0 | 1 默认 00发送 CMD_REQ包1发送 PUSH_DATA包

HTTP头部 api-key xxxxddddsssaaa masterkey或者设备 apikey

HTTP内容 用户自定义数据jsonstring二进制数据(小于 64K)

HTTP响应响

应消息内容

(示例)

errno 0

error succ

data

cmd_uuid2302-312-FWs 命令 id

4372 查询命令状态

表4-28 查询命令状态

HTTP方法 GET

URL apihecloudscomcmdscmd_uuid

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno 0

error succ

data

status1

0设备不在线|Device not online

1命令已创建| Command Created

2命令已发往设备| Command Sent

3命令发往设备失败| Send Command Failed

4设备正常响应| Command Response Received

5命令执行超时| Command Response Timeout

6设备响应消息过长 | Command Response Too Large

descldquosendingrdquo

中移物联网有限公司 OneNET 开发文档中心

4373 查询命令响应

表4-29 查询命令响应

HTTP方法 GET

URL apihecloudscomcmdscmd_uuidresp

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP 响应响

应消息内容

用户设备返回的响应内容

4374 查询设备历史命令

表4-30 查询设备历史命令

HTTP方法 GET

URL apihecloudscomcmdshistoryltdevice_idgtltdevice_idgt

URL 参数

start=2015-01-10T080035 查询的开始时间(可选)

end=2015-01-10T080535 查询的结束时间(可选)

page=1 指定页码最大页数为 10000(可选)

per_page=30 指定每页输出设备个数默认 30最多 100(可选)

HTTP头部 api-key xxxxddddsssaaa

HTTP响应响

应消息内容

errno 0

error succ

data

page 1当前页码

per_page 10当前每页总数

total_count 100

items [

cmd_uuid 2302-312-FWs

device_id 2设备 ID

expire_time 2016-07-05 000000过期时间

status 0命令状态

send_time 2016-07-05 000000发送时间

confirm_time 2016-07-05 000000响应时间

confirm_body 2463726571007b202274797022 响应内容

16进制字符

body 2463726571007b202274797022请求内容16进制字符

hellip

中移物联网有限公司 OneNET 开发文档中心

hellip

]

438 视频能力

4381 获取播放地址

表4-31 获取播放地址

HTTP方法 GET

URL apihecloudscomipcrtmp_address

URL 参数

device_id= 接收该数据的设备 ID(必填)

channel_id = 对应数据流名称中的 channelnum

protocol_type = 播放协议类型 0rtmp1hls2http-flv

HTTP头部 api-key xxxxddddsssaaa masterkey或者设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

errorrdquosuccrdquo

ldquodatardquo

addripport

accessTokenldquo字符串rdquo

439 APIKEY

4391 新增

表4-32 新增 APIKEY

HTTP方法 POST

URL apihecloudscomkeys

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP内容

(示例)

title sharing key key 的命名

permissions [

resources [ 被授权的资源

中移物联网有限公司 OneNET 开发文档中心

dev_id 424 被授权的设备 id

dev_id 425 被授权的设备 id

hellip

hellip

]

access_methods [ 被授权的命令

get

put

post

]

]

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data key2302-312-FWs key_string

说明授权命令是可选的另外被授权的命令也可以是 getputpost 的

一个或几个如只授权 get和 put命令

access_methods [getput]

4392 更新

表4-33 更新 APIKEY

HTTP方法 PUT

URL apihecloudscomkeyskey_string

HTTP头部 api-key xxxxddddsssaaa masterkey(注只能为 master-key)

HTTP内容

(示例)

title sharing key key 的命名

permissions [

resources [ 被授权的资源

dev_id 424 被授权的设备 id

ds_idfan1 数据流 id可选

中移物联网有限公司 OneNET 开发文档中心

dev_id 425 被授权的设备 id

ds_idfan1 数据流 id可选

hellip

hellip

]

access_methods [ 被授权的命令可选

get

put

post

]

]

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

说明

1对于 masterkey 不允许更新操作masterkey 默认具有最大权限可以访

问该用户名下所有设备所有数据

可以进行 POSTGETPUTDELETE操作如果更新 master key 系统会返回

失败

2授权命令是可选的另外被授权的命令也可以是 getputpost 的一个

或几个如只授权 get和 put命令

access_methods [getput]

3API key 更新是覆盖操作会将原来存在的授权资源和授权命令覆盖不

会保留原来的授权资源和授权命令

4393 查看

中移物联网有限公司 OneNET 开发文档中心

表4-34 查看 APIKEY

HTTP方法 GET

URL httpapihecloudscomkeys

URL 参数

key = FWJPO-FZFHW-FFEWB可选只查看该 key相关信息

page = 1 指定页码 可选

per_page = 10 指定每页输出个数可选默认 10最多 100

device_id = xxbbcc可选只查看与该设备相关的非 master-key

HTTP头部 api-key xxxxddddsssaaa masterkey(注只能为 master-key)

HTTP响应响

应消息内容

(示例)

errno 0

data

per_page 30

total_count 2

keys [

create_time 2015-11-04 142552

title Auto-generated-master-key

key 03GeDLYk0WNk1V338g7yndKZYkQA

create_time 2015-12-03 100041

permissions [

resources [

dev_id 564280

]

]

title 设备 1测试 Key

key vuHebEWefiU2Ueo5ouoCc1CUsYQ=

]

page 1

error succ

中移物联网有限公司 OneNET 开发文档中心

4394 删除

表4-35 删除 APIKEY

HTTP方法 DELETE

URL httpapihecloudscomkeyskey_string

HTTP头部 api-key xxxxddddsssaaa masterkey(注只能为 master-key)

HTTP 响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

4310 消息订阅

43101 按 Topic 发送命令

表4-36 按 Topic 发送命令

HTTP方法 POST

URL apihecloudscommqtt

URL参数 topic=xxx 设备订阅的主题(必选)

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP 内 容

(示例)

HTTP响应响

应消息内容

(示例)

errno0

errorldquosuccrdquo

data

total_count1

per_page30

page1

devices [123123433333]

43102 查询订阅指定 Topic设备的列表

表4-37 查询订阅制定 Topic设备的列表

HTTP方法 GET

URL apihecloudscommqtttopic_device

URL 参数

topic=xxx 设备订阅的主题(必选)

page=1 当前页码 必填大于等于 1

per_page=10 每页 必填范围 1-1000

中移物联网有限公司 OneNET 开发文档中心

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP内容

(示例)

HTTP响应响

应消息内容

(示例)

errno0

errorldquosuccrdquo

data

total_count1

per_page30

page1

devices [123123433333]

43103 查询设备订阅的 Topic列表

表4-38 查询设备订阅的 Topic列表

HTTP方法 GET

URL apihecloudscommqttdevice_topicdevice_id

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno0

errorldquosuccrdquo

data

[topic_name1 topic_name2 topic_name3]

43104 删除产品的 Topic

表4-39 删除产品的 Topic

HTTP方法 DELETE

URL apihecloudscommqtttopic

URL参数 name=xxx topic名(必选)

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno0

errorldquosuccrdquo

中移物联网有限公司 OneNET 开发文档中心

43105 查询产品的 Topic

表4-40 查询产品的 Topic

HTTP方法 GET

URL apihecloudscommqtttopic

URL参数 无

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno0

errorldquosuccrdquo

data

[topic_name1topic_name2topic_name3]

中移物联网有限公司 OneNET 开发文档中心

第五章 接入实例

51 MQTT-device 接入

511 工具下载

为方便开发人员直观感受使用 mqtt 协议进入平台的便利可使用平台提供

的 MQTT 设备模拟器进行接入平台请在首页-gt开发文档-gt资源下载-gt13 调试

工具下载进行下载如下图

图5-1 资源下载

下载地址

httpupfileshecloudscom123ueditor201707125d5bc37eca39c0c5b7a5bcb9

0e451eeerar

中移物联网有限公司 OneNET 开发文档中心

512 界面说明

图5-2 界面说明

513 使用方法

5131 创建产品

如 323 的过程在设备接入协议中选择 MQTT

中移物联网有限公司 OneNET 开发文档中心

图5-3 选择连接协议

5132 创建设备

如 323描述在平台上新建一个设备

5133 建立连接

在产品概况中可以查看产品 ID此信息填入模拟器 ProductID一栏如下图

图5-4 产品ID

在平台上进入设备信息页面可查看设备 ID及鉴权信息(此鉴权信息是新建设备时候填

写的鉴权信息)如下图

中移物联网有限公司 OneNET 开发文档中心

图5-5 设备ID及鉴权信息

相应把设备 ID及鉴权信息填入模拟器之中然后点击连接按钮如果未弹出提示对话

框则表示设备鉴权成功如下图

图5-6 连接成功

中移物联网有限公司 OneNET 开发文档中心

5135订阅与发布

演示本操作需要在 OneNet平台建立两个基于 MQTT协议的设备一个用于消息发布

另一个用于消息订阅

图5-7 设备状态

开启两个模拟器分别模拟以上两个设备然后建立连接

首先使用订阅主题打开第一个模拟器模拟消息订阅者

图5-8 订阅主题

其次发布主题打开第二个模拟器模拟消息发布者

中移物联网有限公司 OneNET 开发文档中心

图5-9 发布主题

经过以上两个操作后查看模拟消息订阅者的模拟器则收到了主题

为rdquotopic_namerdquo的消息如下图

中移物联网有限公司 OneNET 开发文档中心

图5-10 收到的主题

5136接收平台指令

建立连接后模拟器也可接收来自平台的指令具体操作如下

先打开模拟器-gt建立连接-gt选中【[OneNet]平台指令接收】选项栏利用平台下发指

令功能下发如下图平台下发指令

图5-11 平台发送命令

中移物联网有限公司 OneNET 开发文档中心

图5-12 下发指令

填写好将要发送的消息后点击【发送命令】按钮则模拟器成功接收到来自平台的

数据如下图模拟器截图

图5-13 模拟器收到的指令

5137上传数据点

Mqtt支持 Json 数据格式上报数据现根据 Json几种格式举一些例来演示怎么利用

模拟器上传数据

1)使用 Json数据 Type1上传 Json数据

datastreams[idtemperaturedatapoints[value255]]

中移物联网有限公司 OneNET 开发文档中心

如下模拟器上传数据界面

图5-14 Type1数据格式

则在平台数据展示中则可看到上传的数据点

图5-15 收到数据展示

2)使用 Json数据 Type3示例 Json数据为

temp32humi98

模拟器发送数据截图

中移物联网有限公司 OneNET 开发文档中心

图5-16 Type3数据格式

平台数据展示截图

图5-17 数据展示

3)使用 Json数据 Type4示例 Json数据为

temperature233pm2589

模拟器上传数据截图

中移物联网有限公司 OneNET 开发文档中心

图5-18 Type5数据格式

平台接收数据展示截图

图5-19 数据展示

52 基于麒麟开发板的 MQTT 接入实例

OneNet 平台为使用户能快速接入发布麒麟座开发板官网提交您的创意免

费申请开发板下面利用麒麟座开发板 V31 演示开发板采集温湿度使用 MQTT发

送到平台的接入流程

开发板申请链接httpsopeniot10086cneventdetail185html

521 搭建开发环境

OneNET 平台提供的麒麟座开发板是基予 STM32 单片机开发的一块功能应用

板开发板包含 MCU温湿度传感器GSM 模块WIFI 模块电源模块键盘

中移物联网有限公司 OneNET 开发文档中心

LED以及 lcd显示接口等满足用户对平台接入的基本需求能快速接入到平台

资料包配备完整工程代码方便工程移植等使用

目前 STM32 开发常用的 IDE 有 IARMDK 等我挑选 MDK 作为开发工具打

开工具包先安装 MDK511A安装完毕后再安装 MDKCM511A开发板所有资料软件

工具包下载案例包

案例包下载链接

httpspanbaiducoms1UB1qZGrVuovSVdbqqXP0Lglistpath=2F

图5-20 MDK包

安装完毕并安装 license详细步骤不做演示

中移物联网有限公司 OneNET 开发文档中心

522 连接硬件准备

5221 开发板接线

图5-21 开发板接线图

电源DC-5V

运行信息USART1-MicroUSB 线

软件下载ST-Link

中移物联网有限公司 OneNET 开发文档中心

5222 ESP8266跳线帽连接

图5-22 ESP8266跳线帽连接

中移物联网有限公司 OneNET 开发文档中心

5223 M6312跳线帽连接

图5-23 M6312跳线帽连接

523 工程实例

例程使用最简单易懂的方式编写着重让大家明白接入流程和协议

10~12 协议专属例程是展示该协议下的专用功能比如 EDP 的 PushData

中移物联网有限公司 OneNET 开发文档中心

HTTP 注册新设备MQTT 的订阅发布等具体使用方法查看该目录下的《使用

说明》

图5-24 工程文件

524 开发工程文件

中移物联网有限公司 OneNET 开发文档中心

图5-25 工程文件

图5-26 工程结构

默认已创建好产品以及设备打开文件工程 onenetc 和 esp8266c 修改例

程的 WIFI 信息和平台信息

分别在 esp8266c 的 36和 onenetc的 414345行

图5-27 更改项

525 编译下载

开发版接串口会有相应状态显示平台设备显示在线状态绿色为连接成功

设备在线灰色表示未连接并在数据展示中显示对应主题的所有数据

中移物联网有限公司 OneNET 开发文档中心

图5-28 连接成功

图5-29 收到数据

其他实例详情请见httpsopeniot10086cnbbsthread-1266-1-1html

中移物联网有限公司 OneNET 开发文档中心

第六章 MQTT 协议详解

61 设备与平台通信协议包格式

协议就是通信双方的一个约定即表示第 1字节传输的什么第 2字节

传输的什么helliphellip在 MQTT协议中一个 MQTT 数据包由固定头(Fixed

header) 可变头(Variable header) 消息体(payload)三部分构成

MQTT 数据包结构固定头部+可变头部+消息体

固定头(Fixed header)存在于所有 MQTT数据包中表示数据包类型及

数据包的分组类标识固定头格式如下

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 - 5 Remaining Length(该字段占用 1-4个字节)

目前平台版本支持的 Packet Type如下

名字 值 流向 描述

CONNECT 1 C-gtS 客户端请求与服务端建立连接

CONNACK 2 S-gtC 服务端确认连接建立

PUBLISH 3 CS 发布消息

PUBACK 4 CS 收到发布消息确认

PUBREC 5 CS 发布消息收到

PUBREL 6 CS 发布消息释放

PUBCOMP 7 CS 发布消息完成

SUBSCRIBE 8 C-gtS 订阅请求

SUBACK 9 S-gtC 订阅确认

UNSUBSCRIBE 10 C-gtS 取消订阅

UNSUBACK 11 S-gtC 取消订阅确认

PING 12 C-gtS 客户端发送 PING(连接保活)命令

PINGRSP 13 S-gtC PING命令回复

DISCONNECT 14 C-gtS 断开连接

可变头(Variable header)存在于部分 MQTT 数据包中数据包类型决定

了可变头是否存在及其具体内容

消息体(Payload)存在于部分 MQTT 数据包中表示客户端收到的具体内

中移物联网有限公司 OneNET 开发文档中心

不同类型数据包中可变头和消息体包含关系如下

消息类型 Variabl

e

Header

Payloa

d

CONNECT 有 有

CONNACK 有 有

PUBLISH 有 有

PUBACK 有 无

PUBREC 有 无

PUBREL 有 无

PUBCOMP 有 无

SUBSCRIBE 有 有

SUBACK 有 有

UNSUBSCRIBE 有 有

UNSUBACK 有 无

PING 无 无

PINGRSP 无 无

DISCONNECT 无 无

62 平台支持数据包类型

621 CONNECT(客户端请求与服务端建立连接 client -gt server)

固定头(Fixed Header)

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 - 5 Remaining Length(该字段占用 1-4个字节)

MQTT Packet Type 值为 0001表示该数据包为请求连接数据包

Remaining Length 剩余长度占 1-4字节

可变头(Variable Header)

包含内容如下

Description 7 6 5 4 3 2 1 0

byte

1-2

ProtocolNa

me Length

0 0 0 0 0 0 0 0

0 0 0 0 0 1 0 0

byte

3

lsquoMrsquo 0 1 0 0 1 1 0 1

byte

4

lsquoQrsquo 0 1 0 1 0 0 0 1

中移物联网有限公司 OneNET 开发文档中心

byte

5

lsquoTrsquo 0 1 0 1 0 1 0 0

byte

6

lsquoTrsquo 0 1 0 1 0 1 0 0

Byte

7

Protocol

Level

0 0 0 0 0 0 0 1

Byte

8

Connect

Flag

Use

r

flag

Passwo

rd

flag

WillReta

in

Flag

WillQo

s Flag

WillFl

ag

CleanSessi

on

Flag

Reser

ve

Byte

9-10

KeepAlive

(1) 版本

Protocol Level 必须设置为 4平台只支持协议版本 v 311不支持更老

的版本使用第三方客户端时需要注意选择正确的版本

(2) user flag 与 password flag

平台不允许匿名登陆因此这两个标志位在连接时必须设置为 1否则认为

协议错误平台将会断开连接

(3) Will flag 与 WillretainflagWillQosFlag

Will flag 为 0时WillQosFlag 和 WillRetainFlag 必须为 0Will Flag

为 1时WillQosFlag 只能为 012

1当该设备下一次正常上线后服务器会清除之前的 will 消息(包括

retain 消息)

2如果设备上线时设置了 Will Topic 和 msg且将 WillRetainFlag 设

置为 1只有设备异常断开后服务器才会将该 Will msg 分发给新的 Will

Topic 的订阅者且 Qos 级别以订阅的 Request qos 级别为准

3如果设备上线时设置了 Will Topic 和 msg且将 WillRetainFlag 设

置为 0服务器不会存储该消息当设备异常断开后会将该 Will msg 以设

备设置的 WillQosFlag的 Qos级别进行分发

(4) CleanSessionFlag

若客户端将 clean session 标志位设置为 0当其断开后平台将会保存

sessionsession 需保持的内容包含

客户端订阅的 topic列表

中移物联网有限公司 OneNET 开发文档中心

还未完成确认的 Qos1Qos2级别的 publish消息

客户端保存 session 的内容包含

已经发送到服务端的但还没有收到确认的 Qos1Qos2消息列表

待发送的 Qos0列表

若客户端将 clean session 标志位设置为 1当其断开后平台会清除设备

的订阅列表及未完成确认的 Qos1Qos2 的 publish消息

(5) Reserve

保留位置 0

(6) KeepAlive 保活时间

每个客户端可自定义设置连接保持时间最短 120秒最长 65535 秒

消息体(Payload) Description 是否必须存在 格式

Field1 Client

Identifier

是 2字节字串长度 + utf8字

Field2 UserName 是 2字节字串长度 + utf8字

Field3 UserPassword 是 2字节字串长度 + utf8字

目前平台支持的方式为以后两种

方式 1设备 ID项目 ID鉴权信息(auth_info)

字段设置 消息示例

client_id设置为平台创建设备时的

设备 id

username设置为ldquo项目 IDrdquo

password设置为ldquo鉴权信息

(auth_info)rdquo

client_id=rdquo123rdquo

username=rdquo433223rdquo

password=rdquo注册的鉴权信息rdquo

各字段说明如下

鉴权信息(auth_info)在平台申请设备时填写设备的 auth_info 属性(数

字+字母的字符串)该属性需要产品内具备唯一性(可使用设备出厂唯一编号)

方式 2设备 ID + APIKey(项目 ID也需要填写)

字段设置 消息示例

client_id设置为平台创建设备时的

设备 ID

username设置为ldquo项目 IDrdquo

client_id=rdquo123rdquo

username=rdquo433223rdquo

password=Api Key

中移物联网有限公司 OneNET 开发文档中心

password设置为ldquoAPI鉴权信息

(auth_info)rdquo

项目 ID在平台添加项目时平台生成的 ID

APIKey在平台上创建产品时生成的 APIKey

连接包实例如下

Send one mqtt packet

FixHeader

PacketTag = 16

PacketType = 1

RemainLength = 34

VariableHeaderConnect

protocol_name_len_= 4

protocol_name_= MQTT

protocol_level_= 4

connect_flag_= 192

keep_alive_= 12000

client_id_len_= 8

client_id_= 34764813

usr_name_len_= 6

usr_name_= 150295

password_len_= 4

password_= push

MQTT0x10 0x22 0x00 0x04 0x4D 0x51 0x54 0x54 0x04 0xC0 0x2E 0xE0 0x00 0x08 0x33

0x34 0x37 0x36 0x34 0x38 0x31 0x33 0x00 0x06 0x31 0x35 0x30 0x32 0x39 0x35 0x00

0x04 0x70 0x75 0x73 0x68

Send One Packet Succ

中移物联网有限公司 OneNET 开发文档中心

622 CONNACK (服务端确认连接建立)

Fixed Header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type = 2 0 0 0 0

byte2 - 5 Remaining Length(该字段占用 1-4个字节)

Variable Header

Description 7 6 5 4 3 2 1 0

byte 1 Acknowledge Flags 0 0 0 0 0 0 0 Sp

byte 2 Return Code x x x x x x x x

Sp Session Present Flagsession信息在服务器已保持置 1未保存置

0

返回码说明

返回码 描述

0 成功

1 协议版本错误

2 非法的 clientid

3 服务不可用

4 用户名或密码错误

中移物联网有限公司 OneNET 开发文档中心

5 非法链接(比如 token非法)

失败

如果 connect包不符合协议内容约束则直接断掉连接而不需要发送 conn

ack包

如果鉴权或授权失败回复一个带非 0错误码的 connack包

成功

必须断掉重复的 clientid

执行 cleansession 对应的操作

必须回复一个 connack回复码为 0

开始消息传递并加入 keepalive的监视

PS客户端需要等到服务端的 connack报文才能发送后续的数据包

623 PUBLISH(发布消息 client -gt server)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type DUP f

lag

QoS Level RETAI

N

byte2 - 5 Remaining Length(该字段占用 1-4 个字节)

DUP

QoS2Qos1如果为 0则表示是第一次发送该包如果为 1则表示

为重复发送的包

Qos0DUP 必须为 0

中移物联网有限公司 OneNET 开发文档中心

QoS 指定了该 publish包的 Qos 等级如下

Qos 值 Bit2 Bit1 描述

0 0 0 最多发送一次

1 0 1 至少发送一次

2 1 0 只发送一次

RETAIN 保留标志位如果为 1服务器存储最新一条 RETAIN消息以便

分发给新的订阅者如果 RETAIN为 1Payload 为空服务器分发该消息后会

清空该 topic 下的 RETAIN 消息

PS该版本实现了 Qos0Qos1Qos2

Variable Header

Description 格式 是否必须

Field1 TopicName 2 字节字串长度 + utf8字

Field2 PacketIdent

ifier

2 字节 QoS0否QoS1Qos2是

Payload

内容根据不同业务自定义

624 PUBLISH(发布消息 server -gt client)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type DUP f

lag

Qos Level RETAIN

byte2 - 5 Remaining Length(该字段占用 1-4个字节)

DUP

Qos2QoS1如果为 0则表示是第一次发送该包如果为 1则表示

为重复发送的包

中移物联网有限公司 OneNET 开发文档中心

Qos0DUP 必须为 0

QOS 指定了该 publish包的 qos等级如下

Qos 值 Bit2 Bit1 描述

0 0 0 最多发送一次

1 0 1 至少发送一次

2 1 0 只发送一次

RETAIN如果服务器分发的消息是 RETAIN 消息则将该标志位置 1否则置

0

PS该版本实现 Qos0Qos1Qos2其中服务器分发消息的 Qos级别是以 Clien

t-gtServer 发送的 publish 包的 qos 等级为准非订阅的 topic 的 Qos 等级R

etain 消息是以订阅的 Request Qos 级别进行推送

VariableHeader

Description 格式

Field1 TopicName 2 字节字串长度 + utf8字

Payload

内容根据不同业务自定义

625 PUBACK(收到发布消息确认)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

中移物联网有限公司 OneNET 开发文档中心

626 PUBREC(发布消息收到)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

627 PUBREL(发布消息释放)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

628 PUBCOMP(发布消息完成)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

中移物联网有限公司 OneNET 开发文档中心

byte 1~

2

PacketIdentifier PacketIdentifier

629 SUBSCRIBE(订阅请求)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

Payload

Description 格式

Byte1~

n

TopicName 2 字节字串长度 + utf8字

Byten+

1

Request Qos 服务质量要求(只能为 0

12)

topic 说明

可以包含一个或多个 topic

topic必须是数字英文反斜杠()的组合目前不支持通配符

每个客户端最多订阅 100个 topic

以下 topic 被系统保留使用(客户端不能订阅)

类型 说明

$开头 平台保留

中移物联网有限公司 OneNET 开发文档中心

6210 SUBACK(订阅确认)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

Payload

Description 7 6 5 4 3 2 1 0

byte 1 retcode

返回码说明

返回码 描述

0x00 成功(granted qos = 0)

0x01 成功(granted qos = 1)

0x02 成功(granted qos = 2)

0x80 失败

6211 UNSUBSCRIBE(取消订阅)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

中移物联网有限公司 OneNET 开发文档中心

Payload

Description 格式

Byte1~

n

TopicName 2 字节字串长度 + utf8字

可以包含一个或多个 topic

6212 UNSUBACK(取消订阅确认)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

6213 PING(客户端发送 PING(连接保活)命令)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

NULL NULL

注PING命令无 VariableHeader

中移物联网有限公司 OneNET 开发文档中心

6214 PINGRSP(PING命令回复)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

NULL NULL

注PINGRSP无 VariableHeader

6215 DISCONNECT(断开连接)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

NULL NULL

注DISCONNECT无 VariableHeader

中移物联网有限公司 OneNET 开发文档中心

第七章 设备开发流程

71 连接鉴权

Device Onenet

(Connect)鉴权请求

(ConnAck)鉴权结果

加载session

鉴权

图7-1 连接鉴权

设备向平台发起 connect 请求connect 中携带鉴权信息具体

参见(报文格式参考 621)

平台拿到鉴权信息进行鉴权

鉴权通过后如果 cleansession=0 平台将会加载保存的设备

的一些信息如订阅列表(621中描述)

如果 cleansession=1 设备没有保存信息在平台则不加载设

备相关信息

返回鉴权结果 ConnAck(报文格式参考 621)

72 消息发布

721 数据点上报

设备使用 publish 报文来上传数据点 报文格式如下

中移物联网有限公司 OneNET 开发文档中心

VariableHeader

Field 名称 说明 格式

Field1 TopicName=rdquo$dprdquo $dp 为系统上传数据点

的指令

2字节字串长度 + utf8

字串

Payload

Payload包含真正的数据点内容支持的格式如下

Byte 1 Bit0-5数据类型指示目前支持

Type = 1

Type = 2

Type = 3

Type = 4

Type = 5

Type = 6

Type = 7

Bit6-7 flags 根据具体类型不同意义

Type6Type7这两种需要填写时间戳的数据类型

如果填入了时间戳则须将 bit7 置 1否则置 0(即

忽略数据类型说明中的日期时间相关字段)

0 0 0 0 0 0 0 1

Byte 2 根据数据类型指示不同

Byte n

中移物联网有限公司 OneNET 开发文档中心

数据类型 1(type == 1)格式说明

数据类型 2(type == 2)格式说明

Byte 1 数据点类型值1 1JSON 格式 1 字符串 0 0 0 0 0 0 0 1

Byte 2 指示后面 json 字符串长度

固定两字节长度高位字节值为 0x00

Byte 3 固定两字节长度低位字节值为 0x41

Byte 4

ldquodatastreamsrdquo[ 可以同时传递多个数据流

ldquoidrdquordquotemperaturerdquo

ldquodatapointsrdquo[数据流可以有多个数据点

rdquoatrdquordquo2013-04-22 222222rdquo可选

rdquovaluerdquo 365用户自定义

]

ldquoidrdquordquolocationrdquo

ldquodatapointsrdquo[hellip]

hellip

]

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

Byte n

Byte 1 数据点类型指示type=2 二进制数据 0 0 0 0 0 0 1 0

Byte 2 指示后面 json 字符串长度

固定两字节长度-高位字节值为 0x00

Byte 3 固定两字节长度-低位字节值为 0x10

Byte 4

rdquods_idrdquordquoimagerdquo 创建数据流时定义的 ID(必填)

ldquoatrdquordquo2014-10-25 122323rdquo 时间(可选)

rdquodescrdquo字符串或 json 对象对该数据的描述(可选)

hellip

Byte n

Byte n+1 指示后面二进制数据长度

固定四字节长度-第 1 字节(最高)值为 0x00

Byte n+1 固定四字节长度-第 2 字节值为 0x00

Byte n+2 固定四字节长度-第 3 字节值为 0x01

Byte n+3 固定四字节长度-第 4 字节(最低)值为 0x00

Byte n+4 该域目前最大支持 3M

中移物联网有限公司 OneNET 开发文档中心

数据类型 3(type == 3)格式说明

数据类型 4(type ==4)格式说明

hellip 本例中的该域 256 字节数据

Byte n+260

Byte 1 数据点类型指示type=3 JSON 格式 2 字符串 0 0 0 0 0 0 1 1

Byte 2 指示后面字符串长度

固定两字节长度高位字节值为 0x00

Byte 3 固定两字节长度低位字节值为 0x46

Byte 4 通用格式

ldquodatastream_id1rdquordquovalue1rdquo

ldquodatastream_id2rdquordquovalue2rdquo

hellip

示例

ldquotemperaturerdquo225rdquohumidityrdquordquo952rdquo

hellip

hellip

hellip

hellip

Byte n

Byte 1 数据点类型指示type=4 JSON 格式 3 字符串 0 0 0 0 0 1 0 0

Byte 2 指示后面字符串长度

固定两字节长度高位字节值为 0x00

Byte 3 固定两字节长度低位字节值为 0x46

Byte 4 通用格式

ldquodatastream_id1rdquoldquodatetime1rdquordquovalue1rdquo

ldquodatastream_id2rdquo ldquodatetime2rdquordquovalue2rdquo

hellip

示例

ldquotemperaturerdquoldquo2015-03-22 223112rdquo225

hellip

hellip

hellip

hellip

Byte n

中移物联网有限公司 OneNET 开发文档中心

数据类型 5(type == 5)格式说明

数据类型 6(type == 6)格式说明

Byte 1 数据点类型指示type=5 自定义分隔符 0 0 0 0 0 1 0 1

Byte 2 指示后面字符串长度

固定两字节长度高位字节值为 0x00

Byte 3 固定两字节长度低位字节值为 0x41

Byte 4 消息中最前面两字节为用户自定义的域中分隔符和域间分隔符

这两个分隔符不能相同比如采用逗号作为域中分隔符分号作

为域间分隔符的格式如下

feild0feild1hellipfeildn

其中每个 field 格式支持 3种

field 格式 1 3 个子字段分别是数据流 ID时间戳数据值

通用格式

Datastream_iddatetimevalue

field 格式 2 2 个子字段分别是数据流 ID 和数据值省略时

间戳通用格式

Datastream_idvalue

field 格式 3 1 个子字段省略了数据 ID 和时间戳只传输数

据值平台将用该域(feild)所在的位置号(从 0 开始)作为数据

流 ID通用格式

value

示例

(1)temperature2015-03-22

223112225102pm258910

(2)temperature2015-03-22

223112225102pm258910

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

Byte n

Byte 1 数据类型指示type=6 带时间自定义分隔符 0 0 0 0 0 1 1 0

Byte 2 年(后两位)例如 2016 年则该字节为 16 0 0 0 1 0 0 0 0

Byte 3 月(1-12)

Byte 4 日(1-31)

Byte 5 小时(0~23)

Byte 6 分钟(0~59)

Byte 7 秒(0~59)

Byte 8 指示后面字符串长度

固定两字节长度高位字节值为 0x00

Byte 9 固定两字节长度低位字节值为 0x41

Byte 10 消息中最前面两字节为用户自定义的域中分隔符和域间分隔符

具体格式见 type=5 说明若相关域中没有时间戳则采用本类

hellip

中移物联网有限公司 OneNET 开发文档中心

数据类型 7(type == 7)格式说明(每次最多 500个数据流的浮点数)

hellip 型的默认时间戳当作数据点的时间来存储

Byte n

Byte 1 Bit0-5 数据类型指示type=7 可离散浮点数数据流

Bit6保留置 0

Bit7 时间指示位1携带 6字节时间

1 0 0 0 0 1 1 1

Byte 2 年(后两位)例如 2016 年则该字节为 16 0 0 0 1 0 0 0 0

Byte 3 月(1-12)

Byte 4 日(1-31)

Byte 5 小时(0~23)

Byte 6 分钟(0~59)

Byte7 秒(0~59)

Byte 8 数据流名称(取值范围 1-65535)

高位字节值为 0x00

Byte 9 低位字节值为 0x01

Byte10 数据流个数(取值范围 1-500)

高位字节值为 0x00

Byte11 低位字节值为 0x01

Byte 10 4 字节 float 类型低位在前高位在后

Byte 11

Byte 12

Byte 13

Byte n 数据流名称(取值范围 1-65535)

高位字节值为 0x24

Byte n+1 低位字节值为 0x37

Byte n+2 数据流个数(取值范围 1-500)

高位字节值为 0x01

Byte n+3 低位字节值为 0x00

Byte n+2 4 字节 float 类型低位在前高位在后

Byte n+4

Byte n+5

Byte n+6

中移物联网有限公司 OneNET 开发文档中心

7211 Qos0(Client-gtServer)

Device OneNet

Publish $dp(Qos0)

存储

图7-2 QoS连接图

设备发布 Qos0 消息(上报数据点)

平台收到上报数据点后保存起来

7212 Qos1(Client-gtServer)

Device OneNet

Publish $dp(Qos1)

存储

PubAck

图7-3 Qos1连接图

设备发布 Qos1 消息(上报数据点)

中移物联网有限公司 OneNET 开发文档中心

平台收到上报数据点后保存起来

平台给设备回复相应的 PubAck (报文格式参考 625)

7213 Qos2(Client-gtServer)

Device OneNet

Publish $dp(Qos2)

存储

PubRec

PubRel

PubComp

图7-4 Qos2连接图

设备发布 Qos2 消息(上报数据点)

平台收到上报数据点后保存起来

平台给设备回复相应的 PubRec报文

设备需回复平台 PubRel报文如超时不回平台则会断开相应连接

平台给设备回复 PubComp报文

注数据点上报功能不支持 Retain 特性

中移物联网有限公司 OneNET 开发文档中心

722 平台命令(下发amp回复)

7221 命令下发

平台使用 publish 报文来下发平台指令 报文格式如下

FixHeader

参考 623

VariableHeader

Field 名称 说明 格式

Field1 TopicName=rdquo$creqcmduuidrdquo $creq为系统下发

Cmd 的 指 令

cmduuid为该条指

令的 uuid

2字节字串长度 +

utf8字串

Payload

Payload包含真正的指令内容

72211 Qos0(Server-gtClient)

DeviceOneNet

Publish $creq(Qos0)

图7-5 Qos0命令下发

命令下发

平台向设备发送 topic为$creq的消息(该 topic为平台命令)

中移物联网有限公司 OneNET 开发文档中心

设备收到 topic 为$creq 的 topic 时需将其作为平台下发的指令来处

注目前命令下发以 Qos0级别进行推送

7222 命令回复

设备使用 publish 报文来回复平台指令 报文格式如下

FixHeader

参考 623

VariableHeader

Field 名称 说明 格式

Field1 TopicName=rdquo$crspcmduuidrdquo $crsp为系统处理

设备回复 cmd 的

指令cmduuid为

该条指令的 uuid

2字节字串长度 +

utf8字串

Payload

Payload包含真正回复的指令内容

72221 Qos0(Client-gtServer)

DeviceOneNet

Pulish $crsp(Qos0)

图7-6 Qos0下发命令

中移物联网有限公司 OneNET 开发文档中心

72222 Qos1(Clientlt-gt Server)

DeviceOneNet

Pulish $crsp(Qos1)

Puback

图7-7 Qos1下发命令

如果设备回复响应时以 Qos1回复则平台需要给设备回复一个 Puback 报文

72223 Qos2(Clientlt-gt Server)

DeviceOneNet

Pulish $crsp(Qos2)

PubRec

PubRel

PubComp

图7-8 Qos2下发命令

如果设备回复响应时以 Qos2回复则

1平台需回复设备一个 PubRec报文

中移物联网有限公司 OneNET 开发文档中心

2设备在收到 PubRec后需向平台回复 PubRel报文

3平台收到 PubRel 报文后向设备回复 PubComp报文

73 创建 Topic

Device OneNet

HTTP 请求

HTTP 响应

图7-9 创建Topic

设备通过发送 HTTP请求进行 topic 的创建操作

平台收到请求后创建 topic 并返回结果

请求及响应定义如下

HTTP方法 POST

URL httpapihecloudscommqtttopic

HTTP头部 api-keyxxxx-ffff-zzzzz必须 master key

URL参数

HTTP body

内容

ldquonamerdquordquoxxxxxxrdquo topic 名字只能由英文下划线反斜杠组成最长

1024个字符同一产品下 topic name 不重复

成功返回

errno 0

errorldquosuccrdquo

说明 每个产品最多 100个 topic

中移物联网有限公司 OneNET 开发文档中心

74 订阅

Device OneNet

Subscribe

Suback

更新设备订阅列表

图7-10 订阅

设备发起订阅请求(报文格式参考 629)

平台收到请求后更新 topic列表

平台给设备回复 SubAck (报文格式参考 6210)

注subscribe 的 request qos级别可以为 012

75 取消订阅

Device OneNet

UnSubscribe

UnSuback

更新设备订阅列表

图7-11取消订阅

中移物联网有限公司 OneNET 开发文档中心

设备发起取消订阅请求 (报文格式参考 6211)

平台收到请求后更新 topic 列表

平台给设备回复 UnSubAck (报文格式参考 6212)

76 推送设备 Topic

761 Publish 报文推送

Qos0设备使用 Qos 级别为 0的 Publish报文来进行推送

Device OneNet

Publish(Qos0)

Device

以Qos0 Publish到订阅设备

图7-12 Qos0推送

设备发起推送 topic请求(以 Qos0级别)

平台收到请求后将 topic以 Qos0级别推送到相关订阅设备(支持离线设

备推送)

平台不返回 PubAck或 PubRec 等报文

Qos1

设备使用 Qos级别为 1的 publish报文来推送 Topic

中移物联网有限公司 OneNET 开发文档中心

Device OneNet

Publish(Qos1)

PubAck

Device

以Qos1 Publish到订阅设备

设备回复平台 PubAck

图7-13 Qos1发布

设备发起推送 topic请求(以 Qos1级别)

平台收到请求后将 topic以 Qos1级别推送到相关订阅设备(支持离线设

备推送)

平台返回 PubAck 报文

Qos2

设备使用 Qos级别为 2的 publish报文来推送 Topic

中移物联网有限公司 OneNET 开发文档中心

Device OneNet

Publish(Qos2)

PubRec

Device

以Qos2 Publish到订阅设备

PubRec

PubRel

PubComp

PubRel

PubComp

图7-14 Qos2推送

设备发起推送 topic请求(以 Qos2级别)

平台收到请求后回复 PubRec报文

设备收到 PubRec后需回复 PubRel报文 (如超时不回复平台会断开与设

备的连接)

平台收到 PubRel 报文后回复 PubComp 给设备

平台在回复 PubComp 后会以 Qos2 级别推送到相关订阅设备(支持离线设

备推送)

设备需回复 PubRec报文 (如超时不回复平台会断开与设备的连接)

平台发送 PubRel 报文给设备

设备需回复 PubComp(发布完成)

Publish报文的格式如下

FixHeader

参考 623

中移物联网有限公司 OneNET 开发文档中心

VariableHeader

Field 名称 说明 格式

Field1 TopicName 填写设备订阅的 topic 2字节字串长度 + utf8

字串

Payload

Payload为设备自定义内容

762 HTTP 请求推送

Device OneNet

HTTP 请求

HTTP 响应

Device

Publish到订阅设备

图7-15 HTTP请求

设备以 HTTP 的方式发起推送 topic 请求

平台收到请求后将 topic推送到相关订阅设备 (目前只支持在线推送)

平台返回推送结果

请求及响应定义如下 HTTP方法 POST

URL httpapihecloudscommqtt

HTTP头部 api-keyxxxx-ffff-zzzzz必须 master key

URL参数 topic=ldquoXXXXXXrdquo必选在发送 mqtt协议的 topic 必填

HTTP body内容 用户自定义 Json 或二进制数据(小于 64K)

成功返回

errno 0

errorldquosuccrdquo

中移物联网有限公司 OneNET 开发文档中心

77 离线 Topic

推送 Topic只针对在线设备进行 topic 消息的推送离线设备不会收到订阅

的 topic 的消息离线 Topic则会将该消息推送给在线以及离线设备

1 如果设备在上线时设置了 clean session flag服务端会删除其订阅的

topic及相关的离线 topic消息

2 如果设备没有设置 clean session flag如果有与该设备相关的离线

topic消息则在鉴权成功后将离线消息推送给设备

3 遗嘱消息(will msg)只会推送给订阅了该 will topic的在线的设备离

线设备不会收到

4 离线消息的有效期默认为 2 天(暂不支持用户设定有效期)服务器只会

推送在 2天内的最近 10 条消息

78 数据点订阅

数据点订阅同一产品下的设备可以订阅其他设备的数据点订阅的 topic

格式为deviceid数据流名称即

被关注的设备在上传了该数据流名称的数据点后订阅了该 topic的其他设备都

会收到上传的数据点

1 AB设备的 deviceid分别为 92779278

2 A 设备订阅了名为92789527 的 topic(9278 为设备 B 的 id9527 为 B

设备上传的数据流名称)

3 B 设备上传了名为 9527的数据流(数据点为 11 1578hellip)

4 A 设备会收到多条(取决于设备 B 上传的数据点的个数)推送的 topic 名

为92789527 的 publish消息消息的 payload中则包含设备 B 上传的数据

注目前支持订阅的数据点的类型为 Type1~Type7(详见 721节)

中移物联网有限公司 OneNET 开发文档中心

第八章 常见问题 FAQ

用户在基于 OneNET 平台进行产品开发的过程中可能会遇到各种各样的问

题开发过程中遇到的问题一方面可以参考 OneNET 文档中心的文档或者本文

档前几个章节的内容另一方面用户可以参考本章节总结的常见问题希望这些

文档能对用户在开发过程中有一定的指导和帮助

本章将分三个小节对用户在开发产品过程中可能遇到的问题进行梳理分别

为终端设备接入 OneNET平台的常见问题API调用的常见问题和 OneNET平台

的能力

81 终端设备接入 OneNET 平台的常见问题

序号 问题描述 原因分析 解决方法

1

2

3

4

5

6

7

82 API 调用的常见问题

序号 问题描述 原因分析 解决方法

1

2

3

4

5

6

7

8

9

中移物联网有限公司 OneNET 开发文档中心

83 使用 OneNET平台遇到的常见问题

序号 问题描述 原因分析 解决方法

1

2

3

4

5

6

7

8

Page 5: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com

中移物联网有限公司 OneNET 开发文档中心

6211 UNSUBSCRIBE(取消订阅) 96

6212 UNSUBACK(取消订阅确认) 97

6213 PING(客户端发送 PING(连接保活)命令) 97

6214 PINGRSP(PING命令回复) 98

6215 DISCONNECT(断开连接) 98

第七章 设备开发流程 99

71 连接鉴权 99

72 消息发布 99

721 数据点上报 99

722 平台命令(下发amp回复) 107

73 创建 Topic 110

74 订阅 111

75 取消订阅 111

76 推送设备 Topic 112

761 Publish报文推送 112

762 HTTP请求推送 115

77 离线 Topic 116

78 数据点订阅 116

第八章 常见问题 FAQ 117

81 终端设备接入 OneNET 平台的常见问题 117

82 API调用的常见问题 117

83 使用 OneNET 平台遇到的常见问题 118

中移物联网有限公司 OneNET 开发文档中心

第一章 文档说明

编写此开发文档是为了让开发人员使用 MQTT协议快速接入 OneNET 平台形

成基于设备上传数据的物联网应用开发

通过阅读此文档开发人员可以了解 OneNET 平台接入的总体流程包括设

备使用 MQTT协议接入 OneNET平台步骤基于 OneNET平台开发上层应用

文档适用人员熟悉 MQTT 协议设备接入侧需要具备一定功底的嵌入式开

发人员北向 API调用的开发人员需要具备一定的应用软件开发能力

注意建议以公司名义先注册 OneNET 平台账号

中移物联网有限公司 OneNET 开发文档中心

第二章 MQTT 协议接入流程

MQTT (Message Queue Telemetry Transport)遥测传输协议使用 TCPIP 提

供网络连接能够对负载内容实现消息屏蔽传输开销小可以有效降低网络流

量其主要提供了订阅发布两种消息模式更为简约轻量易于使用特别适

合于受限环境(带宽低网络延迟高网络通信不稳定)的消息分发属于物联

网(Internet of Thing)的一个标准传输协议

嵌入式设备选择 MQTT 协议优点

1 轻量级的 machine-to-machine 通信协议

2 发布(publish)订阅(subscribe)模式

3 基于 TCPIP支持 QoS

4 长连接协议

5 终端数据点上报支持的数据点类型包括

o 整型(int)

o 浮点数(float)

o 字符串(string)

o JSON 格式

6 适合于低带宽不可靠连接嵌入式设备CPU 内存资源紧张

典型应用场景

MQTT 协议适用于设备和平台需要保持长连接的使用场景MQTT 特点在

于可以实现设备间的消息单播以及组播可以不依赖于其他服务(下发命令服务

推送服务等)实现让设备以应用服务器的方式对真实设备进行管理和控制

以门禁系统为例应用服务器(虚拟设备)可以订阅每个门禁(真实设备)

的统计数据的 topic对所有门禁的数据进行统计分析每个门禁也可以订阅自

身开关门的 topic应用服务器凭此可以远程控制每个门禁的状态

中移物联网有限公司 OneNET 开发文档中心

21 设备接入平台流程图

平台

TCP连接创建产品

发送连接报文

连接应答

数据应答

发送数据报文

生成连接报文

数据应答

发送数据报文

终端

发送下行命令 下发命令

解析下行命令

生成存储数据报文

生成存储数据报文

解析连接应答

解析数据应答

解析数据应答

必要流程

可选流程

存储到数据流

存储到数据流

数据源 创建应用

心跳应答

发送心跳报文生成心跳报文

解析心跳应答

平台操作

设备操作

创建设备

图2-1 设备接入OneNET平台流程图

1) 创建产品

根据产品功能需求选择接入协议重要参数产品 ID注册码产品 APIKey

(见附录一)

2) 创建设备

通过 TCP直接与平台直连的终端在进行接入之前平台上必须要先存在一

个与之一一对应的虚拟设备可以通过开发者中心或者 API 注册创建设备接口

来创建重要参数设备 ID鉴权信息

3) 建立 TCP连接

不同协议有着不同的固定 IP地址与端口

中移物联网有限公司 OneNET 开发文档中心

4) 建立设备连接

通过 1)2)中的参数(一般为产品 ID+鉴权信息+设备 ID)生成连接报文

发送连接报文建立终端与 2)中新建设备的一一对应关系

5) 发送数据报文

按照连接协议生成数据报文发送至平台

6) 创建应用

7) 使用平台下发命令接口或者 API向设备发送指令

22 应用开发流程图

应用开发主要是通过 Rsetful API 的方式实现和 OneNET 平台进行交互对

接在您完成产品创建以及硬件接入后即可根据相关所接入的硬件设备以及所

上传的数据进行相关产品的开发

OneNET 平台提供的应用开发 API分为需要终端响应和只需 OneNET 平台

响应两类下面分别用两个流程图描述这两类 API 的开发流程图 2-2为需

要终端响应的 API 调用流程其中虚线部分只有离线命令的读写下发命令才

有该流程图 2-3为只需平台响应的 API 调用流程

在应用开发平台调用 API 之前 必须与 OneNET 平台建立连接建立连

接的过程和 API 调用流程一并在图中进行了标注

中移物联网有限公司 OneNET 开发文档中心

图2-2 需要终端响应的API流程

终端设备 OneNET平台 应用开发平台

1配置应用开发地址Token等参数

2向应用开发平台发起URLampToken验证

3解析验证请求参数返回验证消息

应用平台与OneNET平台已经建立连接

4调用API指令HTTP请求

5返回平台侧执行结果错误代码和uuid

6API指令执行完毕

图2-3 不需要终端响应的API流程

终端设备 OneNET平台 应用开发平台

1配置应用开发地址Token等参数

2向应用开发平台发起URLampToken验证

3解析验证请求参数返回验证消息

应用平台与OneNET平台已经建立连接

4调用API指令HTTP请求MQTT请求

5返回平台侧执行结果错误代码和uuid

6相应指令请求返回数据 推送数据及执行结果给应用平台

7API指令执行完毕

中移物联网有限公司 OneNET 开发文档中心

第三章 终端设备接入 OneNET 平台流程

终端设备与 OneNET 平台进行数据交互需经过公网到达平台根据 OneNET

平台与网络运营商的关系终端设备智能网关OneNET平台以及第三方应用四

者的网络关系可归纳如图 3-1所示

图3-1 终端设备与服务器网络关系

图 3-1 中终端设备或智能网关设备与 OneNet 平台使用 TCPIP 建立网络连

接使用 MQTT协议进行与平台进行数据通信

31 终端设备接入 OneNET 平台前的准备工作

311 硬件准备

设备终端接入 OneNET平台的通信方式也是多种多样的比较常用的有 GPRS

无线 WIFI以太网口GPRS 方式需要 GPRS 模块和 SIM 卡的支持无线 WIFI 模

块需要 WIFI 模块支持WIFI 模块推荐选用 ESP8266 串口 WIFI 模块GPRS 模块

推荐选用 SIM900A模块

312 软件准备

设备终端接入 OneNET 平台使用 MQTT 协议使用嵌入式设备需移植 SDK

到 MCU详见麒麟发开板接入实例

中移物联网有限公司 OneNET 开发文档中心

32 终端设备接入 OneNET 平台步骤

321 OneNET 平台创建产品及设备

3211 注册用户账号

进入 OneNET官网(httpsopeniot10086cn)点击首页右上角的ldquo注

册rdquo按钮注册用户账号

OneNET 支持ldquo个人用户rdquo和ldquo企业用户rdquo两种注册方式你可以根据您的

实际情况选择注册方式

以个人用户注册为例用户需在对应选项依次填写用户名用户密码所在

地手机号码图片验证码以及手机验证码并完成注册注册页面如图 3-2所

示注册完成后回到主页点击ldquo登录rdquo即可进入 OneNET 的官方主页并由

此进入到你的ldquo开发者中心rdquo

如果客户产品后续需要进行规模化量产建议以企业的名义进行注册注册

时注意注册信息的准确填写另外个人版和企业版在功能上无差异

图3-2 用户账号注册页面

3212 创建产品和设备

在进入到你的ldquo开发者中心rdquo后点击右上角的 ldquo创建产品rdquo在弹出页面中

按照提示填写产品的基本信息进行产品创建在创建过程中请您按照提示尽

可能完整全面地填写相应内容这样更方便您后期对产品进行管理

创建产品页面如图 3-3 和图 3-4其中设备接入方式选择ldquo公开协议rdquo联网

方式选择跟据实际设备进行选择设备接入协议选择ldquoMQTTrdquo

中移物联网有限公司 OneNET 开发文档中心

产品创建完成后页面弹出ldquo创建产品成功rdquo如图 3-5所示点击ldquo立即

添加设备rdquo显示如图 3-6所示界面依次填写ldquo设备名称rdquo鉴权信息设备

名称自定义鉴权信息用于平台对终端设备鉴权每台设备具有唯一性建议设

置为产品出厂编号方便管理鉴权信息需写入设备

图3-3 创建产品页面

中移物联网有限公司 OneNET 开发文档中心

图3-4 创建产品页面

图3-5 创建产品成功页面

中移物联网有限公司 OneNET 开发文档中心

图3-6 添加设备页面

322 终端设备软硬件初始化

终端设备在上电以后需要完成设备的软硬件初始化硬件初始化包括各个

硬件模块的上电处理器的寄存器初始化工作模式初始化等等软件初始化包

括基础通信套件初始化应用接口初始化应用程序初始化等等

323 终端创建设备及资源

终端设备创建设备(device_id)配置产品 ID鉴权信息注册码连接

服务器 IP端口号等信息创建成功后与平台建立登陆连接连接成功后即可向

平台上报数据点

324 登录 OneNET平台

终端设备的基础通信套件完成初始化以及设备资源创建完成后可向

OneNET平台发送登陆请求返回登录结果如果参数错误或者登录超时平台会

返回登录失败如果验证通过平台会返回登录成功

若终端设备登录平台成功设备名称左边的圆形图标会由灰色(离线状态)

变成绿色(在线状态)如图 3-7所示

中移物联网有限公司 OneNET 开发文档中心

图3-7 平台侧设备状态显示

325 设备数据点上报

终端设备与平台成功建立连接后设备使用 publish 报文向平台上报数据点

平台收到数据点后保存到对应数据流下方便应用查阅数据点上报格式以及类型详见

721

图3-8 平台侧收到设备数据流显示

326 创建应用

用户可以利用上传的数据创建相关的应用发布直观的展示页面目前在平台应用孵化

器中提供了曲线图柱状图表盘物体位置图片和开关等应用

在产品详情页面点击ldquo应用管理rdquo进入应用管理主界面如下图

中移物联网有限公司 OneNET 开发文档中心

图3-9 应用管理模块

点击ldquo创建应用rdquo输入应用名称点击ldquo创建rdquo如下图

图3-10 新应用创建

保存成功后点击编辑按键进入应用编辑页面如下图

中移物联网有限公司 OneNET 开发文档中心

图3-11 应用编辑入口

图3-12 应用编辑界面

在应用编辑页面中使用左侧的控件进行应用编辑此例中我们选择表盘控件来显示

刚刚上传的数据点击表盘控件如下图所示

中移物联网有限公司 OneNET 开发文档中心

图3-13 表盘控件添加

在右侧的属性中选择设备以及数据源(及刚刚上传的数据流)如下图

图3-14 表盘控件数据流绑定

在确定好数据流之后可以看到表盘回显示成我们添加的数据的值其他的

刷新频率以及表盘显示样式读者可以自行更具需求加以修改

完成应用编辑之后点击右上角保存按钮退出应用编辑

在应用管理页面点击该应用即可查看编辑好的应用页面

中移物联网有限公司 OneNET 开发文档中心

图3-15 保存应用

图3-16 应用查看与分享

该应用可以通过共享ldquo发布链接rdquo的方式将该应用共享给他人

33 设备批量接入

单个设备可以通过平台的开发者中心添加设备的方式进行创建若用户有多

个设备直接与平台 TCP连接的终端通过手动添加需耗费大量时间人力OneNET

中移物联网有限公司 OneNET 开发文档中心

为大批量接入用户提供 3种批量创建设备的方案

331 平台设备批量复制

此种方式为选择某个设备作为复制的模板通过导入 EXCEL的方式进行设备

复制厂商可以在小批量测试时使用该功能

在设备列表中点击查看详情

图3-17 设备批量接入

在设备详情页面点击批量导入设备信息

中移物联网有限公司 OneNET 开发文档中心

图3-18 导入设备信息

点击批量复制

图3-19 批量复制

中移物联网有限公司 OneNET 开发文档中心

目前提供三种批量创建的方式 excel 导入的方式为主要接入方式选择

excel导入点击下载模板

图3-20 快速导入

图3-21 Excel导入

打开下载下来的 excel模板表中的 titledesctags等均为将要批量导

入的设备的数据其中的 title 和 auth_info 为必填选项title 为设备名

中移物联网有限公司 OneNET 开发文档中心

auth_info对应设备的鉴权信息

图3-22 Excel格式

填写 3个设备信息

图3-23 Excel内容

三个设备的 title和 auth_info都一样均为 20170808000012017080800002

2017080800003保存该表格点击ldquo点击上传rdquo上传保存好的 excel 文件

点击ldquo确定导入批量rdquo

中移物联网有限公司 OneNET 开发文档中心

图3-24 导入上传

图3-25 确认创建

可以看到在原设备目录下新增了 3个设备其名称分别为 2017080800001

20170808000022017080800003

中移物联网有限公司 OneNET 开发文档中心

图3-26 批量创建的设备

点击设备详情可以看到设备目录下各个设备的鉴权信息与表格中所填

写的内容一致

图3-27 设备ID及鉴权信息

至此完成了通过批量设备复制的方式完成设备批量创建的过程用户如果

要使用这个功能需要将自己终端的出厂序列号整理到这个 excel表中然后利

中移物联网有限公司 OneNET 开发文档中心

用上传表格的方式进行批量创建

332 应用平台调用新增设备 API

OneNET 提供了创建设备的 API接口

图3-28 新增设备API接口

其中的 auth_info 参数对应着设备的鉴权信息通过调用此 API 接口可以

实现在平台上新增设备的功能用户如果有自己的第三方应用平台进行设备管理

可以通过多次调用此接口的方式进行设备的批量创建在调用接口时需要确保每

次调用的 auth_info 参数对应着自己的每一个终端不同的出厂序列号

333 终端调用注册 API

API 实际是 HTTP 协议的通信协议终端也可以通过封装 HTTP 包发送注册

中移物联网有限公司 OneNET 开发文档中心

设备请求的方式调用 API

终端调用注册 API 创建设备并接入的流程如图 3-29所示

平台

TCP连接协议接入机

创建产品

发送连接报文

连接应答

数据应答

发送数据报文

生成连接报文

设备

发送下行命令 下发命令

解析下行命令

生成存储数据报文

解析连接应答

解析数据应答

必要流程

可选流程

存储到数据流 数据源 创建应用

心跳应答

发送心跳报文生成心跳报文

解析心跳应答

平台操作

设备操作

利用设备本身的sn和产品的设备注册码生成注册报文

TCP连接API服务器

发送注册报文

注册应答

解析设备ID

创建设备

设备开机

读取硬件中烧录的设备编号(sn)

图3-29 终端调用注册API接入流程

1) 创建产品

重要参数产品 ID注册码产品 APIKey(见附录一)

2) 生成并发送注册报文

每一个用户终端中都有厂商烧录的唯一出厂序列号(sn)终端上电

之后应该首先读取自己的 sn然后通过 1)中的注册码和 sn 一起组成注

册报文

注册报文格式如下例

POST httpapihecloudscomregister_deregister_code=6TM7OkhNsTjATvFx HTTP11

Host apihecloudscom

Content-Length 48

中移物联网有限公司 OneNET 开发文档中心

sn02136616511001titletestdevice0001

其中

6TM7OkhNsTjATvFx 为产品注册码

02136616511001 是本例中模拟的设备唯一编号

testdevice0001 是本例中模拟的设备名

若上传的数据格式以及参数鉴权均正确则平台会返回设备创建成功

返回设备 ID以及该设备对应的设备 api-key

HTTP11 200 OK

Date Wed 09 Aug 2017 064821 GMT

Content-Type applicationjson

Content-Length 95

Connection keep-alive

Server Apache-Coyote11

Pragma no-cache

errno0datadevice_id11142371keyq9Mw0zqiAPjTwqfyCk2mWrUi8=errorsucc

3) 在步骤 2)完成之后平台上的设备就已经成功创建了终端需要

重新 TCP连接到对应协议的服务器上完成设备连接(与设备进行映射)以

及上传数据的操作

34 设备 ID 与产品序列号

通过 OneNET构建的物联网系统中有两套比较重要的编码设备 ID与产品序列号

(SN)其中

产品序列号是由厂商指定的在厂商的产品范围内是保持唯一的在出厂前烧写到每

一个终端中通常包含在与平台通信的数据中并以条形码的方式贴在产品的包装上用

于从用户的角度区分每一个独立的终端

设备 ID是在平台创建设备时由 OneNET分配的平台范围内唯一的编号应用于第三

方平台调用 OneNET API时使用

在创建设备时OneNET平台需要用户以设备 sn为参数进行设备创建成功之后平

台会分配一个设备 ID这样 OneNET内部就有了一个 sn-设备 ID的映射关系

终端登陆使用的鉴权信息是出厂时烧写好的 sn鉴权通过之后平台可以将该终端

上传是数据放到对应的设备中

上层应用通过创建设备 API或者查询设备 API建立 sn-设备 ID映射表在需要操作

某一设备时首先可以获取的是终端的 sn号(因为对用户是可见的)通过映射表获取设

中移物联网有限公司 OneNET 开发文档中心

备 ID然后再通过 API访问 OneNET平台上的对应设备

两套编码在物联网系统中的应用位置如下图所示

物联网应用

OneNET

终端

(烧写sn)

HTTP API 以设备ID为参数进行API访问

接入协议以sn为鉴权参数进行设备连接

设备

设备名

设备ID

设备sn

设备标签

sn 设备ID

snmdash设备ID映射表

中移物联网有限公司 OneNET 开发文档中心

第四章 第三方应用开发

第三方应用与 OneNET 平台的业务逻辑关系如图 4-1 所示第三方应用与

OneNET平台之间通过 HTTPS请求应答的方式实现数据交互OneNET 平台为第三

方应用提供封装好的 API 接口应用平台通过调用这些 API 接口完成对 OneNET

平台的读写执行以及设备管理请求然后 OneNET 平台会将相应的指令请求发送

到终端设备OneNET 平台收到终端设备响应的数据及设备信息后会将数据及

设备信息推送到应用平台完成应答

下面将分别介绍第三方应用接入 OneNET 平台的步骤OneNET平台提供的数

据推送功能以及 OneNET 平台为第三方应用封装好的 API接口

图4-1 第三方应用与OneNET平台的逻辑关系

41 第三方应用接入 OneNET 平台

第三方应用与 OneNET平台实现数据交互的前提是已经建立连接第三方应

用接入 OneNET平台的开发流程如图 4-2所示包括三个步骤

(1) 在 OneNET 平台创建了设备该设备有对应的真实设备且能正常上报

数据

(2) 用户已经开发并部署了 OneNET平台验证接入的程序

(3) 在 OneNET 平台正确配置了第三方应用数据接收的地址(URL)

Token以及其他参数

中移物联网有限公司 OneNET 开发文档中心

在确保上述第(1)步已经实现的基础上下面将分别讲述第(2)步和第

(3)步的实现过程

图4-2 数据推送的开发流程

412 第三方应用平台接入验证程序

第三方应用平台接入验证程序工作流程如下所述当 OneNET 平台完成对第

三方开发平台的配置后会向第三方开发平台发起 URLampToken验证接入验证程

序对平台发送的验证参数进行验证验证通过后第三方开发平台会向 OneNET

平台返回验证消息当 OneNET 平台收到验证消息后说明第三方开发平台与

OneNET平台已建立连接

目前 OneNET平台为第三方应用平台提供接入验证程序的 SDK有 Javaphp

Nodejs和 C四个版本

SDK 下载地址httpsopeniot10086cndocart432html118 -ldquo数

据推送rdquo

413 OneNET 平台配置第三方应用平台

在 OneNET平台对第三方应用平台的配置界面如图 4-3所示

URL第三方开发平台的地址

Token可以自定义用于第三方开发平台接入平台握手验证

消息加解密方式有明文模式和安全模式当启用安全模式后平台端需要

用户自定义 AESKey 或者由平台随机生成在应用程序中使用该 AESKey 解密消

中移物联网有限公司 OneNET 开发文档中心

推送时间限制(秒)和推送数据限制(个)设置ldquo推送时间限制rdquoldquo推送数

据限制rdquo可以实现批量推送数据减少服务器压力当满足ldquo推送时间限制rdquo和

ldquo推送数据限制rdquo要求后OneNET 将给第三方推送数据如果没有设置ldquo推送

时间限制rdquo和ldquo推送数据限制rdquo将默认数据实时推送

图4-3 第三方开发平台的配置界面

当用户成功在 OneNET 平台配置了第三方开发平台服务器地址后点击ldquo提

交rdquo按钮后OneNET 平台会向第三方应用平台发起 URLampToken 验证请求验证

通过且收到第三方返回的验证消息后则第三方应用平台与 OneNET 平台已建立

连接之后OneNET 平台在收到设备数据时会将设备数据推送到已配置的第三

方应用平台

用户数据接收服务程序接收到 OneNET平台发送的 ldquoURLampTokenrdquo验证请求

请求的格式形如httpipporttestmsg=xxxampnonce=xxxampsignature=xxx

蓝色字体部分为用户在 OneNET平台配置的 URL常规的验证流程如下

(1)在请求中获取参数ldquononcerdquoldquomsgrdquo的值将ldquotokenrdquo(此为页面

配置参数 token的值)ldquononcerdquoldquomsgrdquo的值计算 MD5(token+nonce+msg)

加密值并且编码为 Base64字符串值

中移物联网有限公司 OneNET 开发文档中心

(2)将上一步中 Base64字符串值通过 URL Decode 计算后的值与请求参数

ldquosignaturerdquo的值进行对比如果相等则表示 token验证成功

(3)如果 token 验证成功向 OneNET 平台返回ldquomsgrdquo参数值否则返回

其他值

说明如果用户不想验证 Token 的有效性可以忽略以上步骤并直接向

OneNET平台返回ldquomsgrdquo参数值

42 OneNET 平台数据推送

平台以 HTTPS POST 请求形式向第三方应用平台注册地址推送数据推送数

据相关信息以 JSON 串的形式置于 HTTPS请求中的 body部分

第三方应用平台在接收数据时会接收到数据的明文消息或者密文消息

明文消息中以ldquotyperdquo的数值区分不同的消息而密文消息与明文消息的区别

是ldquomsgrdquo部分经过了加密处理下面将分别对明文消息密文消息以及消息相

关字段和密文的加密算法进行说明

421 明文消息

明文消息有两种消息类型分别为数据点消息和设备上下线消息而数据点

消息又分为单条数据点消息和数据点消息批量形式数据点消息批量形式中的不

同数据点是以不同时间戳区分的

(1)数据点消息(type=1)

msg

type 1

dev_id 2016617

ds_id datastream_id

at 1466133706841

value 42

msg_signature message signature

nonce abcdefgh

(2)数据点消息批量形式(type=1)

msg [

type 1

dev_id 2016617

ds_id datastream_id

中移物联网有限公司 OneNET 开发文档中心

at 1466133706841

value 42

type 1

dev_id 2016617

ds_id datastream_id

at 1466133706842

value43

]

msg_signature message signature

nonce abcdefgh

(3)设备上下线消息(type=2)

msg

type 2

dev_id 2016617

status 0

login_type 1

at 1466133706841

msg_signature message signature

nonce abcdefgh

422 密文消息

密文消息中的ldquoenc_msgrdquo是由明文消息中的ldquomsgrdquo采用 AES 加密算法而

enc_msgxxxx

msg_signature

message signature

nonceabcdefgh

423 消息相关字段说明

表4-1 消息相关字段说明

字段 字段说明

type 标识数据类型当前版本范围[15]

dev_id 设备 ID

ds_id 公 开 协 议 中 的 数 据 流 ID 其 格 式 为

objectID_instanceID_resourceID

at 平台时间戳单位 ms

value 具体数据部分为设备上传至平台或触发的相关

数据

中移物联网有限公司 OneNET 开发文档中心

status 设备上下线标识

0-下线 1-上线

login_type

设备登陆协议类型

1EDP 2nwx 3JTEXT 5JT808 6

MODBUS 7MQTT 8gr2010NB-IoT

cmd_type

命令响应的类型

1设备收到 cmd的 ACK 响应信息 2设备收到

cmd的 Confirm响应信息

cmd_id 命令 ID

msg_signatur

e 消息摘要

nonce 用于计算消息摘要的随机串

enc_msg 加密密文消息体对明文 JSON串(msg字段)的

加密

424 加密算法详述

平台基于 AES算法提供加解密技术具体阐述如下

EncodingAESKey 即消息加解密 Key 的 BASE64编码形式长度固定为 43

个字符从 a-zA-Z0-9共 62个字符中选取由服务开启时填写后

也可申请修改

AES密钥计算为 AESKey=Base64_Decode(EncodingAESKey + ldquo=rdquo)

EncodingAESKey 尾部填充一个字符的ldquo=rdquo 用 Base64_Decode 生成 32

个字节的 AESKey

AES采用 CBC 模式秘钥长度为 32 个字节(256位)数据采用

PKCS7填充 初始化 iv向量取秘钥前 16字节 PKCS7K为秘钥字

节数(采用 32)buf为待加密的内容N为其字节数Buf 需要被填

充为 K的整数倍在 buf的尾部填充(K-NK)个字节每个字节的内容

是(K- NK)具体详见toolsietforghtmlrfc2315

BASE64采用 MIME格式字符包括大小写字母各 26个加上 10个数

字和加号ldquo+rdquo斜杠ldquordquo一共 64个字符等号ldquo=rdquo用作后缀填

出于安全考虑平台网站提供了修改 EncodingAESKey的功能(在

EncodingAESKey 可能泄漏时进行修改对应上第三方平台申请时填写

的接收消息的加密对称密钥)所以建议保存当前的和上一次的

中移物联网有限公司 OneNET 开发文档中心

EncodingAESKey若当前 EncodingAESKey 生成的 AESKey解密失败则

尝试用上一次的 AESKey的解密

平台的加密消息部分为 enc_msg= Base64_Encode( AES_Encrypt

[random(16B)+msg_len(4B)+msg] )即以 16字节随机字节串拼接 4字

节表示消息体长度的字节串(此处 4 字节长度表示为网络字节序)再加

上消息本身的字节串作为 AES加密的明文再以 AES算法对明文进行加

密生成密文最后对密文进行 BASE64 的编码操作生成加密消息体

对加密消息体的解密流程为1)首先进行加密消息体的 BASE64 解码操作

aes_msg=Base64_Decode(enc_msg)2)对获取的解码内容以 AES 算法进行解密

操作获取明文部分plain_msg=AES_Decrypt(aes_msg)解密中使用的秘钥由

EncodingAESKey 计算得来使用的初始化 iv 向量为计算出的 aes 秘钥的前 16

字节3)去掉 plain_msg 的前 16 字节再以前 4 字节取出消息体长度根据消

息体长度获取真实的消息部分(推荐以消息体长度获取真实消息以兼容

plain_msg 未来可能出现的结构变更)表示加密传输的数据后两字段与明文

传输一致

43 API 接口

第三方开发平台应用层通过 Rsetful API 的方式和 OneNET平台进行交互对

接实现命令的下发数据的读写以及相关业务的交互

针对 MQTT 协议目前主要开发了以下 API 用来实现第三方开发平台向

OneNET平台请求读写执行以及设备管理请求具体见下表 4-2下面分别对每一

种 API进行说明

表4-2 API功能说明

API 类别 操作对象 API名称

需要终端响应 只需平台响应

设备

注册

更新设备注册属性

新增

更新

精确查询单个设备

中移物联网有限公司 OneNET 开发文档中心

模糊查询设备

批量查询设备状态

删除

数据流

新增

更新

查询单个数据流

查询多个数据流

删除

数据点

新增

查询

二进制数

新增

查询

触发器

新增

更新

查询单个触发器

模糊查询触发器

删除

触发数据内容

命令

发送命令

查询命令状态

查询命令相应

查询设备历史命令

视频能力 获取播放地址

APIKEY

新增

更新

查看

删除

消息订阅

按 Topic发送命令

查询订阅指定 Topic设备的列表

查询设备订阅的 Topic列表

删除产品的 Topic

查询产品的 Topic

中移物联网有限公司 OneNET 开发文档中心

432 设备

4321 注册

表4-3 设备注册

HTTP方法 POST

URL apihecloudscomregister_de

URL参数 register_code=6TM1OkhNsTjATvFx 设备注册码(必填)

HTTP内容

(示例)

sn 2015031401421 设备唯一标识 string类型最长 512字符

mac C89346DA4373 设备唯一 mac标识最长 32字符

title myedpdevice 设备名(可选) 最长 32个字符

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

keyQ1VdWoEvdkCye=d1=HcCSP6LvCw= 新设备 apikey

device_id 325018 设备 ID

说明

1 响应消息中 errno 表示错误码error 表示错误原因如果创建设备失

败则没有 data字段

2 snmac一定要必填其中一个而且只可以传一个用于鉴权就是设备

新增中的 auth_info

3 此接口根据产品设置的不同默认 allow_dup=true可以生成新设备及

key或获取原有设备及 key见下表

表4-4 对应表

产品允许重复 sn 在产品中已存在 sn 在产品中不存在

allow_dup=true 是 sn 对应的设备 id 和 key 新的设备 id 和 key

allow_dup=false 否 报错 新的设备 id 和 key

中移物联网有限公司 OneNET 开发文档中心

此接口返回的新设备默认设备名均为auto_register均为私有设

备设备协议与产品协议相同

4322 更新设备注册属性

表4-5 更新设备注册属性

HTTP方法 PUT

URL apihecloudscomregister_attr

HTTP头部 api-key xxxxddddsssaaa 必须为 masterkey

HTTP内容

(示例)

allow_dup true|false是否允许重复提交相同的设备 sn 默认 true

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

默认 allow_dup 为 true主要用于设备注册码创建设备属性限制

4323 新增

表4-6 新增设备注册属性

HTTP方法 POST

URL apihecloudscomdevices

HTTP头部 api-key xxxxddddsssaaa 必须为 masterkey

HTTP内容

(示例)

title mydevice 设备名

desc some description 设备描述(可选)

tags [chinamobile] 设备标签(可选可为一个或多个)

protocolMQTT 选择一种接入协议(可选默认为 HTTP)

location lon 106 lat 29 ele 370设备位置纬度

经度 高度(可选)

private true| false 设备私密性(可选默认为 ture)

auth_info 201503041a5829151 MQTT设备设备唯一编号

other version 100 manu china mobile 其他信息(可

选JSON格式可自定义)

HTTP响应响

应消息内容

(实例)

errno 0

error succ

data

中移物联网有限公司 OneNET 开发文档中心

device_id233444 平台分配的设备 ID

4324 更新

表4-7 更新

HTTP方法 PUT

URL apihecloudscomdevicesdevice_id

HTTP头部 api-key xxxxddddsssaaa masterkey或设备 apikey

HTTP内容

(示例)

title mydevice 设备名(可选)

desc some description 设备描述(可选)

tags [chinamobile] 设备标签(可选)

protocolMQTT 选择一种接入协议(可选)

location lon106 lat 29 ele 370设备位置经度

纬度 高度(可选)

private true| false 设备私密性(可选)

auth_info201503041a5829151 MQTT设备设备唯一编号(可选)

other version 100 manufacturer china mobile 其

他信息(可选)

HTTP响应响

应消息内容

(示例)

errno 0

error succ

中移物联网有限公司 OneNET 开发文档中心

4325 精确查询单个设备

表4-8 精确查询单个设备

HTTP方法 GET

URL apihecloudscomdevicesdevice_id

HTTP头部 api-key xxxxddddsssaaa masterkey 或设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

iddevice_id

tags [chinamobile]

onlinetrue|false

protocolMQTT

titlemy device1

descsome description

create_time2015-09-16 102222

privatetrue|false

locationele370lat17609lon17703

auth_infohellip

otherversion100manufacturerchina mobile

keys[titledevice-auto-keykey2JO3B12O1]

数据流

datastreams[

create_time 2014-10-23 202222

iddatastream_id1

unitcelsius

unit_symbolC

uuid 231a5aa9-9de4-5f2e-9e0f-015181c98429

]

4326 模糊查询设备

表4-9 模糊查询设备

HTTP方法 GET

URL apihecloudscomdevices

中移物联网有限公司 OneNET 开发文档中心

URL 参数

key_words=my 匹配关键字(可选从 id和 title字段中左匹配)

auth_info=203x1 鉴权信息(可选对应注册时的 sn参数唯一设

备编号)

tag=mobile 标签(可选)

online=true| false 在线状态(可选)

private=true| false 私密性(可选)

page=1 指定页码最大页数为 10000(可选)

per_page=30 指定每页输出设备个数默认 30最多 100(可选)

device_id=235122 指定设备 ID多个用逗号分隔最多 100个(可

选)

begin=2016-06-20 起始时间包括当天(可选)

end=2016-06-20 结束时间包括当天(可选)

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

total_count1

per_page30

page1

devices

[

id3497307

titlemy device1

desc device desc

privatetrue

protocolMQTT

onlinefalse

locationlon10655231191544001lat29535451246673

create_time2013-02-11 122233

auth_infoSYSz=8QY3r7aTQ48UKfqPnB=PybYRo=

]

4327 批量查询设备最新数据

表4-10 批量查询设备最新数据

HTTP方法 GET

中移物联网有限公司 OneNET 开发文档中心

URL apihecloudscomdevicesdatapoints

URL参数 devIds=1221122331123 设备 id用逗号隔开限制 1000 个设备

HTTP头部 api-key xxxxddddsssaaa masterkey 或设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

error ldquosuccrdquo

data

devices [

id 12323 设备 id

title daf设备名

datastreams

[

id temperature数据流名称

at 2017-02-12 102222数据流更新时间

value 12数据流最新数据

hellip

helliphellip

]

hellip

hellip

]

4328 删除

表4-11 删除设备

HTTP方法 DELETE

URL apihecloudscomdevicesdevice_id

HTTP头部 api-key xxxxddddsssaaa 可为设备级别的 Key

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

中移物联网有限公司 OneNET 开发文档中心

说明删除设备会删除该设备下所有数据流和数据点删除设备动作是异步

的系统会在后续逐步删除该设备下的数据流和数据点

433 数据流

4331 新增

表4-12 新增数据流

HTTP方法 POST

URL apihecloudscomdevicesdevice_iddatastreams

HTTP头部 api-key xxxxddddsssaaa masterkey 或设备 apikey

HTTP内容

(示例)

idtemperature 数据流名称 示例温度

tags[Tag1Tag2] 数据流标签(可选可以为一个或多个)

unitcelsius 单位(可选)

unit_symbolC 单位符号(可选)

HTTP响应响

应消息内容

(示例)

errno 0

data

ds_uuid 9e6bcac9-2c6f-59d5-adae-3955df2e7bce平台分配

数据流 UUID

error succ

4332 更新

表4-13 更新数据流属性

HTTP方法 PUT

URL apihecloudscomdevicesdevice_iddatastreamsdatastream_id

示例apihecloudscomdevices421240datastreamstemperature

HTTP头部 api-key xxxxddddsssaaa masterkey 或设备 apikey

HTTP内容

(示例)

tags[Tag1Tag2] 数据流标签(可选)

unitcelsius 单位(可选)

unit_symbolC 单位符号(可选)

HTTP响应响

应消息内容

(示例)

errno 0

error succ

中移物联网有限公司 OneNET 开发文档中心

4333 查询单个数据流

表4-14 查询单个数据流

HTTP方法 GET

URL apihecloudscomdevicesdevice_iddatastreams

URL参数 datastreams_ids = 查看的 datastream的 id

HTTP头部 api-key xxxxddddsssaaa masterkey 或该设备的设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

data [

update_at 2018-06-29 112938 数据流最后更新时

id 湿度 数据流名称

create_time 2018-06-28 170548数据流创建时间

current_value 53845013最新数据点

]

error succ

4334 查询多个数据流

表4-15 查询多个数据流

HTTP方法 GET

URL apihecloudscomdevicesdevice_iddatastreams

URL 参数

datastream_ids= 查看的 datastream的 id多个 id之间用英文逗号

分开(参数缺省时为查询所有数据流)

示例

apionenetcomdevices1234datastreamsdatastream_ids=tempgps

表示查看 temp和 gps两个数据流的信息

HTTP头部 api-key xxxxddddsssaaa masterkey 或者 该设备的设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data 数据流信息

[

idtemperature 数据流名称设备范围内唯一

tags[Tag1Tag2] 数据流标签

unitcelsius 单位

unit_symbolC单位符号

create_timexxxx-xx-xx 102222 创建时间

中移物联网有限公司 OneNET 开发文档中心

current_valuehellip该数据流下数据点最新值

update_atxx-xx-xx该数据流下数据点最新上传时间

]

[

idhumi 数据流名称设备范围内唯一

tags[Tag1Tag2]

unit_symbol

create_timexxxx-xx-xx 102222

current_valuehellip

update_atxx-xx-xx

]

[]

4335 删除

表4-16 删除数据流

HTTP方法 DELETE

URL apihecloudscomdevicesdevice_iddatastreamsdatastream_id

URL参数 无

HTTP头部 api-key xxxxddddsssaaa masterkey 或者设备 key

HTTP响应响

应消息内容

(示例)

errno 0

error succ

434 数据点

4341 新增

中移物联网有限公司 OneNET 开发文档中心

表4-17 新增数据点

HTTP方法 POST

URL apihecloudscomdevicesdevice_iddatapoints

URL参数 type=3 上传数据类型(可选默认为完整 JSON型见 HTTP内容示

例)

HTTP头部 api-key xxxxddddsssaaa masterkey 或者 设备 apikey

HTTP内容

(示例)

datastreams

[

id temperature 数据流名称或数据流模板名称

datapoints [

at 2013-04-22T003543 上传数据点时间可选如

果为空则设备云会取当前时间如果存在其格式必须为 YYYY-MM-

DDThhmmss的形式(例如2015-03-22T223112)

value 42 上传数据点值

at 2013-04-22T005543

value 84 上传数据点值

]

id key 数据流名称或数据流模板名称

datapoints [

at 2013-04-22T003543上传数据点时间可选

value hellip上传数据点值

at 2013-04-22T003543

value hellip上传数据点值

]

hellip

]

中移物联网有限公司 OneNET 开发文档中心

HTTP 响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

1 可以一次性向设备云上传多个数据流每个数据流中可以包括多个数据

点示例程序表示向设备云上数据流 temperature 和数据流 key上传数据其中

temperature数据流有两个数据点key数据流也有两个数据点

2 如果某个数据流不存在则在增加数据点时设备云会自动创建一个新

的数据流注意新数据流的 datastream id 不可为空

3 数据点表示在某个时刻该数据流的值其 at表示时间为可选字段如

果为空则设备云会取当前时间如果存在其格式必须为YYYY-MM-DDThhmmss

的形式(例如2015-03-22T223112)

4 数据点中的 value表示具体的值其值为 JSON对象可以为整型浮点

型字符串多种类型如果 value部分用双引号括起来则其在设备云存储为字

符串如果不用双引号括起来则其表示数值字符编码现在只支持 UTF-8

5 数据点对应的时间是数据点的标识的一部分相同时间的两个数据点

设备云会同时对这两个相同时间的数据点进行保存不会出现覆盖另一个数据点

的情况一般如果 at 部分取空设备云会取系统时间精度为毫秒如果在一

条命令中某一个数据流包含多个数据点都没有 at 字段设备云将会对所有数据

点进行保存

6 新增数据点支持如下简写方式在请求的 URL中增加 type字段指示所

使用的格式类型目前 type支持 345三种情况

URLapihecloudscomdevices2214570datapointstype=3

示例temperature225humidity952

表示在数据流 temperature中增加一个数据点 225在 humidity 中增加一

个数据点 952

URLapihecloudscomdevices2214570datapointstype=4

示例temperature2015-03-22T223112225

表示在数据流 temperature中加一个数据点在 2015年 3月 22 日 22点 31

中移物联网有限公司 OneNET 开发文档中心

分 12秒的值为 225

URLapihecloudscomdevices2214570datapointstype=5

示例temperature2015-03-22T223112225pm2589

表示在数据流 temperature中加一个数据点即 2015年 3月 22 日 22点 31

分 12秒的值为 225在数据流 pm25中添加一个数据点即当前时间的值为 89

4342 查询

表4-18 查询数据点

HTTP方法 GET

URL apihecloudscomdevicesdevice_iddatapoints

URL 参数

datastream_id=abc 查询的数据流多个数据流之间用逗号分隔

(可选)

start=2015-01-10T080035 提取数据点的开始时间(可选)

end=2015-01-10T080035 提取数据点的结束时间(可选)

duration=3600 查询时间区间(可选单位为秒)

start+duration按时间顺序返回从 start开始一段时间内的数据点

end+duration按时间倒序返回从 end回溯一段时间内的数据点

limit=100 限定本次请求最多返回的数据点数0ltnlt=6000(可选

默认 1440)

cursor= 指定本次请求继续从 cursor位置开始提取数据(可选)

sort=DESC | ASC 值为 DESC|ASC时间排序方式DESC倒序ASC升

序默认升序

ltnlt=6000(可选默认 1440)

HTTP头部 api-key xxxxddddsssaaa masterkey 或者 该设备的设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

cursor70921_3771908_1472355096

datastreams[

idtemperature数据流名称或数据流模板名称

datapoints[

at xxxx-xx-xx 102222value42数据点上传时间和

at xxxx-xx-xx 102222value84

]

中移物联网有限公司 OneNET 开发文档中心

idkey 数据流名称或数据流模板名称

datapoints[

at xxxx-xx-xx 102222valuehellip

atxxxx-xx-xx 102222valuehellip

]

hellip

]

1 若不携带任何参数平台返回本设备所存在的所有数据流中的最新数据

(这一种情况下查询时出现时延较大的性能问题建议在 URL 参数中加上

newadd参数并将其值赋为 true如 newadd=true)

2 若不携带数据流 id参数携带 limit 参数时会返回该设备每个数据流

最多 limit 条数据

3 若要查看某一条数据流数据需在上述 URL中增加参数 datastream_id

4

apihecloudscomdevices564280datapointsdatastream_id=tempamplimit

=10会返回数据流temp中最近的 10个数据点

5 要查看某一条数据流在某个时间范围内的数据可以在增加 start和 end

参数

示例

apihecloudscomdevices564280datapointsdatastream_id=temper

atureampstart=2013-05-12T171233ampend=2013-06-12T172233 表示查询本设

备对应的数据流在 2013 年 5 月 12 日 17 点 12 分 33 秒到 17 点 22 分 33 秒的数

据点注意如果 start 参数存在end参数不存在表示取 start后的所有数据

如果 start 不存在end 存在设备云会忽略 end参数注意日期时间格式格

式必须为示例中的格式YYYY-MM-DDThhmmss例如2013-05-12T171233

日期和时间之间用大写字母 T 分隔start 和 end 之间的时间间隔最大为 1 年

超过一年会忽略

如果指定了 start 参数则可能返回的数据点的数目会很多此时默认会返

回最多 100 个数据点可以使用 limit 参数设定返回多少个数据点最大为

6000个数据点当实际的数据点数目多于 limit 限定的数目时返回的 json串

中移物联网有限公司 OneNET 开发文档中心

中会有一个 cursor 字段下一次请求的命令行中可以携带此 cursor 字段表示接

着遍历本数据流此 cursor字段标识上次取出数据点后下一个数据点的位置

435 二进制数据

4351 新增

将二进制数据将作为数据点保存到设备下的某个数据流中设备云返回该二

进制数据的索引号

表4-19 新增二进制数据

HTTP方法 POST

URL apihecloudscombindata

URL参数 device_id=421590 数据所属设备(必选)

datastream_id=bin 该数据所属已经存在的数据流(必选)

HTTP头部 api-key xxxxddddsssaaa masterkey 或者该设备的设备 key

HTTP 内 容

(示例)

普通二进制数据文件图像等

(最大限制为 800上传时间间隔需大于 1ms)

HTTP响应响

应消息内容

(示例)

errno 0

error succ

data

index3491506_1475204886914_bin 二进制数据索引号

4352 查询

表4-20 查询二进制数据

HTTP方法 GET

URL apihecloudscombindataindex

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

普通二进制数据文件图像等二进制形式数据

436 触发器

4361 新增

表4-21 新增触发器

HTTP方法 POST

中移物联网有限公司 OneNET 开发文档中心

URL apihecloudscomtriggers

HTTP头部 api-key xxxxddddsssaaa 必须为 masterkey

HTTP内容

(示例)

titlewen du jian kong 设备名(可选)

ds_idgps 数据流名称(id)(可选)

dev_ids[10272345615523] 设备 ID(可选)

ds_uuids[ 数据流 uuid(可选)

9ad09uac-7446-512f-b07c-90jdnzj8120ad

4599436e-7146-5349-b07c-79fa0919cs62

]

urlxxbbcom

typegt | gt= | lt | lt= | == | inout | in | out |change | frozen |

live

threshold100 阙值根据 type不同见以下说明

1) type 为gt|gt=|lt|lt=|==时threshold必须为数值

2) type为 inout时threshold 设置为lolmt40 uplmt52 表示

数据流的值首次进入或离开闭区间[4052]时触发

3) type为 change时threshold 参数不用传递当上传的值有改变时触发

告警

4) type为 frozen时threshold 为数值指定距离最后一次数据上报多少

秒内未上报数据触发告警同时被监控对象进入 frozen状态

5) type 为 live 时threshold 为数值指定距离最后一次数据上报多少秒

后上报数据触发告警

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

tirgger_id233444 触发器 ID

说明

1触发器的含义是当指定范围内的数据点满足触发条件的要求时会向

url参数指定的地址发送 post请求

2触发器有三种工作触发模式

1)在请求参数中单独指定了 ds_id不包括其他参数那么当前项目下

中移物联网有限公司 OneNET 开发文档中心

所有设备的数据流中数据流名称符合 ds_id 的数据都会进入触发判断逻辑

2)在请求参数中单独指定了 ds_uuids 数组那么只有这些指定的数据

流会进入触发判断逻辑

3)在请求参数中指定了 ds_id 和 dev_ids那么只有这些指定的设备的

数据流会进入触发判断逻辑

4362 更新

表4-22 更新触发器属性

HTTP方法 PUT

URL apihecloudscomtriggerstirgger_id

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP内容

(示例)

titlewen du jian kong

ds_uuids[

9ad09uac-7446-512f-b07c-90jdnzj8120ad

4599436e-7146-5349-b07c-79fa0919cs62

]

urlxxbbcom

typegt | gt= | lt | lt= | == | inout | in | out | exp | change |

frozen | live

threshold100

注若要修改 type需要对应设置 threshold

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

4363 查询单个触发器

表4-23 查询单个触发器

HTTP方法 GET

URL apihecloudscomtriggerstirgger_id

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

idtrigger_id1

中移物联网有限公司 OneNET 开发文档中心

titlewen du jian kong

ds_uuids[

datastream1_uuidrdquo

datastream2_uuidrdquo

datastream3_uuidrdquo

]

urlxxbbcom

typegt|gt=|lt|lt=|==|in|out|exp|change|frozen|live

threshold100

invalidtrue 触发器是否已失效

create_timexx-xx-xx 102222

4364 模糊查询触发器

表4-24 模糊查询触发器

HTTP方法 GET

URL apihecloudscomtriggers

URL 参数

title=name 指定触发器名称

page=1 指定页码可选

per_page=10 指定每页输出个数可选默认 10最多 100

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

total_count600

per_page30

page1

triggers[

idtrigger_id1

titlewen du jian kong

ds_uuids

[datastream1_uuidrdquo datastream2_uuidrdquo]

urlxxbbcom

typegt|gt=|lt|lt=|==|in|out|exp|change|frozen|live

threshold100

invalidtrue 触发器是否已失效

create_timeXXXXXXXX

中移物联网有限公司 OneNET 开发文档中心

]

说明触发器失效是指触发器所依赖的数据流或者设备被删除了此时触发

器永远不会有效触发事件

4365 删除

表4-25 删除触发器

HTTP方法 DELETE

URL apihecloudscomtriggerstirgger_id

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno 0

error succ

4366 触发数据内容

触发数据是指当 OneNET 设备云判断某个触发器的触发条件满足时会通过

POST方式向外抛出的 URL请求在 HTTP的 POST消息体中会携带如下格式的 JSON

字符串

表4-26 触发器内容

数据内容

(示例)

trigger

id1

threshold90

typegt

current_data[

dev_id2656

ds_idgps

ds_uuidFWEF-ZFW-ZFW-ZFWW

at2009-09-07T121602001403Z

value100

dev_id2656

ds_idtemper

中移物联网有限公司 OneNET 开发文档中心

ds_uuidFEWEF-ZFWFWW-WFWW-FWEFFWW

at2009-09-07T121602001403Z

value882

]

437 命令

命令是指应用发送命令数据给 OneNET设备云再由 OneNET设备云转发给终

端设备终端设备收到命令后可以向设备云反馈响应的一种工作机制命令下发

后应用可以通过 API查询命令状态和提取命令的响应数据

命令的执行步骤如下

1应用通过 API 向设备云发送命令数据

2设备云生成该命令的 uuid作为该命令的唯一标识并向应用返回同时向

终端设备转发命令数据

3 终端设备收到命令数据后执行命令数据可以生成响应也可以不响应

4设备云跟踪记录命令的响应如果设备有响应就关联命令 uuid和响应

结果

5应用通过 API 向设备云提取命令执行结果(API 请求中携带命令 uuid 标

识)

特别说明

命令下发到终端设备后如果终端设备 10 秒内未收到响应则此命令的状

态将被设置为超时应用通过 API 查询命令状态时会反馈超时超过 10 秒后

收到的响应会被丢弃

终端设备针对同一条命令回复多条命令响应只有在未超时时间内收到的最

后一条是有效响应前面的响应包将会被覆盖因此终端设备应该对每个命令只

有一个响应包

4371 发送命令

表4-27 发送命令

HTTP方法 POST

URL apihecloudscomcmds

URL 参数 device_id=415120 接收该数据的设备 ID(必选)

中移物联网有限公司 OneNET 开发文档中心

qos=0 | 1 是否需要响应默认为 0

0不需要响应即最多发送一次不关心设备是否响应

1需要响应如果设备收到命令后没有响应则会在下一次设备登陆

时若命令在有效期内(有效期定义参见 timeout参数)则会继续发送

对响应时间无限制多次响应以最后一次为准

本参数仅当 type=0时有效

timeout=300 命令有效时间默认 0

0在线命令若设备在线下发给设备若设备离线直接丢弃

gt0 离线命令若设备在线下发给设备若设备离线在当前时间

加 timeout时间内为有效期有效期内若设备上线则下发给设备单

位秒有效围0~2678400

本参数仅当 type=0时有效

type=0 | 1 默认 00发送 CMD_REQ包1发送 PUSH_DATA包

HTTP头部 api-key xxxxddddsssaaa masterkey或者设备 apikey

HTTP内容 用户自定义数据jsonstring二进制数据(小于 64K)

HTTP响应响

应消息内容

(示例)

errno 0

error succ

data

cmd_uuid2302-312-FWs 命令 id

4372 查询命令状态

表4-28 查询命令状态

HTTP方法 GET

URL apihecloudscomcmdscmd_uuid

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno 0

error succ

data

status1

0设备不在线|Device not online

1命令已创建| Command Created

2命令已发往设备| Command Sent

3命令发往设备失败| Send Command Failed

4设备正常响应| Command Response Received

5命令执行超时| Command Response Timeout

6设备响应消息过长 | Command Response Too Large

descldquosendingrdquo

中移物联网有限公司 OneNET 开发文档中心

4373 查询命令响应

表4-29 查询命令响应

HTTP方法 GET

URL apihecloudscomcmdscmd_uuidresp

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP 响应响

应消息内容

用户设备返回的响应内容

4374 查询设备历史命令

表4-30 查询设备历史命令

HTTP方法 GET

URL apihecloudscomcmdshistoryltdevice_idgtltdevice_idgt

URL 参数

start=2015-01-10T080035 查询的开始时间(可选)

end=2015-01-10T080535 查询的结束时间(可选)

page=1 指定页码最大页数为 10000(可选)

per_page=30 指定每页输出设备个数默认 30最多 100(可选)

HTTP头部 api-key xxxxddddsssaaa

HTTP响应响

应消息内容

errno 0

error succ

data

page 1当前页码

per_page 10当前每页总数

total_count 100

items [

cmd_uuid 2302-312-FWs

device_id 2设备 ID

expire_time 2016-07-05 000000过期时间

status 0命令状态

send_time 2016-07-05 000000发送时间

confirm_time 2016-07-05 000000响应时间

confirm_body 2463726571007b202274797022 响应内容

16进制字符

body 2463726571007b202274797022请求内容16进制字符

hellip

中移物联网有限公司 OneNET 开发文档中心

hellip

]

438 视频能力

4381 获取播放地址

表4-31 获取播放地址

HTTP方法 GET

URL apihecloudscomipcrtmp_address

URL 参数

device_id= 接收该数据的设备 ID(必填)

channel_id = 对应数据流名称中的 channelnum

protocol_type = 播放协议类型 0rtmp1hls2http-flv

HTTP头部 api-key xxxxddddsssaaa masterkey或者设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

errorrdquosuccrdquo

ldquodatardquo

addripport

accessTokenldquo字符串rdquo

439 APIKEY

4391 新增

表4-32 新增 APIKEY

HTTP方法 POST

URL apihecloudscomkeys

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP内容

(示例)

title sharing key key 的命名

permissions [

resources [ 被授权的资源

中移物联网有限公司 OneNET 开发文档中心

dev_id 424 被授权的设备 id

dev_id 425 被授权的设备 id

hellip

hellip

]

access_methods [ 被授权的命令

get

put

post

]

]

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data key2302-312-FWs key_string

说明授权命令是可选的另外被授权的命令也可以是 getputpost 的

一个或几个如只授权 get和 put命令

access_methods [getput]

4392 更新

表4-33 更新 APIKEY

HTTP方法 PUT

URL apihecloudscomkeyskey_string

HTTP头部 api-key xxxxddddsssaaa masterkey(注只能为 master-key)

HTTP内容

(示例)

title sharing key key 的命名

permissions [

resources [ 被授权的资源

dev_id 424 被授权的设备 id

ds_idfan1 数据流 id可选

中移物联网有限公司 OneNET 开发文档中心

dev_id 425 被授权的设备 id

ds_idfan1 数据流 id可选

hellip

hellip

]

access_methods [ 被授权的命令可选

get

put

post

]

]

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

说明

1对于 masterkey 不允许更新操作masterkey 默认具有最大权限可以访

问该用户名下所有设备所有数据

可以进行 POSTGETPUTDELETE操作如果更新 master key 系统会返回

失败

2授权命令是可选的另外被授权的命令也可以是 getputpost 的一个

或几个如只授权 get和 put命令

access_methods [getput]

3API key 更新是覆盖操作会将原来存在的授权资源和授权命令覆盖不

会保留原来的授权资源和授权命令

4393 查看

中移物联网有限公司 OneNET 开发文档中心

表4-34 查看 APIKEY

HTTP方法 GET

URL httpapihecloudscomkeys

URL 参数

key = FWJPO-FZFHW-FFEWB可选只查看该 key相关信息

page = 1 指定页码 可选

per_page = 10 指定每页输出个数可选默认 10最多 100

device_id = xxbbcc可选只查看与该设备相关的非 master-key

HTTP头部 api-key xxxxddddsssaaa masterkey(注只能为 master-key)

HTTP响应响

应消息内容

(示例)

errno 0

data

per_page 30

total_count 2

keys [

create_time 2015-11-04 142552

title Auto-generated-master-key

key 03GeDLYk0WNk1V338g7yndKZYkQA

create_time 2015-12-03 100041

permissions [

resources [

dev_id 564280

]

]

title 设备 1测试 Key

key vuHebEWefiU2Ueo5ouoCc1CUsYQ=

]

page 1

error succ

中移物联网有限公司 OneNET 开发文档中心

4394 删除

表4-35 删除 APIKEY

HTTP方法 DELETE

URL httpapihecloudscomkeyskey_string

HTTP头部 api-key xxxxddddsssaaa masterkey(注只能为 master-key)

HTTP 响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

4310 消息订阅

43101 按 Topic 发送命令

表4-36 按 Topic 发送命令

HTTP方法 POST

URL apihecloudscommqtt

URL参数 topic=xxx 设备订阅的主题(必选)

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP 内 容

(示例)

HTTP响应响

应消息内容

(示例)

errno0

errorldquosuccrdquo

data

total_count1

per_page30

page1

devices [123123433333]

43102 查询订阅指定 Topic设备的列表

表4-37 查询订阅制定 Topic设备的列表

HTTP方法 GET

URL apihecloudscommqtttopic_device

URL 参数

topic=xxx 设备订阅的主题(必选)

page=1 当前页码 必填大于等于 1

per_page=10 每页 必填范围 1-1000

中移物联网有限公司 OneNET 开发文档中心

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP内容

(示例)

HTTP响应响

应消息内容

(示例)

errno0

errorldquosuccrdquo

data

total_count1

per_page30

page1

devices [123123433333]

43103 查询设备订阅的 Topic列表

表4-38 查询设备订阅的 Topic列表

HTTP方法 GET

URL apihecloudscommqttdevice_topicdevice_id

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno0

errorldquosuccrdquo

data

[topic_name1 topic_name2 topic_name3]

43104 删除产品的 Topic

表4-39 删除产品的 Topic

HTTP方法 DELETE

URL apihecloudscommqtttopic

URL参数 name=xxx topic名(必选)

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno0

errorldquosuccrdquo

中移物联网有限公司 OneNET 开发文档中心

43105 查询产品的 Topic

表4-40 查询产品的 Topic

HTTP方法 GET

URL apihecloudscommqtttopic

URL参数 无

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno0

errorldquosuccrdquo

data

[topic_name1topic_name2topic_name3]

中移物联网有限公司 OneNET 开发文档中心

第五章 接入实例

51 MQTT-device 接入

511 工具下载

为方便开发人员直观感受使用 mqtt 协议进入平台的便利可使用平台提供

的 MQTT 设备模拟器进行接入平台请在首页-gt开发文档-gt资源下载-gt13 调试

工具下载进行下载如下图

图5-1 资源下载

下载地址

httpupfileshecloudscom123ueditor201707125d5bc37eca39c0c5b7a5bcb9

0e451eeerar

中移物联网有限公司 OneNET 开发文档中心

512 界面说明

图5-2 界面说明

513 使用方法

5131 创建产品

如 323 的过程在设备接入协议中选择 MQTT

中移物联网有限公司 OneNET 开发文档中心

图5-3 选择连接协议

5132 创建设备

如 323描述在平台上新建一个设备

5133 建立连接

在产品概况中可以查看产品 ID此信息填入模拟器 ProductID一栏如下图

图5-4 产品ID

在平台上进入设备信息页面可查看设备 ID及鉴权信息(此鉴权信息是新建设备时候填

写的鉴权信息)如下图

中移物联网有限公司 OneNET 开发文档中心

图5-5 设备ID及鉴权信息

相应把设备 ID及鉴权信息填入模拟器之中然后点击连接按钮如果未弹出提示对话

框则表示设备鉴权成功如下图

图5-6 连接成功

中移物联网有限公司 OneNET 开发文档中心

5135订阅与发布

演示本操作需要在 OneNet平台建立两个基于 MQTT协议的设备一个用于消息发布

另一个用于消息订阅

图5-7 设备状态

开启两个模拟器分别模拟以上两个设备然后建立连接

首先使用订阅主题打开第一个模拟器模拟消息订阅者

图5-8 订阅主题

其次发布主题打开第二个模拟器模拟消息发布者

中移物联网有限公司 OneNET 开发文档中心

图5-9 发布主题

经过以上两个操作后查看模拟消息订阅者的模拟器则收到了主题

为rdquotopic_namerdquo的消息如下图

中移物联网有限公司 OneNET 开发文档中心

图5-10 收到的主题

5136接收平台指令

建立连接后模拟器也可接收来自平台的指令具体操作如下

先打开模拟器-gt建立连接-gt选中【[OneNet]平台指令接收】选项栏利用平台下发指

令功能下发如下图平台下发指令

图5-11 平台发送命令

中移物联网有限公司 OneNET 开发文档中心

图5-12 下发指令

填写好将要发送的消息后点击【发送命令】按钮则模拟器成功接收到来自平台的

数据如下图模拟器截图

图5-13 模拟器收到的指令

5137上传数据点

Mqtt支持 Json 数据格式上报数据现根据 Json几种格式举一些例来演示怎么利用

模拟器上传数据

1)使用 Json数据 Type1上传 Json数据

datastreams[idtemperaturedatapoints[value255]]

中移物联网有限公司 OneNET 开发文档中心

如下模拟器上传数据界面

图5-14 Type1数据格式

则在平台数据展示中则可看到上传的数据点

图5-15 收到数据展示

2)使用 Json数据 Type3示例 Json数据为

temp32humi98

模拟器发送数据截图

中移物联网有限公司 OneNET 开发文档中心

图5-16 Type3数据格式

平台数据展示截图

图5-17 数据展示

3)使用 Json数据 Type4示例 Json数据为

temperature233pm2589

模拟器上传数据截图

中移物联网有限公司 OneNET 开发文档中心

图5-18 Type5数据格式

平台接收数据展示截图

图5-19 数据展示

52 基于麒麟开发板的 MQTT 接入实例

OneNet 平台为使用户能快速接入发布麒麟座开发板官网提交您的创意免

费申请开发板下面利用麒麟座开发板 V31 演示开发板采集温湿度使用 MQTT发

送到平台的接入流程

开发板申请链接httpsopeniot10086cneventdetail185html

521 搭建开发环境

OneNET 平台提供的麒麟座开发板是基予 STM32 单片机开发的一块功能应用

板开发板包含 MCU温湿度传感器GSM 模块WIFI 模块电源模块键盘

中移物联网有限公司 OneNET 开发文档中心

LED以及 lcd显示接口等满足用户对平台接入的基本需求能快速接入到平台

资料包配备完整工程代码方便工程移植等使用

目前 STM32 开发常用的 IDE 有 IARMDK 等我挑选 MDK 作为开发工具打

开工具包先安装 MDK511A安装完毕后再安装 MDKCM511A开发板所有资料软件

工具包下载案例包

案例包下载链接

httpspanbaiducoms1UB1qZGrVuovSVdbqqXP0Lglistpath=2F

图5-20 MDK包

安装完毕并安装 license详细步骤不做演示

中移物联网有限公司 OneNET 开发文档中心

522 连接硬件准备

5221 开发板接线

图5-21 开发板接线图

电源DC-5V

运行信息USART1-MicroUSB 线

软件下载ST-Link

中移物联网有限公司 OneNET 开发文档中心

5222 ESP8266跳线帽连接

图5-22 ESP8266跳线帽连接

中移物联网有限公司 OneNET 开发文档中心

5223 M6312跳线帽连接

图5-23 M6312跳线帽连接

523 工程实例

例程使用最简单易懂的方式编写着重让大家明白接入流程和协议

10~12 协议专属例程是展示该协议下的专用功能比如 EDP 的 PushData

中移物联网有限公司 OneNET 开发文档中心

HTTP 注册新设备MQTT 的订阅发布等具体使用方法查看该目录下的《使用

说明》

图5-24 工程文件

524 开发工程文件

中移物联网有限公司 OneNET 开发文档中心

图5-25 工程文件

图5-26 工程结构

默认已创建好产品以及设备打开文件工程 onenetc 和 esp8266c 修改例

程的 WIFI 信息和平台信息

分别在 esp8266c 的 36和 onenetc的 414345行

图5-27 更改项

525 编译下载

开发版接串口会有相应状态显示平台设备显示在线状态绿色为连接成功

设备在线灰色表示未连接并在数据展示中显示对应主题的所有数据

中移物联网有限公司 OneNET 开发文档中心

图5-28 连接成功

图5-29 收到数据

其他实例详情请见httpsopeniot10086cnbbsthread-1266-1-1html

中移物联网有限公司 OneNET 开发文档中心

第六章 MQTT 协议详解

61 设备与平台通信协议包格式

协议就是通信双方的一个约定即表示第 1字节传输的什么第 2字节

传输的什么helliphellip在 MQTT协议中一个 MQTT 数据包由固定头(Fixed

header) 可变头(Variable header) 消息体(payload)三部分构成

MQTT 数据包结构固定头部+可变头部+消息体

固定头(Fixed header)存在于所有 MQTT数据包中表示数据包类型及

数据包的分组类标识固定头格式如下

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 - 5 Remaining Length(该字段占用 1-4个字节)

目前平台版本支持的 Packet Type如下

名字 值 流向 描述

CONNECT 1 C-gtS 客户端请求与服务端建立连接

CONNACK 2 S-gtC 服务端确认连接建立

PUBLISH 3 CS 发布消息

PUBACK 4 CS 收到发布消息确认

PUBREC 5 CS 发布消息收到

PUBREL 6 CS 发布消息释放

PUBCOMP 7 CS 发布消息完成

SUBSCRIBE 8 C-gtS 订阅请求

SUBACK 9 S-gtC 订阅确认

UNSUBSCRIBE 10 C-gtS 取消订阅

UNSUBACK 11 S-gtC 取消订阅确认

PING 12 C-gtS 客户端发送 PING(连接保活)命令

PINGRSP 13 S-gtC PING命令回复

DISCONNECT 14 C-gtS 断开连接

可变头(Variable header)存在于部分 MQTT 数据包中数据包类型决定

了可变头是否存在及其具体内容

消息体(Payload)存在于部分 MQTT 数据包中表示客户端收到的具体内

中移物联网有限公司 OneNET 开发文档中心

不同类型数据包中可变头和消息体包含关系如下

消息类型 Variabl

e

Header

Payloa

d

CONNECT 有 有

CONNACK 有 有

PUBLISH 有 有

PUBACK 有 无

PUBREC 有 无

PUBREL 有 无

PUBCOMP 有 无

SUBSCRIBE 有 有

SUBACK 有 有

UNSUBSCRIBE 有 有

UNSUBACK 有 无

PING 无 无

PINGRSP 无 无

DISCONNECT 无 无

62 平台支持数据包类型

621 CONNECT(客户端请求与服务端建立连接 client -gt server)

固定头(Fixed Header)

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 - 5 Remaining Length(该字段占用 1-4个字节)

MQTT Packet Type 值为 0001表示该数据包为请求连接数据包

Remaining Length 剩余长度占 1-4字节

可变头(Variable Header)

包含内容如下

Description 7 6 5 4 3 2 1 0

byte

1-2

ProtocolNa

me Length

0 0 0 0 0 0 0 0

0 0 0 0 0 1 0 0

byte

3

lsquoMrsquo 0 1 0 0 1 1 0 1

byte

4

lsquoQrsquo 0 1 0 1 0 0 0 1

中移物联网有限公司 OneNET 开发文档中心

byte

5

lsquoTrsquo 0 1 0 1 0 1 0 0

byte

6

lsquoTrsquo 0 1 0 1 0 1 0 0

Byte

7

Protocol

Level

0 0 0 0 0 0 0 1

Byte

8

Connect

Flag

Use

r

flag

Passwo

rd

flag

WillReta

in

Flag

WillQo

s Flag

WillFl

ag

CleanSessi

on

Flag

Reser

ve

Byte

9-10

KeepAlive

(1) 版本

Protocol Level 必须设置为 4平台只支持协议版本 v 311不支持更老

的版本使用第三方客户端时需要注意选择正确的版本

(2) user flag 与 password flag

平台不允许匿名登陆因此这两个标志位在连接时必须设置为 1否则认为

协议错误平台将会断开连接

(3) Will flag 与 WillretainflagWillQosFlag

Will flag 为 0时WillQosFlag 和 WillRetainFlag 必须为 0Will Flag

为 1时WillQosFlag 只能为 012

1当该设备下一次正常上线后服务器会清除之前的 will 消息(包括

retain 消息)

2如果设备上线时设置了 Will Topic 和 msg且将 WillRetainFlag 设

置为 1只有设备异常断开后服务器才会将该 Will msg 分发给新的 Will

Topic 的订阅者且 Qos 级别以订阅的 Request qos 级别为准

3如果设备上线时设置了 Will Topic 和 msg且将 WillRetainFlag 设

置为 0服务器不会存储该消息当设备异常断开后会将该 Will msg 以设

备设置的 WillQosFlag的 Qos级别进行分发

(4) CleanSessionFlag

若客户端将 clean session 标志位设置为 0当其断开后平台将会保存

sessionsession 需保持的内容包含

客户端订阅的 topic列表

中移物联网有限公司 OneNET 开发文档中心

还未完成确认的 Qos1Qos2级别的 publish消息

客户端保存 session 的内容包含

已经发送到服务端的但还没有收到确认的 Qos1Qos2消息列表

待发送的 Qos0列表

若客户端将 clean session 标志位设置为 1当其断开后平台会清除设备

的订阅列表及未完成确认的 Qos1Qos2 的 publish消息

(5) Reserve

保留位置 0

(6) KeepAlive 保活时间

每个客户端可自定义设置连接保持时间最短 120秒最长 65535 秒

消息体(Payload) Description 是否必须存在 格式

Field1 Client

Identifier

是 2字节字串长度 + utf8字

Field2 UserName 是 2字节字串长度 + utf8字

Field3 UserPassword 是 2字节字串长度 + utf8字

目前平台支持的方式为以后两种

方式 1设备 ID项目 ID鉴权信息(auth_info)

字段设置 消息示例

client_id设置为平台创建设备时的

设备 id

username设置为ldquo项目 IDrdquo

password设置为ldquo鉴权信息

(auth_info)rdquo

client_id=rdquo123rdquo

username=rdquo433223rdquo

password=rdquo注册的鉴权信息rdquo

各字段说明如下

鉴权信息(auth_info)在平台申请设备时填写设备的 auth_info 属性(数

字+字母的字符串)该属性需要产品内具备唯一性(可使用设备出厂唯一编号)

方式 2设备 ID + APIKey(项目 ID也需要填写)

字段设置 消息示例

client_id设置为平台创建设备时的

设备 ID

username设置为ldquo项目 IDrdquo

client_id=rdquo123rdquo

username=rdquo433223rdquo

password=Api Key

中移物联网有限公司 OneNET 开发文档中心

password设置为ldquoAPI鉴权信息

(auth_info)rdquo

项目 ID在平台添加项目时平台生成的 ID

APIKey在平台上创建产品时生成的 APIKey

连接包实例如下

Send one mqtt packet

FixHeader

PacketTag = 16

PacketType = 1

RemainLength = 34

VariableHeaderConnect

protocol_name_len_= 4

protocol_name_= MQTT

protocol_level_= 4

connect_flag_= 192

keep_alive_= 12000

client_id_len_= 8

client_id_= 34764813

usr_name_len_= 6

usr_name_= 150295

password_len_= 4

password_= push

MQTT0x10 0x22 0x00 0x04 0x4D 0x51 0x54 0x54 0x04 0xC0 0x2E 0xE0 0x00 0x08 0x33

0x34 0x37 0x36 0x34 0x38 0x31 0x33 0x00 0x06 0x31 0x35 0x30 0x32 0x39 0x35 0x00

0x04 0x70 0x75 0x73 0x68

Send One Packet Succ

中移物联网有限公司 OneNET 开发文档中心

622 CONNACK (服务端确认连接建立)

Fixed Header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type = 2 0 0 0 0

byte2 - 5 Remaining Length(该字段占用 1-4个字节)

Variable Header

Description 7 6 5 4 3 2 1 0

byte 1 Acknowledge Flags 0 0 0 0 0 0 0 Sp

byte 2 Return Code x x x x x x x x

Sp Session Present Flagsession信息在服务器已保持置 1未保存置

0

返回码说明

返回码 描述

0 成功

1 协议版本错误

2 非法的 clientid

3 服务不可用

4 用户名或密码错误

中移物联网有限公司 OneNET 开发文档中心

5 非法链接(比如 token非法)

失败

如果 connect包不符合协议内容约束则直接断掉连接而不需要发送 conn

ack包

如果鉴权或授权失败回复一个带非 0错误码的 connack包

成功

必须断掉重复的 clientid

执行 cleansession 对应的操作

必须回复一个 connack回复码为 0

开始消息传递并加入 keepalive的监视

PS客户端需要等到服务端的 connack报文才能发送后续的数据包

623 PUBLISH(发布消息 client -gt server)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type DUP f

lag

QoS Level RETAI

N

byte2 - 5 Remaining Length(该字段占用 1-4 个字节)

DUP

QoS2Qos1如果为 0则表示是第一次发送该包如果为 1则表示

为重复发送的包

Qos0DUP 必须为 0

中移物联网有限公司 OneNET 开发文档中心

QoS 指定了该 publish包的 Qos 等级如下

Qos 值 Bit2 Bit1 描述

0 0 0 最多发送一次

1 0 1 至少发送一次

2 1 0 只发送一次

RETAIN 保留标志位如果为 1服务器存储最新一条 RETAIN消息以便

分发给新的订阅者如果 RETAIN为 1Payload 为空服务器分发该消息后会

清空该 topic 下的 RETAIN 消息

PS该版本实现了 Qos0Qos1Qos2

Variable Header

Description 格式 是否必须

Field1 TopicName 2 字节字串长度 + utf8字

Field2 PacketIdent

ifier

2 字节 QoS0否QoS1Qos2是

Payload

内容根据不同业务自定义

624 PUBLISH(发布消息 server -gt client)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type DUP f

lag

Qos Level RETAIN

byte2 - 5 Remaining Length(该字段占用 1-4个字节)

DUP

Qos2QoS1如果为 0则表示是第一次发送该包如果为 1则表示

为重复发送的包

中移物联网有限公司 OneNET 开发文档中心

Qos0DUP 必须为 0

QOS 指定了该 publish包的 qos等级如下

Qos 值 Bit2 Bit1 描述

0 0 0 最多发送一次

1 0 1 至少发送一次

2 1 0 只发送一次

RETAIN如果服务器分发的消息是 RETAIN 消息则将该标志位置 1否则置

0

PS该版本实现 Qos0Qos1Qos2其中服务器分发消息的 Qos级别是以 Clien

t-gtServer 发送的 publish 包的 qos 等级为准非订阅的 topic 的 Qos 等级R

etain 消息是以订阅的 Request Qos 级别进行推送

VariableHeader

Description 格式

Field1 TopicName 2 字节字串长度 + utf8字

Payload

内容根据不同业务自定义

625 PUBACK(收到发布消息确认)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

中移物联网有限公司 OneNET 开发文档中心

626 PUBREC(发布消息收到)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

627 PUBREL(发布消息释放)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

628 PUBCOMP(发布消息完成)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

中移物联网有限公司 OneNET 开发文档中心

byte 1~

2

PacketIdentifier PacketIdentifier

629 SUBSCRIBE(订阅请求)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

Payload

Description 格式

Byte1~

n

TopicName 2 字节字串长度 + utf8字

Byten+

1

Request Qos 服务质量要求(只能为 0

12)

topic 说明

可以包含一个或多个 topic

topic必须是数字英文反斜杠()的组合目前不支持通配符

每个客户端最多订阅 100个 topic

以下 topic 被系统保留使用(客户端不能订阅)

类型 说明

$开头 平台保留

中移物联网有限公司 OneNET 开发文档中心

6210 SUBACK(订阅确认)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

Payload

Description 7 6 5 4 3 2 1 0

byte 1 retcode

返回码说明

返回码 描述

0x00 成功(granted qos = 0)

0x01 成功(granted qos = 1)

0x02 成功(granted qos = 2)

0x80 失败

6211 UNSUBSCRIBE(取消订阅)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

中移物联网有限公司 OneNET 开发文档中心

Payload

Description 格式

Byte1~

n

TopicName 2 字节字串长度 + utf8字

可以包含一个或多个 topic

6212 UNSUBACK(取消订阅确认)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

6213 PING(客户端发送 PING(连接保活)命令)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

NULL NULL

注PING命令无 VariableHeader

中移物联网有限公司 OneNET 开发文档中心

6214 PINGRSP(PING命令回复)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

NULL NULL

注PINGRSP无 VariableHeader

6215 DISCONNECT(断开连接)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

NULL NULL

注DISCONNECT无 VariableHeader

中移物联网有限公司 OneNET 开发文档中心

第七章 设备开发流程

71 连接鉴权

Device Onenet

(Connect)鉴权请求

(ConnAck)鉴权结果

加载session

鉴权

图7-1 连接鉴权

设备向平台发起 connect 请求connect 中携带鉴权信息具体

参见(报文格式参考 621)

平台拿到鉴权信息进行鉴权

鉴权通过后如果 cleansession=0 平台将会加载保存的设备

的一些信息如订阅列表(621中描述)

如果 cleansession=1 设备没有保存信息在平台则不加载设

备相关信息

返回鉴权结果 ConnAck(报文格式参考 621)

72 消息发布

721 数据点上报

设备使用 publish 报文来上传数据点 报文格式如下

中移物联网有限公司 OneNET 开发文档中心

VariableHeader

Field 名称 说明 格式

Field1 TopicName=rdquo$dprdquo $dp 为系统上传数据点

的指令

2字节字串长度 + utf8

字串

Payload

Payload包含真正的数据点内容支持的格式如下

Byte 1 Bit0-5数据类型指示目前支持

Type = 1

Type = 2

Type = 3

Type = 4

Type = 5

Type = 6

Type = 7

Bit6-7 flags 根据具体类型不同意义

Type6Type7这两种需要填写时间戳的数据类型

如果填入了时间戳则须将 bit7 置 1否则置 0(即

忽略数据类型说明中的日期时间相关字段)

0 0 0 0 0 0 0 1

Byte 2 根据数据类型指示不同

Byte n

中移物联网有限公司 OneNET 开发文档中心

数据类型 1(type == 1)格式说明

数据类型 2(type == 2)格式说明

Byte 1 数据点类型值1 1JSON 格式 1 字符串 0 0 0 0 0 0 0 1

Byte 2 指示后面 json 字符串长度

固定两字节长度高位字节值为 0x00

Byte 3 固定两字节长度低位字节值为 0x41

Byte 4

ldquodatastreamsrdquo[ 可以同时传递多个数据流

ldquoidrdquordquotemperaturerdquo

ldquodatapointsrdquo[数据流可以有多个数据点

rdquoatrdquordquo2013-04-22 222222rdquo可选

rdquovaluerdquo 365用户自定义

]

ldquoidrdquordquolocationrdquo

ldquodatapointsrdquo[hellip]

hellip

]

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

Byte n

Byte 1 数据点类型指示type=2 二进制数据 0 0 0 0 0 0 1 0

Byte 2 指示后面 json 字符串长度

固定两字节长度-高位字节值为 0x00

Byte 3 固定两字节长度-低位字节值为 0x10

Byte 4

rdquods_idrdquordquoimagerdquo 创建数据流时定义的 ID(必填)

ldquoatrdquordquo2014-10-25 122323rdquo 时间(可选)

rdquodescrdquo字符串或 json 对象对该数据的描述(可选)

hellip

Byte n

Byte n+1 指示后面二进制数据长度

固定四字节长度-第 1 字节(最高)值为 0x00

Byte n+1 固定四字节长度-第 2 字节值为 0x00

Byte n+2 固定四字节长度-第 3 字节值为 0x01

Byte n+3 固定四字节长度-第 4 字节(最低)值为 0x00

Byte n+4 该域目前最大支持 3M

中移物联网有限公司 OneNET 开发文档中心

数据类型 3(type == 3)格式说明

数据类型 4(type ==4)格式说明

hellip 本例中的该域 256 字节数据

Byte n+260

Byte 1 数据点类型指示type=3 JSON 格式 2 字符串 0 0 0 0 0 0 1 1

Byte 2 指示后面字符串长度

固定两字节长度高位字节值为 0x00

Byte 3 固定两字节长度低位字节值为 0x46

Byte 4 通用格式

ldquodatastream_id1rdquordquovalue1rdquo

ldquodatastream_id2rdquordquovalue2rdquo

hellip

示例

ldquotemperaturerdquo225rdquohumidityrdquordquo952rdquo

hellip

hellip

hellip

hellip

Byte n

Byte 1 数据点类型指示type=4 JSON 格式 3 字符串 0 0 0 0 0 1 0 0

Byte 2 指示后面字符串长度

固定两字节长度高位字节值为 0x00

Byte 3 固定两字节长度低位字节值为 0x46

Byte 4 通用格式

ldquodatastream_id1rdquoldquodatetime1rdquordquovalue1rdquo

ldquodatastream_id2rdquo ldquodatetime2rdquordquovalue2rdquo

hellip

示例

ldquotemperaturerdquoldquo2015-03-22 223112rdquo225

hellip

hellip

hellip

hellip

Byte n

中移物联网有限公司 OneNET 开发文档中心

数据类型 5(type == 5)格式说明

数据类型 6(type == 6)格式说明

Byte 1 数据点类型指示type=5 自定义分隔符 0 0 0 0 0 1 0 1

Byte 2 指示后面字符串长度

固定两字节长度高位字节值为 0x00

Byte 3 固定两字节长度低位字节值为 0x41

Byte 4 消息中最前面两字节为用户自定义的域中分隔符和域间分隔符

这两个分隔符不能相同比如采用逗号作为域中分隔符分号作

为域间分隔符的格式如下

feild0feild1hellipfeildn

其中每个 field 格式支持 3种

field 格式 1 3 个子字段分别是数据流 ID时间戳数据值

通用格式

Datastream_iddatetimevalue

field 格式 2 2 个子字段分别是数据流 ID 和数据值省略时

间戳通用格式

Datastream_idvalue

field 格式 3 1 个子字段省略了数据 ID 和时间戳只传输数

据值平台将用该域(feild)所在的位置号(从 0 开始)作为数据

流 ID通用格式

value

示例

(1)temperature2015-03-22

223112225102pm258910

(2)temperature2015-03-22

223112225102pm258910

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

Byte n

Byte 1 数据类型指示type=6 带时间自定义分隔符 0 0 0 0 0 1 1 0

Byte 2 年(后两位)例如 2016 年则该字节为 16 0 0 0 1 0 0 0 0

Byte 3 月(1-12)

Byte 4 日(1-31)

Byte 5 小时(0~23)

Byte 6 分钟(0~59)

Byte 7 秒(0~59)

Byte 8 指示后面字符串长度

固定两字节长度高位字节值为 0x00

Byte 9 固定两字节长度低位字节值为 0x41

Byte 10 消息中最前面两字节为用户自定义的域中分隔符和域间分隔符

具体格式见 type=5 说明若相关域中没有时间戳则采用本类

hellip

中移物联网有限公司 OneNET 开发文档中心

数据类型 7(type == 7)格式说明(每次最多 500个数据流的浮点数)

hellip 型的默认时间戳当作数据点的时间来存储

Byte n

Byte 1 Bit0-5 数据类型指示type=7 可离散浮点数数据流

Bit6保留置 0

Bit7 时间指示位1携带 6字节时间

1 0 0 0 0 1 1 1

Byte 2 年(后两位)例如 2016 年则该字节为 16 0 0 0 1 0 0 0 0

Byte 3 月(1-12)

Byte 4 日(1-31)

Byte 5 小时(0~23)

Byte 6 分钟(0~59)

Byte7 秒(0~59)

Byte 8 数据流名称(取值范围 1-65535)

高位字节值为 0x00

Byte 9 低位字节值为 0x01

Byte10 数据流个数(取值范围 1-500)

高位字节值为 0x00

Byte11 低位字节值为 0x01

Byte 10 4 字节 float 类型低位在前高位在后

Byte 11

Byte 12

Byte 13

Byte n 数据流名称(取值范围 1-65535)

高位字节值为 0x24

Byte n+1 低位字节值为 0x37

Byte n+2 数据流个数(取值范围 1-500)

高位字节值为 0x01

Byte n+3 低位字节值为 0x00

Byte n+2 4 字节 float 类型低位在前高位在后

Byte n+4

Byte n+5

Byte n+6

中移物联网有限公司 OneNET 开发文档中心

7211 Qos0(Client-gtServer)

Device OneNet

Publish $dp(Qos0)

存储

图7-2 QoS连接图

设备发布 Qos0 消息(上报数据点)

平台收到上报数据点后保存起来

7212 Qos1(Client-gtServer)

Device OneNet

Publish $dp(Qos1)

存储

PubAck

图7-3 Qos1连接图

设备发布 Qos1 消息(上报数据点)

中移物联网有限公司 OneNET 开发文档中心

平台收到上报数据点后保存起来

平台给设备回复相应的 PubAck (报文格式参考 625)

7213 Qos2(Client-gtServer)

Device OneNet

Publish $dp(Qos2)

存储

PubRec

PubRel

PubComp

图7-4 Qos2连接图

设备发布 Qos2 消息(上报数据点)

平台收到上报数据点后保存起来

平台给设备回复相应的 PubRec报文

设备需回复平台 PubRel报文如超时不回平台则会断开相应连接

平台给设备回复 PubComp报文

注数据点上报功能不支持 Retain 特性

中移物联网有限公司 OneNET 开发文档中心

722 平台命令(下发amp回复)

7221 命令下发

平台使用 publish 报文来下发平台指令 报文格式如下

FixHeader

参考 623

VariableHeader

Field 名称 说明 格式

Field1 TopicName=rdquo$creqcmduuidrdquo $creq为系统下发

Cmd 的 指 令

cmduuid为该条指

令的 uuid

2字节字串长度 +

utf8字串

Payload

Payload包含真正的指令内容

72211 Qos0(Server-gtClient)

DeviceOneNet

Publish $creq(Qos0)

图7-5 Qos0命令下发

命令下发

平台向设备发送 topic为$creq的消息(该 topic为平台命令)

中移物联网有限公司 OneNET 开发文档中心

设备收到 topic 为$creq 的 topic 时需将其作为平台下发的指令来处

注目前命令下发以 Qos0级别进行推送

7222 命令回复

设备使用 publish 报文来回复平台指令 报文格式如下

FixHeader

参考 623

VariableHeader

Field 名称 说明 格式

Field1 TopicName=rdquo$crspcmduuidrdquo $crsp为系统处理

设备回复 cmd 的

指令cmduuid为

该条指令的 uuid

2字节字串长度 +

utf8字串

Payload

Payload包含真正回复的指令内容

72221 Qos0(Client-gtServer)

DeviceOneNet

Pulish $crsp(Qos0)

图7-6 Qos0下发命令

中移物联网有限公司 OneNET 开发文档中心

72222 Qos1(Clientlt-gt Server)

DeviceOneNet

Pulish $crsp(Qos1)

Puback

图7-7 Qos1下发命令

如果设备回复响应时以 Qos1回复则平台需要给设备回复一个 Puback 报文

72223 Qos2(Clientlt-gt Server)

DeviceOneNet

Pulish $crsp(Qos2)

PubRec

PubRel

PubComp

图7-8 Qos2下发命令

如果设备回复响应时以 Qos2回复则

1平台需回复设备一个 PubRec报文

中移物联网有限公司 OneNET 开发文档中心

2设备在收到 PubRec后需向平台回复 PubRel报文

3平台收到 PubRel 报文后向设备回复 PubComp报文

73 创建 Topic

Device OneNet

HTTP 请求

HTTP 响应

图7-9 创建Topic

设备通过发送 HTTP请求进行 topic 的创建操作

平台收到请求后创建 topic 并返回结果

请求及响应定义如下

HTTP方法 POST

URL httpapihecloudscommqtttopic

HTTP头部 api-keyxxxx-ffff-zzzzz必须 master key

URL参数

HTTP body

内容

ldquonamerdquordquoxxxxxxrdquo topic 名字只能由英文下划线反斜杠组成最长

1024个字符同一产品下 topic name 不重复

成功返回

errno 0

errorldquosuccrdquo

说明 每个产品最多 100个 topic

中移物联网有限公司 OneNET 开发文档中心

74 订阅

Device OneNet

Subscribe

Suback

更新设备订阅列表

图7-10 订阅

设备发起订阅请求(报文格式参考 629)

平台收到请求后更新 topic列表

平台给设备回复 SubAck (报文格式参考 6210)

注subscribe 的 request qos级别可以为 012

75 取消订阅

Device OneNet

UnSubscribe

UnSuback

更新设备订阅列表

图7-11取消订阅

中移物联网有限公司 OneNET 开发文档中心

设备发起取消订阅请求 (报文格式参考 6211)

平台收到请求后更新 topic 列表

平台给设备回复 UnSubAck (报文格式参考 6212)

76 推送设备 Topic

761 Publish 报文推送

Qos0设备使用 Qos 级别为 0的 Publish报文来进行推送

Device OneNet

Publish(Qos0)

Device

以Qos0 Publish到订阅设备

图7-12 Qos0推送

设备发起推送 topic请求(以 Qos0级别)

平台收到请求后将 topic以 Qos0级别推送到相关订阅设备(支持离线设

备推送)

平台不返回 PubAck或 PubRec 等报文

Qos1

设备使用 Qos级别为 1的 publish报文来推送 Topic

中移物联网有限公司 OneNET 开发文档中心

Device OneNet

Publish(Qos1)

PubAck

Device

以Qos1 Publish到订阅设备

设备回复平台 PubAck

图7-13 Qos1发布

设备发起推送 topic请求(以 Qos1级别)

平台收到请求后将 topic以 Qos1级别推送到相关订阅设备(支持离线设

备推送)

平台返回 PubAck 报文

Qos2

设备使用 Qos级别为 2的 publish报文来推送 Topic

中移物联网有限公司 OneNET 开发文档中心

Device OneNet

Publish(Qos2)

PubRec

Device

以Qos2 Publish到订阅设备

PubRec

PubRel

PubComp

PubRel

PubComp

图7-14 Qos2推送

设备发起推送 topic请求(以 Qos2级别)

平台收到请求后回复 PubRec报文

设备收到 PubRec后需回复 PubRel报文 (如超时不回复平台会断开与设

备的连接)

平台收到 PubRel 报文后回复 PubComp 给设备

平台在回复 PubComp 后会以 Qos2 级别推送到相关订阅设备(支持离线设

备推送)

设备需回复 PubRec报文 (如超时不回复平台会断开与设备的连接)

平台发送 PubRel 报文给设备

设备需回复 PubComp(发布完成)

Publish报文的格式如下

FixHeader

参考 623

中移物联网有限公司 OneNET 开发文档中心

VariableHeader

Field 名称 说明 格式

Field1 TopicName 填写设备订阅的 topic 2字节字串长度 + utf8

字串

Payload

Payload为设备自定义内容

762 HTTP 请求推送

Device OneNet

HTTP 请求

HTTP 响应

Device

Publish到订阅设备

图7-15 HTTP请求

设备以 HTTP 的方式发起推送 topic 请求

平台收到请求后将 topic推送到相关订阅设备 (目前只支持在线推送)

平台返回推送结果

请求及响应定义如下 HTTP方法 POST

URL httpapihecloudscommqtt

HTTP头部 api-keyxxxx-ffff-zzzzz必须 master key

URL参数 topic=ldquoXXXXXXrdquo必选在发送 mqtt协议的 topic 必填

HTTP body内容 用户自定义 Json 或二进制数据(小于 64K)

成功返回

errno 0

errorldquosuccrdquo

中移物联网有限公司 OneNET 开发文档中心

77 离线 Topic

推送 Topic只针对在线设备进行 topic 消息的推送离线设备不会收到订阅

的 topic 的消息离线 Topic则会将该消息推送给在线以及离线设备

1 如果设备在上线时设置了 clean session flag服务端会删除其订阅的

topic及相关的离线 topic消息

2 如果设备没有设置 clean session flag如果有与该设备相关的离线

topic消息则在鉴权成功后将离线消息推送给设备

3 遗嘱消息(will msg)只会推送给订阅了该 will topic的在线的设备离

线设备不会收到

4 离线消息的有效期默认为 2 天(暂不支持用户设定有效期)服务器只会

推送在 2天内的最近 10 条消息

78 数据点订阅

数据点订阅同一产品下的设备可以订阅其他设备的数据点订阅的 topic

格式为deviceid数据流名称即

被关注的设备在上传了该数据流名称的数据点后订阅了该 topic的其他设备都

会收到上传的数据点

1 AB设备的 deviceid分别为 92779278

2 A 设备订阅了名为92789527 的 topic(9278 为设备 B 的 id9527 为 B

设备上传的数据流名称)

3 B 设备上传了名为 9527的数据流(数据点为 11 1578hellip)

4 A 设备会收到多条(取决于设备 B 上传的数据点的个数)推送的 topic 名

为92789527 的 publish消息消息的 payload中则包含设备 B 上传的数据

注目前支持订阅的数据点的类型为 Type1~Type7(详见 721节)

中移物联网有限公司 OneNET 开发文档中心

第八章 常见问题 FAQ

用户在基于 OneNET 平台进行产品开发的过程中可能会遇到各种各样的问

题开发过程中遇到的问题一方面可以参考 OneNET 文档中心的文档或者本文

档前几个章节的内容另一方面用户可以参考本章节总结的常见问题希望这些

文档能对用户在开发过程中有一定的指导和帮助

本章将分三个小节对用户在开发产品过程中可能遇到的问题进行梳理分别

为终端设备接入 OneNET平台的常见问题API调用的常见问题和 OneNET平台

的能力

81 终端设备接入 OneNET 平台的常见问题

序号 问题描述 原因分析 解决方法

1

2

3

4

5

6

7

82 API 调用的常见问题

序号 问题描述 原因分析 解决方法

1

2

3

4

5

6

7

8

9

中移物联网有限公司 OneNET 开发文档中心

83 使用 OneNET平台遇到的常见问题

序号 问题描述 原因分析 解决方法

1

2

3

4

5

6

7

8

Page 6: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com

中移物联网有限公司 OneNET 开发文档中心

第一章 文档说明

编写此开发文档是为了让开发人员使用 MQTT协议快速接入 OneNET 平台形

成基于设备上传数据的物联网应用开发

通过阅读此文档开发人员可以了解 OneNET 平台接入的总体流程包括设

备使用 MQTT协议接入 OneNET平台步骤基于 OneNET平台开发上层应用

文档适用人员熟悉 MQTT 协议设备接入侧需要具备一定功底的嵌入式开

发人员北向 API调用的开发人员需要具备一定的应用软件开发能力

注意建议以公司名义先注册 OneNET 平台账号

中移物联网有限公司 OneNET 开发文档中心

第二章 MQTT 协议接入流程

MQTT (Message Queue Telemetry Transport)遥测传输协议使用 TCPIP 提

供网络连接能够对负载内容实现消息屏蔽传输开销小可以有效降低网络流

量其主要提供了订阅发布两种消息模式更为简约轻量易于使用特别适

合于受限环境(带宽低网络延迟高网络通信不稳定)的消息分发属于物联

网(Internet of Thing)的一个标准传输协议

嵌入式设备选择 MQTT 协议优点

1 轻量级的 machine-to-machine 通信协议

2 发布(publish)订阅(subscribe)模式

3 基于 TCPIP支持 QoS

4 长连接协议

5 终端数据点上报支持的数据点类型包括

o 整型(int)

o 浮点数(float)

o 字符串(string)

o JSON 格式

6 适合于低带宽不可靠连接嵌入式设备CPU 内存资源紧张

典型应用场景

MQTT 协议适用于设备和平台需要保持长连接的使用场景MQTT 特点在

于可以实现设备间的消息单播以及组播可以不依赖于其他服务(下发命令服务

推送服务等)实现让设备以应用服务器的方式对真实设备进行管理和控制

以门禁系统为例应用服务器(虚拟设备)可以订阅每个门禁(真实设备)

的统计数据的 topic对所有门禁的数据进行统计分析每个门禁也可以订阅自

身开关门的 topic应用服务器凭此可以远程控制每个门禁的状态

中移物联网有限公司 OneNET 开发文档中心

21 设备接入平台流程图

平台

TCP连接创建产品

发送连接报文

连接应答

数据应答

发送数据报文

生成连接报文

数据应答

发送数据报文

终端

发送下行命令 下发命令

解析下行命令

生成存储数据报文

生成存储数据报文

解析连接应答

解析数据应答

解析数据应答

必要流程

可选流程

存储到数据流

存储到数据流

数据源 创建应用

心跳应答

发送心跳报文生成心跳报文

解析心跳应答

平台操作

设备操作

创建设备

图2-1 设备接入OneNET平台流程图

1) 创建产品

根据产品功能需求选择接入协议重要参数产品 ID注册码产品 APIKey

(见附录一)

2) 创建设备

通过 TCP直接与平台直连的终端在进行接入之前平台上必须要先存在一

个与之一一对应的虚拟设备可以通过开发者中心或者 API 注册创建设备接口

来创建重要参数设备 ID鉴权信息

3) 建立 TCP连接

不同协议有着不同的固定 IP地址与端口

中移物联网有限公司 OneNET 开发文档中心

4) 建立设备连接

通过 1)2)中的参数(一般为产品 ID+鉴权信息+设备 ID)生成连接报文

发送连接报文建立终端与 2)中新建设备的一一对应关系

5) 发送数据报文

按照连接协议生成数据报文发送至平台

6) 创建应用

7) 使用平台下发命令接口或者 API向设备发送指令

22 应用开发流程图

应用开发主要是通过 Rsetful API 的方式实现和 OneNET 平台进行交互对

接在您完成产品创建以及硬件接入后即可根据相关所接入的硬件设备以及所

上传的数据进行相关产品的开发

OneNET 平台提供的应用开发 API分为需要终端响应和只需 OneNET 平台

响应两类下面分别用两个流程图描述这两类 API 的开发流程图 2-2为需

要终端响应的 API 调用流程其中虚线部分只有离线命令的读写下发命令才

有该流程图 2-3为只需平台响应的 API 调用流程

在应用开发平台调用 API 之前 必须与 OneNET 平台建立连接建立连

接的过程和 API 调用流程一并在图中进行了标注

中移物联网有限公司 OneNET 开发文档中心

图2-2 需要终端响应的API流程

终端设备 OneNET平台 应用开发平台

1配置应用开发地址Token等参数

2向应用开发平台发起URLampToken验证

3解析验证请求参数返回验证消息

应用平台与OneNET平台已经建立连接

4调用API指令HTTP请求

5返回平台侧执行结果错误代码和uuid

6API指令执行完毕

图2-3 不需要终端响应的API流程

终端设备 OneNET平台 应用开发平台

1配置应用开发地址Token等参数

2向应用开发平台发起URLampToken验证

3解析验证请求参数返回验证消息

应用平台与OneNET平台已经建立连接

4调用API指令HTTP请求MQTT请求

5返回平台侧执行结果错误代码和uuid

6相应指令请求返回数据 推送数据及执行结果给应用平台

7API指令执行完毕

中移物联网有限公司 OneNET 开发文档中心

第三章 终端设备接入 OneNET 平台流程

终端设备与 OneNET 平台进行数据交互需经过公网到达平台根据 OneNET

平台与网络运营商的关系终端设备智能网关OneNET平台以及第三方应用四

者的网络关系可归纳如图 3-1所示

图3-1 终端设备与服务器网络关系

图 3-1 中终端设备或智能网关设备与 OneNet 平台使用 TCPIP 建立网络连

接使用 MQTT协议进行与平台进行数据通信

31 终端设备接入 OneNET 平台前的准备工作

311 硬件准备

设备终端接入 OneNET平台的通信方式也是多种多样的比较常用的有 GPRS

无线 WIFI以太网口GPRS 方式需要 GPRS 模块和 SIM 卡的支持无线 WIFI 模

块需要 WIFI 模块支持WIFI 模块推荐选用 ESP8266 串口 WIFI 模块GPRS 模块

推荐选用 SIM900A模块

312 软件准备

设备终端接入 OneNET 平台使用 MQTT 协议使用嵌入式设备需移植 SDK

到 MCU详见麒麟发开板接入实例

中移物联网有限公司 OneNET 开发文档中心

32 终端设备接入 OneNET 平台步骤

321 OneNET 平台创建产品及设备

3211 注册用户账号

进入 OneNET官网(httpsopeniot10086cn)点击首页右上角的ldquo注

册rdquo按钮注册用户账号

OneNET 支持ldquo个人用户rdquo和ldquo企业用户rdquo两种注册方式你可以根据您的

实际情况选择注册方式

以个人用户注册为例用户需在对应选项依次填写用户名用户密码所在

地手机号码图片验证码以及手机验证码并完成注册注册页面如图 3-2所

示注册完成后回到主页点击ldquo登录rdquo即可进入 OneNET 的官方主页并由

此进入到你的ldquo开发者中心rdquo

如果客户产品后续需要进行规模化量产建议以企业的名义进行注册注册

时注意注册信息的准确填写另外个人版和企业版在功能上无差异

图3-2 用户账号注册页面

3212 创建产品和设备

在进入到你的ldquo开发者中心rdquo后点击右上角的 ldquo创建产品rdquo在弹出页面中

按照提示填写产品的基本信息进行产品创建在创建过程中请您按照提示尽

可能完整全面地填写相应内容这样更方便您后期对产品进行管理

创建产品页面如图 3-3 和图 3-4其中设备接入方式选择ldquo公开协议rdquo联网

方式选择跟据实际设备进行选择设备接入协议选择ldquoMQTTrdquo

中移物联网有限公司 OneNET 开发文档中心

产品创建完成后页面弹出ldquo创建产品成功rdquo如图 3-5所示点击ldquo立即

添加设备rdquo显示如图 3-6所示界面依次填写ldquo设备名称rdquo鉴权信息设备

名称自定义鉴权信息用于平台对终端设备鉴权每台设备具有唯一性建议设

置为产品出厂编号方便管理鉴权信息需写入设备

图3-3 创建产品页面

中移物联网有限公司 OneNET 开发文档中心

图3-4 创建产品页面

图3-5 创建产品成功页面

中移物联网有限公司 OneNET 开发文档中心

图3-6 添加设备页面

322 终端设备软硬件初始化

终端设备在上电以后需要完成设备的软硬件初始化硬件初始化包括各个

硬件模块的上电处理器的寄存器初始化工作模式初始化等等软件初始化包

括基础通信套件初始化应用接口初始化应用程序初始化等等

323 终端创建设备及资源

终端设备创建设备(device_id)配置产品 ID鉴权信息注册码连接

服务器 IP端口号等信息创建成功后与平台建立登陆连接连接成功后即可向

平台上报数据点

324 登录 OneNET平台

终端设备的基础通信套件完成初始化以及设备资源创建完成后可向

OneNET平台发送登陆请求返回登录结果如果参数错误或者登录超时平台会

返回登录失败如果验证通过平台会返回登录成功

若终端设备登录平台成功设备名称左边的圆形图标会由灰色(离线状态)

变成绿色(在线状态)如图 3-7所示

中移物联网有限公司 OneNET 开发文档中心

图3-7 平台侧设备状态显示

325 设备数据点上报

终端设备与平台成功建立连接后设备使用 publish 报文向平台上报数据点

平台收到数据点后保存到对应数据流下方便应用查阅数据点上报格式以及类型详见

721

图3-8 平台侧收到设备数据流显示

326 创建应用

用户可以利用上传的数据创建相关的应用发布直观的展示页面目前在平台应用孵化

器中提供了曲线图柱状图表盘物体位置图片和开关等应用

在产品详情页面点击ldquo应用管理rdquo进入应用管理主界面如下图

中移物联网有限公司 OneNET 开发文档中心

图3-9 应用管理模块

点击ldquo创建应用rdquo输入应用名称点击ldquo创建rdquo如下图

图3-10 新应用创建

保存成功后点击编辑按键进入应用编辑页面如下图

中移物联网有限公司 OneNET 开发文档中心

图3-11 应用编辑入口

图3-12 应用编辑界面

在应用编辑页面中使用左侧的控件进行应用编辑此例中我们选择表盘控件来显示

刚刚上传的数据点击表盘控件如下图所示

中移物联网有限公司 OneNET 开发文档中心

图3-13 表盘控件添加

在右侧的属性中选择设备以及数据源(及刚刚上传的数据流)如下图

图3-14 表盘控件数据流绑定

在确定好数据流之后可以看到表盘回显示成我们添加的数据的值其他的

刷新频率以及表盘显示样式读者可以自行更具需求加以修改

完成应用编辑之后点击右上角保存按钮退出应用编辑

在应用管理页面点击该应用即可查看编辑好的应用页面

中移物联网有限公司 OneNET 开发文档中心

图3-15 保存应用

图3-16 应用查看与分享

该应用可以通过共享ldquo发布链接rdquo的方式将该应用共享给他人

33 设备批量接入

单个设备可以通过平台的开发者中心添加设备的方式进行创建若用户有多

个设备直接与平台 TCP连接的终端通过手动添加需耗费大量时间人力OneNET

中移物联网有限公司 OneNET 开发文档中心

为大批量接入用户提供 3种批量创建设备的方案

331 平台设备批量复制

此种方式为选择某个设备作为复制的模板通过导入 EXCEL的方式进行设备

复制厂商可以在小批量测试时使用该功能

在设备列表中点击查看详情

图3-17 设备批量接入

在设备详情页面点击批量导入设备信息

中移物联网有限公司 OneNET 开发文档中心

图3-18 导入设备信息

点击批量复制

图3-19 批量复制

中移物联网有限公司 OneNET 开发文档中心

目前提供三种批量创建的方式 excel 导入的方式为主要接入方式选择

excel导入点击下载模板

图3-20 快速导入

图3-21 Excel导入

打开下载下来的 excel模板表中的 titledesctags等均为将要批量导

入的设备的数据其中的 title 和 auth_info 为必填选项title 为设备名

中移物联网有限公司 OneNET 开发文档中心

auth_info对应设备的鉴权信息

图3-22 Excel格式

填写 3个设备信息

图3-23 Excel内容

三个设备的 title和 auth_info都一样均为 20170808000012017080800002

2017080800003保存该表格点击ldquo点击上传rdquo上传保存好的 excel 文件

点击ldquo确定导入批量rdquo

中移物联网有限公司 OneNET 开发文档中心

图3-24 导入上传

图3-25 确认创建

可以看到在原设备目录下新增了 3个设备其名称分别为 2017080800001

20170808000022017080800003

中移物联网有限公司 OneNET 开发文档中心

图3-26 批量创建的设备

点击设备详情可以看到设备目录下各个设备的鉴权信息与表格中所填

写的内容一致

图3-27 设备ID及鉴权信息

至此完成了通过批量设备复制的方式完成设备批量创建的过程用户如果

要使用这个功能需要将自己终端的出厂序列号整理到这个 excel表中然后利

中移物联网有限公司 OneNET 开发文档中心

用上传表格的方式进行批量创建

332 应用平台调用新增设备 API

OneNET 提供了创建设备的 API接口

图3-28 新增设备API接口

其中的 auth_info 参数对应着设备的鉴权信息通过调用此 API 接口可以

实现在平台上新增设备的功能用户如果有自己的第三方应用平台进行设备管理

可以通过多次调用此接口的方式进行设备的批量创建在调用接口时需要确保每

次调用的 auth_info 参数对应着自己的每一个终端不同的出厂序列号

333 终端调用注册 API

API 实际是 HTTP 协议的通信协议终端也可以通过封装 HTTP 包发送注册

中移物联网有限公司 OneNET 开发文档中心

设备请求的方式调用 API

终端调用注册 API 创建设备并接入的流程如图 3-29所示

平台

TCP连接协议接入机

创建产品

发送连接报文

连接应答

数据应答

发送数据报文

生成连接报文

设备

发送下行命令 下发命令

解析下行命令

生成存储数据报文

解析连接应答

解析数据应答

必要流程

可选流程

存储到数据流 数据源 创建应用

心跳应答

发送心跳报文生成心跳报文

解析心跳应答

平台操作

设备操作

利用设备本身的sn和产品的设备注册码生成注册报文

TCP连接API服务器

发送注册报文

注册应答

解析设备ID

创建设备

设备开机

读取硬件中烧录的设备编号(sn)

图3-29 终端调用注册API接入流程

1) 创建产品

重要参数产品 ID注册码产品 APIKey(见附录一)

2) 生成并发送注册报文

每一个用户终端中都有厂商烧录的唯一出厂序列号(sn)终端上电

之后应该首先读取自己的 sn然后通过 1)中的注册码和 sn 一起组成注

册报文

注册报文格式如下例

POST httpapihecloudscomregister_deregister_code=6TM7OkhNsTjATvFx HTTP11

Host apihecloudscom

Content-Length 48

中移物联网有限公司 OneNET 开发文档中心

sn02136616511001titletestdevice0001

其中

6TM7OkhNsTjATvFx 为产品注册码

02136616511001 是本例中模拟的设备唯一编号

testdevice0001 是本例中模拟的设备名

若上传的数据格式以及参数鉴权均正确则平台会返回设备创建成功

返回设备 ID以及该设备对应的设备 api-key

HTTP11 200 OK

Date Wed 09 Aug 2017 064821 GMT

Content-Type applicationjson

Content-Length 95

Connection keep-alive

Server Apache-Coyote11

Pragma no-cache

errno0datadevice_id11142371keyq9Mw0zqiAPjTwqfyCk2mWrUi8=errorsucc

3) 在步骤 2)完成之后平台上的设备就已经成功创建了终端需要

重新 TCP连接到对应协议的服务器上完成设备连接(与设备进行映射)以

及上传数据的操作

34 设备 ID 与产品序列号

通过 OneNET构建的物联网系统中有两套比较重要的编码设备 ID与产品序列号

(SN)其中

产品序列号是由厂商指定的在厂商的产品范围内是保持唯一的在出厂前烧写到每

一个终端中通常包含在与平台通信的数据中并以条形码的方式贴在产品的包装上用

于从用户的角度区分每一个独立的终端

设备 ID是在平台创建设备时由 OneNET分配的平台范围内唯一的编号应用于第三

方平台调用 OneNET API时使用

在创建设备时OneNET平台需要用户以设备 sn为参数进行设备创建成功之后平

台会分配一个设备 ID这样 OneNET内部就有了一个 sn-设备 ID的映射关系

终端登陆使用的鉴权信息是出厂时烧写好的 sn鉴权通过之后平台可以将该终端

上传是数据放到对应的设备中

上层应用通过创建设备 API或者查询设备 API建立 sn-设备 ID映射表在需要操作

某一设备时首先可以获取的是终端的 sn号(因为对用户是可见的)通过映射表获取设

中移物联网有限公司 OneNET 开发文档中心

备 ID然后再通过 API访问 OneNET平台上的对应设备

两套编码在物联网系统中的应用位置如下图所示

物联网应用

OneNET

终端

(烧写sn)

HTTP API 以设备ID为参数进行API访问

接入协议以sn为鉴权参数进行设备连接

设备

设备名

设备ID

设备sn

设备标签

sn 设备ID

snmdash设备ID映射表

中移物联网有限公司 OneNET 开发文档中心

第四章 第三方应用开发

第三方应用与 OneNET 平台的业务逻辑关系如图 4-1 所示第三方应用与

OneNET平台之间通过 HTTPS请求应答的方式实现数据交互OneNET 平台为第三

方应用提供封装好的 API 接口应用平台通过调用这些 API 接口完成对 OneNET

平台的读写执行以及设备管理请求然后 OneNET 平台会将相应的指令请求发送

到终端设备OneNET 平台收到终端设备响应的数据及设备信息后会将数据及

设备信息推送到应用平台完成应答

下面将分别介绍第三方应用接入 OneNET 平台的步骤OneNET平台提供的数

据推送功能以及 OneNET 平台为第三方应用封装好的 API接口

图4-1 第三方应用与OneNET平台的逻辑关系

41 第三方应用接入 OneNET 平台

第三方应用与 OneNET平台实现数据交互的前提是已经建立连接第三方应

用接入 OneNET平台的开发流程如图 4-2所示包括三个步骤

(1) 在 OneNET 平台创建了设备该设备有对应的真实设备且能正常上报

数据

(2) 用户已经开发并部署了 OneNET平台验证接入的程序

(3) 在 OneNET 平台正确配置了第三方应用数据接收的地址(URL)

Token以及其他参数

中移物联网有限公司 OneNET 开发文档中心

在确保上述第(1)步已经实现的基础上下面将分别讲述第(2)步和第

(3)步的实现过程

图4-2 数据推送的开发流程

412 第三方应用平台接入验证程序

第三方应用平台接入验证程序工作流程如下所述当 OneNET 平台完成对第

三方开发平台的配置后会向第三方开发平台发起 URLampToken验证接入验证程

序对平台发送的验证参数进行验证验证通过后第三方开发平台会向 OneNET

平台返回验证消息当 OneNET 平台收到验证消息后说明第三方开发平台与

OneNET平台已建立连接

目前 OneNET平台为第三方应用平台提供接入验证程序的 SDK有 Javaphp

Nodejs和 C四个版本

SDK 下载地址httpsopeniot10086cndocart432html118 -ldquo数

据推送rdquo

413 OneNET 平台配置第三方应用平台

在 OneNET平台对第三方应用平台的配置界面如图 4-3所示

URL第三方开发平台的地址

Token可以自定义用于第三方开发平台接入平台握手验证

消息加解密方式有明文模式和安全模式当启用安全模式后平台端需要

用户自定义 AESKey 或者由平台随机生成在应用程序中使用该 AESKey 解密消

中移物联网有限公司 OneNET 开发文档中心

推送时间限制(秒)和推送数据限制(个)设置ldquo推送时间限制rdquoldquo推送数

据限制rdquo可以实现批量推送数据减少服务器压力当满足ldquo推送时间限制rdquo和

ldquo推送数据限制rdquo要求后OneNET 将给第三方推送数据如果没有设置ldquo推送

时间限制rdquo和ldquo推送数据限制rdquo将默认数据实时推送

图4-3 第三方开发平台的配置界面

当用户成功在 OneNET 平台配置了第三方开发平台服务器地址后点击ldquo提

交rdquo按钮后OneNET 平台会向第三方应用平台发起 URLampToken 验证请求验证

通过且收到第三方返回的验证消息后则第三方应用平台与 OneNET 平台已建立

连接之后OneNET 平台在收到设备数据时会将设备数据推送到已配置的第三

方应用平台

用户数据接收服务程序接收到 OneNET平台发送的 ldquoURLampTokenrdquo验证请求

请求的格式形如httpipporttestmsg=xxxampnonce=xxxampsignature=xxx

蓝色字体部分为用户在 OneNET平台配置的 URL常规的验证流程如下

(1)在请求中获取参数ldquononcerdquoldquomsgrdquo的值将ldquotokenrdquo(此为页面

配置参数 token的值)ldquononcerdquoldquomsgrdquo的值计算 MD5(token+nonce+msg)

加密值并且编码为 Base64字符串值

中移物联网有限公司 OneNET 开发文档中心

(2)将上一步中 Base64字符串值通过 URL Decode 计算后的值与请求参数

ldquosignaturerdquo的值进行对比如果相等则表示 token验证成功

(3)如果 token 验证成功向 OneNET 平台返回ldquomsgrdquo参数值否则返回

其他值

说明如果用户不想验证 Token 的有效性可以忽略以上步骤并直接向

OneNET平台返回ldquomsgrdquo参数值

42 OneNET 平台数据推送

平台以 HTTPS POST 请求形式向第三方应用平台注册地址推送数据推送数

据相关信息以 JSON 串的形式置于 HTTPS请求中的 body部分

第三方应用平台在接收数据时会接收到数据的明文消息或者密文消息

明文消息中以ldquotyperdquo的数值区分不同的消息而密文消息与明文消息的区别

是ldquomsgrdquo部分经过了加密处理下面将分别对明文消息密文消息以及消息相

关字段和密文的加密算法进行说明

421 明文消息

明文消息有两种消息类型分别为数据点消息和设备上下线消息而数据点

消息又分为单条数据点消息和数据点消息批量形式数据点消息批量形式中的不

同数据点是以不同时间戳区分的

(1)数据点消息(type=1)

msg

type 1

dev_id 2016617

ds_id datastream_id

at 1466133706841

value 42

msg_signature message signature

nonce abcdefgh

(2)数据点消息批量形式(type=1)

msg [

type 1

dev_id 2016617

ds_id datastream_id

中移物联网有限公司 OneNET 开发文档中心

at 1466133706841

value 42

type 1

dev_id 2016617

ds_id datastream_id

at 1466133706842

value43

]

msg_signature message signature

nonce abcdefgh

(3)设备上下线消息(type=2)

msg

type 2

dev_id 2016617

status 0

login_type 1

at 1466133706841

msg_signature message signature

nonce abcdefgh

422 密文消息

密文消息中的ldquoenc_msgrdquo是由明文消息中的ldquomsgrdquo采用 AES 加密算法而

enc_msgxxxx

msg_signature

message signature

nonceabcdefgh

423 消息相关字段说明

表4-1 消息相关字段说明

字段 字段说明

type 标识数据类型当前版本范围[15]

dev_id 设备 ID

ds_id 公 开 协 议 中 的 数 据 流 ID 其 格 式 为

objectID_instanceID_resourceID

at 平台时间戳单位 ms

value 具体数据部分为设备上传至平台或触发的相关

数据

中移物联网有限公司 OneNET 开发文档中心

status 设备上下线标识

0-下线 1-上线

login_type

设备登陆协议类型

1EDP 2nwx 3JTEXT 5JT808 6

MODBUS 7MQTT 8gr2010NB-IoT

cmd_type

命令响应的类型

1设备收到 cmd的 ACK 响应信息 2设备收到

cmd的 Confirm响应信息

cmd_id 命令 ID

msg_signatur

e 消息摘要

nonce 用于计算消息摘要的随机串

enc_msg 加密密文消息体对明文 JSON串(msg字段)的

加密

424 加密算法详述

平台基于 AES算法提供加解密技术具体阐述如下

EncodingAESKey 即消息加解密 Key 的 BASE64编码形式长度固定为 43

个字符从 a-zA-Z0-9共 62个字符中选取由服务开启时填写后

也可申请修改

AES密钥计算为 AESKey=Base64_Decode(EncodingAESKey + ldquo=rdquo)

EncodingAESKey 尾部填充一个字符的ldquo=rdquo 用 Base64_Decode 生成 32

个字节的 AESKey

AES采用 CBC 模式秘钥长度为 32 个字节(256位)数据采用

PKCS7填充 初始化 iv向量取秘钥前 16字节 PKCS7K为秘钥字

节数(采用 32)buf为待加密的内容N为其字节数Buf 需要被填

充为 K的整数倍在 buf的尾部填充(K-NK)个字节每个字节的内容

是(K- NK)具体详见toolsietforghtmlrfc2315

BASE64采用 MIME格式字符包括大小写字母各 26个加上 10个数

字和加号ldquo+rdquo斜杠ldquordquo一共 64个字符等号ldquo=rdquo用作后缀填

出于安全考虑平台网站提供了修改 EncodingAESKey的功能(在

EncodingAESKey 可能泄漏时进行修改对应上第三方平台申请时填写

的接收消息的加密对称密钥)所以建议保存当前的和上一次的

中移物联网有限公司 OneNET 开发文档中心

EncodingAESKey若当前 EncodingAESKey 生成的 AESKey解密失败则

尝试用上一次的 AESKey的解密

平台的加密消息部分为 enc_msg= Base64_Encode( AES_Encrypt

[random(16B)+msg_len(4B)+msg] )即以 16字节随机字节串拼接 4字

节表示消息体长度的字节串(此处 4 字节长度表示为网络字节序)再加

上消息本身的字节串作为 AES加密的明文再以 AES算法对明文进行加

密生成密文最后对密文进行 BASE64 的编码操作生成加密消息体

对加密消息体的解密流程为1)首先进行加密消息体的 BASE64 解码操作

aes_msg=Base64_Decode(enc_msg)2)对获取的解码内容以 AES 算法进行解密

操作获取明文部分plain_msg=AES_Decrypt(aes_msg)解密中使用的秘钥由

EncodingAESKey 计算得来使用的初始化 iv 向量为计算出的 aes 秘钥的前 16

字节3)去掉 plain_msg 的前 16 字节再以前 4 字节取出消息体长度根据消

息体长度获取真实的消息部分(推荐以消息体长度获取真实消息以兼容

plain_msg 未来可能出现的结构变更)表示加密传输的数据后两字段与明文

传输一致

43 API 接口

第三方开发平台应用层通过 Rsetful API 的方式和 OneNET平台进行交互对

接实现命令的下发数据的读写以及相关业务的交互

针对 MQTT 协议目前主要开发了以下 API 用来实现第三方开发平台向

OneNET平台请求读写执行以及设备管理请求具体见下表 4-2下面分别对每一

种 API进行说明

表4-2 API功能说明

API 类别 操作对象 API名称

需要终端响应 只需平台响应

设备

注册

更新设备注册属性

新增

更新

精确查询单个设备

中移物联网有限公司 OneNET 开发文档中心

模糊查询设备

批量查询设备状态

删除

数据流

新增

更新

查询单个数据流

查询多个数据流

删除

数据点

新增

查询

二进制数

新增

查询

触发器

新增

更新

查询单个触发器

模糊查询触发器

删除

触发数据内容

命令

发送命令

查询命令状态

查询命令相应

查询设备历史命令

视频能力 获取播放地址

APIKEY

新增

更新

查看

删除

消息订阅

按 Topic发送命令

查询订阅指定 Topic设备的列表

查询设备订阅的 Topic列表

删除产品的 Topic

查询产品的 Topic

中移物联网有限公司 OneNET 开发文档中心

432 设备

4321 注册

表4-3 设备注册

HTTP方法 POST

URL apihecloudscomregister_de

URL参数 register_code=6TM1OkhNsTjATvFx 设备注册码(必填)

HTTP内容

(示例)

sn 2015031401421 设备唯一标识 string类型最长 512字符

mac C89346DA4373 设备唯一 mac标识最长 32字符

title myedpdevice 设备名(可选) 最长 32个字符

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

keyQ1VdWoEvdkCye=d1=HcCSP6LvCw= 新设备 apikey

device_id 325018 设备 ID

说明

1 响应消息中 errno 表示错误码error 表示错误原因如果创建设备失

败则没有 data字段

2 snmac一定要必填其中一个而且只可以传一个用于鉴权就是设备

新增中的 auth_info

3 此接口根据产品设置的不同默认 allow_dup=true可以生成新设备及

key或获取原有设备及 key见下表

表4-4 对应表

产品允许重复 sn 在产品中已存在 sn 在产品中不存在

allow_dup=true 是 sn 对应的设备 id 和 key 新的设备 id 和 key

allow_dup=false 否 报错 新的设备 id 和 key

中移物联网有限公司 OneNET 开发文档中心

此接口返回的新设备默认设备名均为auto_register均为私有设

备设备协议与产品协议相同

4322 更新设备注册属性

表4-5 更新设备注册属性

HTTP方法 PUT

URL apihecloudscomregister_attr

HTTP头部 api-key xxxxddddsssaaa 必须为 masterkey

HTTP内容

(示例)

allow_dup true|false是否允许重复提交相同的设备 sn 默认 true

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

默认 allow_dup 为 true主要用于设备注册码创建设备属性限制

4323 新增

表4-6 新增设备注册属性

HTTP方法 POST

URL apihecloudscomdevices

HTTP头部 api-key xxxxddddsssaaa 必须为 masterkey

HTTP内容

(示例)

title mydevice 设备名

desc some description 设备描述(可选)

tags [chinamobile] 设备标签(可选可为一个或多个)

protocolMQTT 选择一种接入协议(可选默认为 HTTP)

location lon 106 lat 29 ele 370设备位置纬度

经度 高度(可选)

private true| false 设备私密性(可选默认为 ture)

auth_info 201503041a5829151 MQTT设备设备唯一编号

other version 100 manu china mobile 其他信息(可

选JSON格式可自定义)

HTTP响应响

应消息内容

(实例)

errno 0

error succ

data

中移物联网有限公司 OneNET 开发文档中心

device_id233444 平台分配的设备 ID

4324 更新

表4-7 更新

HTTP方法 PUT

URL apihecloudscomdevicesdevice_id

HTTP头部 api-key xxxxddddsssaaa masterkey或设备 apikey

HTTP内容

(示例)

title mydevice 设备名(可选)

desc some description 设备描述(可选)

tags [chinamobile] 设备标签(可选)

protocolMQTT 选择一种接入协议(可选)

location lon106 lat 29 ele 370设备位置经度

纬度 高度(可选)

private true| false 设备私密性(可选)

auth_info201503041a5829151 MQTT设备设备唯一编号(可选)

other version 100 manufacturer china mobile 其

他信息(可选)

HTTP响应响

应消息内容

(示例)

errno 0

error succ

中移物联网有限公司 OneNET 开发文档中心

4325 精确查询单个设备

表4-8 精确查询单个设备

HTTP方法 GET

URL apihecloudscomdevicesdevice_id

HTTP头部 api-key xxxxddddsssaaa masterkey 或设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

iddevice_id

tags [chinamobile]

onlinetrue|false

protocolMQTT

titlemy device1

descsome description

create_time2015-09-16 102222

privatetrue|false

locationele370lat17609lon17703

auth_infohellip

otherversion100manufacturerchina mobile

keys[titledevice-auto-keykey2JO3B12O1]

数据流

datastreams[

create_time 2014-10-23 202222

iddatastream_id1

unitcelsius

unit_symbolC

uuid 231a5aa9-9de4-5f2e-9e0f-015181c98429

]

4326 模糊查询设备

表4-9 模糊查询设备

HTTP方法 GET

URL apihecloudscomdevices

中移物联网有限公司 OneNET 开发文档中心

URL 参数

key_words=my 匹配关键字(可选从 id和 title字段中左匹配)

auth_info=203x1 鉴权信息(可选对应注册时的 sn参数唯一设

备编号)

tag=mobile 标签(可选)

online=true| false 在线状态(可选)

private=true| false 私密性(可选)

page=1 指定页码最大页数为 10000(可选)

per_page=30 指定每页输出设备个数默认 30最多 100(可选)

device_id=235122 指定设备 ID多个用逗号分隔最多 100个(可

选)

begin=2016-06-20 起始时间包括当天(可选)

end=2016-06-20 结束时间包括当天(可选)

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

total_count1

per_page30

page1

devices

[

id3497307

titlemy device1

desc device desc

privatetrue

protocolMQTT

onlinefalse

locationlon10655231191544001lat29535451246673

create_time2013-02-11 122233

auth_infoSYSz=8QY3r7aTQ48UKfqPnB=PybYRo=

]

4327 批量查询设备最新数据

表4-10 批量查询设备最新数据

HTTP方法 GET

中移物联网有限公司 OneNET 开发文档中心

URL apihecloudscomdevicesdatapoints

URL参数 devIds=1221122331123 设备 id用逗号隔开限制 1000 个设备

HTTP头部 api-key xxxxddddsssaaa masterkey 或设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

error ldquosuccrdquo

data

devices [

id 12323 设备 id

title daf设备名

datastreams

[

id temperature数据流名称

at 2017-02-12 102222数据流更新时间

value 12数据流最新数据

hellip

helliphellip

]

hellip

hellip

]

4328 删除

表4-11 删除设备

HTTP方法 DELETE

URL apihecloudscomdevicesdevice_id

HTTP头部 api-key xxxxddddsssaaa 可为设备级别的 Key

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

中移物联网有限公司 OneNET 开发文档中心

说明删除设备会删除该设备下所有数据流和数据点删除设备动作是异步

的系统会在后续逐步删除该设备下的数据流和数据点

433 数据流

4331 新增

表4-12 新增数据流

HTTP方法 POST

URL apihecloudscomdevicesdevice_iddatastreams

HTTP头部 api-key xxxxddddsssaaa masterkey 或设备 apikey

HTTP内容

(示例)

idtemperature 数据流名称 示例温度

tags[Tag1Tag2] 数据流标签(可选可以为一个或多个)

unitcelsius 单位(可选)

unit_symbolC 单位符号(可选)

HTTP响应响

应消息内容

(示例)

errno 0

data

ds_uuid 9e6bcac9-2c6f-59d5-adae-3955df2e7bce平台分配

数据流 UUID

error succ

4332 更新

表4-13 更新数据流属性

HTTP方法 PUT

URL apihecloudscomdevicesdevice_iddatastreamsdatastream_id

示例apihecloudscomdevices421240datastreamstemperature

HTTP头部 api-key xxxxddddsssaaa masterkey 或设备 apikey

HTTP内容

(示例)

tags[Tag1Tag2] 数据流标签(可选)

unitcelsius 单位(可选)

unit_symbolC 单位符号(可选)

HTTP响应响

应消息内容

(示例)

errno 0

error succ

中移物联网有限公司 OneNET 开发文档中心

4333 查询单个数据流

表4-14 查询单个数据流

HTTP方法 GET

URL apihecloudscomdevicesdevice_iddatastreams

URL参数 datastreams_ids = 查看的 datastream的 id

HTTP头部 api-key xxxxddddsssaaa masterkey 或该设备的设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

data [

update_at 2018-06-29 112938 数据流最后更新时

id 湿度 数据流名称

create_time 2018-06-28 170548数据流创建时间

current_value 53845013最新数据点

]

error succ

4334 查询多个数据流

表4-15 查询多个数据流

HTTP方法 GET

URL apihecloudscomdevicesdevice_iddatastreams

URL 参数

datastream_ids= 查看的 datastream的 id多个 id之间用英文逗号

分开(参数缺省时为查询所有数据流)

示例

apionenetcomdevices1234datastreamsdatastream_ids=tempgps

表示查看 temp和 gps两个数据流的信息

HTTP头部 api-key xxxxddddsssaaa masterkey 或者 该设备的设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data 数据流信息

[

idtemperature 数据流名称设备范围内唯一

tags[Tag1Tag2] 数据流标签

unitcelsius 单位

unit_symbolC单位符号

create_timexxxx-xx-xx 102222 创建时间

中移物联网有限公司 OneNET 开发文档中心

current_valuehellip该数据流下数据点最新值

update_atxx-xx-xx该数据流下数据点最新上传时间

]

[

idhumi 数据流名称设备范围内唯一

tags[Tag1Tag2]

unit_symbol

create_timexxxx-xx-xx 102222

current_valuehellip

update_atxx-xx-xx

]

[]

4335 删除

表4-16 删除数据流

HTTP方法 DELETE

URL apihecloudscomdevicesdevice_iddatastreamsdatastream_id

URL参数 无

HTTP头部 api-key xxxxddddsssaaa masterkey 或者设备 key

HTTP响应响

应消息内容

(示例)

errno 0

error succ

434 数据点

4341 新增

中移物联网有限公司 OneNET 开发文档中心

表4-17 新增数据点

HTTP方法 POST

URL apihecloudscomdevicesdevice_iddatapoints

URL参数 type=3 上传数据类型(可选默认为完整 JSON型见 HTTP内容示

例)

HTTP头部 api-key xxxxddddsssaaa masterkey 或者 设备 apikey

HTTP内容

(示例)

datastreams

[

id temperature 数据流名称或数据流模板名称

datapoints [

at 2013-04-22T003543 上传数据点时间可选如

果为空则设备云会取当前时间如果存在其格式必须为 YYYY-MM-

DDThhmmss的形式(例如2015-03-22T223112)

value 42 上传数据点值

at 2013-04-22T005543

value 84 上传数据点值

]

id key 数据流名称或数据流模板名称

datapoints [

at 2013-04-22T003543上传数据点时间可选

value hellip上传数据点值

at 2013-04-22T003543

value hellip上传数据点值

]

hellip

]

中移物联网有限公司 OneNET 开发文档中心

HTTP 响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

1 可以一次性向设备云上传多个数据流每个数据流中可以包括多个数据

点示例程序表示向设备云上数据流 temperature 和数据流 key上传数据其中

temperature数据流有两个数据点key数据流也有两个数据点

2 如果某个数据流不存在则在增加数据点时设备云会自动创建一个新

的数据流注意新数据流的 datastream id 不可为空

3 数据点表示在某个时刻该数据流的值其 at表示时间为可选字段如

果为空则设备云会取当前时间如果存在其格式必须为YYYY-MM-DDThhmmss

的形式(例如2015-03-22T223112)

4 数据点中的 value表示具体的值其值为 JSON对象可以为整型浮点

型字符串多种类型如果 value部分用双引号括起来则其在设备云存储为字

符串如果不用双引号括起来则其表示数值字符编码现在只支持 UTF-8

5 数据点对应的时间是数据点的标识的一部分相同时间的两个数据点

设备云会同时对这两个相同时间的数据点进行保存不会出现覆盖另一个数据点

的情况一般如果 at 部分取空设备云会取系统时间精度为毫秒如果在一

条命令中某一个数据流包含多个数据点都没有 at 字段设备云将会对所有数据

点进行保存

6 新增数据点支持如下简写方式在请求的 URL中增加 type字段指示所

使用的格式类型目前 type支持 345三种情况

URLapihecloudscomdevices2214570datapointstype=3

示例temperature225humidity952

表示在数据流 temperature中增加一个数据点 225在 humidity 中增加一

个数据点 952

URLapihecloudscomdevices2214570datapointstype=4

示例temperature2015-03-22T223112225

表示在数据流 temperature中加一个数据点在 2015年 3月 22 日 22点 31

中移物联网有限公司 OneNET 开发文档中心

分 12秒的值为 225

URLapihecloudscomdevices2214570datapointstype=5

示例temperature2015-03-22T223112225pm2589

表示在数据流 temperature中加一个数据点即 2015年 3月 22 日 22点 31

分 12秒的值为 225在数据流 pm25中添加一个数据点即当前时间的值为 89

4342 查询

表4-18 查询数据点

HTTP方法 GET

URL apihecloudscomdevicesdevice_iddatapoints

URL 参数

datastream_id=abc 查询的数据流多个数据流之间用逗号分隔

(可选)

start=2015-01-10T080035 提取数据点的开始时间(可选)

end=2015-01-10T080035 提取数据点的结束时间(可选)

duration=3600 查询时间区间(可选单位为秒)

start+duration按时间顺序返回从 start开始一段时间内的数据点

end+duration按时间倒序返回从 end回溯一段时间内的数据点

limit=100 限定本次请求最多返回的数据点数0ltnlt=6000(可选

默认 1440)

cursor= 指定本次请求继续从 cursor位置开始提取数据(可选)

sort=DESC | ASC 值为 DESC|ASC时间排序方式DESC倒序ASC升

序默认升序

ltnlt=6000(可选默认 1440)

HTTP头部 api-key xxxxddddsssaaa masterkey 或者 该设备的设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

cursor70921_3771908_1472355096

datastreams[

idtemperature数据流名称或数据流模板名称

datapoints[

at xxxx-xx-xx 102222value42数据点上传时间和

at xxxx-xx-xx 102222value84

]

中移物联网有限公司 OneNET 开发文档中心

idkey 数据流名称或数据流模板名称

datapoints[

at xxxx-xx-xx 102222valuehellip

atxxxx-xx-xx 102222valuehellip

]

hellip

]

1 若不携带任何参数平台返回本设备所存在的所有数据流中的最新数据

(这一种情况下查询时出现时延较大的性能问题建议在 URL 参数中加上

newadd参数并将其值赋为 true如 newadd=true)

2 若不携带数据流 id参数携带 limit 参数时会返回该设备每个数据流

最多 limit 条数据

3 若要查看某一条数据流数据需在上述 URL中增加参数 datastream_id

4

apihecloudscomdevices564280datapointsdatastream_id=tempamplimit

=10会返回数据流temp中最近的 10个数据点

5 要查看某一条数据流在某个时间范围内的数据可以在增加 start和 end

参数

示例

apihecloudscomdevices564280datapointsdatastream_id=temper

atureampstart=2013-05-12T171233ampend=2013-06-12T172233 表示查询本设

备对应的数据流在 2013 年 5 月 12 日 17 点 12 分 33 秒到 17 点 22 分 33 秒的数

据点注意如果 start 参数存在end参数不存在表示取 start后的所有数据

如果 start 不存在end 存在设备云会忽略 end参数注意日期时间格式格

式必须为示例中的格式YYYY-MM-DDThhmmss例如2013-05-12T171233

日期和时间之间用大写字母 T 分隔start 和 end 之间的时间间隔最大为 1 年

超过一年会忽略

如果指定了 start 参数则可能返回的数据点的数目会很多此时默认会返

回最多 100 个数据点可以使用 limit 参数设定返回多少个数据点最大为

6000个数据点当实际的数据点数目多于 limit 限定的数目时返回的 json串

中移物联网有限公司 OneNET 开发文档中心

中会有一个 cursor 字段下一次请求的命令行中可以携带此 cursor 字段表示接

着遍历本数据流此 cursor字段标识上次取出数据点后下一个数据点的位置

435 二进制数据

4351 新增

将二进制数据将作为数据点保存到设备下的某个数据流中设备云返回该二

进制数据的索引号

表4-19 新增二进制数据

HTTP方法 POST

URL apihecloudscombindata

URL参数 device_id=421590 数据所属设备(必选)

datastream_id=bin 该数据所属已经存在的数据流(必选)

HTTP头部 api-key xxxxddddsssaaa masterkey 或者该设备的设备 key

HTTP 内 容

(示例)

普通二进制数据文件图像等

(最大限制为 800上传时间间隔需大于 1ms)

HTTP响应响

应消息内容

(示例)

errno 0

error succ

data

index3491506_1475204886914_bin 二进制数据索引号

4352 查询

表4-20 查询二进制数据

HTTP方法 GET

URL apihecloudscombindataindex

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

普通二进制数据文件图像等二进制形式数据

436 触发器

4361 新增

表4-21 新增触发器

HTTP方法 POST

中移物联网有限公司 OneNET 开发文档中心

URL apihecloudscomtriggers

HTTP头部 api-key xxxxddddsssaaa 必须为 masterkey

HTTP内容

(示例)

titlewen du jian kong 设备名(可选)

ds_idgps 数据流名称(id)(可选)

dev_ids[10272345615523] 设备 ID(可选)

ds_uuids[ 数据流 uuid(可选)

9ad09uac-7446-512f-b07c-90jdnzj8120ad

4599436e-7146-5349-b07c-79fa0919cs62

]

urlxxbbcom

typegt | gt= | lt | lt= | == | inout | in | out |change | frozen |

live

threshold100 阙值根据 type不同见以下说明

1) type 为gt|gt=|lt|lt=|==时threshold必须为数值

2) type为 inout时threshold 设置为lolmt40 uplmt52 表示

数据流的值首次进入或离开闭区间[4052]时触发

3) type为 change时threshold 参数不用传递当上传的值有改变时触发

告警

4) type为 frozen时threshold 为数值指定距离最后一次数据上报多少

秒内未上报数据触发告警同时被监控对象进入 frozen状态

5) type 为 live 时threshold 为数值指定距离最后一次数据上报多少秒

后上报数据触发告警

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

tirgger_id233444 触发器 ID

说明

1触发器的含义是当指定范围内的数据点满足触发条件的要求时会向

url参数指定的地址发送 post请求

2触发器有三种工作触发模式

1)在请求参数中单独指定了 ds_id不包括其他参数那么当前项目下

中移物联网有限公司 OneNET 开发文档中心

所有设备的数据流中数据流名称符合 ds_id 的数据都会进入触发判断逻辑

2)在请求参数中单独指定了 ds_uuids 数组那么只有这些指定的数据

流会进入触发判断逻辑

3)在请求参数中指定了 ds_id 和 dev_ids那么只有这些指定的设备的

数据流会进入触发判断逻辑

4362 更新

表4-22 更新触发器属性

HTTP方法 PUT

URL apihecloudscomtriggerstirgger_id

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP内容

(示例)

titlewen du jian kong

ds_uuids[

9ad09uac-7446-512f-b07c-90jdnzj8120ad

4599436e-7146-5349-b07c-79fa0919cs62

]

urlxxbbcom

typegt | gt= | lt | lt= | == | inout | in | out | exp | change |

frozen | live

threshold100

注若要修改 type需要对应设置 threshold

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

4363 查询单个触发器

表4-23 查询单个触发器

HTTP方法 GET

URL apihecloudscomtriggerstirgger_id

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

idtrigger_id1

中移物联网有限公司 OneNET 开发文档中心

titlewen du jian kong

ds_uuids[

datastream1_uuidrdquo

datastream2_uuidrdquo

datastream3_uuidrdquo

]

urlxxbbcom

typegt|gt=|lt|lt=|==|in|out|exp|change|frozen|live

threshold100

invalidtrue 触发器是否已失效

create_timexx-xx-xx 102222

4364 模糊查询触发器

表4-24 模糊查询触发器

HTTP方法 GET

URL apihecloudscomtriggers

URL 参数

title=name 指定触发器名称

page=1 指定页码可选

per_page=10 指定每页输出个数可选默认 10最多 100

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

total_count600

per_page30

page1

triggers[

idtrigger_id1

titlewen du jian kong

ds_uuids

[datastream1_uuidrdquo datastream2_uuidrdquo]

urlxxbbcom

typegt|gt=|lt|lt=|==|in|out|exp|change|frozen|live

threshold100

invalidtrue 触发器是否已失效

create_timeXXXXXXXX

中移物联网有限公司 OneNET 开发文档中心

]

说明触发器失效是指触发器所依赖的数据流或者设备被删除了此时触发

器永远不会有效触发事件

4365 删除

表4-25 删除触发器

HTTP方法 DELETE

URL apihecloudscomtriggerstirgger_id

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno 0

error succ

4366 触发数据内容

触发数据是指当 OneNET 设备云判断某个触发器的触发条件满足时会通过

POST方式向外抛出的 URL请求在 HTTP的 POST消息体中会携带如下格式的 JSON

字符串

表4-26 触发器内容

数据内容

(示例)

trigger

id1

threshold90

typegt

current_data[

dev_id2656

ds_idgps

ds_uuidFWEF-ZFW-ZFW-ZFWW

at2009-09-07T121602001403Z

value100

dev_id2656

ds_idtemper

中移物联网有限公司 OneNET 开发文档中心

ds_uuidFEWEF-ZFWFWW-WFWW-FWEFFWW

at2009-09-07T121602001403Z

value882

]

437 命令

命令是指应用发送命令数据给 OneNET设备云再由 OneNET设备云转发给终

端设备终端设备收到命令后可以向设备云反馈响应的一种工作机制命令下发

后应用可以通过 API查询命令状态和提取命令的响应数据

命令的执行步骤如下

1应用通过 API 向设备云发送命令数据

2设备云生成该命令的 uuid作为该命令的唯一标识并向应用返回同时向

终端设备转发命令数据

3 终端设备收到命令数据后执行命令数据可以生成响应也可以不响应

4设备云跟踪记录命令的响应如果设备有响应就关联命令 uuid和响应

结果

5应用通过 API 向设备云提取命令执行结果(API 请求中携带命令 uuid 标

识)

特别说明

命令下发到终端设备后如果终端设备 10 秒内未收到响应则此命令的状

态将被设置为超时应用通过 API 查询命令状态时会反馈超时超过 10 秒后

收到的响应会被丢弃

终端设备针对同一条命令回复多条命令响应只有在未超时时间内收到的最

后一条是有效响应前面的响应包将会被覆盖因此终端设备应该对每个命令只

有一个响应包

4371 发送命令

表4-27 发送命令

HTTP方法 POST

URL apihecloudscomcmds

URL 参数 device_id=415120 接收该数据的设备 ID(必选)

中移物联网有限公司 OneNET 开发文档中心

qos=0 | 1 是否需要响应默认为 0

0不需要响应即最多发送一次不关心设备是否响应

1需要响应如果设备收到命令后没有响应则会在下一次设备登陆

时若命令在有效期内(有效期定义参见 timeout参数)则会继续发送

对响应时间无限制多次响应以最后一次为准

本参数仅当 type=0时有效

timeout=300 命令有效时间默认 0

0在线命令若设备在线下发给设备若设备离线直接丢弃

gt0 离线命令若设备在线下发给设备若设备离线在当前时间

加 timeout时间内为有效期有效期内若设备上线则下发给设备单

位秒有效围0~2678400

本参数仅当 type=0时有效

type=0 | 1 默认 00发送 CMD_REQ包1发送 PUSH_DATA包

HTTP头部 api-key xxxxddddsssaaa masterkey或者设备 apikey

HTTP内容 用户自定义数据jsonstring二进制数据(小于 64K)

HTTP响应响

应消息内容

(示例)

errno 0

error succ

data

cmd_uuid2302-312-FWs 命令 id

4372 查询命令状态

表4-28 查询命令状态

HTTP方法 GET

URL apihecloudscomcmdscmd_uuid

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno 0

error succ

data

status1

0设备不在线|Device not online

1命令已创建| Command Created

2命令已发往设备| Command Sent

3命令发往设备失败| Send Command Failed

4设备正常响应| Command Response Received

5命令执行超时| Command Response Timeout

6设备响应消息过长 | Command Response Too Large

descldquosendingrdquo

中移物联网有限公司 OneNET 开发文档中心

4373 查询命令响应

表4-29 查询命令响应

HTTP方法 GET

URL apihecloudscomcmdscmd_uuidresp

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP 响应响

应消息内容

用户设备返回的响应内容

4374 查询设备历史命令

表4-30 查询设备历史命令

HTTP方法 GET

URL apihecloudscomcmdshistoryltdevice_idgtltdevice_idgt

URL 参数

start=2015-01-10T080035 查询的开始时间(可选)

end=2015-01-10T080535 查询的结束时间(可选)

page=1 指定页码最大页数为 10000(可选)

per_page=30 指定每页输出设备个数默认 30最多 100(可选)

HTTP头部 api-key xxxxddddsssaaa

HTTP响应响

应消息内容

errno 0

error succ

data

page 1当前页码

per_page 10当前每页总数

total_count 100

items [

cmd_uuid 2302-312-FWs

device_id 2设备 ID

expire_time 2016-07-05 000000过期时间

status 0命令状态

send_time 2016-07-05 000000发送时间

confirm_time 2016-07-05 000000响应时间

confirm_body 2463726571007b202274797022 响应内容

16进制字符

body 2463726571007b202274797022请求内容16进制字符

hellip

中移物联网有限公司 OneNET 开发文档中心

hellip

]

438 视频能力

4381 获取播放地址

表4-31 获取播放地址

HTTP方法 GET

URL apihecloudscomipcrtmp_address

URL 参数

device_id= 接收该数据的设备 ID(必填)

channel_id = 对应数据流名称中的 channelnum

protocol_type = 播放协议类型 0rtmp1hls2http-flv

HTTP头部 api-key xxxxddddsssaaa masterkey或者设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

errorrdquosuccrdquo

ldquodatardquo

addripport

accessTokenldquo字符串rdquo

439 APIKEY

4391 新增

表4-32 新增 APIKEY

HTTP方法 POST

URL apihecloudscomkeys

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP内容

(示例)

title sharing key key 的命名

permissions [

resources [ 被授权的资源

中移物联网有限公司 OneNET 开发文档中心

dev_id 424 被授权的设备 id

dev_id 425 被授权的设备 id

hellip

hellip

]

access_methods [ 被授权的命令

get

put

post

]

]

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data key2302-312-FWs key_string

说明授权命令是可选的另外被授权的命令也可以是 getputpost 的

一个或几个如只授权 get和 put命令

access_methods [getput]

4392 更新

表4-33 更新 APIKEY

HTTP方法 PUT

URL apihecloudscomkeyskey_string

HTTP头部 api-key xxxxddddsssaaa masterkey(注只能为 master-key)

HTTP内容

(示例)

title sharing key key 的命名

permissions [

resources [ 被授权的资源

dev_id 424 被授权的设备 id

ds_idfan1 数据流 id可选

中移物联网有限公司 OneNET 开发文档中心

dev_id 425 被授权的设备 id

ds_idfan1 数据流 id可选

hellip

hellip

]

access_methods [ 被授权的命令可选

get

put

post

]

]

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

说明

1对于 masterkey 不允许更新操作masterkey 默认具有最大权限可以访

问该用户名下所有设备所有数据

可以进行 POSTGETPUTDELETE操作如果更新 master key 系统会返回

失败

2授权命令是可选的另外被授权的命令也可以是 getputpost 的一个

或几个如只授权 get和 put命令

access_methods [getput]

3API key 更新是覆盖操作会将原来存在的授权资源和授权命令覆盖不

会保留原来的授权资源和授权命令

4393 查看

中移物联网有限公司 OneNET 开发文档中心

表4-34 查看 APIKEY

HTTP方法 GET

URL httpapihecloudscomkeys

URL 参数

key = FWJPO-FZFHW-FFEWB可选只查看该 key相关信息

page = 1 指定页码 可选

per_page = 10 指定每页输出个数可选默认 10最多 100

device_id = xxbbcc可选只查看与该设备相关的非 master-key

HTTP头部 api-key xxxxddddsssaaa masterkey(注只能为 master-key)

HTTP响应响

应消息内容

(示例)

errno 0

data

per_page 30

total_count 2

keys [

create_time 2015-11-04 142552

title Auto-generated-master-key

key 03GeDLYk0WNk1V338g7yndKZYkQA

create_time 2015-12-03 100041

permissions [

resources [

dev_id 564280

]

]

title 设备 1测试 Key

key vuHebEWefiU2Ueo5ouoCc1CUsYQ=

]

page 1

error succ

中移物联网有限公司 OneNET 开发文档中心

4394 删除

表4-35 删除 APIKEY

HTTP方法 DELETE

URL httpapihecloudscomkeyskey_string

HTTP头部 api-key xxxxddddsssaaa masterkey(注只能为 master-key)

HTTP 响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

4310 消息订阅

43101 按 Topic 发送命令

表4-36 按 Topic 发送命令

HTTP方法 POST

URL apihecloudscommqtt

URL参数 topic=xxx 设备订阅的主题(必选)

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP 内 容

(示例)

HTTP响应响

应消息内容

(示例)

errno0

errorldquosuccrdquo

data

total_count1

per_page30

page1

devices [123123433333]

43102 查询订阅指定 Topic设备的列表

表4-37 查询订阅制定 Topic设备的列表

HTTP方法 GET

URL apihecloudscommqtttopic_device

URL 参数

topic=xxx 设备订阅的主题(必选)

page=1 当前页码 必填大于等于 1

per_page=10 每页 必填范围 1-1000

中移物联网有限公司 OneNET 开发文档中心

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP内容

(示例)

HTTP响应响

应消息内容

(示例)

errno0

errorldquosuccrdquo

data

total_count1

per_page30

page1

devices [123123433333]

43103 查询设备订阅的 Topic列表

表4-38 查询设备订阅的 Topic列表

HTTP方法 GET

URL apihecloudscommqttdevice_topicdevice_id

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno0

errorldquosuccrdquo

data

[topic_name1 topic_name2 topic_name3]

43104 删除产品的 Topic

表4-39 删除产品的 Topic

HTTP方法 DELETE

URL apihecloudscommqtttopic

URL参数 name=xxx topic名(必选)

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno0

errorldquosuccrdquo

中移物联网有限公司 OneNET 开发文档中心

43105 查询产品的 Topic

表4-40 查询产品的 Topic

HTTP方法 GET

URL apihecloudscommqtttopic

URL参数 无

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno0

errorldquosuccrdquo

data

[topic_name1topic_name2topic_name3]

中移物联网有限公司 OneNET 开发文档中心

第五章 接入实例

51 MQTT-device 接入

511 工具下载

为方便开发人员直观感受使用 mqtt 协议进入平台的便利可使用平台提供

的 MQTT 设备模拟器进行接入平台请在首页-gt开发文档-gt资源下载-gt13 调试

工具下载进行下载如下图

图5-1 资源下载

下载地址

httpupfileshecloudscom123ueditor201707125d5bc37eca39c0c5b7a5bcb9

0e451eeerar

中移物联网有限公司 OneNET 开发文档中心

512 界面说明

图5-2 界面说明

513 使用方法

5131 创建产品

如 323 的过程在设备接入协议中选择 MQTT

中移物联网有限公司 OneNET 开发文档中心

图5-3 选择连接协议

5132 创建设备

如 323描述在平台上新建一个设备

5133 建立连接

在产品概况中可以查看产品 ID此信息填入模拟器 ProductID一栏如下图

图5-4 产品ID

在平台上进入设备信息页面可查看设备 ID及鉴权信息(此鉴权信息是新建设备时候填

写的鉴权信息)如下图

中移物联网有限公司 OneNET 开发文档中心

图5-5 设备ID及鉴权信息

相应把设备 ID及鉴权信息填入模拟器之中然后点击连接按钮如果未弹出提示对话

框则表示设备鉴权成功如下图

图5-6 连接成功

中移物联网有限公司 OneNET 开发文档中心

5135订阅与发布

演示本操作需要在 OneNet平台建立两个基于 MQTT协议的设备一个用于消息发布

另一个用于消息订阅

图5-7 设备状态

开启两个模拟器分别模拟以上两个设备然后建立连接

首先使用订阅主题打开第一个模拟器模拟消息订阅者

图5-8 订阅主题

其次发布主题打开第二个模拟器模拟消息发布者

中移物联网有限公司 OneNET 开发文档中心

图5-9 发布主题

经过以上两个操作后查看模拟消息订阅者的模拟器则收到了主题

为rdquotopic_namerdquo的消息如下图

中移物联网有限公司 OneNET 开发文档中心

图5-10 收到的主题

5136接收平台指令

建立连接后模拟器也可接收来自平台的指令具体操作如下

先打开模拟器-gt建立连接-gt选中【[OneNet]平台指令接收】选项栏利用平台下发指

令功能下发如下图平台下发指令

图5-11 平台发送命令

中移物联网有限公司 OneNET 开发文档中心

图5-12 下发指令

填写好将要发送的消息后点击【发送命令】按钮则模拟器成功接收到来自平台的

数据如下图模拟器截图

图5-13 模拟器收到的指令

5137上传数据点

Mqtt支持 Json 数据格式上报数据现根据 Json几种格式举一些例来演示怎么利用

模拟器上传数据

1)使用 Json数据 Type1上传 Json数据

datastreams[idtemperaturedatapoints[value255]]

中移物联网有限公司 OneNET 开发文档中心

如下模拟器上传数据界面

图5-14 Type1数据格式

则在平台数据展示中则可看到上传的数据点

图5-15 收到数据展示

2)使用 Json数据 Type3示例 Json数据为

temp32humi98

模拟器发送数据截图

中移物联网有限公司 OneNET 开发文档中心

图5-16 Type3数据格式

平台数据展示截图

图5-17 数据展示

3)使用 Json数据 Type4示例 Json数据为

temperature233pm2589

模拟器上传数据截图

中移物联网有限公司 OneNET 开发文档中心

图5-18 Type5数据格式

平台接收数据展示截图

图5-19 数据展示

52 基于麒麟开发板的 MQTT 接入实例

OneNet 平台为使用户能快速接入发布麒麟座开发板官网提交您的创意免

费申请开发板下面利用麒麟座开发板 V31 演示开发板采集温湿度使用 MQTT发

送到平台的接入流程

开发板申请链接httpsopeniot10086cneventdetail185html

521 搭建开发环境

OneNET 平台提供的麒麟座开发板是基予 STM32 单片机开发的一块功能应用

板开发板包含 MCU温湿度传感器GSM 模块WIFI 模块电源模块键盘

中移物联网有限公司 OneNET 开发文档中心

LED以及 lcd显示接口等满足用户对平台接入的基本需求能快速接入到平台

资料包配备完整工程代码方便工程移植等使用

目前 STM32 开发常用的 IDE 有 IARMDK 等我挑选 MDK 作为开发工具打

开工具包先安装 MDK511A安装完毕后再安装 MDKCM511A开发板所有资料软件

工具包下载案例包

案例包下载链接

httpspanbaiducoms1UB1qZGrVuovSVdbqqXP0Lglistpath=2F

图5-20 MDK包

安装完毕并安装 license详细步骤不做演示

中移物联网有限公司 OneNET 开发文档中心

522 连接硬件准备

5221 开发板接线

图5-21 开发板接线图

电源DC-5V

运行信息USART1-MicroUSB 线

软件下载ST-Link

中移物联网有限公司 OneNET 开发文档中心

5222 ESP8266跳线帽连接

图5-22 ESP8266跳线帽连接

中移物联网有限公司 OneNET 开发文档中心

5223 M6312跳线帽连接

图5-23 M6312跳线帽连接

523 工程实例

例程使用最简单易懂的方式编写着重让大家明白接入流程和协议

10~12 协议专属例程是展示该协议下的专用功能比如 EDP 的 PushData

中移物联网有限公司 OneNET 开发文档中心

HTTP 注册新设备MQTT 的订阅发布等具体使用方法查看该目录下的《使用

说明》

图5-24 工程文件

524 开发工程文件

中移物联网有限公司 OneNET 开发文档中心

图5-25 工程文件

图5-26 工程结构

默认已创建好产品以及设备打开文件工程 onenetc 和 esp8266c 修改例

程的 WIFI 信息和平台信息

分别在 esp8266c 的 36和 onenetc的 414345行

图5-27 更改项

525 编译下载

开发版接串口会有相应状态显示平台设备显示在线状态绿色为连接成功

设备在线灰色表示未连接并在数据展示中显示对应主题的所有数据

中移物联网有限公司 OneNET 开发文档中心

图5-28 连接成功

图5-29 收到数据

其他实例详情请见httpsopeniot10086cnbbsthread-1266-1-1html

中移物联网有限公司 OneNET 开发文档中心

第六章 MQTT 协议详解

61 设备与平台通信协议包格式

协议就是通信双方的一个约定即表示第 1字节传输的什么第 2字节

传输的什么helliphellip在 MQTT协议中一个 MQTT 数据包由固定头(Fixed

header) 可变头(Variable header) 消息体(payload)三部分构成

MQTT 数据包结构固定头部+可变头部+消息体

固定头(Fixed header)存在于所有 MQTT数据包中表示数据包类型及

数据包的分组类标识固定头格式如下

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 - 5 Remaining Length(该字段占用 1-4个字节)

目前平台版本支持的 Packet Type如下

名字 值 流向 描述

CONNECT 1 C-gtS 客户端请求与服务端建立连接

CONNACK 2 S-gtC 服务端确认连接建立

PUBLISH 3 CS 发布消息

PUBACK 4 CS 收到发布消息确认

PUBREC 5 CS 发布消息收到

PUBREL 6 CS 发布消息释放

PUBCOMP 7 CS 发布消息完成

SUBSCRIBE 8 C-gtS 订阅请求

SUBACK 9 S-gtC 订阅确认

UNSUBSCRIBE 10 C-gtS 取消订阅

UNSUBACK 11 S-gtC 取消订阅确认

PING 12 C-gtS 客户端发送 PING(连接保活)命令

PINGRSP 13 S-gtC PING命令回复

DISCONNECT 14 C-gtS 断开连接

可变头(Variable header)存在于部分 MQTT 数据包中数据包类型决定

了可变头是否存在及其具体内容

消息体(Payload)存在于部分 MQTT 数据包中表示客户端收到的具体内

中移物联网有限公司 OneNET 开发文档中心

不同类型数据包中可变头和消息体包含关系如下

消息类型 Variabl

e

Header

Payloa

d

CONNECT 有 有

CONNACK 有 有

PUBLISH 有 有

PUBACK 有 无

PUBREC 有 无

PUBREL 有 无

PUBCOMP 有 无

SUBSCRIBE 有 有

SUBACK 有 有

UNSUBSCRIBE 有 有

UNSUBACK 有 无

PING 无 无

PINGRSP 无 无

DISCONNECT 无 无

62 平台支持数据包类型

621 CONNECT(客户端请求与服务端建立连接 client -gt server)

固定头(Fixed Header)

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 - 5 Remaining Length(该字段占用 1-4个字节)

MQTT Packet Type 值为 0001表示该数据包为请求连接数据包

Remaining Length 剩余长度占 1-4字节

可变头(Variable Header)

包含内容如下

Description 7 6 5 4 3 2 1 0

byte

1-2

ProtocolNa

me Length

0 0 0 0 0 0 0 0

0 0 0 0 0 1 0 0

byte

3

lsquoMrsquo 0 1 0 0 1 1 0 1

byte

4

lsquoQrsquo 0 1 0 1 0 0 0 1

中移物联网有限公司 OneNET 开发文档中心

byte

5

lsquoTrsquo 0 1 0 1 0 1 0 0

byte

6

lsquoTrsquo 0 1 0 1 0 1 0 0

Byte

7

Protocol

Level

0 0 0 0 0 0 0 1

Byte

8

Connect

Flag

Use

r

flag

Passwo

rd

flag

WillReta

in

Flag

WillQo

s Flag

WillFl

ag

CleanSessi

on

Flag

Reser

ve

Byte

9-10

KeepAlive

(1) 版本

Protocol Level 必须设置为 4平台只支持协议版本 v 311不支持更老

的版本使用第三方客户端时需要注意选择正确的版本

(2) user flag 与 password flag

平台不允许匿名登陆因此这两个标志位在连接时必须设置为 1否则认为

协议错误平台将会断开连接

(3) Will flag 与 WillretainflagWillQosFlag

Will flag 为 0时WillQosFlag 和 WillRetainFlag 必须为 0Will Flag

为 1时WillQosFlag 只能为 012

1当该设备下一次正常上线后服务器会清除之前的 will 消息(包括

retain 消息)

2如果设备上线时设置了 Will Topic 和 msg且将 WillRetainFlag 设

置为 1只有设备异常断开后服务器才会将该 Will msg 分发给新的 Will

Topic 的订阅者且 Qos 级别以订阅的 Request qos 级别为准

3如果设备上线时设置了 Will Topic 和 msg且将 WillRetainFlag 设

置为 0服务器不会存储该消息当设备异常断开后会将该 Will msg 以设

备设置的 WillQosFlag的 Qos级别进行分发

(4) CleanSessionFlag

若客户端将 clean session 标志位设置为 0当其断开后平台将会保存

sessionsession 需保持的内容包含

客户端订阅的 topic列表

中移物联网有限公司 OneNET 开发文档中心

还未完成确认的 Qos1Qos2级别的 publish消息

客户端保存 session 的内容包含

已经发送到服务端的但还没有收到确认的 Qos1Qos2消息列表

待发送的 Qos0列表

若客户端将 clean session 标志位设置为 1当其断开后平台会清除设备

的订阅列表及未完成确认的 Qos1Qos2 的 publish消息

(5) Reserve

保留位置 0

(6) KeepAlive 保活时间

每个客户端可自定义设置连接保持时间最短 120秒最长 65535 秒

消息体(Payload) Description 是否必须存在 格式

Field1 Client

Identifier

是 2字节字串长度 + utf8字

Field2 UserName 是 2字节字串长度 + utf8字

Field3 UserPassword 是 2字节字串长度 + utf8字

目前平台支持的方式为以后两种

方式 1设备 ID项目 ID鉴权信息(auth_info)

字段设置 消息示例

client_id设置为平台创建设备时的

设备 id

username设置为ldquo项目 IDrdquo

password设置为ldquo鉴权信息

(auth_info)rdquo

client_id=rdquo123rdquo

username=rdquo433223rdquo

password=rdquo注册的鉴权信息rdquo

各字段说明如下

鉴权信息(auth_info)在平台申请设备时填写设备的 auth_info 属性(数

字+字母的字符串)该属性需要产品内具备唯一性(可使用设备出厂唯一编号)

方式 2设备 ID + APIKey(项目 ID也需要填写)

字段设置 消息示例

client_id设置为平台创建设备时的

设备 ID

username设置为ldquo项目 IDrdquo

client_id=rdquo123rdquo

username=rdquo433223rdquo

password=Api Key

中移物联网有限公司 OneNET 开发文档中心

password设置为ldquoAPI鉴权信息

(auth_info)rdquo

项目 ID在平台添加项目时平台生成的 ID

APIKey在平台上创建产品时生成的 APIKey

连接包实例如下

Send one mqtt packet

FixHeader

PacketTag = 16

PacketType = 1

RemainLength = 34

VariableHeaderConnect

protocol_name_len_= 4

protocol_name_= MQTT

protocol_level_= 4

connect_flag_= 192

keep_alive_= 12000

client_id_len_= 8

client_id_= 34764813

usr_name_len_= 6

usr_name_= 150295

password_len_= 4

password_= push

MQTT0x10 0x22 0x00 0x04 0x4D 0x51 0x54 0x54 0x04 0xC0 0x2E 0xE0 0x00 0x08 0x33

0x34 0x37 0x36 0x34 0x38 0x31 0x33 0x00 0x06 0x31 0x35 0x30 0x32 0x39 0x35 0x00

0x04 0x70 0x75 0x73 0x68

Send One Packet Succ

中移物联网有限公司 OneNET 开发文档中心

622 CONNACK (服务端确认连接建立)

Fixed Header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type = 2 0 0 0 0

byte2 - 5 Remaining Length(该字段占用 1-4个字节)

Variable Header

Description 7 6 5 4 3 2 1 0

byte 1 Acknowledge Flags 0 0 0 0 0 0 0 Sp

byte 2 Return Code x x x x x x x x

Sp Session Present Flagsession信息在服务器已保持置 1未保存置

0

返回码说明

返回码 描述

0 成功

1 协议版本错误

2 非法的 clientid

3 服务不可用

4 用户名或密码错误

中移物联网有限公司 OneNET 开发文档中心

5 非法链接(比如 token非法)

失败

如果 connect包不符合协议内容约束则直接断掉连接而不需要发送 conn

ack包

如果鉴权或授权失败回复一个带非 0错误码的 connack包

成功

必须断掉重复的 clientid

执行 cleansession 对应的操作

必须回复一个 connack回复码为 0

开始消息传递并加入 keepalive的监视

PS客户端需要等到服务端的 connack报文才能发送后续的数据包

623 PUBLISH(发布消息 client -gt server)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type DUP f

lag

QoS Level RETAI

N

byte2 - 5 Remaining Length(该字段占用 1-4 个字节)

DUP

QoS2Qos1如果为 0则表示是第一次发送该包如果为 1则表示

为重复发送的包

Qos0DUP 必须为 0

中移物联网有限公司 OneNET 开发文档中心

QoS 指定了该 publish包的 Qos 等级如下

Qos 值 Bit2 Bit1 描述

0 0 0 最多发送一次

1 0 1 至少发送一次

2 1 0 只发送一次

RETAIN 保留标志位如果为 1服务器存储最新一条 RETAIN消息以便

分发给新的订阅者如果 RETAIN为 1Payload 为空服务器分发该消息后会

清空该 topic 下的 RETAIN 消息

PS该版本实现了 Qos0Qos1Qos2

Variable Header

Description 格式 是否必须

Field1 TopicName 2 字节字串长度 + utf8字

Field2 PacketIdent

ifier

2 字节 QoS0否QoS1Qos2是

Payload

内容根据不同业务自定义

624 PUBLISH(发布消息 server -gt client)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type DUP f

lag

Qos Level RETAIN

byte2 - 5 Remaining Length(该字段占用 1-4个字节)

DUP

Qos2QoS1如果为 0则表示是第一次发送该包如果为 1则表示

为重复发送的包

中移物联网有限公司 OneNET 开发文档中心

Qos0DUP 必须为 0

QOS 指定了该 publish包的 qos等级如下

Qos 值 Bit2 Bit1 描述

0 0 0 最多发送一次

1 0 1 至少发送一次

2 1 0 只发送一次

RETAIN如果服务器分发的消息是 RETAIN 消息则将该标志位置 1否则置

0

PS该版本实现 Qos0Qos1Qos2其中服务器分发消息的 Qos级别是以 Clien

t-gtServer 发送的 publish 包的 qos 等级为准非订阅的 topic 的 Qos 等级R

etain 消息是以订阅的 Request Qos 级别进行推送

VariableHeader

Description 格式

Field1 TopicName 2 字节字串长度 + utf8字

Payload

内容根据不同业务自定义

625 PUBACK(收到发布消息确认)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

中移物联网有限公司 OneNET 开发文档中心

626 PUBREC(发布消息收到)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

627 PUBREL(发布消息释放)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

628 PUBCOMP(发布消息完成)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

中移物联网有限公司 OneNET 开发文档中心

byte 1~

2

PacketIdentifier PacketIdentifier

629 SUBSCRIBE(订阅请求)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

Payload

Description 格式

Byte1~

n

TopicName 2 字节字串长度 + utf8字

Byten+

1

Request Qos 服务质量要求(只能为 0

12)

topic 说明

可以包含一个或多个 topic

topic必须是数字英文反斜杠()的组合目前不支持通配符

每个客户端最多订阅 100个 topic

以下 topic 被系统保留使用(客户端不能订阅)

类型 说明

$开头 平台保留

中移物联网有限公司 OneNET 开发文档中心

6210 SUBACK(订阅确认)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

Payload

Description 7 6 5 4 3 2 1 0

byte 1 retcode

返回码说明

返回码 描述

0x00 成功(granted qos = 0)

0x01 成功(granted qos = 1)

0x02 成功(granted qos = 2)

0x80 失败

6211 UNSUBSCRIBE(取消订阅)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

中移物联网有限公司 OneNET 开发文档中心

Payload

Description 格式

Byte1~

n

TopicName 2 字节字串长度 + utf8字

可以包含一个或多个 topic

6212 UNSUBACK(取消订阅确认)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

6213 PING(客户端发送 PING(连接保活)命令)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

NULL NULL

注PING命令无 VariableHeader

中移物联网有限公司 OneNET 开发文档中心

6214 PINGRSP(PING命令回复)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

NULL NULL

注PINGRSP无 VariableHeader

6215 DISCONNECT(断开连接)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

NULL NULL

注DISCONNECT无 VariableHeader

中移物联网有限公司 OneNET 开发文档中心

第七章 设备开发流程

71 连接鉴权

Device Onenet

(Connect)鉴权请求

(ConnAck)鉴权结果

加载session

鉴权

图7-1 连接鉴权

设备向平台发起 connect 请求connect 中携带鉴权信息具体

参见(报文格式参考 621)

平台拿到鉴权信息进行鉴权

鉴权通过后如果 cleansession=0 平台将会加载保存的设备

的一些信息如订阅列表(621中描述)

如果 cleansession=1 设备没有保存信息在平台则不加载设

备相关信息

返回鉴权结果 ConnAck(报文格式参考 621)

72 消息发布

721 数据点上报

设备使用 publish 报文来上传数据点 报文格式如下

中移物联网有限公司 OneNET 开发文档中心

VariableHeader

Field 名称 说明 格式

Field1 TopicName=rdquo$dprdquo $dp 为系统上传数据点

的指令

2字节字串长度 + utf8

字串

Payload

Payload包含真正的数据点内容支持的格式如下

Byte 1 Bit0-5数据类型指示目前支持

Type = 1

Type = 2

Type = 3

Type = 4

Type = 5

Type = 6

Type = 7

Bit6-7 flags 根据具体类型不同意义

Type6Type7这两种需要填写时间戳的数据类型

如果填入了时间戳则须将 bit7 置 1否则置 0(即

忽略数据类型说明中的日期时间相关字段)

0 0 0 0 0 0 0 1

Byte 2 根据数据类型指示不同

Byte n

中移物联网有限公司 OneNET 开发文档中心

数据类型 1(type == 1)格式说明

数据类型 2(type == 2)格式说明

Byte 1 数据点类型值1 1JSON 格式 1 字符串 0 0 0 0 0 0 0 1

Byte 2 指示后面 json 字符串长度

固定两字节长度高位字节值为 0x00

Byte 3 固定两字节长度低位字节值为 0x41

Byte 4

ldquodatastreamsrdquo[ 可以同时传递多个数据流

ldquoidrdquordquotemperaturerdquo

ldquodatapointsrdquo[数据流可以有多个数据点

rdquoatrdquordquo2013-04-22 222222rdquo可选

rdquovaluerdquo 365用户自定义

]

ldquoidrdquordquolocationrdquo

ldquodatapointsrdquo[hellip]

hellip

]

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

Byte n

Byte 1 数据点类型指示type=2 二进制数据 0 0 0 0 0 0 1 0

Byte 2 指示后面 json 字符串长度

固定两字节长度-高位字节值为 0x00

Byte 3 固定两字节长度-低位字节值为 0x10

Byte 4

rdquods_idrdquordquoimagerdquo 创建数据流时定义的 ID(必填)

ldquoatrdquordquo2014-10-25 122323rdquo 时间(可选)

rdquodescrdquo字符串或 json 对象对该数据的描述(可选)

hellip

Byte n

Byte n+1 指示后面二进制数据长度

固定四字节长度-第 1 字节(最高)值为 0x00

Byte n+1 固定四字节长度-第 2 字节值为 0x00

Byte n+2 固定四字节长度-第 3 字节值为 0x01

Byte n+3 固定四字节长度-第 4 字节(最低)值为 0x00

Byte n+4 该域目前最大支持 3M

中移物联网有限公司 OneNET 开发文档中心

数据类型 3(type == 3)格式说明

数据类型 4(type ==4)格式说明

hellip 本例中的该域 256 字节数据

Byte n+260

Byte 1 数据点类型指示type=3 JSON 格式 2 字符串 0 0 0 0 0 0 1 1

Byte 2 指示后面字符串长度

固定两字节长度高位字节值为 0x00

Byte 3 固定两字节长度低位字节值为 0x46

Byte 4 通用格式

ldquodatastream_id1rdquordquovalue1rdquo

ldquodatastream_id2rdquordquovalue2rdquo

hellip

示例

ldquotemperaturerdquo225rdquohumidityrdquordquo952rdquo

hellip

hellip

hellip

hellip

Byte n

Byte 1 数据点类型指示type=4 JSON 格式 3 字符串 0 0 0 0 0 1 0 0

Byte 2 指示后面字符串长度

固定两字节长度高位字节值为 0x00

Byte 3 固定两字节长度低位字节值为 0x46

Byte 4 通用格式

ldquodatastream_id1rdquoldquodatetime1rdquordquovalue1rdquo

ldquodatastream_id2rdquo ldquodatetime2rdquordquovalue2rdquo

hellip

示例

ldquotemperaturerdquoldquo2015-03-22 223112rdquo225

hellip

hellip

hellip

hellip

Byte n

中移物联网有限公司 OneNET 开发文档中心

数据类型 5(type == 5)格式说明

数据类型 6(type == 6)格式说明

Byte 1 数据点类型指示type=5 自定义分隔符 0 0 0 0 0 1 0 1

Byte 2 指示后面字符串长度

固定两字节长度高位字节值为 0x00

Byte 3 固定两字节长度低位字节值为 0x41

Byte 4 消息中最前面两字节为用户自定义的域中分隔符和域间分隔符

这两个分隔符不能相同比如采用逗号作为域中分隔符分号作

为域间分隔符的格式如下

feild0feild1hellipfeildn

其中每个 field 格式支持 3种

field 格式 1 3 个子字段分别是数据流 ID时间戳数据值

通用格式

Datastream_iddatetimevalue

field 格式 2 2 个子字段分别是数据流 ID 和数据值省略时

间戳通用格式

Datastream_idvalue

field 格式 3 1 个子字段省略了数据 ID 和时间戳只传输数

据值平台将用该域(feild)所在的位置号(从 0 开始)作为数据

流 ID通用格式

value

示例

(1)temperature2015-03-22

223112225102pm258910

(2)temperature2015-03-22

223112225102pm258910

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

Byte n

Byte 1 数据类型指示type=6 带时间自定义分隔符 0 0 0 0 0 1 1 0

Byte 2 年(后两位)例如 2016 年则该字节为 16 0 0 0 1 0 0 0 0

Byte 3 月(1-12)

Byte 4 日(1-31)

Byte 5 小时(0~23)

Byte 6 分钟(0~59)

Byte 7 秒(0~59)

Byte 8 指示后面字符串长度

固定两字节长度高位字节值为 0x00

Byte 9 固定两字节长度低位字节值为 0x41

Byte 10 消息中最前面两字节为用户自定义的域中分隔符和域间分隔符

具体格式见 type=5 说明若相关域中没有时间戳则采用本类

hellip

中移物联网有限公司 OneNET 开发文档中心

数据类型 7(type == 7)格式说明(每次最多 500个数据流的浮点数)

hellip 型的默认时间戳当作数据点的时间来存储

Byte n

Byte 1 Bit0-5 数据类型指示type=7 可离散浮点数数据流

Bit6保留置 0

Bit7 时间指示位1携带 6字节时间

1 0 0 0 0 1 1 1

Byte 2 年(后两位)例如 2016 年则该字节为 16 0 0 0 1 0 0 0 0

Byte 3 月(1-12)

Byte 4 日(1-31)

Byte 5 小时(0~23)

Byte 6 分钟(0~59)

Byte7 秒(0~59)

Byte 8 数据流名称(取值范围 1-65535)

高位字节值为 0x00

Byte 9 低位字节值为 0x01

Byte10 数据流个数(取值范围 1-500)

高位字节值为 0x00

Byte11 低位字节值为 0x01

Byte 10 4 字节 float 类型低位在前高位在后

Byte 11

Byte 12

Byte 13

Byte n 数据流名称(取值范围 1-65535)

高位字节值为 0x24

Byte n+1 低位字节值为 0x37

Byte n+2 数据流个数(取值范围 1-500)

高位字节值为 0x01

Byte n+3 低位字节值为 0x00

Byte n+2 4 字节 float 类型低位在前高位在后

Byte n+4

Byte n+5

Byte n+6

中移物联网有限公司 OneNET 开发文档中心

7211 Qos0(Client-gtServer)

Device OneNet

Publish $dp(Qos0)

存储

图7-2 QoS连接图

设备发布 Qos0 消息(上报数据点)

平台收到上报数据点后保存起来

7212 Qos1(Client-gtServer)

Device OneNet

Publish $dp(Qos1)

存储

PubAck

图7-3 Qos1连接图

设备发布 Qos1 消息(上报数据点)

中移物联网有限公司 OneNET 开发文档中心

平台收到上报数据点后保存起来

平台给设备回复相应的 PubAck (报文格式参考 625)

7213 Qos2(Client-gtServer)

Device OneNet

Publish $dp(Qos2)

存储

PubRec

PubRel

PubComp

图7-4 Qos2连接图

设备发布 Qos2 消息(上报数据点)

平台收到上报数据点后保存起来

平台给设备回复相应的 PubRec报文

设备需回复平台 PubRel报文如超时不回平台则会断开相应连接

平台给设备回复 PubComp报文

注数据点上报功能不支持 Retain 特性

中移物联网有限公司 OneNET 开发文档中心

722 平台命令(下发amp回复)

7221 命令下发

平台使用 publish 报文来下发平台指令 报文格式如下

FixHeader

参考 623

VariableHeader

Field 名称 说明 格式

Field1 TopicName=rdquo$creqcmduuidrdquo $creq为系统下发

Cmd 的 指 令

cmduuid为该条指

令的 uuid

2字节字串长度 +

utf8字串

Payload

Payload包含真正的指令内容

72211 Qos0(Server-gtClient)

DeviceOneNet

Publish $creq(Qos0)

图7-5 Qos0命令下发

命令下发

平台向设备发送 topic为$creq的消息(该 topic为平台命令)

中移物联网有限公司 OneNET 开发文档中心

设备收到 topic 为$creq 的 topic 时需将其作为平台下发的指令来处

注目前命令下发以 Qos0级别进行推送

7222 命令回复

设备使用 publish 报文来回复平台指令 报文格式如下

FixHeader

参考 623

VariableHeader

Field 名称 说明 格式

Field1 TopicName=rdquo$crspcmduuidrdquo $crsp为系统处理

设备回复 cmd 的

指令cmduuid为

该条指令的 uuid

2字节字串长度 +

utf8字串

Payload

Payload包含真正回复的指令内容

72221 Qos0(Client-gtServer)

DeviceOneNet

Pulish $crsp(Qos0)

图7-6 Qos0下发命令

中移物联网有限公司 OneNET 开发文档中心

72222 Qos1(Clientlt-gt Server)

DeviceOneNet

Pulish $crsp(Qos1)

Puback

图7-7 Qos1下发命令

如果设备回复响应时以 Qos1回复则平台需要给设备回复一个 Puback 报文

72223 Qos2(Clientlt-gt Server)

DeviceOneNet

Pulish $crsp(Qos2)

PubRec

PubRel

PubComp

图7-8 Qos2下发命令

如果设备回复响应时以 Qos2回复则

1平台需回复设备一个 PubRec报文

中移物联网有限公司 OneNET 开发文档中心

2设备在收到 PubRec后需向平台回复 PubRel报文

3平台收到 PubRel 报文后向设备回复 PubComp报文

73 创建 Topic

Device OneNet

HTTP 请求

HTTP 响应

图7-9 创建Topic

设备通过发送 HTTP请求进行 topic 的创建操作

平台收到请求后创建 topic 并返回结果

请求及响应定义如下

HTTP方法 POST

URL httpapihecloudscommqtttopic

HTTP头部 api-keyxxxx-ffff-zzzzz必须 master key

URL参数

HTTP body

内容

ldquonamerdquordquoxxxxxxrdquo topic 名字只能由英文下划线反斜杠组成最长

1024个字符同一产品下 topic name 不重复

成功返回

errno 0

errorldquosuccrdquo

说明 每个产品最多 100个 topic

中移物联网有限公司 OneNET 开发文档中心

74 订阅

Device OneNet

Subscribe

Suback

更新设备订阅列表

图7-10 订阅

设备发起订阅请求(报文格式参考 629)

平台收到请求后更新 topic列表

平台给设备回复 SubAck (报文格式参考 6210)

注subscribe 的 request qos级别可以为 012

75 取消订阅

Device OneNet

UnSubscribe

UnSuback

更新设备订阅列表

图7-11取消订阅

中移物联网有限公司 OneNET 开发文档中心

设备发起取消订阅请求 (报文格式参考 6211)

平台收到请求后更新 topic 列表

平台给设备回复 UnSubAck (报文格式参考 6212)

76 推送设备 Topic

761 Publish 报文推送

Qos0设备使用 Qos 级别为 0的 Publish报文来进行推送

Device OneNet

Publish(Qos0)

Device

以Qos0 Publish到订阅设备

图7-12 Qos0推送

设备发起推送 topic请求(以 Qos0级别)

平台收到请求后将 topic以 Qos0级别推送到相关订阅设备(支持离线设

备推送)

平台不返回 PubAck或 PubRec 等报文

Qos1

设备使用 Qos级别为 1的 publish报文来推送 Topic

中移物联网有限公司 OneNET 开发文档中心

Device OneNet

Publish(Qos1)

PubAck

Device

以Qos1 Publish到订阅设备

设备回复平台 PubAck

图7-13 Qos1发布

设备发起推送 topic请求(以 Qos1级别)

平台收到请求后将 topic以 Qos1级别推送到相关订阅设备(支持离线设

备推送)

平台返回 PubAck 报文

Qos2

设备使用 Qos级别为 2的 publish报文来推送 Topic

中移物联网有限公司 OneNET 开发文档中心

Device OneNet

Publish(Qos2)

PubRec

Device

以Qos2 Publish到订阅设备

PubRec

PubRel

PubComp

PubRel

PubComp

图7-14 Qos2推送

设备发起推送 topic请求(以 Qos2级别)

平台收到请求后回复 PubRec报文

设备收到 PubRec后需回复 PubRel报文 (如超时不回复平台会断开与设

备的连接)

平台收到 PubRel 报文后回复 PubComp 给设备

平台在回复 PubComp 后会以 Qos2 级别推送到相关订阅设备(支持离线设

备推送)

设备需回复 PubRec报文 (如超时不回复平台会断开与设备的连接)

平台发送 PubRel 报文给设备

设备需回复 PubComp(发布完成)

Publish报文的格式如下

FixHeader

参考 623

中移物联网有限公司 OneNET 开发文档中心

VariableHeader

Field 名称 说明 格式

Field1 TopicName 填写设备订阅的 topic 2字节字串长度 + utf8

字串

Payload

Payload为设备自定义内容

762 HTTP 请求推送

Device OneNet

HTTP 请求

HTTP 响应

Device

Publish到订阅设备

图7-15 HTTP请求

设备以 HTTP 的方式发起推送 topic 请求

平台收到请求后将 topic推送到相关订阅设备 (目前只支持在线推送)

平台返回推送结果

请求及响应定义如下 HTTP方法 POST

URL httpapihecloudscommqtt

HTTP头部 api-keyxxxx-ffff-zzzzz必须 master key

URL参数 topic=ldquoXXXXXXrdquo必选在发送 mqtt协议的 topic 必填

HTTP body内容 用户自定义 Json 或二进制数据(小于 64K)

成功返回

errno 0

errorldquosuccrdquo

中移物联网有限公司 OneNET 开发文档中心

77 离线 Topic

推送 Topic只针对在线设备进行 topic 消息的推送离线设备不会收到订阅

的 topic 的消息离线 Topic则会将该消息推送给在线以及离线设备

1 如果设备在上线时设置了 clean session flag服务端会删除其订阅的

topic及相关的离线 topic消息

2 如果设备没有设置 clean session flag如果有与该设备相关的离线

topic消息则在鉴权成功后将离线消息推送给设备

3 遗嘱消息(will msg)只会推送给订阅了该 will topic的在线的设备离

线设备不会收到

4 离线消息的有效期默认为 2 天(暂不支持用户设定有效期)服务器只会

推送在 2天内的最近 10 条消息

78 数据点订阅

数据点订阅同一产品下的设备可以订阅其他设备的数据点订阅的 topic

格式为deviceid数据流名称即

被关注的设备在上传了该数据流名称的数据点后订阅了该 topic的其他设备都

会收到上传的数据点

1 AB设备的 deviceid分别为 92779278

2 A 设备订阅了名为92789527 的 topic(9278 为设备 B 的 id9527 为 B

设备上传的数据流名称)

3 B 设备上传了名为 9527的数据流(数据点为 11 1578hellip)

4 A 设备会收到多条(取决于设备 B 上传的数据点的个数)推送的 topic 名

为92789527 的 publish消息消息的 payload中则包含设备 B 上传的数据

注目前支持订阅的数据点的类型为 Type1~Type7(详见 721节)

中移物联网有限公司 OneNET 开发文档中心

第八章 常见问题 FAQ

用户在基于 OneNET 平台进行产品开发的过程中可能会遇到各种各样的问

题开发过程中遇到的问题一方面可以参考 OneNET 文档中心的文档或者本文

档前几个章节的内容另一方面用户可以参考本章节总结的常见问题希望这些

文档能对用户在开发过程中有一定的指导和帮助

本章将分三个小节对用户在开发产品过程中可能遇到的问题进行梳理分别

为终端设备接入 OneNET平台的常见问题API调用的常见问题和 OneNET平台

的能力

81 终端设备接入 OneNET 平台的常见问题

序号 问题描述 原因分析 解决方法

1

2

3

4

5

6

7

82 API 调用的常见问题

序号 问题描述 原因分析 解决方法

1

2

3

4

5

6

7

8

9

中移物联网有限公司 OneNET 开发文档中心

83 使用 OneNET平台遇到的常见问题

序号 问题描述 原因分析 解决方法

1

2

3

4

5

6

7

8

Page 7: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com

中移物联网有限公司 OneNET 开发文档中心

第二章 MQTT 协议接入流程

MQTT (Message Queue Telemetry Transport)遥测传输协议使用 TCPIP 提

供网络连接能够对负载内容实现消息屏蔽传输开销小可以有效降低网络流

量其主要提供了订阅发布两种消息模式更为简约轻量易于使用特别适

合于受限环境(带宽低网络延迟高网络通信不稳定)的消息分发属于物联

网(Internet of Thing)的一个标准传输协议

嵌入式设备选择 MQTT 协议优点

1 轻量级的 machine-to-machine 通信协议

2 发布(publish)订阅(subscribe)模式

3 基于 TCPIP支持 QoS

4 长连接协议

5 终端数据点上报支持的数据点类型包括

o 整型(int)

o 浮点数(float)

o 字符串(string)

o JSON 格式

6 适合于低带宽不可靠连接嵌入式设备CPU 内存资源紧张

典型应用场景

MQTT 协议适用于设备和平台需要保持长连接的使用场景MQTT 特点在

于可以实现设备间的消息单播以及组播可以不依赖于其他服务(下发命令服务

推送服务等)实现让设备以应用服务器的方式对真实设备进行管理和控制

以门禁系统为例应用服务器(虚拟设备)可以订阅每个门禁(真实设备)

的统计数据的 topic对所有门禁的数据进行统计分析每个门禁也可以订阅自

身开关门的 topic应用服务器凭此可以远程控制每个门禁的状态

中移物联网有限公司 OneNET 开发文档中心

21 设备接入平台流程图

平台

TCP连接创建产品

发送连接报文

连接应答

数据应答

发送数据报文

生成连接报文

数据应答

发送数据报文

终端

发送下行命令 下发命令

解析下行命令

生成存储数据报文

生成存储数据报文

解析连接应答

解析数据应答

解析数据应答

必要流程

可选流程

存储到数据流

存储到数据流

数据源 创建应用

心跳应答

发送心跳报文生成心跳报文

解析心跳应答

平台操作

设备操作

创建设备

图2-1 设备接入OneNET平台流程图

1) 创建产品

根据产品功能需求选择接入协议重要参数产品 ID注册码产品 APIKey

(见附录一)

2) 创建设备

通过 TCP直接与平台直连的终端在进行接入之前平台上必须要先存在一

个与之一一对应的虚拟设备可以通过开发者中心或者 API 注册创建设备接口

来创建重要参数设备 ID鉴权信息

3) 建立 TCP连接

不同协议有着不同的固定 IP地址与端口

中移物联网有限公司 OneNET 开发文档中心

4) 建立设备连接

通过 1)2)中的参数(一般为产品 ID+鉴权信息+设备 ID)生成连接报文

发送连接报文建立终端与 2)中新建设备的一一对应关系

5) 发送数据报文

按照连接协议生成数据报文发送至平台

6) 创建应用

7) 使用平台下发命令接口或者 API向设备发送指令

22 应用开发流程图

应用开发主要是通过 Rsetful API 的方式实现和 OneNET 平台进行交互对

接在您完成产品创建以及硬件接入后即可根据相关所接入的硬件设备以及所

上传的数据进行相关产品的开发

OneNET 平台提供的应用开发 API分为需要终端响应和只需 OneNET 平台

响应两类下面分别用两个流程图描述这两类 API 的开发流程图 2-2为需

要终端响应的 API 调用流程其中虚线部分只有离线命令的读写下发命令才

有该流程图 2-3为只需平台响应的 API 调用流程

在应用开发平台调用 API 之前 必须与 OneNET 平台建立连接建立连

接的过程和 API 调用流程一并在图中进行了标注

中移物联网有限公司 OneNET 开发文档中心

图2-2 需要终端响应的API流程

终端设备 OneNET平台 应用开发平台

1配置应用开发地址Token等参数

2向应用开发平台发起URLampToken验证

3解析验证请求参数返回验证消息

应用平台与OneNET平台已经建立连接

4调用API指令HTTP请求

5返回平台侧执行结果错误代码和uuid

6API指令执行完毕

图2-3 不需要终端响应的API流程

终端设备 OneNET平台 应用开发平台

1配置应用开发地址Token等参数

2向应用开发平台发起URLampToken验证

3解析验证请求参数返回验证消息

应用平台与OneNET平台已经建立连接

4调用API指令HTTP请求MQTT请求

5返回平台侧执行结果错误代码和uuid

6相应指令请求返回数据 推送数据及执行结果给应用平台

7API指令执行完毕

中移物联网有限公司 OneNET 开发文档中心

第三章 终端设备接入 OneNET 平台流程

终端设备与 OneNET 平台进行数据交互需经过公网到达平台根据 OneNET

平台与网络运营商的关系终端设备智能网关OneNET平台以及第三方应用四

者的网络关系可归纳如图 3-1所示

图3-1 终端设备与服务器网络关系

图 3-1 中终端设备或智能网关设备与 OneNet 平台使用 TCPIP 建立网络连

接使用 MQTT协议进行与平台进行数据通信

31 终端设备接入 OneNET 平台前的准备工作

311 硬件准备

设备终端接入 OneNET平台的通信方式也是多种多样的比较常用的有 GPRS

无线 WIFI以太网口GPRS 方式需要 GPRS 模块和 SIM 卡的支持无线 WIFI 模

块需要 WIFI 模块支持WIFI 模块推荐选用 ESP8266 串口 WIFI 模块GPRS 模块

推荐选用 SIM900A模块

312 软件准备

设备终端接入 OneNET 平台使用 MQTT 协议使用嵌入式设备需移植 SDK

到 MCU详见麒麟发开板接入实例

中移物联网有限公司 OneNET 开发文档中心

32 终端设备接入 OneNET 平台步骤

321 OneNET 平台创建产品及设备

3211 注册用户账号

进入 OneNET官网(httpsopeniot10086cn)点击首页右上角的ldquo注

册rdquo按钮注册用户账号

OneNET 支持ldquo个人用户rdquo和ldquo企业用户rdquo两种注册方式你可以根据您的

实际情况选择注册方式

以个人用户注册为例用户需在对应选项依次填写用户名用户密码所在

地手机号码图片验证码以及手机验证码并完成注册注册页面如图 3-2所

示注册完成后回到主页点击ldquo登录rdquo即可进入 OneNET 的官方主页并由

此进入到你的ldquo开发者中心rdquo

如果客户产品后续需要进行规模化量产建议以企业的名义进行注册注册

时注意注册信息的准确填写另外个人版和企业版在功能上无差异

图3-2 用户账号注册页面

3212 创建产品和设备

在进入到你的ldquo开发者中心rdquo后点击右上角的 ldquo创建产品rdquo在弹出页面中

按照提示填写产品的基本信息进行产品创建在创建过程中请您按照提示尽

可能完整全面地填写相应内容这样更方便您后期对产品进行管理

创建产品页面如图 3-3 和图 3-4其中设备接入方式选择ldquo公开协议rdquo联网

方式选择跟据实际设备进行选择设备接入协议选择ldquoMQTTrdquo

中移物联网有限公司 OneNET 开发文档中心

产品创建完成后页面弹出ldquo创建产品成功rdquo如图 3-5所示点击ldquo立即

添加设备rdquo显示如图 3-6所示界面依次填写ldquo设备名称rdquo鉴权信息设备

名称自定义鉴权信息用于平台对终端设备鉴权每台设备具有唯一性建议设

置为产品出厂编号方便管理鉴权信息需写入设备

图3-3 创建产品页面

中移物联网有限公司 OneNET 开发文档中心

图3-4 创建产品页面

图3-5 创建产品成功页面

中移物联网有限公司 OneNET 开发文档中心

图3-6 添加设备页面

322 终端设备软硬件初始化

终端设备在上电以后需要完成设备的软硬件初始化硬件初始化包括各个

硬件模块的上电处理器的寄存器初始化工作模式初始化等等软件初始化包

括基础通信套件初始化应用接口初始化应用程序初始化等等

323 终端创建设备及资源

终端设备创建设备(device_id)配置产品 ID鉴权信息注册码连接

服务器 IP端口号等信息创建成功后与平台建立登陆连接连接成功后即可向

平台上报数据点

324 登录 OneNET平台

终端设备的基础通信套件完成初始化以及设备资源创建完成后可向

OneNET平台发送登陆请求返回登录结果如果参数错误或者登录超时平台会

返回登录失败如果验证通过平台会返回登录成功

若终端设备登录平台成功设备名称左边的圆形图标会由灰色(离线状态)

变成绿色(在线状态)如图 3-7所示

中移物联网有限公司 OneNET 开发文档中心

图3-7 平台侧设备状态显示

325 设备数据点上报

终端设备与平台成功建立连接后设备使用 publish 报文向平台上报数据点

平台收到数据点后保存到对应数据流下方便应用查阅数据点上报格式以及类型详见

721

图3-8 平台侧收到设备数据流显示

326 创建应用

用户可以利用上传的数据创建相关的应用发布直观的展示页面目前在平台应用孵化

器中提供了曲线图柱状图表盘物体位置图片和开关等应用

在产品详情页面点击ldquo应用管理rdquo进入应用管理主界面如下图

中移物联网有限公司 OneNET 开发文档中心

图3-9 应用管理模块

点击ldquo创建应用rdquo输入应用名称点击ldquo创建rdquo如下图

图3-10 新应用创建

保存成功后点击编辑按键进入应用编辑页面如下图

中移物联网有限公司 OneNET 开发文档中心

图3-11 应用编辑入口

图3-12 应用编辑界面

在应用编辑页面中使用左侧的控件进行应用编辑此例中我们选择表盘控件来显示

刚刚上传的数据点击表盘控件如下图所示

中移物联网有限公司 OneNET 开发文档中心

图3-13 表盘控件添加

在右侧的属性中选择设备以及数据源(及刚刚上传的数据流)如下图

图3-14 表盘控件数据流绑定

在确定好数据流之后可以看到表盘回显示成我们添加的数据的值其他的

刷新频率以及表盘显示样式读者可以自行更具需求加以修改

完成应用编辑之后点击右上角保存按钮退出应用编辑

在应用管理页面点击该应用即可查看编辑好的应用页面

中移物联网有限公司 OneNET 开发文档中心

图3-15 保存应用

图3-16 应用查看与分享

该应用可以通过共享ldquo发布链接rdquo的方式将该应用共享给他人

33 设备批量接入

单个设备可以通过平台的开发者中心添加设备的方式进行创建若用户有多

个设备直接与平台 TCP连接的终端通过手动添加需耗费大量时间人力OneNET

中移物联网有限公司 OneNET 开发文档中心

为大批量接入用户提供 3种批量创建设备的方案

331 平台设备批量复制

此种方式为选择某个设备作为复制的模板通过导入 EXCEL的方式进行设备

复制厂商可以在小批量测试时使用该功能

在设备列表中点击查看详情

图3-17 设备批量接入

在设备详情页面点击批量导入设备信息

中移物联网有限公司 OneNET 开发文档中心

图3-18 导入设备信息

点击批量复制

图3-19 批量复制

中移物联网有限公司 OneNET 开发文档中心

目前提供三种批量创建的方式 excel 导入的方式为主要接入方式选择

excel导入点击下载模板

图3-20 快速导入

图3-21 Excel导入

打开下载下来的 excel模板表中的 titledesctags等均为将要批量导

入的设备的数据其中的 title 和 auth_info 为必填选项title 为设备名

中移物联网有限公司 OneNET 开发文档中心

auth_info对应设备的鉴权信息

图3-22 Excel格式

填写 3个设备信息

图3-23 Excel内容

三个设备的 title和 auth_info都一样均为 20170808000012017080800002

2017080800003保存该表格点击ldquo点击上传rdquo上传保存好的 excel 文件

点击ldquo确定导入批量rdquo

中移物联网有限公司 OneNET 开发文档中心

图3-24 导入上传

图3-25 确认创建

可以看到在原设备目录下新增了 3个设备其名称分别为 2017080800001

20170808000022017080800003

中移物联网有限公司 OneNET 开发文档中心

图3-26 批量创建的设备

点击设备详情可以看到设备目录下各个设备的鉴权信息与表格中所填

写的内容一致

图3-27 设备ID及鉴权信息

至此完成了通过批量设备复制的方式完成设备批量创建的过程用户如果

要使用这个功能需要将自己终端的出厂序列号整理到这个 excel表中然后利

中移物联网有限公司 OneNET 开发文档中心

用上传表格的方式进行批量创建

332 应用平台调用新增设备 API

OneNET 提供了创建设备的 API接口

图3-28 新增设备API接口

其中的 auth_info 参数对应着设备的鉴权信息通过调用此 API 接口可以

实现在平台上新增设备的功能用户如果有自己的第三方应用平台进行设备管理

可以通过多次调用此接口的方式进行设备的批量创建在调用接口时需要确保每

次调用的 auth_info 参数对应着自己的每一个终端不同的出厂序列号

333 终端调用注册 API

API 实际是 HTTP 协议的通信协议终端也可以通过封装 HTTP 包发送注册

中移物联网有限公司 OneNET 开发文档中心

设备请求的方式调用 API

终端调用注册 API 创建设备并接入的流程如图 3-29所示

平台

TCP连接协议接入机

创建产品

发送连接报文

连接应答

数据应答

发送数据报文

生成连接报文

设备

发送下行命令 下发命令

解析下行命令

生成存储数据报文

解析连接应答

解析数据应答

必要流程

可选流程

存储到数据流 数据源 创建应用

心跳应答

发送心跳报文生成心跳报文

解析心跳应答

平台操作

设备操作

利用设备本身的sn和产品的设备注册码生成注册报文

TCP连接API服务器

发送注册报文

注册应答

解析设备ID

创建设备

设备开机

读取硬件中烧录的设备编号(sn)

图3-29 终端调用注册API接入流程

1) 创建产品

重要参数产品 ID注册码产品 APIKey(见附录一)

2) 生成并发送注册报文

每一个用户终端中都有厂商烧录的唯一出厂序列号(sn)终端上电

之后应该首先读取自己的 sn然后通过 1)中的注册码和 sn 一起组成注

册报文

注册报文格式如下例

POST httpapihecloudscomregister_deregister_code=6TM7OkhNsTjATvFx HTTP11

Host apihecloudscom

Content-Length 48

中移物联网有限公司 OneNET 开发文档中心

sn02136616511001titletestdevice0001

其中

6TM7OkhNsTjATvFx 为产品注册码

02136616511001 是本例中模拟的设备唯一编号

testdevice0001 是本例中模拟的设备名

若上传的数据格式以及参数鉴权均正确则平台会返回设备创建成功

返回设备 ID以及该设备对应的设备 api-key

HTTP11 200 OK

Date Wed 09 Aug 2017 064821 GMT

Content-Type applicationjson

Content-Length 95

Connection keep-alive

Server Apache-Coyote11

Pragma no-cache

errno0datadevice_id11142371keyq9Mw0zqiAPjTwqfyCk2mWrUi8=errorsucc

3) 在步骤 2)完成之后平台上的设备就已经成功创建了终端需要

重新 TCP连接到对应协议的服务器上完成设备连接(与设备进行映射)以

及上传数据的操作

34 设备 ID 与产品序列号

通过 OneNET构建的物联网系统中有两套比较重要的编码设备 ID与产品序列号

(SN)其中

产品序列号是由厂商指定的在厂商的产品范围内是保持唯一的在出厂前烧写到每

一个终端中通常包含在与平台通信的数据中并以条形码的方式贴在产品的包装上用

于从用户的角度区分每一个独立的终端

设备 ID是在平台创建设备时由 OneNET分配的平台范围内唯一的编号应用于第三

方平台调用 OneNET API时使用

在创建设备时OneNET平台需要用户以设备 sn为参数进行设备创建成功之后平

台会分配一个设备 ID这样 OneNET内部就有了一个 sn-设备 ID的映射关系

终端登陆使用的鉴权信息是出厂时烧写好的 sn鉴权通过之后平台可以将该终端

上传是数据放到对应的设备中

上层应用通过创建设备 API或者查询设备 API建立 sn-设备 ID映射表在需要操作

某一设备时首先可以获取的是终端的 sn号(因为对用户是可见的)通过映射表获取设

中移物联网有限公司 OneNET 开发文档中心

备 ID然后再通过 API访问 OneNET平台上的对应设备

两套编码在物联网系统中的应用位置如下图所示

物联网应用

OneNET

终端

(烧写sn)

HTTP API 以设备ID为参数进行API访问

接入协议以sn为鉴权参数进行设备连接

设备

设备名

设备ID

设备sn

设备标签

sn 设备ID

snmdash设备ID映射表

中移物联网有限公司 OneNET 开发文档中心

第四章 第三方应用开发

第三方应用与 OneNET 平台的业务逻辑关系如图 4-1 所示第三方应用与

OneNET平台之间通过 HTTPS请求应答的方式实现数据交互OneNET 平台为第三

方应用提供封装好的 API 接口应用平台通过调用这些 API 接口完成对 OneNET

平台的读写执行以及设备管理请求然后 OneNET 平台会将相应的指令请求发送

到终端设备OneNET 平台收到终端设备响应的数据及设备信息后会将数据及

设备信息推送到应用平台完成应答

下面将分别介绍第三方应用接入 OneNET 平台的步骤OneNET平台提供的数

据推送功能以及 OneNET 平台为第三方应用封装好的 API接口

图4-1 第三方应用与OneNET平台的逻辑关系

41 第三方应用接入 OneNET 平台

第三方应用与 OneNET平台实现数据交互的前提是已经建立连接第三方应

用接入 OneNET平台的开发流程如图 4-2所示包括三个步骤

(1) 在 OneNET 平台创建了设备该设备有对应的真实设备且能正常上报

数据

(2) 用户已经开发并部署了 OneNET平台验证接入的程序

(3) 在 OneNET 平台正确配置了第三方应用数据接收的地址(URL)

Token以及其他参数

中移物联网有限公司 OneNET 开发文档中心

在确保上述第(1)步已经实现的基础上下面将分别讲述第(2)步和第

(3)步的实现过程

图4-2 数据推送的开发流程

412 第三方应用平台接入验证程序

第三方应用平台接入验证程序工作流程如下所述当 OneNET 平台完成对第

三方开发平台的配置后会向第三方开发平台发起 URLampToken验证接入验证程

序对平台发送的验证参数进行验证验证通过后第三方开发平台会向 OneNET

平台返回验证消息当 OneNET 平台收到验证消息后说明第三方开发平台与

OneNET平台已建立连接

目前 OneNET平台为第三方应用平台提供接入验证程序的 SDK有 Javaphp

Nodejs和 C四个版本

SDK 下载地址httpsopeniot10086cndocart432html118 -ldquo数

据推送rdquo

413 OneNET 平台配置第三方应用平台

在 OneNET平台对第三方应用平台的配置界面如图 4-3所示

URL第三方开发平台的地址

Token可以自定义用于第三方开发平台接入平台握手验证

消息加解密方式有明文模式和安全模式当启用安全模式后平台端需要

用户自定义 AESKey 或者由平台随机生成在应用程序中使用该 AESKey 解密消

中移物联网有限公司 OneNET 开发文档中心

推送时间限制(秒)和推送数据限制(个)设置ldquo推送时间限制rdquoldquo推送数

据限制rdquo可以实现批量推送数据减少服务器压力当满足ldquo推送时间限制rdquo和

ldquo推送数据限制rdquo要求后OneNET 将给第三方推送数据如果没有设置ldquo推送

时间限制rdquo和ldquo推送数据限制rdquo将默认数据实时推送

图4-3 第三方开发平台的配置界面

当用户成功在 OneNET 平台配置了第三方开发平台服务器地址后点击ldquo提

交rdquo按钮后OneNET 平台会向第三方应用平台发起 URLampToken 验证请求验证

通过且收到第三方返回的验证消息后则第三方应用平台与 OneNET 平台已建立

连接之后OneNET 平台在收到设备数据时会将设备数据推送到已配置的第三

方应用平台

用户数据接收服务程序接收到 OneNET平台发送的 ldquoURLampTokenrdquo验证请求

请求的格式形如httpipporttestmsg=xxxampnonce=xxxampsignature=xxx

蓝色字体部分为用户在 OneNET平台配置的 URL常规的验证流程如下

(1)在请求中获取参数ldquononcerdquoldquomsgrdquo的值将ldquotokenrdquo(此为页面

配置参数 token的值)ldquononcerdquoldquomsgrdquo的值计算 MD5(token+nonce+msg)

加密值并且编码为 Base64字符串值

中移物联网有限公司 OneNET 开发文档中心

(2)将上一步中 Base64字符串值通过 URL Decode 计算后的值与请求参数

ldquosignaturerdquo的值进行对比如果相等则表示 token验证成功

(3)如果 token 验证成功向 OneNET 平台返回ldquomsgrdquo参数值否则返回

其他值

说明如果用户不想验证 Token 的有效性可以忽略以上步骤并直接向

OneNET平台返回ldquomsgrdquo参数值

42 OneNET 平台数据推送

平台以 HTTPS POST 请求形式向第三方应用平台注册地址推送数据推送数

据相关信息以 JSON 串的形式置于 HTTPS请求中的 body部分

第三方应用平台在接收数据时会接收到数据的明文消息或者密文消息

明文消息中以ldquotyperdquo的数值区分不同的消息而密文消息与明文消息的区别

是ldquomsgrdquo部分经过了加密处理下面将分别对明文消息密文消息以及消息相

关字段和密文的加密算法进行说明

421 明文消息

明文消息有两种消息类型分别为数据点消息和设备上下线消息而数据点

消息又分为单条数据点消息和数据点消息批量形式数据点消息批量形式中的不

同数据点是以不同时间戳区分的

(1)数据点消息(type=1)

msg

type 1

dev_id 2016617

ds_id datastream_id

at 1466133706841

value 42

msg_signature message signature

nonce abcdefgh

(2)数据点消息批量形式(type=1)

msg [

type 1

dev_id 2016617

ds_id datastream_id

中移物联网有限公司 OneNET 开发文档中心

at 1466133706841

value 42

type 1

dev_id 2016617

ds_id datastream_id

at 1466133706842

value43

]

msg_signature message signature

nonce abcdefgh

(3)设备上下线消息(type=2)

msg

type 2

dev_id 2016617

status 0

login_type 1

at 1466133706841

msg_signature message signature

nonce abcdefgh

422 密文消息

密文消息中的ldquoenc_msgrdquo是由明文消息中的ldquomsgrdquo采用 AES 加密算法而

enc_msgxxxx

msg_signature

message signature

nonceabcdefgh

423 消息相关字段说明

表4-1 消息相关字段说明

字段 字段说明

type 标识数据类型当前版本范围[15]

dev_id 设备 ID

ds_id 公 开 协 议 中 的 数 据 流 ID 其 格 式 为

objectID_instanceID_resourceID

at 平台时间戳单位 ms

value 具体数据部分为设备上传至平台或触发的相关

数据

中移物联网有限公司 OneNET 开发文档中心

status 设备上下线标识

0-下线 1-上线

login_type

设备登陆协议类型

1EDP 2nwx 3JTEXT 5JT808 6

MODBUS 7MQTT 8gr2010NB-IoT

cmd_type

命令响应的类型

1设备收到 cmd的 ACK 响应信息 2设备收到

cmd的 Confirm响应信息

cmd_id 命令 ID

msg_signatur

e 消息摘要

nonce 用于计算消息摘要的随机串

enc_msg 加密密文消息体对明文 JSON串(msg字段)的

加密

424 加密算法详述

平台基于 AES算法提供加解密技术具体阐述如下

EncodingAESKey 即消息加解密 Key 的 BASE64编码形式长度固定为 43

个字符从 a-zA-Z0-9共 62个字符中选取由服务开启时填写后

也可申请修改

AES密钥计算为 AESKey=Base64_Decode(EncodingAESKey + ldquo=rdquo)

EncodingAESKey 尾部填充一个字符的ldquo=rdquo 用 Base64_Decode 生成 32

个字节的 AESKey

AES采用 CBC 模式秘钥长度为 32 个字节(256位)数据采用

PKCS7填充 初始化 iv向量取秘钥前 16字节 PKCS7K为秘钥字

节数(采用 32)buf为待加密的内容N为其字节数Buf 需要被填

充为 K的整数倍在 buf的尾部填充(K-NK)个字节每个字节的内容

是(K- NK)具体详见toolsietforghtmlrfc2315

BASE64采用 MIME格式字符包括大小写字母各 26个加上 10个数

字和加号ldquo+rdquo斜杠ldquordquo一共 64个字符等号ldquo=rdquo用作后缀填

出于安全考虑平台网站提供了修改 EncodingAESKey的功能(在

EncodingAESKey 可能泄漏时进行修改对应上第三方平台申请时填写

的接收消息的加密对称密钥)所以建议保存当前的和上一次的

中移物联网有限公司 OneNET 开发文档中心

EncodingAESKey若当前 EncodingAESKey 生成的 AESKey解密失败则

尝试用上一次的 AESKey的解密

平台的加密消息部分为 enc_msg= Base64_Encode( AES_Encrypt

[random(16B)+msg_len(4B)+msg] )即以 16字节随机字节串拼接 4字

节表示消息体长度的字节串(此处 4 字节长度表示为网络字节序)再加

上消息本身的字节串作为 AES加密的明文再以 AES算法对明文进行加

密生成密文最后对密文进行 BASE64 的编码操作生成加密消息体

对加密消息体的解密流程为1)首先进行加密消息体的 BASE64 解码操作

aes_msg=Base64_Decode(enc_msg)2)对获取的解码内容以 AES 算法进行解密

操作获取明文部分plain_msg=AES_Decrypt(aes_msg)解密中使用的秘钥由

EncodingAESKey 计算得来使用的初始化 iv 向量为计算出的 aes 秘钥的前 16

字节3)去掉 plain_msg 的前 16 字节再以前 4 字节取出消息体长度根据消

息体长度获取真实的消息部分(推荐以消息体长度获取真实消息以兼容

plain_msg 未来可能出现的结构变更)表示加密传输的数据后两字段与明文

传输一致

43 API 接口

第三方开发平台应用层通过 Rsetful API 的方式和 OneNET平台进行交互对

接实现命令的下发数据的读写以及相关业务的交互

针对 MQTT 协议目前主要开发了以下 API 用来实现第三方开发平台向

OneNET平台请求读写执行以及设备管理请求具体见下表 4-2下面分别对每一

种 API进行说明

表4-2 API功能说明

API 类别 操作对象 API名称

需要终端响应 只需平台响应

设备

注册

更新设备注册属性

新增

更新

精确查询单个设备

中移物联网有限公司 OneNET 开发文档中心

模糊查询设备

批量查询设备状态

删除

数据流

新增

更新

查询单个数据流

查询多个数据流

删除

数据点

新增

查询

二进制数

新增

查询

触发器

新增

更新

查询单个触发器

模糊查询触发器

删除

触发数据内容

命令

发送命令

查询命令状态

查询命令相应

查询设备历史命令

视频能力 获取播放地址

APIKEY

新增

更新

查看

删除

消息订阅

按 Topic发送命令

查询订阅指定 Topic设备的列表

查询设备订阅的 Topic列表

删除产品的 Topic

查询产品的 Topic

中移物联网有限公司 OneNET 开发文档中心

432 设备

4321 注册

表4-3 设备注册

HTTP方法 POST

URL apihecloudscomregister_de

URL参数 register_code=6TM1OkhNsTjATvFx 设备注册码(必填)

HTTP内容

(示例)

sn 2015031401421 设备唯一标识 string类型最长 512字符

mac C89346DA4373 设备唯一 mac标识最长 32字符

title myedpdevice 设备名(可选) 最长 32个字符

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

keyQ1VdWoEvdkCye=d1=HcCSP6LvCw= 新设备 apikey

device_id 325018 设备 ID

说明

1 响应消息中 errno 表示错误码error 表示错误原因如果创建设备失

败则没有 data字段

2 snmac一定要必填其中一个而且只可以传一个用于鉴权就是设备

新增中的 auth_info

3 此接口根据产品设置的不同默认 allow_dup=true可以生成新设备及

key或获取原有设备及 key见下表

表4-4 对应表

产品允许重复 sn 在产品中已存在 sn 在产品中不存在

allow_dup=true 是 sn 对应的设备 id 和 key 新的设备 id 和 key

allow_dup=false 否 报错 新的设备 id 和 key

中移物联网有限公司 OneNET 开发文档中心

此接口返回的新设备默认设备名均为auto_register均为私有设

备设备协议与产品协议相同

4322 更新设备注册属性

表4-5 更新设备注册属性

HTTP方法 PUT

URL apihecloudscomregister_attr

HTTP头部 api-key xxxxddddsssaaa 必须为 masterkey

HTTP内容

(示例)

allow_dup true|false是否允许重复提交相同的设备 sn 默认 true

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

默认 allow_dup 为 true主要用于设备注册码创建设备属性限制

4323 新增

表4-6 新增设备注册属性

HTTP方法 POST

URL apihecloudscomdevices

HTTP头部 api-key xxxxddddsssaaa 必须为 masterkey

HTTP内容

(示例)

title mydevice 设备名

desc some description 设备描述(可选)

tags [chinamobile] 设备标签(可选可为一个或多个)

protocolMQTT 选择一种接入协议(可选默认为 HTTP)

location lon 106 lat 29 ele 370设备位置纬度

经度 高度(可选)

private true| false 设备私密性(可选默认为 ture)

auth_info 201503041a5829151 MQTT设备设备唯一编号

other version 100 manu china mobile 其他信息(可

选JSON格式可自定义)

HTTP响应响

应消息内容

(实例)

errno 0

error succ

data

中移物联网有限公司 OneNET 开发文档中心

device_id233444 平台分配的设备 ID

4324 更新

表4-7 更新

HTTP方法 PUT

URL apihecloudscomdevicesdevice_id

HTTP头部 api-key xxxxddddsssaaa masterkey或设备 apikey

HTTP内容

(示例)

title mydevice 设备名(可选)

desc some description 设备描述(可选)

tags [chinamobile] 设备标签(可选)

protocolMQTT 选择一种接入协议(可选)

location lon106 lat 29 ele 370设备位置经度

纬度 高度(可选)

private true| false 设备私密性(可选)

auth_info201503041a5829151 MQTT设备设备唯一编号(可选)

other version 100 manufacturer china mobile 其

他信息(可选)

HTTP响应响

应消息内容

(示例)

errno 0

error succ

中移物联网有限公司 OneNET 开发文档中心

4325 精确查询单个设备

表4-8 精确查询单个设备

HTTP方法 GET

URL apihecloudscomdevicesdevice_id

HTTP头部 api-key xxxxddddsssaaa masterkey 或设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

iddevice_id

tags [chinamobile]

onlinetrue|false

protocolMQTT

titlemy device1

descsome description

create_time2015-09-16 102222

privatetrue|false

locationele370lat17609lon17703

auth_infohellip

otherversion100manufacturerchina mobile

keys[titledevice-auto-keykey2JO3B12O1]

数据流

datastreams[

create_time 2014-10-23 202222

iddatastream_id1

unitcelsius

unit_symbolC

uuid 231a5aa9-9de4-5f2e-9e0f-015181c98429

]

4326 模糊查询设备

表4-9 模糊查询设备

HTTP方法 GET

URL apihecloudscomdevices

中移物联网有限公司 OneNET 开发文档中心

URL 参数

key_words=my 匹配关键字(可选从 id和 title字段中左匹配)

auth_info=203x1 鉴权信息(可选对应注册时的 sn参数唯一设

备编号)

tag=mobile 标签(可选)

online=true| false 在线状态(可选)

private=true| false 私密性(可选)

page=1 指定页码最大页数为 10000(可选)

per_page=30 指定每页输出设备个数默认 30最多 100(可选)

device_id=235122 指定设备 ID多个用逗号分隔最多 100个(可

选)

begin=2016-06-20 起始时间包括当天(可选)

end=2016-06-20 结束时间包括当天(可选)

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

total_count1

per_page30

page1

devices

[

id3497307

titlemy device1

desc device desc

privatetrue

protocolMQTT

onlinefalse

locationlon10655231191544001lat29535451246673

create_time2013-02-11 122233

auth_infoSYSz=8QY3r7aTQ48UKfqPnB=PybYRo=

]

4327 批量查询设备最新数据

表4-10 批量查询设备最新数据

HTTP方法 GET

中移物联网有限公司 OneNET 开发文档中心

URL apihecloudscomdevicesdatapoints

URL参数 devIds=1221122331123 设备 id用逗号隔开限制 1000 个设备

HTTP头部 api-key xxxxddddsssaaa masterkey 或设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

error ldquosuccrdquo

data

devices [

id 12323 设备 id

title daf设备名

datastreams

[

id temperature数据流名称

at 2017-02-12 102222数据流更新时间

value 12数据流最新数据

hellip

helliphellip

]

hellip

hellip

]

4328 删除

表4-11 删除设备

HTTP方法 DELETE

URL apihecloudscomdevicesdevice_id

HTTP头部 api-key xxxxddddsssaaa 可为设备级别的 Key

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

中移物联网有限公司 OneNET 开发文档中心

说明删除设备会删除该设备下所有数据流和数据点删除设备动作是异步

的系统会在后续逐步删除该设备下的数据流和数据点

433 数据流

4331 新增

表4-12 新增数据流

HTTP方法 POST

URL apihecloudscomdevicesdevice_iddatastreams

HTTP头部 api-key xxxxddddsssaaa masterkey 或设备 apikey

HTTP内容

(示例)

idtemperature 数据流名称 示例温度

tags[Tag1Tag2] 数据流标签(可选可以为一个或多个)

unitcelsius 单位(可选)

unit_symbolC 单位符号(可选)

HTTP响应响

应消息内容

(示例)

errno 0

data

ds_uuid 9e6bcac9-2c6f-59d5-adae-3955df2e7bce平台分配

数据流 UUID

error succ

4332 更新

表4-13 更新数据流属性

HTTP方法 PUT

URL apihecloudscomdevicesdevice_iddatastreamsdatastream_id

示例apihecloudscomdevices421240datastreamstemperature

HTTP头部 api-key xxxxddddsssaaa masterkey 或设备 apikey

HTTP内容

(示例)

tags[Tag1Tag2] 数据流标签(可选)

unitcelsius 单位(可选)

unit_symbolC 单位符号(可选)

HTTP响应响

应消息内容

(示例)

errno 0

error succ

中移物联网有限公司 OneNET 开发文档中心

4333 查询单个数据流

表4-14 查询单个数据流

HTTP方法 GET

URL apihecloudscomdevicesdevice_iddatastreams

URL参数 datastreams_ids = 查看的 datastream的 id

HTTP头部 api-key xxxxddddsssaaa masterkey 或该设备的设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

data [

update_at 2018-06-29 112938 数据流最后更新时

id 湿度 数据流名称

create_time 2018-06-28 170548数据流创建时间

current_value 53845013最新数据点

]

error succ

4334 查询多个数据流

表4-15 查询多个数据流

HTTP方法 GET

URL apihecloudscomdevicesdevice_iddatastreams

URL 参数

datastream_ids= 查看的 datastream的 id多个 id之间用英文逗号

分开(参数缺省时为查询所有数据流)

示例

apionenetcomdevices1234datastreamsdatastream_ids=tempgps

表示查看 temp和 gps两个数据流的信息

HTTP头部 api-key xxxxddddsssaaa masterkey 或者 该设备的设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data 数据流信息

[

idtemperature 数据流名称设备范围内唯一

tags[Tag1Tag2] 数据流标签

unitcelsius 单位

unit_symbolC单位符号

create_timexxxx-xx-xx 102222 创建时间

中移物联网有限公司 OneNET 开发文档中心

current_valuehellip该数据流下数据点最新值

update_atxx-xx-xx该数据流下数据点最新上传时间

]

[

idhumi 数据流名称设备范围内唯一

tags[Tag1Tag2]

unit_symbol

create_timexxxx-xx-xx 102222

current_valuehellip

update_atxx-xx-xx

]

[]

4335 删除

表4-16 删除数据流

HTTP方法 DELETE

URL apihecloudscomdevicesdevice_iddatastreamsdatastream_id

URL参数 无

HTTP头部 api-key xxxxddddsssaaa masterkey 或者设备 key

HTTP响应响

应消息内容

(示例)

errno 0

error succ

434 数据点

4341 新增

中移物联网有限公司 OneNET 开发文档中心

表4-17 新增数据点

HTTP方法 POST

URL apihecloudscomdevicesdevice_iddatapoints

URL参数 type=3 上传数据类型(可选默认为完整 JSON型见 HTTP内容示

例)

HTTP头部 api-key xxxxddddsssaaa masterkey 或者 设备 apikey

HTTP内容

(示例)

datastreams

[

id temperature 数据流名称或数据流模板名称

datapoints [

at 2013-04-22T003543 上传数据点时间可选如

果为空则设备云会取当前时间如果存在其格式必须为 YYYY-MM-

DDThhmmss的形式(例如2015-03-22T223112)

value 42 上传数据点值

at 2013-04-22T005543

value 84 上传数据点值

]

id key 数据流名称或数据流模板名称

datapoints [

at 2013-04-22T003543上传数据点时间可选

value hellip上传数据点值

at 2013-04-22T003543

value hellip上传数据点值

]

hellip

]

中移物联网有限公司 OneNET 开发文档中心

HTTP 响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

1 可以一次性向设备云上传多个数据流每个数据流中可以包括多个数据

点示例程序表示向设备云上数据流 temperature 和数据流 key上传数据其中

temperature数据流有两个数据点key数据流也有两个数据点

2 如果某个数据流不存在则在增加数据点时设备云会自动创建一个新

的数据流注意新数据流的 datastream id 不可为空

3 数据点表示在某个时刻该数据流的值其 at表示时间为可选字段如

果为空则设备云会取当前时间如果存在其格式必须为YYYY-MM-DDThhmmss

的形式(例如2015-03-22T223112)

4 数据点中的 value表示具体的值其值为 JSON对象可以为整型浮点

型字符串多种类型如果 value部分用双引号括起来则其在设备云存储为字

符串如果不用双引号括起来则其表示数值字符编码现在只支持 UTF-8

5 数据点对应的时间是数据点的标识的一部分相同时间的两个数据点

设备云会同时对这两个相同时间的数据点进行保存不会出现覆盖另一个数据点

的情况一般如果 at 部分取空设备云会取系统时间精度为毫秒如果在一

条命令中某一个数据流包含多个数据点都没有 at 字段设备云将会对所有数据

点进行保存

6 新增数据点支持如下简写方式在请求的 URL中增加 type字段指示所

使用的格式类型目前 type支持 345三种情况

URLapihecloudscomdevices2214570datapointstype=3

示例temperature225humidity952

表示在数据流 temperature中增加一个数据点 225在 humidity 中增加一

个数据点 952

URLapihecloudscomdevices2214570datapointstype=4

示例temperature2015-03-22T223112225

表示在数据流 temperature中加一个数据点在 2015年 3月 22 日 22点 31

中移物联网有限公司 OneNET 开发文档中心

分 12秒的值为 225

URLapihecloudscomdevices2214570datapointstype=5

示例temperature2015-03-22T223112225pm2589

表示在数据流 temperature中加一个数据点即 2015年 3月 22 日 22点 31

分 12秒的值为 225在数据流 pm25中添加一个数据点即当前时间的值为 89

4342 查询

表4-18 查询数据点

HTTP方法 GET

URL apihecloudscomdevicesdevice_iddatapoints

URL 参数

datastream_id=abc 查询的数据流多个数据流之间用逗号分隔

(可选)

start=2015-01-10T080035 提取数据点的开始时间(可选)

end=2015-01-10T080035 提取数据点的结束时间(可选)

duration=3600 查询时间区间(可选单位为秒)

start+duration按时间顺序返回从 start开始一段时间内的数据点

end+duration按时间倒序返回从 end回溯一段时间内的数据点

limit=100 限定本次请求最多返回的数据点数0ltnlt=6000(可选

默认 1440)

cursor= 指定本次请求继续从 cursor位置开始提取数据(可选)

sort=DESC | ASC 值为 DESC|ASC时间排序方式DESC倒序ASC升

序默认升序

ltnlt=6000(可选默认 1440)

HTTP头部 api-key xxxxddddsssaaa masterkey 或者 该设备的设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

cursor70921_3771908_1472355096

datastreams[

idtemperature数据流名称或数据流模板名称

datapoints[

at xxxx-xx-xx 102222value42数据点上传时间和

at xxxx-xx-xx 102222value84

]

中移物联网有限公司 OneNET 开发文档中心

idkey 数据流名称或数据流模板名称

datapoints[

at xxxx-xx-xx 102222valuehellip

atxxxx-xx-xx 102222valuehellip

]

hellip

]

1 若不携带任何参数平台返回本设备所存在的所有数据流中的最新数据

(这一种情况下查询时出现时延较大的性能问题建议在 URL 参数中加上

newadd参数并将其值赋为 true如 newadd=true)

2 若不携带数据流 id参数携带 limit 参数时会返回该设备每个数据流

最多 limit 条数据

3 若要查看某一条数据流数据需在上述 URL中增加参数 datastream_id

4

apihecloudscomdevices564280datapointsdatastream_id=tempamplimit

=10会返回数据流temp中最近的 10个数据点

5 要查看某一条数据流在某个时间范围内的数据可以在增加 start和 end

参数

示例

apihecloudscomdevices564280datapointsdatastream_id=temper

atureampstart=2013-05-12T171233ampend=2013-06-12T172233 表示查询本设

备对应的数据流在 2013 年 5 月 12 日 17 点 12 分 33 秒到 17 点 22 分 33 秒的数

据点注意如果 start 参数存在end参数不存在表示取 start后的所有数据

如果 start 不存在end 存在设备云会忽略 end参数注意日期时间格式格

式必须为示例中的格式YYYY-MM-DDThhmmss例如2013-05-12T171233

日期和时间之间用大写字母 T 分隔start 和 end 之间的时间间隔最大为 1 年

超过一年会忽略

如果指定了 start 参数则可能返回的数据点的数目会很多此时默认会返

回最多 100 个数据点可以使用 limit 参数设定返回多少个数据点最大为

6000个数据点当实际的数据点数目多于 limit 限定的数目时返回的 json串

中移物联网有限公司 OneNET 开发文档中心

中会有一个 cursor 字段下一次请求的命令行中可以携带此 cursor 字段表示接

着遍历本数据流此 cursor字段标识上次取出数据点后下一个数据点的位置

435 二进制数据

4351 新增

将二进制数据将作为数据点保存到设备下的某个数据流中设备云返回该二

进制数据的索引号

表4-19 新增二进制数据

HTTP方法 POST

URL apihecloudscombindata

URL参数 device_id=421590 数据所属设备(必选)

datastream_id=bin 该数据所属已经存在的数据流(必选)

HTTP头部 api-key xxxxddddsssaaa masterkey 或者该设备的设备 key

HTTP 内 容

(示例)

普通二进制数据文件图像等

(最大限制为 800上传时间间隔需大于 1ms)

HTTP响应响

应消息内容

(示例)

errno 0

error succ

data

index3491506_1475204886914_bin 二进制数据索引号

4352 查询

表4-20 查询二进制数据

HTTP方法 GET

URL apihecloudscombindataindex

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

普通二进制数据文件图像等二进制形式数据

436 触发器

4361 新增

表4-21 新增触发器

HTTP方法 POST

中移物联网有限公司 OneNET 开发文档中心

URL apihecloudscomtriggers

HTTP头部 api-key xxxxddddsssaaa 必须为 masterkey

HTTP内容

(示例)

titlewen du jian kong 设备名(可选)

ds_idgps 数据流名称(id)(可选)

dev_ids[10272345615523] 设备 ID(可选)

ds_uuids[ 数据流 uuid(可选)

9ad09uac-7446-512f-b07c-90jdnzj8120ad

4599436e-7146-5349-b07c-79fa0919cs62

]

urlxxbbcom

typegt | gt= | lt | lt= | == | inout | in | out |change | frozen |

live

threshold100 阙值根据 type不同见以下说明

1) type 为gt|gt=|lt|lt=|==时threshold必须为数值

2) type为 inout时threshold 设置为lolmt40 uplmt52 表示

数据流的值首次进入或离开闭区间[4052]时触发

3) type为 change时threshold 参数不用传递当上传的值有改变时触发

告警

4) type为 frozen时threshold 为数值指定距离最后一次数据上报多少

秒内未上报数据触发告警同时被监控对象进入 frozen状态

5) type 为 live 时threshold 为数值指定距离最后一次数据上报多少秒

后上报数据触发告警

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

tirgger_id233444 触发器 ID

说明

1触发器的含义是当指定范围内的数据点满足触发条件的要求时会向

url参数指定的地址发送 post请求

2触发器有三种工作触发模式

1)在请求参数中单独指定了 ds_id不包括其他参数那么当前项目下

中移物联网有限公司 OneNET 开发文档中心

所有设备的数据流中数据流名称符合 ds_id 的数据都会进入触发判断逻辑

2)在请求参数中单独指定了 ds_uuids 数组那么只有这些指定的数据

流会进入触发判断逻辑

3)在请求参数中指定了 ds_id 和 dev_ids那么只有这些指定的设备的

数据流会进入触发判断逻辑

4362 更新

表4-22 更新触发器属性

HTTP方法 PUT

URL apihecloudscomtriggerstirgger_id

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP内容

(示例)

titlewen du jian kong

ds_uuids[

9ad09uac-7446-512f-b07c-90jdnzj8120ad

4599436e-7146-5349-b07c-79fa0919cs62

]

urlxxbbcom

typegt | gt= | lt | lt= | == | inout | in | out | exp | change |

frozen | live

threshold100

注若要修改 type需要对应设置 threshold

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

4363 查询单个触发器

表4-23 查询单个触发器

HTTP方法 GET

URL apihecloudscomtriggerstirgger_id

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

idtrigger_id1

中移物联网有限公司 OneNET 开发文档中心

titlewen du jian kong

ds_uuids[

datastream1_uuidrdquo

datastream2_uuidrdquo

datastream3_uuidrdquo

]

urlxxbbcom

typegt|gt=|lt|lt=|==|in|out|exp|change|frozen|live

threshold100

invalidtrue 触发器是否已失效

create_timexx-xx-xx 102222

4364 模糊查询触发器

表4-24 模糊查询触发器

HTTP方法 GET

URL apihecloudscomtriggers

URL 参数

title=name 指定触发器名称

page=1 指定页码可选

per_page=10 指定每页输出个数可选默认 10最多 100

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

total_count600

per_page30

page1

triggers[

idtrigger_id1

titlewen du jian kong

ds_uuids

[datastream1_uuidrdquo datastream2_uuidrdquo]

urlxxbbcom

typegt|gt=|lt|lt=|==|in|out|exp|change|frozen|live

threshold100

invalidtrue 触发器是否已失效

create_timeXXXXXXXX

中移物联网有限公司 OneNET 开发文档中心

]

说明触发器失效是指触发器所依赖的数据流或者设备被删除了此时触发

器永远不会有效触发事件

4365 删除

表4-25 删除触发器

HTTP方法 DELETE

URL apihecloudscomtriggerstirgger_id

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno 0

error succ

4366 触发数据内容

触发数据是指当 OneNET 设备云判断某个触发器的触发条件满足时会通过

POST方式向外抛出的 URL请求在 HTTP的 POST消息体中会携带如下格式的 JSON

字符串

表4-26 触发器内容

数据内容

(示例)

trigger

id1

threshold90

typegt

current_data[

dev_id2656

ds_idgps

ds_uuidFWEF-ZFW-ZFW-ZFWW

at2009-09-07T121602001403Z

value100

dev_id2656

ds_idtemper

中移物联网有限公司 OneNET 开发文档中心

ds_uuidFEWEF-ZFWFWW-WFWW-FWEFFWW

at2009-09-07T121602001403Z

value882

]

437 命令

命令是指应用发送命令数据给 OneNET设备云再由 OneNET设备云转发给终

端设备终端设备收到命令后可以向设备云反馈响应的一种工作机制命令下发

后应用可以通过 API查询命令状态和提取命令的响应数据

命令的执行步骤如下

1应用通过 API 向设备云发送命令数据

2设备云生成该命令的 uuid作为该命令的唯一标识并向应用返回同时向

终端设备转发命令数据

3 终端设备收到命令数据后执行命令数据可以生成响应也可以不响应

4设备云跟踪记录命令的响应如果设备有响应就关联命令 uuid和响应

结果

5应用通过 API 向设备云提取命令执行结果(API 请求中携带命令 uuid 标

识)

特别说明

命令下发到终端设备后如果终端设备 10 秒内未收到响应则此命令的状

态将被设置为超时应用通过 API 查询命令状态时会反馈超时超过 10 秒后

收到的响应会被丢弃

终端设备针对同一条命令回复多条命令响应只有在未超时时间内收到的最

后一条是有效响应前面的响应包将会被覆盖因此终端设备应该对每个命令只

有一个响应包

4371 发送命令

表4-27 发送命令

HTTP方法 POST

URL apihecloudscomcmds

URL 参数 device_id=415120 接收该数据的设备 ID(必选)

中移物联网有限公司 OneNET 开发文档中心

qos=0 | 1 是否需要响应默认为 0

0不需要响应即最多发送一次不关心设备是否响应

1需要响应如果设备收到命令后没有响应则会在下一次设备登陆

时若命令在有效期内(有效期定义参见 timeout参数)则会继续发送

对响应时间无限制多次响应以最后一次为准

本参数仅当 type=0时有效

timeout=300 命令有效时间默认 0

0在线命令若设备在线下发给设备若设备离线直接丢弃

gt0 离线命令若设备在线下发给设备若设备离线在当前时间

加 timeout时间内为有效期有效期内若设备上线则下发给设备单

位秒有效围0~2678400

本参数仅当 type=0时有效

type=0 | 1 默认 00发送 CMD_REQ包1发送 PUSH_DATA包

HTTP头部 api-key xxxxddddsssaaa masterkey或者设备 apikey

HTTP内容 用户自定义数据jsonstring二进制数据(小于 64K)

HTTP响应响

应消息内容

(示例)

errno 0

error succ

data

cmd_uuid2302-312-FWs 命令 id

4372 查询命令状态

表4-28 查询命令状态

HTTP方法 GET

URL apihecloudscomcmdscmd_uuid

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno 0

error succ

data

status1

0设备不在线|Device not online

1命令已创建| Command Created

2命令已发往设备| Command Sent

3命令发往设备失败| Send Command Failed

4设备正常响应| Command Response Received

5命令执行超时| Command Response Timeout

6设备响应消息过长 | Command Response Too Large

descldquosendingrdquo

中移物联网有限公司 OneNET 开发文档中心

4373 查询命令响应

表4-29 查询命令响应

HTTP方法 GET

URL apihecloudscomcmdscmd_uuidresp

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP 响应响

应消息内容

用户设备返回的响应内容

4374 查询设备历史命令

表4-30 查询设备历史命令

HTTP方法 GET

URL apihecloudscomcmdshistoryltdevice_idgtltdevice_idgt

URL 参数

start=2015-01-10T080035 查询的开始时间(可选)

end=2015-01-10T080535 查询的结束时间(可选)

page=1 指定页码最大页数为 10000(可选)

per_page=30 指定每页输出设备个数默认 30最多 100(可选)

HTTP头部 api-key xxxxddddsssaaa

HTTP响应响

应消息内容

errno 0

error succ

data

page 1当前页码

per_page 10当前每页总数

total_count 100

items [

cmd_uuid 2302-312-FWs

device_id 2设备 ID

expire_time 2016-07-05 000000过期时间

status 0命令状态

send_time 2016-07-05 000000发送时间

confirm_time 2016-07-05 000000响应时间

confirm_body 2463726571007b202274797022 响应内容

16进制字符

body 2463726571007b202274797022请求内容16进制字符

hellip

中移物联网有限公司 OneNET 开发文档中心

hellip

]

438 视频能力

4381 获取播放地址

表4-31 获取播放地址

HTTP方法 GET

URL apihecloudscomipcrtmp_address

URL 参数

device_id= 接收该数据的设备 ID(必填)

channel_id = 对应数据流名称中的 channelnum

protocol_type = 播放协议类型 0rtmp1hls2http-flv

HTTP头部 api-key xxxxddddsssaaa masterkey或者设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

errorrdquosuccrdquo

ldquodatardquo

addripport

accessTokenldquo字符串rdquo

439 APIKEY

4391 新增

表4-32 新增 APIKEY

HTTP方法 POST

URL apihecloudscomkeys

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP内容

(示例)

title sharing key key 的命名

permissions [

resources [ 被授权的资源

中移物联网有限公司 OneNET 开发文档中心

dev_id 424 被授权的设备 id

dev_id 425 被授权的设备 id

hellip

hellip

]

access_methods [ 被授权的命令

get

put

post

]

]

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data key2302-312-FWs key_string

说明授权命令是可选的另外被授权的命令也可以是 getputpost 的

一个或几个如只授权 get和 put命令

access_methods [getput]

4392 更新

表4-33 更新 APIKEY

HTTP方法 PUT

URL apihecloudscomkeyskey_string

HTTP头部 api-key xxxxddddsssaaa masterkey(注只能为 master-key)

HTTP内容

(示例)

title sharing key key 的命名

permissions [

resources [ 被授权的资源

dev_id 424 被授权的设备 id

ds_idfan1 数据流 id可选

中移物联网有限公司 OneNET 开发文档中心

dev_id 425 被授权的设备 id

ds_idfan1 数据流 id可选

hellip

hellip

]

access_methods [ 被授权的命令可选

get

put

post

]

]

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

说明

1对于 masterkey 不允许更新操作masterkey 默认具有最大权限可以访

问该用户名下所有设备所有数据

可以进行 POSTGETPUTDELETE操作如果更新 master key 系统会返回

失败

2授权命令是可选的另外被授权的命令也可以是 getputpost 的一个

或几个如只授权 get和 put命令

access_methods [getput]

3API key 更新是覆盖操作会将原来存在的授权资源和授权命令覆盖不

会保留原来的授权资源和授权命令

4393 查看

中移物联网有限公司 OneNET 开发文档中心

表4-34 查看 APIKEY

HTTP方法 GET

URL httpapihecloudscomkeys

URL 参数

key = FWJPO-FZFHW-FFEWB可选只查看该 key相关信息

page = 1 指定页码 可选

per_page = 10 指定每页输出个数可选默认 10最多 100

device_id = xxbbcc可选只查看与该设备相关的非 master-key

HTTP头部 api-key xxxxddddsssaaa masterkey(注只能为 master-key)

HTTP响应响

应消息内容

(示例)

errno 0

data

per_page 30

total_count 2

keys [

create_time 2015-11-04 142552

title Auto-generated-master-key

key 03GeDLYk0WNk1V338g7yndKZYkQA

create_time 2015-12-03 100041

permissions [

resources [

dev_id 564280

]

]

title 设备 1测试 Key

key vuHebEWefiU2Ueo5ouoCc1CUsYQ=

]

page 1

error succ

中移物联网有限公司 OneNET 开发文档中心

4394 删除

表4-35 删除 APIKEY

HTTP方法 DELETE

URL httpapihecloudscomkeyskey_string

HTTP头部 api-key xxxxddddsssaaa masterkey(注只能为 master-key)

HTTP 响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

4310 消息订阅

43101 按 Topic 发送命令

表4-36 按 Topic 发送命令

HTTP方法 POST

URL apihecloudscommqtt

URL参数 topic=xxx 设备订阅的主题(必选)

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP 内 容

(示例)

HTTP响应响

应消息内容

(示例)

errno0

errorldquosuccrdquo

data

total_count1

per_page30

page1

devices [123123433333]

43102 查询订阅指定 Topic设备的列表

表4-37 查询订阅制定 Topic设备的列表

HTTP方法 GET

URL apihecloudscommqtttopic_device

URL 参数

topic=xxx 设备订阅的主题(必选)

page=1 当前页码 必填大于等于 1

per_page=10 每页 必填范围 1-1000

中移物联网有限公司 OneNET 开发文档中心

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP内容

(示例)

HTTP响应响

应消息内容

(示例)

errno0

errorldquosuccrdquo

data

total_count1

per_page30

page1

devices [123123433333]

43103 查询设备订阅的 Topic列表

表4-38 查询设备订阅的 Topic列表

HTTP方法 GET

URL apihecloudscommqttdevice_topicdevice_id

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno0

errorldquosuccrdquo

data

[topic_name1 topic_name2 topic_name3]

43104 删除产品的 Topic

表4-39 删除产品的 Topic

HTTP方法 DELETE

URL apihecloudscommqtttopic

URL参数 name=xxx topic名(必选)

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno0

errorldquosuccrdquo

中移物联网有限公司 OneNET 开发文档中心

43105 查询产品的 Topic

表4-40 查询产品的 Topic

HTTP方法 GET

URL apihecloudscommqtttopic

URL参数 无

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno0

errorldquosuccrdquo

data

[topic_name1topic_name2topic_name3]

中移物联网有限公司 OneNET 开发文档中心

第五章 接入实例

51 MQTT-device 接入

511 工具下载

为方便开发人员直观感受使用 mqtt 协议进入平台的便利可使用平台提供

的 MQTT 设备模拟器进行接入平台请在首页-gt开发文档-gt资源下载-gt13 调试

工具下载进行下载如下图

图5-1 资源下载

下载地址

httpupfileshecloudscom123ueditor201707125d5bc37eca39c0c5b7a5bcb9

0e451eeerar

中移物联网有限公司 OneNET 开发文档中心

512 界面说明

图5-2 界面说明

513 使用方法

5131 创建产品

如 323 的过程在设备接入协议中选择 MQTT

中移物联网有限公司 OneNET 开发文档中心

图5-3 选择连接协议

5132 创建设备

如 323描述在平台上新建一个设备

5133 建立连接

在产品概况中可以查看产品 ID此信息填入模拟器 ProductID一栏如下图

图5-4 产品ID

在平台上进入设备信息页面可查看设备 ID及鉴权信息(此鉴权信息是新建设备时候填

写的鉴权信息)如下图

中移物联网有限公司 OneNET 开发文档中心

图5-5 设备ID及鉴权信息

相应把设备 ID及鉴权信息填入模拟器之中然后点击连接按钮如果未弹出提示对话

框则表示设备鉴权成功如下图

图5-6 连接成功

中移物联网有限公司 OneNET 开发文档中心

5135订阅与发布

演示本操作需要在 OneNet平台建立两个基于 MQTT协议的设备一个用于消息发布

另一个用于消息订阅

图5-7 设备状态

开启两个模拟器分别模拟以上两个设备然后建立连接

首先使用订阅主题打开第一个模拟器模拟消息订阅者

图5-8 订阅主题

其次发布主题打开第二个模拟器模拟消息发布者

中移物联网有限公司 OneNET 开发文档中心

图5-9 发布主题

经过以上两个操作后查看模拟消息订阅者的模拟器则收到了主题

为rdquotopic_namerdquo的消息如下图

中移物联网有限公司 OneNET 开发文档中心

图5-10 收到的主题

5136接收平台指令

建立连接后模拟器也可接收来自平台的指令具体操作如下

先打开模拟器-gt建立连接-gt选中【[OneNet]平台指令接收】选项栏利用平台下发指

令功能下发如下图平台下发指令

图5-11 平台发送命令

中移物联网有限公司 OneNET 开发文档中心

图5-12 下发指令

填写好将要发送的消息后点击【发送命令】按钮则模拟器成功接收到来自平台的

数据如下图模拟器截图

图5-13 模拟器收到的指令

5137上传数据点

Mqtt支持 Json 数据格式上报数据现根据 Json几种格式举一些例来演示怎么利用

模拟器上传数据

1)使用 Json数据 Type1上传 Json数据

datastreams[idtemperaturedatapoints[value255]]

中移物联网有限公司 OneNET 开发文档中心

如下模拟器上传数据界面

图5-14 Type1数据格式

则在平台数据展示中则可看到上传的数据点

图5-15 收到数据展示

2)使用 Json数据 Type3示例 Json数据为

temp32humi98

模拟器发送数据截图

中移物联网有限公司 OneNET 开发文档中心

图5-16 Type3数据格式

平台数据展示截图

图5-17 数据展示

3)使用 Json数据 Type4示例 Json数据为

temperature233pm2589

模拟器上传数据截图

中移物联网有限公司 OneNET 开发文档中心

图5-18 Type5数据格式

平台接收数据展示截图

图5-19 数据展示

52 基于麒麟开发板的 MQTT 接入实例

OneNet 平台为使用户能快速接入发布麒麟座开发板官网提交您的创意免

费申请开发板下面利用麒麟座开发板 V31 演示开发板采集温湿度使用 MQTT发

送到平台的接入流程

开发板申请链接httpsopeniot10086cneventdetail185html

521 搭建开发环境

OneNET 平台提供的麒麟座开发板是基予 STM32 单片机开发的一块功能应用

板开发板包含 MCU温湿度传感器GSM 模块WIFI 模块电源模块键盘

中移物联网有限公司 OneNET 开发文档中心

LED以及 lcd显示接口等满足用户对平台接入的基本需求能快速接入到平台

资料包配备完整工程代码方便工程移植等使用

目前 STM32 开发常用的 IDE 有 IARMDK 等我挑选 MDK 作为开发工具打

开工具包先安装 MDK511A安装完毕后再安装 MDKCM511A开发板所有资料软件

工具包下载案例包

案例包下载链接

httpspanbaiducoms1UB1qZGrVuovSVdbqqXP0Lglistpath=2F

图5-20 MDK包

安装完毕并安装 license详细步骤不做演示

中移物联网有限公司 OneNET 开发文档中心

522 连接硬件准备

5221 开发板接线

图5-21 开发板接线图

电源DC-5V

运行信息USART1-MicroUSB 线

软件下载ST-Link

中移物联网有限公司 OneNET 开发文档中心

5222 ESP8266跳线帽连接

图5-22 ESP8266跳线帽连接

中移物联网有限公司 OneNET 开发文档中心

5223 M6312跳线帽连接

图5-23 M6312跳线帽连接

523 工程实例

例程使用最简单易懂的方式编写着重让大家明白接入流程和协议

10~12 协议专属例程是展示该协议下的专用功能比如 EDP 的 PushData

中移物联网有限公司 OneNET 开发文档中心

HTTP 注册新设备MQTT 的订阅发布等具体使用方法查看该目录下的《使用

说明》

图5-24 工程文件

524 开发工程文件

中移物联网有限公司 OneNET 开发文档中心

图5-25 工程文件

图5-26 工程结构

默认已创建好产品以及设备打开文件工程 onenetc 和 esp8266c 修改例

程的 WIFI 信息和平台信息

分别在 esp8266c 的 36和 onenetc的 414345行

图5-27 更改项

525 编译下载

开发版接串口会有相应状态显示平台设备显示在线状态绿色为连接成功

设备在线灰色表示未连接并在数据展示中显示对应主题的所有数据

中移物联网有限公司 OneNET 开发文档中心

图5-28 连接成功

图5-29 收到数据

其他实例详情请见httpsopeniot10086cnbbsthread-1266-1-1html

中移物联网有限公司 OneNET 开发文档中心

第六章 MQTT 协议详解

61 设备与平台通信协议包格式

协议就是通信双方的一个约定即表示第 1字节传输的什么第 2字节

传输的什么helliphellip在 MQTT协议中一个 MQTT 数据包由固定头(Fixed

header) 可变头(Variable header) 消息体(payload)三部分构成

MQTT 数据包结构固定头部+可变头部+消息体

固定头(Fixed header)存在于所有 MQTT数据包中表示数据包类型及

数据包的分组类标识固定头格式如下

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 - 5 Remaining Length(该字段占用 1-4个字节)

目前平台版本支持的 Packet Type如下

名字 值 流向 描述

CONNECT 1 C-gtS 客户端请求与服务端建立连接

CONNACK 2 S-gtC 服务端确认连接建立

PUBLISH 3 CS 发布消息

PUBACK 4 CS 收到发布消息确认

PUBREC 5 CS 发布消息收到

PUBREL 6 CS 发布消息释放

PUBCOMP 7 CS 发布消息完成

SUBSCRIBE 8 C-gtS 订阅请求

SUBACK 9 S-gtC 订阅确认

UNSUBSCRIBE 10 C-gtS 取消订阅

UNSUBACK 11 S-gtC 取消订阅确认

PING 12 C-gtS 客户端发送 PING(连接保活)命令

PINGRSP 13 S-gtC PING命令回复

DISCONNECT 14 C-gtS 断开连接

可变头(Variable header)存在于部分 MQTT 数据包中数据包类型决定

了可变头是否存在及其具体内容

消息体(Payload)存在于部分 MQTT 数据包中表示客户端收到的具体内

中移物联网有限公司 OneNET 开发文档中心

不同类型数据包中可变头和消息体包含关系如下

消息类型 Variabl

e

Header

Payloa

d

CONNECT 有 有

CONNACK 有 有

PUBLISH 有 有

PUBACK 有 无

PUBREC 有 无

PUBREL 有 无

PUBCOMP 有 无

SUBSCRIBE 有 有

SUBACK 有 有

UNSUBSCRIBE 有 有

UNSUBACK 有 无

PING 无 无

PINGRSP 无 无

DISCONNECT 无 无

62 平台支持数据包类型

621 CONNECT(客户端请求与服务端建立连接 client -gt server)

固定头(Fixed Header)

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 - 5 Remaining Length(该字段占用 1-4个字节)

MQTT Packet Type 值为 0001表示该数据包为请求连接数据包

Remaining Length 剩余长度占 1-4字节

可变头(Variable Header)

包含内容如下

Description 7 6 5 4 3 2 1 0

byte

1-2

ProtocolNa

me Length

0 0 0 0 0 0 0 0

0 0 0 0 0 1 0 0

byte

3

lsquoMrsquo 0 1 0 0 1 1 0 1

byte

4

lsquoQrsquo 0 1 0 1 0 0 0 1

中移物联网有限公司 OneNET 开发文档中心

byte

5

lsquoTrsquo 0 1 0 1 0 1 0 0

byte

6

lsquoTrsquo 0 1 0 1 0 1 0 0

Byte

7

Protocol

Level

0 0 0 0 0 0 0 1

Byte

8

Connect

Flag

Use

r

flag

Passwo

rd

flag

WillReta

in

Flag

WillQo

s Flag

WillFl

ag

CleanSessi

on

Flag

Reser

ve

Byte

9-10

KeepAlive

(1) 版本

Protocol Level 必须设置为 4平台只支持协议版本 v 311不支持更老

的版本使用第三方客户端时需要注意选择正确的版本

(2) user flag 与 password flag

平台不允许匿名登陆因此这两个标志位在连接时必须设置为 1否则认为

协议错误平台将会断开连接

(3) Will flag 与 WillretainflagWillQosFlag

Will flag 为 0时WillQosFlag 和 WillRetainFlag 必须为 0Will Flag

为 1时WillQosFlag 只能为 012

1当该设备下一次正常上线后服务器会清除之前的 will 消息(包括

retain 消息)

2如果设备上线时设置了 Will Topic 和 msg且将 WillRetainFlag 设

置为 1只有设备异常断开后服务器才会将该 Will msg 分发给新的 Will

Topic 的订阅者且 Qos 级别以订阅的 Request qos 级别为准

3如果设备上线时设置了 Will Topic 和 msg且将 WillRetainFlag 设

置为 0服务器不会存储该消息当设备异常断开后会将该 Will msg 以设

备设置的 WillQosFlag的 Qos级别进行分发

(4) CleanSessionFlag

若客户端将 clean session 标志位设置为 0当其断开后平台将会保存

sessionsession 需保持的内容包含

客户端订阅的 topic列表

中移物联网有限公司 OneNET 开发文档中心

还未完成确认的 Qos1Qos2级别的 publish消息

客户端保存 session 的内容包含

已经发送到服务端的但还没有收到确认的 Qos1Qos2消息列表

待发送的 Qos0列表

若客户端将 clean session 标志位设置为 1当其断开后平台会清除设备

的订阅列表及未完成确认的 Qos1Qos2 的 publish消息

(5) Reserve

保留位置 0

(6) KeepAlive 保活时间

每个客户端可自定义设置连接保持时间最短 120秒最长 65535 秒

消息体(Payload) Description 是否必须存在 格式

Field1 Client

Identifier

是 2字节字串长度 + utf8字

Field2 UserName 是 2字节字串长度 + utf8字

Field3 UserPassword 是 2字节字串长度 + utf8字

目前平台支持的方式为以后两种

方式 1设备 ID项目 ID鉴权信息(auth_info)

字段设置 消息示例

client_id设置为平台创建设备时的

设备 id

username设置为ldquo项目 IDrdquo

password设置为ldquo鉴权信息

(auth_info)rdquo

client_id=rdquo123rdquo

username=rdquo433223rdquo

password=rdquo注册的鉴权信息rdquo

各字段说明如下

鉴权信息(auth_info)在平台申请设备时填写设备的 auth_info 属性(数

字+字母的字符串)该属性需要产品内具备唯一性(可使用设备出厂唯一编号)

方式 2设备 ID + APIKey(项目 ID也需要填写)

字段设置 消息示例

client_id设置为平台创建设备时的

设备 ID

username设置为ldquo项目 IDrdquo

client_id=rdquo123rdquo

username=rdquo433223rdquo

password=Api Key

中移物联网有限公司 OneNET 开发文档中心

password设置为ldquoAPI鉴权信息

(auth_info)rdquo

项目 ID在平台添加项目时平台生成的 ID

APIKey在平台上创建产品时生成的 APIKey

连接包实例如下

Send one mqtt packet

FixHeader

PacketTag = 16

PacketType = 1

RemainLength = 34

VariableHeaderConnect

protocol_name_len_= 4

protocol_name_= MQTT

protocol_level_= 4

connect_flag_= 192

keep_alive_= 12000

client_id_len_= 8

client_id_= 34764813

usr_name_len_= 6

usr_name_= 150295

password_len_= 4

password_= push

MQTT0x10 0x22 0x00 0x04 0x4D 0x51 0x54 0x54 0x04 0xC0 0x2E 0xE0 0x00 0x08 0x33

0x34 0x37 0x36 0x34 0x38 0x31 0x33 0x00 0x06 0x31 0x35 0x30 0x32 0x39 0x35 0x00

0x04 0x70 0x75 0x73 0x68

Send One Packet Succ

中移物联网有限公司 OneNET 开发文档中心

622 CONNACK (服务端确认连接建立)

Fixed Header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type = 2 0 0 0 0

byte2 - 5 Remaining Length(该字段占用 1-4个字节)

Variable Header

Description 7 6 5 4 3 2 1 0

byte 1 Acknowledge Flags 0 0 0 0 0 0 0 Sp

byte 2 Return Code x x x x x x x x

Sp Session Present Flagsession信息在服务器已保持置 1未保存置

0

返回码说明

返回码 描述

0 成功

1 协议版本错误

2 非法的 clientid

3 服务不可用

4 用户名或密码错误

中移物联网有限公司 OneNET 开发文档中心

5 非法链接(比如 token非法)

失败

如果 connect包不符合协议内容约束则直接断掉连接而不需要发送 conn

ack包

如果鉴权或授权失败回复一个带非 0错误码的 connack包

成功

必须断掉重复的 clientid

执行 cleansession 对应的操作

必须回复一个 connack回复码为 0

开始消息传递并加入 keepalive的监视

PS客户端需要等到服务端的 connack报文才能发送后续的数据包

623 PUBLISH(发布消息 client -gt server)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type DUP f

lag

QoS Level RETAI

N

byte2 - 5 Remaining Length(该字段占用 1-4 个字节)

DUP

QoS2Qos1如果为 0则表示是第一次发送该包如果为 1则表示

为重复发送的包

Qos0DUP 必须为 0

中移物联网有限公司 OneNET 开发文档中心

QoS 指定了该 publish包的 Qos 等级如下

Qos 值 Bit2 Bit1 描述

0 0 0 最多发送一次

1 0 1 至少发送一次

2 1 0 只发送一次

RETAIN 保留标志位如果为 1服务器存储最新一条 RETAIN消息以便

分发给新的订阅者如果 RETAIN为 1Payload 为空服务器分发该消息后会

清空该 topic 下的 RETAIN 消息

PS该版本实现了 Qos0Qos1Qos2

Variable Header

Description 格式 是否必须

Field1 TopicName 2 字节字串长度 + utf8字

Field2 PacketIdent

ifier

2 字节 QoS0否QoS1Qos2是

Payload

内容根据不同业务自定义

624 PUBLISH(发布消息 server -gt client)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type DUP f

lag

Qos Level RETAIN

byte2 - 5 Remaining Length(该字段占用 1-4个字节)

DUP

Qos2QoS1如果为 0则表示是第一次发送该包如果为 1则表示

为重复发送的包

中移物联网有限公司 OneNET 开发文档中心

Qos0DUP 必须为 0

QOS 指定了该 publish包的 qos等级如下

Qos 值 Bit2 Bit1 描述

0 0 0 最多发送一次

1 0 1 至少发送一次

2 1 0 只发送一次

RETAIN如果服务器分发的消息是 RETAIN 消息则将该标志位置 1否则置

0

PS该版本实现 Qos0Qos1Qos2其中服务器分发消息的 Qos级别是以 Clien

t-gtServer 发送的 publish 包的 qos 等级为准非订阅的 topic 的 Qos 等级R

etain 消息是以订阅的 Request Qos 级别进行推送

VariableHeader

Description 格式

Field1 TopicName 2 字节字串长度 + utf8字

Payload

内容根据不同业务自定义

625 PUBACK(收到发布消息确认)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

中移物联网有限公司 OneNET 开发文档中心

626 PUBREC(发布消息收到)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

627 PUBREL(发布消息释放)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

628 PUBCOMP(发布消息完成)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

中移物联网有限公司 OneNET 开发文档中心

byte 1~

2

PacketIdentifier PacketIdentifier

629 SUBSCRIBE(订阅请求)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

Payload

Description 格式

Byte1~

n

TopicName 2 字节字串长度 + utf8字

Byten+

1

Request Qos 服务质量要求(只能为 0

12)

topic 说明

可以包含一个或多个 topic

topic必须是数字英文反斜杠()的组合目前不支持通配符

每个客户端最多订阅 100个 topic

以下 topic 被系统保留使用(客户端不能订阅)

类型 说明

$开头 平台保留

中移物联网有限公司 OneNET 开发文档中心

6210 SUBACK(订阅确认)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

Payload

Description 7 6 5 4 3 2 1 0

byte 1 retcode

返回码说明

返回码 描述

0x00 成功(granted qos = 0)

0x01 成功(granted qos = 1)

0x02 成功(granted qos = 2)

0x80 失败

6211 UNSUBSCRIBE(取消订阅)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

中移物联网有限公司 OneNET 开发文档中心

Payload

Description 格式

Byte1~

n

TopicName 2 字节字串长度 + utf8字

可以包含一个或多个 topic

6212 UNSUBACK(取消订阅确认)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

6213 PING(客户端发送 PING(连接保活)命令)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

NULL NULL

注PING命令无 VariableHeader

中移物联网有限公司 OneNET 开发文档中心

6214 PINGRSP(PING命令回复)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

NULL NULL

注PINGRSP无 VariableHeader

6215 DISCONNECT(断开连接)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

NULL NULL

注DISCONNECT无 VariableHeader

中移物联网有限公司 OneNET 开发文档中心

第七章 设备开发流程

71 连接鉴权

Device Onenet

(Connect)鉴权请求

(ConnAck)鉴权结果

加载session

鉴权

图7-1 连接鉴权

设备向平台发起 connect 请求connect 中携带鉴权信息具体

参见(报文格式参考 621)

平台拿到鉴权信息进行鉴权

鉴权通过后如果 cleansession=0 平台将会加载保存的设备

的一些信息如订阅列表(621中描述)

如果 cleansession=1 设备没有保存信息在平台则不加载设

备相关信息

返回鉴权结果 ConnAck(报文格式参考 621)

72 消息发布

721 数据点上报

设备使用 publish 报文来上传数据点 报文格式如下

中移物联网有限公司 OneNET 开发文档中心

VariableHeader

Field 名称 说明 格式

Field1 TopicName=rdquo$dprdquo $dp 为系统上传数据点

的指令

2字节字串长度 + utf8

字串

Payload

Payload包含真正的数据点内容支持的格式如下

Byte 1 Bit0-5数据类型指示目前支持

Type = 1

Type = 2

Type = 3

Type = 4

Type = 5

Type = 6

Type = 7

Bit6-7 flags 根据具体类型不同意义

Type6Type7这两种需要填写时间戳的数据类型

如果填入了时间戳则须将 bit7 置 1否则置 0(即

忽略数据类型说明中的日期时间相关字段)

0 0 0 0 0 0 0 1

Byte 2 根据数据类型指示不同

Byte n

中移物联网有限公司 OneNET 开发文档中心

数据类型 1(type == 1)格式说明

数据类型 2(type == 2)格式说明

Byte 1 数据点类型值1 1JSON 格式 1 字符串 0 0 0 0 0 0 0 1

Byte 2 指示后面 json 字符串长度

固定两字节长度高位字节值为 0x00

Byte 3 固定两字节长度低位字节值为 0x41

Byte 4

ldquodatastreamsrdquo[ 可以同时传递多个数据流

ldquoidrdquordquotemperaturerdquo

ldquodatapointsrdquo[数据流可以有多个数据点

rdquoatrdquordquo2013-04-22 222222rdquo可选

rdquovaluerdquo 365用户自定义

]

ldquoidrdquordquolocationrdquo

ldquodatapointsrdquo[hellip]

hellip

]

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

Byte n

Byte 1 数据点类型指示type=2 二进制数据 0 0 0 0 0 0 1 0

Byte 2 指示后面 json 字符串长度

固定两字节长度-高位字节值为 0x00

Byte 3 固定两字节长度-低位字节值为 0x10

Byte 4

rdquods_idrdquordquoimagerdquo 创建数据流时定义的 ID(必填)

ldquoatrdquordquo2014-10-25 122323rdquo 时间(可选)

rdquodescrdquo字符串或 json 对象对该数据的描述(可选)

hellip

Byte n

Byte n+1 指示后面二进制数据长度

固定四字节长度-第 1 字节(最高)值为 0x00

Byte n+1 固定四字节长度-第 2 字节值为 0x00

Byte n+2 固定四字节长度-第 3 字节值为 0x01

Byte n+3 固定四字节长度-第 4 字节(最低)值为 0x00

Byte n+4 该域目前最大支持 3M

中移物联网有限公司 OneNET 开发文档中心

数据类型 3(type == 3)格式说明

数据类型 4(type ==4)格式说明

hellip 本例中的该域 256 字节数据

Byte n+260

Byte 1 数据点类型指示type=3 JSON 格式 2 字符串 0 0 0 0 0 0 1 1

Byte 2 指示后面字符串长度

固定两字节长度高位字节值为 0x00

Byte 3 固定两字节长度低位字节值为 0x46

Byte 4 通用格式

ldquodatastream_id1rdquordquovalue1rdquo

ldquodatastream_id2rdquordquovalue2rdquo

hellip

示例

ldquotemperaturerdquo225rdquohumidityrdquordquo952rdquo

hellip

hellip

hellip

hellip

Byte n

Byte 1 数据点类型指示type=4 JSON 格式 3 字符串 0 0 0 0 0 1 0 0

Byte 2 指示后面字符串长度

固定两字节长度高位字节值为 0x00

Byte 3 固定两字节长度低位字节值为 0x46

Byte 4 通用格式

ldquodatastream_id1rdquoldquodatetime1rdquordquovalue1rdquo

ldquodatastream_id2rdquo ldquodatetime2rdquordquovalue2rdquo

hellip

示例

ldquotemperaturerdquoldquo2015-03-22 223112rdquo225

hellip

hellip

hellip

hellip

Byte n

中移物联网有限公司 OneNET 开发文档中心

数据类型 5(type == 5)格式说明

数据类型 6(type == 6)格式说明

Byte 1 数据点类型指示type=5 自定义分隔符 0 0 0 0 0 1 0 1

Byte 2 指示后面字符串长度

固定两字节长度高位字节值为 0x00

Byte 3 固定两字节长度低位字节值为 0x41

Byte 4 消息中最前面两字节为用户自定义的域中分隔符和域间分隔符

这两个分隔符不能相同比如采用逗号作为域中分隔符分号作

为域间分隔符的格式如下

feild0feild1hellipfeildn

其中每个 field 格式支持 3种

field 格式 1 3 个子字段分别是数据流 ID时间戳数据值

通用格式

Datastream_iddatetimevalue

field 格式 2 2 个子字段分别是数据流 ID 和数据值省略时

间戳通用格式

Datastream_idvalue

field 格式 3 1 个子字段省略了数据 ID 和时间戳只传输数

据值平台将用该域(feild)所在的位置号(从 0 开始)作为数据

流 ID通用格式

value

示例

(1)temperature2015-03-22

223112225102pm258910

(2)temperature2015-03-22

223112225102pm258910

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

Byte n

Byte 1 数据类型指示type=6 带时间自定义分隔符 0 0 0 0 0 1 1 0

Byte 2 年(后两位)例如 2016 年则该字节为 16 0 0 0 1 0 0 0 0

Byte 3 月(1-12)

Byte 4 日(1-31)

Byte 5 小时(0~23)

Byte 6 分钟(0~59)

Byte 7 秒(0~59)

Byte 8 指示后面字符串长度

固定两字节长度高位字节值为 0x00

Byte 9 固定两字节长度低位字节值为 0x41

Byte 10 消息中最前面两字节为用户自定义的域中分隔符和域间分隔符

具体格式见 type=5 说明若相关域中没有时间戳则采用本类

hellip

中移物联网有限公司 OneNET 开发文档中心

数据类型 7(type == 7)格式说明(每次最多 500个数据流的浮点数)

hellip 型的默认时间戳当作数据点的时间来存储

Byte n

Byte 1 Bit0-5 数据类型指示type=7 可离散浮点数数据流

Bit6保留置 0

Bit7 时间指示位1携带 6字节时间

1 0 0 0 0 1 1 1

Byte 2 年(后两位)例如 2016 年则该字节为 16 0 0 0 1 0 0 0 0

Byte 3 月(1-12)

Byte 4 日(1-31)

Byte 5 小时(0~23)

Byte 6 分钟(0~59)

Byte7 秒(0~59)

Byte 8 数据流名称(取值范围 1-65535)

高位字节值为 0x00

Byte 9 低位字节值为 0x01

Byte10 数据流个数(取值范围 1-500)

高位字节值为 0x00

Byte11 低位字节值为 0x01

Byte 10 4 字节 float 类型低位在前高位在后

Byte 11

Byte 12

Byte 13

Byte n 数据流名称(取值范围 1-65535)

高位字节值为 0x24

Byte n+1 低位字节值为 0x37

Byte n+2 数据流个数(取值范围 1-500)

高位字节值为 0x01

Byte n+3 低位字节值为 0x00

Byte n+2 4 字节 float 类型低位在前高位在后

Byte n+4

Byte n+5

Byte n+6

中移物联网有限公司 OneNET 开发文档中心

7211 Qos0(Client-gtServer)

Device OneNet

Publish $dp(Qos0)

存储

图7-2 QoS连接图

设备发布 Qos0 消息(上报数据点)

平台收到上报数据点后保存起来

7212 Qos1(Client-gtServer)

Device OneNet

Publish $dp(Qos1)

存储

PubAck

图7-3 Qos1连接图

设备发布 Qos1 消息(上报数据点)

中移物联网有限公司 OneNET 开发文档中心

平台收到上报数据点后保存起来

平台给设备回复相应的 PubAck (报文格式参考 625)

7213 Qos2(Client-gtServer)

Device OneNet

Publish $dp(Qos2)

存储

PubRec

PubRel

PubComp

图7-4 Qos2连接图

设备发布 Qos2 消息(上报数据点)

平台收到上报数据点后保存起来

平台给设备回复相应的 PubRec报文

设备需回复平台 PubRel报文如超时不回平台则会断开相应连接

平台给设备回复 PubComp报文

注数据点上报功能不支持 Retain 特性

中移物联网有限公司 OneNET 开发文档中心

722 平台命令(下发amp回复)

7221 命令下发

平台使用 publish 报文来下发平台指令 报文格式如下

FixHeader

参考 623

VariableHeader

Field 名称 说明 格式

Field1 TopicName=rdquo$creqcmduuidrdquo $creq为系统下发

Cmd 的 指 令

cmduuid为该条指

令的 uuid

2字节字串长度 +

utf8字串

Payload

Payload包含真正的指令内容

72211 Qos0(Server-gtClient)

DeviceOneNet

Publish $creq(Qos0)

图7-5 Qos0命令下发

命令下发

平台向设备发送 topic为$creq的消息(该 topic为平台命令)

中移物联网有限公司 OneNET 开发文档中心

设备收到 topic 为$creq 的 topic 时需将其作为平台下发的指令来处

注目前命令下发以 Qos0级别进行推送

7222 命令回复

设备使用 publish 报文来回复平台指令 报文格式如下

FixHeader

参考 623

VariableHeader

Field 名称 说明 格式

Field1 TopicName=rdquo$crspcmduuidrdquo $crsp为系统处理

设备回复 cmd 的

指令cmduuid为

该条指令的 uuid

2字节字串长度 +

utf8字串

Payload

Payload包含真正回复的指令内容

72221 Qos0(Client-gtServer)

DeviceOneNet

Pulish $crsp(Qos0)

图7-6 Qos0下发命令

中移物联网有限公司 OneNET 开发文档中心

72222 Qos1(Clientlt-gt Server)

DeviceOneNet

Pulish $crsp(Qos1)

Puback

图7-7 Qos1下发命令

如果设备回复响应时以 Qos1回复则平台需要给设备回复一个 Puback 报文

72223 Qos2(Clientlt-gt Server)

DeviceOneNet

Pulish $crsp(Qos2)

PubRec

PubRel

PubComp

图7-8 Qos2下发命令

如果设备回复响应时以 Qos2回复则

1平台需回复设备一个 PubRec报文

中移物联网有限公司 OneNET 开发文档中心

2设备在收到 PubRec后需向平台回复 PubRel报文

3平台收到 PubRel 报文后向设备回复 PubComp报文

73 创建 Topic

Device OneNet

HTTP 请求

HTTP 响应

图7-9 创建Topic

设备通过发送 HTTP请求进行 topic 的创建操作

平台收到请求后创建 topic 并返回结果

请求及响应定义如下

HTTP方法 POST

URL httpapihecloudscommqtttopic

HTTP头部 api-keyxxxx-ffff-zzzzz必须 master key

URL参数

HTTP body

内容

ldquonamerdquordquoxxxxxxrdquo topic 名字只能由英文下划线反斜杠组成最长

1024个字符同一产品下 topic name 不重复

成功返回

errno 0

errorldquosuccrdquo

说明 每个产品最多 100个 topic

中移物联网有限公司 OneNET 开发文档中心

74 订阅

Device OneNet

Subscribe

Suback

更新设备订阅列表

图7-10 订阅

设备发起订阅请求(报文格式参考 629)

平台收到请求后更新 topic列表

平台给设备回复 SubAck (报文格式参考 6210)

注subscribe 的 request qos级别可以为 012

75 取消订阅

Device OneNet

UnSubscribe

UnSuback

更新设备订阅列表

图7-11取消订阅

中移物联网有限公司 OneNET 开发文档中心

设备发起取消订阅请求 (报文格式参考 6211)

平台收到请求后更新 topic 列表

平台给设备回复 UnSubAck (报文格式参考 6212)

76 推送设备 Topic

761 Publish 报文推送

Qos0设备使用 Qos 级别为 0的 Publish报文来进行推送

Device OneNet

Publish(Qos0)

Device

以Qos0 Publish到订阅设备

图7-12 Qos0推送

设备发起推送 topic请求(以 Qos0级别)

平台收到请求后将 topic以 Qos0级别推送到相关订阅设备(支持离线设

备推送)

平台不返回 PubAck或 PubRec 等报文

Qos1

设备使用 Qos级别为 1的 publish报文来推送 Topic

中移物联网有限公司 OneNET 开发文档中心

Device OneNet

Publish(Qos1)

PubAck

Device

以Qos1 Publish到订阅设备

设备回复平台 PubAck

图7-13 Qos1发布

设备发起推送 topic请求(以 Qos1级别)

平台收到请求后将 topic以 Qos1级别推送到相关订阅设备(支持离线设

备推送)

平台返回 PubAck 报文

Qos2

设备使用 Qos级别为 2的 publish报文来推送 Topic

中移物联网有限公司 OneNET 开发文档中心

Device OneNet

Publish(Qos2)

PubRec

Device

以Qos2 Publish到订阅设备

PubRec

PubRel

PubComp

PubRel

PubComp

图7-14 Qos2推送

设备发起推送 topic请求(以 Qos2级别)

平台收到请求后回复 PubRec报文

设备收到 PubRec后需回复 PubRel报文 (如超时不回复平台会断开与设

备的连接)

平台收到 PubRel 报文后回复 PubComp 给设备

平台在回复 PubComp 后会以 Qos2 级别推送到相关订阅设备(支持离线设

备推送)

设备需回复 PubRec报文 (如超时不回复平台会断开与设备的连接)

平台发送 PubRel 报文给设备

设备需回复 PubComp(发布完成)

Publish报文的格式如下

FixHeader

参考 623

中移物联网有限公司 OneNET 开发文档中心

VariableHeader

Field 名称 说明 格式

Field1 TopicName 填写设备订阅的 topic 2字节字串长度 + utf8

字串

Payload

Payload为设备自定义内容

762 HTTP 请求推送

Device OneNet

HTTP 请求

HTTP 响应

Device

Publish到订阅设备

图7-15 HTTP请求

设备以 HTTP 的方式发起推送 topic 请求

平台收到请求后将 topic推送到相关订阅设备 (目前只支持在线推送)

平台返回推送结果

请求及响应定义如下 HTTP方法 POST

URL httpapihecloudscommqtt

HTTP头部 api-keyxxxx-ffff-zzzzz必须 master key

URL参数 topic=ldquoXXXXXXrdquo必选在发送 mqtt协议的 topic 必填

HTTP body内容 用户自定义 Json 或二进制数据(小于 64K)

成功返回

errno 0

errorldquosuccrdquo

中移物联网有限公司 OneNET 开发文档中心

77 离线 Topic

推送 Topic只针对在线设备进行 topic 消息的推送离线设备不会收到订阅

的 topic 的消息离线 Topic则会将该消息推送给在线以及离线设备

1 如果设备在上线时设置了 clean session flag服务端会删除其订阅的

topic及相关的离线 topic消息

2 如果设备没有设置 clean session flag如果有与该设备相关的离线

topic消息则在鉴权成功后将离线消息推送给设备

3 遗嘱消息(will msg)只会推送给订阅了该 will topic的在线的设备离

线设备不会收到

4 离线消息的有效期默认为 2 天(暂不支持用户设定有效期)服务器只会

推送在 2天内的最近 10 条消息

78 数据点订阅

数据点订阅同一产品下的设备可以订阅其他设备的数据点订阅的 topic

格式为deviceid数据流名称即

被关注的设备在上传了该数据流名称的数据点后订阅了该 topic的其他设备都

会收到上传的数据点

1 AB设备的 deviceid分别为 92779278

2 A 设备订阅了名为92789527 的 topic(9278 为设备 B 的 id9527 为 B

设备上传的数据流名称)

3 B 设备上传了名为 9527的数据流(数据点为 11 1578hellip)

4 A 设备会收到多条(取决于设备 B 上传的数据点的个数)推送的 topic 名

为92789527 的 publish消息消息的 payload中则包含设备 B 上传的数据

注目前支持订阅的数据点的类型为 Type1~Type7(详见 721节)

中移物联网有限公司 OneNET 开发文档中心

第八章 常见问题 FAQ

用户在基于 OneNET 平台进行产品开发的过程中可能会遇到各种各样的问

题开发过程中遇到的问题一方面可以参考 OneNET 文档中心的文档或者本文

档前几个章节的内容另一方面用户可以参考本章节总结的常见问题希望这些

文档能对用户在开发过程中有一定的指导和帮助

本章将分三个小节对用户在开发产品过程中可能遇到的问题进行梳理分别

为终端设备接入 OneNET平台的常见问题API调用的常见问题和 OneNET平台

的能力

81 终端设备接入 OneNET 平台的常见问题

序号 问题描述 原因分析 解决方法

1

2

3

4

5

6

7

82 API 调用的常见问题

序号 问题描述 原因分析 解决方法

1

2

3

4

5

6

7

8

9

中移物联网有限公司 OneNET 开发文档中心

83 使用 OneNET平台遇到的常见问题

序号 问题描述 原因分析 解决方法

1

2

3

4

5

6

7

8

Page 8: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com

中移物联网有限公司 OneNET 开发文档中心

21 设备接入平台流程图

平台

TCP连接创建产品

发送连接报文

连接应答

数据应答

发送数据报文

生成连接报文

数据应答

发送数据报文

终端

发送下行命令 下发命令

解析下行命令

生成存储数据报文

生成存储数据报文

解析连接应答

解析数据应答

解析数据应答

必要流程

可选流程

存储到数据流

存储到数据流

数据源 创建应用

心跳应答

发送心跳报文生成心跳报文

解析心跳应答

平台操作

设备操作

创建设备

图2-1 设备接入OneNET平台流程图

1) 创建产品

根据产品功能需求选择接入协议重要参数产品 ID注册码产品 APIKey

(见附录一)

2) 创建设备

通过 TCP直接与平台直连的终端在进行接入之前平台上必须要先存在一

个与之一一对应的虚拟设备可以通过开发者中心或者 API 注册创建设备接口

来创建重要参数设备 ID鉴权信息

3) 建立 TCP连接

不同协议有着不同的固定 IP地址与端口

中移物联网有限公司 OneNET 开发文档中心

4) 建立设备连接

通过 1)2)中的参数(一般为产品 ID+鉴权信息+设备 ID)生成连接报文

发送连接报文建立终端与 2)中新建设备的一一对应关系

5) 发送数据报文

按照连接协议生成数据报文发送至平台

6) 创建应用

7) 使用平台下发命令接口或者 API向设备发送指令

22 应用开发流程图

应用开发主要是通过 Rsetful API 的方式实现和 OneNET 平台进行交互对

接在您完成产品创建以及硬件接入后即可根据相关所接入的硬件设备以及所

上传的数据进行相关产品的开发

OneNET 平台提供的应用开发 API分为需要终端响应和只需 OneNET 平台

响应两类下面分别用两个流程图描述这两类 API 的开发流程图 2-2为需

要终端响应的 API 调用流程其中虚线部分只有离线命令的读写下发命令才

有该流程图 2-3为只需平台响应的 API 调用流程

在应用开发平台调用 API 之前 必须与 OneNET 平台建立连接建立连

接的过程和 API 调用流程一并在图中进行了标注

中移物联网有限公司 OneNET 开发文档中心

图2-2 需要终端响应的API流程

终端设备 OneNET平台 应用开发平台

1配置应用开发地址Token等参数

2向应用开发平台发起URLampToken验证

3解析验证请求参数返回验证消息

应用平台与OneNET平台已经建立连接

4调用API指令HTTP请求

5返回平台侧执行结果错误代码和uuid

6API指令执行完毕

图2-3 不需要终端响应的API流程

终端设备 OneNET平台 应用开发平台

1配置应用开发地址Token等参数

2向应用开发平台发起URLampToken验证

3解析验证请求参数返回验证消息

应用平台与OneNET平台已经建立连接

4调用API指令HTTP请求MQTT请求

5返回平台侧执行结果错误代码和uuid

6相应指令请求返回数据 推送数据及执行结果给应用平台

7API指令执行完毕

中移物联网有限公司 OneNET 开发文档中心

第三章 终端设备接入 OneNET 平台流程

终端设备与 OneNET 平台进行数据交互需经过公网到达平台根据 OneNET

平台与网络运营商的关系终端设备智能网关OneNET平台以及第三方应用四

者的网络关系可归纳如图 3-1所示

图3-1 终端设备与服务器网络关系

图 3-1 中终端设备或智能网关设备与 OneNet 平台使用 TCPIP 建立网络连

接使用 MQTT协议进行与平台进行数据通信

31 终端设备接入 OneNET 平台前的准备工作

311 硬件准备

设备终端接入 OneNET平台的通信方式也是多种多样的比较常用的有 GPRS

无线 WIFI以太网口GPRS 方式需要 GPRS 模块和 SIM 卡的支持无线 WIFI 模

块需要 WIFI 模块支持WIFI 模块推荐选用 ESP8266 串口 WIFI 模块GPRS 模块

推荐选用 SIM900A模块

312 软件准备

设备终端接入 OneNET 平台使用 MQTT 协议使用嵌入式设备需移植 SDK

到 MCU详见麒麟发开板接入实例

中移物联网有限公司 OneNET 开发文档中心

32 终端设备接入 OneNET 平台步骤

321 OneNET 平台创建产品及设备

3211 注册用户账号

进入 OneNET官网(httpsopeniot10086cn)点击首页右上角的ldquo注

册rdquo按钮注册用户账号

OneNET 支持ldquo个人用户rdquo和ldquo企业用户rdquo两种注册方式你可以根据您的

实际情况选择注册方式

以个人用户注册为例用户需在对应选项依次填写用户名用户密码所在

地手机号码图片验证码以及手机验证码并完成注册注册页面如图 3-2所

示注册完成后回到主页点击ldquo登录rdquo即可进入 OneNET 的官方主页并由

此进入到你的ldquo开发者中心rdquo

如果客户产品后续需要进行规模化量产建议以企业的名义进行注册注册

时注意注册信息的准确填写另外个人版和企业版在功能上无差异

图3-2 用户账号注册页面

3212 创建产品和设备

在进入到你的ldquo开发者中心rdquo后点击右上角的 ldquo创建产品rdquo在弹出页面中

按照提示填写产品的基本信息进行产品创建在创建过程中请您按照提示尽

可能完整全面地填写相应内容这样更方便您后期对产品进行管理

创建产品页面如图 3-3 和图 3-4其中设备接入方式选择ldquo公开协议rdquo联网

方式选择跟据实际设备进行选择设备接入协议选择ldquoMQTTrdquo

中移物联网有限公司 OneNET 开发文档中心

产品创建完成后页面弹出ldquo创建产品成功rdquo如图 3-5所示点击ldquo立即

添加设备rdquo显示如图 3-6所示界面依次填写ldquo设备名称rdquo鉴权信息设备

名称自定义鉴权信息用于平台对终端设备鉴权每台设备具有唯一性建议设

置为产品出厂编号方便管理鉴权信息需写入设备

图3-3 创建产品页面

中移物联网有限公司 OneNET 开发文档中心

图3-4 创建产品页面

图3-5 创建产品成功页面

中移物联网有限公司 OneNET 开发文档中心

图3-6 添加设备页面

322 终端设备软硬件初始化

终端设备在上电以后需要完成设备的软硬件初始化硬件初始化包括各个

硬件模块的上电处理器的寄存器初始化工作模式初始化等等软件初始化包

括基础通信套件初始化应用接口初始化应用程序初始化等等

323 终端创建设备及资源

终端设备创建设备(device_id)配置产品 ID鉴权信息注册码连接

服务器 IP端口号等信息创建成功后与平台建立登陆连接连接成功后即可向

平台上报数据点

324 登录 OneNET平台

终端设备的基础通信套件完成初始化以及设备资源创建完成后可向

OneNET平台发送登陆请求返回登录结果如果参数错误或者登录超时平台会

返回登录失败如果验证通过平台会返回登录成功

若终端设备登录平台成功设备名称左边的圆形图标会由灰色(离线状态)

变成绿色(在线状态)如图 3-7所示

中移物联网有限公司 OneNET 开发文档中心

图3-7 平台侧设备状态显示

325 设备数据点上报

终端设备与平台成功建立连接后设备使用 publish 报文向平台上报数据点

平台收到数据点后保存到对应数据流下方便应用查阅数据点上报格式以及类型详见

721

图3-8 平台侧收到设备数据流显示

326 创建应用

用户可以利用上传的数据创建相关的应用发布直观的展示页面目前在平台应用孵化

器中提供了曲线图柱状图表盘物体位置图片和开关等应用

在产品详情页面点击ldquo应用管理rdquo进入应用管理主界面如下图

中移物联网有限公司 OneNET 开发文档中心

图3-9 应用管理模块

点击ldquo创建应用rdquo输入应用名称点击ldquo创建rdquo如下图

图3-10 新应用创建

保存成功后点击编辑按键进入应用编辑页面如下图

中移物联网有限公司 OneNET 开发文档中心

图3-11 应用编辑入口

图3-12 应用编辑界面

在应用编辑页面中使用左侧的控件进行应用编辑此例中我们选择表盘控件来显示

刚刚上传的数据点击表盘控件如下图所示

中移物联网有限公司 OneNET 开发文档中心

图3-13 表盘控件添加

在右侧的属性中选择设备以及数据源(及刚刚上传的数据流)如下图

图3-14 表盘控件数据流绑定

在确定好数据流之后可以看到表盘回显示成我们添加的数据的值其他的

刷新频率以及表盘显示样式读者可以自行更具需求加以修改

完成应用编辑之后点击右上角保存按钮退出应用编辑

在应用管理页面点击该应用即可查看编辑好的应用页面

中移物联网有限公司 OneNET 开发文档中心

图3-15 保存应用

图3-16 应用查看与分享

该应用可以通过共享ldquo发布链接rdquo的方式将该应用共享给他人

33 设备批量接入

单个设备可以通过平台的开发者中心添加设备的方式进行创建若用户有多

个设备直接与平台 TCP连接的终端通过手动添加需耗费大量时间人力OneNET

中移物联网有限公司 OneNET 开发文档中心

为大批量接入用户提供 3种批量创建设备的方案

331 平台设备批量复制

此种方式为选择某个设备作为复制的模板通过导入 EXCEL的方式进行设备

复制厂商可以在小批量测试时使用该功能

在设备列表中点击查看详情

图3-17 设备批量接入

在设备详情页面点击批量导入设备信息

中移物联网有限公司 OneNET 开发文档中心

图3-18 导入设备信息

点击批量复制

图3-19 批量复制

中移物联网有限公司 OneNET 开发文档中心

目前提供三种批量创建的方式 excel 导入的方式为主要接入方式选择

excel导入点击下载模板

图3-20 快速导入

图3-21 Excel导入

打开下载下来的 excel模板表中的 titledesctags等均为将要批量导

入的设备的数据其中的 title 和 auth_info 为必填选项title 为设备名

中移物联网有限公司 OneNET 开发文档中心

auth_info对应设备的鉴权信息

图3-22 Excel格式

填写 3个设备信息

图3-23 Excel内容

三个设备的 title和 auth_info都一样均为 20170808000012017080800002

2017080800003保存该表格点击ldquo点击上传rdquo上传保存好的 excel 文件

点击ldquo确定导入批量rdquo

中移物联网有限公司 OneNET 开发文档中心

图3-24 导入上传

图3-25 确认创建

可以看到在原设备目录下新增了 3个设备其名称分别为 2017080800001

20170808000022017080800003

中移物联网有限公司 OneNET 开发文档中心

图3-26 批量创建的设备

点击设备详情可以看到设备目录下各个设备的鉴权信息与表格中所填

写的内容一致

图3-27 设备ID及鉴权信息

至此完成了通过批量设备复制的方式完成设备批量创建的过程用户如果

要使用这个功能需要将自己终端的出厂序列号整理到这个 excel表中然后利

中移物联网有限公司 OneNET 开发文档中心

用上传表格的方式进行批量创建

332 应用平台调用新增设备 API

OneNET 提供了创建设备的 API接口

图3-28 新增设备API接口

其中的 auth_info 参数对应着设备的鉴权信息通过调用此 API 接口可以

实现在平台上新增设备的功能用户如果有自己的第三方应用平台进行设备管理

可以通过多次调用此接口的方式进行设备的批量创建在调用接口时需要确保每

次调用的 auth_info 参数对应着自己的每一个终端不同的出厂序列号

333 终端调用注册 API

API 实际是 HTTP 协议的通信协议终端也可以通过封装 HTTP 包发送注册

中移物联网有限公司 OneNET 开发文档中心

设备请求的方式调用 API

终端调用注册 API 创建设备并接入的流程如图 3-29所示

平台

TCP连接协议接入机

创建产品

发送连接报文

连接应答

数据应答

发送数据报文

生成连接报文

设备

发送下行命令 下发命令

解析下行命令

生成存储数据报文

解析连接应答

解析数据应答

必要流程

可选流程

存储到数据流 数据源 创建应用

心跳应答

发送心跳报文生成心跳报文

解析心跳应答

平台操作

设备操作

利用设备本身的sn和产品的设备注册码生成注册报文

TCP连接API服务器

发送注册报文

注册应答

解析设备ID

创建设备

设备开机

读取硬件中烧录的设备编号(sn)

图3-29 终端调用注册API接入流程

1) 创建产品

重要参数产品 ID注册码产品 APIKey(见附录一)

2) 生成并发送注册报文

每一个用户终端中都有厂商烧录的唯一出厂序列号(sn)终端上电

之后应该首先读取自己的 sn然后通过 1)中的注册码和 sn 一起组成注

册报文

注册报文格式如下例

POST httpapihecloudscomregister_deregister_code=6TM7OkhNsTjATvFx HTTP11

Host apihecloudscom

Content-Length 48

中移物联网有限公司 OneNET 开发文档中心

sn02136616511001titletestdevice0001

其中

6TM7OkhNsTjATvFx 为产品注册码

02136616511001 是本例中模拟的设备唯一编号

testdevice0001 是本例中模拟的设备名

若上传的数据格式以及参数鉴权均正确则平台会返回设备创建成功

返回设备 ID以及该设备对应的设备 api-key

HTTP11 200 OK

Date Wed 09 Aug 2017 064821 GMT

Content-Type applicationjson

Content-Length 95

Connection keep-alive

Server Apache-Coyote11

Pragma no-cache

errno0datadevice_id11142371keyq9Mw0zqiAPjTwqfyCk2mWrUi8=errorsucc

3) 在步骤 2)完成之后平台上的设备就已经成功创建了终端需要

重新 TCP连接到对应协议的服务器上完成设备连接(与设备进行映射)以

及上传数据的操作

34 设备 ID 与产品序列号

通过 OneNET构建的物联网系统中有两套比较重要的编码设备 ID与产品序列号

(SN)其中

产品序列号是由厂商指定的在厂商的产品范围内是保持唯一的在出厂前烧写到每

一个终端中通常包含在与平台通信的数据中并以条形码的方式贴在产品的包装上用

于从用户的角度区分每一个独立的终端

设备 ID是在平台创建设备时由 OneNET分配的平台范围内唯一的编号应用于第三

方平台调用 OneNET API时使用

在创建设备时OneNET平台需要用户以设备 sn为参数进行设备创建成功之后平

台会分配一个设备 ID这样 OneNET内部就有了一个 sn-设备 ID的映射关系

终端登陆使用的鉴权信息是出厂时烧写好的 sn鉴权通过之后平台可以将该终端

上传是数据放到对应的设备中

上层应用通过创建设备 API或者查询设备 API建立 sn-设备 ID映射表在需要操作

某一设备时首先可以获取的是终端的 sn号(因为对用户是可见的)通过映射表获取设

中移物联网有限公司 OneNET 开发文档中心

备 ID然后再通过 API访问 OneNET平台上的对应设备

两套编码在物联网系统中的应用位置如下图所示

物联网应用

OneNET

终端

(烧写sn)

HTTP API 以设备ID为参数进行API访问

接入协议以sn为鉴权参数进行设备连接

设备

设备名

设备ID

设备sn

设备标签

sn 设备ID

snmdash设备ID映射表

中移物联网有限公司 OneNET 开发文档中心

第四章 第三方应用开发

第三方应用与 OneNET 平台的业务逻辑关系如图 4-1 所示第三方应用与

OneNET平台之间通过 HTTPS请求应答的方式实现数据交互OneNET 平台为第三

方应用提供封装好的 API 接口应用平台通过调用这些 API 接口完成对 OneNET

平台的读写执行以及设备管理请求然后 OneNET 平台会将相应的指令请求发送

到终端设备OneNET 平台收到终端设备响应的数据及设备信息后会将数据及

设备信息推送到应用平台完成应答

下面将分别介绍第三方应用接入 OneNET 平台的步骤OneNET平台提供的数

据推送功能以及 OneNET 平台为第三方应用封装好的 API接口

图4-1 第三方应用与OneNET平台的逻辑关系

41 第三方应用接入 OneNET 平台

第三方应用与 OneNET平台实现数据交互的前提是已经建立连接第三方应

用接入 OneNET平台的开发流程如图 4-2所示包括三个步骤

(1) 在 OneNET 平台创建了设备该设备有对应的真实设备且能正常上报

数据

(2) 用户已经开发并部署了 OneNET平台验证接入的程序

(3) 在 OneNET 平台正确配置了第三方应用数据接收的地址(URL)

Token以及其他参数

中移物联网有限公司 OneNET 开发文档中心

在确保上述第(1)步已经实现的基础上下面将分别讲述第(2)步和第

(3)步的实现过程

图4-2 数据推送的开发流程

412 第三方应用平台接入验证程序

第三方应用平台接入验证程序工作流程如下所述当 OneNET 平台完成对第

三方开发平台的配置后会向第三方开发平台发起 URLampToken验证接入验证程

序对平台发送的验证参数进行验证验证通过后第三方开发平台会向 OneNET

平台返回验证消息当 OneNET 平台收到验证消息后说明第三方开发平台与

OneNET平台已建立连接

目前 OneNET平台为第三方应用平台提供接入验证程序的 SDK有 Javaphp

Nodejs和 C四个版本

SDK 下载地址httpsopeniot10086cndocart432html118 -ldquo数

据推送rdquo

413 OneNET 平台配置第三方应用平台

在 OneNET平台对第三方应用平台的配置界面如图 4-3所示

URL第三方开发平台的地址

Token可以自定义用于第三方开发平台接入平台握手验证

消息加解密方式有明文模式和安全模式当启用安全模式后平台端需要

用户自定义 AESKey 或者由平台随机生成在应用程序中使用该 AESKey 解密消

中移物联网有限公司 OneNET 开发文档中心

推送时间限制(秒)和推送数据限制(个)设置ldquo推送时间限制rdquoldquo推送数

据限制rdquo可以实现批量推送数据减少服务器压力当满足ldquo推送时间限制rdquo和

ldquo推送数据限制rdquo要求后OneNET 将给第三方推送数据如果没有设置ldquo推送

时间限制rdquo和ldquo推送数据限制rdquo将默认数据实时推送

图4-3 第三方开发平台的配置界面

当用户成功在 OneNET 平台配置了第三方开发平台服务器地址后点击ldquo提

交rdquo按钮后OneNET 平台会向第三方应用平台发起 URLampToken 验证请求验证

通过且收到第三方返回的验证消息后则第三方应用平台与 OneNET 平台已建立

连接之后OneNET 平台在收到设备数据时会将设备数据推送到已配置的第三

方应用平台

用户数据接收服务程序接收到 OneNET平台发送的 ldquoURLampTokenrdquo验证请求

请求的格式形如httpipporttestmsg=xxxampnonce=xxxampsignature=xxx

蓝色字体部分为用户在 OneNET平台配置的 URL常规的验证流程如下

(1)在请求中获取参数ldquononcerdquoldquomsgrdquo的值将ldquotokenrdquo(此为页面

配置参数 token的值)ldquononcerdquoldquomsgrdquo的值计算 MD5(token+nonce+msg)

加密值并且编码为 Base64字符串值

中移物联网有限公司 OneNET 开发文档中心

(2)将上一步中 Base64字符串值通过 URL Decode 计算后的值与请求参数

ldquosignaturerdquo的值进行对比如果相等则表示 token验证成功

(3)如果 token 验证成功向 OneNET 平台返回ldquomsgrdquo参数值否则返回

其他值

说明如果用户不想验证 Token 的有效性可以忽略以上步骤并直接向

OneNET平台返回ldquomsgrdquo参数值

42 OneNET 平台数据推送

平台以 HTTPS POST 请求形式向第三方应用平台注册地址推送数据推送数

据相关信息以 JSON 串的形式置于 HTTPS请求中的 body部分

第三方应用平台在接收数据时会接收到数据的明文消息或者密文消息

明文消息中以ldquotyperdquo的数值区分不同的消息而密文消息与明文消息的区别

是ldquomsgrdquo部分经过了加密处理下面将分别对明文消息密文消息以及消息相

关字段和密文的加密算法进行说明

421 明文消息

明文消息有两种消息类型分别为数据点消息和设备上下线消息而数据点

消息又分为单条数据点消息和数据点消息批量形式数据点消息批量形式中的不

同数据点是以不同时间戳区分的

(1)数据点消息(type=1)

msg

type 1

dev_id 2016617

ds_id datastream_id

at 1466133706841

value 42

msg_signature message signature

nonce abcdefgh

(2)数据点消息批量形式(type=1)

msg [

type 1

dev_id 2016617

ds_id datastream_id

中移物联网有限公司 OneNET 开发文档中心

at 1466133706841

value 42

type 1

dev_id 2016617

ds_id datastream_id

at 1466133706842

value43

]

msg_signature message signature

nonce abcdefgh

(3)设备上下线消息(type=2)

msg

type 2

dev_id 2016617

status 0

login_type 1

at 1466133706841

msg_signature message signature

nonce abcdefgh

422 密文消息

密文消息中的ldquoenc_msgrdquo是由明文消息中的ldquomsgrdquo采用 AES 加密算法而

enc_msgxxxx

msg_signature

message signature

nonceabcdefgh

423 消息相关字段说明

表4-1 消息相关字段说明

字段 字段说明

type 标识数据类型当前版本范围[15]

dev_id 设备 ID

ds_id 公 开 协 议 中 的 数 据 流 ID 其 格 式 为

objectID_instanceID_resourceID

at 平台时间戳单位 ms

value 具体数据部分为设备上传至平台或触发的相关

数据

中移物联网有限公司 OneNET 开发文档中心

status 设备上下线标识

0-下线 1-上线

login_type

设备登陆协议类型

1EDP 2nwx 3JTEXT 5JT808 6

MODBUS 7MQTT 8gr2010NB-IoT

cmd_type

命令响应的类型

1设备收到 cmd的 ACK 响应信息 2设备收到

cmd的 Confirm响应信息

cmd_id 命令 ID

msg_signatur

e 消息摘要

nonce 用于计算消息摘要的随机串

enc_msg 加密密文消息体对明文 JSON串(msg字段)的

加密

424 加密算法详述

平台基于 AES算法提供加解密技术具体阐述如下

EncodingAESKey 即消息加解密 Key 的 BASE64编码形式长度固定为 43

个字符从 a-zA-Z0-9共 62个字符中选取由服务开启时填写后

也可申请修改

AES密钥计算为 AESKey=Base64_Decode(EncodingAESKey + ldquo=rdquo)

EncodingAESKey 尾部填充一个字符的ldquo=rdquo 用 Base64_Decode 生成 32

个字节的 AESKey

AES采用 CBC 模式秘钥长度为 32 个字节(256位)数据采用

PKCS7填充 初始化 iv向量取秘钥前 16字节 PKCS7K为秘钥字

节数(采用 32)buf为待加密的内容N为其字节数Buf 需要被填

充为 K的整数倍在 buf的尾部填充(K-NK)个字节每个字节的内容

是(K- NK)具体详见toolsietforghtmlrfc2315

BASE64采用 MIME格式字符包括大小写字母各 26个加上 10个数

字和加号ldquo+rdquo斜杠ldquordquo一共 64个字符等号ldquo=rdquo用作后缀填

出于安全考虑平台网站提供了修改 EncodingAESKey的功能(在

EncodingAESKey 可能泄漏时进行修改对应上第三方平台申请时填写

的接收消息的加密对称密钥)所以建议保存当前的和上一次的

中移物联网有限公司 OneNET 开发文档中心

EncodingAESKey若当前 EncodingAESKey 生成的 AESKey解密失败则

尝试用上一次的 AESKey的解密

平台的加密消息部分为 enc_msg= Base64_Encode( AES_Encrypt

[random(16B)+msg_len(4B)+msg] )即以 16字节随机字节串拼接 4字

节表示消息体长度的字节串(此处 4 字节长度表示为网络字节序)再加

上消息本身的字节串作为 AES加密的明文再以 AES算法对明文进行加

密生成密文最后对密文进行 BASE64 的编码操作生成加密消息体

对加密消息体的解密流程为1)首先进行加密消息体的 BASE64 解码操作

aes_msg=Base64_Decode(enc_msg)2)对获取的解码内容以 AES 算法进行解密

操作获取明文部分plain_msg=AES_Decrypt(aes_msg)解密中使用的秘钥由

EncodingAESKey 计算得来使用的初始化 iv 向量为计算出的 aes 秘钥的前 16

字节3)去掉 plain_msg 的前 16 字节再以前 4 字节取出消息体长度根据消

息体长度获取真实的消息部分(推荐以消息体长度获取真实消息以兼容

plain_msg 未来可能出现的结构变更)表示加密传输的数据后两字段与明文

传输一致

43 API 接口

第三方开发平台应用层通过 Rsetful API 的方式和 OneNET平台进行交互对

接实现命令的下发数据的读写以及相关业务的交互

针对 MQTT 协议目前主要开发了以下 API 用来实现第三方开发平台向

OneNET平台请求读写执行以及设备管理请求具体见下表 4-2下面分别对每一

种 API进行说明

表4-2 API功能说明

API 类别 操作对象 API名称

需要终端响应 只需平台响应

设备

注册

更新设备注册属性

新增

更新

精确查询单个设备

中移物联网有限公司 OneNET 开发文档中心

模糊查询设备

批量查询设备状态

删除

数据流

新增

更新

查询单个数据流

查询多个数据流

删除

数据点

新增

查询

二进制数

新增

查询

触发器

新增

更新

查询单个触发器

模糊查询触发器

删除

触发数据内容

命令

发送命令

查询命令状态

查询命令相应

查询设备历史命令

视频能力 获取播放地址

APIKEY

新增

更新

查看

删除

消息订阅

按 Topic发送命令

查询订阅指定 Topic设备的列表

查询设备订阅的 Topic列表

删除产品的 Topic

查询产品的 Topic

中移物联网有限公司 OneNET 开发文档中心

432 设备

4321 注册

表4-3 设备注册

HTTP方法 POST

URL apihecloudscomregister_de

URL参数 register_code=6TM1OkhNsTjATvFx 设备注册码(必填)

HTTP内容

(示例)

sn 2015031401421 设备唯一标识 string类型最长 512字符

mac C89346DA4373 设备唯一 mac标识最长 32字符

title myedpdevice 设备名(可选) 最长 32个字符

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

keyQ1VdWoEvdkCye=d1=HcCSP6LvCw= 新设备 apikey

device_id 325018 设备 ID

说明

1 响应消息中 errno 表示错误码error 表示错误原因如果创建设备失

败则没有 data字段

2 snmac一定要必填其中一个而且只可以传一个用于鉴权就是设备

新增中的 auth_info

3 此接口根据产品设置的不同默认 allow_dup=true可以生成新设备及

key或获取原有设备及 key见下表

表4-4 对应表

产品允许重复 sn 在产品中已存在 sn 在产品中不存在

allow_dup=true 是 sn 对应的设备 id 和 key 新的设备 id 和 key

allow_dup=false 否 报错 新的设备 id 和 key

中移物联网有限公司 OneNET 开发文档中心

此接口返回的新设备默认设备名均为auto_register均为私有设

备设备协议与产品协议相同

4322 更新设备注册属性

表4-5 更新设备注册属性

HTTP方法 PUT

URL apihecloudscomregister_attr

HTTP头部 api-key xxxxddddsssaaa 必须为 masterkey

HTTP内容

(示例)

allow_dup true|false是否允许重复提交相同的设备 sn 默认 true

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

默认 allow_dup 为 true主要用于设备注册码创建设备属性限制

4323 新增

表4-6 新增设备注册属性

HTTP方法 POST

URL apihecloudscomdevices

HTTP头部 api-key xxxxddddsssaaa 必须为 masterkey

HTTP内容

(示例)

title mydevice 设备名

desc some description 设备描述(可选)

tags [chinamobile] 设备标签(可选可为一个或多个)

protocolMQTT 选择一种接入协议(可选默认为 HTTP)

location lon 106 lat 29 ele 370设备位置纬度

经度 高度(可选)

private true| false 设备私密性(可选默认为 ture)

auth_info 201503041a5829151 MQTT设备设备唯一编号

other version 100 manu china mobile 其他信息(可

选JSON格式可自定义)

HTTP响应响

应消息内容

(实例)

errno 0

error succ

data

中移物联网有限公司 OneNET 开发文档中心

device_id233444 平台分配的设备 ID

4324 更新

表4-7 更新

HTTP方法 PUT

URL apihecloudscomdevicesdevice_id

HTTP头部 api-key xxxxddddsssaaa masterkey或设备 apikey

HTTP内容

(示例)

title mydevice 设备名(可选)

desc some description 设备描述(可选)

tags [chinamobile] 设备标签(可选)

protocolMQTT 选择一种接入协议(可选)

location lon106 lat 29 ele 370设备位置经度

纬度 高度(可选)

private true| false 设备私密性(可选)

auth_info201503041a5829151 MQTT设备设备唯一编号(可选)

other version 100 manufacturer china mobile 其

他信息(可选)

HTTP响应响

应消息内容

(示例)

errno 0

error succ

中移物联网有限公司 OneNET 开发文档中心

4325 精确查询单个设备

表4-8 精确查询单个设备

HTTP方法 GET

URL apihecloudscomdevicesdevice_id

HTTP头部 api-key xxxxddddsssaaa masterkey 或设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

iddevice_id

tags [chinamobile]

onlinetrue|false

protocolMQTT

titlemy device1

descsome description

create_time2015-09-16 102222

privatetrue|false

locationele370lat17609lon17703

auth_infohellip

otherversion100manufacturerchina mobile

keys[titledevice-auto-keykey2JO3B12O1]

数据流

datastreams[

create_time 2014-10-23 202222

iddatastream_id1

unitcelsius

unit_symbolC

uuid 231a5aa9-9de4-5f2e-9e0f-015181c98429

]

4326 模糊查询设备

表4-9 模糊查询设备

HTTP方法 GET

URL apihecloudscomdevices

中移物联网有限公司 OneNET 开发文档中心

URL 参数

key_words=my 匹配关键字(可选从 id和 title字段中左匹配)

auth_info=203x1 鉴权信息(可选对应注册时的 sn参数唯一设

备编号)

tag=mobile 标签(可选)

online=true| false 在线状态(可选)

private=true| false 私密性(可选)

page=1 指定页码最大页数为 10000(可选)

per_page=30 指定每页输出设备个数默认 30最多 100(可选)

device_id=235122 指定设备 ID多个用逗号分隔最多 100个(可

选)

begin=2016-06-20 起始时间包括当天(可选)

end=2016-06-20 结束时间包括当天(可选)

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

total_count1

per_page30

page1

devices

[

id3497307

titlemy device1

desc device desc

privatetrue

protocolMQTT

onlinefalse

locationlon10655231191544001lat29535451246673

create_time2013-02-11 122233

auth_infoSYSz=8QY3r7aTQ48UKfqPnB=PybYRo=

]

4327 批量查询设备最新数据

表4-10 批量查询设备最新数据

HTTP方法 GET

中移物联网有限公司 OneNET 开发文档中心

URL apihecloudscomdevicesdatapoints

URL参数 devIds=1221122331123 设备 id用逗号隔开限制 1000 个设备

HTTP头部 api-key xxxxddddsssaaa masterkey 或设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

error ldquosuccrdquo

data

devices [

id 12323 设备 id

title daf设备名

datastreams

[

id temperature数据流名称

at 2017-02-12 102222数据流更新时间

value 12数据流最新数据

hellip

helliphellip

]

hellip

hellip

]

4328 删除

表4-11 删除设备

HTTP方法 DELETE

URL apihecloudscomdevicesdevice_id

HTTP头部 api-key xxxxddddsssaaa 可为设备级别的 Key

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

中移物联网有限公司 OneNET 开发文档中心

说明删除设备会删除该设备下所有数据流和数据点删除设备动作是异步

的系统会在后续逐步删除该设备下的数据流和数据点

433 数据流

4331 新增

表4-12 新增数据流

HTTP方法 POST

URL apihecloudscomdevicesdevice_iddatastreams

HTTP头部 api-key xxxxddddsssaaa masterkey 或设备 apikey

HTTP内容

(示例)

idtemperature 数据流名称 示例温度

tags[Tag1Tag2] 数据流标签(可选可以为一个或多个)

unitcelsius 单位(可选)

unit_symbolC 单位符号(可选)

HTTP响应响

应消息内容

(示例)

errno 0

data

ds_uuid 9e6bcac9-2c6f-59d5-adae-3955df2e7bce平台分配

数据流 UUID

error succ

4332 更新

表4-13 更新数据流属性

HTTP方法 PUT

URL apihecloudscomdevicesdevice_iddatastreamsdatastream_id

示例apihecloudscomdevices421240datastreamstemperature

HTTP头部 api-key xxxxddddsssaaa masterkey 或设备 apikey

HTTP内容

(示例)

tags[Tag1Tag2] 数据流标签(可选)

unitcelsius 单位(可选)

unit_symbolC 单位符号(可选)

HTTP响应响

应消息内容

(示例)

errno 0

error succ

中移物联网有限公司 OneNET 开发文档中心

4333 查询单个数据流

表4-14 查询单个数据流

HTTP方法 GET

URL apihecloudscomdevicesdevice_iddatastreams

URL参数 datastreams_ids = 查看的 datastream的 id

HTTP头部 api-key xxxxddddsssaaa masterkey 或该设备的设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

data [

update_at 2018-06-29 112938 数据流最后更新时

id 湿度 数据流名称

create_time 2018-06-28 170548数据流创建时间

current_value 53845013最新数据点

]

error succ

4334 查询多个数据流

表4-15 查询多个数据流

HTTP方法 GET

URL apihecloudscomdevicesdevice_iddatastreams

URL 参数

datastream_ids= 查看的 datastream的 id多个 id之间用英文逗号

分开(参数缺省时为查询所有数据流)

示例

apionenetcomdevices1234datastreamsdatastream_ids=tempgps

表示查看 temp和 gps两个数据流的信息

HTTP头部 api-key xxxxddddsssaaa masterkey 或者 该设备的设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data 数据流信息

[

idtemperature 数据流名称设备范围内唯一

tags[Tag1Tag2] 数据流标签

unitcelsius 单位

unit_symbolC单位符号

create_timexxxx-xx-xx 102222 创建时间

中移物联网有限公司 OneNET 开发文档中心

current_valuehellip该数据流下数据点最新值

update_atxx-xx-xx该数据流下数据点最新上传时间

]

[

idhumi 数据流名称设备范围内唯一

tags[Tag1Tag2]

unit_symbol

create_timexxxx-xx-xx 102222

current_valuehellip

update_atxx-xx-xx

]

[]

4335 删除

表4-16 删除数据流

HTTP方法 DELETE

URL apihecloudscomdevicesdevice_iddatastreamsdatastream_id

URL参数 无

HTTP头部 api-key xxxxddddsssaaa masterkey 或者设备 key

HTTP响应响

应消息内容

(示例)

errno 0

error succ

434 数据点

4341 新增

中移物联网有限公司 OneNET 开发文档中心

表4-17 新增数据点

HTTP方法 POST

URL apihecloudscomdevicesdevice_iddatapoints

URL参数 type=3 上传数据类型(可选默认为完整 JSON型见 HTTP内容示

例)

HTTP头部 api-key xxxxddddsssaaa masterkey 或者 设备 apikey

HTTP内容

(示例)

datastreams

[

id temperature 数据流名称或数据流模板名称

datapoints [

at 2013-04-22T003543 上传数据点时间可选如

果为空则设备云会取当前时间如果存在其格式必须为 YYYY-MM-

DDThhmmss的形式(例如2015-03-22T223112)

value 42 上传数据点值

at 2013-04-22T005543

value 84 上传数据点值

]

id key 数据流名称或数据流模板名称

datapoints [

at 2013-04-22T003543上传数据点时间可选

value hellip上传数据点值

at 2013-04-22T003543

value hellip上传数据点值

]

hellip

]

中移物联网有限公司 OneNET 开发文档中心

HTTP 响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

1 可以一次性向设备云上传多个数据流每个数据流中可以包括多个数据

点示例程序表示向设备云上数据流 temperature 和数据流 key上传数据其中

temperature数据流有两个数据点key数据流也有两个数据点

2 如果某个数据流不存在则在增加数据点时设备云会自动创建一个新

的数据流注意新数据流的 datastream id 不可为空

3 数据点表示在某个时刻该数据流的值其 at表示时间为可选字段如

果为空则设备云会取当前时间如果存在其格式必须为YYYY-MM-DDThhmmss

的形式(例如2015-03-22T223112)

4 数据点中的 value表示具体的值其值为 JSON对象可以为整型浮点

型字符串多种类型如果 value部分用双引号括起来则其在设备云存储为字

符串如果不用双引号括起来则其表示数值字符编码现在只支持 UTF-8

5 数据点对应的时间是数据点的标识的一部分相同时间的两个数据点

设备云会同时对这两个相同时间的数据点进行保存不会出现覆盖另一个数据点

的情况一般如果 at 部分取空设备云会取系统时间精度为毫秒如果在一

条命令中某一个数据流包含多个数据点都没有 at 字段设备云将会对所有数据

点进行保存

6 新增数据点支持如下简写方式在请求的 URL中增加 type字段指示所

使用的格式类型目前 type支持 345三种情况

URLapihecloudscomdevices2214570datapointstype=3

示例temperature225humidity952

表示在数据流 temperature中增加一个数据点 225在 humidity 中增加一

个数据点 952

URLapihecloudscomdevices2214570datapointstype=4

示例temperature2015-03-22T223112225

表示在数据流 temperature中加一个数据点在 2015年 3月 22 日 22点 31

中移物联网有限公司 OneNET 开发文档中心

分 12秒的值为 225

URLapihecloudscomdevices2214570datapointstype=5

示例temperature2015-03-22T223112225pm2589

表示在数据流 temperature中加一个数据点即 2015年 3月 22 日 22点 31

分 12秒的值为 225在数据流 pm25中添加一个数据点即当前时间的值为 89

4342 查询

表4-18 查询数据点

HTTP方法 GET

URL apihecloudscomdevicesdevice_iddatapoints

URL 参数

datastream_id=abc 查询的数据流多个数据流之间用逗号分隔

(可选)

start=2015-01-10T080035 提取数据点的开始时间(可选)

end=2015-01-10T080035 提取数据点的结束时间(可选)

duration=3600 查询时间区间(可选单位为秒)

start+duration按时间顺序返回从 start开始一段时间内的数据点

end+duration按时间倒序返回从 end回溯一段时间内的数据点

limit=100 限定本次请求最多返回的数据点数0ltnlt=6000(可选

默认 1440)

cursor= 指定本次请求继续从 cursor位置开始提取数据(可选)

sort=DESC | ASC 值为 DESC|ASC时间排序方式DESC倒序ASC升

序默认升序

ltnlt=6000(可选默认 1440)

HTTP头部 api-key xxxxddddsssaaa masterkey 或者 该设备的设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

cursor70921_3771908_1472355096

datastreams[

idtemperature数据流名称或数据流模板名称

datapoints[

at xxxx-xx-xx 102222value42数据点上传时间和

at xxxx-xx-xx 102222value84

]

中移物联网有限公司 OneNET 开发文档中心

idkey 数据流名称或数据流模板名称

datapoints[

at xxxx-xx-xx 102222valuehellip

atxxxx-xx-xx 102222valuehellip

]

hellip

]

1 若不携带任何参数平台返回本设备所存在的所有数据流中的最新数据

(这一种情况下查询时出现时延较大的性能问题建议在 URL 参数中加上

newadd参数并将其值赋为 true如 newadd=true)

2 若不携带数据流 id参数携带 limit 参数时会返回该设备每个数据流

最多 limit 条数据

3 若要查看某一条数据流数据需在上述 URL中增加参数 datastream_id

4

apihecloudscomdevices564280datapointsdatastream_id=tempamplimit

=10会返回数据流temp中最近的 10个数据点

5 要查看某一条数据流在某个时间范围内的数据可以在增加 start和 end

参数

示例

apihecloudscomdevices564280datapointsdatastream_id=temper

atureampstart=2013-05-12T171233ampend=2013-06-12T172233 表示查询本设

备对应的数据流在 2013 年 5 月 12 日 17 点 12 分 33 秒到 17 点 22 分 33 秒的数

据点注意如果 start 参数存在end参数不存在表示取 start后的所有数据

如果 start 不存在end 存在设备云会忽略 end参数注意日期时间格式格

式必须为示例中的格式YYYY-MM-DDThhmmss例如2013-05-12T171233

日期和时间之间用大写字母 T 分隔start 和 end 之间的时间间隔最大为 1 年

超过一年会忽略

如果指定了 start 参数则可能返回的数据点的数目会很多此时默认会返

回最多 100 个数据点可以使用 limit 参数设定返回多少个数据点最大为

6000个数据点当实际的数据点数目多于 limit 限定的数目时返回的 json串

中移物联网有限公司 OneNET 开发文档中心

中会有一个 cursor 字段下一次请求的命令行中可以携带此 cursor 字段表示接

着遍历本数据流此 cursor字段标识上次取出数据点后下一个数据点的位置

435 二进制数据

4351 新增

将二进制数据将作为数据点保存到设备下的某个数据流中设备云返回该二

进制数据的索引号

表4-19 新增二进制数据

HTTP方法 POST

URL apihecloudscombindata

URL参数 device_id=421590 数据所属设备(必选)

datastream_id=bin 该数据所属已经存在的数据流(必选)

HTTP头部 api-key xxxxddddsssaaa masterkey 或者该设备的设备 key

HTTP 内 容

(示例)

普通二进制数据文件图像等

(最大限制为 800上传时间间隔需大于 1ms)

HTTP响应响

应消息内容

(示例)

errno 0

error succ

data

index3491506_1475204886914_bin 二进制数据索引号

4352 查询

表4-20 查询二进制数据

HTTP方法 GET

URL apihecloudscombindataindex

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

普通二进制数据文件图像等二进制形式数据

436 触发器

4361 新增

表4-21 新增触发器

HTTP方法 POST

中移物联网有限公司 OneNET 开发文档中心

URL apihecloudscomtriggers

HTTP头部 api-key xxxxddddsssaaa 必须为 masterkey

HTTP内容

(示例)

titlewen du jian kong 设备名(可选)

ds_idgps 数据流名称(id)(可选)

dev_ids[10272345615523] 设备 ID(可选)

ds_uuids[ 数据流 uuid(可选)

9ad09uac-7446-512f-b07c-90jdnzj8120ad

4599436e-7146-5349-b07c-79fa0919cs62

]

urlxxbbcom

typegt | gt= | lt | lt= | == | inout | in | out |change | frozen |

live

threshold100 阙值根据 type不同见以下说明

1) type 为gt|gt=|lt|lt=|==时threshold必须为数值

2) type为 inout时threshold 设置为lolmt40 uplmt52 表示

数据流的值首次进入或离开闭区间[4052]时触发

3) type为 change时threshold 参数不用传递当上传的值有改变时触发

告警

4) type为 frozen时threshold 为数值指定距离最后一次数据上报多少

秒内未上报数据触发告警同时被监控对象进入 frozen状态

5) type 为 live 时threshold 为数值指定距离最后一次数据上报多少秒

后上报数据触发告警

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

tirgger_id233444 触发器 ID

说明

1触发器的含义是当指定范围内的数据点满足触发条件的要求时会向

url参数指定的地址发送 post请求

2触发器有三种工作触发模式

1)在请求参数中单独指定了 ds_id不包括其他参数那么当前项目下

中移物联网有限公司 OneNET 开发文档中心

所有设备的数据流中数据流名称符合 ds_id 的数据都会进入触发判断逻辑

2)在请求参数中单独指定了 ds_uuids 数组那么只有这些指定的数据

流会进入触发判断逻辑

3)在请求参数中指定了 ds_id 和 dev_ids那么只有这些指定的设备的

数据流会进入触发判断逻辑

4362 更新

表4-22 更新触发器属性

HTTP方法 PUT

URL apihecloudscomtriggerstirgger_id

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP内容

(示例)

titlewen du jian kong

ds_uuids[

9ad09uac-7446-512f-b07c-90jdnzj8120ad

4599436e-7146-5349-b07c-79fa0919cs62

]

urlxxbbcom

typegt | gt= | lt | lt= | == | inout | in | out | exp | change |

frozen | live

threshold100

注若要修改 type需要对应设置 threshold

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

4363 查询单个触发器

表4-23 查询单个触发器

HTTP方法 GET

URL apihecloudscomtriggerstirgger_id

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

idtrigger_id1

中移物联网有限公司 OneNET 开发文档中心

titlewen du jian kong

ds_uuids[

datastream1_uuidrdquo

datastream2_uuidrdquo

datastream3_uuidrdquo

]

urlxxbbcom

typegt|gt=|lt|lt=|==|in|out|exp|change|frozen|live

threshold100

invalidtrue 触发器是否已失效

create_timexx-xx-xx 102222

4364 模糊查询触发器

表4-24 模糊查询触发器

HTTP方法 GET

URL apihecloudscomtriggers

URL 参数

title=name 指定触发器名称

page=1 指定页码可选

per_page=10 指定每页输出个数可选默认 10最多 100

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

total_count600

per_page30

page1

triggers[

idtrigger_id1

titlewen du jian kong

ds_uuids

[datastream1_uuidrdquo datastream2_uuidrdquo]

urlxxbbcom

typegt|gt=|lt|lt=|==|in|out|exp|change|frozen|live

threshold100

invalidtrue 触发器是否已失效

create_timeXXXXXXXX

中移物联网有限公司 OneNET 开发文档中心

]

说明触发器失效是指触发器所依赖的数据流或者设备被删除了此时触发

器永远不会有效触发事件

4365 删除

表4-25 删除触发器

HTTP方法 DELETE

URL apihecloudscomtriggerstirgger_id

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno 0

error succ

4366 触发数据内容

触发数据是指当 OneNET 设备云判断某个触发器的触发条件满足时会通过

POST方式向外抛出的 URL请求在 HTTP的 POST消息体中会携带如下格式的 JSON

字符串

表4-26 触发器内容

数据内容

(示例)

trigger

id1

threshold90

typegt

current_data[

dev_id2656

ds_idgps

ds_uuidFWEF-ZFW-ZFW-ZFWW

at2009-09-07T121602001403Z

value100

dev_id2656

ds_idtemper

中移物联网有限公司 OneNET 开发文档中心

ds_uuidFEWEF-ZFWFWW-WFWW-FWEFFWW

at2009-09-07T121602001403Z

value882

]

437 命令

命令是指应用发送命令数据给 OneNET设备云再由 OneNET设备云转发给终

端设备终端设备收到命令后可以向设备云反馈响应的一种工作机制命令下发

后应用可以通过 API查询命令状态和提取命令的响应数据

命令的执行步骤如下

1应用通过 API 向设备云发送命令数据

2设备云生成该命令的 uuid作为该命令的唯一标识并向应用返回同时向

终端设备转发命令数据

3 终端设备收到命令数据后执行命令数据可以生成响应也可以不响应

4设备云跟踪记录命令的响应如果设备有响应就关联命令 uuid和响应

结果

5应用通过 API 向设备云提取命令执行结果(API 请求中携带命令 uuid 标

识)

特别说明

命令下发到终端设备后如果终端设备 10 秒内未收到响应则此命令的状

态将被设置为超时应用通过 API 查询命令状态时会反馈超时超过 10 秒后

收到的响应会被丢弃

终端设备针对同一条命令回复多条命令响应只有在未超时时间内收到的最

后一条是有效响应前面的响应包将会被覆盖因此终端设备应该对每个命令只

有一个响应包

4371 发送命令

表4-27 发送命令

HTTP方法 POST

URL apihecloudscomcmds

URL 参数 device_id=415120 接收该数据的设备 ID(必选)

中移物联网有限公司 OneNET 开发文档中心

qos=0 | 1 是否需要响应默认为 0

0不需要响应即最多发送一次不关心设备是否响应

1需要响应如果设备收到命令后没有响应则会在下一次设备登陆

时若命令在有效期内(有效期定义参见 timeout参数)则会继续发送

对响应时间无限制多次响应以最后一次为准

本参数仅当 type=0时有效

timeout=300 命令有效时间默认 0

0在线命令若设备在线下发给设备若设备离线直接丢弃

gt0 离线命令若设备在线下发给设备若设备离线在当前时间

加 timeout时间内为有效期有效期内若设备上线则下发给设备单

位秒有效围0~2678400

本参数仅当 type=0时有效

type=0 | 1 默认 00发送 CMD_REQ包1发送 PUSH_DATA包

HTTP头部 api-key xxxxddddsssaaa masterkey或者设备 apikey

HTTP内容 用户自定义数据jsonstring二进制数据(小于 64K)

HTTP响应响

应消息内容

(示例)

errno 0

error succ

data

cmd_uuid2302-312-FWs 命令 id

4372 查询命令状态

表4-28 查询命令状态

HTTP方法 GET

URL apihecloudscomcmdscmd_uuid

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno 0

error succ

data

status1

0设备不在线|Device not online

1命令已创建| Command Created

2命令已发往设备| Command Sent

3命令发往设备失败| Send Command Failed

4设备正常响应| Command Response Received

5命令执行超时| Command Response Timeout

6设备响应消息过长 | Command Response Too Large

descldquosendingrdquo

中移物联网有限公司 OneNET 开发文档中心

4373 查询命令响应

表4-29 查询命令响应

HTTP方法 GET

URL apihecloudscomcmdscmd_uuidresp

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP 响应响

应消息内容

用户设备返回的响应内容

4374 查询设备历史命令

表4-30 查询设备历史命令

HTTP方法 GET

URL apihecloudscomcmdshistoryltdevice_idgtltdevice_idgt

URL 参数

start=2015-01-10T080035 查询的开始时间(可选)

end=2015-01-10T080535 查询的结束时间(可选)

page=1 指定页码最大页数为 10000(可选)

per_page=30 指定每页输出设备个数默认 30最多 100(可选)

HTTP头部 api-key xxxxddddsssaaa

HTTP响应响

应消息内容

errno 0

error succ

data

page 1当前页码

per_page 10当前每页总数

total_count 100

items [

cmd_uuid 2302-312-FWs

device_id 2设备 ID

expire_time 2016-07-05 000000过期时间

status 0命令状态

send_time 2016-07-05 000000发送时间

confirm_time 2016-07-05 000000响应时间

confirm_body 2463726571007b202274797022 响应内容

16进制字符

body 2463726571007b202274797022请求内容16进制字符

hellip

中移物联网有限公司 OneNET 开发文档中心

hellip

]

438 视频能力

4381 获取播放地址

表4-31 获取播放地址

HTTP方法 GET

URL apihecloudscomipcrtmp_address

URL 参数

device_id= 接收该数据的设备 ID(必填)

channel_id = 对应数据流名称中的 channelnum

protocol_type = 播放协议类型 0rtmp1hls2http-flv

HTTP头部 api-key xxxxddddsssaaa masterkey或者设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

errorrdquosuccrdquo

ldquodatardquo

addripport

accessTokenldquo字符串rdquo

439 APIKEY

4391 新增

表4-32 新增 APIKEY

HTTP方法 POST

URL apihecloudscomkeys

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP内容

(示例)

title sharing key key 的命名

permissions [

resources [ 被授权的资源

中移物联网有限公司 OneNET 开发文档中心

dev_id 424 被授权的设备 id

dev_id 425 被授权的设备 id

hellip

hellip

]

access_methods [ 被授权的命令

get

put

post

]

]

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data key2302-312-FWs key_string

说明授权命令是可选的另外被授权的命令也可以是 getputpost 的

一个或几个如只授权 get和 put命令

access_methods [getput]

4392 更新

表4-33 更新 APIKEY

HTTP方法 PUT

URL apihecloudscomkeyskey_string

HTTP头部 api-key xxxxddddsssaaa masterkey(注只能为 master-key)

HTTP内容

(示例)

title sharing key key 的命名

permissions [

resources [ 被授权的资源

dev_id 424 被授权的设备 id

ds_idfan1 数据流 id可选

中移物联网有限公司 OneNET 开发文档中心

dev_id 425 被授权的设备 id

ds_idfan1 数据流 id可选

hellip

hellip

]

access_methods [ 被授权的命令可选

get

put

post

]

]

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

说明

1对于 masterkey 不允许更新操作masterkey 默认具有最大权限可以访

问该用户名下所有设备所有数据

可以进行 POSTGETPUTDELETE操作如果更新 master key 系统会返回

失败

2授权命令是可选的另外被授权的命令也可以是 getputpost 的一个

或几个如只授权 get和 put命令

access_methods [getput]

3API key 更新是覆盖操作会将原来存在的授权资源和授权命令覆盖不

会保留原来的授权资源和授权命令

4393 查看

中移物联网有限公司 OneNET 开发文档中心

表4-34 查看 APIKEY

HTTP方法 GET

URL httpapihecloudscomkeys

URL 参数

key = FWJPO-FZFHW-FFEWB可选只查看该 key相关信息

page = 1 指定页码 可选

per_page = 10 指定每页输出个数可选默认 10最多 100

device_id = xxbbcc可选只查看与该设备相关的非 master-key

HTTP头部 api-key xxxxddddsssaaa masterkey(注只能为 master-key)

HTTP响应响

应消息内容

(示例)

errno 0

data

per_page 30

total_count 2

keys [

create_time 2015-11-04 142552

title Auto-generated-master-key

key 03GeDLYk0WNk1V338g7yndKZYkQA

create_time 2015-12-03 100041

permissions [

resources [

dev_id 564280

]

]

title 设备 1测试 Key

key vuHebEWefiU2Ueo5ouoCc1CUsYQ=

]

page 1

error succ

中移物联网有限公司 OneNET 开发文档中心

4394 删除

表4-35 删除 APIKEY

HTTP方法 DELETE

URL httpapihecloudscomkeyskey_string

HTTP头部 api-key xxxxddddsssaaa masterkey(注只能为 master-key)

HTTP 响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

4310 消息订阅

43101 按 Topic 发送命令

表4-36 按 Topic 发送命令

HTTP方法 POST

URL apihecloudscommqtt

URL参数 topic=xxx 设备订阅的主题(必选)

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP 内 容

(示例)

HTTP响应响

应消息内容

(示例)

errno0

errorldquosuccrdquo

data

total_count1

per_page30

page1

devices [123123433333]

43102 查询订阅指定 Topic设备的列表

表4-37 查询订阅制定 Topic设备的列表

HTTP方法 GET

URL apihecloudscommqtttopic_device

URL 参数

topic=xxx 设备订阅的主题(必选)

page=1 当前页码 必填大于等于 1

per_page=10 每页 必填范围 1-1000

中移物联网有限公司 OneNET 开发文档中心

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP内容

(示例)

HTTP响应响

应消息内容

(示例)

errno0

errorldquosuccrdquo

data

total_count1

per_page30

page1

devices [123123433333]

43103 查询设备订阅的 Topic列表

表4-38 查询设备订阅的 Topic列表

HTTP方法 GET

URL apihecloudscommqttdevice_topicdevice_id

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno0

errorldquosuccrdquo

data

[topic_name1 topic_name2 topic_name3]

43104 删除产品的 Topic

表4-39 删除产品的 Topic

HTTP方法 DELETE

URL apihecloudscommqtttopic

URL参数 name=xxx topic名(必选)

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno0

errorldquosuccrdquo

中移物联网有限公司 OneNET 开发文档中心

43105 查询产品的 Topic

表4-40 查询产品的 Topic

HTTP方法 GET

URL apihecloudscommqtttopic

URL参数 无

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno0

errorldquosuccrdquo

data

[topic_name1topic_name2topic_name3]

中移物联网有限公司 OneNET 开发文档中心

第五章 接入实例

51 MQTT-device 接入

511 工具下载

为方便开发人员直观感受使用 mqtt 协议进入平台的便利可使用平台提供

的 MQTT 设备模拟器进行接入平台请在首页-gt开发文档-gt资源下载-gt13 调试

工具下载进行下载如下图

图5-1 资源下载

下载地址

httpupfileshecloudscom123ueditor201707125d5bc37eca39c0c5b7a5bcb9

0e451eeerar

中移物联网有限公司 OneNET 开发文档中心

512 界面说明

图5-2 界面说明

513 使用方法

5131 创建产品

如 323 的过程在设备接入协议中选择 MQTT

中移物联网有限公司 OneNET 开发文档中心

图5-3 选择连接协议

5132 创建设备

如 323描述在平台上新建一个设备

5133 建立连接

在产品概况中可以查看产品 ID此信息填入模拟器 ProductID一栏如下图

图5-4 产品ID

在平台上进入设备信息页面可查看设备 ID及鉴权信息(此鉴权信息是新建设备时候填

写的鉴权信息)如下图

中移物联网有限公司 OneNET 开发文档中心

图5-5 设备ID及鉴权信息

相应把设备 ID及鉴权信息填入模拟器之中然后点击连接按钮如果未弹出提示对话

框则表示设备鉴权成功如下图

图5-6 连接成功

中移物联网有限公司 OneNET 开发文档中心

5135订阅与发布

演示本操作需要在 OneNet平台建立两个基于 MQTT协议的设备一个用于消息发布

另一个用于消息订阅

图5-7 设备状态

开启两个模拟器分别模拟以上两个设备然后建立连接

首先使用订阅主题打开第一个模拟器模拟消息订阅者

图5-8 订阅主题

其次发布主题打开第二个模拟器模拟消息发布者

中移物联网有限公司 OneNET 开发文档中心

图5-9 发布主题

经过以上两个操作后查看模拟消息订阅者的模拟器则收到了主题

为rdquotopic_namerdquo的消息如下图

中移物联网有限公司 OneNET 开发文档中心

图5-10 收到的主题

5136接收平台指令

建立连接后模拟器也可接收来自平台的指令具体操作如下

先打开模拟器-gt建立连接-gt选中【[OneNet]平台指令接收】选项栏利用平台下发指

令功能下发如下图平台下发指令

图5-11 平台发送命令

中移物联网有限公司 OneNET 开发文档中心

图5-12 下发指令

填写好将要发送的消息后点击【发送命令】按钮则模拟器成功接收到来自平台的

数据如下图模拟器截图

图5-13 模拟器收到的指令

5137上传数据点

Mqtt支持 Json 数据格式上报数据现根据 Json几种格式举一些例来演示怎么利用

模拟器上传数据

1)使用 Json数据 Type1上传 Json数据

datastreams[idtemperaturedatapoints[value255]]

中移物联网有限公司 OneNET 开发文档中心

如下模拟器上传数据界面

图5-14 Type1数据格式

则在平台数据展示中则可看到上传的数据点

图5-15 收到数据展示

2)使用 Json数据 Type3示例 Json数据为

temp32humi98

模拟器发送数据截图

中移物联网有限公司 OneNET 开发文档中心

图5-16 Type3数据格式

平台数据展示截图

图5-17 数据展示

3)使用 Json数据 Type4示例 Json数据为

temperature233pm2589

模拟器上传数据截图

中移物联网有限公司 OneNET 开发文档中心

图5-18 Type5数据格式

平台接收数据展示截图

图5-19 数据展示

52 基于麒麟开发板的 MQTT 接入实例

OneNet 平台为使用户能快速接入发布麒麟座开发板官网提交您的创意免

费申请开发板下面利用麒麟座开发板 V31 演示开发板采集温湿度使用 MQTT发

送到平台的接入流程

开发板申请链接httpsopeniot10086cneventdetail185html

521 搭建开发环境

OneNET 平台提供的麒麟座开发板是基予 STM32 单片机开发的一块功能应用

板开发板包含 MCU温湿度传感器GSM 模块WIFI 模块电源模块键盘

中移物联网有限公司 OneNET 开发文档中心

LED以及 lcd显示接口等满足用户对平台接入的基本需求能快速接入到平台

资料包配备完整工程代码方便工程移植等使用

目前 STM32 开发常用的 IDE 有 IARMDK 等我挑选 MDK 作为开发工具打

开工具包先安装 MDK511A安装完毕后再安装 MDKCM511A开发板所有资料软件

工具包下载案例包

案例包下载链接

httpspanbaiducoms1UB1qZGrVuovSVdbqqXP0Lglistpath=2F

图5-20 MDK包

安装完毕并安装 license详细步骤不做演示

中移物联网有限公司 OneNET 开发文档中心

522 连接硬件准备

5221 开发板接线

图5-21 开发板接线图

电源DC-5V

运行信息USART1-MicroUSB 线

软件下载ST-Link

中移物联网有限公司 OneNET 开发文档中心

5222 ESP8266跳线帽连接

图5-22 ESP8266跳线帽连接

中移物联网有限公司 OneNET 开发文档中心

5223 M6312跳线帽连接

图5-23 M6312跳线帽连接

523 工程实例

例程使用最简单易懂的方式编写着重让大家明白接入流程和协议

10~12 协议专属例程是展示该协议下的专用功能比如 EDP 的 PushData

中移物联网有限公司 OneNET 开发文档中心

HTTP 注册新设备MQTT 的订阅发布等具体使用方法查看该目录下的《使用

说明》

图5-24 工程文件

524 开发工程文件

中移物联网有限公司 OneNET 开发文档中心

图5-25 工程文件

图5-26 工程结构

默认已创建好产品以及设备打开文件工程 onenetc 和 esp8266c 修改例

程的 WIFI 信息和平台信息

分别在 esp8266c 的 36和 onenetc的 414345行

图5-27 更改项

525 编译下载

开发版接串口会有相应状态显示平台设备显示在线状态绿色为连接成功

设备在线灰色表示未连接并在数据展示中显示对应主题的所有数据

中移物联网有限公司 OneNET 开发文档中心

图5-28 连接成功

图5-29 收到数据

其他实例详情请见httpsopeniot10086cnbbsthread-1266-1-1html

中移物联网有限公司 OneNET 开发文档中心

第六章 MQTT 协议详解

61 设备与平台通信协议包格式

协议就是通信双方的一个约定即表示第 1字节传输的什么第 2字节

传输的什么helliphellip在 MQTT协议中一个 MQTT 数据包由固定头(Fixed

header) 可变头(Variable header) 消息体(payload)三部分构成

MQTT 数据包结构固定头部+可变头部+消息体

固定头(Fixed header)存在于所有 MQTT数据包中表示数据包类型及

数据包的分组类标识固定头格式如下

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 - 5 Remaining Length(该字段占用 1-4个字节)

目前平台版本支持的 Packet Type如下

名字 值 流向 描述

CONNECT 1 C-gtS 客户端请求与服务端建立连接

CONNACK 2 S-gtC 服务端确认连接建立

PUBLISH 3 CS 发布消息

PUBACK 4 CS 收到发布消息确认

PUBREC 5 CS 发布消息收到

PUBREL 6 CS 发布消息释放

PUBCOMP 7 CS 发布消息完成

SUBSCRIBE 8 C-gtS 订阅请求

SUBACK 9 S-gtC 订阅确认

UNSUBSCRIBE 10 C-gtS 取消订阅

UNSUBACK 11 S-gtC 取消订阅确认

PING 12 C-gtS 客户端发送 PING(连接保活)命令

PINGRSP 13 S-gtC PING命令回复

DISCONNECT 14 C-gtS 断开连接

可变头(Variable header)存在于部分 MQTT 数据包中数据包类型决定

了可变头是否存在及其具体内容

消息体(Payload)存在于部分 MQTT 数据包中表示客户端收到的具体内

中移物联网有限公司 OneNET 开发文档中心

不同类型数据包中可变头和消息体包含关系如下

消息类型 Variabl

e

Header

Payloa

d

CONNECT 有 有

CONNACK 有 有

PUBLISH 有 有

PUBACK 有 无

PUBREC 有 无

PUBREL 有 无

PUBCOMP 有 无

SUBSCRIBE 有 有

SUBACK 有 有

UNSUBSCRIBE 有 有

UNSUBACK 有 无

PING 无 无

PINGRSP 无 无

DISCONNECT 无 无

62 平台支持数据包类型

621 CONNECT(客户端请求与服务端建立连接 client -gt server)

固定头(Fixed Header)

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 - 5 Remaining Length(该字段占用 1-4个字节)

MQTT Packet Type 值为 0001表示该数据包为请求连接数据包

Remaining Length 剩余长度占 1-4字节

可变头(Variable Header)

包含内容如下

Description 7 6 5 4 3 2 1 0

byte

1-2

ProtocolNa

me Length

0 0 0 0 0 0 0 0

0 0 0 0 0 1 0 0

byte

3

lsquoMrsquo 0 1 0 0 1 1 0 1

byte

4

lsquoQrsquo 0 1 0 1 0 0 0 1

中移物联网有限公司 OneNET 开发文档中心

byte

5

lsquoTrsquo 0 1 0 1 0 1 0 0

byte

6

lsquoTrsquo 0 1 0 1 0 1 0 0

Byte

7

Protocol

Level

0 0 0 0 0 0 0 1

Byte

8

Connect

Flag

Use

r

flag

Passwo

rd

flag

WillReta

in

Flag

WillQo

s Flag

WillFl

ag

CleanSessi

on

Flag

Reser

ve

Byte

9-10

KeepAlive

(1) 版本

Protocol Level 必须设置为 4平台只支持协议版本 v 311不支持更老

的版本使用第三方客户端时需要注意选择正确的版本

(2) user flag 与 password flag

平台不允许匿名登陆因此这两个标志位在连接时必须设置为 1否则认为

协议错误平台将会断开连接

(3) Will flag 与 WillretainflagWillQosFlag

Will flag 为 0时WillQosFlag 和 WillRetainFlag 必须为 0Will Flag

为 1时WillQosFlag 只能为 012

1当该设备下一次正常上线后服务器会清除之前的 will 消息(包括

retain 消息)

2如果设备上线时设置了 Will Topic 和 msg且将 WillRetainFlag 设

置为 1只有设备异常断开后服务器才会将该 Will msg 分发给新的 Will

Topic 的订阅者且 Qos 级别以订阅的 Request qos 级别为准

3如果设备上线时设置了 Will Topic 和 msg且将 WillRetainFlag 设

置为 0服务器不会存储该消息当设备异常断开后会将该 Will msg 以设

备设置的 WillQosFlag的 Qos级别进行分发

(4) CleanSessionFlag

若客户端将 clean session 标志位设置为 0当其断开后平台将会保存

sessionsession 需保持的内容包含

客户端订阅的 topic列表

中移物联网有限公司 OneNET 开发文档中心

还未完成确认的 Qos1Qos2级别的 publish消息

客户端保存 session 的内容包含

已经发送到服务端的但还没有收到确认的 Qos1Qos2消息列表

待发送的 Qos0列表

若客户端将 clean session 标志位设置为 1当其断开后平台会清除设备

的订阅列表及未完成确认的 Qos1Qos2 的 publish消息

(5) Reserve

保留位置 0

(6) KeepAlive 保活时间

每个客户端可自定义设置连接保持时间最短 120秒最长 65535 秒

消息体(Payload) Description 是否必须存在 格式

Field1 Client

Identifier

是 2字节字串长度 + utf8字

Field2 UserName 是 2字节字串长度 + utf8字

Field3 UserPassword 是 2字节字串长度 + utf8字

目前平台支持的方式为以后两种

方式 1设备 ID项目 ID鉴权信息(auth_info)

字段设置 消息示例

client_id设置为平台创建设备时的

设备 id

username设置为ldquo项目 IDrdquo

password设置为ldquo鉴权信息

(auth_info)rdquo

client_id=rdquo123rdquo

username=rdquo433223rdquo

password=rdquo注册的鉴权信息rdquo

各字段说明如下

鉴权信息(auth_info)在平台申请设备时填写设备的 auth_info 属性(数

字+字母的字符串)该属性需要产品内具备唯一性(可使用设备出厂唯一编号)

方式 2设备 ID + APIKey(项目 ID也需要填写)

字段设置 消息示例

client_id设置为平台创建设备时的

设备 ID

username设置为ldquo项目 IDrdquo

client_id=rdquo123rdquo

username=rdquo433223rdquo

password=Api Key

中移物联网有限公司 OneNET 开发文档中心

password设置为ldquoAPI鉴权信息

(auth_info)rdquo

项目 ID在平台添加项目时平台生成的 ID

APIKey在平台上创建产品时生成的 APIKey

连接包实例如下

Send one mqtt packet

FixHeader

PacketTag = 16

PacketType = 1

RemainLength = 34

VariableHeaderConnect

protocol_name_len_= 4

protocol_name_= MQTT

protocol_level_= 4

connect_flag_= 192

keep_alive_= 12000

client_id_len_= 8

client_id_= 34764813

usr_name_len_= 6

usr_name_= 150295

password_len_= 4

password_= push

MQTT0x10 0x22 0x00 0x04 0x4D 0x51 0x54 0x54 0x04 0xC0 0x2E 0xE0 0x00 0x08 0x33

0x34 0x37 0x36 0x34 0x38 0x31 0x33 0x00 0x06 0x31 0x35 0x30 0x32 0x39 0x35 0x00

0x04 0x70 0x75 0x73 0x68

Send One Packet Succ

中移物联网有限公司 OneNET 开发文档中心

622 CONNACK (服务端确认连接建立)

Fixed Header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type = 2 0 0 0 0

byte2 - 5 Remaining Length(该字段占用 1-4个字节)

Variable Header

Description 7 6 5 4 3 2 1 0

byte 1 Acknowledge Flags 0 0 0 0 0 0 0 Sp

byte 2 Return Code x x x x x x x x

Sp Session Present Flagsession信息在服务器已保持置 1未保存置

0

返回码说明

返回码 描述

0 成功

1 协议版本错误

2 非法的 clientid

3 服务不可用

4 用户名或密码错误

中移物联网有限公司 OneNET 开发文档中心

5 非法链接(比如 token非法)

失败

如果 connect包不符合协议内容约束则直接断掉连接而不需要发送 conn

ack包

如果鉴权或授权失败回复一个带非 0错误码的 connack包

成功

必须断掉重复的 clientid

执行 cleansession 对应的操作

必须回复一个 connack回复码为 0

开始消息传递并加入 keepalive的监视

PS客户端需要等到服务端的 connack报文才能发送后续的数据包

623 PUBLISH(发布消息 client -gt server)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type DUP f

lag

QoS Level RETAI

N

byte2 - 5 Remaining Length(该字段占用 1-4 个字节)

DUP

QoS2Qos1如果为 0则表示是第一次发送该包如果为 1则表示

为重复发送的包

Qos0DUP 必须为 0

中移物联网有限公司 OneNET 开发文档中心

QoS 指定了该 publish包的 Qos 等级如下

Qos 值 Bit2 Bit1 描述

0 0 0 最多发送一次

1 0 1 至少发送一次

2 1 0 只发送一次

RETAIN 保留标志位如果为 1服务器存储最新一条 RETAIN消息以便

分发给新的订阅者如果 RETAIN为 1Payload 为空服务器分发该消息后会

清空该 topic 下的 RETAIN 消息

PS该版本实现了 Qos0Qos1Qos2

Variable Header

Description 格式 是否必须

Field1 TopicName 2 字节字串长度 + utf8字

Field2 PacketIdent

ifier

2 字节 QoS0否QoS1Qos2是

Payload

内容根据不同业务自定义

624 PUBLISH(发布消息 server -gt client)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type DUP f

lag

Qos Level RETAIN

byte2 - 5 Remaining Length(该字段占用 1-4个字节)

DUP

Qos2QoS1如果为 0则表示是第一次发送该包如果为 1则表示

为重复发送的包

中移物联网有限公司 OneNET 开发文档中心

Qos0DUP 必须为 0

QOS 指定了该 publish包的 qos等级如下

Qos 值 Bit2 Bit1 描述

0 0 0 最多发送一次

1 0 1 至少发送一次

2 1 0 只发送一次

RETAIN如果服务器分发的消息是 RETAIN 消息则将该标志位置 1否则置

0

PS该版本实现 Qos0Qos1Qos2其中服务器分发消息的 Qos级别是以 Clien

t-gtServer 发送的 publish 包的 qos 等级为准非订阅的 topic 的 Qos 等级R

etain 消息是以订阅的 Request Qos 级别进行推送

VariableHeader

Description 格式

Field1 TopicName 2 字节字串长度 + utf8字

Payload

内容根据不同业务自定义

625 PUBACK(收到发布消息确认)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

中移物联网有限公司 OneNET 开发文档中心

626 PUBREC(发布消息收到)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

627 PUBREL(发布消息释放)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

628 PUBCOMP(发布消息完成)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

中移物联网有限公司 OneNET 开发文档中心

byte 1~

2

PacketIdentifier PacketIdentifier

629 SUBSCRIBE(订阅请求)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

Payload

Description 格式

Byte1~

n

TopicName 2 字节字串长度 + utf8字

Byten+

1

Request Qos 服务质量要求(只能为 0

12)

topic 说明

可以包含一个或多个 topic

topic必须是数字英文反斜杠()的组合目前不支持通配符

每个客户端最多订阅 100个 topic

以下 topic 被系统保留使用(客户端不能订阅)

类型 说明

$开头 平台保留

中移物联网有限公司 OneNET 开发文档中心

6210 SUBACK(订阅确认)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

Payload

Description 7 6 5 4 3 2 1 0

byte 1 retcode

返回码说明

返回码 描述

0x00 成功(granted qos = 0)

0x01 成功(granted qos = 1)

0x02 成功(granted qos = 2)

0x80 失败

6211 UNSUBSCRIBE(取消订阅)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

中移物联网有限公司 OneNET 开发文档中心

Payload

Description 格式

Byte1~

n

TopicName 2 字节字串长度 + utf8字

可以包含一个或多个 topic

6212 UNSUBACK(取消订阅确认)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

6213 PING(客户端发送 PING(连接保活)命令)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

NULL NULL

注PING命令无 VariableHeader

中移物联网有限公司 OneNET 开发文档中心

6214 PINGRSP(PING命令回复)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

NULL NULL

注PINGRSP无 VariableHeader

6215 DISCONNECT(断开连接)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

NULL NULL

注DISCONNECT无 VariableHeader

中移物联网有限公司 OneNET 开发文档中心

第七章 设备开发流程

71 连接鉴权

Device Onenet

(Connect)鉴权请求

(ConnAck)鉴权结果

加载session

鉴权

图7-1 连接鉴权

设备向平台发起 connect 请求connect 中携带鉴权信息具体

参见(报文格式参考 621)

平台拿到鉴权信息进行鉴权

鉴权通过后如果 cleansession=0 平台将会加载保存的设备

的一些信息如订阅列表(621中描述)

如果 cleansession=1 设备没有保存信息在平台则不加载设

备相关信息

返回鉴权结果 ConnAck(报文格式参考 621)

72 消息发布

721 数据点上报

设备使用 publish 报文来上传数据点 报文格式如下

中移物联网有限公司 OneNET 开发文档中心

VariableHeader

Field 名称 说明 格式

Field1 TopicName=rdquo$dprdquo $dp 为系统上传数据点

的指令

2字节字串长度 + utf8

字串

Payload

Payload包含真正的数据点内容支持的格式如下

Byte 1 Bit0-5数据类型指示目前支持

Type = 1

Type = 2

Type = 3

Type = 4

Type = 5

Type = 6

Type = 7

Bit6-7 flags 根据具体类型不同意义

Type6Type7这两种需要填写时间戳的数据类型

如果填入了时间戳则须将 bit7 置 1否则置 0(即

忽略数据类型说明中的日期时间相关字段)

0 0 0 0 0 0 0 1

Byte 2 根据数据类型指示不同

Byte n

中移物联网有限公司 OneNET 开发文档中心

数据类型 1(type == 1)格式说明

数据类型 2(type == 2)格式说明

Byte 1 数据点类型值1 1JSON 格式 1 字符串 0 0 0 0 0 0 0 1

Byte 2 指示后面 json 字符串长度

固定两字节长度高位字节值为 0x00

Byte 3 固定两字节长度低位字节值为 0x41

Byte 4

ldquodatastreamsrdquo[ 可以同时传递多个数据流

ldquoidrdquordquotemperaturerdquo

ldquodatapointsrdquo[数据流可以有多个数据点

rdquoatrdquordquo2013-04-22 222222rdquo可选

rdquovaluerdquo 365用户自定义

]

ldquoidrdquordquolocationrdquo

ldquodatapointsrdquo[hellip]

hellip

]

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

Byte n

Byte 1 数据点类型指示type=2 二进制数据 0 0 0 0 0 0 1 0

Byte 2 指示后面 json 字符串长度

固定两字节长度-高位字节值为 0x00

Byte 3 固定两字节长度-低位字节值为 0x10

Byte 4

rdquods_idrdquordquoimagerdquo 创建数据流时定义的 ID(必填)

ldquoatrdquordquo2014-10-25 122323rdquo 时间(可选)

rdquodescrdquo字符串或 json 对象对该数据的描述(可选)

hellip

Byte n

Byte n+1 指示后面二进制数据长度

固定四字节长度-第 1 字节(最高)值为 0x00

Byte n+1 固定四字节长度-第 2 字节值为 0x00

Byte n+2 固定四字节长度-第 3 字节值为 0x01

Byte n+3 固定四字节长度-第 4 字节(最低)值为 0x00

Byte n+4 该域目前最大支持 3M

中移物联网有限公司 OneNET 开发文档中心

数据类型 3(type == 3)格式说明

数据类型 4(type ==4)格式说明

hellip 本例中的该域 256 字节数据

Byte n+260

Byte 1 数据点类型指示type=3 JSON 格式 2 字符串 0 0 0 0 0 0 1 1

Byte 2 指示后面字符串长度

固定两字节长度高位字节值为 0x00

Byte 3 固定两字节长度低位字节值为 0x46

Byte 4 通用格式

ldquodatastream_id1rdquordquovalue1rdquo

ldquodatastream_id2rdquordquovalue2rdquo

hellip

示例

ldquotemperaturerdquo225rdquohumidityrdquordquo952rdquo

hellip

hellip

hellip

hellip

Byte n

Byte 1 数据点类型指示type=4 JSON 格式 3 字符串 0 0 0 0 0 1 0 0

Byte 2 指示后面字符串长度

固定两字节长度高位字节值为 0x00

Byte 3 固定两字节长度低位字节值为 0x46

Byte 4 通用格式

ldquodatastream_id1rdquoldquodatetime1rdquordquovalue1rdquo

ldquodatastream_id2rdquo ldquodatetime2rdquordquovalue2rdquo

hellip

示例

ldquotemperaturerdquoldquo2015-03-22 223112rdquo225

hellip

hellip

hellip

hellip

Byte n

中移物联网有限公司 OneNET 开发文档中心

数据类型 5(type == 5)格式说明

数据类型 6(type == 6)格式说明

Byte 1 数据点类型指示type=5 自定义分隔符 0 0 0 0 0 1 0 1

Byte 2 指示后面字符串长度

固定两字节长度高位字节值为 0x00

Byte 3 固定两字节长度低位字节值为 0x41

Byte 4 消息中最前面两字节为用户自定义的域中分隔符和域间分隔符

这两个分隔符不能相同比如采用逗号作为域中分隔符分号作

为域间分隔符的格式如下

feild0feild1hellipfeildn

其中每个 field 格式支持 3种

field 格式 1 3 个子字段分别是数据流 ID时间戳数据值

通用格式

Datastream_iddatetimevalue

field 格式 2 2 个子字段分别是数据流 ID 和数据值省略时

间戳通用格式

Datastream_idvalue

field 格式 3 1 个子字段省略了数据 ID 和时间戳只传输数

据值平台将用该域(feild)所在的位置号(从 0 开始)作为数据

流 ID通用格式

value

示例

(1)temperature2015-03-22

223112225102pm258910

(2)temperature2015-03-22

223112225102pm258910

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

Byte n

Byte 1 数据类型指示type=6 带时间自定义分隔符 0 0 0 0 0 1 1 0

Byte 2 年(后两位)例如 2016 年则该字节为 16 0 0 0 1 0 0 0 0

Byte 3 月(1-12)

Byte 4 日(1-31)

Byte 5 小时(0~23)

Byte 6 分钟(0~59)

Byte 7 秒(0~59)

Byte 8 指示后面字符串长度

固定两字节长度高位字节值为 0x00

Byte 9 固定两字节长度低位字节值为 0x41

Byte 10 消息中最前面两字节为用户自定义的域中分隔符和域间分隔符

具体格式见 type=5 说明若相关域中没有时间戳则采用本类

hellip

中移物联网有限公司 OneNET 开发文档中心

数据类型 7(type == 7)格式说明(每次最多 500个数据流的浮点数)

hellip 型的默认时间戳当作数据点的时间来存储

Byte n

Byte 1 Bit0-5 数据类型指示type=7 可离散浮点数数据流

Bit6保留置 0

Bit7 时间指示位1携带 6字节时间

1 0 0 0 0 1 1 1

Byte 2 年(后两位)例如 2016 年则该字节为 16 0 0 0 1 0 0 0 0

Byte 3 月(1-12)

Byte 4 日(1-31)

Byte 5 小时(0~23)

Byte 6 分钟(0~59)

Byte7 秒(0~59)

Byte 8 数据流名称(取值范围 1-65535)

高位字节值为 0x00

Byte 9 低位字节值为 0x01

Byte10 数据流个数(取值范围 1-500)

高位字节值为 0x00

Byte11 低位字节值为 0x01

Byte 10 4 字节 float 类型低位在前高位在后

Byte 11

Byte 12

Byte 13

Byte n 数据流名称(取值范围 1-65535)

高位字节值为 0x24

Byte n+1 低位字节值为 0x37

Byte n+2 数据流个数(取值范围 1-500)

高位字节值为 0x01

Byte n+3 低位字节值为 0x00

Byte n+2 4 字节 float 类型低位在前高位在后

Byte n+4

Byte n+5

Byte n+6

中移物联网有限公司 OneNET 开发文档中心

7211 Qos0(Client-gtServer)

Device OneNet

Publish $dp(Qos0)

存储

图7-2 QoS连接图

设备发布 Qos0 消息(上报数据点)

平台收到上报数据点后保存起来

7212 Qos1(Client-gtServer)

Device OneNet

Publish $dp(Qos1)

存储

PubAck

图7-3 Qos1连接图

设备发布 Qos1 消息(上报数据点)

中移物联网有限公司 OneNET 开发文档中心

平台收到上报数据点后保存起来

平台给设备回复相应的 PubAck (报文格式参考 625)

7213 Qos2(Client-gtServer)

Device OneNet

Publish $dp(Qos2)

存储

PubRec

PubRel

PubComp

图7-4 Qos2连接图

设备发布 Qos2 消息(上报数据点)

平台收到上报数据点后保存起来

平台给设备回复相应的 PubRec报文

设备需回复平台 PubRel报文如超时不回平台则会断开相应连接

平台给设备回复 PubComp报文

注数据点上报功能不支持 Retain 特性

中移物联网有限公司 OneNET 开发文档中心

722 平台命令(下发amp回复)

7221 命令下发

平台使用 publish 报文来下发平台指令 报文格式如下

FixHeader

参考 623

VariableHeader

Field 名称 说明 格式

Field1 TopicName=rdquo$creqcmduuidrdquo $creq为系统下发

Cmd 的 指 令

cmduuid为该条指

令的 uuid

2字节字串长度 +

utf8字串

Payload

Payload包含真正的指令内容

72211 Qos0(Server-gtClient)

DeviceOneNet

Publish $creq(Qos0)

图7-5 Qos0命令下发

命令下发

平台向设备发送 topic为$creq的消息(该 topic为平台命令)

中移物联网有限公司 OneNET 开发文档中心

设备收到 topic 为$creq 的 topic 时需将其作为平台下发的指令来处

注目前命令下发以 Qos0级别进行推送

7222 命令回复

设备使用 publish 报文来回复平台指令 报文格式如下

FixHeader

参考 623

VariableHeader

Field 名称 说明 格式

Field1 TopicName=rdquo$crspcmduuidrdquo $crsp为系统处理

设备回复 cmd 的

指令cmduuid为

该条指令的 uuid

2字节字串长度 +

utf8字串

Payload

Payload包含真正回复的指令内容

72221 Qos0(Client-gtServer)

DeviceOneNet

Pulish $crsp(Qos0)

图7-6 Qos0下发命令

中移物联网有限公司 OneNET 开发文档中心

72222 Qos1(Clientlt-gt Server)

DeviceOneNet

Pulish $crsp(Qos1)

Puback

图7-7 Qos1下发命令

如果设备回复响应时以 Qos1回复则平台需要给设备回复一个 Puback 报文

72223 Qos2(Clientlt-gt Server)

DeviceOneNet

Pulish $crsp(Qos2)

PubRec

PubRel

PubComp

图7-8 Qos2下发命令

如果设备回复响应时以 Qos2回复则

1平台需回复设备一个 PubRec报文

中移物联网有限公司 OneNET 开发文档中心

2设备在收到 PubRec后需向平台回复 PubRel报文

3平台收到 PubRel 报文后向设备回复 PubComp报文

73 创建 Topic

Device OneNet

HTTP 请求

HTTP 响应

图7-9 创建Topic

设备通过发送 HTTP请求进行 topic 的创建操作

平台收到请求后创建 topic 并返回结果

请求及响应定义如下

HTTP方法 POST

URL httpapihecloudscommqtttopic

HTTP头部 api-keyxxxx-ffff-zzzzz必须 master key

URL参数

HTTP body

内容

ldquonamerdquordquoxxxxxxrdquo topic 名字只能由英文下划线反斜杠组成最长

1024个字符同一产品下 topic name 不重复

成功返回

errno 0

errorldquosuccrdquo

说明 每个产品最多 100个 topic

中移物联网有限公司 OneNET 开发文档中心

74 订阅

Device OneNet

Subscribe

Suback

更新设备订阅列表

图7-10 订阅

设备发起订阅请求(报文格式参考 629)

平台收到请求后更新 topic列表

平台给设备回复 SubAck (报文格式参考 6210)

注subscribe 的 request qos级别可以为 012

75 取消订阅

Device OneNet

UnSubscribe

UnSuback

更新设备订阅列表

图7-11取消订阅

中移物联网有限公司 OneNET 开发文档中心

设备发起取消订阅请求 (报文格式参考 6211)

平台收到请求后更新 topic 列表

平台给设备回复 UnSubAck (报文格式参考 6212)

76 推送设备 Topic

761 Publish 报文推送

Qos0设备使用 Qos 级别为 0的 Publish报文来进行推送

Device OneNet

Publish(Qos0)

Device

以Qos0 Publish到订阅设备

图7-12 Qos0推送

设备发起推送 topic请求(以 Qos0级别)

平台收到请求后将 topic以 Qos0级别推送到相关订阅设备(支持离线设

备推送)

平台不返回 PubAck或 PubRec 等报文

Qos1

设备使用 Qos级别为 1的 publish报文来推送 Topic

中移物联网有限公司 OneNET 开发文档中心

Device OneNet

Publish(Qos1)

PubAck

Device

以Qos1 Publish到订阅设备

设备回复平台 PubAck

图7-13 Qos1发布

设备发起推送 topic请求(以 Qos1级别)

平台收到请求后将 topic以 Qos1级别推送到相关订阅设备(支持离线设

备推送)

平台返回 PubAck 报文

Qos2

设备使用 Qos级别为 2的 publish报文来推送 Topic

中移物联网有限公司 OneNET 开发文档中心

Device OneNet

Publish(Qos2)

PubRec

Device

以Qos2 Publish到订阅设备

PubRec

PubRel

PubComp

PubRel

PubComp

图7-14 Qos2推送

设备发起推送 topic请求(以 Qos2级别)

平台收到请求后回复 PubRec报文

设备收到 PubRec后需回复 PubRel报文 (如超时不回复平台会断开与设

备的连接)

平台收到 PubRel 报文后回复 PubComp 给设备

平台在回复 PubComp 后会以 Qos2 级别推送到相关订阅设备(支持离线设

备推送)

设备需回复 PubRec报文 (如超时不回复平台会断开与设备的连接)

平台发送 PubRel 报文给设备

设备需回复 PubComp(发布完成)

Publish报文的格式如下

FixHeader

参考 623

中移物联网有限公司 OneNET 开发文档中心

VariableHeader

Field 名称 说明 格式

Field1 TopicName 填写设备订阅的 topic 2字节字串长度 + utf8

字串

Payload

Payload为设备自定义内容

762 HTTP 请求推送

Device OneNet

HTTP 请求

HTTP 响应

Device

Publish到订阅设备

图7-15 HTTP请求

设备以 HTTP 的方式发起推送 topic 请求

平台收到请求后将 topic推送到相关订阅设备 (目前只支持在线推送)

平台返回推送结果

请求及响应定义如下 HTTP方法 POST

URL httpapihecloudscommqtt

HTTP头部 api-keyxxxx-ffff-zzzzz必须 master key

URL参数 topic=ldquoXXXXXXrdquo必选在发送 mqtt协议的 topic 必填

HTTP body内容 用户自定义 Json 或二进制数据(小于 64K)

成功返回

errno 0

errorldquosuccrdquo

中移物联网有限公司 OneNET 开发文档中心

77 离线 Topic

推送 Topic只针对在线设备进行 topic 消息的推送离线设备不会收到订阅

的 topic 的消息离线 Topic则会将该消息推送给在线以及离线设备

1 如果设备在上线时设置了 clean session flag服务端会删除其订阅的

topic及相关的离线 topic消息

2 如果设备没有设置 clean session flag如果有与该设备相关的离线

topic消息则在鉴权成功后将离线消息推送给设备

3 遗嘱消息(will msg)只会推送给订阅了该 will topic的在线的设备离

线设备不会收到

4 离线消息的有效期默认为 2 天(暂不支持用户设定有效期)服务器只会

推送在 2天内的最近 10 条消息

78 数据点订阅

数据点订阅同一产品下的设备可以订阅其他设备的数据点订阅的 topic

格式为deviceid数据流名称即

被关注的设备在上传了该数据流名称的数据点后订阅了该 topic的其他设备都

会收到上传的数据点

1 AB设备的 deviceid分别为 92779278

2 A 设备订阅了名为92789527 的 topic(9278 为设备 B 的 id9527 为 B

设备上传的数据流名称)

3 B 设备上传了名为 9527的数据流(数据点为 11 1578hellip)

4 A 设备会收到多条(取决于设备 B 上传的数据点的个数)推送的 topic 名

为92789527 的 publish消息消息的 payload中则包含设备 B 上传的数据

注目前支持订阅的数据点的类型为 Type1~Type7(详见 721节)

中移物联网有限公司 OneNET 开发文档中心

第八章 常见问题 FAQ

用户在基于 OneNET 平台进行产品开发的过程中可能会遇到各种各样的问

题开发过程中遇到的问题一方面可以参考 OneNET 文档中心的文档或者本文

档前几个章节的内容另一方面用户可以参考本章节总结的常见问题希望这些

文档能对用户在开发过程中有一定的指导和帮助

本章将分三个小节对用户在开发产品过程中可能遇到的问题进行梳理分别

为终端设备接入 OneNET平台的常见问题API调用的常见问题和 OneNET平台

的能力

81 终端设备接入 OneNET 平台的常见问题

序号 问题描述 原因分析 解决方法

1

2

3

4

5

6

7

82 API 调用的常见问题

序号 问题描述 原因分析 解决方法

1

2

3

4

5

6

7

8

9

中移物联网有限公司 OneNET 开发文档中心

83 使用 OneNET平台遇到的常见问题

序号 问题描述 原因分析 解决方法

1

2

3

4

5

6

7

8

Page 9: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com

中移物联网有限公司 OneNET 开发文档中心

4) 建立设备连接

通过 1)2)中的参数(一般为产品 ID+鉴权信息+设备 ID)生成连接报文

发送连接报文建立终端与 2)中新建设备的一一对应关系

5) 发送数据报文

按照连接协议生成数据报文发送至平台

6) 创建应用

7) 使用平台下发命令接口或者 API向设备发送指令

22 应用开发流程图

应用开发主要是通过 Rsetful API 的方式实现和 OneNET 平台进行交互对

接在您完成产品创建以及硬件接入后即可根据相关所接入的硬件设备以及所

上传的数据进行相关产品的开发

OneNET 平台提供的应用开发 API分为需要终端响应和只需 OneNET 平台

响应两类下面分别用两个流程图描述这两类 API 的开发流程图 2-2为需

要终端响应的 API 调用流程其中虚线部分只有离线命令的读写下发命令才

有该流程图 2-3为只需平台响应的 API 调用流程

在应用开发平台调用 API 之前 必须与 OneNET 平台建立连接建立连

接的过程和 API 调用流程一并在图中进行了标注

中移物联网有限公司 OneNET 开发文档中心

图2-2 需要终端响应的API流程

终端设备 OneNET平台 应用开发平台

1配置应用开发地址Token等参数

2向应用开发平台发起URLampToken验证

3解析验证请求参数返回验证消息

应用平台与OneNET平台已经建立连接

4调用API指令HTTP请求

5返回平台侧执行结果错误代码和uuid

6API指令执行完毕

图2-3 不需要终端响应的API流程

终端设备 OneNET平台 应用开发平台

1配置应用开发地址Token等参数

2向应用开发平台发起URLampToken验证

3解析验证请求参数返回验证消息

应用平台与OneNET平台已经建立连接

4调用API指令HTTP请求MQTT请求

5返回平台侧执行结果错误代码和uuid

6相应指令请求返回数据 推送数据及执行结果给应用平台

7API指令执行完毕

中移物联网有限公司 OneNET 开发文档中心

第三章 终端设备接入 OneNET 平台流程

终端设备与 OneNET 平台进行数据交互需经过公网到达平台根据 OneNET

平台与网络运营商的关系终端设备智能网关OneNET平台以及第三方应用四

者的网络关系可归纳如图 3-1所示

图3-1 终端设备与服务器网络关系

图 3-1 中终端设备或智能网关设备与 OneNet 平台使用 TCPIP 建立网络连

接使用 MQTT协议进行与平台进行数据通信

31 终端设备接入 OneNET 平台前的准备工作

311 硬件准备

设备终端接入 OneNET平台的通信方式也是多种多样的比较常用的有 GPRS

无线 WIFI以太网口GPRS 方式需要 GPRS 模块和 SIM 卡的支持无线 WIFI 模

块需要 WIFI 模块支持WIFI 模块推荐选用 ESP8266 串口 WIFI 模块GPRS 模块

推荐选用 SIM900A模块

312 软件准备

设备终端接入 OneNET 平台使用 MQTT 协议使用嵌入式设备需移植 SDK

到 MCU详见麒麟发开板接入实例

中移物联网有限公司 OneNET 开发文档中心

32 终端设备接入 OneNET 平台步骤

321 OneNET 平台创建产品及设备

3211 注册用户账号

进入 OneNET官网(httpsopeniot10086cn)点击首页右上角的ldquo注

册rdquo按钮注册用户账号

OneNET 支持ldquo个人用户rdquo和ldquo企业用户rdquo两种注册方式你可以根据您的

实际情况选择注册方式

以个人用户注册为例用户需在对应选项依次填写用户名用户密码所在

地手机号码图片验证码以及手机验证码并完成注册注册页面如图 3-2所

示注册完成后回到主页点击ldquo登录rdquo即可进入 OneNET 的官方主页并由

此进入到你的ldquo开发者中心rdquo

如果客户产品后续需要进行规模化量产建议以企业的名义进行注册注册

时注意注册信息的准确填写另外个人版和企业版在功能上无差异

图3-2 用户账号注册页面

3212 创建产品和设备

在进入到你的ldquo开发者中心rdquo后点击右上角的 ldquo创建产品rdquo在弹出页面中

按照提示填写产品的基本信息进行产品创建在创建过程中请您按照提示尽

可能完整全面地填写相应内容这样更方便您后期对产品进行管理

创建产品页面如图 3-3 和图 3-4其中设备接入方式选择ldquo公开协议rdquo联网

方式选择跟据实际设备进行选择设备接入协议选择ldquoMQTTrdquo

中移物联网有限公司 OneNET 开发文档中心

产品创建完成后页面弹出ldquo创建产品成功rdquo如图 3-5所示点击ldquo立即

添加设备rdquo显示如图 3-6所示界面依次填写ldquo设备名称rdquo鉴权信息设备

名称自定义鉴权信息用于平台对终端设备鉴权每台设备具有唯一性建议设

置为产品出厂编号方便管理鉴权信息需写入设备

图3-3 创建产品页面

中移物联网有限公司 OneNET 开发文档中心

图3-4 创建产品页面

图3-5 创建产品成功页面

中移物联网有限公司 OneNET 开发文档中心

图3-6 添加设备页面

322 终端设备软硬件初始化

终端设备在上电以后需要完成设备的软硬件初始化硬件初始化包括各个

硬件模块的上电处理器的寄存器初始化工作模式初始化等等软件初始化包

括基础通信套件初始化应用接口初始化应用程序初始化等等

323 终端创建设备及资源

终端设备创建设备(device_id)配置产品 ID鉴权信息注册码连接

服务器 IP端口号等信息创建成功后与平台建立登陆连接连接成功后即可向

平台上报数据点

324 登录 OneNET平台

终端设备的基础通信套件完成初始化以及设备资源创建完成后可向

OneNET平台发送登陆请求返回登录结果如果参数错误或者登录超时平台会

返回登录失败如果验证通过平台会返回登录成功

若终端设备登录平台成功设备名称左边的圆形图标会由灰色(离线状态)

变成绿色(在线状态)如图 3-7所示

中移物联网有限公司 OneNET 开发文档中心

图3-7 平台侧设备状态显示

325 设备数据点上报

终端设备与平台成功建立连接后设备使用 publish 报文向平台上报数据点

平台收到数据点后保存到对应数据流下方便应用查阅数据点上报格式以及类型详见

721

图3-8 平台侧收到设备数据流显示

326 创建应用

用户可以利用上传的数据创建相关的应用发布直观的展示页面目前在平台应用孵化

器中提供了曲线图柱状图表盘物体位置图片和开关等应用

在产品详情页面点击ldquo应用管理rdquo进入应用管理主界面如下图

中移物联网有限公司 OneNET 开发文档中心

图3-9 应用管理模块

点击ldquo创建应用rdquo输入应用名称点击ldquo创建rdquo如下图

图3-10 新应用创建

保存成功后点击编辑按键进入应用编辑页面如下图

中移物联网有限公司 OneNET 开发文档中心

图3-11 应用编辑入口

图3-12 应用编辑界面

在应用编辑页面中使用左侧的控件进行应用编辑此例中我们选择表盘控件来显示

刚刚上传的数据点击表盘控件如下图所示

中移物联网有限公司 OneNET 开发文档中心

图3-13 表盘控件添加

在右侧的属性中选择设备以及数据源(及刚刚上传的数据流)如下图

图3-14 表盘控件数据流绑定

在确定好数据流之后可以看到表盘回显示成我们添加的数据的值其他的

刷新频率以及表盘显示样式读者可以自行更具需求加以修改

完成应用编辑之后点击右上角保存按钮退出应用编辑

在应用管理页面点击该应用即可查看编辑好的应用页面

中移物联网有限公司 OneNET 开发文档中心

图3-15 保存应用

图3-16 应用查看与分享

该应用可以通过共享ldquo发布链接rdquo的方式将该应用共享给他人

33 设备批量接入

单个设备可以通过平台的开发者中心添加设备的方式进行创建若用户有多

个设备直接与平台 TCP连接的终端通过手动添加需耗费大量时间人力OneNET

中移物联网有限公司 OneNET 开发文档中心

为大批量接入用户提供 3种批量创建设备的方案

331 平台设备批量复制

此种方式为选择某个设备作为复制的模板通过导入 EXCEL的方式进行设备

复制厂商可以在小批量测试时使用该功能

在设备列表中点击查看详情

图3-17 设备批量接入

在设备详情页面点击批量导入设备信息

中移物联网有限公司 OneNET 开发文档中心

图3-18 导入设备信息

点击批量复制

图3-19 批量复制

中移物联网有限公司 OneNET 开发文档中心

目前提供三种批量创建的方式 excel 导入的方式为主要接入方式选择

excel导入点击下载模板

图3-20 快速导入

图3-21 Excel导入

打开下载下来的 excel模板表中的 titledesctags等均为将要批量导

入的设备的数据其中的 title 和 auth_info 为必填选项title 为设备名

中移物联网有限公司 OneNET 开发文档中心

auth_info对应设备的鉴权信息

图3-22 Excel格式

填写 3个设备信息

图3-23 Excel内容

三个设备的 title和 auth_info都一样均为 20170808000012017080800002

2017080800003保存该表格点击ldquo点击上传rdquo上传保存好的 excel 文件

点击ldquo确定导入批量rdquo

中移物联网有限公司 OneNET 开发文档中心

图3-24 导入上传

图3-25 确认创建

可以看到在原设备目录下新增了 3个设备其名称分别为 2017080800001

20170808000022017080800003

中移物联网有限公司 OneNET 开发文档中心

图3-26 批量创建的设备

点击设备详情可以看到设备目录下各个设备的鉴权信息与表格中所填

写的内容一致

图3-27 设备ID及鉴权信息

至此完成了通过批量设备复制的方式完成设备批量创建的过程用户如果

要使用这个功能需要将自己终端的出厂序列号整理到这个 excel表中然后利

中移物联网有限公司 OneNET 开发文档中心

用上传表格的方式进行批量创建

332 应用平台调用新增设备 API

OneNET 提供了创建设备的 API接口

图3-28 新增设备API接口

其中的 auth_info 参数对应着设备的鉴权信息通过调用此 API 接口可以

实现在平台上新增设备的功能用户如果有自己的第三方应用平台进行设备管理

可以通过多次调用此接口的方式进行设备的批量创建在调用接口时需要确保每

次调用的 auth_info 参数对应着自己的每一个终端不同的出厂序列号

333 终端调用注册 API

API 实际是 HTTP 协议的通信协议终端也可以通过封装 HTTP 包发送注册

中移物联网有限公司 OneNET 开发文档中心

设备请求的方式调用 API

终端调用注册 API 创建设备并接入的流程如图 3-29所示

平台

TCP连接协议接入机

创建产品

发送连接报文

连接应答

数据应答

发送数据报文

生成连接报文

设备

发送下行命令 下发命令

解析下行命令

生成存储数据报文

解析连接应答

解析数据应答

必要流程

可选流程

存储到数据流 数据源 创建应用

心跳应答

发送心跳报文生成心跳报文

解析心跳应答

平台操作

设备操作

利用设备本身的sn和产品的设备注册码生成注册报文

TCP连接API服务器

发送注册报文

注册应答

解析设备ID

创建设备

设备开机

读取硬件中烧录的设备编号(sn)

图3-29 终端调用注册API接入流程

1) 创建产品

重要参数产品 ID注册码产品 APIKey(见附录一)

2) 生成并发送注册报文

每一个用户终端中都有厂商烧录的唯一出厂序列号(sn)终端上电

之后应该首先读取自己的 sn然后通过 1)中的注册码和 sn 一起组成注

册报文

注册报文格式如下例

POST httpapihecloudscomregister_deregister_code=6TM7OkhNsTjATvFx HTTP11

Host apihecloudscom

Content-Length 48

中移物联网有限公司 OneNET 开发文档中心

sn02136616511001titletestdevice0001

其中

6TM7OkhNsTjATvFx 为产品注册码

02136616511001 是本例中模拟的设备唯一编号

testdevice0001 是本例中模拟的设备名

若上传的数据格式以及参数鉴权均正确则平台会返回设备创建成功

返回设备 ID以及该设备对应的设备 api-key

HTTP11 200 OK

Date Wed 09 Aug 2017 064821 GMT

Content-Type applicationjson

Content-Length 95

Connection keep-alive

Server Apache-Coyote11

Pragma no-cache

errno0datadevice_id11142371keyq9Mw0zqiAPjTwqfyCk2mWrUi8=errorsucc

3) 在步骤 2)完成之后平台上的设备就已经成功创建了终端需要

重新 TCP连接到对应协议的服务器上完成设备连接(与设备进行映射)以

及上传数据的操作

34 设备 ID 与产品序列号

通过 OneNET构建的物联网系统中有两套比较重要的编码设备 ID与产品序列号

(SN)其中

产品序列号是由厂商指定的在厂商的产品范围内是保持唯一的在出厂前烧写到每

一个终端中通常包含在与平台通信的数据中并以条形码的方式贴在产品的包装上用

于从用户的角度区分每一个独立的终端

设备 ID是在平台创建设备时由 OneNET分配的平台范围内唯一的编号应用于第三

方平台调用 OneNET API时使用

在创建设备时OneNET平台需要用户以设备 sn为参数进行设备创建成功之后平

台会分配一个设备 ID这样 OneNET内部就有了一个 sn-设备 ID的映射关系

终端登陆使用的鉴权信息是出厂时烧写好的 sn鉴权通过之后平台可以将该终端

上传是数据放到对应的设备中

上层应用通过创建设备 API或者查询设备 API建立 sn-设备 ID映射表在需要操作

某一设备时首先可以获取的是终端的 sn号(因为对用户是可见的)通过映射表获取设

中移物联网有限公司 OneNET 开发文档中心

备 ID然后再通过 API访问 OneNET平台上的对应设备

两套编码在物联网系统中的应用位置如下图所示

物联网应用

OneNET

终端

(烧写sn)

HTTP API 以设备ID为参数进行API访问

接入协议以sn为鉴权参数进行设备连接

设备

设备名

设备ID

设备sn

设备标签

sn 设备ID

snmdash设备ID映射表

中移物联网有限公司 OneNET 开发文档中心

第四章 第三方应用开发

第三方应用与 OneNET 平台的业务逻辑关系如图 4-1 所示第三方应用与

OneNET平台之间通过 HTTPS请求应答的方式实现数据交互OneNET 平台为第三

方应用提供封装好的 API 接口应用平台通过调用这些 API 接口完成对 OneNET

平台的读写执行以及设备管理请求然后 OneNET 平台会将相应的指令请求发送

到终端设备OneNET 平台收到终端设备响应的数据及设备信息后会将数据及

设备信息推送到应用平台完成应答

下面将分别介绍第三方应用接入 OneNET 平台的步骤OneNET平台提供的数

据推送功能以及 OneNET 平台为第三方应用封装好的 API接口

图4-1 第三方应用与OneNET平台的逻辑关系

41 第三方应用接入 OneNET 平台

第三方应用与 OneNET平台实现数据交互的前提是已经建立连接第三方应

用接入 OneNET平台的开发流程如图 4-2所示包括三个步骤

(1) 在 OneNET 平台创建了设备该设备有对应的真实设备且能正常上报

数据

(2) 用户已经开发并部署了 OneNET平台验证接入的程序

(3) 在 OneNET 平台正确配置了第三方应用数据接收的地址(URL)

Token以及其他参数

中移物联网有限公司 OneNET 开发文档中心

在确保上述第(1)步已经实现的基础上下面将分别讲述第(2)步和第

(3)步的实现过程

图4-2 数据推送的开发流程

412 第三方应用平台接入验证程序

第三方应用平台接入验证程序工作流程如下所述当 OneNET 平台完成对第

三方开发平台的配置后会向第三方开发平台发起 URLampToken验证接入验证程

序对平台发送的验证参数进行验证验证通过后第三方开发平台会向 OneNET

平台返回验证消息当 OneNET 平台收到验证消息后说明第三方开发平台与

OneNET平台已建立连接

目前 OneNET平台为第三方应用平台提供接入验证程序的 SDK有 Javaphp

Nodejs和 C四个版本

SDK 下载地址httpsopeniot10086cndocart432html118 -ldquo数

据推送rdquo

413 OneNET 平台配置第三方应用平台

在 OneNET平台对第三方应用平台的配置界面如图 4-3所示

URL第三方开发平台的地址

Token可以自定义用于第三方开发平台接入平台握手验证

消息加解密方式有明文模式和安全模式当启用安全模式后平台端需要

用户自定义 AESKey 或者由平台随机生成在应用程序中使用该 AESKey 解密消

中移物联网有限公司 OneNET 开发文档中心

推送时间限制(秒)和推送数据限制(个)设置ldquo推送时间限制rdquoldquo推送数

据限制rdquo可以实现批量推送数据减少服务器压力当满足ldquo推送时间限制rdquo和

ldquo推送数据限制rdquo要求后OneNET 将给第三方推送数据如果没有设置ldquo推送

时间限制rdquo和ldquo推送数据限制rdquo将默认数据实时推送

图4-3 第三方开发平台的配置界面

当用户成功在 OneNET 平台配置了第三方开发平台服务器地址后点击ldquo提

交rdquo按钮后OneNET 平台会向第三方应用平台发起 URLampToken 验证请求验证

通过且收到第三方返回的验证消息后则第三方应用平台与 OneNET 平台已建立

连接之后OneNET 平台在收到设备数据时会将设备数据推送到已配置的第三

方应用平台

用户数据接收服务程序接收到 OneNET平台发送的 ldquoURLampTokenrdquo验证请求

请求的格式形如httpipporttestmsg=xxxampnonce=xxxampsignature=xxx

蓝色字体部分为用户在 OneNET平台配置的 URL常规的验证流程如下

(1)在请求中获取参数ldquononcerdquoldquomsgrdquo的值将ldquotokenrdquo(此为页面

配置参数 token的值)ldquononcerdquoldquomsgrdquo的值计算 MD5(token+nonce+msg)

加密值并且编码为 Base64字符串值

中移物联网有限公司 OneNET 开发文档中心

(2)将上一步中 Base64字符串值通过 URL Decode 计算后的值与请求参数

ldquosignaturerdquo的值进行对比如果相等则表示 token验证成功

(3)如果 token 验证成功向 OneNET 平台返回ldquomsgrdquo参数值否则返回

其他值

说明如果用户不想验证 Token 的有效性可以忽略以上步骤并直接向

OneNET平台返回ldquomsgrdquo参数值

42 OneNET 平台数据推送

平台以 HTTPS POST 请求形式向第三方应用平台注册地址推送数据推送数

据相关信息以 JSON 串的形式置于 HTTPS请求中的 body部分

第三方应用平台在接收数据时会接收到数据的明文消息或者密文消息

明文消息中以ldquotyperdquo的数值区分不同的消息而密文消息与明文消息的区别

是ldquomsgrdquo部分经过了加密处理下面将分别对明文消息密文消息以及消息相

关字段和密文的加密算法进行说明

421 明文消息

明文消息有两种消息类型分别为数据点消息和设备上下线消息而数据点

消息又分为单条数据点消息和数据点消息批量形式数据点消息批量形式中的不

同数据点是以不同时间戳区分的

(1)数据点消息(type=1)

msg

type 1

dev_id 2016617

ds_id datastream_id

at 1466133706841

value 42

msg_signature message signature

nonce abcdefgh

(2)数据点消息批量形式(type=1)

msg [

type 1

dev_id 2016617

ds_id datastream_id

中移物联网有限公司 OneNET 开发文档中心

at 1466133706841

value 42

type 1

dev_id 2016617

ds_id datastream_id

at 1466133706842

value43

]

msg_signature message signature

nonce abcdefgh

(3)设备上下线消息(type=2)

msg

type 2

dev_id 2016617

status 0

login_type 1

at 1466133706841

msg_signature message signature

nonce abcdefgh

422 密文消息

密文消息中的ldquoenc_msgrdquo是由明文消息中的ldquomsgrdquo采用 AES 加密算法而

enc_msgxxxx

msg_signature

message signature

nonceabcdefgh

423 消息相关字段说明

表4-1 消息相关字段说明

字段 字段说明

type 标识数据类型当前版本范围[15]

dev_id 设备 ID

ds_id 公 开 协 议 中 的 数 据 流 ID 其 格 式 为

objectID_instanceID_resourceID

at 平台时间戳单位 ms

value 具体数据部分为设备上传至平台或触发的相关

数据

中移物联网有限公司 OneNET 开发文档中心

status 设备上下线标识

0-下线 1-上线

login_type

设备登陆协议类型

1EDP 2nwx 3JTEXT 5JT808 6

MODBUS 7MQTT 8gr2010NB-IoT

cmd_type

命令响应的类型

1设备收到 cmd的 ACK 响应信息 2设备收到

cmd的 Confirm响应信息

cmd_id 命令 ID

msg_signatur

e 消息摘要

nonce 用于计算消息摘要的随机串

enc_msg 加密密文消息体对明文 JSON串(msg字段)的

加密

424 加密算法详述

平台基于 AES算法提供加解密技术具体阐述如下

EncodingAESKey 即消息加解密 Key 的 BASE64编码形式长度固定为 43

个字符从 a-zA-Z0-9共 62个字符中选取由服务开启时填写后

也可申请修改

AES密钥计算为 AESKey=Base64_Decode(EncodingAESKey + ldquo=rdquo)

EncodingAESKey 尾部填充一个字符的ldquo=rdquo 用 Base64_Decode 生成 32

个字节的 AESKey

AES采用 CBC 模式秘钥长度为 32 个字节(256位)数据采用

PKCS7填充 初始化 iv向量取秘钥前 16字节 PKCS7K为秘钥字

节数(采用 32)buf为待加密的内容N为其字节数Buf 需要被填

充为 K的整数倍在 buf的尾部填充(K-NK)个字节每个字节的内容

是(K- NK)具体详见toolsietforghtmlrfc2315

BASE64采用 MIME格式字符包括大小写字母各 26个加上 10个数

字和加号ldquo+rdquo斜杠ldquordquo一共 64个字符等号ldquo=rdquo用作后缀填

出于安全考虑平台网站提供了修改 EncodingAESKey的功能(在

EncodingAESKey 可能泄漏时进行修改对应上第三方平台申请时填写

的接收消息的加密对称密钥)所以建议保存当前的和上一次的

中移物联网有限公司 OneNET 开发文档中心

EncodingAESKey若当前 EncodingAESKey 生成的 AESKey解密失败则

尝试用上一次的 AESKey的解密

平台的加密消息部分为 enc_msg= Base64_Encode( AES_Encrypt

[random(16B)+msg_len(4B)+msg] )即以 16字节随机字节串拼接 4字

节表示消息体长度的字节串(此处 4 字节长度表示为网络字节序)再加

上消息本身的字节串作为 AES加密的明文再以 AES算法对明文进行加

密生成密文最后对密文进行 BASE64 的编码操作生成加密消息体

对加密消息体的解密流程为1)首先进行加密消息体的 BASE64 解码操作

aes_msg=Base64_Decode(enc_msg)2)对获取的解码内容以 AES 算法进行解密

操作获取明文部分plain_msg=AES_Decrypt(aes_msg)解密中使用的秘钥由

EncodingAESKey 计算得来使用的初始化 iv 向量为计算出的 aes 秘钥的前 16

字节3)去掉 plain_msg 的前 16 字节再以前 4 字节取出消息体长度根据消

息体长度获取真实的消息部分(推荐以消息体长度获取真实消息以兼容

plain_msg 未来可能出现的结构变更)表示加密传输的数据后两字段与明文

传输一致

43 API 接口

第三方开发平台应用层通过 Rsetful API 的方式和 OneNET平台进行交互对

接实现命令的下发数据的读写以及相关业务的交互

针对 MQTT 协议目前主要开发了以下 API 用来实现第三方开发平台向

OneNET平台请求读写执行以及设备管理请求具体见下表 4-2下面分别对每一

种 API进行说明

表4-2 API功能说明

API 类别 操作对象 API名称

需要终端响应 只需平台响应

设备

注册

更新设备注册属性

新增

更新

精确查询单个设备

中移物联网有限公司 OneNET 开发文档中心

模糊查询设备

批量查询设备状态

删除

数据流

新增

更新

查询单个数据流

查询多个数据流

删除

数据点

新增

查询

二进制数

新增

查询

触发器

新增

更新

查询单个触发器

模糊查询触发器

删除

触发数据内容

命令

发送命令

查询命令状态

查询命令相应

查询设备历史命令

视频能力 获取播放地址

APIKEY

新增

更新

查看

删除

消息订阅

按 Topic发送命令

查询订阅指定 Topic设备的列表

查询设备订阅的 Topic列表

删除产品的 Topic

查询产品的 Topic

中移物联网有限公司 OneNET 开发文档中心

432 设备

4321 注册

表4-3 设备注册

HTTP方法 POST

URL apihecloudscomregister_de

URL参数 register_code=6TM1OkhNsTjATvFx 设备注册码(必填)

HTTP内容

(示例)

sn 2015031401421 设备唯一标识 string类型最长 512字符

mac C89346DA4373 设备唯一 mac标识最长 32字符

title myedpdevice 设备名(可选) 最长 32个字符

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

keyQ1VdWoEvdkCye=d1=HcCSP6LvCw= 新设备 apikey

device_id 325018 设备 ID

说明

1 响应消息中 errno 表示错误码error 表示错误原因如果创建设备失

败则没有 data字段

2 snmac一定要必填其中一个而且只可以传一个用于鉴权就是设备

新增中的 auth_info

3 此接口根据产品设置的不同默认 allow_dup=true可以生成新设备及

key或获取原有设备及 key见下表

表4-4 对应表

产品允许重复 sn 在产品中已存在 sn 在产品中不存在

allow_dup=true 是 sn 对应的设备 id 和 key 新的设备 id 和 key

allow_dup=false 否 报错 新的设备 id 和 key

中移物联网有限公司 OneNET 开发文档中心

此接口返回的新设备默认设备名均为auto_register均为私有设

备设备协议与产品协议相同

4322 更新设备注册属性

表4-5 更新设备注册属性

HTTP方法 PUT

URL apihecloudscomregister_attr

HTTP头部 api-key xxxxddddsssaaa 必须为 masterkey

HTTP内容

(示例)

allow_dup true|false是否允许重复提交相同的设备 sn 默认 true

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

默认 allow_dup 为 true主要用于设备注册码创建设备属性限制

4323 新增

表4-6 新增设备注册属性

HTTP方法 POST

URL apihecloudscomdevices

HTTP头部 api-key xxxxddddsssaaa 必须为 masterkey

HTTP内容

(示例)

title mydevice 设备名

desc some description 设备描述(可选)

tags [chinamobile] 设备标签(可选可为一个或多个)

protocolMQTT 选择一种接入协议(可选默认为 HTTP)

location lon 106 lat 29 ele 370设备位置纬度

经度 高度(可选)

private true| false 设备私密性(可选默认为 ture)

auth_info 201503041a5829151 MQTT设备设备唯一编号

other version 100 manu china mobile 其他信息(可

选JSON格式可自定义)

HTTP响应响

应消息内容

(实例)

errno 0

error succ

data

中移物联网有限公司 OneNET 开发文档中心

device_id233444 平台分配的设备 ID

4324 更新

表4-7 更新

HTTP方法 PUT

URL apihecloudscomdevicesdevice_id

HTTP头部 api-key xxxxddddsssaaa masterkey或设备 apikey

HTTP内容

(示例)

title mydevice 设备名(可选)

desc some description 设备描述(可选)

tags [chinamobile] 设备标签(可选)

protocolMQTT 选择一种接入协议(可选)

location lon106 lat 29 ele 370设备位置经度

纬度 高度(可选)

private true| false 设备私密性(可选)

auth_info201503041a5829151 MQTT设备设备唯一编号(可选)

other version 100 manufacturer china mobile 其

他信息(可选)

HTTP响应响

应消息内容

(示例)

errno 0

error succ

中移物联网有限公司 OneNET 开发文档中心

4325 精确查询单个设备

表4-8 精确查询单个设备

HTTP方法 GET

URL apihecloudscomdevicesdevice_id

HTTP头部 api-key xxxxddddsssaaa masterkey 或设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

iddevice_id

tags [chinamobile]

onlinetrue|false

protocolMQTT

titlemy device1

descsome description

create_time2015-09-16 102222

privatetrue|false

locationele370lat17609lon17703

auth_infohellip

otherversion100manufacturerchina mobile

keys[titledevice-auto-keykey2JO3B12O1]

数据流

datastreams[

create_time 2014-10-23 202222

iddatastream_id1

unitcelsius

unit_symbolC

uuid 231a5aa9-9de4-5f2e-9e0f-015181c98429

]

4326 模糊查询设备

表4-9 模糊查询设备

HTTP方法 GET

URL apihecloudscomdevices

中移物联网有限公司 OneNET 开发文档中心

URL 参数

key_words=my 匹配关键字(可选从 id和 title字段中左匹配)

auth_info=203x1 鉴权信息(可选对应注册时的 sn参数唯一设

备编号)

tag=mobile 标签(可选)

online=true| false 在线状态(可选)

private=true| false 私密性(可选)

page=1 指定页码最大页数为 10000(可选)

per_page=30 指定每页输出设备个数默认 30最多 100(可选)

device_id=235122 指定设备 ID多个用逗号分隔最多 100个(可

选)

begin=2016-06-20 起始时间包括当天(可选)

end=2016-06-20 结束时间包括当天(可选)

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

total_count1

per_page30

page1

devices

[

id3497307

titlemy device1

desc device desc

privatetrue

protocolMQTT

onlinefalse

locationlon10655231191544001lat29535451246673

create_time2013-02-11 122233

auth_infoSYSz=8QY3r7aTQ48UKfqPnB=PybYRo=

]

4327 批量查询设备最新数据

表4-10 批量查询设备最新数据

HTTP方法 GET

中移物联网有限公司 OneNET 开发文档中心

URL apihecloudscomdevicesdatapoints

URL参数 devIds=1221122331123 设备 id用逗号隔开限制 1000 个设备

HTTP头部 api-key xxxxddddsssaaa masterkey 或设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

error ldquosuccrdquo

data

devices [

id 12323 设备 id

title daf设备名

datastreams

[

id temperature数据流名称

at 2017-02-12 102222数据流更新时间

value 12数据流最新数据

hellip

helliphellip

]

hellip

hellip

]

4328 删除

表4-11 删除设备

HTTP方法 DELETE

URL apihecloudscomdevicesdevice_id

HTTP头部 api-key xxxxddddsssaaa 可为设备级别的 Key

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

中移物联网有限公司 OneNET 开发文档中心

说明删除设备会删除该设备下所有数据流和数据点删除设备动作是异步

的系统会在后续逐步删除该设备下的数据流和数据点

433 数据流

4331 新增

表4-12 新增数据流

HTTP方法 POST

URL apihecloudscomdevicesdevice_iddatastreams

HTTP头部 api-key xxxxddddsssaaa masterkey 或设备 apikey

HTTP内容

(示例)

idtemperature 数据流名称 示例温度

tags[Tag1Tag2] 数据流标签(可选可以为一个或多个)

unitcelsius 单位(可选)

unit_symbolC 单位符号(可选)

HTTP响应响

应消息内容

(示例)

errno 0

data

ds_uuid 9e6bcac9-2c6f-59d5-adae-3955df2e7bce平台分配

数据流 UUID

error succ

4332 更新

表4-13 更新数据流属性

HTTP方法 PUT

URL apihecloudscomdevicesdevice_iddatastreamsdatastream_id

示例apihecloudscomdevices421240datastreamstemperature

HTTP头部 api-key xxxxddddsssaaa masterkey 或设备 apikey

HTTP内容

(示例)

tags[Tag1Tag2] 数据流标签(可选)

unitcelsius 单位(可选)

unit_symbolC 单位符号(可选)

HTTP响应响

应消息内容

(示例)

errno 0

error succ

中移物联网有限公司 OneNET 开发文档中心

4333 查询单个数据流

表4-14 查询单个数据流

HTTP方法 GET

URL apihecloudscomdevicesdevice_iddatastreams

URL参数 datastreams_ids = 查看的 datastream的 id

HTTP头部 api-key xxxxddddsssaaa masterkey 或该设备的设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

data [

update_at 2018-06-29 112938 数据流最后更新时

id 湿度 数据流名称

create_time 2018-06-28 170548数据流创建时间

current_value 53845013最新数据点

]

error succ

4334 查询多个数据流

表4-15 查询多个数据流

HTTP方法 GET

URL apihecloudscomdevicesdevice_iddatastreams

URL 参数

datastream_ids= 查看的 datastream的 id多个 id之间用英文逗号

分开(参数缺省时为查询所有数据流)

示例

apionenetcomdevices1234datastreamsdatastream_ids=tempgps

表示查看 temp和 gps两个数据流的信息

HTTP头部 api-key xxxxddddsssaaa masterkey 或者 该设备的设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data 数据流信息

[

idtemperature 数据流名称设备范围内唯一

tags[Tag1Tag2] 数据流标签

unitcelsius 单位

unit_symbolC单位符号

create_timexxxx-xx-xx 102222 创建时间

中移物联网有限公司 OneNET 开发文档中心

current_valuehellip该数据流下数据点最新值

update_atxx-xx-xx该数据流下数据点最新上传时间

]

[

idhumi 数据流名称设备范围内唯一

tags[Tag1Tag2]

unit_symbol

create_timexxxx-xx-xx 102222

current_valuehellip

update_atxx-xx-xx

]

[]

4335 删除

表4-16 删除数据流

HTTP方法 DELETE

URL apihecloudscomdevicesdevice_iddatastreamsdatastream_id

URL参数 无

HTTP头部 api-key xxxxddddsssaaa masterkey 或者设备 key

HTTP响应响

应消息内容

(示例)

errno 0

error succ

434 数据点

4341 新增

中移物联网有限公司 OneNET 开发文档中心

表4-17 新增数据点

HTTP方法 POST

URL apihecloudscomdevicesdevice_iddatapoints

URL参数 type=3 上传数据类型(可选默认为完整 JSON型见 HTTP内容示

例)

HTTP头部 api-key xxxxddddsssaaa masterkey 或者 设备 apikey

HTTP内容

(示例)

datastreams

[

id temperature 数据流名称或数据流模板名称

datapoints [

at 2013-04-22T003543 上传数据点时间可选如

果为空则设备云会取当前时间如果存在其格式必须为 YYYY-MM-

DDThhmmss的形式(例如2015-03-22T223112)

value 42 上传数据点值

at 2013-04-22T005543

value 84 上传数据点值

]

id key 数据流名称或数据流模板名称

datapoints [

at 2013-04-22T003543上传数据点时间可选

value hellip上传数据点值

at 2013-04-22T003543

value hellip上传数据点值

]

hellip

]

中移物联网有限公司 OneNET 开发文档中心

HTTP 响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

1 可以一次性向设备云上传多个数据流每个数据流中可以包括多个数据

点示例程序表示向设备云上数据流 temperature 和数据流 key上传数据其中

temperature数据流有两个数据点key数据流也有两个数据点

2 如果某个数据流不存在则在增加数据点时设备云会自动创建一个新

的数据流注意新数据流的 datastream id 不可为空

3 数据点表示在某个时刻该数据流的值其 at表示时间为可选字段如

果为空则设备云会取当前时间如果存在其格式必须为YYYY-MM-DDThhmmss

的形式(例如2015-03-22T223112)

4 数据点中的 value表示具体的值其值为 JSON对象可以为整型浮点

型字符串多种类型如果 value部分用双引号括起来则其在设备云存储为字

符串如果不用双引号括起来则其表示数值字符编码现在只支持 UTF-8

5 数据点对应的时间是数据点的标识的一部分相同时间的两个数据点

设备云会同时对这两个相同时间的数据点进行保存不会出现覆盖另一个数据点

的情况一般如果 at 部分取空设备云会取系统时间精度为毫秒如果在一

条命令中某一个数据流包含多个数据点都没有 at 字段设备云将会对所有数据

点进行保存

6 新增数据点支持如下简写方式在请求的 URL中增加 type字段指示所

使用的格式类型目前 type支持 345三种情况

URLapihecloudscomdevices2214570datapointstype=3

示例temperature225humidity952

表示在数据流 temperature中增加一个数据点 225在 humidity 中增加一

个数据点 952

URLapihecloudscomdevices2214570datapointstype=4

示例temperature2015-03-22T223112225

表示在数据流 temperature中加一个数据点在 2015年 3月 22 日 22点 31

中移物联网有限公司 OneNET 开发文档中心

分 12秒的值为 225

URLapihecloudscomdevices2214570datapointstype=5

示例temperature2015-03-22T223112225pm2589

表示在数据流 temperature中加一个数据点即 2015年 3月 22 日 22点 31

分 12秒的值为 225在数据流 pm25中添加一个数据点即当前时间的值为 89

4342 查询

表4-18 查询数据点

HTTP方法 GET

URL apihecloudscomdevicesdevice_iddatapoints

URL 参数

datastream_id=abc 查询的数据流多个数据流之间用逗号分隔

(可选)

start=2015-01-10T080035 提取数据点的开始时间(可选)

end=2015-01-10T080035 提取数据点的结束时间(可选)

duration=3600 查询时间区间(可选单位为秒)

start+duration按时间顺序返回从 start开始一段时间内的数据点

end+duration按时间倒序返回从 end回溯一段时间内的数据点

limit=100 限定本次请求最多返回的数据点数0ltnlt=6000(可选

默认 1440)

cursor= 指定本次请求继续从 cursor位置开始提取数据(可选)

sort=DESC | ASC 值为 DESC|ASC时间排序方式DESC倒序ASC升

序默认升序

ltnlt=6000(可选默认 1440)

HTTP头部 api-key xxxxddddsssaaa masterkey 或者 该设备的设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

cursor70921_3771908_1472355096

datastreams[

idtemperature数据流名称或数据流模板名称

datapoints[

at xxxx-xx-xx 102222value42数据点上传时间和

at xxxx-xx-xx 102222value84

]

中移物联网有限公司 OneNET 开发文档中心

idkey 数据流名称或数据流模板名称

datapoints[

at xxxx-xx-xx 102222valuehellip

atxxxx-xx-xx 102222valuehellip

]

hellip

]

1 若不携带任何参数平台返回本设备所存在的所有数据流中的最新数据

(这一种情况下查询时出现时延较大的性能问题建议在 URL 参数中加上

newadd参数并将其值赋为 true如 newadd=true)

2 若不携带数据流 id参数携带 limit 参数时会返回该设备每个数据流

最多 limit 条数据

3 若要查看某一条数据流数据需在上述 URL中增加参数 datastream_id

4

apihecloudscomdevices564280datapointsdatastream_id=tempamplimit

=10会返回数据流temp中最近的 10个数据点

5 要查看某一条数据流在某个时间范围内的数据可以在增加 start和 end

参数

示例

apihecloudscomdevices564280datapointsdatastream_id=temper

atureampstart=2013-05-12T171233ampend=2013-06-12T172233 表示查询本设

备对应的数据流在 2013 年 5 月 12 日 17 点 12 分 33 秒到 17 点 22 分 33 秒的数

据点注意如果 start 参数存在end参数不存在表示取 start后的所有数据

如果 start 不存在end 存在设备云会忽略 end参数注意日期时间格式格

式必须为示例中的格式YYYY-MM-DDThhmmss例如2013-05-12T171233

日期和时间之间用大写字母 T 分隔start 和 end 之间的时间间隔最大为 1 年

超过一年会忽略

如果指定了 start 参数则可能返回的数据点的数目会很多此时默认会返

回最多 100 个数据点可以使用 limit 参数设定返回多少个数据点最大为

6000个数据点当实际的数据点数目多于 limit 限定的数目时返回的 json串

中移物联网有限公司 OneNET 开发文档中心

中会有一个 cursor 字段下一次请求的命令行中可以携带此 cursor 字段表示接

着遍历本数据流此 cursor字段标识上次取出数据点后下一个数据点的位置

435 二进制数据

4351 新增

将二进制数据将作为数据点保存到设备下的某个数据流中设备云返回该二

进制数据的索引号

表4-19 新增二进制数据

HTTP方法 POST

URL apihecloudscombindata

URL参数 device_id=421590 数据所属设备(必选)

datastream_id=bin 该数据所属已经存在的数据流(必选)

HTTP头部 api-key xxxxddddsssaaa masterkey 或者该设备的设备 key

HTTP 内 容

(示例)

普通二进制数据文件图像等

(最大限制为 800上传时间间隔需大于 1ms)

HTTP响应响

应消息内容

(示例)

errno 0

error succ

data

index3491506_1475204886914_bin 二进制数据索引号

4352 查询

表4-20 查询二进制数据

HTTP方法 GET

URL apihecloudscombindataindex

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

普通二进制数据文件图像等二进制形式数据

436 触发器

4361 新增

表4-21 新增触发器

HTTP方法 POST

中移物联网有限公司 OneNET 开发文档中心

URL apihecloudscomtriggers

HTTP头部 api-key xxxxddddsssaaa 必须为 masterkey

HTTP内容

(示例)

titlewen du jian kong 设备名(可选)

ds_idgps 数据流名称(id)(可选)

dev_ids[10272345615523] 设备 ID(可选)

ds_uuids[ 数据流 uuid(可选)

9ad09uac-7446-512f-b07c-90jdnzj8120ad

4599436e-7146-5349-b07c-79fa0919cs62

]

urlxxbbcom

typegt | gt= | lt | lt= | == | inout | in | out |change | frozen |

live

threshold100 阙值根据 type不同见以下说明

1) type 为gt|gt=|lt|lt=|==时threshold必须为数值

2) type为 inout时threshold 设置为lolmt40 uplmt52 表示

数据流的值首次进入或离开闭区间[4052]时触发

3) type为 change时threshold 参数不用传递当上传的值有改变时触发

告警

4) type为 frozen时threshold 为数值指定距离最后一次数据上报多少

秒内未上报数据触发告警同时被监控对象进入 frozen状态

5) type 为 live 时threshold 为数值指定距离最后一次数据上报多少秒

后上报数据触发告警

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

tirgger_id233444 触发器 ID

说明

1触发器的含义是当指定范围内的数据点满足触发条件的要求时会向

url参数指定的地址发送 post请求

2触发器有三种工作触发模式

1)在请求参数中单独指定了 ds_id不包括其他参数那么当前项目下

中移物联网有限公司 OneNET 开发文档中心

所有设备的数据流中数据流名称符合 ds_id 的数据都会进入触发判断逻辑

2)在请求参数中单独指定了 ds_uuids 数组那么只有这些指定的数据

流会进入触发判断逻辑

3)在请求参数中指定了 ds_id 和 dev_ids那么只有这些指定的设备的

数据流会进入触发判断逻辑

4362 更新

表4-22 更新触发器属性

HTTP方法 PUT

URL apihecloudscomtriggerstirgger_id

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP内容

(示例)

titlewen du jian kong

ds_uuids[

9ad09uac-7446-512f-b07c-90jdnzj8120ad

4599436e-7146-5349-b07c-79fa0919cs62

]

urlxxbbcom

typegt | gt= | lt | lt= | == | inout | in | out | exp | change |

frozen | live

threshold100

注若要修改 type需要对应设置 threshold

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

4363 查询单个触发器

表4-23 查询单个触发器

HTTP方法 GET

URL apihecloudscomtriggerstirgger_id

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

idtrigger_id1

中移物联网有限公司 OneNET 开发文档中心

titlewen du jian kong

ds_uuids[

datastream1_uuidrdquo

datastream2_uuidrdquo

datastream3_uuidrdquo

]

urlxxbbcom

typegt|gt=|lt|lt=|==|in|out|exp|change|frozen|live

threshold100

invalidtrue 触发器是否已失效

create_timexx-xx-xx 102222

4364 模糊查询触发器

表4-24 模糊查询触发器

HTTP方法 GET

URL apihecloudscomtriggers

URL 参数

title=name 指定触发器名称

page=1 指定页码可选

per_page=10 指定每页输出个数可选默认 10最多 100

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

total_count600

per_page30

page1

triggers[

idtrigger_id1

titlewen du jian kong

ds_uuids

[datastream1_uuidrdquo datastream2_uuidrdquo]

urlxxbbcom

typegt|gt=|lt|lt=|==|in|out|exp|change|frozen|live

threshold100

invalidtrue 触发器是否已失效

create_timeXXXXXXXX

中移物联网有限公司 OneNET 开发文档中心

]

说明触发器失效是指触发器所依赖的数据流或者设备被删除了此时触发

器永远不会有效触发事件

4365 删除

表4-25 删除触发器

HTTP方法 DELETE

URL apihecloudscomtriggerstirgger_id

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno 0

error succ

4366 触发数据内容

触发数据是指当 OneNET 设备云判断某个触发器的触发条件满足时会通过

POST方式向外抛出的 URL请求在 HTTP的 POST消息体中会携带如下格式的 JSON

字符串

表4-26 触发器内容

数据内容

(示例)

trigger

id1

threshold90

typegt

current_data[

dev_id2656

ds_idgps

ds_uuidFWEF-ZFW-ZFW-ZFWW

at2009-09-07T121602001403Z

value100

dev_id2656

ds_idtemper

中移物联网有限公司 OneNET 开发文档中心

ds_uuidFEWEF-ZFWFWW-WFWW-FWEFFWW

at2009-09-07T121602001403Z

value882

]

437 命令

命令是指应用发送命令数据给 OneNET设备云再由 OneNET设备云转发给终

端设备终端设备收到命令后可以向设备云反馈响应的一种工作机制命令下发

后应用可以通过 API查询命令状态和提取命令的响应数据

命令的执行步骤如下

1应用通过 API 向设备云发送命令数据

2设备云生成该命令的 uuid作为该命令的唯一标识并向应用返回同时向

终端设备转发命令数据

3 终端设备收到命令数据后执行命令数据可以生成响应也可以不响应

4设备云跟踪记录命令的响应如果设备有响应就关联命令 uuid和响应

结果

5应用通过 API 向设备云提取命令执行结果(API 请求中携带命令 uuid 标

识)

特别说明

命令下发到终端设备后如果终端设备 10 秒内未收到响应则此命令的状

态将被设置为超时应用通过 API 查询命令状态时会反馈超时超过 10 秒后

收到的响应会被丢弃

终端设备针对同一条命令回复多条命令响应只有在未超时时间内收到的最

后一条是有效响应前面的响应包将会被覆盖因此终端设备应该对每个命令只

有一个响应包

4371 发送命令

表4-27 发送命令

HTTP方法 POST

URL apihecloudscomcmds

URL 参数 device_id=415120 接收该数据的设备 ID(必选)

中移物联网有限公司 OneNET 开发文档中心

qos=0 | 1 是否需要响应默认为 0

0不需要响应即最多发送一次不关心设备是否响应

1需要响应如果设备收到命令后没有响应则会在下一次设备登陆

时若命令在有效期内(有效期定义参见 timeout参数)则会继续发送

对响应时间无限制多次响应以最后一次为准

本参数仅当 type=0时有效

timeout=300 命令有效时间默认 0

0在线命令若设备在线下发给设备若设备离线直接丢弃

gt0 离线命令若设备在线下发给设备若设备离线在当前时间

加 timeout时间内为有效期有效期内若设备上线则下发给设备单

位秒有效围0~2678400

本参数仅当 type=0时有效

type=0 | 1 默认 00发送 CMD_REQ包1发送 PUSH_DATA包

HTTP头部 api-key xxxxddddsssaaa masterkey或者设备 apikey

HTTP内容 用户自定义数据jsonstring二进制数据(小于 64K)

HTTP响应响

应消息内容

(示例)

errno 0

error succ

data

cmd_uuid2302-312-FWs 命令 id

4372 查询命令状态

表4-28 查询命令状态

HTTP方法 GET

URL apihecloudscomcmdscmd_uuid

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno 0

error succ

data

status1

0设备不在线|Device not online

1命令已创建| Command Created

2命令已发往设备| Command Sent

3命令发往设备失败| Send Command Failed

4设备正常响应| Command Response Received

5命令执行超时| Command Response Timeout

6设备响应消息过长 | Command Response Too Large

descldquosendingrdquo

中移物联网有限公司 OneNET 开发文档中心

4373 查询命令响应

表4-29 查询命令响应

HTTP方法 GET

URL apihecloudscomcmdscmd_uuidresp

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP 响应响

应消息内容

用户设备返回的响应内容

4374 查询设备历史命令

表4-30 查询设备历史命令

HTTP方法 GET

URL apihecloudscomcmdshistoryltdevice_idgtltdevice_idgt

URL 参数

start=2015-01-10T080035 查询的开始时间(可选)

end=2015-01-10T080535 查询的结束时间(可选)

page=1 指定页码最大页数为 10000(可选)

per_page=30 指定每页输出设备个数默认 30最多 100(可选)

HTTP头部 api-key xxxxddddsssaaa

HTTP响应响

应消息内容

errno 0

error succ

data

page 1当前页码

per_page 10当前每页总数

total_count 100

items [

cmd_uuid 2302-312-FWs

device_id 2设备 ID

expire_time 2016-07-05 000000过期时间

status 0命令状态

send_time 2016-07-05 000000发送时间

confirm_time 2016-07-05 000000响应时间

confirm_body 2463726571007b202274797022 响应内容

16进制字符

body 2463726571007b202274797022请求内容16进制字符

hellip

中移物联网有限公司 OneNET 开发文档中心

hellip

]

438 视频能力

4381 获取播放地址

表4-31 获取播放地址

HTTP方法 GET

URL apihecloudscomipcrtmp_address

URL 参数

device_id= 接收该数据的设备 ID(必填)

channel_id = 对应数据流名称中的 channelnum

protocol_type = 播放协议类型 0rtmp1hls2http-flv

HTTP头部 api-key xxxxddddsssaaa masterkey或者设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

errorrdquosuccrdquo

ldquodatardquo

addripport

accessTokenldquo字符串rdquo

439 APIKEY

4391 新增

表4-32 新增 APIKEY

HTTP方法 POST

URL apihecloudscomkeys

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP内容

(示例)

title sharing key key 的命名

permissions [

resources [ 被授权的资源

中移物联网有限公司 OneNET 开发文档中心

dev_id 424 被授权的设备 id

dev_id 425 被授权的设备 id

hellip

hellip

]

access_methods [ 被授权的命令

get

put

post

]

]

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data key2302-312-FWs key_string

说明授权命令是可选的另外被授权的命令也可以是 getputpost 的

一个或几个如只授权 get和 put命令

access_methods [getput]

4392 更新

表4-33 更新 APIKEY

HTTP方法 PUT

URL apihecloudscomkeyskey_string

HTTP头部 api-key xxxxddddsssaaa masterkey(注只能为 master-key)

HTTP内容

(示例)

title sharing key key 的命名

permissions [

resources [ 被授权的资源

dev_id 424 被授权的设备 id

ds_idfan1 数据流 id可选

中移物联网有限公司 OneNET 开发文档中心

dev_id 425 被授权的设备 id

ds_idfan1 数据流 id可选

hellip

hellip

]

access_methods [ 被授权的命令可选

get

put

post

]

]

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

说明

1对于 masterkey 不允许更新操作masterkey 默认具有最大权限可以访

问该用户名下所有设备所有数据

可以进行 POSTGETPUTDELETE操作如果更新 master key 系统会返回

失败

2授权命令是可选的另外被授权的命令也可以是 getputpost 的一个

或几个如只授权 get和 put命令

access_methods [getput]

3API key 更新是覆盖操作会将原来存在的授权资源和授权命令覆盖不

会保留原来的授权资源和授权命令

4393 查看

中移物联网有限公司 OneNET 开发文档中心

表4-34 查看 APIKEY

HTTP方法 GET

URL httpapihecloudscomkeys

URL 参数

key = FWJPO-FZFHW-FFEWB可选只查看该 key相关信息

page = 1 指定页码 可选

per_page = 10 指定每页输出个数可选默认 10最多 100

device_id = xxbbcc可选只查看与该设备相关的非 master-key

HTTP头部 api-key xxxxddddsssaaa masterkey(注只能为 master-key)

HTTP响应响

应消息内容

(示例)

errno 0

data

per_page 30

total_count 2

keys [

create_time 2015-11-04 142552

title Auto-generated-master-key

key 03GeDLYk0WNk1V338g7yndKZYkQA

create_time 2015-12-03 100041

permissions [

resources [

dev_id 564280

]

]

title 设备 1测试 Key

key vuHebEWefiU2Ueo5ouoCc1CUsYQ=

]

page 1

error succ

中移物联网有限公司 OneNET 开发文档中心

4394 删除

表4-35 删除 APIKEY

HTTP方法 DELETE

URL httpapihecloudscomkeyskey_string

HTTP头部 api-key xxxxddddsssaaa masterkey(注只能为 master-key)

HTTP 响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

4310 消息订阅

43101 按 Topic 发送命令

表4-36 按 Topic 发送命令

HTTP方法 POST

URL apihecloudscommqtt

URL参数 topic=xxx 设备订阅的主题(必选)

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP 内 容

(示例)

HTTP响应响

应消息内容

(示例)

errno0

errorldquosuccrdquo

data

total_count1

per_page30

page1

devices [123123433333]

43102 查询订阅指定 Topic设备的列表

表4-37 查询订阅制定 Topic设备的列表

HTTP方法 GET

URL apihecloudscommqtttopic_device

URL 参数

topic=xxx 设备订阅的主题(必选)

page=1 当前页码 必填大于等于 1

per_page=10 每页 必填范围 1-1000

中移物联网有限公司 OneNET 开发文档中心

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP内容

(示例)

HTTP响应响

应消息内容

(示例)

errno0

errorldquosuccrdquo

data

total_count1

per_page30

page1

devices [123123433333]

43103 查询设备订阅的 Topic列表

表4-38 查询设备订阅的 Topic列表

HTTP方法 GET

URL apihecloudscommqttdevice_topicdevice_id

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno0

errorldquosuccrdquo

data

[topic_name1 topic_name2 topic_name3]

43104 删除产品的 Topic

表4-39 删除产品的 Topic

HTTP方法 DELETE

URL apihecloudscommqtttopic

URL参数 name=xxx topic名(必选)

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno0

errorldquosuccrdquo

中移物联网有限公司 OneNET 开发文档中心

43105 查询产品的 Topic

表4-40 查询产品的 Topic

HTTP方法 GET

URL apihecloudscommqtttopic

URL参数 无

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno0

errorldquosuccrdquo

data

[topic_name1topic_name2topic_name3]

中移物联网有限公司 OneNET 开发文档中心

第五章 接入实例

51 MQTT-device 接入

511 工具下载

为方便开发人员直观感受使用 mqtt 协议进入平台的便利可使用平台提供

的 MQTT 设备模拟器进行接入平台请在首页-gt开发文档-gt资源下载-gt13 调试

工具下载进行下载如下图

图5-1 资源下载

下载地址

httpupfileshecloudscom123ueditor201707125d5bc37eca39c0c5b7a5bcb9

0e451eeerar

中移物联网有限公司 OneNET 开发文档中心

512 界面说明

图5-2 界面说明

513 使用方法

5131 创建产品

如 323 的过程在设备接入协议中选择 MQTT

中移物联网有限公司 OneNET 开发文档中心

图5-3 选择连接协议

5132 创建设备

如 323描述在平台上新建一个设备

5133 建立连接

在产品概况中可以查看产品 ID此信息填入模拟器 ProductID一栏如下图

图5-4 产品ID

在平台上进入设备信息页面可查看设备 ID及鉴权信息(此鉴权信息是新建设备时候填

写的鉴权信息)如下图

中移物联网有限公司 OneNET 开发文档中心

图5-5 设备ID及鉴权信息

相应把设备 ID及鉴权信息填入模拟器之中然后点击连接按钮如果未弹出提示对话

框则表示设备鉴权成功如下图

图5-6 连接成功

中移物联网有限公司 OneNET 开发文档中心

5135订阅与发布

演示本操作需要在 OneNet平台建立两个基于 MQTT协议的设备一个用于消息发布

另一个用于消息订阅

图5-7 设备状态

开启两个模拟器分别模拟以上两个设备然后建立连接

首先使用订阅主题打开第一个模拟器模拟消息订阅者

图5-8 订阅主题

其次发布主题打开第二个模拟器模拟消息发布者

中移物联网有限公司 OneNET 开发文档中心

图5-9 发布主题

经过以上两个操作后查看模拟消息订阅者的模拟器则收到了主题

为rdquotopic_namerdquo的消息如下图

中移物联网有限公司 OneNET 开发文档中心

图5-10 收到的主题

5136接收平台指令

建立连接后模拟器也可接收来自平台的指令具体操作如下

先打开模拟器-gt建立连接-gt选中【[OneNet]平台指令接收】选项栏利用平台下发指

令功能下发如下图平台下发指令

图5-11 平台发送命令

中移物联网有限公司 OneNET 开发文档中心

图5-12 下发指令

填写好将要发送的消息后点击【发送命令】按钮则模拟器成功接收到来自平台的

数据如下图模拟器截图

图5-13 模拟器收到的指令

5137上传数据点

Mqtt支持 Json 数据格式上报数据现根据 Json几种格式举一些例来演示怎么利用

模拟器上传数据

1)使用 Json数据 Type1上传 Json数据

datastreams[idtemperaturedatapoints[value255]]

中移物联网有限公司 OneNET 开发文档中心

如下模拟器上传数据界面

图5-14 Type1数据格式

则在平台数据展示中则可看到上传的数据点

图5-15 收到数据展示

2)使用 Json数据 Type3示例 Json数据为

temp32humi98

模拟器发送数据截图

中移物联网有限公司 OneNET 开发文档中心

图5-16 Type3数据格式

平台数据展示截图

图5-17 数据展示

3)使用 Json数据 Type4示例 Json数据为

temperature233pm2589

模拟器上传数据截图

中移物联网有限公司 OneNET 开发文档中心

图5-18 Type5数据格式

平台接收数据展示截图

图5-19 数据展示

52 基于麒麟开发板的 MQTT 接入实例

OneNet 平台为使用户能快速接入发布麒麟座开发板官网提交您的创意免

费申请开发板下面利用麒麟座开发板 V31 演示开发板采集温湿度使用 MQTT发

送到平台的接入流程

开发板申请链接httpsopeniot10086cneventdetail185html

521 搭建开发环境

OneNET 平台提供的麒麟座开发板是基予 STM32 单片机开发的一块功能应用

板开发板包含 MCU温湿度传感器GSM 模块WIFI 模块电源模块键盘

中移物联网有限公司 OneNET 开发文档中心

LED以及 lcd显示接口等满足用户对平台接入的基本需求能快速接入到平台

资料包配备完整工程代码方便工程移植等使用

目前 STM32 开发常用的 IDE 有 IARMDK 等我挑选 MDK 作为开发工具打

开工具包先安装 MDK511A安装完毕后再安装 MDKCM511A开发板所有资料软件

工具包下载案例包

案例包下载链接

httpspanbaiducoms1UB1qZGrVuovSVdbqqXP0Lglistpath=2F

图5-20 MDK包

安装完毕并安装 license详细步骤不做演示

中移物联网有限公司 OneNET 开发文档中心

522 连接硬件准备

5221 开发板接线

图5-21 开发板接线图

电源DC-5V

运行信息USART1-MicroUSB 线

软件下载ST-Link

中移物联网有限公司 OneNET 开发文档中心

5222 ESP8266跳线帽连接

图5-22 ESP8266跳线帽连接

中移物联网有限公司 OneNET 开发文档中心

5223 M6312跳线帽连接

图5-23 M6312跳线帽连接

523 工程实例

例程使用最简单易懂的方式编写着重让大家明白接入流程和协议

10~12 协议专属例程是展示该协议下的专用功能比如 EDP 的 PushData

中移物联网有限公司 OneNET 开发文档中心

HTTP 注册新设备MQTT 的订阅发布等具体使用方法查看该目录下的《使用

说明》

图5-24 工程文件

524 开发工程文件

中移物联网有限公司 OneNET 开发文档中心

图5-25 工程文件

图5-26 工程结构

默认已创建好产品以及设备打开文件工程 onenetc 和 esp8266c 修改例

程的 WIFI 信息和平台信息

分别在 esp8266c 的 36和 onenetc的 414345行

图5-27 更改项

525 编译下载

开发版接串口会有相应状态显示平台设备显示在线状态绿色为连接成功

设备在线灰色表示未连接并在数据展示中显示对应主题的所有数据

中移物联网有限公司 OneNET 开发文档中心

图5-28 连接成功

图5-29 收到数据

其他实例详情请见httpsopeniot10086cnbbsthread-1266-1-1html

中移物联网有限公司 OneNET 开发文档中心

第六章 MQTT 协议详解

61 设备与平台通信协议包格式

协议就是通信双方的一个约定即表示第 1字节传输的什么第 2字节

传输的什么helliphellip在 MQTT协议中一个 MQTT 数据包由固定头(Fixed

header) 可变头(Variable header) 消息体(payload)三部分构成

MQTT 数据包结构固定头部+可变头部+消息体

固定头(Fixed header)存在于所有 MQTT数据包中表示数据包类型及

数据包的分组类标识固定头格式如下

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 - 5 Remaining Length(该字段占用 1-4个字节)

目前平台版本支持的 Packet Type如下

名字 值 流向 描述

CONNECT 1 C-gtS 客户端请求与服务端建立连接

CONNACK 2 S-gtC 服务端确认连接建立

PUBLISH 3 CS 发布消息

PUBACK 4 CS 收到发布消息确认

PUBREC 5 CS 发布消息收到

PUBREL 6 CS 发布消息释放

PUBCOMP 7 CS 发布消息完成

SUBSCRIBE 8 C-gtS 订阅请求

SUBACK 9 S-gtC 订阅确认

UNSUBSCRIBE 10 C-gtS 取消订阅

UNSUBACK 11 S-gtC 取消订阅确认

PING 12 C-gtS 客户端发送 PING(连接保活)命令

PINGRSP 13 S-gtC PING命令回复

DISCONNECT 14 C-gtS 断开连接

可变头(Variable header)存在于部分 MQTT 数据包中数据包类型决定

了可变头是否存在及其具体内容

消息体(Payload)存在于部分 MQTT 数据包中表示客户端收到的具体内

中移物联网有限公司 OneNET 开发文档中心

不同类型数据包中可变头和消息体包含关系如下

消息类型 Variabl

e

Header

Payloa

d

CONNECT 有 有

CONNACK 有 有

PUBLISH 有 有

PUBACK 有 无

PUBREC 有 无

PUBREL 有 无

PUBCOMP 有 无

SUBSCRIBE 有 有

SUBACK 有 有

UNSUBSCRIBE 有 有

UNSUBACK 有 无

PING 无 无

PINGRSP 无 无

DISCONNECT 无 无

62 平台支持数据包类型

621 CONNECT(客户端请求与服务端建立连接 client -gt server)

固定头(Fixed Header)

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 - 5 Remaining Length(该字段占用 1-4个字节)

MQTT Packet Type 值为 0001表示该数据包为请求连接数据包

Remaining Length 剩余长度占 1-4字节

可变头(Variable Header)

包含内容如下

Description 7 6 5 4 3 2 1 0

byte

1-2

ProtocolNa

me Length

0 0 0 0 0 0 0 0

0 0 0 0 0 1 0 0

byte

3

lsquoMrsquo 0 1 0 0 1 1 0 1

byte

4

lsquoQrsquo 0 1 0 1 0 0 0 1

中移物联网有限公司 OneNET 开发文档中心

byte

5

lsquoTrsquo 0 1 0 1 0 1 0 0

byte

6

lsquoTrsquo 0 1 0 1 0 1 0 0

Byte

7

Protocol

Level

0 0 0 0 0 0 0 1

Byte

8

Connect

Flag

Use

r

flag

Passwo

rd

flag

WillReta

in

Flag

WillQo

s Flag

WillFl

ag

CleanSessi

on

Flag

Reser

ve

Byte

9-10

KeepAlive

(1) 版本

Protocol Level 必须设置为 4平台只支持协议版本 v 311不支持更老

的版本使用第三方客户端时需要注意选择正确的版本

(2) user flag 与 password flag

平台不允许匿名登陆因此这两个标志位在连接时必须设置为 1否则认为

协议错误平台将会断开连接

(3) Will flag 与 WillretainflagWillQosFlag

Will flag 为 0时WillQosFlag 和 WillRetainFlag 必须为 0Will Flag

为 1时WillQosFlag 只能为 012

1当该设备下一次正常上线后服务器会清除之前的 will 消息(包括

retain 消息)

2如果设备上线时设置了 Will Topic 和 msg且将 WillRetainFlag 设

置为 1只有设备异常断开后服务器才会将该 Will msg 分发给新的 Will

Topic 的订阅者且 Qos 级别以订阅的 Request qos 级别为准

3如果设备上线时设置了 Will Topic 和 msg且将 WillRetainFlag 设

置为 0服务器不会存储该消息当设备异常断开后会将该 Will msg 以设

备设置的 WillQosFlag的 Qos级别进行分发

(4) CleanSessionFlag

若客户端将 clean session 标志位设置为 0当其断开后平台将会保存

sessionsession 需保持的内容包含

客户端订阅的 topic列表

中移物联网有限公司 OneNET 开发文档中心

还未完成确认的 Qos1Qos2级别的 publish消息

客户端保存 session 的内容包含

已经发送到服务端的但还没有收到确认的 Qos1Qos2消息列表

待发送的 Qos0列表

若客户端将 clean session 标志位设置为 1当其断开后平台会清除设备

的订阅列表及未完成确认的 Qos1Qos2 的 publish消息

(5) Reserve

保留位置 0

(6) KeepAlive 保活时间

每个客户端可自定义设置连接保持时间最短 120秒最长 65535 秒

消息体(Payload) Description 是否必须存在 格式

Field1 Client

Identifier

是 2字节字串长度 + utf8字

Field2 UserName 是 2字节字串长度 + utf8字

Field3 UserPassword 是 2字节字串长度 + utf8字

目前平台支持的方式为以后两种

方式 1设备 ID项目 ID鉴权信息(auth_info)

字段设置 消息示例

client_id设置为平台创建设备时的

设备 id

username设置为ldquo项目 IDrdquo

password设置为ldquo鉴权信息

(auth_info)rdquo

client_id=rdquo123rdquo

username=rdquo433223rdquo

password=rdquo注册的鉴权信息rdquo

各字段说明如下

鉴权信息(auth_info)在平台申请设备时填写设备的 auth_info 属性(数

字+字母的字符串)该属性需要产品内具备唯一性(可使用设备出厂唯一编号)

方式 2设备 ID + APIKey(项目 ID也需要填写)

字段设置 消息示例

client_id设置为平台创建设备时的

设备 ID

username设置为ldquo项目 IDrdquo

client_id=rdquo123rdquo

username=rdquo433223rdquo

password=Api Key

中移物联网有限公司 OneNET 开发文档中心

password设置为ldquoAPI鉴权信息

(auth_info)rdquo

项目 ID在平台添加项目时平台生成的 ID

APIKey在平台上创建产品时生成的 APIKey

连接包实例如下

Send one mqtt packet

FixHeader

PacketTag = 16

PacketType = 1

RemainLength = 34

VariableHeaderConnect

protocol_name_len_= 4

protocol_name_= MQTT

protocol_level_= 4

connect_flag_= 192

keep_alive_= 12000

client_id_len_= 8

client_id_= 34764813

usr_name_len_= 6

usr_name_= 150295

password_len_= 4

password_= push

MQTT0x10 0x22 0x00 0x04 0x4D 0x51 0x54 0x54 0x04 0xC0 0x2E 0xE0 0x00 0x08 0x33

0x34 0x37 0x36 0x34 0x38 0x31 0x33 0x00 0x06 0x31 0x35 0x30 0x32 0x39 0x35 0x00

0x04 0x70 0x75 0x73 0x68

Send One Packet Succ

中移物联网有限公司 OneNET 开发文档中心

622 CONNACK (服务端确认连接建立)

Fixed Header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type = 2 0 0 0 0

byte2 - 5 Remaining Length(该字段占用 1-4个字节)

Variable Header

Description 7 6 5 4 3 2 1 0

byte 1 Acknowledge Flags 0 0 0 0 0 0 0 Sp

byte 2 Return Code x x x x x x x x

Sp Session Present Flagsession信息在服务器已保持置 1未保存置

0

返回码说明

返回码 描述

0 成功

1 协议版本错误

2 非法的 clientid

3 服务不可用

4 用户名或密码错误

中移物联网有限公司 OneNET 开发文档中心

5 非法链接(比如 token非法)

失败

如果 connect包不符合协议内容约束则直接断掉连接而不需要发送 conn

ack包

如果鉴权或授权失败回复一个带非 0错误码的 connack包

成功

必须断掉重复的 clientid

执行 cleansession 对应的操作

必须回复一个 connack回复码为 0

开始消息传递并加入 keepalive的监视

PS客户端需要等到服务端的 connack报文才能发送后续的数据包

623 PUBLISH(发布消息 client -gt server)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type DUP f

lag

QoS Level RETAI

N

byte2 - 5 Remaining Length(该字段占用 1-4 个字节)

DUP

QoS2Qos1如果为 0则表示是第一次发送该包如果为 1则表示

为重复发送的包

Qos0DUP 必须为 0

中移物联网有限公司 OneNET 开发文档中心

QoS 指定了该 publish包的 Qos 等级如下

Qos 值 Bit2 Bit1 描述

0 0 0 最多发送一次

1 0 1 至少发送一次

2 1 0 只发送一次

RETAIN 保留标志位如果为 1服务器存储最新一条 RETAIN消息以便

分发给新的订阅者如果 RETAIN为 1Payload 为空服务器分发该消息后会

清空该 topic 下的 RETAIN 消息

PS该版本实现了 Qos0Qos1Qos2

Variable Header

Description 格式 是否必须

Field1 TopicName 2 字节字串长度 + utf8字

Field2 PacketIdent

ifier

2 字节 QoS0否QoS1Qos2是

Payload

内容根据不同业务自定义

624 PUBLISH(发布消息 server -gt client)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type DUP f

lag

Qos Level RETAIN

byte2 - 5 Remaining Length(该字段占用 1-4个字节)

DUP

Qos2QoS1如果为 0则表示是第一次发送该包如果为 1则表示

为重复发送的包

中移物联网有限公司 OneNET 开发文档中心

Qos0DUP 必须为 0

QOS 指定了该 publish包的 qos等级如下

Qos 值 Bit2 Bit1 描述

0 0 0 最多发送一次

1 0 1 至少发送一次

2 1 0 只发送一次

RETAIN如果服务器分发的消息是 RETAIN 消息则将该标志位置 1否则置

0

PS该版本实现 Qos0Qos1Qos2其中服务器分发消息的 Qos级别是以 Clien

t-gtServer 发送的 publish 包的 qos 等级为准非订阅的 topic 的 Qos 等级R

etain 消息是以订阅的 Request Qos 级别进行推送

VariableHeader

Description 格式

Field1 TopicName 2 字节字串长度 + utf8字

Payload

内容根据不同业务自定义

625 PUBACK(收到发布消息确认)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

中移物联网有限公司 OneNET 开发文档中心

626 PUBREC(发布消息收到)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

627 PUBREL(发布消息释放)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

628 PUBCOMP(发布消息完成)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

中移物联网有限公司 OneNET 开发文档中心

byte 1~

2

PacketIdentifier PacketIdentifier

629 SUBSCRIBE(订阅请求)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

Payload

Description 格式

Byte1~

n

TopicName 2 字节字串长度 + utf8字

Byten+

1

Request Qos 服务质量要求(只能为 0

12)

topic 说明

可以包含一个或多个 topic

topic必须是数字英文反斜杠()的组合目前不支持通配符

每个客户端最多订阅 100个 topic

以下 topic 被系统保留使用(客户端不能订阅)

类型 说明

$开头 平台保留

中移物联网有限公司 OneNET 开发文档中心

6210 SUBACK(订阅确认)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

Payload

Description 7 6 5 4 3 2 1 0

byte 1 retcode

返回码说明

返回码 描述

0x00 成功(granted qos = 0)

0x01 成功(granted qos = 1)

0x02 成功(granted qos = 2)

0x80 失败

6211 UNSUBSCRIBE(取消订阅)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

中移物联网有限公司 OneNET 开发文档中心

Payload

Description 格式

Byte1~

n

TopicName 2 字节字串长度 + utf8字

可以包含一个或多个 topic

6212 UNSUBACK(取消订阅确认)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

6213 PING(客户端发送 PING(连接保活)命令)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

NULL NULL

注PING命令无 VariableHeader

中移物联网有限公司 OneNET 开发文档中心

6214 PINGRSP(PING命令回复)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

NULL NULL

注PINGRSP无 VariableHeader

6215 DISCONNECT(断开连接)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

NULL NULL

注DISCONNECT无 VariableHeader

中移物联网有限公司 OneNET 开发文档中心

第七章 设备开发流程

71 连接鉴权

Device Onenet

(Connect)鉴权请求

(ConnAck)鉴权结果

加载session

鉴权

图7-1 连接鉴权

设备向平台发起 connect 请求connect 中携带鉴权信息具体

参见(报文格式参考 621)

平台拿到鉴权信息进行鉴权

鉴权通过后如果 cleansession=0 平台将会加载保存的设备

的一些信息如订阅列表(621中描述)

如果 cleansession=1 设备没有保存信息在平台则不加载设

备相关信息

返回鉴权结果 ConnAck(报文格式参考 621)

72 消息发布

721 数据点上报

设备使用 publish 报文来上传数据点 报文格式如下

中移物联网有限公司 OneNET 开发文档中心

VariableHeader

Field 名称 说明 格式

Field1 TopicName=rdquo$dprdquo $dp 为系统上传数据点

的指令

2字节字串长度 + utf8

字串

Payload

Payload包含真正的数据点内容支持的格式如下

Byte 1 Bit0-5数据类型指示目前支持

Type = 1

Type = 2

Type = 3

Type = 4

Type = 5

Type = 6

Type = 7

Bit6-7 flags 根据具体类型不同意义

Type6Type7这两种需要填写时间戳的数据类型

如果填入了时间戳则须将 bit7 置 1否则置 0(即

忽略数据类型说明中的日期时间相关字段)

0 0 0 0 0 0 0 1

Byte 2 根据数据类型指示不同

Byte n

中移物联网有限公司 OneNET 开发文档中心

数据类型 1(type == 1)格式说明

数据类型 2(type == 2)格式说明

Byte 1 数据点类型值1 1JSON 格式 1 字符串 0 0 0 0 0 0 0 1

Byte 2 指示后面 json 字符串长度

固定两字节长度高位字节值为 0x00

Byte 3 固定两字节长度低位字节值为 0x41

Byte 4

ldquodatastreamsrdquo[ 可以同时传递多个数据流

ldquoidrdquordquotemperaturerdquo

ldquodatapointsrdquo[数据流可以有多个数据点

rdquoatrdquordquo2013-04-22 222222rdquo可选

rdquovaluerdquo 365用户自定义

]

ldquoidrdquordquolocationrdquo

ldquodatapointsrdquo[hellip]

hellip

]

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

Byte n

Byte 1 数据点类型指示type=2 二进制数据 0 0 0 0 0 0 1 0

Byte 2 指示后面 json 字符串长度

固定两字节长度-高位字节值为 0x00

Byte 3 固定两字节长度-低位字节值为 0x10

Byte 4

rdquods_idrdquordquoimagerdquo 创建数据流时定义的 ID(必填)

ldquoatrdquordquo2014-10-25 122323rdquo 时间(可选)

rdquodescrdquo字符串或 json 对象对该数据的描述(可选)

hellip

Byte n

Byte n+1 指示后面二进制数据长度

固定四字节长度-第 1 字节(最高)值为 0x00

Byte n+1 固定四字节长度-第 2 字节值为 0x00

Byte n+2 固定四字节长度-第 3 字节值为 0x01

Byte n+3 固定四字节长度-第 4 字节(最低)值为 0x00

Byte n+4 该域目前最大支持 3M

中移物联网有限公司 OneNET 开发文档中心

数据类型 3(type == 3)格式说明

数据类型 4(type ==4)格式说明

hellip 本例中的该域 256 字节数据

Byte n+260

Byte 1 数据点类型指示type=3 JSON 格式 2 字符串 0 0 0 0 0 0 1 1

Byte 2 指示后面字符串长度

固定两字节长度高位字节值为 0x00

Byte 3 固定两字节长度低位字节值为 0x46

Byte 4 通用格式

ldquodatastream_id1rdquordquovalue1rdquo

ldquodatastream_id2rdquordquovalue2rdquo

hellip

示例

ldquotemperaturerdquo225rdquohumidityrdquordquo952rdquo

hellip

hellip

hellip

hellip

Byte n

Byte 1 数据点类型指示type=4 JSON 格式 3 字符串 0 0 0 0 0 1 0 0

Byte 2 指示后面字符串长度

固定两字节长度高位字节值为 0x00

Byte 3 固定两字节长度低位字节值为 0x46

Byte 4 通用格式

ldquodatastream_id1rdquoldquodatetime1rdquordquovalue1rdquo

ldquodatastream_id2rdquo ldquodatetime2rdquordquovalue2rdquo

hellip

示例

ldquotemperaturerdquoldquo2015-03-22 223112rdquo225

hellip

hellip

hellip

hellip

Byte n

中移物联网有限公司 OneNET 开发文档中心

数据类型 5(type == 5)格式说明

数据类型 6(type == 6)格式说明

Byte 1 数据点类型指示type=5 自定义分隔符 0 0 0 0 0 1 0 1

Byte 2 指示后面字符串长度

固定两字节长度高位字节值为 0x00

Byte 3 固定两字节长度低位字节值为 0x41

Byte 4 消息中最前面两字节为用户自定义的域中分隔符和域间分隔符

这两个分隔符不能相同比如采用逗号作为域中分隔符分号作

为域间分隔符的格式如下

feild0feild1hellipfeildn

其中每个 field 格式支持 3种

field 格式 1 3 个子字段分别是数据流 ID时间戳数据值

通用格式

Datastream_iddatetimevalue

field 格式 2 2 个子字段分别是数据流 ID 和数据值省略时

间戳通用格式

Datastream_idvalue

field 格式 3 1 个子字段省略了数据 ID 和时间戳只传输数

据值平台将用该域(feild)所在的位置号(从 0 开始)作为数据

流 ID通用格式

value

示例

(1)temperature2015-03-22

223112225102pm258910

(2)temperature2015-03-22

223112225102pm258910

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

Byte n

Byte 1 数据类型指示type=6 带时间自定义分隔符 0 0 0 0 0 1 1 0

Byte 2 年(后两位)例如 2016 年则该字节为 16 0 0 0 1 0 0 0 0

Byte 3 月(1-12)

Byte 4 日(1-31)

Byte 5 小时(0~23)

Byte 6 分钟(0~59)

Byte 7 秒(0~59)

Byte 8 指示后面字符串长度

固定两字节长度高位字节值为 0x00

Byte 9 固定两字节长度低位字节值为 0x41

Byte 10 消息中最前面两字节为用户自定义的域中分隔符和域间分隔符

具体格式见 type=5 说明若相关域中没有时间戳则采用本类

hellip

中移物联网有限公司 OneNET 开发文档中心

数据类型 7(type == 7)格式说明(每次最多 500个数据流的浮点数)

hellip 型的默认时间戳当作数据点的时间来存储

Byte n

Byte 1 Bit0-5 数据类型指示type=7 可离散浮点数数据流

Bit6保留置 0

Bit7 时间指示位1携带 6字节时间

1 0 0 0 0 1 1 1

Byte 2 年(后两位)例如 2016 年则该字节为 16 0 0 0 1 0 0 0 0

Byte 3 月(1-12)

Byte 4 日(1-31)

Byte 5 小时(0~23)

Byte 6 分钟(0~59)

Byte7 秒(0~59)

Byte 8 数据流名称(取值范围 1-65535)

高位字节值为 0x00

Byte 9 低位字节值为 0x01

Byte10 数据流个数(取值范围 1-500)

高位字节值为 0x00

Byte11 低位字节值为 0x01

Byte 10 4 字节 float 类型低位在前高位在后

Byte 11

Byte 12

Byte 13

Byte n 数据流名称(取值范围 1-65535)

高位字节值为 0x24

Byte n+1 低位字节值为 0x37

Byte n+2 数据流个数(取值范围 1-500)

高位字节值为 0x01

Byte n+3 低位字节值为 0x00

Byte n+2 4 字节 float 类型低位在前高位在后

Byte n+4

Byte n+5

Byte n+6

中移物联网有限公司 OneNET 开发文档中心

7211 Qos0(Client-gtServer)

Device OneNet

Publish $dp(Qos0)

存储

图7-2 QoS连接图

设备发布 Qos0 消息(上报数据点)

平台收到上报数据点后保存起来

7212 Qos1(Client-gtServer)

Device OneNet

Publish $dp(Qos1)

存储

PubAck

图7-3 Qos1连接图

设备发布 Qos1 消息(上报数据点)

中移物联网有限公司 OneNET 开发文档中心

平台收到上报数据点后保存起来

平台给设备回复相应的 PubAck (报文格式参考 625)

7213 Qos2(Client-gtServer)

Device OneNet

Publish $dp(Qos2)

存储

PubRec

PubRel

PubComp

图7-4 Qos2连接图

设备发布 Qos2 消息(上报数据点)

平台收到上报数据点后保存起来

平台给设备回复相应的 PubRec报文

设备需回复平台 PubRel报文如超时不回平台则会断开相应连接

平台给设备回复 PubComp报文

注数据点上报功能不支持 Retain 特性

中移物联网有限公司 OneNET 开发文档中心

722 平台命令(下发amp回复)

7221 命令下发

平台使用 publish 报文来下发平台指令 报文格式如下

FixHeader

参考 623

VariableHeader

Field 名称 说明 格式

Field1 TopicName=rdquo$creqcmduuidrdquo $creq为系统下发

Cmd 的 指 令

cmduuid为该条指

令的 uuid

2字节字串长度 +

utf8字串

Payload

Payload包含真正的指令内容

72211 Qos0(Server-gtClient)

DeviceOneNet

Publish $creq(Qos0)

图7-5 Qos0命令下发

命令下发

平台向设备发送 topic为$creq的消息(该 topic为平台命令)

中移物联网有限公司 OneNET 开发文档中心

设备收到 topic 为$creq 的 topic 时需将其作为平台下发的指令来处

注目前命令下发以 Qos0级别进行推送

7222 命令回复

设备使用 publish 报文来回复平台指令 报文格式如下

FixHeader

参考 623

VariableHeader

Field 名称 说明 格式

Field1 TopicName=rdquo$crspcmduuidrdquo $crsp为系统处理

设备回复 cmd 的

指令cmduuid为

该条指令的 uuid

2字节字串长度 +

utf8字串

Payload

Payload包含真正回复的指令内容

72221 Qos0(Client-gtServer)

DeviceOneNet

Pulish $crsp(Qos0)

图7-6 Qos0下发命令

中移物联网有限公司 OneNET 开发文档中心

72222 Qos1(Clientlt-gt Server)

DeviceOneNet

Pulish $crsp(Qos1)

Puback

图7-7 Qos1下发命令

如果设备回复响应时以 Qos1回复则平台需要给设备回复一个 Puback 报文

72223 Qos2(Clientlt-gt Server)

DeviceOneNet

Pulish $crsp(Qos2)

PubRec

PubRel

PubComp

图7-8 Qos2下发命令

如果设备回复响应时以 Qos2回复则

1平台需回复设备一个 PubRec报文

中移物联网有限公司 OneNET 开发文档中心

2设备在收到 PubRec后需向平台回复 PubRel报文

3平台收到 PubRel 报文后向设备回复 PubComp报文

73 创建 Topic

Device OneNet

HTTP 请求

HTTP 响应

图7-9 创建Topic

设备通过发送 HTTP请求进行 topic 的创建操作

平台收到请求后创建 topic 并返回结果

请求及响应定义如下

HTTP方法 POST

URL httpapihecloudscommqtttopic

HTTP头部 api-keyxxxx-ffff-zzzzz必须 master key

URL参数

HTTP body

内容

ldquonamerdquordquoxxxxxxrdquo topic 名字只能由英文下划线反斜杠组成最长

1024个字符同一产品下 topic name 不重复

成功返回

errno 0

errorldquosuccrdquo

说明 每个产品最多 100个 topic

中移物联网有限公司 OneNET 开发文档中心

74 订阅

Device OneNet

Subscribe

Suback

更新设备订阅列表

图7-10 订阅

设备发起订阅请求(报文格式参考 629)

平台收到请求后更新 topic列表

平台给设备回复 SubAck (报文格式参考 6210)

注subscribe 的 request qos级别可以为 012

75 取消订阅

Device OneNet

UnSubscribe

UnSuback

更新设备订阅列表

图7-11取消订阅

中移物联网有限公司 OneNET 开发文档中心

设备发起取消订阅请求 (报文格式参考 6211)

平台收到请求后更新 topic 列表

平台给设备回复 UnSubAck (报文格式参考 6212)

76 推送设备 Topic

761 Publish 报文推送

Qos0设备使用 Qos 级别为 0的 Publish报文来进行推送

Device OneNet

Publish(Qos0)

Device

以Qos0 Publish到订阅设备

图7-12 Qos0推送

设备发起推送 topic请求(以 Qos0级别)

平台收到请求后将 topic以 Qos0级别推送到相关订阅设备(支持离线设

备推送)

平台不返回 PubAck或 PubRec 等报文

Qos1

设备使用 Qos级别为 1的 publish报文来推送 Topic

中移物联网有限公司 OneNET 开发文档中心

Device OneNet

Publish(Qos1)

PubAck

Device

以Qos1 Publish到订阅设备

设备回复平台 PubAck

图7-13 Qos1发布

设备发起推送 topic请求(以 Qos1级别)

平台收到请求后将 topic以 Qos1级别推送到相关订阅设备(支持离线设

备推送)

平台返回 PubAck 报文

Qos2

设备使用 Qos级别为 2的 publish报文来推送 Topic

中移物联网有限公司 OneNET 开发文档中心

Device OneNet

Publish(Qos2)

PubRec

Device

以Qos2 Publish到订阅设备

PubRec

PubRel

PubComp

PubRel

PubComp

图7-14 Qos2推送

设备发起推送 topic请求(以 Qos2级别)

平台收到请求后回复 PubRec报文

设备收到 PubRec后需回复 PubRel报文 (如超时不回复平台会断开与设

备的连接)

平台收到 PubRel 报文后回复 PubComp 给设备

平台在回复 PubComp 后会以 Qos2 级别推送到相关订阅设备(支持离线设

备推送)

设备需回复 PubRec报文 (如超时不回复平台会断开与设备的连接)

平台发送 PubRel 报文给设备

设备需回复 PubComp(发布完成)

Publish报文的格式如下

FixHeader

参考 623

中移物联网有限公司 OneNET 开发文档中心

VariableHeader

Field 名称 说明 格式

Field1 TopicName 填写设备订阅的 topic 2字节字串长度 + utf8

字串

Payload

Payload为设备自定义内容

762 HTTP 请求推送

Device OneNet

HTTP 请求

HTTP 响应

Device

Publish到订阅设备

图7-15 HTTP请求

设备以 HTTP 的方式发起推送 topic 请求

平台收到请求后将 topic推送到相关订阅设备 (目前只支持在线推送)

平台返回推送结果

请求及响应定义如下 HTTP方法 POST

URL httpapihecloudscommqtt

HTTP头部 api-keyxxxx-ffff-zzzzz必须 master key

URL参数 topic=ldquoXXXXXXrdquo必选在发送 mqtt协议的 topic 必填

HTTP body内容 用户自定义 Json 或二进制数据(小于 64K)

成功返回

errno 0

errorldquosuccrdquo

中移物联网有限公司 OneNET 开发文档中心

77 离线 Topic

推送 Topic只针对在线设备进行 topic 消息的推送离线设备不会收到订阅

的 topic 的消息离线 Topic则会将该消息推送给在线以及离线设备

1 如果设备在上线时设置了 clean session flag服务端会删除其订阅的

topic及相关的离线 topic消息

2 如果设备没有设置 clean session flag如果有与该设备相关的离线

topic消息则在鉴权成功后将离线消息推送给设备

3 遗嘱消息(will msg)只会推送给订阅了该 will topic的在线的设备离

线设备不会收到

4 离线消息的有效期默认为 2 天(暂不支持用户设定有效期)服务器只会

推送在 2天内的最近 10 条消息

78 数据点订阅

数据点订阅同一产品下的设备可以订阅其他设备的数据点订阅的 topic

格式为deviceid数据流名称即

被关注的设备在上传了该数据流名称的数据点后订阅了该 topic的其他设备都

会收到上传的数据点

1 AB设备的 deviceid分别为 92779278

2 A 设备订阅了名为92789527 的 topic(9278 为设备 B 的 id9527 为 B

设备上传的数据流名称)

3 B 设备上传了名为 9527的数据流(数据点为 11 1578hellip)

4 A 设备会收到多条(取决于设备 B 上传的数据点的个数)推送的 topic 名

为92789527 的 publish消息消息的 payload中则包含设备 B 上传的数据

注目前支持订阅的数据点的类型为 Type1~Type7(详见 721节)

中移物联网有限公司 OneNET 开发文档中心

第八章 常见问题 FAQ

用户在基于 OneNET 平台进行产品开发的过程中可能会遇到各种各样的问

题开发过程中遇到的问题一方面可以参考 OneNET 文档中心的文档或者本文

档前几个章节的内容另一方面用户可以参考本章节总结的常见问题希望这些

文档能对用户在开发过程中有一定的指导和帮助

本章将分三个小节对用户在开发产品过程中可能遇到的问题进行梳理分别

为终端设备接入 OneNET平台的常见问题API调用的常见问题和 OneNET平台

的能力

81 终端设备接入 OneNET 平台的常见问题

序号 问题描述 原因分析 解决方法

1

2

3

4

5

6

7

82 API 调用的常见问题

序号 问题描述 原因分析 解决方法

1

2

3

4

5

6

7

8

9

中移物联网有限公司 OneNET 开发文档中心

83 使用 OneNET平台遇到的常见问题

序号 问题描述 原因分析 解决方法

1

2

3

4

5

6

7

8

Page 10: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com

中移物联网有限公司 OneNET 开发文档中心

图2-2 需要终端响应的API流程

终端设备 OneNET平台 应用开发平台

1配置应用开发地址Token等参数

2向应用开发平台发起URLampToken验证

3解析验证请求参数返回验证消息

应用平台与OneNET平台已经建立连接

4调用API指令HTTP请求

5返回平台侧执行结果错误代码和uuid

6API指令执行完毕

图2-3 不需要终端响应的API流程

终端设备 OneNET平台 应用开发平台

1配置应用开发地址Token等参数

2向应用开发平台发起URLampToken验证

3解析验证请求参数返回验证消息

应用平台与OneNET平台已经建立连接

4调用API指令HTTP请求MQTT请求

5返回平台侧执行结果错误代码和uuid

6相应指令请求返回数据 推送数据及执行结果给应用平台

7API指令执行完毕

中移物联网有限公司 OneNET 开发文档中心

第三章 终端设备接入 OneNET 平台流程

终端设备与 OneNET 平台进行数据交互需经过公网到达平台根据 OneNET

平台与网络运营商的关系终端设备智能网关OneNET平台以及第三方应用四

者的网络关系可归纳如图 3-1所示

图3-1 终端设备与服务器网络关系

图 3-1 中终端设备或智能网关设备与 OneNet 平台使用 TCPIP 建立网络连

接使用 MQTT协议进行与平台进行数据通信

31 终端设备接入 OneNET 平台前的准备工作

311 硬件准备

设备终端接入 OneNET平台的通信方式也是多种多样的比较常用的有 GPRS

无线 WIFI以太网口GPRS 方式需要 GPRS 模块和 SIM 卡的支持无线 WIFI 模

块需要 WIFI 模块支持WIFI 模块推荐选用 ESP8266 串口 WIFI 模块GPRS 模块

推荐选用 SIM900A模块

312 软件准备

设备终端接入 OneNET 平台使用 MQTT 协议使用嵌入式设备需移植 SDK

到 MCU详见麒麟发开板接入实例

中移物联网有限公司 OneNET 开发文档中心

32 终端设备接入 OneNET 平台步骤

321 OneNET 平台创建产品及设备

3211 注册用户账号

进入 OneNET官网(httpsopeniot10086cn)点击首页右上角的ldquo注

册rdquo按钮注册用户账号

OneNET 支持ldquo个人用户rdquo和ldquo企业用户rdquo两种注册方式你可以根据您的

实际情况选择注册方式

以个人用户注册为例用户需在对应选项依次填写用户名用户密码所在

地手机号码图片验证码以及手机验证码并完成注册注册页面如图 3-2所

示注册完成后回到主页点击ldquo登录rdquo即可进入 OneNET 的官方主页并由

此进入到你的ldquo开发者中心rdquo

如果客户产品后续需要进行规模化量产建议以企业的名义进行注册注册

时注意注册信息的准确填写另外个人版和企业版在功能上无差异

图3-2 用户账号注册页面

3212 创建产品和设备

在进入到你的ldquo开发者中心rdquo后点击右上角的 ldquo创建产品rdquo在弹出页面中

按照提示填写产品的基本信息进行产品创建在创建过程中请您按照提示尽

可能完整全面地填写相应内容这样更方便您后期对产品进行管理

创建产品页面如图 3-3 和图 3-4其中设备接入方式选择ldquo公开协议rdquo联网

方式选择跟据实际设备进行选择设备接入协议选择ldquoMQTTrdquo

中移物联网有限公司 OneNET 开发文档中心

产品创建完成后页面弹出ldquo创建产品成功rdquo如图 3-5所示点击ldquo立即

添加设备rdquo显示如图 3-6所示界面依次填写ldquo设备名称rdquo鉴权信息设备

名称自定义鉴权信息用于平台对终端设备鉴权每台设备具有唯一性建议设

置为产品出厂编号方便管理鉴权信息需写入设备

图3-3 创建产品页面

中移物联网有限公司 OneNET 开发文档中心

图3-4 创建产品页面

图3-5 创建产品成功页面

中移物联网有限公司 OneNET 开发文档中心

图3-6 添加设备页面

322 终端设备软硬件初始化

终端设备在上电以后需要完成设备的软硬件初始化硬件初始化包括各个

硬件模块的上电处理器的寄存器初始化工作模式初始化等等软件初始化包

括基础通信套件初始化应用接口初始化应用程序初始化等等

323 终端创建设备及资源

终端设备创建设备(device_id)配置产品 ID鉴权信息注册码连接

服务器 IP端口号等信息创建成功后与平台建立登陆连接连接成功后即可向

平台上报数据点

324 登录 OneNET平台

终端设备的基础通信套件完成初始化以及设备资源创建完成后可向

OneNET平台发送登陆请求返回登录结果如果参数错误或者登录超时平台会

返回登录失败如果验证通过平台会返回登录成功

若终端设备登录平台成功设备名称左边的圆形图标会由灰色(离线状态)

变成绿色(在线状态)如图 3-7所示

中移物联网有限公司 OneNET 开发文档中心

图3-7 平台侧设备状态显示

325 设备数据点上报

终端设备与平台成功建立连接后设备使用 publish 报文向平台上报数据点

平台收到数据点后保存到对应数据流下方便应用查阅数据点上报格式以及类型详见

721

图3-8 平台侧收到设备数据流显示

326 创建应用

用户可以利用上传的数据创建相关的应用发布直观的展示页面目前在平台应用孵化

器中提供了曲线图柱状图表盘物体位置图片和开关等应用

在产品详情页面点击ldquo应用管理rdquo进入应用管理主界面如下图

中移物联网有限公司 OneNET 开发文档中心

图3-9 应用管理模块

点击ldquo创建应用rdquo输入应用名称点击ldquo创建rdquo如下图

图3-10 新应用创建

保存成功后点击编辑按键进入应用编辑页面如下图

中移物联网有限公司 OneNET 开发文档中心

图3-11 应用编辑入口

图3-12 应用编辑界面

在应用编辑页面中使用左侧的控件进行应用编辑此例中我们选择表盘控件来显示

刚刚上传的数据点击表盘控件如下图所示

中移物联网有限公司 OneNET 开发文档中心

图3-13 表盘控件添加

在右侧的属性中选择设备以及数据源(及刚刚上传的数据流)如下图

图3-14 表盘控件数据流绑定

在确定好数据流之后可以看到表盘回显示成我们添加的数据的值其他的

刷新频率以及表盘显示样式读者可以自行更具需求加以修改

完成应用编辑之后点击右上角保存按钮退出应用编辑

在应用管理页面点击该应用即可查看编辑好的应用页面

中移物联网有限公司 OneNET 开发文档中心

图3-15 保存应用

图3-16 应用查看与分享

该应用可以通过共享ldquo发布链接rdquo的方式将该应用共享给他人

33 设备批量接入

单个设备可以通过平台的开发者中心添加设备的方式进行创建若用户有多

个设备直接与平台 TCP连接的终端通过手动添加需耗费大量时间人力OneNET

中移物联网有限公司 OneNET 开发文档中心

为大批量接入用户提供 3种批量创建设备的方案

331 平台设备批量复制

此种方式为选择某个设备作为复制的模板通过导入 EXCEL的方式进行设备

复制厂商可以在小批量测试时使用该功能

在设备列表中点击查看详情

图3-17 设备批量接入

在设备详情页面点击批量导入设备信息

中移物联网有限公司 OneNET 开发文档中心

图3-18 导入设备信息

点击批量复制

图3-19 批量复制

中移物联网有限公司 OneNET 开发文档中心

目前提供三种批量创建的方式 excel 导入的方式为主要接入方式选择

excel导入点击下载模板

图3-20 快速导入

图3-21 Excel导入

打开下载下来的 excel模板表中的 titledesctags等均为将要批量导

入的设备的数据其中的 title 和 auth_info 为必填选项title 为设备名

中移物联网有限公司 OneNET 开发文档中心

auth_info对应设备的鉴权信息

图3-22 Excel格式

填写 3个设备信息

图3-23 Excel内容

三个设备的 title和 auth_info都一样均为 20170808000012017080800002

2017080800003保存该表格点击ldquo点击上传rdquo上传保存好的 excel 文件

点击ldquo确定导入批量rdquo

中移物联网有限公司 OneNET 开发文档中心

图3-24 导入上传

图3-25 确认创建

可以看到在原设备目录下新增了 3个设备其名称分别为 2017080800001

20170808000022017080800003

中移物联网有限公司 OneNET 开发文档中心

图3-26 批量创建的设备

点击设备详情可以看到设备目录下各个设备的鉴权信息与表格中所填

写的内容一致

图3-27 设备ID及鉴权信息

至此完成了通过批量设备复制的方式完成设备批量创建的过程用户如果

要使用这个功能需要将自己终端的出厂序列号整理到这个 excel表中然后利

中移物联网有限公司 OneNET 开发文档中心

用上传表格的方式进行批量创建

332 应用平台调用新增设备 API

OneNET 提供了创建设备的 API接口

图3-28 新增设备API接口

其中的 auth_info 参数对应着设备的鉴权信息通过调用此 API 接口可以

实现在平台上新增设备的功能用户如果有自己的第三方应用平台进行设备管理

可以通过多次调用此接口的方式进行设备的批量创建在调用接口时需要确保每

次调用的 auth_info 参数对应着自己的每一个终端不同的出厂序列号

333 终端调用注册 API

API 实际是 HTTP 协议的通信协议终端也可以通过封装 HTTP 包发送注册

中移物联网有限公司 OneNET 开发文档中心

设备请求的方式调用 API

终端调用注册 API 创建设备并接入的流程如图 3-29所示

平台

TCP连接协议接入机

创建产品

发送连接报文

连接应答

数据应答

发送数据报文

生成连接报文

设备

发送下行命令 下发命令

解析下行命令

生成存储数据报文

解析连接应答

解析数据应答

必要流程

可选流程

存储到数据流 数据源 创建应用

心跳应答

发送心跳报文生成心跳报文

解析心跳应答

平台操作

设备操作

利用设备本身的sn和产品的设备注册码生成注册报文

TCP连接API服务器

发送注册报文

注册应答

解析设备ID

创建设备

设备开机

读取硬件中烧录的设备编号(sn)

图3-29 终端调用注册API接入流程

1) 创建产品

重要参数产品 ID注册码产品 APIKey(见附录一)

2) 生成并发送注册报文

每一个用户终端中都有厂商烧录的唯一出厂序列号(sn)终端上电

之后应该首先读取自己的 sn然后通过 1)中的注册码和 sn 一起组成注

册报文

注册报文格式如下例

POST httpapihecloudscomregister_deregister_code=6TM7OkhNsTjATvFx HTTP11

Host apihecloudscom

Content-Length 48

中移物联网有限公司 OneNET 开发文档中心

sn02136616511001titletestdevice0001

其中

6TM7OkhNsTjATvFx 为产品注册码

02136616511001 是本例中模拟的设备唯一编号

testdevice0001 是本例中模拟的设备名

若上传的数据格式以及参数鉴权均正确则平台会返回设备创建成功

返回设备 ID以及该设备对应的设备 api-key

HTTP11 200 OK

Date Wed 09 Aug 2017 064821 GMT

Content-Type applicationjson

Content-Length 95

Connection keep-alive

Server Apache-Coyote11

Pragma no-cache

errno0datadevice_id11142371keyq9Mw0zqiAPjTwqfyCk2mWrUi8=errorsucc

3) 在步骤 2)完成之后平台上的设备就已经成功创建了终端需要

重新 TCP连接到对应协议的服务器上完成设备连接(与设备进行映射)以

及上传数据的操作

34 设备 ID 与产品序列号

通过 OneNET构建的物联网系统中有两套比较重要的编码设备 ID与产品序列号

(SN)其中

产品序列号是由厂商指定的在厂商的产品范围内是保持唯一的在出厂前烧写到每

一个终端中通常包含在与平台通信的数据中并以条形码的方式贴在产品的包装上用

于从用户的角度区分每一个独立的终端

设备 ID是在平台创建设备时由 OneNET分配的平台范围内唯一的编号应用于第三

方平台调用 OneNET API时使用

在创建设备时OneNET平台需要用户以设备 sn为参数进行设备创建成功之后平

台会分配一个设备 ID这样 OneNET内部就有了一个 sn-设备 ID的映射关系

终端登陆使用的鉴权信息是出厂时烧写好的 sn鉴权通过之后平台可以将该终端

上传是数据放到对应的设备中

上层应用通过创建设备 API或者查询设备 API建立 sn-设备 ID映射表在需要操作

某一设备时首先可以获取的是终端的 sn号(因为对用户是可见的)通过映射表获取设

中移物联网有限公司 OneNET 开发文档中心

备 ID然后再通过 API访问 OneNET平台上的对应设备

两套编码在物联网系统中的应用位置如下图所示

物联网应用

OneNET

终端

(烧写sn)

HTTP API 以设备ID为参数进行API访问

接入协议以sn为鉴权参数进行设备连接

设备

设备名

设备ID

设备sn

设备标签

sn 设备ID

snmdash设备ID映射表

中移物联网有限公司 OneNET 开发文档中心

第四章 第三方应用开发

第三方应用与 OneNET 平台的业务逻辑关系如图 4-1 所示第三方应用与

OneNET平台之间通过 HTTPS请求应答的方式实现数据交互OneNET 平台为第三

方应用提供封装好的 API 接口应用平台通过调用这些 API 接口完成对 OneNET

平台的读写执行以及设备管理请求然后 OneNET 平台会将相应的指令请求发送

到终端设备OneNET 平台收到终端设备响应的数据及设备信息后会将数据及

设备信息推送到应用平台完成应答

下面将分别介绍第三方应用接入 OneNET 平台的步骤OneNET平台提供的数

据推送功能以及 OneNET 平台为第三方应用封装好的 API接口

图4-1 第三方应用与OneNET平台的逻辑关系

41 第三方应用接入 OneNET 平台

第三方应用与 OneNET平台实现数据交互的前提是已经建立连接第三方应

用接入 OneNET平台的开发流程如图 4-2所示包括三个步骤

(1) 在 OneNET 平台创建了设备该设备有对应的真实设备且能正常上报

数据

(2) 用户已经开发并部署了 OneNET平台验证接入的程序

(3) 在 OneNET 平台正确配置了第三方应用数据接收的地址(URL)

Token以及其他参数

中移物联网有限公司 OneNET 开发文档中心

在确保上述第(1)步已经实现的基础上下面将分别讲述第(2)步和第

(3)步的实现过程

图4-2 数据推送的开发流程

412 第三方应用平台接入验证程序

第三方应用平台接入验证程序工作流程如下所述当 OneNET 平台完成对第

三方开发平台的配置后会向第三方开发平台发起 URLampToken验证接入验证程

序对平台发送的验证参数进行验证验证通过后第三方开发平台会向 OneNET

平台返回验证消息当 OneNET 平台收到验证消息后说明第三方开发平台与

OneNET平台已建立连接

目前 OneNET平台为第三方应用平台提供接入验证程序的 SDK有 Javaphp

Nodejs和 C四个版本

SDK 下载地址httpsopeniot10086cndocart432html118 -ldquo数

据推送rdquo

413 OneNET 平台配置第三方应用平台

在 OneNET平台对第三方应用平台的配置界面如图 4-3所示

URL第三方开发平台的地址

Token可以自定义用于第三方开发平台接入平台握手验证

消息加解密方式有明文模式和安全模式当启用安全模式后平台端需要

用户自定义 AESKey 或者由平台随机生成在应用程序中使用该 AESKey 解密消

中移物联网有限公司 OneNET 开发文档中心

推送时间限制(秒)和推送数据限制(个)设置ldquo推送时间限制rdquoldquo推送数

据限制rdquo可以实现批量推送数据减少服务器压力当满足ldquo推送时间限制rdquo和

ldquo推送数据限制rdquo要求后OneNET 将给第三方推送数据如果没有设置ldquo推送

时间限制rdquo和ldquo推送数据限制rdquo将默认数据实时推送

图4-3 第三方开发平台的配置界面

当用户成功在 OneNET 平台配置了第三方开发平台服务器地址后点击ldquo提

交rdquo按钮后OneNET 平台会向第三方应用平台发起 URLampToken 验证请求验证

通过且收到第三方返回的验证消息后则第三方应用平台与 OneNET 平台已建立

连接之后OneNET 平台在收到设备数据时会将设备数据推送到已配置的第三

方应用平台

用户数据接收服务程序接收到 OneNET平台发送的 ldquoURLampTokenrdquo验证请求

请求的格式形如httpipporttestmsg=xxxampnonce=xxxampsignature=xxx

蓝色字体部分为用户在 OneNET平台配置的 URL常规的验证流程如下

(1)在请求中获取参数ldquononcerdquoldquomsgrdquo的值将ldquotokenrdquo(此为页面

配置参数 token的值)ldquononcerdquoldquomsgrdquo的值计算 MD5(token+nonce+msg)

加密值并且编码为 Base64字符串值

中移物联网有限公司 OneNET 开发文档中心

(2)将上一步中 Base64字符串值通过 URL Decode 计算后的值与请求参数

ldquosignaturerdquo的值进行对比如果相等则表示 token验证成功

(3)如果 token 验证成功向 OneNET 平台返回ldquomsgrdquo参数值否则返回

其他值

说明如果用户不想验证 Token 的有效性可以忽略以上步骤并直接向

OneNET平台返回ldquomsgrdquo参数值

42 OneNET 平台数据推送

平台以 HTTPS POST 请求形式向第三方应用平台注册地址推送数据推送数

据相关信息以 JSON 串的形式置于 HTTPS请求中的 body部分

第三方应用平台在接收数据时会接收到数据的明文消息或者密文消息

明文消息中以ldquotyperdquo的数值区分不同的消息而密文消息与明文消息的区别

是ldquomsgrdquo部分经过了加密处理下面将分别对明文消息密文消息以及消息相

关字段和密文的加密算法进行说明

421 明文消息

明文消息有两种消息类型分别为数据点消息和设备上下线消息而数据点

消息又分为单条数据点消息和数据点消息批量形式数据点消息批量形式中的不

同数据点是以不同时间戳区分的

(1)数据点消息(type=1)

msg

type 1

dev_id 2016617

ds_id datastream_id

at 1466133706841

value 42

msg_signature message signature

nonce abcdefgh

(2)数据点消息批量形式(type=1)

msg [

type 1

dev_id 2016617

ds_id datastream_id

中移物联网有限公司 OneNET 开发文档中心

at 1466133706841

value 42

type 1

dev_id 2016617

ds_id datastream_id

at 1466133706842

value43

]

msg_signature message signature

nonce abcdefgh

(3)设备上下线消息(type=2)

msg

type 2

dev_id 2016617

status 0

login_type 1

at 1466133706841

msg_signature message signature

nonce abcdefgh

422 密文消息

密文消息中的ldquoenc_msgrdquo是由明文消息中的ldquomsgrdquo采用 AES 加密算法而

enc_msgxxxx

msg_signature

message signature

nonceabcdefgh

423 消息相关字段说明

表4-1 消息相关字段说明

字段 字段说明

type 标识数据类型当前版本范围[15]

dev_id 设备 ID

ds_id 公 开 协 议 中 的 数 据 流 ID 其 格 式 为

objectID_instanceID_resourceID

at 平台时间戳单位 ms

value 具体数据部分为设备上传至平台或触发的相关

数据

中移物联网有限公司 OneNET 开发文档中心

status 设备上下线标识

0-下线 1-上线

login_type

设备登陆协议类型

1EDP 2nwx 3JTEXT 5JT808 6

MODBUS 7MQTT 8gr2010NB-IoT

cmd_type

命令响应的类型

1设备收到 cmd的 ACK 响应信息 2设备收到

cmd的 Confirm响应信息

cmd_id 命令 ID

msg_signatur

e 消息摘要

nonce 用于计算消息摘要的随机串

enc_msg 加密密文消息体对明文 JSON串(msg字段)的

加密

424 加密算法详述

平台基于 AES算法提供加解密技术具体阐述如下

EncodingAESKey 即消息加解密 Key 的 BASE64编码形式长度固定为 43

个字符从 a-zA-Z0-9共 62个字符中选取由服务开启时填写后

也可申请修改

AES密钥计算为 AESKey=Base64_Decode(EncodingAESKey + ldquo=rdquo)

EncodingAESKey 尾部填充一个字符的ldquo=rdquo 用 Base64_Decode 生成 32

个字节的 AESKey

AES采用 CBC 模式秘钥长度为 32 个字节(256位)数据采用

PKCS7填充 初始化 iv向量取秘钥前 16字节 PKCS7K为秘钥字

节数(采用 32)buf为待加密的内容N为其字节数Buf 需要被填

充为 K的整数倍在 buf的尾部填充(K-NK)个字节每个字节的内容

是(K- NK)具体详见toolsietforghtmlrfc2315

BASE64采用 MIME格式字符包括大小写字母各 26个加上 10个数

字和加号ldquo+rdquo斜杠ldquordquo一共 64个字符等号ldquo=rdquo用作后缀填

出于安全考虑平台网站提供了修改 EncodingAESKey的功能(在

EncodingAESKey 可能泄漏时进行修改对应上第三方平台申请时填写

的接收消息的加密对称密钥)所以建议保存当前的和上一次的

中移物联网有限公司 OneNET 开发文档中心

EncodingAESKey若当前 EncodingAESKey 生成的 AESKey解密失败则

尝试用上一次的 AESKey的解密

平台的加密消息部分为 enc_msg= Base64_Encode( AES_Encrypt

[random(16B)+msg_len(4B)+msg] )即以 16字节随机字节串拼接 4字

节表示消息体长度的字节串(此处 4 字节长度表示为网络字节序)再加

上消息本身的字节串作为 AES加密的明文再以 AES算法对明文进行加

密生成密文最后对密文进行 BASE64 的编码操作生成加密消息体

对加密消息体的解密流程为1)首先进行加密消息体的 BASE64 解码操作

aes_msg=Base64_Decode(enc_msg)2)对获取的解码内容以 AES 算法进行解密

操作获取明文部分plain_msg=AES_Decrypt(aes_msg)解密中使用的秘钥由

EncodingAESKey 计算得来使用的初始化 iv 向量为计算出的 aes 秘钥的前 16

字节3)去掉 plain_msg 的前 16 字节再以前 4 字节取出消息体长度根据消

息体长度获取真实的消息部分(推荐以消息体长度获取真实消息以兼容

plain_msg 未来可能出现的结构变更)表示加密传输的数据后两字段与明文

传输一致

43 API 接口

第三方开发平台应用层通过 Rsetful API 的方式和 OneNET平台进行交互对

接实现命令的下发数据的读写以及相关业务的交互

针对 MQTT 协议目前主要开发了以下 API 用来实现第三方开发平台向

OneNET平台请求读写执行以及设备管理请求具体见下表 4-2下面分别对每一

种 API进行说明

表4-2 API功能说明

API 类别 操作对象 API名称

需要终端响应 只需平台响应

设备

注册

更新设备注册属性

新增

更新

精确查询单个设备

中移物联网有限公司 OneNET 开发文档中心

模糊查询设备

批量查询设备状态

删除

数据流

新增

更新

查询单个数据流

查询多个数据流

删除

数据点

新增

查询

二进制数

新增

查询

触发器

新增

更新

查询单个触发器

模糊查询触发器

删除

触发数据内容

命令

发送命令

查询命令状态

查询命令相应

查询设备历史命令

视频能力 获取播放地址

APIKEY

新增

更新

查看

删除

消息订阅

按 Topic发送命令

查询订阅指定 Topic设备的列表

查询设备订阅的 Topic列表

删除产品的 Topic

查询产品的 Topic

中移物联网有限公司 OneNET 开发文档中心

432 设备

4321 注册

表4-3 设备注册

HTTP方法 POST

URL apihecloudscomregister_de

URL参数 register_code=6TM1OkhNsTjATvFx 设备注册码(必填)

HTTP内容

(示例)

sn 2015031401421 设备唯一标识 string类型最长 512字符

mac C89346DA4373 设备唯一 mac标识最长 32字符

title myedpdevice 设备名(可选) 最长 32个字符

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

keyQ1VdWoEvdkCye=d1=HcCSP6LvCw= 新设备 apikey

device_id 325018 设备 ID

说明

1 响应消息中 errno 表示错误码error 表示错误原因如果创建设备失

败则没有 data字段

2 snmac一定要必填其中一个而且只可以传一个用于鉴权就是设备

新增中的 auth_info

3 此接口根据产品设置的不同默认 allow_dup=true可以生成新设备及

key或获取原有设备及 key见下表

表4-4 对应表

产品允许重复 sn 在产品中已存在 sn 在产品中不存在

allow_dup=true 是 sn 对应的设备 id 和 key 新的设备 id 和 key

allow_dup=false 否 报错 新的设备 id 和 key

中移物联网有限公司 OneNET 开发文档中心

此接口返回的新设备默认设备名均为auto_register均为私有设

备设备协议与产品协议相同

4322 更新设备注册属性

表4-5 更新设备注册属性

HTTP方法 PUT

URL apihecloudscomregister_attr

HTTP头部 api-key xxxxddddsssaaa 必须为 masterkey

HTTP内容

(示例)

allow_dup true|false是否允许重复提交相同的设备 sn 默认 true

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

默认 allow_dup 为 true主要用于设备注册码创建设备属性限制

4323 新增

表4-6 新增设备注册属性

HTTP方法 POST

URL apihecloudscomdevices

HTTP头部 api-key xxxxddddsssaaa 必须为 masterkey

HTTP内容

(示例)

title mydevice 设备名

desc some description 设备描述(可选)

tags [chinamobile] 设备标签(可选可为一个或多个)

protocolMQTT 选择一种接入协议(可选默认为 HTTP)

location lon 106 lat 29 ele 370设备位置纬度

经度 高度(可选)

private true| false 设备私密性(可选默认为 ture)

auth_info 201503041a5829151 MQTT设备设备唯一编号

other version 100 manu china mobile 其他信息(可

选JSON格式可自定义)

HTTP响应响

应消息内容

(实例)

errno 0

error succ

data

中移物联网有限公司 OneNET 开发文档中心

device_id233444 平台分配的设备 ID

4324 更新

表4-7 更新

HTTP方法 PUT

URL apihecloudscomdevicesdevice_id

HTTP头部 api-key xxxxddddsssaaa masterkey或设备 apikey

HTTP内容

(示例)

title mydevice 设备名(可选)

desc some description 设备描述(可选)

tags [chinamobile] 设备标签(可选)

protocolMQTT 选择一种接入协议(可选)

location lon106 lat 29 ele 370设备位置经度

纬度 高度(可选)

private true| false 设备私密性(可选)

auth_info201503041a5829151 MQTT设备设备唯一编号(可选)

other version 100 manufacturer china mobile 其

他信息(可选)

HTTP响应响

应消息内容

(示例)

errno 0

error succ

中移物联网有限公司 OneNET 开发文档中心

4325 精确查询单个设备

表4-8 精确查询单个设备

HTTP方法 GET

URL apihecloudscomdevicesdevice_id

HTTP头部 api-key xxxxddddsssaaa masterkey 或设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

iddevice_id

tags [chinamobile]

onlinetrue|false

protocolMQTT

titlemy device1

descsome description

create_time2015-09-16 102222

privatetrue|false

locationele370lat17609lon17703

auth_infohellip

otherversion100manufacturerchina mobile

keys[titledevice-auto-keykey2JO3B12O1]

数据流

datastreams[

create_time 2014-10-23 202222

iddatastream_id1

unitcelsius

unit_symbolC

uuid 231a5aa9-9de4-5f2e-9e0f-015181c98429

]

4326 模糊查询设备

表4-9 模糊查询设备

HTTP方法 GET

URL apihecloudscomdevices

中移物联网有限公司 OneNET 开发文档中心

URL 参数

key_words=my 匹配关键字(可选从 id和 title字段中左匹配)

auth_info=203x1 鉴权信息(可选对应注册时的 sn参数唯一设

备编号)

tag=mobile 标签(可选)

online=true| false 在线状态(可选)

private=true| false 私密性(可选)

page=1 指定页码最大页数为 10000(可选)

per_page=30 指定每页输出设备个数默认 30最多 100(可选)

device_id=235122 指定设备 ID多个用逗号分隔最多 100个(可

选)

begin=2016-06-20 起始时间包括当天(可选)

end=2016-06-20 结束时间包括当天(可选)

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

total_count1

per_page30

page1

devices

[

id3497307

titlemy device1

desc device desc

privatetrue

protocolMQTT

onlinefalse

locationlon10655231191544001lat29535451246673

create_time2013-02-11 122233

auth_infoSYSz=8QY3r7aTQ48UKfqPnB=PybYRo=

]

4327 批量查询设备最新数据

表4-10 批量查询设备最新数据

HTTP方法 GET

中移物联网有限公司 OneNET 开发文档中心

URL apihecloudscomdevicesdatapoints

URL参数 devIds=1221122331123 设备 id用逗号隔开限制 1000 个设备

HTTP头部 api-key xxxxddddsssaaa masterkey 或设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

error ldquosuccrdquo

data

devices [

id 12323 设备 id

title daf设备名

datastreams

[

id temperature数据流名称

at 2017-02-12 102222数据流更新时间

value 12数据流最新数据

hellip

helliphellip

]

hellip

hellip

]

4328 删除

表4-11 删除设备

HTTP方法 DELETE

URL apihecloudscomdevicesdevice_id

HTTP头部 api-key xxxxddddsssaaa 可为设备级别的 Key

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

中移物联网有限公司 OneNET 开发文档中心

说明删除设备会删除该设备下所有数据流和数据点删除设备动作是异步

的系统会在后续逐步删除该设备下的数据流和数据点

433 数据流

4331 新增

表4-12 新增数据流

HTTP方法 POST

URL apihecloudscomdevicesdevice_iddatastreams

HTTP头部 api-key xxxxddddsssaaa masterkey 或设备 apikey

HTTP内容

(示例)

idtemperature 数据流名称 示例温度

tags[Tag1Tag2] 数据流标签(可选可以为一个或多个)

unitcelsius 单位(可选)

unit_symbolC 单位符号(可选)

HTTP响应响

应消息内容

(示例)

errno 0

data

ds_uuid 9e6bcac9-2c6f-59d5-adae-3955df2e7bce平台分配

数据流 UUID

error succ

4332 更新

表4-13 更新数据流属性

HTTP方法 PUT

URL apihecloudscomdevicesdevice_iddatastreamsdatastream_id

示例apihecloudscomdevices421240datastreamstemperature

HTTP头部 api-key xxxxddddsssaaa masterkey 或设备 apikey

HTTP内容

(示例)

tags[Tag1Tag2] 数据流标签(可选)

unitcelsius 单位(可选)

unit_symbolC 单位符号(可选)

HTTP响应响

应消息内容

(示例)

errno 0

error succ

中移物联网有限公司 OneNET 开发文档中心

4333 查询单个数据流

表4-14 查询单个数据流

HTTP方法 GET

URL apihecloudscomdevicesdevice_iddatastreams

URL参数 datastreams_ids = 查看的 datastream的 id

HTTP头部 api-key xxxxddddsssaaa masterkey 或该设备的设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

data [

update_at 2018-06-29 112938 数据流最后更新时

id 湿度 数据流名称

create_time 2018-06-28 170548数据流创建时间

current_value 53845013最新数据点

]

error succ

4334 查询多个数据流

表4-15 查询多个数据流

HTTP方法 GET

URL apihecloudscomdevicesdevice_iddatastreams

URL 参数

datastream_ids= 查看的 datastream的 id多个 id之间用英文逗号

分开(参数缺省时为查询所有数据流)

示例

apionenetcomdevices1234datastreamsdatastream_ids=tempgps

表示查看 temp和 gps两个数据流的信息

HTTP头部 api-key xxxxddddsssaaa masterkey 或者 该设备的设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data 数据流信息

[

idtemperature 数据流名称设备范围内唯一

tags[Tag1Tag2] 数据流标签

unitcelsius 单位

unit_symbolC单位符号

create_timexxxx-xx-xx 102222 创建时间

中移物联网有限公司 OneNET 开发文档中心

current_valuehellip该数据流下数据点最新值

update_atxx-xx-xx该数据流下数据点最新上传时间

]

[

idhumi 数据流名称设备范围内唯一

tags[Tag1Tag2]

unit_symbol

create_timexxxx-xx-xx 102222

current_valuehellip

update_atxx-xx-xx

]

[]

4335 删除

表4-16 删除数据流

HTTP方法 DELETE

URL apihecloudscomdevicesdevice_iddatastreamsdatastream_id

URL参数 无

HTTP头部 api-key xxxxddddsssaaa masterkey 或者设备 key

HTTP响应响

应消息内容

(示例)

errno 0

error succ

434 数据点

4341 新增

中移物联网有限公司 OneNET 开发文档中心

表4-17 新增数据点

HTTP方法 POST

URL apihecloudscomdevicesdevice_iddatapoints

URL参数 type=3 上传数据类型(可选默认为完整 JSON型见 HTTP内容示

例)

HTTP头部 api-key xxxxddddsssaaa masterkey 或者 设备 apikey

HTTP内容

(示例)

datastreams

[

id temperature 数据流名称或数据流模板名称

datapoints [

at 2013-04-22T003543 上传数据点时间可选如

果为空则设备云会取当前时间如果存在其格式必须为 YYYY-MM-

DDThhmmss的形式(例如2015-03-22T223112)

value 42 上传数据点值

at 2013-04-22T005543

value 84 上传数据点值

]

id key 数据流名称或数据流模板名称

datapoints [

at 2013-04-22T003543上传数据点时间可选

value hellip上传数据点值

at 2013-04-22T003543

value hellip上传数据点值

]

hellip

]

中移物联网有限公司 OneNET 开发文档中心

HTTP 响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

1 可以一次性向设备云上传多个数据流每个数据流中可以包括多个数据

点示例程序表示向设备云上数据流 temperature 和数据流 key上传数据其中

temperature数据流有两个数据点key数据流也有两个数据点

2 如果某个数据流不存在则在增加数据点时设备云会自动创建一个新

的数据流注意新数据流的 datastream id 不可为空

3 数据点表示在某个时刻该数据流的值其 at表示时间为可选字段如

果为空则设备云会取当前时间如果存在其格式必须为YYYY-MM-DDThhmmss

的形式(例如2015-03-22T223112)

4 数据点中的 value表示具体的值其值为 JSON对象可以为整型浮点

型字符串多种类型如果 value部分用双引号括起来则其在设备云存储为字

符串如果不用双引号括起来则其表示数值字符编码现在只支持 UTF-8

5 数据点对应的时间是数据点的标识的一部分相同时间的两个数据点

设备云会同时对这两个相同时间的数据点进行保存不会出现覆盖另一个数据点

的情况一般如果 at 部分取空设备云会取系统时间精度为毫秒如果在一

条命令中某一个数据流包含多个数据点都没有 at 字段设备云将会对所有数据

点进行保存

6 新增数据点支持如下简写方式在请求的 URL中增加 type字段指示所

使用的格式类型目前 type支持 345三种情况

URLapihecloudscomdevices2214570datapointstype=3

示例temperature225humidity952

表示在数据流 temperature中增加一个数据点 225在 humidity 中增加一

个数据点 952

URLapihecloudscomdevices2214570datapointstype=4

示例temperature2015-03-22T223112225

表示在数据流 temperature中加一个数据点在 2015年 3月 22 日 22点 31

中移物联网有限公司 OneNET 开发文档中心

分 12秒的值为 225

URLapihecloudscomdevices2214570datapointstype=5

示例temperature2015-03-22T223112225pm2589

表示在数据流 temperature中加一个数据点即 2015年 3月 22 日 22点 31

分 12秒的值为 225在数据流 pm25中添加一个数据点即当前时间的值为 89

4342 查询

表4-18 查询数据点

HTTP方法 GET

URL apihecloudscomdevicesdevice_iddatapoints

URL 参数

datastream_id=abc 查询的数据流多个数据流之间用逗号分隔

(可选)

start=2015-01-10T080035 提取数据点的开始时间(可选)

end=2015-01-10T080035 提取数据点的结束时间(可选)

duration=3600 查询时间区间(可选单位为秒)

start+duration按时间顺序返回从 start开始一段时间内的数据点

end+duration按时间倒序返回从 end回溯一段时间内的数据点

limit=100 限定本次请求最多返回的数据点数0ltnlt=6000(可选

默认 1440)

cursor= 指定本次请求继续从 cursor位置开始提取数据(可选)

sort=DESC | ASC 值为 DESC|ASC时间排序方式DESC倒序ASC升

序默认升序

ltnlt=6000(可选默认 1440)

HTTP头部 api-key xxxxddddsssaaa masterkey 或者 该设备的设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

cursor70921_3771908_1472355096

datastreams[

idtemperature数据流名称或数据流模板名称

datapoints[

at xxxx-xx-xx 102222value42数据点上传时间和

at xxxx-xx-xx 102222value84

]

中移物联网有限公司 OneNET 开发文档中心

idkey 数据流名称或数据流模板名称

datapoints[

at xxxx-xx-xx 102222valuehellip

atxxxx-xx-xx 102222valuehellip

]

hellip

]

1 若不携带任何参数平台返回本设备所存在的所有数据流中的最新数据

(这一种情况下查询时出现时延较大的性能问题建议在 URL 参数中加上

newadd参数并将其值赋为 true如 newadd=true)

2 若不携带数据流 id参数携带 limit 参数时会返回该设备每个数据流

最多 limit 条数据

3 若要查看某一条数据流数据需在上述 URL中增加参数 datastream_id

4

apihecloudscomdevices564280datapointsdatastream_id=tempamplimit

=10会返回数据流temp中最近的 10个数据点

5 要查看某一条数据流在某个时间范围内的数据可以在增加 start和 end

参数

示例

apihecloudscomdevices564280datapointsdatastream_id=temper

atureampstart=2013-05-12T171233ampend=2013-06-12T172233 表示查询本设

备对应的数据流在 2013 年 5 月 12 日 17 点 12 分 33 秒到 17 点 22 分 33 秒的数

据点注意如果 start 参数存在end参数不存在表示取 start后的所有数据

如果 start 不存在end 存在设备云会忽略 end参数注意日期时间格式格

式必须为示例中的格式YYYY-MM-DDThhmmss例如2013-05-12T171233

日期和时间之间用大写字母 T 分隔start 和 end 之间的时间间隔最大为 1 年

超过一年会忽略

如果指定了 start 参数则可能返回的数据点的数目会很多此时默认会返

回最多 100 个数据点可以使用 limit 参数设定返回多少个数据点最大为

6000个数据点当实际的数据点数目多于 limit 限定的数目时返回的 json串

中移物联网有限公司 OneNET 开发文档中心

中会有一个 cursor 字段下一次请求的命令行中可以携带此 cursor 字段表示接

着遍历本数据流此 cursor字段标识上次取出数据点后下一个数据点的位置

435 二进制数据

4351 新增

将二进制数据将作为数据点保存到设备下的某个数据流中设备云返回该二

进制数据的索引号

表4-19 新增二进制数据

HTTP方法 POST

URL apihecloudscombindata

URL参数 device_id=421590 数据所属设备(必选)

datastream_id=bin 该数据所属已经存在的数据流(必选)

HTTP头部 api-key xxxxddddsssaaa masterkey 或者该设备的设备 key

HTTP 内 容

(示例)

普通二进制数据文件图像等

(最大限制为 800上传时间间隔需大于 1ms)

HTTP响应响

应消息内容

(示例)

errno 0

error succ

data

index3491506_1475204886914_bin 二进制数据索引号

4352 查询

表4-20 查询二进制数据

HTTP方法 GET

URL apihecloudscombindataindex

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

普通二进制数据文件图像等二进制形式数据

436 触发器

4361 新增

表4-21 新增触发器

HTTP方法 POST

中移物联网有限公司 OneNET 开发文档中心

URL apihecloudscomtriggers

HTTP头部 api-key xxxxddddsssaaa 必须为 masterkey

HTTP内容

(示例)

titlewen du jian kong 设备名(可选)

ds_idgps 数据流名称(id)(可选)

dev_ids[10272345615523] 设备 ID(可选)

ds_uuids[ 数据流 uuid(可选)

9ad09uac-7446-512f-b07c-90jdnzj8120ad

4599436e-7146-5349-b07c-79fa0919cs62

]

urlxxbbcom

typegt | gt= | lt | lt= | == | inout | in | out |change | frozen |

live

threshold100 阙值根据 type不同见以下说明

1) type 为gt|gt=|lt|lt=|==时threshold必须为数值

2) type为 inout时threshold 设置为lolmt40 uplmt52 表示

数据流的值首次进入或离开闭区间[4052]时触发

3) type为 change时threshold 参数不用传递当上传的值有改变时触发

告警

4) type为 frozen时threshold 为数值指定距离最后一次数据上报多少

秒内未上报数据触发告警同时被监控对象进入 frozen状态

5) type 为 live 时threshold 为数值指定距离最后一次数据上报多少秒

后上报数据触发告警

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

tirgger_id233444 触发器 ID

说明

1触发器的含义是当指定范围内的数据点满足触发条件的要求时会向

url参数指定的地址发送 post请求

2触发器有三种工作触发模式

1)在请求参数中单独指定了 ds_id不包括其他参数那么当前项目下

中移物联网有限公司 OneNET 开发文档中心

所有设备的数据流中数据流名称符合 ds_id 的数据都会进入触发判断逻辑

2)在请求参数中单独指定了 ds_uuids 数组那么只有这些指定的数据

流会进入触发判断逻辑

3)在请求参数中指定了 ds_id 和 dev_ids那么只有这些指定的设备的

数据流会进入触发判断逻辑

4362 更新

表4-22 更新触发器属性

HTTP方法 PUT

URL apihecloudscomtriggerstirgger_id

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP内容

(示例)

titlewen du jian kong

ds_uuids[

9ad09uac-7446-512f-b07c-90jdnzj8120ad

4599436e-7146-5349-b07c-79fa0919cs62

]

urlxxbbcom

typegt | gt= | lt | lt= | == | inout | in | out | exp | change |

frozen | live

threshold100

注若要修改 type需要对应设置 threshold

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

4363 查询单个触发器

表4-23 查询单个触发器

HTTP方法 GET

URL apihecloudscomtriggerstirgger_id

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

idtrigger_id1

中移物联网有限公司 OneNET 开发文档中心

titlewen du jian kong

ds_uuids[

datastream1_uuidrdquo

datastream2_uuidrdquo

datastream3_uuidrdquo

]

urlxxbbcom

typegt|gt=|lt|lt=|==|in|out|exp|change|frozen|live

threshold100

invalidtrue 触发器是否已失效

create_timexx-xx-xx 102222

4364 模糊查询触发器

表4-24 模糊查询触发器

HTTP方法 GET

URL apihecloudscomtriggers

URL 参数

title=name 指定触发器名称

page=1 指定页码可选

per_page=10 指定每页输出个数可选默认 10最多 100

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

total_count600

per_page30

page1

triggers[

idtrigger_id1

titlewen du jian kong

ds_uuids

[datastream1_uuidrdquo datastream2_uuidrdquo]

urlxxbbcom

typegt|gt=|lt|lt=|==|in|out|exp|change|frozen|live

threshold100

invalidtrue 触发器是否已失效

create_timeXXXXXXXX

中移物联网有限公司 OneNET 开发文档中心

]

说明触发器失效是指触发器所依赖的数据流或者设备被删除了此时触发

器永远不会有效触发事件

4365 删除

表4-25 删除触发器

HTTP方法 DELETE

URL apihecloudscomtriggerstirgger_id

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno 0

error succ

4366 触发数据内容

触发数据是指当 OneNET 设备云判断某个触发器的触发条件满足时会通过

POST方式向外抛出的 URL请求在 HTTP的 POST消息体中会携带如下格式的 JSON

字符串

表4-26 触发器内容

数据内容

(示例)

trigger

id1

threshold90

typegt

current_data[

dev_id2656

ds_idgps

ds_uuidFWEF-ZFW-ZFW-ZFWW

at2009-09-07T121602001403Z

value100

dev_id2656

ds_idtemper

中移物联网有限公司 OneNET 开发文档中心

ds_uuidFEWEF-ZFWFWW-WFWW-FWEFFWW

at2009-09-07T121602001403Z

value882

]

437 命令

命令是指应用发送命令数据给 OneNET设备云再由 OneNET设备云转发给终

端设备终端设备收到命令后可以向设备云反馈响应的一种工作机制命令下发

后应用可以通过 API查询命令状态和提取命令的响应数据

命令的执行步骤如下

1应用通过 API 向设备云发送命令数据

2设备云生成该命令的 uuid作为该命令的唯一标识并向应用返回同时向

终端设备转发命令数据

3 终端设备收到命令数据后执行命令数据可以生成响应也可以不响应

4设备云跟踪记录命令的响应如果设备有响应就关联命令 uuid和响应

结果

5应用通过 API 向设备云提取命令执行结果(API 请求中携带命令 uuid 标

识)

特别说明

命令下发到终端设备后如果终端设备 10 秒内未收到响应则此命令的状

态将被设置为超时应用通过 API 查询命令状态时会反馈超时超过 10 秒后

收到的响应会被丢弃

终端设备针对同一条命令回复多条命令响应只有在未超时时间内收到的最

后一条是有效响应前面的响应包将会被覆盖因此终端设备应该对每个命令只

有一个响应包

4371 发送命令

表4-27 发送命令

HTTP方法 POST

URL apihecloudscomcmds

URL 参数 device_id=415120 接收该数据的设备 ID(必选)

中移物联网有限公司 OneNET 开发文档中心

qos=0 | 1 是否需要响应默认为 0

0不需要响应即最多发送一次不关心设备是否响应

1需要响应如果设备收到命令后没有响应则会在下一次设备登陆

时若命令在有效期内(有效期定义参见 timeout参数)则会继续发送

对响应时间无限制多次响应以最后一次为准

本参数仅当 type=0时有效

timeout=300 命令有效时间默认 0

0在线命令若设备在线下发给设备若设备离线直接丢弃

gt0 离线命令若设备在线下发给设备若设备离线在当前时间

加 timeout时间内为有效期有效期内若设备上线则下发给设备单

位秒有效围0~2678400

本参数仅当 type=0时有效

type=0 | 1 默认 00发送 CMD_REQ包1发送 PUSH_DATA包

HTTP头部 api-key xxxxddddsssaaa masterkey或者设备 apikey

HTTP内容 用户自定义数据jsonstring二进制数据(小于 64K)

HTTP响应响

应消息内容

(示例)

errno 0

error succ

data

cmd_uuid2302-312-FWs 命令 id

4372 查询命令状态

表4-28 查询命令状态

HTTP方法 GET

URL apihecloudscomcmdscmd_uuid

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno 0

error succ

data

status1

0设备不在线|Device not online

1命令已创建| Command Created

2命令已发往设备| Command Sent

3命令发往设备失败| Send Command Failed

4设备正常响应| Command Response Received

5命令执行超时| Command Response Timeout

6设备响应消息过长 | Command Response Too Large

descldquosendingrdquo

中移物联网有限公司 OneNET 开发文档中心

4373 查询命令响应

表4-29 查询命令响应

HTTP方法 GET

URL apihecloudscomcmdscmd_uuidresp

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP 响应响

应消息内容

用户设备返回的响应内容

4374 查询设备历史命令

表4-30 查询设备历史命令

HTTP方法 GET

URL apihecloudscomcmdshistoryltdevice_idgtltdevice_idgt

URL 参数

start=2015-01-10T080035 查询的开始时间(可选)

end=2015-01-10T080535 查询的结束时间(可选)

page=1 指定页码最大页数为 10000(可选)

per_page=30 指定每页输出设备个数默认 30最多 100(可选)

HTTP头部 api-key xxxxddddsssaaa

HTTP响应响

应消息内容

errno 0

error succ

data

page 1当前页码

per_page 10当前每页总数

total_count 100

items [

cmd_uuid 2302-312-FWs

device_id 2设备 ID

expire_time 2016-07-05 000000过期时间

status 0命令状态

send_time 2016-07-05 000000发送时间

confirm_time 2016-07-05 000000响应时间

confirm_body 2463726571007b202274797022 响应内容

16进制字符

body 2463726571007b202274797022请求内容16进制字符

hellip

中移物联网有限公司 OneNET 开发文档中心

hellip

]

438 视频能力

4381 获取播放地址

表4-31 获取播放地址

HTTP方法 GET

URL apihecloudscomipcrtmp_address

URL 参数

device_id= 接收该数据的设备 ID(必填)

channel_id = 对应数据流名称中的 channelnum

protocol_type = 播放协议类型 0rtmp1hls2http-flv

HTTP头部 api-key xxxxddddsssaaa masterkey或者设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

errorrdquosuccrdquo

ldquodatardquo

addripport

accessTokenldquo字符串rdquo

439 APIKEY

4391 新增

表4-32 新增 APIKEY

HTTP方法 POST

URL apihecloudscomkeys

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP内容

(示例)

title sharing key key 的命名

permissions [

resources [ 被授权的资源

中移物联网有限公司 OneNET 开发文档中心

dev_id 424 被授权的设备 id

dev_id 425 被授权的设备 id

hellip

hellip

]

access_methods [ 被授权的命令

get

put

post

]

]

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data key2302-312-FWs key_string

说明授权命令是可选的另外被授权的命令也可以是 getputpost 的

一个或几个如只授权 get和 put命令

access_methods [getput]

4392 更新

表4-33 更新 APIKEY

HTTP方法 PUT

URL apihecloudscomkeyskey_string

HTTP头部 api-key xxxxddddsssaaa masterkey(注只能为 master-key)

HTTP内容

(示例)

title sharing key key 的命名

permissions [

resources [ 被授权的资源

dev_id 424 被授权的设备 id

ds_idfan1 数据流 id可选

中移物联网有限公司 OneNET 开发文档中心

dev_id 425 被授权的设备 id

ds_idfan1 数据流 id可选

hellip

hellip

]

access_methods [ 被授权的命令可选

get

put

post

]

]

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

说明

1对于 masterkey 不允许更新操作masterkey 默认具有最大权限可以访

问该用户名下所有设备所有数据

可以进行 POSTGETPUTDELETE操作如果更新 master key 系统会返回

失败

2授权命令是可选的另外被授权的命令也可以是 getputpost 的一个

或几个如只授权 get和 put命令

access_methods [getput]

3API key 更新是覆盖操作会将原来存在的授权资源和授权命令覆盖不

会保留原来的授权资源和授权命令

4393 查看

中移物联网有限公司 OneNET 开发文档中心

表4-34 查看 APIKEY

HTTP方法 GET

URL httpapihecloudscomkeys

URL 参数

key = FWJPO-FZFHW-FFEWB可选只查看该 key相关信息

page = 1 指定页码 可选

per_page = 10 指定每页输出个数可选默认 10最多 100

device_id = xxbbcc可选只查看与该设备相关的非 master-key

HTTP头部 api-key xxxxddddsssaaa masterkey(注只能为 master-key)

HTTP响应响

应消息内容

(示例)

errno 0

data

per_page 30

total_count 2

keys [

create_time 2015-11-04 142552

title Auto-generated-master-key

key 03GeDLYk0WNk1V338g7yndKZYkQA

create_time 2015-12-03 100041

permissions [

resources [

dev_id 564280

]

]

title 设备 1测试 Key

key vuHebEWefiU2Ueo5ouoCc1CUsYQ=

]

page 1

error succ

中移物联网有限公司 OneNET 开发文档中心

4394 删除

表4-35 删除 APIKEY

HTTP方法 DELETE

URL httpapihecloudscomkeyskey_string

HTTP头部 api-key xxxxddddsssaaa masterkey(注只能为 master-key)

HTTP 响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

4310 消息订阅

43101 按 Topic 发送命令

表4-36 按 Topic 发送命令

HTTP方法 POST

URL apihecloudscommqtt

URL参数 topic=xxx 设备订阅的主题(必选)

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP 内 容

(示例)

HTTP响应响

应消息内容

(示例)

errno0

errorldquosuccrdquo

data

total_count1

per_page30

page1

devices [123123433333]

43102 查询订阅指定 Topic设备的列表

表4-37 查询订阅制定 Topic设备的列表

HTTP方法 GET

URL apihecloudscommqtttopic_device

URL 参数

topic=xxx 设备订阅的主题(必选)

page=1 当前页码 必填大于等于 1

per_page=10 每页 必填范围 1-1000

中移物联网有限公司 OneNET 开发文档中心

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP内容

(示例)

HTTP响应响

应消息内容

(示例)

errno0

errorldquosuccrdquo

data

total_count1

per_page30

page1

devices [123123433333]

43103 查询设备订阅的 Topic列表

表4-38 查询设备订阅的 Topic列表

HTTP方法 GET

URL apihecloudscommqttdevice_topicdevice_id

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno0

errorldquosuccrdquo

data

[topic_name1 topic_name2 topic_name3]

43104 删除产品的 Topic

表4-39 删除产品的 Topic

HTTP方法 DELETE

URL apihecloudscommqtttopic

URL参数 name=xxx topic名(必选)

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno0

errorldquosuccrdquo

中移物联网有限公司 OneNET 开发文档中心

43105 查询产品的 Topic

表4-40 查询产品的 Topic

HTTP方法 GET

URL apihecloudscommqtttopic

URL参数 无

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno0

errorldquosuccrdquo

data

[topic_name1topic_name2topic_name3]

中移物联网有限公司 OneNET 开发文档中心

第五章 接入实例

51 MQTT-device 接入

511 工具下载

为方便开发人员直观感受使用 mqtt 协议进入平台的便利可使用平台提供

的 MQTT 设备模拟器进行接入平台请在首页-gt开发文档-gt资源下载-gt13 调试

工具下载进行下载如下图

图5-1 资源下载

下载地址

httpupfileshecloudscom123ueditor201707125d5bc37eca39c0c5b7a5bcb9

0e451eeerar

中移物联网有限公司 OneNET 开发文档中心

512 界面说明

图5-2 界面说明

513 使用方法

5131 创建产品

如 323 的过程在设备接入协议中选择 MQTT

中移物联网有限公司 OneNET 开发文档中心

图5-3 选择连接协议

5132 创建设备

如 323描述在平台上新建一个设备

5133 建立连接

在产品概况中可以查看产品 ID此信息填入模拟器 ProductID一栏如下图

图5-4 产品ID

在平台上进入设备信息页面可查看设备 ID及鉴权信息(此鉴权信息是新建设备时候填

写的鉴权信息)如下图

中移物联网有限公司 OneNET 开发文档中心

图5-5 设备ID及鉴权信息

相应把设备 ID及鉴权信息填入模拟器之中然后点击连接按钮如果未弹出提示对话

框则表示设备鉴权成功如下图

图5-6 连接成功

中移物联网有限公司 OneNET 开发文档中心

5135订阅与发布

演示本操作需要在 OneNet平台建立两个基于 MQTT协议的设备一个用于消息发布

另一个用于消息订阅

图5-7 设备状态

开启两个模拟器分别模拟以上两个设备然后建立连接

首先使用订阅主题打开第一个模拟器模拟消息订阅者

图5-8 订阅主题

其次发布主题打开第二个模拟器模拟消息发布者

中移物联网有限公司 OneNET 开发文档中心

图5-9 发布主题

经过以上两个操作后查看模拟消息订阅者的模拟器则收到了主题

为rdquotopic_namerdquo的消息如下图

中移物联网有限公司 OneNET 开发文档中心

图5-10 收到的主题

5136接收平台指令

建立连接后模拟器也可接收来自平台的指令具体操作如下

先打开模拟器-gt建立连接-gt选中【[OneNet]平台指令接收】选项栏利用平台下发指

令功能下发如下图平台下发指令

图5-11 平台发送命令

中移物联网有限公司 OneNET 开发文档中心

图5-12 下发指令

填写好将要发送的消息后点击【发送命令】按钮则模拟器成功接收到来自平台的

数据如下图模拟器截图

图5-13 模拟器收到的指令

5137上传数据点

Mqtt支持 Json 数据格式上报数据现根据 Json几种格式举一些例来演示怎么利用

模拟器上传数据

1)使用 Json数据 Type1上传 Json数据

datastreams[idtemperaturedatapoints[value255]]

中移物联网有限公司 OneNET 开发文档中心

如下模拟器上传数据界面

图5-14 Type1数据格式

则在平台数据展示中则可看到上传的数据点

图5-15 收到数据展示

2)使用 Json数据 Type3示例 Json数据为

temp32humi98

模拟器发送数据截图

中移物联网有限公司 OneNET 开发文档中心

图5-16 Type3数据格式

平台数据展示截图

图5-17 数据展示

3)使用 Json数据 Type4示例 Json数据为

temperature233pm2589

模拟器上传数据截图

中移物联网有限公司 OneNET 开发文档中心

图5-18 Type5数据格式

平台接收数据展示截图

图5-19 数据展示

52 基于麒麟开发板的 MQTT 接入实例

OneNet 平台为使用户能快速接入发布麒麟座开发板官网提交您的创意免

费申请开发板下面利用麒麟座开发板 V31 演示开发板采集温湿度使用 MQTT发

送到平台的接入流程

开发板申请链接httpsopeniot10086cneventdetail185html

521 搭建开发环境

OneNET 平台提供的麒麟座开发板是基予 STM32 单片机开发的一块功能应用

板开发板包含 MCU温湿度传感器GSM 模块WIFI 模块电源模块键盘

中移物联网有限公司 OneNET 开发文档中心

LED以及 lcd显示接口等满足用户对平台接入的基本需求能快速接入到平台

资料包配备完整工程代码方便工程移植等使用

目前 STM32 开发常用的 IDE 有 IARMDK 等我挑选 MDK 作为开发工具打

开工具包先安装 MDK511A安装完毕后再安装 MDKCM511A开发板所有资料软件

工具包下载案例包

案例包下载链接

httpspanbaiducoms1UB1qZGrVuovSVdbqqXP0Lglistpath=2F

图5-20 MDK包

安装完毕并安装 license详细步骤不做演示

中移物联网有限公司 OneNET 开发文档中心

522 连接硬件准备

5221 开发板接线

图5-21 开发板接线图

电源DC-5V

运行信息USART1-MicroUSB 线

软件下载ST-Link

中移物联网有限公司 OneNET 开发文档中心

5222 ESP8266跳线帽连接

图5-22 ESP8266跳线帽连接

中移物联网有限公司 OneNET 开发文档中心

5223 M6312跳线帽连接

图5-23 M6312跳线帽连接

523 工程实例

例程使用最简单易懂的方式编写着重让大家明白接入流程和协议

10~12 协议专属例程是展示该协议下的专用功能比如 EDP 的 PushData

中移物联网有限公司 OneNET 开发文档中心

HTTP 注册新设备MQTT 的订阅发布等具体使用方法查看该目录下的《使用

说明》

图5-24 工程文件

524 开发工程文件

中移物联网有限公司 OneNET 开发文档中心

图5-25 工程文件

图5-26 工程结构

默认已创建好产品以及设备打开文件工程 onenetc 和 esp8266c 修改例

程的 WIFI 信息和平台信息

分别在 esp8266c 的 36和 onenetc的 414345行

图5-27 更改项

525 编译下载

开发版接串口会有相应状态显示平台设备显示在线状态绿色为连接成功

设备在线灰色表示未连接并在数据展示中显示对应主题的所有数据

中移物联网有限公司 OneNET 开发文档中心

图5-28 连接成功

图5-29 收到数据

其他实例详情请见httpsopeniot10086cnbbsthread-1266-1-1html

中移物联网有限公司 OneNET 开发文档中心

第六章 MQTT 协议详解

61 设备与平台通信协议包格式

协议就是通信双方的一个约定即表示第 1字节传输的什么第 2字节

传输的什么helliphellip在 MQTT协议中一个 MQTT 数据包由固定头(Fixed

header) 可变头(Variable header) 消息体(payload)三部分构成

MQTT 数据包结构固定头部+可变头部+消息体

固定头(Fixed header)存在于所有 MQTT数据包中表示数据包类型及

数据包的分组类标识固定头格式如下

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 - 5 Remaining Length(该字段占用 1-4个字节)

目前平台版本支持的 Packet Type如下

名字 值 流向 描述

CONNECT 1 C-gtS 客户端请求与服务端建立连接

CONNACK 2 S-gtC 服务端确认连接建立

PUBLISH 3 CS 发布消息

PUBACK 4 CS 收到发布消息确认

PUBREC 5 CS 发布消息收到

PUBREL 6 CS 发布消息释放

PUBCOMP 7 CS 发布消息完成

SUBSCRIBE 8 C-gtS 订阅请求

SUBACK 9 S-gtC 订阅确认

UNSUBSCRIBE 10 C-gtS 取消订阅

UNSUBACK 11 S-gtC 取消订阅确认

PING 12 C-gtS 客户端发送 PING(连接保活)命令

PINGRSP 13 S-gtC PING命令回复

DISCONNECT 14 C-gtS 断开连接

可变头(Variable header)存在于部分 MQTT 数据包中数据包类型决定

了可变头是否存在及其具体内容

消息体(Payload)存在于部分 MQTT 数据包中表示客户端收到的具体内

中移物联网有限公司 OneNET 开发文档中心

不同类型数据包中可变头和消息体包含关系如下

消息类型 Variabl

e

Header

Payloa

d

CONNECT 有 有

CONNACK 有 有

PUBLISH 有 有

PUBACK 有 无

PUBREC 有 无

PUBREL 有 无

PUBCOMP 有 无

SUBSCRIBE 有 有

SUBACK 有 有

UNSUBSCRIBE 有 有

UNSUBACK 有 无

PING 无 无

PINGRSP 无 无

DISCONNECT 无 无

62 平台支持数据包类型

621 CONNECT(客户端请求与服务端建立连接 client -gt server)

固定头(Fixed Header)

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 - 5 Remaining Length(该字段占用 1-4个字节)

MQTT Packet Type 值为 0001表示该数据包为请求连接数据包

Remaining Length 剩余长度占 1-4字节

可变头(Variable Header)

包含内容如下

Description 7 6 5 4 3 2 1 0

byte

1-2

ProtocolNa

me Length

0 0 0 0 0 0 0 0

0 0 0 0 0 1 0 0

byte

3

lsquoMrsquo 0 1 0 0 1 1 0 1

byte

4

lsquoQrsquo 0 1 0 1 0 0 0 1

中移物联网有限公司 OneNET 开发文档中心

byte

5

lsquoTrsquo 0 1 0 1 0 1 0 0

byte

6

lsquoTrsquo 0 1 0 1 0 1 0 0

Byte

7

Protocol

Level

0 0 0 0 0 0 0 1

Byte

8

Connect

Flag

Use

r

flag

Passwo

rd

flag

WillReta

in

Flag

WillQo

s Flag

WillFl

ag

CleanSessi

on

Flag

Reser

ve

Byte

9-10

KeepAlive

(1) 版本

Protocol Level 必须设置为 4平台只支持协议版本 v 311不支持更老

的版本使用第三方客户端时需要注意选择正确的版本

(2) user flag 与 password flag

平台不允许匿名登陆因此这两个标志位在连接时必须设置为 1否则认为

协议错误平台将会断开连接

(3) Will flag 与 WillretainflagWillQosFlag

Will flag 为 0时WillQosFlag 和 WillRetainFlag 必须为 0Will Flag

为 1时WillQosFlag 只能为 012

1当该设备下一次正常上线后服务器会清除之前的 will 消息(包括

retain 消息)

2如果设备上线时设置了 Will Topic 和 msg且将 WillRetainFlag 设

置为 1只有设备异常断开后服务器才会将该 Will msg 分发给新的 Will

Topic 的订阅者且 Qos 级别以订阅的 Request qos 级别为准

3如果设备上线时设置了 Will Topic 和 msg且将 WillRetainFlag 设

置为 0服务器不会存储该消息当设备异常断开后会将该 Will msg 以设

备设置的 WillQosFlag的 Qos级别进行分发

(4) CleanSessionFlag

若客户端将 clean session 标志位设置为 0当其断开后平台将会保存

sessionsession 需保持的内容包含

客户端订阅的 topic列表

中移物联网有限公司 OneNET 开发文档中心

还未完成确认的 Qos1Qos2级别的 publish消息

客户端保存 session 的内容包含

已经发送到服务端的但还没有收到确认的 Qos1Qos2消息列表

待发送的 Qos0列表

若客户端将 clean session 标志位设置为 1当其断开后平台会清除设备

的订阅列表及未完成确认的 Qos1Qos2 的 publish消息

(5) Reserve

保留位置 0

(6) KeepAlive 保活时间

每个客户端可自定义设置连接保持时间最短 120秒最长 65535 秒

消息体(Payload) Description 是否必须存在 格式

Field1 Client

Identifier

是 2字节字串长度 + utf8字

Field2 UserName 是 2字节字串长度 + utf8字

Field3 UserPassword 是 2字节字串长度 + utf8字

目前平台支持的方式为以后两种

方式 1设备 ID项目 ID鉴权信息(auth_info)

字段设置 消息示例

client_id设置为平台创建设备时的

设备 id

username设置为ldquo项目 IDrdquo

password设置为ldquo鉴权信息

(auth_info)rdquo

client_id=rdquo123rdquo

username=rdquo433223rdquo

password=rdquo注册的鉴权信息rdquo

各字段说明如下

鉴权信息(auth_info)在平台申请设备时填写设备的 auth_info 属性(数

字+字母的字符串)该属性需要产品内具备唯一性(可使用设备出厂唯一编号)

方式 2设备 ID + APIKey(项目 ID也需要填写)

字段设置 消息示例

client_id设置为平台创建设备时的

设备 ID

username设置为ldquo项目 IDrdquo

client_id=rdquo123rdquo

username=rdquo433223rdquo

password=Api Key

中移物联网有限公司 OneNET 开发文档中心

password设置为ldquoAPI鉴权信息

(auth_info)rdquo

项目 ID在平台添加项目时平台生成的 ID

APIKey在平台上创建产品时生成的 APIKey

连接包实例如下

Send one mqtt packet

FixHeader

PacketTag = 16

PacketType = 1

RemainLength = 34

VariableHeaderConnect

protocol_name_len_= 4

protocol_name_= MQTT

protocol_level_= 4

connect_flag_= 192

keep_alive_= 12000

client_id_len_= 8

client_id_= 34764813

usr_name_len_= 6

usr_name_= 150295

password_len_= 4

password_= push

MQTT0x10 0x22 0x00 0x04 0x4D 0x51 0x54 0x54 0x04 0xC0 0x2E 0xE0 0x00 0x08 0x33

0x34 0x37 0x36 0x34 0x38 0x31 0x33 0x00 0x06 0x31 0x35 0x30 0x32 0x39 0x35 0x00

0x04 0x70 0x75 0x73 0x68

Send One Packet Succ

中移物联网有限公司 OneNET 开发文档中心

622 CONNACK (服务端确认连接建立)

Fixed Header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type = 2 0 0 0 0

byte2 - 5 Remaining Length(该字段占用 1-4个字节)

Variable Header

Description 7 6 5 4 3 2 1 0

byte 1 Acknowledge Flags 0 0 0 0 0 0 0 Sp

byte 2 Return Code x x x x x x x x

Sp Session Present Flagsession信息在服务器已保持置 1未保存置

0

返回码说明

返回码 描述

0 成功

1 协议版本错误

2 非法的 clientid

3 服务不可用

4 用户名或密码错误

中移物联网有限公司 OneNET 开发文档中心

5 非法链接(比如 token非法)

失败

如果 connect包不符合协议内容约束则直接断掉连接而不需要发送 conn

ack包

如果鉴权或授权失败回复一个带非 0错误码的 connack包

成功

必须断掉重复的 clientid

执行 cleansession 对应的操作

必须回复一个 connack回复码为 0

开始消息传递并加入 keepalive的监视

PS客户端需要等到服务端的 connack报文才能发送后续的数据包

623 PUBLISH(发布消息 client -gt server)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type DUP f

lag

QoS Level RETAI

N

byte2 - 5 Remaining Length(该字段占用 1-4 个字节)

DUP

QoS2Qos1如果为 0则表示是第一次发送该包如果为 1则表示

为重复发送的包

Qos0DUP 必须为 0

中移物联网有限公司 OneNET 开发文档中心

QoS 指定了该 publish包的 Qos 等级如下

Qos 值 Bit2 Bit1 描述

0 0 0 最多发送一次

1 0 1 至少发送一次

2 1 0 只发送一次

RETAIN 保留标志位如果为 1服务器存储最新一条 RETAIN消息以便

分发给新的订阅者如果 RETAIN为 1Payload 为空服务器分发该消息后会

清空该 topic 下的 RETAIN 消息

PS该版本实现了 Qos0Qos1Qos2

Variable Header

Description 格式 是否必须

Field1 TopicName 2 字节字串长度 + utf8字

Field2 PacketIdent

ifier

2 字节 QoS0否QoS1Qos2是

Payload

内容根据不同业务自定义

624 PUBLISH(发布消息 server -gt client)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type DUP f

lag

Qos Level RETAIN

byte2 - 5 Remaining Length(该字段占用 1-4个字节)

DUP

Qos2QoS1如果为 0则表示是第一次发送该包如果为 1则表示

为重复发送的包

中移物联网有限公司 OneNET 开发文档中心

Qos0DUP 必须为 0

QOS 指定了该 publish包的 qos等级如下

Qos 值 Bit2 Bit1 描述

0 0 0 最多发送一次

1 0 1 至少发送一次

2 1 0 只发送一次

RETAIN如果服务器分发的消息是 RETAIN 消息则将该标志位置 1否则置

0

PS该版本实现 Qos0Qos1Qos2其中服务器分发消息的 Qos级别是以 Clien

t-gtServer 发送的 publish 包的 qos 等级为准非订阅的 topic 的 Qos 等级R

etain 消息是以订阅的 Request Qos 级别进行推送

VariableHeader

Description 格式

Field1 TopicName 2 字节字串长度 + utf8字

Payload

内容根据不同业务自定义

625 PUBACK(收到发布消息确认)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

中移物联网有限公司 OneNET 开发文档中心

626 PUBREC(发布消息收到)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

627 PUBREL(发布消息释放)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

628 PUBCOMP(发布消息完成)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

中移物联网有限公司 OneNET 开发文档中心

byte 1~

2

PacketIdentifier PacketIdentifier

629 SUBSCRIBE(订阅请求)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

Payload

Description 格式

Byte1~

n

TopicName 2 字节字串长度 + utf8字

Byten+

1

Request Qos 服务质量要求(只能为 0

12)

topic 说明

可以包含一个或多个 topic

topic必须是数字英文反斜杠()的组合目前不支持通配符

每个客户端最多订阅 100个 topic

以下 topic 被系统保留使用(客户端不能订阅)

类型 说明

$开头 平台保留

中移物联网有限公司 OneNET 开发文档中心

6210 SUBACK(订阅确认)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

Payload

Description 7 6 5 4 3 2 1 0

byte 1 retcode

返回码说明

返回码 描述

0x00 成功(granted qos = 0)

0x01 成功(granted qos = 1)

0x02 成功(granted qos = 2)

0x80 失败

6211 UNSUBSCRIBE(取消订阅)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

中移物联网有限公司 OneNET 开发文档中心

Payload

Description 格式

Byte1~

n

TopicName 2 字节字串长度 + utf8字

可以包含一个或多个 topic

6212 UNSUBACK(取消订阅确认)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

6213 PING(客户端发送 PING(连接保活)命令)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

NULL NULL

注PING命令无 VariableHeader

中移物联网有限公司 OneNET 开发文档中心

6214 PINGRSP(PING命令回复)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

NULL NULL

注PINGRSP无 VariableHeader

6215 DISCONNECT(断开连接)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

NULL NULL

注DISCONNECT无 VariableHeader

中移物联网有限公司 OneNET 开发文档中心

第七章 设备开发流程

71 连接鉴权

Device Onenet

(Connect)鉴权请求

(ConnAck)鉴权结果

加载session

鉴权

图7-1 连接鉴权

设备向平台发起 connect 请求connect 中携带鉴权信息具体

参见(报文格式参考 621)

平台拿到鉴权信息进行鉴权

鉴权通过后如果 cleansession=0 平台将会加载保存的设备

的一些信息如订阅列表(621中描述)

如果 cleansession=1 设备没有保存信息在平台则不加载设

备相关信息

返回鉴权结果 ConnAck(报文格式参考 621)

72 消息发布

721 数据点上报

设备使用 publish 报文来上传数据点 报文格式如下

中移物联网有限公司 OneNET 开发文档中心

VariableHeader

Field 名称 说明 格式

Field1 TopicName=rdquo$dprdquo $dp 为系统上传数据点

的指令

2字节字串长度 + utf8

字串

Payload

Payload包含真正的数据点内容支持的格式如下

Byte 1 Bit0-5数据类型指示目前支持

Type = 1

Type = 2

Type = 3

Type = 4

Type = 5

Type = 6

Type = 7

Bit6-7 flags 根据具体类型不同意义

Type6Type7这两种需要填写时间戳的数据类型

如果填入了时间戳则须将 bit7 置 1否则置 0(即

忽略数据类型说明中的日期时间相关字段)

0 0 0 0 0 0 0 1

Byte 2 根据数据类型指示不同

Byte n

中移物联网有限公司 OneNET 开发文档中心

数据类型 1(type == 1)格式说明

数据类型 2(type == 2)格式说明

Byte 1 数据点类型值1 1JSON 格式 1 字符串 0 0 0 0 0 0 0 1

Byte 2 指示后面 json 字符串长度

固定两字节长度高位字节值为 0x00

Byte 3 固定两字节长度低位字节值为 0x41

Byte 4

ldquodatastreamsrdquo[ 可以同时传递多个数据流

ldquoidrdquordquotemperaturerdquo

ldquodatapointsrdquo[数据流可以有多个数据点

rdquoatrdquordquo2013-04-22 222222rdquo可选

rdquovaluerdquo 365用户自定义

]

ldquoidrdquordquolocationrdquo

ldquodatapointsrdquo[hellip]

hellip

]

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

Byte n

Byte 1 数据点类型指示type=2 二进制数据 0 0 0 0 0 0 1 0

Byte 2 指示后面 json 字符串长度

固定两字节长度-高位字节值为 0x00

Byte 3 固定两字节长度-低位字节值为 0x10

Byte 4

rdquods_idrdquordquoimagerdquo 创建数据流时定义的 ID(必填)

ldquoatrdquordquo2014-10-25 122323rdquo 时间(可选)

rdquodescrdquo字符串或 json 对象对该数据的描述(可选)

hellip

Byte n

Byte n+1 指示后面二进制数据长度

固定四字节长度-第 1 字节(最高)值为 0x00

Byte n+1 固定四字节长度-第 2 字节值为 0x00

Byte n+2 固定四字节长度-第 3 字节值为 0x01

Byte n+3 固定四字节长度-第 4 字节(最低)值为 0x00

Byte n+4 该域目前最大支持 3M

中移物联网有限公司 OneNET 开发文档中心

数据类型 3(type == 3)格式说明

数据类型 4(type ==4)格式说明

hellip 本例中的该域 256 字节数据

Byte n+260

Byte 1 数据点类型指示type=3 JSON 格式 2 字符串 0 0 0 0 0 0 1 1

Byte 2 指示后面字符串长度

固定两字节长度高位字节值为 0x00

Byte 3 固定两字节长度低位字节值为 0x46

Byte 4 通用格式

ldquodatastream_id1rdquordquovalue1rdquo

ldquodatastream_id2rdquordquovalue2rdquo

hellip

示例

ldquotemperaturerdquo225rdquohumidityrdquordquo952rdquo

hellip

hellip

hellip

hellip

Byte n

Byte 1 数据点类型指示type=4 JSON 格式 3 字符串 0 0 0 0 0 1 0 0

Byte 2 指示后面字符串长度

固定两字节长度高位字节值为 0x00

Byte 3 固定两字节长度低位字节值为 0x46

Byte 4 通用格式

ldquodatastream_id1rdquoldquodatetime1rdquordquovalue1rdquo

ldquodatastream_id2rdquo ldquodatetime2rdquordquovalue2rdquo

hellip

示例

ldquotemperaturerdquoldquo2015-03-22 223112rdquo225

hellip

hellip

hellip

hellip

Byte n

中移物联网有限公司 OneNET 开发文档中心

数据类型 5(type == 5)格式说明

数据类型 6(type == 6)格式说明

Byte 1 数据点类型指示type=5 自定义分隔符 0 0 0 0 0 1 0 1

Byte 2 指示后面字符串长度

固定两字节长度高位字节值为 0x00

Byte 3 固定两字节长度低位字节值为 0x41

Byte 4 消息中最前面两字节为用户自定义的域中分隔符和域间分隔符

这两个分隔符不能相同比如采用逗号作为域中分隔符分号作

为域间分隔符的格式如下

feild0feild1hellipfeildn

其中每个 field 格式支持 3种

field 格式 1 3 个子字段分别是数据流 ID时间戳数据值

通用格式

Datastream_iddatetimevalue

field 格式 2 2 个子字段分别是数据流 ID 和数据值省略时

间戳通用格式

Datastream_idvalue

field 格式 3 1 个子字段省略了数据 ID 和时间戳只传输数

据值平台将用该域(feild)所在的位置号(从 0 开始)作为数据

流 ID通用格式

value

示例

(1)temperature2015-03-22

223112225102pm258910

(2)temperature2015-03-22

223112225102pm258910

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

Byte n

Byte 1 数据类型指示type=6 带时间自定义分隔符 0 0 0 0 0 1 1 0

Byte 2 年(后两位)例如 2016 年则该字节为 16 0 0 0 1 0 0 0 0

Byte 3 月(1-12)

Byte 4 日(1-31)

Byte 5 小时(0~23)

Byte 6 分钟(0~59)

Byte 7 秒(0~59)

Byte 8 指示后面字符串长度

固定两字节长度高位字节值为 0x00

Byte 9 固定两字节长度低位字节值为 0x41

Byte 10 消息中最前面两字节为用户自定义的域中分隔符和域间分隔符

具体格式见 type=5 说明若相关域中没有时间戳则采用本类

hellip

中移物联网有限公司 OneNET 开发文档中心

数据类型 7(type == 7)格式说明(每次最多 500个数据流的浮点数)

hellip 型的默认时间戳当作数据点的时间来存储

Byte n

Byte 1 Bit0-5 数据类型指示type=7 可离散浮点数数据流

Bit6保留置 0

Bit7 时间指示位1携带 6字节时间

1 0 0 0 0 1 1 1

Byte 2 年(后两位)例如 2016 年则该字节为 16 0 0 0 1 0 0 0 0

Byte 3 月(1-12)

Byte 4 日(1-31)

Byte 5 小时(0~23)

Byte 6 分钟(0~59)

Byte7 秒(0~59)

Byte 8 数据流名称(取值范围 1-65535)

高位字节值为 0x00

Byte 9 低位字节值为 0x01

Byte10 数据流个数(取值范围 1-500)

高位字节值为 0x00

Byte11 低位字节值为 0x01

Byte 10 4 字节 float 类型低位在前高位在后

Byte 11

Byte 12

Byte 13

Byte n 数据流名称(取值范围 1-65535)

高位字节值为 0x24

Byte n+1 低位字节值为 0x37

Byte n+2 数据流个数(取值范围 1-500)

高位字节值为 0x01

Byte n+3 低位字节值为 0x00

Byte n+2 4 字节 float 类型低位在前高位在后

Byte n+4

Byte n+5

Byte n+6

中移物联网有限公司 OneNET 开发文档中心

7211 Qos0(Client-gtServer)

Device OneNet

Publish $dp(Qos0)

存储

图7-2 QoS连接图

设备发布 Qos0 消息(上报数据点)

平台收到上报数据点后保存起来

7212 Qos1(Client-gtServer)

Device OneNet

Publish $dp(Qos1)

存储

PubAck

图7-3 Qos1连接图

设备发布 Qos1 消息(上报数据点)

中移物联网有限公司 OneNET 开发文档中心

平台收到上报数据点后保存起来

平台给设备回复相应的 PubAck (报文格式参考 625)

7213 Qos2(Client-gtServer)

Device OneNet

Publish $dp(Qos2)

存储

PubRec

PubRel

PubComp

图7-4 Qos2连接图

设备发布 Qos2 消息(上报数据点)

平台收到上报数据点后保存起来

平台给设备回复相应的 PubRec报文

设备需回复平台 PubRel报文如超时不回平台则会断开相应连接

平台给设备回复 PubComp报文

注数据点上报功能不支持 Retain 特性

中移物联网有限公司 OneNET 开发文档中心

722 平台命令(下发amp回复)

7221 命令下发

平台使用 publish 报文来下发平台指令 报文格式如下

FixHeader

参考 623

VariableHeader

Field 名称 说明 格式

Field1 TopicName=rdquo$creqcmduuidrdquo $creq为系统下发

Cmd 的 指 令

cmduuid为该条指

令的 uuid

2字节字串长度 +

utf8字串

Payload

Payload包含真正的指令内容

72211 Qos0(Server-gtClient)

DeviceOneNet

Publish $creq(Qos0)

图7-5 Qos0命令下发

命令下发

平台向设备发送 topic为$creq的消息(该 topic为平台命令)

中移物联网有限公司 OneNET 开发文档中心

设备收到 topic 为$creq 的 topic 时需将其作为平台下发的指令来处

注目前命令下发以 Qos0级别进行推送

7222 命令回复

设备使用 publish 报文来回复平台指令 报文格式如下

FixHeader

参考 623

VariableHeader

Field 名称 说明 格式

Field1 TopicName=rdquo$crspcmduuidrdquo $crsp为系统处理

设备回复 cmd 的

指令cmduuid为

该条指令的 uuid

2字节字串长度 +

utf8字串

Payload

Payload包含真正回复的指令内容

72221 Qos0(Client-gtServer)

DeviceOneNet

Pulish $crsp(Qos0)

图7-6 Qos0下发命令

中移物联网有限公司 OneNET 开发文档中心

72222 Qos1(Clientlt-gt Server)

DeviceOneNet

Pulish $crsp(Qos1)

Puback

图7-7 Qos1下发命令

如果设备回复响应时以 Qos1回复则平台需要给设备回复一个 Puback 报文

72223 Qos2(Clientlt-gt Server)

DeviceOneNet

Pulish $crsp(Qos2)

PubRec

PubRel

PubComp

图7-8 Qos2下发命令

如果设备回复响应时以 Qos2回复则

1平台需回复设备一个 PubRec报文

中移物联网有限公司 OneNET 开发文档中心

2设备在收到 PubRec后需向平台回复 PubRel报文

3平台收到 PubRel 报文后向设备回复 PubComp报文

73 创建 Topic

Device OneNet

HTTP 请求

HTTP 响应

图7-9 创建Topic

设备通过发送 HTTP请求进行 topic 的创建操作

平台收到请求后创建 topic 并返回结果

请求及响应定义如下

HTTP方法 POST

URL httpapihecloudscommqtttopic

HTTP头部 api-keyxxxx-ffff-zzzzz必须 master key

URL参数

HTTP body

内容

ldquonamerdquordquoxxxxxxrdquo topic 名字只能由英文下划线反斜杠组成最长

1024个字符同一产品下 topic name 不重复

成功返回

errno 0

errorldquosuccrdquo

说明 每个产品最多 100个 topic

中移物联网有限公司 OneNET 开发文档中心

74 订阅

Device OneNet

Subscribe

Suback

更新设备订阅列表

图7-10 订阅

设备发起订阅请求(报文格式参考 629)

平台收到请求后更新 topic列表

平台给设备回复 SubAck (报文格式参考 6210)

注subscribe 的 request qos级别可以为 012

75 取消订阅

Device OneNet

UnSubscribe

UnSuback

更新设备订阅列表

图7-11取消订阅

中移物联网有限公司 OneNET 开发文档中心

设备发起取消订阅请求 (报文格式参考 6211)

平台收到请求后更新 topic 列表

平台给设备回复 UnSubAck (报文格式参考 6212)

76 推送设备 Topic

761 Publish 报文推送

Qos0设备使用 Qos 级别为 0的 Publish报文来进行推送

Device OneNet

Publish(Qos0)

Device

以Qos0 Publish到订阅设备

图7-12 Qos0推送

设备发起推送 topic请求(以 Qos0级别)

平台收到请求后将 topic以 Qos0级别推送到相关订阅设备(支持离线设

备推送)

平台不返回 PubAck或 PubRec 等报文

Qos1

设备使用 Qos级别为 1的 publish报文来推送 Topic

中移物联网有限公司 OneNET 开发文档中心

Device OneNet

Publish(Qos1)

PubAck

Device

以Qos1 Publish到订阅设备

设备回复平台 PubAck

图7-13 Qos1发布

设备发起推送 topic请求(以 Qos1级别)

平台收到请求后将 topic以 Qos1级别推送到相关订阅设备(支持离线设

备推送)

平台返回 PubAck 报文

Qos2

设备使用 Qos级别为 2的 publish报文来推送 Topic

中移物联网有限公司 OneNET 开发文档中心

Device OneNet

Publish(Qos2)

PubRec

Device

以Qos2 Publish到订阅设备

PubRec

PubRel

PubComp

PubRel

PubComp

图7-14 Qos2推送

设备发起推送 topic请求(以 Qos2级别)

平台收到请求后回复 PubRec报文

设备收到 PubRec后需回复 PubRel报文 (如超时不回复平台会断开与设

备的连接)

平台收到 PubRel 报文后回复 PubComp 给设备

平台在回复 PubComp 后会以 Qos2 级别推送到相关订阅设备(支持离线设

备推送)

设备需回复 PubRec报文 (如超时不回复平台会断开与设备的连接)

平台发送 PubRel 报文给设备

设备需回复 PubComp(发布完成)

Publish报文的格式如下

FixHeader

参考 623

中移物联网有限公司 OneNET 开发文档中心

VariableHeader

Field 名称 说明 格式

Field1 TopicName 填写设备订阅的 topic 2字节字串长度 + utf8

字串

Payload

Payload为设备自定义内容

762 HTTP 请求推送

Device OneNet

HTTP 请求

HTTP 响应

Device

Publish到订阅设备

图7-15 HTTP请求

设备以 HTTP 的方式发起推送 topic 请求

平台收到请求后将 topic推送到相关订阅设备 (目前只支持在线推送)

平台返回推送结果

请求及响应定义如下 HTTP方法 POST

URL httpapihecloudscommqtt

HTTP头部 api-keyxxxx-ffff-zzzzz必须 master key

URL参数 topic=ldquoXXXXXXrdquo必选在发送 mqtt协议的 topic 必填

HTTP body内容 用户自定义 Json 或二进制数据(小于 64K)

成功返回

errno 0

errorldquosuccrdquo

中移物联网有限公司 OneNET 开发文档中心

77 离线 Topic

推送 Topic只针对在线设备进行 topic 消息的推送离线设备不会收到订阅

的 topic 的消息离线 Topic则会将该消息推送给在线以及离线设备

1 如果设备在上线时设置了 clean session flag服务端会删除其订阅的

topic及相关的离线 topic消息

2 如果设备没有设置 clean session flag如果有与该设备相关的离线

topic消息则在鉴权成功后将离线消息推送给设备

3 遗嘱消息(will msg)只会推送给订阅了该 will topic的在线的设备离

线设备不会收到

4 离线消息的有效期默认为 2 天(暂不支持用户设定有效期)服务器只会

推送在 2天内的最近 10 条消息

78 数据点订阅

数据点订阅同一产品下的设备可以订阅其他设备的数据点订阅的 topic

格式为deviceid数据流名称即

被关注的设备在上传了该数据流名称的数据点后订阅了该 topic的其他设备都

会收到上传的数据点

1 AB设备的 deviceid分别为 92779278

2 A 设备订阅了名为92789527 的 topic(9278 为设备 B 的 id9527 为 B

设备上传的数据流名称)

3 B 设备上传了名为 9527的数据流(数据点为 11 1578hellip)

4 A 设备会收到多条(取决于设备 B 上传的数据点的个数)推送的 topic 名

为92789527 的 publish消息消息的 payload中则包含设备 B 上传的数据

注目前支持订阅的数据点的类型为 Type1~Type7(详见 721节)

中移物联网有限公司 OneNET 开发文档中心

第八章 常见问题 FAQ

用户在基于 OneNET 平台进行产品开发的过程中可能会遇到各种各样的问

题开发过程中遇到的问题一方面可以参考 OneNET 文档中心的文档或者本文

档前几个章节的内容另一方面用户可以参考本章节总结的常见问题希望这些

文档能对用户在开发过程中有一定的指导和帮助

本章将分三个小节对用户在开发产品过程中可能遇到的问题进行梳理分别

为终端设备接入 OneNET平台的常见问题API调用的常见问题和 OneNET平台

的能力

81 终端设备接入 OneNET 平台的常见问题

序号 问题描述 原因分析 解决方法

1

2

3

4

5

6

7

82 API 调用的常见问题

序号 问题描述 原因分析 解决方法

1

2

3

4

5

6

7

8

9

中移物联网有限公司 OneNET 开发文档中心

83 使用 OneNET平台遇到的常见问题

序号 问题描述 原因分析 解决方法

1

2

3

4

5

6

7

8

Page 11: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com

中移物联网有限公司 OneNET 开发文档中心

第三章 终端设备接入 OneNET 平台流程

终端设备与 OneNET 平台进行数据交互需经过公网到达平台根据 OneNET

平台与网络运营商的关系终端设备智能网关OneNET平台以及第三方应用四

者的网络关系可归纳如图 3-1所示

图3-1 终端设备与服务器网络关系

图 3-1 中终端设备或智能网关设备与 OneNet 平台使用 TCPIP 建立网络连

接使用 MQTT协议进行与平台进行数据通信

31 终端设备接入 OneNET 平台前的准备工作

311 硬件准备

设备终端接入 OneNET平台的通信方式也是多种多样的比较常用的有 GPRS

无线 WIFI以太网口GPRS 方式需要 GPRS 模块和 SIM 卡的支持无线 WIFI 模

块需要 WIFI 模块支持WIFI 模块推荐选用 ESP8266 串口 WIFI 模块GPRS 模块

推荐选用 SIM900A模块

312 软件准备

设备终端接入 OneNET 平台使用 MQTT 协议使用嵌入式设备需移植 SDK

到 MCU详见麒麟发开板接入实例

中移物联网有限公司 OneNET 开发文档中心

32 终端设备接入 OneNET 平台步骤

321 OneNET 平台创建产品及设备

3211 注册用户账号

进入 OneNET官网(httpsopeniot10086cn)点击首页右上角的ldquo注

册rdquo按钮注册用户账号

OneNET 支持ldquo个人用户rdquo和ldquo企业用户rdquo两种注册方式你可以根据您的

实际情况选择注册方式

以个人用户注册为例用户需在对应选项依次填写用户名用户密码所在

地手机号码图片验证码以及手机验证码并完成注册注册页面如图 3-2所

示注册完成后回到主页点击ldquo登录rdquo即可进入 OneNET 的官方主页并由

此进入到你的ldquo开发者中心rdquo

如果客户产品后续需要进行规模化量产建议以企业的名义进行注册注册

时注意注册信息的准确填写另外个人版和企业版在功能上无差异

图3-2 用户账号注册页面

3212 创建产品和设备

在进入到你的ldquo开发者中心rdquo后点击右上角的 ldquo创建产品rdquo在弹出页面中

按照提示填写产品的基本信息进行产品创建在创建过程中请您按照提示尽

可能完整全面地填写相应内容这样更方便您后期对产品进行管理

创建产品页面如图 3-3 和图 3-4其中设备接入方式选择ldquo公开协议rdquo联网

方式选择跟据实际设备进行选择设备接入协议选择ldquoMQTTrdquo

中移物联网有限公司 OneNET 开发文档中心

产品创建完成后页面弹出ldquo创建产品成功rdquo如图 3-5所示点击ldquo立即

添加设备rdquo显示如图 3-6所示界面依次填写ldquo设备名称rdquo鉴权信息设备

名称自定义鉴权信息用于平台对终端设备鉴权每台设备具有唯一性建议设

置为产品出厂编号方便管理鉴权信息需写入设备

图3-3 创建产品页面

中移物联网有限公司 OneNET 开发文档中心

图3-4 创建产品页面

图3-5 创建产品成功页面

中移物联网有限公司 OneNET 开发文档中心

图3-6 添加设备页面

322 终端设备软硬件初始化

终端设备在上电以后需要完成设备的软硬件初始化硬件初始化包括各个

硬件模块的上电处理器的寄存器初始化工作模式初始化等等软件初始化包

括基础通信套件初始化应用接口初始化应用程序初始化等等

323 终端创建设备及资源

终端设备创建设备(device_id)配置产品 ID鉴权信息注册码连接

服务器 IP端口号等信息创建成功后与平台建立登陆连接连接成功后即可向

平台上报数据点

324 登录 OneNET平台

终端设备的基础通信套件完成初始化以及设备资源创建完成后可向

OneNET平台发送登陆请求返回登录结果如果参数错误或者登录超时平台会

返回登录失败如果验证通过平台会返回登录成功

若终端设备登录平台成功设备名称左边的圆形图标会由灰色(离线状态)

变成绿色(在线状态)如图 3-7所示

中移物联网有限公司 OneNET 开发文档中心

图3-7 平台侧设备状态显示

325 设备数据点上报

终端设备与平台成功建立连接后设备使用 publish 报文向平台上报数据点

平台收到数据点后保存到对应数据流下方便应用查阅数据点上报格式以及类型详见

721

图3-8 平台侧收到设备数据流显示

326 创建应用

用户可以利用上传的数据创建相关的应用发布直观的展示页面目前在平台应用孵化

器中提供了曲线图柱状图表盘物体位置图片和开关等应用

在产品详情页面点击ldquo应用管理rdquo进入应用管理主界面如下图

中移物联网有限公司 OneNET 开发文档中心

图3-9 应用管理模块

点击ldquo创建应用rdquo输入应用名称点击ldquo创建rdquo如下图

图3-10 新应用创建

保存成功后点击编辑按键进入应用编辑页面如下图

中移物联网有限公司 OneNET 开发文档中心

图3-11 应用编辑入口

图3-12 应用编辑界面

在应用编辑页面中使用左侧的控件进行应用编辑此例中我们选择表盘控件来显示

刚刚上传的数据点击表盘控件如下图所示

中移物联网有限公司 OneNET 开发文档中心

图3-13 表盘控件添加

在右侧的属性中选择设备以及数据源(及刚刚上传的数据流)如下图

图3-14 表盘控件数据流绑定

在确定好数据流之后可以看到表盘回显示成我们添加的数据的值其他的

刷新频率以及表盘显示样式读者可以自行更具需求加以修改

完成应用编辑之后点击右上角保存按钮退出应用编辑

在应用管理页面点击该应用即可查看编辑好的应用页面

中移物联网有限公司 OneNET 开发文档中心

图3-15 保存应用

图3-16 应用查看与分享

该应用可以通过共享ldquo发布链接rdquo的方式将该应用共享给他人

33 设备批量接入

单个设备可以通过平台的开发者中心添加设备的方式进行创建若用户有多

个设备直接与平台 TCP连接的终端通过手动添加需耗费大量时间人力OneNET

中移物联网有限公司 OneNET 开发文档中心

为大批量接入用户提供 3种批量创建设备的方案

331 平台设备批量复制

此种方式为选择某个设备作为复制的模板通过导入 EXCEL的方式进行设备

复制厂商可以在小批量测试时使用该功能

在设备列表中点击查看详情

图3-17 设备批量接入

在设备详情页面点击批量导入设备信息

中移物联网有限公司 OneNET 开发文档中心

图3-18 导入设备信息

点击批量复制

图3-19 批量复制

中移物联网有限公司 OneNET 开发文档中心

目前提供三种批量创建的方式 excel 导入的方式为主要接入方式选择

excel导入点击下载模板

图3-20 快速导入

图3-21 Excel导入

打开下载下来的 excel模板表中的 titledesctags等均为将要批量导

入的设备的数据其中的 title 和 auth_info 为必填选项title 为设备名

中移物联网有限公司 OneNET 开发文档中心

auth_info对应设备的鉴权信息

图3-22 Excel格式

填写 3个设备信息

图3-23 Excel内容

三个设备的 title和 auth_info都一样均为 20170808000012017080800002

2017080800003保存该表格点击ldquo点击上传rdquo上传保存好的 excel 文件

点击ldquo确定导入批量rdquo

中移物联网有限公司 OneNET 开发文档中心

图3-24 导入上传

图3-25 确认创建

可以看到在原设备目录下新增了 3个设备其名称分别为 2017080800001

20170808000022017080800003

中移物联网有限公司 OneNET 开发文档中心

图3-26 批量创建的设备

点击设备详情可以看到设备目录下各个设备的鉴权信息与表格中所填

写的内容一致

图3-27 设备ID及鉴权信息

至此完成了通过批量设备复制的方式完成设备批量创建的过程用户如果

要使用这个功能需要将自己终端的出厂序列号整理到这个 excel表中然后利

中移物联网有限公司 OneNET 开发文档中心

用上传表格的方式进行批量创建

332 应用平台调用新增设备 API

OneNET 提供了创建设备的 API接口

图3-28 新增设备API接口

其中的 auth_info 参数对应着设备的鉴权信息通过调用此 API 接口可以

实现在平台上新增设备的功能用户如果有自己的第三方应用平台进行设备管理

可以通过多次调用此接口的方式进行设备的批量创建在调用接口时需要确保每

次调用的 auth_info 参数对应着自己的每一个终端不同的出厂序列号

333 终端调用注册 API

API 实际是 HTTP 协议的通信协议终端也可以通过封装 HTTP 包发送注册

中移物联网有限公司 OneNET 开发文档中心

设备请求的方式调用 API

终端调用注册 API 创建设备并接入的流程如图 3-29所示

平台

TCP连接协议接入机

创建产品

发送连接报文

连接应答

数据应答

发送数据报文

生成连接报文

设备

发送下行命令 下发命令

解析下行命令

生成存储数据报文

解析连接应答

解析数据应答

必要流程

可选流程

存储到数据流 数据源 创建应用

心跳应答

发送心跳报文生成心跳报文

解析心跳应答

平台操作

设备操作

利用设备本身的sn和产品的设备注册码生成注册报文

TCP连接API服务器

发送注册报文

注册应答

解析设备ID

创建设备

设备开机

读取硬件中烧录的设备编号(sn)

图3-29 终端调用注册API接入流程

1) 创建产品

重要参数产品 ID注册码产品 APIKey(见附录一)

2) 生成并发送注册报文

每一个用户终端中都有厂商烧录的唯一出厂序列号(sn)终端上电

之后应该首先读取自己的 sn然后通过 1)中的注册码和 sn 一起组成注

册报文

注册报文格式如下例

POST httpapihecloudscomregister_deregister_code=6TM7OkhNsTjATvFx HTTP11

Host apihecloudscom

Content-Length 48

中移物联网有限公司 OneNET 开发文档中心

sn02136616511001titletestdevice0001

其中

6TM7OkhNsTjATvFx 为产品注册码

02136616511001 是本例中模拟的设备唯一编号

testdevice0001 是本例中模拟的设备名

若上传的数据格式以及参数鉴权均正确则平台会返回设备创建成功

返回设备 ID以及该设备对应的设备 api-key

HTTP11 200 OK

Date Wed 09 Aug 2017 064821 GMT

Content-Type applicationjson

Content-Length 95

Connection keep-alive

Server Apache-Coyote11

Pragma no-cache

errno0datadevice_id11142371keyq9Mw0zqiAPjTwqfyCk2mWrUi8=errorsucc

3) 在步骤 2)完成之后平台上的设备就已经成功创建了终端需要

重新 TCP连接到对应协议的服务器上完成设备连接(与设备进行映射)以

及上传数据的操作

34 设备 ID 与产品序列号

通过 OneNET构建的物联网系统中有两套比较重要的编码设备 ID与产品序列号

(SN)其中

产品序列号是由厂商指定的在厂商的产品范围内是保持唯一的在出厂前烧写到每

一个终端中通常包含在与平台通信的数据中并以条形码的方式贴在产品的包装上用

于从用户的角度区分每一个独立的终端

设备 ID是在平台创建设备时由 OneNET分配的平台范围内唯一的编号应用于第三

方平台调用 OneNET API时使用

在创建设备时OneNET平台需要用户以设备 sn为参数进行设备创建成功之后平

台会分配一个设备 ID这样 OneNET内部就有了一个 sn-设备 ID的映射关系

终端登陆使用的鉴权信息是出厂时烧写好的 sn鉴权通过之后平台可以将该终端

上传是数据放到对应的设备中

上层应用通过创建设备 API或者查询设备 API建立 sn-设备 ID映射表在需要操作

某一设备时首先可以获取的是终端的 sn号(因为对用户是可见的)通过映射表获取设

中移物联网有限公司 OneNET 开发文档中心

备 ID然后再通过 API访问 OneNET平台上的对应设备

两套编码在物联网系统中的应用位置如下图所示

物联网应用

OneNET

终端

(烧写sn)

HTTP API 以设备ID为参数进行API访问

接入协议以sn为鉴权参数进行设备连接

设备

设备名

设备ID

设备sn

设备标签

sn 设备ID

snmdash设备ID映射表

中移物联网有限公司 OneNET 开发文档中心

第四章 第三方应用开发

第三方应用与 OneNET 平台的业务逻辑关系如图 4-1 所示第三方应用与

OneNET平台之间通过 HTTPS请求应答的方式实现数据交互OneNET 平台为第三

方应用提供封装好的 API 接口应用平台通过调用这些 API 接口完成对 OneNET

平台的读写执行以及设备管理请求然后 OneNET 平台会将相应的指令请求发送

到终端设备OneNET 平台收到终端设备响应的数据及设备信息后会将数据及

设备信息推送到应用平台完成应答

下面将分别介绍第三方应用接入 OneNET 平台的步骤OneNET平台提供的数

据推送功能以及 OneNET 平台为第三方应用封装好的 API接口

图4-1 第三方应用与OneNET平台的逻辑关系

41 第三方应用接入 OneNET 平台

第三方应用与 OneNET平台实现数据交互的前提是已经建立连接第三方应

用接入 OneNET平台的开发流程如图 4-2所示包括三个步骤

(1) 在 OneNET 平台创建了设备该设备有对应的真实设备且能正常上报

数据

(2) 用户已经开发并部署了 OneNET平台验证接入的程序

(3) 在 OneNET 平台正确配置了第三方应用数据接收的地址(URL)

Token以及其他参数

中移物联网有限公司 OneNET 开发文档中心

在确保上述第(1)步已经实现的基础上下面将分别讲述第(2)步和第

(3)步的实现过程

图4-2 数据推送的开发流程

412 第三方应用平台接入验证程序

第三方应用平台接入验证程序工作流程如下所述当 OneNET 平台完成对第

三方开发平台的配置后会向第三方开发平台发起 URLampToken验证接入验证程

序对平台发送的验证参数进行验证验证通过后第三方开发平台会向 OneNET

平台返回验证消息当 OneNET 平台收到验证消息后说明第三方开发平台与

OneNET平台已建立连接

目前 OneNET平台为第三方应用平台提供接入验证程序的 SDK有 Javaphp

Nodejs和 C四个版本

SDK 下载地址httpsopeniot10086cndocart432html118 -ldquo数

据推送rdquo

413 OneNET 平台配置第三方应用平台

在 OneNET平台对第三方应用平台的配置界面如图 4-3所示

URL第三方开发平台的地址

Token可以自定义用于第三方开发平台接入平台握手验证

消息加解密方式有明文模式和安全模式当启用安全模式后平台端需要

用户自定义 AESKey 或者由平台随机生成在应用程序中使用该 AESKey 解密消

中移物联网有限公司 OneNET 开发文档中心

推送时间限制(秒)和推送数据限制(个)设置ldquo推送时间限制rdquoldquo推送数

据限制rdquo可以实现批量推送数据减少服务器压力当满足ldquo推送时间限制rdquo和

ldquo推送数据限制rdquo要求后OneNET 将给第三方推送数据如果没有设置ldquo推送

时间限制rdquo和ldquo推送数据限制rdquo将默认数据实时推送

图4-3 第三方开发平台的配置界面

当用户成功在 OneNET 平台配置了第三方开发平台服务器地址后点击ldquo提

交rdquo按钮后OneNET 平台会向第三方应用平台发起 URLampToken 验证请求验证

通过且收到第三方返回的验证消息后则第三方应用平台与 OneNET 平台已建立

连接之后OneNET 平台在收到设备数据时会将设备数据推送到已配置的第三

方应用平台

用户数据接收服务程序接收到 OneNET平台发送的 ldquoURLampTokenrdquo验证请求

请求的格式形如httpipporttestmsg=xxxampnonce=xxxampsignature=xxx

蓝色字体部分为用户在 OneNET平台配置的 URL常规的验证流程如下

(1)在请求中获取参数ldquononcerdquoldquomsgrdquo的值将ldquotokenrdquo(此为页面

配置参数 token的值)ldquononcerdquoldquomsgrdquo的值计算 MD5(token+nonce+msg)

加密值并且编码为 Base64字符串值

中移物联网有限公司 OneNET 开发文档中心

(2)将上一步中 Base64字符串值通过 URL Decode 计算后的值与请求参数

ldquosignaturerdquo的值进行对比如果相等则表示 token验证成功

(3)如果 token 验证成功向 OneNET 平台返回ldquomsgrdquo参数值否则返回

其他值

说明如果用户不想验证 Token 的有效性可以忽略以上步骤并直接向

OneNET平台返回ldquomsgrdquo参数值

42 OneNET 平台数据推送

平台以 HTTPS POST 请求形式向第三方应用平台注册地址推送数据推送数

据相关信息以 JSON 串的形式置于 HTTPS请求中的 body部分

第三方应用平台在接收数据时会接收到数据的明文消息或者密文消息

明文消息中以ldquotyperdquo的数值区分不同的消息而密文消息与明文消息的区别

是ldquomsgrdquo部分经过了加密处理下面将分别对明文消息密文消息以及消息相

关字段和密文的加密算法进行说明

421 明文消息

明文消息有两种消息类型分别为数据点消息和设备上下线消息而数据点

消息又分为单条数据点消息和数据点消息批量形式数据点消息批量形式中的不

同数据点是以不同时间戳区分的

(1)数据点消息(type=1)

msg

type 1

dev_id 2016617

ds_id datastream_id

at 1466133706841

value 42

msg_signature message signature

nonce abcdefgh

(2)数据点消息批量形式(type=1)

msg [

type 1

dev_id 2016617

ds_id datastream_id

中移物联网有限公司 OneNET 开发文档中心

at 1466133706841

value 42

type 1

dev_id 2016617

ds_id datastream_id

at 1466133706842

value43

]

msg_signature message signature

nonce abcdefgh

(3)设备上下线消息(type=2)

msg

type 2

dev_id 2016617

status 0

login_type 1

at 1466133706841

msg_signature message signature

nonce abcdefgh

422 密文消息

密文消息中的ldquoenc_msgrdquo是由明文消息中的ldquomsgrdquo采用 AES 加密算法而

enc_msgxxxx

msg_signature

message signature

nonceabcdefgh

423 消息相关字段说明

表4-1 消息相关字段说明

字段 字段说明

type 标识数据类型当前版本范围[15]

dev_id 设备 ID

ds_id 公 开 协 议 中 的 数 据 流 ID 其 格 式 为

objectID_instanceID_resourceID

at 平台时间戳单位 ms

value 具体数据部分为设备上传至平台或触发的相关

数据

中移物联网有限公司 OneNET 开发文档中心

status 设备上下线标识

0-下线 1-上线

login_type

设备登陆协议类型

1EDP 2nwx 3JTEXT 5JT808 6

MODBUS 7MQTT 8gr2010NB-IoT

cmd_type

命令响应的类型

1设备收到 cmd的 ACK 响应信息 2设备收到

cmd的 Confirm响应信息

cmd_id 命令 ID

msg_signatur

e 消息摘要

nonce 用于计算消息摘要的随机串

enc_msg 加密密文消息体对明文 JSON串(msg字段)的

加密

424 加密算法详述

平台基于 AES算法提供加解密技术具体阐述如下

EncodingAESKey 即消息加解密 Key 的 BASE64编码形式长度固定为 43

个字符从 a-zA-Z0-9共 62个字符中选取由服务开启时填写后

也可申请修改

AES密钥计算为 AESKey=Base64_Decode(EncodingAESKey + ldquo=rdquo)

EncodingAESKey 尾部填充一个字符的ldquo=rdquo 用 Base64_Decode 生成 32

个字节的 AESKey

AES采用 CBC 模式秘钥长度为 32 个字节(256位)数据采用

PKCS7填充 初始化 iv向量取秘钥前 16字节 PKCS7K为秘钥字

节数(采用 32)buf为待加密的内容N为其字节数Buf 需要被填

充为 K的整数倍在 buf的尾部填充(K-NK)个字节每个字节的内容

是(K- NK)具体详见toolsietforghtmlrfc2315

BASE64采用 MIME格式字符包括大小写字母各 26个加上 10个数

字和加号ldquo+rdquo斜杠ldquordquo一共 64个字符等号ldquo=rdquo用作后缀填

出于安全考虑平台网站提供了修改 EncodingAESKey的功能(在

EncodingAESKey 可能泄漏时进行修改对应上第三方平台申请时填写

的接收消息的加密对称密钥)所以建议保存当前的和上一次的

中移物联网有限公司 OneNET 开发文档中心

EncodingAESKey若当前 EncodingAESKey 生成的 AESKey解密失败则

尝试用上一次的 AESKey的解密

平台的加密消息部分为 enc_msg= Base64_Encode( AES_Encrypt

[random(16B)+msg_len(4B)+msg] )即以 16字节随机字节串拼接 4字

节表示消息体长度的字节串(此处 4 字节长度表示为网络字节序)再加

上消息本身的字节串作为 AES加密的明文再以 AES算法对明文进行加

密生成密文最后对密文进行 BASE64 的编码操作生成加密消息体

对加密消息体的解密流程为1)首先进行加密消息体的 BASE64 解码操作

aes_msg=Base64_Decode(enc_msg)2)对获取的解码内容以 AES 算法进行解密

操作获取明文部分plain_msg=AES_Decrypt(aes_msg)解密中使用的秘钥由

EncodingAESKey 计算得来使用的初始化 iv 向量为计算出的 aes 秘钥的前 16

字节3)去掉 plain_msg 的前 16 字节再以前 4 字节取出消息体长度根据消

息体长度获取真实的消息部分(推荐以消息体长度获取真实消息以兼容

plain_msg 未来可能出现的结构变更)表示加密传输的数据后两字段与明文

传输一致

43 API 接口

第三方开发平台应用层通过 Rsetful API 的方式和 OneNET平台进行交互对

接实现命令的下发数据的读写以及相关业务的交互

针对 MQTT 协议目前主要开发了以下 API 用来实现第三方开发平台向

OneNET平台请求读写执行以及设备管理请求具体见下表 4-2下面分别对每一

种 API进行说明

表4-2 API功能说明

API 类别 操作对象 API名称

需要终端响应 只需平台响应

设备

注册

更新设备注册属性

新增

更新

精确查询单个设备

中移物联网有限公司 OneNET 开发文档中心

模糊查询设备

批量查询设备状态

删除

数据流

新增

更新

查询单个数据流

查询多个数据流

删除

数据点

新增

查询

二进制数

新增

查询

触发器

新增

更新

查询单个触发器

模糊查询触发器

删除

触发数据内容

命令

发送命令

查询命令状态

查询命令相应

查询设备历史命令

视频能力 获取播放地址

APIKEY

新增

更新

查看

删除

消息订阅

按 Topic发送命令

查询订阅指定 Topic设备的列表

查询设备订阅的 Topic列表

删除产品的 Topic

查询产品的 Topic

中移物联网有限公司 OneNET 开发文档中心

432 设备

4321 注册

表4-3 设备注册

HTTP方法 POST

URL apihecloudscomregister_de

URL参数 register_code=6TM1OkhNsTjATvFx 设备注册码(必填)

HTTP内容

(示例)

sn 2015031401421 设备唯一标识 string类型最长 512字符

mac C89346DA4373 设备唯一 mac标识最长 32字符

title myedpdevice 设备名(可选) 最长 32个字符

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

keyQ1VdWoEvdkCye=d1=HcCSP6LvCw= 新设备 apikey

device_id 325018 设备 ID

说明

1 响应消息中 errno 表示错误码error 表示错误原因如果创建设备失

败则没有 data字段

2 snmac一定要必填其中一个而且只可以传一个用于鉴权就是设备

新增中的 auth_info

3 此接口根据产品设置的不同默认 allow_dup=true可以生成新设备及

key或获取原有设备及 key见下表

表4-4 对应表

产品允许重复 sn 在产品中已存在 sn 在产品中不存在

allow_dup=true 是 sn 对应的设备 id 和 key 新的设备 id 和 key

allow_dup=false 否 报错 新的设备 id 和 key

中移物联网有限公司 OneNET 开发文档中心

此接口返回的新设备默认设备名均为auto_register均为私有设

备设备协议与产品协议相同

4322 更新设备注册属性

表4-5 更新设备注册属性

HTTP方法 PUT

URL apihecloudscomregister_attr

HTTP头部 api-key xxxxddddsssaaa 必须为 masterkey

HTTP内容

(示例)

allow_dup true|false是否允许重复提交相同的设备 sn 默认 true

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

默认 allow_dup 为 true主要用于设备注册码创建设备属性限制

4323 新增

表4-6 新增设备注册属性

HTTP方法 POST

URL apihecloudscomdevices

HTTP头部 api-key xxxxddddsssaaa 必须为 masterkey

HTTP内容

(示例)

title mydevice 设备名

desc some description 设备描述(可选)

tags [chinamobile] 设备标签(可选可为一个或多个)

protocolMQTT 选择一种接入协议(可选默认为 HTTP)

location lon 106 lat 29 ele 370设备位置纬度

经度 高度(可选)

private true| false 设备私密性(可选默认为 ture)

auth_info 201503041a5829151 MQTT设备设备唯一编号

other version 100 manu china mobile 其他信息(可

选JSON格式可自定义)

HTTP响应响

应消息内容

(实例)

errno 0

error succ

data

中移物联网有限公司 OneNET 开发文档中心

device_id233444 平台分配的设备 ID

4324 更新

表4-7 更新

HTTP方法 PUT

URL apihecloudscomdevicesdevice_id

HTTP头部 api-key xxxxddddsssaaa masterkey或设备 apikey

HTTP内容

(示例)

title mydevice 设备名(可选)

desc some description 设备描述(可选)

tags [chinamobile] 设备标签(可选)

protocolMQTT 选择一种接入协议(可选)

location lon106 lat 29 ele 370设备位置经度

纬度 高度(可选)

private true| false 设备私密性(可选)

auth_info201503041a5829151 MQTT设备设备唯一编号(可选)

other version 100 manufacturer china mobile 其

他信息(可选)

HTTP响应响

应消息内容

(示例)

errno 0

error succ

中移物联网有限公司 OneNET 开发文档中心

4325 精确查询单个设备

表4-8 精确查询单个设备

HTTP方法 GET

URL apihecloudscomdevicesdevice_id

HTTP头部 api-key xxxxddddsssaaa masterkey 或设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

iddevice_id

tags [chinamobile]

onlinetrue|false

protocolMQTT

titlemy device1

descsome description

create_time2015-09-16 102222

privatetrue|false

locationele370lat17609lon17703

auth_infohellip

otherversion100manufacturerchina mobile

keys[titledevice-auto-keykey2JO3B12O1]

数据流

datastreams[

create_time 2014-10-23 202222

iddatastream_id1

unitcelsius

unit_symbolC

uuid 231a5aa9-9de4-5f2e-9e0f-015181c98429

]

4326 模糊查询设备

表4-9 模糊查询设备

HTTP方法 GET

URL apihecloudscomdevices

中移物联网有限公司 OneNET 开发文档中心

URL 参数

key_words=my 匹配关键字(可选从 id和 title字段中左匹配)

auth_info=203x1 鉴权信息(可选对应注册时的 sn参数唯一设

备编号)

tag=mobile 标签(可选)

online=true| false 在线状态(可选)

private=true| false 私密性(可选)

page=1 指定页码最大页数为 10000(可选)

per_page=30 指定每页输出设备个数默认 30最多 100(可选)

device_id=235122 指定设备 ID多个用逗号分隔最多 100个(可

选)

begin=2016-06-20 起始时间包括当天(可选)

end=2016-06-20 结束时间包括当天(可选)

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

total_count1

per_page30

page1

devices

[

id3497307

titlemy device1

desc device desc

privatetrue

protocolMQTT

onlinefalse

locationlon10655231191544001lat29535451246673

create_time2013-02-11 122233

auth_infoSYSz=8QY3r7aTQ48UKfqPnB=PybYRo=

]

4327 批量查询设备最新数据

表4-10 批量查询设备最新数据

HTTP方法 GET

中移物联网有限公司 OneNET 开发文档中心

URL apihecloudscomdevicesdatapoints

URL参数 devIds=1221122331123 设备 id用逗号隔开限制 1000 个设备

HTTP头部 api-key xxxxddddsssaaa masterkey 或设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

error ldquosuccrdquo

data

devices [

id 12323 设备 id

title daf设备名

datastreams

[

id temperature数据流名称

at 2017-02-12 102222数据流更新时间

value 12数据流最新数据

hellip

helliphellip

]

hellip

hellip

]

4328 删除

表4-11 删除设备

HTTP方法 DELETE

URL apihecloudscomdevicesdevice_id

HTTP头部 api-key xxxxddddsssaaa 可为设备级别的 Key

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

中移物联网有限公司 OneNET 开发文档中心

说明删除设备会删除该设备下所有数据流和数据点删除设备动作是异步

的系统会在后续逐步删除该设备下的数据流和数据点

433 数据流

4331 新增

表4-12 新增数据流

HTTP方法 POST

URL apihecloudscomdevicesdevice_iddatastreams

HTTP头部 api-key xxxxddddsssaaa masterkey 或设备 apikey

HTTP内容

(示例)

idtemperature 数据流名称 示例温度

tags[Tag1Tag2] 数据流标签(可选可以为一个或多个)

unitcelsius 单位(可选)

unit_symbolC 单位符号(可选)

HTTP响应响

应消息内容

(示例)

errno 0

data

ds_uuid 9e6bcac9-2c6f-59d5-adae-3955df2e7bce平台分配

数据流 UUID

error succ

4332 更新

表4-13 更新数据流属性

HTTP方法 PUT

URL apihecloudscomdevicesdevice_iddatastreamsdatastream_id

示例apihecloudscomdevices421240datastreamstemperature

HTTP头部 api-key xxxxddddsssaaa masterkey 或设备 apikey

HTTP内容

(示例)

tags[Tag1Tag2] 数据流标签(可选)

unitcelsius 单位(可选)

unit_symbolC 单位符号(可选)

HTTP响应响

应消息内容

(示例)

errno 0

error succ

中移物联网有限公司 OneNET 开发文档中心

4333 查询单个数据流

表4-14 查询单个数据流

HTTP方法 GET

URL apihecloudscomdevicesdevice_iddatastreams

URL参数 datastreams_ids = 查看的 datastream的 id

HTTP头部 api-key xxxxddddsssaaa masterkey 或该设备的设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

data [

update_at 2018-06-29 112938 数据流最后更新时

id 湿度 数据流名称

create_time 2018-06-28 170548数据流创建时间

current_value 53845013最新数据点

]

error succ

4334 查询多个数据流

表4-15 查询多个数据流

HTTP方法 GET

URL apihecloudscomdevicesdevice_iddatastreams

URL 参数

datastream_ids= 查看的 datastream的 id多个 id之间用英文逗号

分开(参数缺省时为查询所有数据流)

示例

apionenetcomdevices1234datastreamsdatastream_ids=tempgps

表示查看 temp和 gps两个数据流的信息

HTTP头部 api-key xxxxddddsssaaa masterkey 或者 该设备的设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data 数据流信息

[

idtemperature 数据流名称设备范围内唯一

tags[Tag1Tag2] 数据流标签

unitcelsius 单位

unit_symbolC单位符号

create_timexxxx-xx-xx 102222 创建时间

中移物联网有限公司 OneNET 开发文档中心

current_valuehellip该数据流下数据点最新值

update_atxx-xx-xx该数据流下数据点最新上传时间

]

[

idhumi 数据流名称设备范围内唯一

tags[Tag1Tag2]

unit_symbol

create_timexxxx-xx-xx 102222

current_valuehellip

update_atxx-xx-xx

]

[]

4335 删除

表4-16 删除数据流

HTTP方法 DELETE

URL apihecloudscomdevicesdevice_iddatastreamsdatastream_id

URL参数 无

HTTP头部 api-key xxxxddddsssaaa masterkey 或者设备 key

HTTP响应响

应消息内容

(示例)

errno 0

error succ

434 数据点

4341 新增

中移物联网有限公司 OneNET 开发文档中心

表4-17 新增数据点

HTTP方法 POST

URL apihecloudscomdevicesdevice_iddatapoints

URL参数 type=3 上传数据类型(可选默认为完整 JSON型见 HTTP内容示

例)

HTTP头部 api-key xxxxddddsssaaa masterkey 或者 设备 apikey

HTTP内容

(示例)

datastreams

[

id temperature 数据流名称或数据流模板名称

datapoints [

at 2013-04-22T003543 上传数据点时间可选如

果为空则设备云会取当前时间如果存在其格式必须为 YYYY-MM-

DDThhmmss的形式(例如2015-03-22T223112)

value 42 上传数据点值

at 2013-04-22T005543

value 84 上传数据点值

]

id key 数据流名称或数据流模板名称

datapoints [

at 2013-04-22T003543上传数据点时间可选

value hellip上传数据点值

at 2013-04-22T003543

value hellip上传数据点值

]

hellip

]

中移物联网有限公司 OneNET 开发文档中心

HTTP 响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

1 可以一次性向设备云上传多个数据流每个数据流中可以包括多个数据

点示例程序表示向设备云上数据流 temperature 和数据流 key上传数据其中

temperature数据流有两个数据点key数据流也有两个数据点

2 如果某个数据流不存在则在增加数据点时设备云会自动创建一个新

的数据流注意新数据流的 datastream id 不可为空

3 数据点表示在某个时刻该数据流的值其 at表示时间为可选字段如

果为空则设备云会取当前时间如果存在其格式必须为YYYY-MM-DDThhmmss

的形式(例如2015-03-22T223112)

4 数据点中的 value表示具体的值其值为 JSON对象可以为整型浮点

型字符串多种类型如果 value部分用双引号括起来则其在设备云存储为字

符串如果不用双引号括起来则其表示数值字符编码现在只支持 UTF-8

5 数据点对应的时间是数据点的标识的一部分相同时间的两个数据点

设备云会同时对这两个相同时间的数据点进行保存不会出现覆盖另一个数据点

的情况一般如果 at 部分取空设备云会取系统时间精度为毫秒如果在一

条命令中某一个数据流包含多个数据点都没有 at 字段设备云将会对所有数据

点进行保存

6 新增数据点支持如下简写方式在请求的 URL中增加 type字段指示所

使用的格式类型目前 type支持 345三种情况

URLapihecloudscomdevices2214570datapointstype=3

示例temperature225humidity952

表示在数据流 temperature中增加一个数据点 225在 humidity 中增加一

个数据点 952

URLapihecloudscomdevices2214570datapointstype=4

示例temperature2015-03-22T223112225

表示在数据流 temperature中加一个数据点在 2015年 3月 22 日 22点 31

中移物联网有限公司 OneNET 开发文档中心

分 12秒的值为 225

URLapihecloudscomdevices2214570datapointstype=5

示例temperature2015-03-22T223112225pm2589

表示在数据流 temperature中加一个数据点即 2015年 3月 22 日 22点 31

分 12秒的值为 225在数据流 pm25中添加一个数据点即当前时间的值为 89

4342 查询

表4-18 查询数据点

HTTP方法 GET

URL apihecloudscomdevicesdevice_iddatapoints

URL 参数

datastream_id=abc 查询的数据流多个数据流之间用逗号分隔

(可选)

start=2015-01-10T080035 提取数据点的开始时间(可选)

end=2015-01-10T080035 提取数据点的结束时间(可选)

duration=3600 查询时间区间(可选单位为秒)

start+duration按时间顺序返回从 start开始一段时间内的数据点

end+duration按时间倒序返回从 end回溯一段时间内的数据点

limit=100 限定本次请求最多返回的数据点数0ltnlt=6000(可选

默认 1440)

cursor= 指定本次请求继续从 cursor位置开始提取数据(可选)

sort=DESC | ASC 值为 DESC|ASC时间排序方式DESC倒序ASC升

序默认升序

ltnlt=6000(可选默认 1440)

HTTP头部 api-key xxxxddddsssaaa masterkey 或者 该设备的设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

cursor70921_3771908_1472355096

datastreams[

idtemperature数据流名称或数据流模板名称

datapoints[

at xxxx-xx-xx 102222value42数据点上传时间和

at xxxx-xx-xx 102222value84

]

中移物联网有限公司 OneNET 开发文档中心

idkey 数据流名称或数据流模板名称

datapoints[

at xxxx-xx-xx 102222valuehellip

atxxxx-xx-xx 102222valuehellip

]

hellip

]

1 若不携带任何参数平台返回本设备所存在的所有数据流中的最新数据

(这一种情况下查询时出现时延较大的性能问题建议在 URL 参数中加上

newadd参数并将其值赋为 true如 newadd=true)

2 若不携带数据流 id参数携带 limit 参数时会返回该设备每个数据流

最多 limit 条数据

3 若要查看某一条数据流数据需在上述 URL中增加参数 datastream_id

4

apihecloudscomdevices564280datapointsdatastream_id=tempamplimit

=10会返回数据流temp中最近的 10个数据点

5 要查看某一条数据流在某个时间范围内的数据可以在增加 start和 end

参数

示例

apihecloudscomdevices564280datapointsdatastream_id=temper

atureampstart=2013-05-12T171233ampend=2013-06-12T172233 表示查询本设

备对应的数据流在 2013 年 5 月 12 日 17 点 12 分 33 秒到 17 点 22 分 33 秒的数

据点注意如果 start 参数存在end参数不存在表示取 start后的所有数据

如果 start 不存在end 存在设备云会忽略 end参数注意日期时间格式格

式必须为示例中的格式YYYY-MM-DDThhmmss例如2013-05-12T171233

日期和时间之间用大写字母 T 分隔start 和 end 之间的时间间隔最大为 1 年

超过一年会忽略

如果指定了 start 参数则可能返回的数据点的数目会很多此时默认会返

回最多 100 个数据点可以使用 limit 参数设定返回多少个数据点最大为

6000个数据点当实际的数据点数目多于 limit 限定的数目时返回的 json串

中移物联网有限公司 OneNET 开发文档中心

中会有一个 cursor 字段下一次请求的命令行中可以携带此 cursor 字段表示接

着遍历本数据流此 cursor字段标识上次取出数据点后下一个数据点的位置

435 二进制数据

4351 新增

将二进制数据将作为数据点保存到设备下的某个数据流中设备云返回该二

进制数据的索引号

表4-19 新增二进制数据

HTTP方法 POST

URL apihecloudscombindata

URL参数 device_id=421590 数据所属设备(必选)

datastream_id=bin 该数据所属已经存在的数据流(必选)

HTTP头部 api-key xxxxddddsssaaa masterkey 或者该设备的设备 key

HTTP 内 容

(示例)

普通二进制数据文件图像等

(最大限制为 800上传时间间隔需大于 1ms)

HTTP响应响

应消息内容

(示例)

errno 0

error succ

data

index3491506_1475204886914_bin 二进制数据索引号

4352 查询

表4-20 查询二进制数据

HTTP方法 GET

URL apihecloudscombindataindex

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

普通二进制数据文件图像等二进制形式数据

436 触发器

4361 新增

表4-21 新增触发器

HTTP方法 POST

中移物联网有限公司 OneNET 开发文档中心

URL apihecloudscomtriggers

HTTP头部 api-key xxxxddddsssaaa 必须为 masterkey

HTTP内容

(示例)

titlewen du jian kong 设备名(可选)

ds_idgps 数据流名称(id)(可选)

dev_ids[10272345615523] 设备 ID(可选)

ds_uuids[ 数据流 uuid(可选)

9ad09uac-7446-512f-b07c-90jdnzj8120ad

4599436e-7146-5349-b07c-79fa0919cs62

]

urlxxbbcom

typegt | gt= | lt | lt= | == | inout | in | out |change | frozen |

live

threshold100 阙值根据 type不同见以下说明

1) type 为gt|gt=|lt|lt=|==时threshold必须为数值

2) type为 inout时threshold 设置为lolmt40 uplmt52 表示

数据流的值首次进入或离开闭区间[4052]时触发

3) type为 change时threshold 参数不用传递当上传的值有改变时触发

告警

4) type为 frozen时threshold 为数值指定距离最后一次数据上报多少

秒内未上报数据触发告警同时被监控对象进入 frozen状态

5) type 为 live 时threshold 为数值指定距离最后一次数据上报多少秒

后上报数据触发告警

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

tirgger_id233444 触发器 ID

说明

1触发器的含义是当指定范围内的数据点满足触发条件的要求时会向

url参数指定的地址发送 post请求

2触发器有三种工作触发模式

1)在请求参数中单独指定了 ds_id不包括其他参数那么当前项目下

中移物联网有限公司 OneNET 开发文档中心

所有设备的数据流中数据流名称符合 ds_id 的数据都会进入触发判断逻辑

2)在请求参数中单独指定了 ds_uuids 数组那么只有这些指定的数据

流会进入触发判断逻辑

3)在请求参数中指定了 ds_id 和 dev_ids那么只有这些指定的设备的

数据流会进入触发判断逻辑

4362 更新

表4-22 更新触发器属性

HTTP方法 PUT

URL apihecloudscomtriggerstirgger_id

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP内容

(示例)

titlewen du jian kong

ds_uuids[

9ad09uac-7446-512f-b07c-90jdnzj8120ad

4599436e-7146-5349-b07c-79fa0919cs62

]

urlxxbbcom

typegt | gt= | lt | lt= | == | inout | in | out | exp | change |

frozen | live

threshold100

注若要修改 type需要对应设置 threshold

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

4363 查询单个触发器

表4-23 查询单个触发器

HTTP方法 GET

URL apihecloudscomtriggerstirgger_id

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

idtrigger_id1

中移物联网有限公司 OneNET 开发文档中心

titlewen du jian kong

ds_uuids[

datastream1_uuidrdquo

datastream2_uuidrdquo

datastream3_uuidrdquo

]

urlxxbbcom

typegt|gt=|lt|lt=|==|in|out|exp|change|frozen|live

threshold100

invalidtrue 触发器是否已失效

create_timexx-xx-xx 102222

4364 模糊查询触发器

表4-24 模糊查询触发器

HTTP方法 GET

URL apihecloudscomtriggers

URL 参数

title=name 指定触发器名称

page=1 指定页码可选

per_page=10 指定每页输出个数可选默认 10最多 100

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

total_count600

per_page30

page1

triggers[

idtrigger_id1

titlewen du jian kong

ds_uuids

[datastream1_uuidrdquo datastream2_uuidrdquo]

urlxxbbcom

typegt|gt=|lt|lt=|==|in|out|exp|change|frozen|live

threshold100

invalidtrue 触发器是否已失效

create_timeXXXXXXXX

中移物联网有限公司 OneNET 开发文档中心

]

说明触发器失效是指触发器所依赖的数据流或者设备被删除了此时触发

器永远不会有效触发事件

4365 删除

表4-25 删除触发器

HTTP方法 DELETE

URL apihecloudscomtriggerstirgger_id

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno 0

error succ

4366 触发数据内容

触发数据是指当 OneNET 设备云判断某个触发器的触发条件满足时会通过

POST方式向外抛出的 URL请求在 HTTP的 POST消息体中会携带如下格式的 JSON

字符串

表4-26 触发器内容

数据内容

(示例)

trigger

id1

threshold90

typegt

current_data[

dev_id2656

ds_idgps

ds_uuidFWEF-ZFW-ZFW-ZFWW

at2009-09-07T121602001403Z

value100

dev_id2656

ds_idtemper

中移物联网有限公司 OneNET 开发文档中心

ds_uuidFEWEF-ZFWFWW-WFWW-FWEFFWW

at2009-09-07T121602001403Z

value882

]

437 命令

命令是指应用发送命令数据给 OneNET设备云再由 OneNET设备云转发给终

端设备终端设备收到命令后可以向设备云反馈响应的一种工作机制命令下发

后应用可以通过 API查询命令状态和提取命令的响应数据

命令的执行步骤如下

1应用通过 API 向设备云发送命令数据

2设备云生成该命令的 uuid作为该命令的唯一标识并向应用返回同时向

终端设备转发命令数据

3 终端设备收到命令数据后执行命令数据可以生成响应也可以不响应

4设备云跟踪记录命令的响应如果设备有响应就关联命令 uuid和响应

结果

5应用通过 API 向设备云提取命令执行结果(API 请求中携带命令 uuid 标

识)

特别说明

命令下发到终端设备后如果终端设备 10 秒内未收到响应则此命令的状

态将被设置为超时应用通过 API 查询命令状态时会反馈超时超过 10 秒后

收到的响应会被丢弃

终端设备针对同一条命令回复多条命令响应只有在未超时时间内收到的最

后一条是有效响应前面的响应包将会被覆盖因此终端设备应该对每个命令只

有一个响应包

4371 发送命令

表4-27 发送命令

HTTP方法 POST

URL apihecloudscomcmds

URL 参数 device_id=415120 接收该数据的设备 ID(必选)

中移物联网有限公司 OneNET 开发文档中心

qos=0 | 1 是否需要响应默认为 0

0不需要响应即最多发送一次不关心设备是否响应

1需要响应如果设备收到命令后没有响应则会在下一次设备登陆

时若命令在有效期内(有效期定义参见 timeout参数)则会继续发送

对响应时间无限制多次响应以最后一次为准

本参数仅当 type=0时有效

timeout=300 命令有效时间默认 0

0在线命令若设备在线下发给设备若设备离线直接丢弃

gt0 离线命令若设备在线下发给设备若设备离线在当前时间

加 timeout时间内为有效期有效期内若设备上线则下发给设备单

位秒有效围0~2678400

本参数仅当 type=0时有效

type=0 | 1 默认 00发送 CMD_REQ包1发送 PUSH_DATA包

HTTP头部 api-key xxxxddddsssaaa masterkey或者设备 apikey

HTTP内容 用户自定义数据jsonstring二进制数据(小于 64K)

HTTP响应响

应消息内容

(示例)

errno 0

error succ

data

cmd_uuid2302-312-FWs 命令 id

4372 查询命令状态

表4-28 查询命令状态

HTTP方法 GET

URL apihecloudscomcmdscmd_uuid

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno 0

error succ

data

status1

0设备不在线|Device not online

1命令已创建| Command Created

2命令已发往设备| Command Sent

3命令发往设备失败| Send Command Failed

4设备正常响应| Command Response Received

5命令执行超时| Command Response Timeout

6设备响应消息过长 | Command Response Too Large

descldquosendingrdquo

中移物联网有限公司 OneNET 开发文档中心

4373 查询命令响应

表4-29 查询命令响应

HTTP方法 GET

URL apihecloudscomcmdscmd_uuidresp

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP 响应响

应消息内容

用户设备返回的响应内容

4374 查询设备历史命令

表4-30 查询设备历史命令

HTTP方法 GET

URL apihecloudscomcmdshistoryltdevice_idgtltdevice_idgt

URL 参数

start=2015-01-10T080035 查询的开始时间(可选)

end=2015-01-10T080535 查询的结束时间(可选)

page=1 指定页码最大页数为 10000(可选)

per_page=30 指定每页输出设备个数默认 30最多 100(可选)

HTTP头部 api-key xxxxddddsssaaa

HTTP响应响

应消息内容

errno 0

error succ

data

page 1当前页码

per_page 10当前每页总数

total_count 100

items [

cmd_uuid 2302-312-FWs

device_id 2设备 ID

expire_time 2016-07-05 000000过期时间

status 0命令状态

send_time 2016-07-05 000000发送时间

confirm_time 2016-07-05 000000响应时间

confirm_body 2463726571007b202274797022 响应内容

16进制字符

body 2463726571007b202274797022请求内容16进制字符

hellip

中移物联网有限公司 OneNET 开发文档中心

hellip

]

438 视频能力

4381 获取播放地址

表4-31 获取播放地址

HTTP方法 GET

URL apihecloudscomipcrtmp_address

URL 参数

device_id= 接收该数据的设备 ID(必填)

channel_id = 对应数据流名称中的 channelnum

protocol_type = 播放协议类型 0rtmp1hls2http-flv

HTTP头部 api-key xxxxddddsssaaa masterkey或者设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

errorrdquosuccrdquo

ldquodatardquo

addripport

accessTokenldquo字符串rdquo

439 APIKEY

4391 新增

表4-32 新增 APIKEY

HTTP方法 POST

URL apihecloudscomkeys

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP内容

(示例)

title sharing key key 的命名

permissions [

resources [ 被授权的资源

中移物联网有限公司 OneNET 开发文档中心

dev_id 424 被授权的设备 id

dev_id 425 被授权的设备 id

hellip

hellip

]

access_methods [ 被授权的命令

get

put

post

]

]

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data key2302-312-FWs key_string

说明授权命令是可选的另外被授权的命令也可以是 getputpost 的

一个或几个如只授权 get和 put命令

access_methods [getput]

4392 更新

表4-33 更新 APIKEY

HTTP方法 PUT

URL apihecloudscomkeyskey_string

HTTP头部 api-key xxxxddddsssaaa masterkey(注只能为 master-key)

HTTP内容

(示例)

title sharing key key 的命名

permissions [

resources [ 被授权的资源

dev_id 424 被授权的设备 id

ds_idfan1 数据流 id可选

中移物联网有限公司 OneNET 开发文档中心

dev_id 425 被授权的设备 id

ds_idfan1 数据流 id可选

hellip

hellip

]

access_methods [ 被授权的命令可选

get

put

post

]

]

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

说明

1对于 masterkey 不允许更新操作masterkey 默认具有最大权限可以访

问该用户名下所有设备所有数据

可以进行 POSTGETPUTDELETE操作如果更新 master key 系统会返回

失败

2授权命令是可选的另外被授权的命令也可以是 getputpost 的一个

或几个如只授权 get和 put命令

access_methods [getput]

3API key 更新是覆盖操作会将原来存在的授权资源和授权命令覆盖不

会保留原来的授权资源和授权命令

4393 查看

中移物联网有限公司 OneNET 开发文档中心

表4-34 查看 APIKEY

HTTP方法 GET

URL httpapihecloudscomkeys

URL 参数

key = FWJPO-FZFHW-FFEWB可选只查看该 key相关信息

page = 1 指定页码 可选

per_page = 10 指定每页输出个数可选默认 10最多 100

device_id = xxbbcc可选只查看与该设备相关的非 master-key

HTTP头部 api-key xxxxddddsssaaa masterkey(注只能为 master-key)

HTTP响应响

应消息内容

(示例)

errno 0

data

per_page 30

total_count 2

keys [

create_time 2015-11-04 142552

title Auto-generated-master-key

key 03GeDLYk0WNk1V338g7yndKZYkQA

create_time 2015-12-03 100041

permissions [

resources [

dev_id 564280

]

]

title 设备 1测试 Key

key vuHebEWefiU2Ueo5ouoCc1CUsYQ=

]

page 1

error succ

中移物联网有限公司 OneNET 开发文档中心

4394 删除

表4-35 删除 APIKEY

HTTP方法 DELETE

URL httpapihecloudscomkeyskey_string

HTTP头部 api-key xxxxddddsssaaa masterkey(注只能为 master-key)

HTTP 响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

4310 消息订阅

43101 按 Topic 发送命令

表4-36 按 Topic 发送命令

HTTP方法 POST

URL apihecloudscommqtt

URL参数 topic=xxx 设备订阅的主题(必选)

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP 内 容

(示例)

HTTP响应响

应消息内容

(示例)

errno0

errorldquosuccrdquo

data

total_count1

per_page30

page1

devices [123123433333]

43102 查询订阅指定 Topic设备的列表

表4-37 查询订阅制定 Topic设备的列表

HTTP方法 GET

URL apihecloudscommqtttopic_device

URL 参数

topic=xxx 设备订阅的主题(必选)

page=1 当前页码 必填大于等于 1

per_page=10 每页 必填范围 1-1000

中移物联网有限公司 OneNET 开发文档中心

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP内容

(示例)

HTTP响应响

应消息内容

(示例)

errno0

errorldquosuccrdquo

data

total_count1

per_page30

page1

devices [123123433333]

43103 查询设备订阅的 Topic列表

表4-38 查询设备订阅的 Topic列表

HTTP方法 GET

URL apihecloudscommqttdevice_topicdevice_id

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno0

errorldquosuccrdquo

data

[topic_name1 topic_name2 topic_name3]

43104 删除产品的 Topic

表4-39 删除产品的 Topic

HTTP方法 DELETE

URL apihecloudscommqtttopic

URL参数 name=xxx topic名(必选)

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno0

errorldquosuccrdquo

中移物联网有限公司 OneNET 开发文档中心

43105 查询产品的 Topic

表4-40 查询产品的 Topic

HTTP方法 GET

URL apihecloudscommqtttopic

URL参数 无

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno0

errorldquosuccrdquo

data

[topic_name1topic_name2topic_name3]

中移物联网有限公司 OneNET 开发文档中心

第五章 接入实例

51 MQTT-device 接入

511 工具下载

为方便开发人员直观感受使用 mqtt 协议进入平台的便利可使用平台提供

的 MQTT 设备模拟器进行接入平台请在首页-gt开发文档-gt资源下载-gt13 调试

工具下载进行下载如下图

图5-1 资源下载

下载地址

httpupfileshecloudscom123ueditor201707125d5bc37eca39c0c5b7a5bcb9

0e451eeerar

中移物联网有限公司 OneNET 开发文档中心

512 界面说明

图5-2 界面说明

513 使用方法

5131 创建产品

如 323 的过程在设备接入协议中选择 MQTT

中移物联网有限公司 OneNET 开发文档中心

图5-3 选择连接协议

5132 创建设备

如 323描述在平台上新建一个设备

5133 建立连接

在产品概况中可以查看产品 ID此信息填入模拟器 ProductID一栏如下图

图5-4 产品ID

在平台上进入设备信息页面可查看设备 ID及鉴权信息(此鉴权信息是新建设备时候填

写的鉴权信息)如下图

中移物联网有限公司 OneNET 开发文档中心

图5-5 设备ID及鉴权信息

相应把设备 ID及鉴权信息填入模拟器之中然后点击连接按钮如果未弹出提示对话

框则表示设备鉴权成功如下图

图5-6 连接成功

中移物联网有限公司 OneNET 开发文档中心

5135订阅与发布

演示本操作需要在 OneNet平台建立两个基于 MQTT协议的设备一个用于消息发布

另一个用于消息订阅

图5-7 设备状态

开启两个模拟器分别模拟以上两个设备然后建立连接

首先使用订阅主题打开第一个模拟器模拟消息订阅者

图5-8 订阅主题

其次发布主题打开第二个模拟器模拟消息发布者

中移物联网有限公司 OneNET 开发文档中心

图5-9 发布主题

经过以上两个操作后查看模拟消息订阅者的模拟器则收到了主题

为rdquotopic_namerdquo的消息如下图

中移物联网有限公司 OneNET 开发文档中心

图5-10 收到的主题

5136接收平台指令

建立连接后模拟器也可接收来自平台的指令具体操作如下

先打开模拟器-gt建立连接-gt选中【[OneNet]平台指令接收】选项栏利用平台下发指

令功能下发如下图平台下发指令

图5-11 平台发送命令

中移物联网有限公司 OneNET 开发文档中心

图5-12 下发指令

填写好将要发送的消息后点击【发送命令】按钮则模拟器成功接收到来自平台的

数据如下图模拟器截图

图5-13 模拟器收到的指令

5137上传数据点

Mqtt支持 Json 数据格式上报数据现根据 Json几种格式举一些例来演示怎么利用

模拟器上传数据

1)使用 Json数据 Type1上传 Json数据

datastreams[idtemperaturedatapoints[value255]]

中移物联网有限公司 OneNET 开发文档中心

如下模拟器上传数据界面

图5-14 Type1数据格式

则在平台数据展示中则可看到上传的数据点

图5-15 收到数据展示

2)使用 Json数据 Type3示例 Json数据为

temp32humi98

模拟器发送数据截图

中移物联网有限公司 OneNET 开发文档中心

图5-16 Type3数据格式

平台数据展示截图

图5-17 数据展示

3)使用 Json数据 Type4示例 Json数据为

temperature233pm2589

模拟器上传数据截图

中移物联网有限公司 OneNET 开发文档中心

图5-18 Type5数据格式

平台接收数据展示截图

图5-19 数据展示

52 基于麒麟开发板的 MQTT 接入实例

OneNet 平台为使用户能快速接入发布麒麟座开发板官网提交您的创意免

费申请开发板下面利用麒麟座开发板 V31 演示开发板采集温湿度使用 MQTT发

送到平台的接入流程

开发板申请链接httpsopeniot10086cneventdetail185html

521 搭建开发环境

OneNET 平台提供的麒麟座开发板是基予 STM32 单片机开发的一块功能应用

板开发板包含 MCU温湿度传感器GSM 模块WIFI 模块电源模块键盘

中移物联网有限公司 OneNET 开发文档中心

LED以及 lcd显示接口等满足用户对平台接入的基本需求能快速接入到平台

资料包配备完整工程代码方便工程移植等使用

目前 STM32 开发常用的 IDE 有 IARMDK 等我挑选 MDK 作为开发工具打

开工具包先安装 MDK511A安装完毕后再安装 MDKCM511A开发板所有资料软件

工具包下载案例包

案例包下载链接

httpspanbaiducoms1UB1qZGrVuovSVdbqqXP0Lglistpath=2F

图5-20 MDK包

安装完毕并安装 license详细步骤不做演示

中移物联网有限公司 OneNET 开发文档中心

522 连接硬件准备

5221 开发板接线

图5-21 开发板接线图

电源DC-5V

运行信息USART1-MicroUSB 线

软件下载ST-Link

中移物联网有限公司 OneNET 开发文档中心

5222 ESP8266跳线帽连接

图5-22 ESP8266跳线帽连接

中移物联网有限公司 OneNET 开发文档中心

5223 M6312跳线帽连接

图5-23 M6312跳线帽连接

523 工程实例

例程使用最简单易懂的方式编写着重让大家明白接入流程和协议

10~12 协议专属例程是展示该协议下的专用功能比如 EDP 的 PushData

中移物联网有限公司 OneNET 开发文档中心

HTTP 注册新设备MQTT 的订阅发布等具体使用方法查看该目录下的《使用

说明》

图5-24 工程文件

524 开发工程文件

中移物联网有限公司 OneNET 开发文档中心

图5-25 工程文件

图5-26 工程结构

默认已创建好产品以及设备打开文件工程 onenetc 和 esp8266c 修改例

程的 WIFI 信息和平台信息

分别在 esp8266c 的 36和 onenetc的 414345行

图5-27 更改项

525 编译下载

开发版接串口会有相应状态显示平台设备显示在线状态绿色为连接成功

设备在线灰色表示未连接并在数据展示中显示对应主题的所有数据

中移物联网有限公司 OneNET 开发文档中心

图5-28 连接成功

图5-29 收到数据

其他实例详情请见httpsopeniot10086cnbbsthread-1266-1-1html

中移物联网有限公司 OneNET 开发文档中心

第六章 MQTT 协议详解

61 设备与平台通信协议包格式

协议就是通信双方的一个约定即表示第 1字节传输的什么第 2字节

传输的什么helliphellip在 MQTT协议中一个 MQTT 数据包由固定头(Fixed

header) 可变头(Variable header) 消息体(payload)三部分构成

MQTT 数据包结构固定头部+可变头部+消息体

固定头(Fixed header)存在于所有 MQTT数据包中表示数据包类型及

数据包的分组类标识固定头格式如下

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 - 5 Remaining Length(该字段占用 1-4个字节)

目前平台版本支持的 Packet Type如下

名字 值 流向 描述

CONNECT 1 C-gtS 客户端请求与服务端建立连接

CONNACK 2 S-gtC 服务端确认连接建立

PUBLISH 3 CS 发布消息

PUBACK 4 CS 收到发布消息确认

PUBREC 5 CS 发布消息收到

PUBREL 6 CS 发布消息释放

PUBCOMP 7 CS 发布消息完成

SUBSCRIBE 8 C-gtS 订阅请求

SUBACK 9 S-gtC 订阅确认

UNSUBSCRIBE 10 C-gtS 取消订阅

UNSUBACK 11 S-gtC 取消订阅确认

PING 12 C-gtS 客户端发送 PING(连接保活)命令

PINGRSP 13 S-gtC PING命令回复

DISCONNECT 14 C-gtS 断开连接

可变头(Variable header)存在于部分 MQTT 数据包中数据包类型决定

了可变头是否存在及其具体内容

消息体(Payload)存在于部分 MQTT 数据包中表示客户端收到的具体内

中移物联网有限公司 OneNET 开发文档中心

不同类型数据包中可变头和消息体包含关系如下

消息类型 Variabl

e

Header

Payloa

d

CONNECT 有 有

CONNACK 有 有

PUBLISH 有 有

PUBACK 有 无

PUBREC 有 无

PUBREL 有 无

PUBCOMP 有 无

SUBSCRIBE 有 有

SUBACK 有 有

UNSUBSCRIBE 有 有

UNSUBACK 有 无

PING 无 无

PINGRSP 无 无

DISCONNECT 无 无

62 平台支持数据包类型

621 CONNECT(客户端请求与服务端建立连接 client -gt server)

固定头(Fixed Header)

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 - 5 Remaining Length(该字段占用 1-4个字节)

MQTT Packet Type 值为 0001表示该数据包为请求连接数据包

Remaining Length 剩余长度占 1-4字节

可变头(Variable Header)

包含内容如下

Description 7 6 5 4 3 2 1 0

byte

1-2

ProtocolNa

me Length

0 0 0 0 0 0 0 0

0 0 0 0 0 1 0 0

byte

3

lsquoMrsquo 0 1 0 0 1 1 0 1

byte

4

lsquoQrsquo 0 1 0 1 0 0 0 1

中移物联网有限公司 OneNET 开发文档中心

byte

5

lsquoTrsquo 0 1 0 1 0 1 0 0

byte

6

lsquoTrsquo 0 1 0 1 0 1 0 0

Byte

7

Protocol

Level

0 0 0 0 0 0 0 1

Byte

8

Connect

Flag

Use

r

flag

Passwo

rd

flag

WillReta

in

Flag

WillQo

s Flag

WillFl

ag

CleanSessi

on

Flag

Reser

ve

Byte

9-10

KeepAlive

(1) 版本

Protocol Level 必须设置为 4平台只支持协议版本 v 311不支持更老

的版本使用第三方客户端时需要注意选择正确的版本

(2) user flag 与 password flag

平台不允许匿名登陆因此这两个标志位在连接时必须设置为 1否则认为

协议错误平台将会断开连接

(3) Will flag 与 WillretainflagWillQosFlag

Will flag 为 0时WillQosFlag 和 WillRetainFlag 必须为 0Will Flag

为 1时WillQosFlag 只能为 012

1当该设备下一次正常上线后服务器会清除之前的 will 消息(包括

retain 消息)

2如果设备上线时设置了 Will Topic 和 msg且将 WillRetainFlag 设

置为 1只有设备异常断开后服务器才会将该 Will msg 分发给新的 Will

Topic 的订阅者且 Qos 级别以订阅的 Request qos 级别为准

3如果设备上线时设置了 Will Topic 和 msg且将 WillRetainFlag 设

置为 0服务器不会存储该消息当设备异常断开后会将该 Will msg 以设

备设置的 WillQosFlag的 Qos级别进行分发

(4) CleanSessionFlag

若客户端将 clean session 标志位设置为 0当其断开后平台将会保存

sessionsession 需保持的内容包含

客户端订阅的 topic列表

中移物联网有限公司 OneNET 开发文档中心

还未完成确认的 Qos1Qos2级别的 publish消息

客户端保存 session 的内容包含

已经发送到服务端的但还没有收到确认的 Qos1Qos2消息列表

待发送的 Qos0列表

若客户端将 clean session 标志位设置为 1当其断开后平台会清除设备

的订阅列表及未完成确认的 Qos1Qos2 的 publish消息

(5) Reserve

保留位置 0

(6) KeepAlive 保活时间

每个客户端可自定义设置连接保持时间最短 120秒最长 65535 秒

消息体(Payload) Description 是否必须存在 格式

Field1 Client

Identifier

是 2字节字串长度 + utf8字

Field2 UserName 是 2字节字串长度 + utf8字

Field3 UserPassword 是 2字节字串长度 + utf8字

目前平台支持的方式为以后两种

方式 1设备 ID项目 ID鉴权信息(auth_info)

字段设置 消息示例

client_id设置为平台创建设备时的

设备 id

username设置为ldquo项目 IDrdquo

password设置为ldquo鉴权信息

(auth_info)rdquo

client_id=rdquo123rdquo

username=rdquo433223rdquo

password=rdquo注册的鉴权信息rdquo

各字段说明如下

鉴权信息(auth_info)在平台申请设备时填写设备的 auth_info 属性(数

字+字母的字符串)该属性需要产品内具备唯一性(可使用设备出厂唯一编号)

方式 2设备 ID + APIKey(项目 ID也需要填写)

字段设置 消息示例

client_id设置为平台创建设备时的

设备 ID

username设置为ldquo项目 IDrdquo

client_id=rdquo123rdquo

username=rdquo433223rdquo

password=Api Key

中移物联网有限公司 OneNET 开发文档中心

password设置为ldquoAPI鉴权信息

(auth_info)rdquo

项目 ID在平台添加项目时平台生成的 ID

APIKey在平台上创建产品时生成的 APIKey

连接包实例如下

Send one mqtt packet

FixHeader

PacketTag = 16

PacketType = 1

RemainLength = 34

VariableHeaderConnect

protocol_name_len_= 4

protocol_name_= MQTT

protocol_level_= 4

connect_flag_= 192

keep_alive_= 12000

client_id_len_= 8

client_id_= 34764813

usr_name_len_= 6

usr_name_= 150295

password_len_= 4

password_= push

MQTT0x10 0x22 0x00 0x04 0x4D 0x51 0x54 0x54 0x04 0xC0 0x2E 0xE0 0x00 0x08 0x33

0x34 0x37 0x36 0x34 0x38 0x31 0x33 0x00 0x06 0x31 0x35 0x30 0x32 0x39 0x35 0x00

0x04 0x70 0x75 0x73 0x68

Send One Packet Succ

中移物联网有限公司 OneNET 开发文档中心

622 CONNACK (服务端确认连接建立)

Fixed Header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type = 2 0 0 0 0

byte2 - 5 Remaining Length(该字段占用 1-4个字节)

Variable Header

Description 7 6 5 4 3 2 1 0

byte 1 Acknowledge Flags 0 0 0 0 0 0 0 Sp

byte 2 Return Code x x x x x x x x

Sp Session Present Flagsession信息在服务器已保持置 1未保存置

0

返回码说明

返回码 描述

0 成功

1 协议版本错误

2 非法的 clientid

3 服务不可用

4 用户名或密码错误

中移物联网有限公司 OneNET 开发文档中心

5 非法链接(比如 token非法)

失败

如果 connect包不符合协议内容约束则直接断掉连接而不需要发送 conn

ack包

如果鉴权或授权失败回复一个带非 0错误码的 connack包

成功

必须断掉重复的 clientid

执行 cleansession 对应的操作

必须回复一个 connack回复码为 0

开始消息传递并加入 keepalive的监视

PS客户端需要等到服务端的 connack报文才能发送后续的数据包

623 PUBLISH(发布消息 client -gt server)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type DUP f

lag

QoS Level RETAI

N

byte2 - 5 Remaining Length(该字段占用 1-4 个字节)

DUP

QoS2Qos1如果为 0则表示是第一次发送该包如果为 1则表示

为重复发送的包

Qos0DUP 必须为 0

中移物联网有限公司 OneNET 开发文档中心

QoS 指定了该 publish包的 Qos 等级如下

Qos 值 Bit2 Bit1 描述

0 0 0 最多发送一次

1 0 1 至少发送一次

2 1 0 只发送一次

RETAIN 保留标志位如果为 1服务器存储最新一条 RETAIN消息以便

分发给新的订阅者如果 RETAIN为 1Payload 为空服务器分发该消息后会

清空该 topic 下的 RETAIN 消息

PS该版本实现了 Qos0Qos1Qos2

Variable Header

Description 格式 是否必须

Field1 TopicName 2 字节字串长度 + utf8字

Field2 PacketIdent

ifier

2 字节 QoS0否QoS1Qos2是

Payload

内容根据不同业务自定义

624 PUBLISH(发布消息 server -gt client)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type DUP f

lag

Qos Level RETAIN

byte2 - 5 Remaining Length(该字段占用 1-4个字节)

DUP

Qos2QoS1如果为 0则表示是第一次发送该包如果为 1则表示

为重复发送的包

中移物联网有限公司 OneNET 开发文档中心

Qos0DUP 必须为 0

QOS 指定了该 publish包的 qos等级如下

Qos 值 Bit2 Bit1 描述

0 0 0 最多发送一次

1 0 1 至少发送一次

2 1 0 只发送一次

RETAIN如果服务器分发的消息是 RETAIN 消息则将该标志位置 1否则置

0

PS该版本实现 Qos0Qos1Qos2其中服务器分发消息的 Qos级别是以 Clien

t-gtServer 发送的 publish 包的 qos 等级为准非订阅的 topic 的 Qos 等级R

etain 消息是以订阅的 Request Qos 级别进行推送

VariableHeader

Description 格式

Field1 TopicName 2 字节字串长度 + utf8字

Payload

内容根据不同业务自定义

625 PUBACK(收到发布消息确认)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

中移物联网有限公司 OneNET 开发文档中心

626 PUBREC(发布消息收到)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

627 PUBREL(发布消息释放)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

628 PUBCOMP(发布消息完成)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

中移物联网有限公司 OneNET 开发文档中心

byte 1~

2

PacketIdentifier PacketIdentifier

629 SUBSCRIBE(订阅请求)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

Payload

Description 格式

Byte1~

n

TopicName 2 字节字串长度 + utf8字

Byten+

1

Request Qos 服务质量要求(只能为 0

12)

topic 说明

可以包含一个或多个 topic

topic必须是数字英文反斜杠()的组合目前不支持通配符

每个客户端最多订阅 100个 topic

以下 topic 被系统保留使用(客户端不能订阅)

类型 说明

$开头 平台保留

中移物联网有限公司 OneNET 开发文档中心

6210 SUBACK(订阅确认)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

Payload

Description 7 6 5 4 3 2 1 0

byte 1 retcode

返回码说明

返回码 描述

0x00 成功(granted qos = 0)

0x01 成功(granted qos = 1)

0x02 成功(granted qos = 2)

0x80 失败

6211 UNSUBSCRIBE(取消订阅)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

中移物联网有限公司 OneNET 开发文档中心

Payload

Description 格式

Byte1~

n

TopicName 2 字节字串长度 + utf8字

可以包含一个或多个 topic

6212 UNSUBACK(取消订阅确认)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

6213 PING(客户端发送 PING(连接保活)命令)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

NULL NULL

注PING命令无 VariableHeader

中移物联网有限公司 OneNET 开发文档中心

6214 PINGRSP(PING命令回复)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

NULL NULL

注PINGRSP无 VariableHeader

6215 DISCONNECT(断开连接)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

NULL NULL

注DISCONNECT无 VariableHeader

中移物联网有限公司 OneNET 开发文档中心

第七章 设备开发流程

71 连接鉴权

Device Onenet

(Connect)鉴权请求

(ConnAck)鉴权结果

加载session

鉴权

图7-1 连接鉴权

设备向平台发起 connect 请求connect 中携带鉴权信息具体

参见(报文格式参考 621)

平台拿到鉴权信息进行鉴权

鉴权通过后如果 cleansession=0 平台将会加载保存的设备

的一些信息如订阅列表(621中描述)

如果 cleansession=1 设备没有保存信息在平台则不加载设

备相关信息

返回鉴权结果 ConnAck(报文格式参考 621)

72 消息发布

721 数据点上报

设备使用 publish 报文来上传数据点 报文格式如下

中移物联网有限公司 OneNET 开发文档中心

VariableHeader

Field 名称 说明 格式

Field1 TopicName=rdquo$dprdquo $dp 为系统上传数据点

的指令

2字节字串长度 + utf8

字串

Payload

Payload包含真正的数据点内容支持的格式如下

Byte 1 Bit0-5数据类型指示目前支持

Type = 1

Type = 2

Type = 3

Type = 4

Type = 5

Type = 6

Type = 7

Bit6-7 flags 根据具体类型不同意义

Type6Type7这两种需要填写时间戳的数据类型

如果填入了时间戳则须将 bit7 置 1否则置 0(即

忽略数据类型说明中的日期时间相关字段)

0 0 0 0 0 0 0 1

Byte 2 根据数据类型指示不同

Byte n

中移物联网有限公司 OneNET 开发文档中心

数据类型 1(type == 1)格式说明

数据类型 2(type == 2)格式说明

Byte 1 数据点类型值1 1JSON 格式 1 字符串 0 0 0 0 0 0 0 1

Byte 2 指示后面 json 字符串长度

固定两字节长度高位字节值为 0x00

Byte 3 固定两字节长度低位字节值为 0x41

Byte 4

ldquodatastreamsrdquo[ 可以同时传递多个数据流

ldquoidrdquordquotemperaturerdquo

ldquodatapointsrdquo[数据流可以有多个数据点

rdquoatrdquordquo2013-04-22 222222rdquo可选

rdquovaluerdquo 365用户自定义

]

ldquoidrdquordquolocationrdquo

ldquodatapointsrdquo[hellip]

hellip

]

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

Byte n

Byte 1 数据点类型指示type=2 二进制数据 0 0 0 0 0 0 1 0

Byte 2 指示后面 json 字符串长度

固定两字节长度-高位字节值为 0x00

Byte 3 固定两字节长度-低位字节值为 0x10

Byte 4

rdquods_idrdquordquoimagerdquo 创建数据流时定义的 ID(必填)

ldquoatrdquordquo2014-10-25 122323rdquo 时间(可选)

rdquodescrdquo字符串或 json 对象对该数据的描述(可选)

hellip

Byte n

Byte n+1 指示后面二进制数据长度

固定四字节长度-第 1 字节(最高)值为 0x00

Byte n+1 固定四字节长度-第 2 字节值为 0x00

Byte n+2 固定四字节长度-第 3 字节值为 0x01

Byte n+3 固定四字节长度-第 4 字节(最低)值为 0x00

Byte n+4 该域目前最大支持 3M

中移物联网有限公司 OneNET 开发文档中心

数据类型 3(type == 3)格式说明

数据类型 4(type ==4)格式说明

hellip 本例中的该域 256 字节数据

Byte n+260

Byte 1 数据点类型指示type=3 JSON 格式 2 字符串 0 0 0 0 0 0 1 1

Byte 2 指示后面字符串长度

固定两字节长度高位字节值为 0x00

Byte 3 固定两字节长度低位字节值为 0x46

Byte 4 通用格式

ldquodatastream_id1rdquordquovalue1rdquo

ldquodatastream_id2rdquordquovalue2rdquo

hellip

示例

ldquotemperaturerdquo225rdquohumidityrdquordquo952rdquo

hellip

hellip

hellip

hellip

Byte n

Byte 1 数据点类型指示type=4 JSON 格式 3 字符串 0 0 0 0 0 1 0 0

Byte 2 指示后面字符串长度

固定两字节长度高位字节值为 0x00

Byte 3 固定两字节长度低位字节值为 0x46

Byte 4 通用格式

ldquodatastream_id1rdquoldquodatetime1rdquordquovalue1rdquo

ldquodatastream_id2rdquo ldquodatetime2rdquordquovalue2rdquo

hellip

示例

ldquotemperaturerdquoldquo2015-03-22 223112rdquo225

hellip

hellip

hellip

hellip

Byte n

中移物联网有限公司 OneNET 开发文档中心

数据类型 5(type == 5)格式说明

数据类型 6(type == 6)格式说明

Byte 1 数据点类型指示type=5 自定义分隔符 0 0 0 0 0 1 0 1

Byte 2 指示后面字符串长度

固定两字节长度高位字节值为 0x00

Byte 3 固定两字节长度低位字节值为 0x41

Byte 4 消息中最前面两字节为用户自定义的域中分隔符和域间分隔符

这两个分隔符不能相同比如采用逗号作为域中分隔符分号作

为域间分隔符的格式如下

feild0feild1hellipfeildn

其中每个 field 格式支持 3种

field 格式 1 3 个子字段分别是数据流 ID时间戳数据值

通用格式

Datastream_iddatetimevalue

field 格式 2 2 个子字段分别是数据流 ID 和数据值省略时

间戳通用格式

Datastream_idvalue

field 格式 3 1 个子字段省略了数据 ID 和时间戳只传输数

据值平台将用该域(feild)所在的位置号(从 0 开始)作为数据

流 ID通用格式

value

示例

(1)temperature2015-03-22

223112225102pm258910

(2)temperature2015-03-22

223112225102pm258910

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

Byte n

Byte 1 数据类型指示type=6 带时间自定义分隔符 0 0 0 0 0 1 1 0

Byte 2 年(后两位)例如 2016 年则该字节为 16 0 0 0 1 0 0 0 0

Byte 3 月(1-12)

Byte 4 日(1-31)

Byte 5 小时(0~23)

Byte 6 分钟(0~59)

Byte 7 秒(0~59)

Byte 8 指示后面字符串长度

固定两字节长度高位字节值为 0x00

Byte 9 固定两字节长度低位字节值为 0x41

Byte 10 消息中最前面两字节为用户自定义的域中分隔符和域间分隔符

具体格式见 type=5 说明若相关域中没有时间戳则采用本类

hellip

中移物联网有限公司 OneNET 开发文档中心

数据类型 7(type == 7)格式说明(每次最多 500个数据流的浮点数)

hellip 型的默认时间戳当作数据点的时间来存储

Byte n

Byte 1 Bit0-5 数据类型指示type=7 可离散浮点数数据流

Bit6保留置 0

Bit7 时间指示位1携带 6字节时间

1 0 0 0 0 1 1 1

Byte 2 年(后两位)例如 2016 年则该字节为 16 0 0 0 1 0 0 0 0

Byte 3 月(1-12)

Byte 4 日(1-31)

Byte 5 小时(0~23)

Byte 6 分钟(0~59)

Byte7 秒(0~59)

Byte 8 数据流名称(取值范围 1-65535)

高位字节值为 0x00

Byte 9 低位字节值为 0x01

Byte10 数据流个数(取值范围 1-500)

高位字节值为 0x00

Byte11 低位字节值为 0x01

Byte 10 4 字节 float 类型低位在前高位在后

Byte 11

Byte 12

Byte 13

Byte n 数据流名称(取值范围 1-65535)

高位字节值为 0x24

Byte n+1 低位字节值为 0x37

Byte n+2 数据流个数(取值范围 1-500)

高位字节值为 0x01

Byte n+3 低位字节值为 0x00

Byte n+2 4 字节 float 类型低位在前高位在后

Byte n+4

Byte n+5

Byte n+6

中移物联网有限公司 OneNET 开发文档中心

7211 Qos0(Client-gtServer)

Device OneNet

Publish $dp(Qos0)

存储

图7-2 QoS连接图

设备发布 Qos0 消息(上报数据点)

平台收到上报数据点后保存起来

7212 Qos1(Client-gtServer)

Device OneNet

Publish $dp(Qos1)

存储

PubAck

图7-3 Qos1连接图

设备发布 Qos1 消息(上报数据点)

中移物联网有限公司 OneNET 开发文档中心

平台收到上报数据点后保存起来

平台给设备回复相应的 PubAck (报文格式参考 625)

7213 Qos2(Client-gtServer)

Device OneNet

Publish $dp(Qos2)

存储

PubRec

PubRel

PubComp

图7-4 Qos2连接图

设备发布 Qos2 消息(上报数据点)

平台收到上报数据点后保存起来

平台给设备回复相应的 PubRec报文

设备需回复平台 PubRel报文如超时不回平台则会断开相应连接

平台给设备回复 PubComp报文

注数据点上报功能不支持 Retain 特性

中移物联网有限公司 OneNET 开发文档中心

722 平台命令(下发amp回复)

7221 命令下发

平台使用 publish 报文来下发平台指令 报文格式如下

FixHeader

参考 623

VariableHeader

Field 名称 说明 格式

Field1 TopicName=rdquo$creqcmduuidrdquo $creq为系统下发

Cmd 的 指 令

cmduuid为该条指

令的 uuid

2字节字串长度 +

utf8字串

Payload

Payload包含真正的指令内容

72211 Qos0(Server-gtClient)

DeviceOneNet

Publish $creq(Qos0)

图7-5 Qos0命令下发

命令下发

平台向设备发送 topic为$creq的消息(该 topic为平台命令)

中移物联网有限公司 OneNET 开发文档中心

设备收到 topic 为$creq 的 topic 时需将其作为平台下发的指令来处

注目前命令下发以 Qos0级别进行推送

7222 命令回复

设备使用 publish 报文来回复平台指令 报文格式如下

FixHeader

参考 623

VariableHeader

Field 名称 说明 格式

Field1 TopicName=rdquo$crspcmduuidrdquo $crsp为系统处理

设备回复 cmd 的

指令cmduuid为

该条指令的 uuid

2字节字串长度 +

utf8字串

Payload

Payload包含真正回复的指令内容

72221 Qos0(Client-gtServer)

DeviceOneNet

Pulish $crsp(Qos0)

图7-6 Qos0下发命令

中移物联网有限公司 OneNET 开发文档中心

72222 Qos1(Clientlt-gt Server)

DeviceOneNet

Pulish $crsp(Qos1)

Puback

图7-7 Qos1下发命令

如果设备回复响应时以 Qos1回复则平台需要给设备回复一个 Puback 报文

72223 Qos2(Clientlt-gt Server)

DeviceOneNet

Pulish $crsp(Qos2)

PubRec

PubRel

PubComp

图7-8 Qos2下发命令

如果设备回复响应时以 Qos2回复则

1平台需回复设备一个 PubRec报文

中移物联网有限公司 OneNET 开发文档中心

2设备在收到 PubRec后需向平台回复 PubRel报文

3平台收到 PubRel 报文后向设备回复 PubComp报文

73 创建 Topic

Device OneNet

HTTP 请求

HTTP 响应

图7-9 创建Topic

设备通过发送 HTTP请求进行 topic 的创建操作

平台收到请求后创建 topic 并返回结果

请求及响应定义如下

HTTP方法 POST

URL httpapihecloudscommqtttopic

HTTP头部 api-keyxxxx-ffff-zzzzz必须 master key

URL参数

HTTP body

内容

ldquonamerdquordquoxxxxxxrdquo topic 名字只能由英文下划线反斜杠组成最长

1024个字符同一产品下 topic name 不重复

成功返回

errno 0

errorldquosuccrdquo

说明 每个产品最多 100个 topic

中移物联网有限公司 OneNET 开发文档中心

74 订阅

Device OneNet

Subscribe

Suback

更新设备订阅列表

图7-10 订阅

设备发起订阅请求(报文格式参考 629)

平台收到请求后更新 topic列表

平台给设备回复 SubAck (报文格式参考 6210)

注subscribe 的 request qos级别可以为 012

75 取消订阅

Device OneNet

UnSubscribe

UnSuback

更新设备订阅列表

图7-11取消订阅

中移物联网有限公司 OneNET 开发文档中心

设备发起取消订阅请求 (报文格式参考 6211)

平台收到请求后更新 topic 列表

平台给设备回复 UnSubAck (报文格式参考 6212)

76 推送设备 Topic

761 Publish 报文推送

Qos0设备使用 Qos 级别为 0的 Publish报文来进行推送

Device OneNet

Publish(Qos0)

Device

以Qos0 Publish到订阅设备

图7-12 Qos0推送

设备发起推送 topic请求(以 Qos0级别)

平台收到请求后将 topic以 Qos0级别推送到相关订阅设备(支持离线设

备推送)

平台不返回 PubAck或 PubRec 等报文

Qos1

设备使用 Qos级别为 1的 publish报文来推送 Topic

中移物联网有限公司 OneNET 开发文档中心

Device OneNet

Publish(Qos1)

PubAck

Device

以Qos1 Publish到订阅设备

设备回复平台 PubAck

图7-13 Qos1发布

设备发起推送 topic请求(以 Qos1级别)

平台收到请求后将 topic以 Qos1级别推送到相关订阅设备(支持离线设

备推送)

平台返回 PubAck 报文

Qos2

设备使用 Qos级别为 2的 publish报文来推送 Topic

中移物联网有限公司 OneNET 开发文档中心

Device OneNet

Publish(Qos2)

PubRec

Device

以Qos2 Publish到订阅设备

PubRec

PubRel

PubComp

PubRel

PubComp

图7-14 Qos2推送

设备发起推送 topic请求(以 Qos2级别)

平台收到请求后回复 PubRec报文

设备收到 PubRec后需回复 PubRel报文 (如超时不回复平台会断开与设

备的连接)

平台收到 PubRel 报文后回复 PubComp 给设备

平台在回复 PubComp 后会以 Qos2 级别推送到相关订阅设备(支持离线设

备推送)

设备需回复 PubRec报文 (如超时不回复平台会断开与设备的连接)

平台发送 PubRel 报文给设备

设备需回复 PubComp(发布完成)

Publish报文的格式如下

FixHeader

参考 623

中移物联网有限公司 OneNET 开发文档中心

VariableHeader

Field 名称 说明 格式

Field1 TopicName 填写设备订阅的 topic 2字节字串长度 + utf8

字串

Payload

Payload为设备自定义内容

762 HTTP 请求推送

Device OneNet

HTTP 请求

HTTP 响应

Device

Publish到订阅设备

图7-15 HTTP请求

设备以 HTTP 的方式发起推送 topic 请求

平台收到请求后将 topic推送到相关订阅设备 (目前只支持在线推送)

平台返回推送结果

请求及响应定义如下 HTTP方法 POST

URL httpapihecloudscommqtt

HTTP头部 api-keyxxxx-ffff-zzzzz必须 master key

URL参数 topic=ldquoXXXXXXrdquo必选在发送 mqtt协议的 topic 必填

HTTP body内容 用户自定义 Json 或二进制数据(小于 64K)

成功返回

errno 0

errorldquosuccrdquo

中移物联网有限公司 OneNET 开发文档中心

77 离线 Topic

推送 Topic只针对在线设备进行 topic 消息的推送离线设备不会收到订阅

的 topic 的消息离线 Topic则会将该消息推送给在线以及离线设备

1 如果设备在上线时设置了 clean session flag服务端会删除其订阅的

topic及相关的离线 topic消息

2 如果设备没有设置 clean session flag如果有与该设备相关的离线

topic消息则在鉴权成功后将离线消息推送给设备

3 遗嘱消息(will msg)只会推送给订阅了该 will topic的在线的设备离

线设备不会收到

4 离线消息的有效期默认为 2 天(暂不支持用户设定有效期)服务器只会

推送在 2天内的最近 10 条消息

78 数据点订阅

数据点订阅同一产品下的设备可以订阅其他设备的数据点订阅的 topic

格式为deviceid数据流名称即

被关注的设备在上传了该数据流名称的数据点后订阅了该 topic的其他设备都

会收到上传的数据点

1 AB设备的 deviceid分别为 92779278

2 A 设备订阅了名为92789527 的 topic(9278 为设备 B 的 id9527 为 B

设备上传的数据流名称)

3 B 设备上传了名为 9527的数据流(数据点为 11 1578hellip)

4 A 设备会收到多条(取决于设备 B 上传的数据点的个数)推送的 topic 名

为92789527 的 publish消息消息的 payload中则包含设备 B 上传的数据

注目前支持订阅的数据点的类型为 Type1~Type7(详见 721节)

中移物联网有限公司 OneNET 开发文档中心

第八章 常见问题 FAQ

用户在基于 OneNET 平台进行产品开发的过程中可能会遇到各种各样的问

题开发过程中遇到的问题一方面可以参考 OneNET 文档中心的文档或者本文

档前几个章节的内容另一方面用户可以参考本章节总结的常见问题希望这些

文档能对用户在开发过程中有一定的指导和帮助

本章将分三个小节对用户在开发产品过程中可能遇到的问题进行梳理分别

为终端设备接入 OneNET平台的常见问题API调用的常见问题和 OneNET平台

的能力

81 终端设备接入 OneNET 平台的常见问题

序号 问题描述 原因分析 解决方法

1

2

3

4

5

6

7

82 API 调用的常见问题

序号 问题描述 原因分析 解决方法

1

2

3

4

5

6

7

8

9

中移物联网有限公司 OneNET 开发文档中心

83 使用 OneNET平台遇到的常见问题

序号 问题描述 原因分析 解决方法

1

2

3

4

5

6

7

8

Page 12: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com

中移物联网有限公司 OneNET 开发文档中心

32 终端设备接入 OneNET 平台步骤

321 OneNET 平台创建产品及设备

3211 注册用户账号

进入 OneNET官网(httpsopeniot10086cn)点击首页右上角的ldquo注

册rdquo按钮注册用户账号

OneNET 支持ldquo个人用户rdquo和ldquo企业用户rdquo两种注册方式你可以根据您的

实际情况选择注册方式

以个人用户注册为例用户需在对应选项依次填写用户名用户密码所在

地手机号码图片验证码以及手机验证码并完成注册注册页面如图 3-2所

示注册完成后回到主页点击ldquo登录rdquo即可进入 OneNET 的官方主页并由

此进入到你的ldquo开发者中心rdquo

如果客户产品后续需要进行规模化量产建议以企业的名义进行注册注册

时注意注册信息的准确填写另外个人版和企业版在功能上无差异

图3-2 用户账号注册页面

3212 创建产品和设备

在进入到你的ldquo开发者中心rdquo后点击右上角的 ldquo创建产品rdquo在弹出页面中

按照提示填写产品的基本信息进行产品创建在创建过程中请您按照提示尽

可能完整全面地填写相应内容这样更方便您后期对产品进行管理

创建产品页面如图 3-3 和图 3-4其中设备接入方式选择ldquo公开协议rdquo联网

方式选择跟据实际设备进行选择设备接入协议选择ldquoMQTTrdquo

中移物联网有限公司 OneNET 开发文档中心

产品创建完成后页面弹出ldquo创建产品成功rdquo如图 3-5所示点击ldquo立即

添加设备rdquo显示如图 3-6所示界面依次填写ldquo设备名称rdquo鉴权信息设备

名称自定义鉴权信息用于平台对终端设备鉴权每台设备具有唯一性建议设

置为产品出厂编号方便管理鉴权信息需写入设备

图3-3 创建产品页面

中移物联网有限公司 OneNET 开发文档中心

图3-4 创建产品页面

图3-5 创建产品成功页面

中移物联网有限公司 OneNET 开发文档中心

图3-6 添加设备页面

322 终端设备软硬件初始化

终端设备在上电以后需要完成设备的软硬件初始化硬件初始化包括各个

硬件模块的上电处理器的寄存器初始化工作模式初始化等等软件初始化包

括基础通信套件初始化应用接口初始化应用程序初始化等等

323 终端创建设备及资源

终端设备创建设备(device_id)配置产品 ID鉴权信息注册码连接

服务器 IP端口号等信息创建成功后与平台建立登陆连接连接成功后即可向

平台上报数据点

324 登录 OneNET平台

终端设备的基础通信套件完成初始化以及设备资源创建完成后可向

OneNET平台发送登陆请求返回登录结果如果参数错误或者登录超时平台会

返回登录失败如果验证通过平台会返回登录成功

若终端设备登录平台成功设备名称左边的圆形图标会由灰色(离线状态)

变成绿色(在线状态)如图 3-7所示

中移物联网有限公司 OneNET 开发文档中心

图3-7 平台侧设备状态显示

325 设备数据点上报

终端设备与平台成功建立连接后设备使用 publish 报文向平台上报数据点

平台收到数据点后保存到对应数据流下方便应用查阅数据点上报格式以及类型详见

721

图3-8 平台侧收到设备数据流显示

326 创建应用

用户可以利用上传的数据创建相关的应用发布直观的展示页面目前在平台应用孵化

器中提供了曲线图柱状图表盘物体位置图片和开关等应用

在产品详情页面点击ldquo应用管理rdquo进入应用管理主界面如下图

中移物联网有限公司 OneNET 开发文档中心

图3-9 应用管理模块

点击ldquo创建应用rdquo输入应用名称点击ldquo创建rdquo如下图

图3-10 新应用创建

保存成功后点击编辑按键进入应用编辑页面如下图

中移物联网有限公司 OneNET 开发文档中心

图3-11 应用编辑入口

图3-12 应用编辑界面

在应用编辑页面中使用左侧的控件进行应用编辑此例中我们选择表盘控件来显示

刚刚上传的数据点击表盘控件如下图所示

中移物联网有限公司 OneNET 开发文档中心

图3-13 表盘控件添加

在右侧的属性中选择设备以及数据源(及刚刚上传的数据流)如下图

图3-14 表盘控件数据流绑定

在确定好数据流之后可以看到表盘回显示成我们添加的数据的值其他的

刷新频率以及表盘显示样式读者可以自行更具需求加以修改

完成应用编辑之后点击右上角保存按钮退出应用编辑

在应用管理页面点击该应用即可查看编辑好的应用页面

中移物联网有限公司 OneNET 开发文档中心

图3-15 保存应用

图3-16 应用查看与分享

该应用可以通过共享ldquo发布链接rdquo的方式将该应用共享给他人

33 设备批量接入

单个设备可以通过平台的开发者中心添加设备的方式进行创建若用户有多

个设备直接与平台 TCP连接的终端通过手动添加需耗费大量时间人力OneNET

中移物联网有限公司 OneNET 开发文档中心

为大批量接入用户提供 3种批量创建设备的方案

331 平台设备批量复制

此种方式为选择某个设备作为复制的模板通过导入 EXCEL的方式进行设备

复制厂商可以在小批量测试时使用该功能

在设备列表中点击查看详情

图3-17 设备批量接入

在设备详情页面点击批量导入设备信息

中移物联网有限公司 OneNET 开发文档中心

图3-18 导入设备信息

点击批量复制

图3-19 批量复制

中移物联网有限公司 OneNET 开发文档中心

目前提供三种批量创建的方式 excel 导入的方式为主要接入方式选择

excel导入点击下载模板

图3-20 快速导入

图3-21 Excel导入

打开下载下来的 excel模板表中的 titledesctags等均为将要批量导

入的设备的数据其中的 title 和 auth_info 为必填选项title 为设备名

中移物联网有限公司 OneNET 开发文档中心

auth_info对应设备的鉴权信息

图3-22 Excel格式

填写 3个设备信息

图3-23 Excel内容

三个设备的 title和 auth_info都一样均为 20170808000012017080800002

2017080800003保存该表格点击ldquo点击上传rdquo上传保存好的 excel 文件

点击ldquo确定导入批量rdquo

中移物联网有限公司 OneNET 开发文档中心

图3-24 导入上传

图3-25 确认创建

可以看到在原设备目录下新增了 3个设备其名称分别为 2017080800001

20170808000022017080800003

中移物联网有限公司 OneNET 开发文档中心

图3-26 批量创建的设备

点击设备详情可以看到设备目录下各个设备的鉴权信息与表格中所填

写的内容一致

图3-27 设备ID及鉴权信息

至此完成了通过批量设备复制的方式完成设备批量创建的过程用户如果

要使用这个功能需要将自己终端的出厂序列号整理到这个 excel表中然后利

中移物联网有限公司 OneNET 开发文档中心

用上传表格的方式进行批量创建

332 应用平台调用新增设备 API

OneNET 提供了创建设备的 API接口

图3-28 新增设备API接口

其中的 auth_info 参数对应着设备的鉴权信息通过调用此 API 接口可以

实现在平台上新增设备的功能用户如果有自己的第三方应用平台进行设备管理

可以通过多次调用此接口的方式进行设备的批量创建在调用接口时需要确保每

次调用的 auth_info 参数对应着自己的每一个终端不同的出厂序列号

333 终端调用注册 API

API 实际是 HTTP 协议的通信协议终端也可以通过封装 HTTP 包发送注册

中移物联网有限公司 OneNET 开发文档中心

设备请求的方式调用 API

终端调用注册 API 创建设备并接入的流程如图 3-29所示

平台

TCP连接协议接入机

创建产品

发送连接报文

连接应答

数据应答

发送数据报文

生成连接报文

设备

发送下行命令 下发命令

解析下行命令

生成存储数据报文

解析连接应答

解析数据应答

必要流程

可选流程

存储到数据流 数据源 创建应用

心跳应答

发送心跳报文生成心跳报文

解析心跳应答

平台操作

设备操作

利用设备本身的sn和产品的设备注册码生成注册报文

TCP连接API服务器

发送注册报文

注册应答

解析设备ID

创建设备

设备开机

读取硬件中烧录的设备编号(sn)

图3-29 终端调用注册API接入流程

1) 创建产品

重要参数产品 ID注册码产品 APIKey(见附录一)

2) 生成并发送注册报文

每一个用户终端中都有厂商烧录的唯一出厂序列号(sn)终端上电

之后应该首先读取自己的 sn然后通过 1)中的注册码和 sn 一起组成注

册报文

注册报文格式如下例

POST httpapihecloudscomregister_deregister_code=6TM7OkhNsTjATvFx HTTP11

Host apihecloudscom

Content-Length 48

中移物联网有限公司 OneNET 开发文档中心

sn02136616511001titletestdevice0001

其中

6TM7OkhNsTjATvFx 为产品注册码

02136616511001 是本例中模拟的设备唯一编号

testdevice0001 是本例中模拟的设备名

若上传的数据格式以及参数鉴权均正确则平台会返回设备创建成功

返回设备 ID以及该设备对应的设备 api-key

HTTP11 200 OK

Date Wed 09 Aug 2017 064821 GMT

Content-Type applicationjson

Content-Length 95

Connection keep-alive

Server Apache-Coyote11

Pragma no-cache

errno0datadevice_id11142371keyq9Mw0zqiAPjTwqfyCk2mWrUi8=errorsucc

3) 在步骤 2)完成之后平台上的设备就已经成功创建了终端需要

重新 TCP连接到对应协议的服务器上完成设备连接(与设备进行映射)以

及上传数据的操作

34 设备 ID 与产品序列号

通过 OneNET构建的物联网系统中有两套比较重要的编码设备 ID与产品序列号

(SN)其中

产品序列号是由厂商指定的在厂商的产品范围内是保持唯一的在出厂前烧写到每

一个终端中通常包含在与平台通信的数据中并以条形码的方式贴在产品的包装上用

于从用户的角度区分每一个独立的终端

设备 ID是在平台创建设备时由 OneNET分配的平台范围内唯一的编号应用于第三

方平台调用 OneNET API时使用

在创建设备时OneNET平台需要用户以设备 sn为参数进行设备创建成功之后平

台会分配一个设备 ID这样 OneNET内部就有了一个 sn-设备 ID的映射关系

终端登陆使用的鉴权信息是出厂时烧写好的 sn鉴权通过之后平台可以将该终端

上传是数据放到对应的设备中

上层应用通过创建设备 API或者查询设备 API建立 sn-设备 ID映射表在需要操作

某一设备时首先可以获取的是终端的 sn号(因为对用户是可见的)通过映射表获取设

中移物联网有限公司 OneNET 开发文档中心

备 ID然后再通过 API访问 OneNET平台上的对应设备

两套编码在物联网系统中的应用位置如下图所示

物联网应用

OneNET

终端

(烧写sn)

HTTP API 以设备ID为参数进行API访问

接入协议以sn为鉴权参数进行设备连接

设备

设备名

设备ID

设备sn

设备标签

sn 设备ID

snmdash设备ID映射表

中移物联网有限公司 OneNET 开发文档中心

第四章 第三方应用开发

第三方应用与 OneNET 平台的业务逻辑关系如图 4-1 所示第三方应用与

OneNET平台之间通过 HTTPS请求应答的方式实现数据交互OneNET 平台为第三

方应用提供封装好的 API 接口应用平台通过调用这些 API 接口完成对 OneNET

平台的读写执行以及设备管理请求然后 OneNET 平台会将相应的指令请求发送

到终端设备OneNET 平台收到终端设备响应的数据及设备信息后会将数据及

设备信息推送到应用平台完成应答

下面将分别介绍第三方应用接入 OneNET 平台的步骤OneNET平台提供的数

据推送功能以及 OneNET 平台为第三方应用封装好的 API接口

图4-1 第三方应用与OneNET平台的逻辑关系

41 第三方应用接入 OneNET 平台

第三方应用与 OneNET平台实现数据交互的前提是已经建立连接第三方应

用接入 OneNET平台的开发流程如图 4-2所示包括三个步骤

(1) 在 OneNET 平台创建了设备该设备有对应的真实设备且能正常上报

数据

(2) 用户已经开发并部署了 OneNET平台验证接入的程序

(3) 在 OneNET 平台正确配置了第三方应用数据接收的地址(URL)

Token以及其他参数

中移物联网有限公司 OneNET 开发文档中心

在确保上述第(1)步已经实现的基础上下面将分别讲述第(2)步和第

(3)步的实现过程

图4-2 数据推送的开发流程

412 第三方应用平台接入验证程序

第三方应用平台接入验证程序工作流程如下所述当 OneNET 平台完成对第

三方开发平台的配置后会向第三方开发平台发起 URLampToken验证接入验证程

序对平台发送的验证参数进行验证验证通过后第三方开发平台会向 OneNET

平台返回验证消息当 OneNET 平台收到验证消息后说明第三方开发平台与

OneNET平台已建立连接

目前 OneNET平台为第三方应用平台提供接入验证程序的 SDK有 Javaphp

Nodejs和 C四个版本

SDK 下载地址httpsopeniot10086cndocart432html118 -ldquo数

据推送rdquo

413 OneNET 平台配置第三方应用平台

在 OneNET平台对第三方应用平台的配置界面如图 4-3所示

URL第三方开发平台的地址

Token可以自定义用于第三方开发平台接入平台握手验证

消息加解密方式有明文模式和安全模式当启用安全模式后平台端需要

用户自定义 AESKey 或者由平台随机生成在应用程序中使用该 AESKey 解密消

中移物联网有限公司 OneNET 开发文档中心

推送时间限制(秒)和推送数据限制(个)设置ldquo推送时间限制rdquoldquo推送数

据限制rdquo可以实现批量推送数据减少服务器压力当满足ldquo推送时间限制rdquo和

ldquo推送数据限制rdquo要求后OneNET 将给第三方推送数据如果没有设置ldquo推送

时间限制rdquo和ldquo推送数据限制rdquo将默认数据实时推送

图4-3 第三方开发平台的配置界面

当用户成功在 OneNET 平台配置了第三方开发平台服务器地址后点击ldquo提

交rdquo按钮后OneNET 平台会向第三方应用平台发起 URLampToken 验证请求验证

通过且收到第三方返回的验证消息后则第三方应用平台与 OneNET 平台已建立

连接之后OneNET 平台在收到设备数据时会将设备数据推送到已配置的第三

方应用平台

用户数据接收服务程序接收到 OneNET平台发送的 ldquoURLampTokenrdquo验证请求

请求的格式形如httpipporttestmsg=xxxampnonce=xxxampsignature=xxx

蓝色字体部分为用户在 OneNET平台配置的 URL常规的验证流程如下

(1)在请求中获取参数ldquononcerdquoldquomsgrdquo的值将ldquotokenrdquo(此为页面

配置参数 token的值)ldquononcerdquoldquomsgrdquo的值计算 MD5(token+nonce+msg)

加密值并且编码为 Base64字符串值

中移物联网有限公司 OneNET 开发文档中心

(2)将上一步中 Base64字符串值通过 URL Decode 计算后的值与请求参数

ldquosignaturerdquo的值进行对比如果相等则表示 token验证成功

(3)如果 token 验证成功向 OneNET 平台返回ldquomsgrdquo参数值否则返回

其他值

说明如果用户不想验证 Token 的有效性可以忽略以上步骤并直接向

OneNET平台返回ldquomsgrdquo参数值

42 OneNET 平台数据推送

平台以 HTTPS POST 请求形式向第三方应用平台注册地址推送数据推送数

据相关信息以 JSON 串的形式置于 HTTPS请求中的 body部分

第三方应用平台在接收数据时会接收到数据的明文消息或者密文消息

明文消息中以ldquotyperdquo的数值区分不同的消息而密文消息与明文消息的区别

是ldquomsgrdquo部分经过了加密处理下面将分别对明文消息密文消息以及消息相

关字段和密文的加密算法进行说明

421 明文消息

明文消息有两种消息类型分别为数据点消息和设备上下线消息而数据点

消息又分为单条数据点消息和数据点消息批量形式数据点消息批量形式中的不

同数据点是以不同时间戳区分的

(1)数据点消息(type=1)

msg

type 1

dev_id 2016617

ds_id datastream_id

at 1466133706841

value 42

msg_signature message signature

nonce abcdefgh

(2)数据点消息批量形式(type=1)

msg [

type 1

dev_id 2016617

ds_id datastream_id

中移物联网有限公司 OneNET 开发文档中心

at 1466133706841

value 42

type 1

dev_id 2016617

ds_id datastream_id

at 1466133706842

value43

]

msg_signature message signature

nonce abcdefgh

(3)设备上下线消息(type=2)

msg

type 2

dev_id 2016617

status 0

login_type 1

at 1466133706841

msg_signature message signature

nonce abcdefgh

422 密文消息

密文消息中的ldquoenc_msgrdquo是由明文消息中的ldquomsgrdquo采用 AES 加密算法而

enc_msgxxxx

msg_signature

message signature

nonceabcdefgh

423 消息相关字段说明

表4-1 消息相关字段说明

字段 字段说明

type 标识数据类型当前版本范围[15]

dev_id 设备 ID

ds_id 公 开 协 议 中 的 数 据 流 ID 其 格 式 为

objectID_instanceID_resourceID

at 平台时间戳单位 ms

value 具体数据部分为设备上传至平台或触发的相关

数据

中移物联网有限公司 OneNET 开发文档中心

status 设备上下线标识

0-下线 1-上线

login_type

设备登陆协议类型

1EDP 2nwx 3JTEXT 5JT808 6

MODBUS 7MQTT 8gr2010NB-IoT

cmd_type

命令响应的类型

1设备收到 cmd的 ACK 响应信息 2设备收到

cmd的 Confirm响应信息

cmd_id 命令 ID

msg_signatur

e 消息摘要

nonce 用于计算消息摘要的随机串

enc_msg 加密密文消息体对明文 JSON串(msg字段)的

加密

424 加密算法详述

平台基于 AES算法提供加解密技术具体阐述如下

EncodingAESKey 即消息加解密 Key 的 BASE64编码形式长度固定为 43

个字符从 a-zA-Z0-9共 62个字符中选取由服务开启时填写后

也可申请修改

AES密钥计算为 AESKey=Base64_Decode(EncodingAESKey + ldquo=rdquo)

EncodingAESKey 尾部填充一个字符的ldquo=rdquo 用 Base64_Decode 生成 32

个字节的 AESKey

AES采用 CBC 模式秘钥长度为 32 个字节(256位)数据采用

PKCS7填充 初始化 iv向量取秘钥前 16字节 PKCS7K为秘钥字

节数(采用 32)buf为待加密的内容N为其字节数Buf 需要被填

充为 K的整数倍在 buf的尾部填充(K-NK)个字节每个字节的内容

是(K- NK)具体详见toolsietforghtmlrfc2315

BASE64采用 MIME格式字符包括大小写字母各 26个加上 10个数

字和加号ldquo+rdquo斜杠ldquordquo一共 64个字符等号ldquo=rdquo用作后缀填

出于安全考虑平台网站提供了修改 EncodingAESKey的功能(在

EncodingAESKey 可能泄漏时进行修改对应上第三方平台申请时填写

的接收消息的加密对称密钥)所以建议保存当前的和上一次的

中移物联网有限公司 OneNET 开发文档中心

EncodingAESKey若当前 EncodingAESKey 生成的 AESKey解密失败则

尝试用上一次的 AESKey的解密

平台的加密消息部分为 enc_msg= Base64_Encode( AES_Encrypt

[random(16B)+msg_len(4B)+msg] )即以 16字节随机字节串拼接 4字

节表示消息体长度的字节串(此处 4 字节长度表示为网络字节序)再加

上消息本身的字节串作为 AES加密的明文再以 AES算法对明文进行加

密生成密文最后对密文进行 BASE64 的编码操作生成加密消息体

对加密消息体的解密流程为1)首先进行加密消息体的 BASE64 解码操作

aes_msg=Base64_Decode(enc_msg)2)对获取的解码内容以 AES 算法进行解密

操作获取明文部分plain_msg=AES_Decrypt(aes_msg)解密中使用的秘钥由

EncodingAESKey 计算得来使用的初始化 iv 向量为计算出的 aes 秘钥的前 16

字节3)去掉 plain_msg 的前 16 字节再以前 4 字节取出消息体长度根据消

息体长度获取真实的消息部分(推荐以消息体长度获取真实消息以兼容

plain_msg 未来可能出现的结构变更)表示加密传输的数据后两字段与明文

传输一致

43 API 接口

第三方开发平台应用层通过 Rsetful API 的方式和 OneNET平台进行交互对

接实现命令的下发数据的读写以及相关业务的交互

针对 MQTT 协议目前主要开发了以下 API 用来实现第三方开发平台向

OneNET平台请求读写执行以及设备管理请求具体见下表 4-2下面分别对每一

种 API进行说明

表4-2 API功能说明

API 类别 操作对象 API名称

需要终端响应 只需平台响应

设备

注册

更新设备注册属性

新增

更新

精确查询单个设备

中移物联网有限公司 OneNET 开发文档中心

模糊查询设备

批量查询设备状态

删除

数据流

新增

更新

查询单个数据流

查询多个数据流

删除

数据点

新增

查询

二进制数

新增

查询

触发器

新增

更新

查询单个触发器

模糊查询触发器

删除

触发数据内容

命令

发送命令

查询命令状态

查询命令相应

查询设备历史命令

视频能力 获取播放地址

APIKEY

新增

更新

查看

删除

消息订阅

按 Topic发送命令

查询订阅指定 Topic设备的列表

查询设备订阅的 Topic列表

删除产品的 Topic

查询产品的 Topic

中移物联网有限公司 OneNET 开发文档中心

432 设备

4321 注册

表4-3 设备注册

HTTP方法 POST

URL apihecloudscomregister_de

URL参数 register_code=6TM1OkhNsTjATvFx 设备注册码(必填)

HTTP内容

(示例)

sn 2015031401421 设备唯一标识 string类型最长 512字符

mac C89346DA4373 设备唯一 mac标识最长 32字符

title myedpdevice 设备名(可选) 最长 32个字符

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

keyQ1VdWoEvdkCye=d1=HcCSP6LvCw= 新设备 apikey

device_id 325018 设备 ID

说明

1 响应消息中 errno 表示错误码error 表示错误原因如果创建设备失

败则没有 data字段

2 snmac一定要必填其中一个而且只可以传一个用于鉴权就是设备

新增中的 auth_info

3 此接口根据产品设置的不同默认 allow_dup=true可以生成新设备及

key或获取原有设备及 key见下表

表4-4 对应表

产品允许重复 sn 在产品中已存在 sn 在产品中不存在

allow_dup=true 是 sn 对应的设备 id 和 key 新的设备 id 和 key

allow_dup=false 否 报错 新的设备 id 和 key

中移物联网有限公司 OneNET 开发文档中心

此接口返回的新设备默认设备名均为auto_register均为私有设

备设备协议与产品协议相同

4322 更新设备注册属性

表4-5 更新设备注册属性

HTTP方法 PUT

URL apihecloudscomregister_attr

HTTP头部 api-key xxxxddddsssaaa 必须为 masterkey

HTTP内容

(示例)

allow_dup true|false是否允许重复提交相同的设备 sn 默认 true

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

默认 allow_dup 为 true主要用于设备注册码创建设备属性限制

4323 新增

表4-6 新增设备注册属性

HTTP方法 POST

URL apihecloudscomdevices

HTTP头部 api-key xxxxddddsssaaa 必须为 masterkey

HTTP内容

(示例)

title mydevice 设备名

desc some description 设备描述(可选)

tags [chinamobile] 设备标签(可选可为一个或多个)

protocolMQTT 选择一种接入协议(可选默认为 HTTP)

location lon 106 lat 29 ele 370设备位置纬度

经度 高度(可选)

private true| false 设备私密性(可选默认为 ture)

auth_info 201503041a5829151 MQTT设备设备唯一编号

other version 100 manu china mobile 其他信息(可

选JSON格式可自定义)

HTTP响应响

应消息内容

(实例)

errno 0

error succ

data

中移物联网有限公司 OneNET 开发文档中心

device_id233444 平台分配的设备 ID

4324 更新

表4-7 更新

HTTP方法 PUT

URL apihecloudscomdevicesdevice_id

HTTP头部 api-key xxxxddddsssaaa masterkey或设备 apikey

HTTP内容

(示例)

title mydevice 设备名(可选)

desc some description 设备描述(可选)

tags [chinamobile] 设备标签(可选)

protocolMQTT 选择一种接入协议(可选)

location lon106 lat 29 ele 370设备位置经度

纬度 高度(可选)

private true| false 设备私密性(可选)

auth_info201503041a5829151 MQTT设备设备唯一编号(可选)

other version 100 manufacturer china mobile 其

他信息(可选)

HTTP响应响

应消息内容

(示例)

errno 0

error succ

中移物联网有限公司 OneNET 开发文档中心

4325 精确查询单个设备

表4-8 精确查询单个设备

HTTP方法 GET

URL apihecloudscomdevicesdevice_id

HTTP头部 api-key xxxxddddsssaaa masterkey 或设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

iddevice_id

tags [chinamobile]

onlinetrue|false

protocolMQTT

titlemy device1

descsome description

create_time2015-09-16 102222

privatetrue|false

locationele370lat17609lon17703

auth_infohellip

otherversion100manufacturerchina mobile

keys[titledevice-auto-keykey2JO3B12O1]

数据流

datastreams[

create_time 2014-10-23 202222

iddatastream_id1

unitcelsius

unit_symbolC

uuid 231a5aa9-9de4-5f2e-9e0f-015181c98429

]

4326 模糊查询设备

表4-9 模糊查询设备

HTTP方法 GET

URL apihecloudscomdevices

中移物联网有限公司 OneNET 开发文档中心

URL 参数

key_words=my 匹配关键字(可选从 id和 title字段中左匹配)

auth_info=203x1 鉴权信息(可选对应注册时的 sn参数唯一设

备编号)

tag=mobile 标签(可选)

online=true| false 在线状态(可选)

private=true| false 私密性(可选)

page=1 指定页码最大页数为 10000(可选)

per_page=30 指定每页输出设备个数默认 30最多 100(可选)

device_id=235122 指定设备 ID多个用逗号分隔最多 100个(可

选)

begin=2016-06-20 起始时间包括当天(可选)

end=2016-06-20 结束时间包括当天(可选)

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

total_count1

per_page30

page1

devices

[

id3497307

titlemy device1

desc device desc

privatetrue

protocolMQTT

onlinefalse

locationlon10655231191544001lat29535451246673

create_time2013-02-11 122233

auth_infoSYSz=8QY3r7aTQ48UKfqPnB=PybYRo=

]

4327 批量查询设备最新数据

表4-10 批量查询设备最新数据

HTTP方法 GET

中移物联网有限公司 OneNET 开发文档中心

URL apihecloudscomdevicesdatapoints

URL参数 devIds=1221122331123 设备 id用逗号隔开限制 1000 个设备

HTTP头部 api-key xxxxddddsssaaa masterkey 或设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

error ldquosuccrdquo

data

devices [

id 12323 设备 id

title daf设备名

datastreams

[

id temperature数据流名称

at 2017-02-12 102222数据流更新时间

value 12数据流最新数据

hellip

helliphellip

]

hellip

hellip

]

4328 删除

表4-11 删除设备

HTTP方法 DELETE

URL apihecloudscomdevicesdevice_id

HTTP头部 api-key xxxxddddsssaaa 可为设备级别的 Key

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

中移物联网有限公司 OneNET 开发文档中心

说明删除设备会删除该设备下所有数据流和数据点删除设备动作是异步

的系统会在后续逐步删除该设备下的数据流和数据点

433 数据流

4331 新增

表4-12 新增数据流

HTTP方法 POST

URL apihecloudscomdevicesdevice_iddatastreams

HTTP头部 api-key xxxxddddsssaaa masterkey 或设备 apikey

HTTP内容

(示例)

idtemperature 数据流名称 示例温度

tags[Tag1Tag2] 数据流标签(可选可以为一个或多个)

unitcelsius 单位(可选)

unit_symbolC 单位符号(可选)

HTTP响应响

应消息内容

(示例)

errno 0

data

ds_uuid 9e6bcac9-2c6f-59d5-adae-3955df2e7bce平台分配

数据流 UUID

error succ

4332 更新

表4-13 更新数据流属性

HTTP方法 PUT

URL apihecloudscomdevicesdevice_iddatastreamsdatastream_id

示例apihecloudscomdevices421240datastreamstemperature

HTTP头部 api-key xxxxddddsssaaa masterkey 或设备 apikey

HTTP内容

(示例)

tags[Tag1Tag2] 数据流标签(可选)

unitcelsius 单位(可选)

unit_symbolC 单位符号(可选)

HTTP响应响

应消息内容

(示例)

errno 0

error succ

中移物联网有限公司 OneNET 开发文档中心

4333 查询单个数据流

表4-14 查询单个数据流

HTTP方法 GET

URL apihecloudscomdevicesdevice_iddatastreams

URL参数 datastreams_ids = 查看的 datastream的 id

HTTP头部 api-key xxxxddddsssaaa masterkey 或该设备的设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

data [

update_at 2018-06-29 112938 数据流最后更新时

id 湿度 数据流名称

create_time 2018-06-28 170548数据流创建时间

current_value 53845013最新数据点

]

error succ

4334 查询多个数据流

表4-15 查询多个数据流

HTTP方法 GET

URL apihecloudscomdevicesdevice_iddatastreams

URL 参数

datastream_ids= 查看的 datastream的 id多个 id之间用英文逗号

分开(参数缺省时为查询所有数据流)

示例

apionenetcomdevices1234datastreamsdatastream_ids=tempgps

表示查看 temp和 gps两个数据流的信息

HTTP头部 api-key xxxxddddsssaaa masterkey 或者 该设备的设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data 数据流信息

[

idtemperature 数据流名称设备范围内唯一

tags[Tag1Tag2] 数据流标签

unitcelsius 单位

unit_symbolC单位符号

create_timexxxx-xx-xx 102222 创建时间

中移物联网有限公司 OneNET 开发文档中心

current_valuehellip该数据流下数据点最新值

update_atxx-xx-xx该数据流下数据点最新上传时间

]

[

idhumi 数据流名称设备范围内唯一

tags[Tag1Tag2]

unit_symbol

create_timexxxx-xx-xx 102222

current_valuehellip

update_atxx-xx-xx

]

[]

4335 删除

表4-16 删除数据流

HTTP方法 DELETE

URL apihecloudscomdevicesdevice_iddatastreamsdatastream_id

URL参数 无

HTTP头部 api-key xxxxddddsssaaa masterkey 或者设备 key

HTTP响应响

应消息内容

(示例)

errno 0

error succ

434 数据点

4341 新增

中移物联网有限公司 OneNET 开发文档中心

表4-17 新增数据点

HTTP方法 POST

URL apihecloudscomdevicesdevice_iddatapoints

URL参数 type=3 上传数据类型(可选默认为完整 JSON型见 HTTP内容示

例)

HTTP头部 api-key xxxxddddsssaaa masterkey 或者 设备 apikey

HTTP内容

(示例)

datastreams

[

id temperature 数据流名称或数据流模板名称

datapoints [

at 2013-04-22T003543 上传数据点时间可选如

果为空则设备云会取当前时间如果存在其格式必须为 YYYY-MM-

DDThhmmss的形式(例如2015-03-22T223112)

value 42 上传数据点值

at 2013-04-22T005543

value 84 上传数据点值

]

id key 数据流名称或数据流模板名称

datapoints [

at 2013-04-22T003543上传数据点时间可选

value hellip上传数据点值

at 2013-04-22T003543

value hellip上传数据点值

]

hellip

]

中移物联网有限公司 OneNET 开发文档中心

HTTP 响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

1 可以一次性向设备云上传多个数据流每个数据流中可以包括多个数据

点示例程序表示向设备云上数据流 temperature 和数据流 key上传数据其中

temperature数据流有两个数据点key数据流也有两个数据点

2 如果某个数据流不存在则在增加数据点时设备云会自动创建一个新

的数据流注意新数据流的 datastream id 不可为空

3 数据点表示在某个时刻该数据流的值其 at表示时间为可选字段如

果为空则设备云会取当前时间如果存在其格式必须为YYYY-MM-DDThhmmss

的形式(例如2015-03-22T223112)

4 数据点中的 value表示具体的值其值为 JSON对象可以为整型浮点

型字符串多种类型如果 value部分用双引号括起来则其在设备云存储为字

符串如果不用双引号括起来则其表示数值字符编码现在只支持 UTF-8

5 数据点对应的时间是数据点的标识的一部分相同时间的两个数据点

设备云会同时对这两个相同时间的数据点进行保存不会出现覆盖另一个数据点

的情况一般如果 at 部分取空设备云会取系统时间精度为毫秒如果在一

条命令中某一个数据流包含多个数据点都没有 at 字段设备云将会对所有数据

点进行保存

6 新增数据点支持如下简写方式在请求的 URL中增加 type字段指示所

使用的格式类型目前 type支持 345三种情况

URLapihecloudscomdevices2214570datapointstype=3

示例temperature225humidity952

表示在数据流 temperature中增加一个数据点 225在 humidity 中增加一

个数据点 952

URLapihecloudscomdevices2214570datapointstype=4

示例temperature2015-03-22T223112225

表示在数据流 temperature中加一个数据点在 2015年 3月 22 日 22点 31

中移物联网有限公司 OneNET 开发文档中心

分 12秒的值为 225

URLapihecloudscomdevices2214570datapointstype=5

示例temperature2015-03-22T223112225pm2589

表示在数据流 temperature中加一个数据点即 2015年 3月 22 日 22点 31

分 12秒的值为 225在数据流 pm25中添加一个数据点即当前时间的值为 89

4342 查询

表4-18 查询数据点

HTTP方法 GET

URL apihecloudscomdevicesdevice_iddatapoints

URL 参数

datastream_id=abc 查询的数据流多个数据流之间用逗号分隔

(可选)

start=2015-01-10T080035 提取数据点的开始时间(可选)

end=2015-01-10T080035 提取数据点的结束时间(可选)

duration=3600 查询时间区间(可选单位为秒)

start+duration按时间顺序返回从 start开始一段时间内的数据点

end+duration按时间倒序返回从 end回溯一段时间内的数据点

limit=100 限定本次请求最多返回的数据点数0ltnlt=6000(可选

默认 1440)

cursor= 指定本次请求继续从 cursor位置开始提取数据(可选)

sort=DESC | ASC 值为 DESC|ASC时间排序方式DESC倒序ASC升

序默认升序

ltnlt=6000(可选默认 1440)

HTTP头部 api-key xxxxddddsssaaa masterkey 或者 该设备的设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

cursor70921_3771908_1472355096

datastreams[

idtemperature数据流名称或数据流模板名称

datapoints[

at xxxx-xx-xx 102222value42数据点上传时间和

at xxxx-xx-xx 102222value84

]

中移物联网有限公司 OneNET 开发文档中心

idkey 数据流名称或数据流模板名称

datapoints[

at xxxx-xx-xx 102222valuehellip

atxxxx-xx-xx 102222valuehellip

]

hellip

]

1 若不携带任何参数平台返回本设备所存在的所有数据流中的最新数据

(这一种情况下查询时出现时延较大的性能问题建议在 URL 参数中加上

newadd参数并将其值赋为 true如 newadd=true)

2 若不携带数据流 id参数携带 limit 参数时会返回该设备每个数据流

最多 limit 条数据

3 若要查看某一条数据流数据需在上述 URL中增加参数 datastream_id

4

apihecloudscomdevices564280datapointsdatastream_id=tempamplimit

=10会返回数据流temp中最近的 10个数据点

5 要查看某一条数据流在某个时间范围内的数据可以在增加 start和 end

参数

示例

apihecloudscomdevices564280datapointsdatastream_id=temper

atureampstart=2013-05-12T171233ampend=2013-06-12T172233 表示查询本设

备对应的数据流在 2013 年 5 月 12 日 17 点 12 分 33 秒到 17 点 22 分 33 秒的数

据点注意如果 start 参数存在end参数不存在表示取 start后的所有数据

如果 start 不存在end 存在设备云会忽略 end参数注意日期时间格式格

式必须为示例中的格式YYYY-MM-DDThhmmss例如2013-05-12T171233

日期和时间之间用大写字母 T 分隔start 和 end 之间的时间间隔最大为 1 年

超过一年会忽略

如果指定了 start 参数则可能返回的数据点的数目会很多此时默认会返

回最多 100 个数据点可以使用 limit 参数设定返回多少个数据点最大为

6000个数据点当实际的数据点数目多于 limit 限定的数目时返回的 json串

中移物联网有限公司 OneNET 开发文档中心

中会有一个 cursor 字段下一次请求的命令行中可以携带此 cursor 字段表示接

着遍历本数据流此 cursor字段标识上次取出数据点后下一个数据点的位置

435 二进制数据

4351 新增

将二进制数据将作为数据点保存到设备下的某个数据流中设备云返回该二

进制数据的索引号

表4-19 新增二进制数据

HTTP方法 POST

URL apihecloudscombindata

URL参数 device_id=421590 数据所属设备(必选)

datastream_id=bin 该数据所属已经存在的数据流(必选)

HTTP头部 api-key xxxxddddsssaaa masterkey 或者该设备的设备 key

HTTP 内 容

(示例)

普通二进制数据文件图像等

(最大限制为 800上传时间间隔需大于 1ms)

HTTP响应响

应消息内容

(示例)

errno 0

error succ

data

index3491506_1475204886914_bin 二进制数据索引号

4352 查询

表4-20 查询二进制数据

HTTP方法 GET

URL apihecloudscombindataindex

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

普通二进制数据文件图像等二进制形式数据

436 触发器

4361 新增

表4-21 新增触发器

HTTP方法 POST

中移物联网有限公司 OneNET 开发文档中心

URL apihecloudscomtriggers

HTTP头部 api-key xxxxddddsssaaa 必须为 masterkey

HTTP内容

(示例)

titlewen du jian kong 设备名(可选)

ds_idgps 数据流名称(id)(可选)

dev_ids[10272345615523] 设备 ID(可选)

ds_uuids[ 数据流 uuid(可选)

9ad09uac-7446-512f-b07c-90jdnzj8120ad

4599436e-7146-5349-b07c-79fa0919cs62

]

urlxxbbcom

typegt | gt= | lt | lt= | == | inout | in | out |change | frozen |

live

threshold100 阙值根据 type不同见以下说明

1) type 为gt|gt=|lt|lt=|==时threshold必须为数值

2) type为 inout时threshold 设置为lolmt40 uplmt52 表示

数据流的值首次进入或离开闭区间[4052]时触发

3) type为 change时threshold 参数不用传递当上传的值有改变时触发

告警

4) type为 frozen时threshold 为数值指定距离最后一次数据上报多少

秒内未上报数据触发告警同时被监控对象进入 frozen状态

5) type 为 live 时threshold 为数值指定距离最后一次数据上报多少秒

后上报数据触发告警

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

tirgger_id233444 触发器 ID

说明

1触发器的含义是当指定范围内的数据点满足触发条件的要求时会向

url参数指定的地址发送 post请求

2触发器有三种工作触发模式

1)在请求参数中单独指定了 ds_id不包括其他参数那么当前项目下

中移物联网有限公司 OneNET 开发文档中心

所有设备的数据流中数据流名称符合 ds_id 的数据都会进入触发判断逻辑

2)在请求参数中单独指定了 ds_uuids 数组那么只有这些指定的数据

流会进入触发判断逻辑

3)在请求参数中指定了 ds_id 和 dev_ids那么只有这些指定的设备的

数据流会进入触发判断逻辑

4362 更新

表4-22 更新触发器属性

HTTP方法 PUT

URL apihecloudscomtriggerstirgger_id

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP内容

(示例)

titlewen du jian kong

ds_uuids[

9ad09uac-7446-512f-b07c-90jdnzj8120ad

4599436e-7146-5349-b07c-79fa0919cs62

]

urlxxbbcom

typegt | gt= | lt | lt= | == | inout | in | out | exp | change |

frozen | live

threshold100

注若要修改 type需要对应设置 threshold

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

4363 查询单个触发器

表4-23 查询单个触发器

HTTP方法 GET

URL apihecloudscomtriggerstirgger_id

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

idtrigger_id1

中移物联网有限公司 OneNET 开发文档中心

titlewen du jian kong

ds_uuids[

datastream1_uuidrdquo

datastream2_uuidrdquo

datastream3_uuidrdquo

]

urlxxbbcom

typegt|gt=|lt|lt=|==|in|out|exp|change|frozen|live

threshold100

invalidtrue 触发器是否已失效

create_timexx-xx-xx 102222

4364 模糊查询触发器

表4-24 模糊查询触发器

HTTP方法 GET

URL apihecloudscomtriggers

URL 参数

title=name 指定触发器名称

page=1 指定页码可选

per_page=10 指定每页输出个数可选默认 10最多 100

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

total_count600

per_page30

page1

triggers[

idtrigger_id1

titlewen du jian kong

ds_uuids

[datastream1_uuidrdquo datastream2_uuidrdquo]

urlxxbbcom

typegt|gt=|lt|lt=|==|in|out|exp|change|frozen|live

threshold100

invalidtrue 触发器是否已失效

create_timeXXXXXXXX

中移物联网有限公司 OneNET 开发文档中心

]

说明触发器失效是指触发器所依赖的数据流或者设备被删除了此时触发

器永远不会有效触发事件

4365 删除

表4-25 删除触发器

HTTP方法 DELETE

URL apihecloudscomtriggerstirgger_id

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno 0

error succ

4366 触发数据内容

触发数据是指当 OneNET 设备云判断某个触发器的触发条件满足时会通过

POST方式向外抛出的 URL请求在 HTTP的 POST消息体中会携带如下格式的 JSON

字符串

表4-26 触发器内容

数据内容

(示例)

trigger

id1

threshold90

typegt

current_data[

dev_id2656

ds_idgps

ds_uuidFWEF-ZFW-ZFW-ZFWW

at2009-09-07T121602001403Z

value100

dev_id2656

ds_idtemper

中移物联网有限公司 OneNET 开发文档中心

ds_uuidFEWEF-ZFWFWW-WFWW-FWEFFWW

at2009-09-07T121602001403Z

value882

]

437 命令

命令是指应用发送命令数据给 OneNET设备云再由 OneNET设备云转发给终

端设备终端设备收到命令后可以向设备云反馈响应的一种工作机制命令下发

后应用可以通过 API查询命令状态和提取命令的响应数据

命令的执行步骤如下

1应用通过 API 向设备云发送命令数据

2设备云生成该命令的 uuid作为该命令的唯一标识并向应用返回同时向

终端设备转发命令数据

3 终端设备收到命令数据后执行命令数据可以生成响应也可以不响应

4设备云跟踪记录命令的响应如果设备有响应就关联命令 uuid和响应

结果

5应用通过 API 向设备云提取命令执行结果(API 请求中携带命令 uuid 标

识)

特别说明

命令下发到终端设备后如果终端设备 10 秒内未收到响应则此命令的状

态将被设置为超时应用通过 API 查询命令状态时会反馈超时超过 10 秒后

收到的响应会被丢弃

终端设备针对同一条命令回复多条命令响应只有在未超时时间内收到的最

后一条是有效响应前面的响应包将会被覆盖因此终端设备应该对每个命令只

有一个响应包

4371 发送命令

表4-27 发送命令

HTTP方法 POST

URL apihecloudscomcmds

URL 参数 device_id=415120 接收该数据的设备 ID(必选)

中移物联网有限公司 OneNET 开发文档中心

qos=0 | 1 是否需要响应默认为 0

0不需要响应即最多发送一次不关心设备是否响应

1需要响应如果设备收到命令后没有响应则会在下一次设备登陆

时若命令在有效期内(有效期定义参见 timeout参数)则会继续发送

对响应时间无限制多次响应以最后一次为准

本参数仅当 type=0时有效

timeout=300 命令有效时间默认 0

0在线命令若设备在线下发给设备若设备离线直接丢弃

gt0 离线命令若设备在线下发给设备若设备离线在当前时间

加 timeout时间内为有效期有效期内若设备上线则下发给设备单

位秒有效围0~2678400

本参数仅当 type=0时有效

type=0 | 1 默认 00发送 CMD_REQ包1发送 PUSH_DATA包

HTTP头部 api-key xxxxddddsssaaa masterkey或者设备 apikey

HTTP内容 用户自定义数据jsonstring二进制数据(小于 64K)

HTTP响应响

应消息内容

(示例)

errno 0

error succ

data

cmd_uuid2302-312-FWs 命令 id

4372 查询命令状态

表4-28 查询命令状态

HTTP方法 GET

URL apihecloudscomcmdscmd_uuid

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno 0

error succ

data

status1

0设备不在线|Device not online

1命令已创建| Command Created

2命令已发往设备| Command Sent

3命令发往设备失败| Send Command Failed

4设备正常响应| Command Response Received

5命令执行超时| Command Response Timeout

6设备响应消息过长 | Command Response Too Large

descldquosendingrdquo

中移物联网有限公司 OneNET 开发文档中心

4373 查询命令响应

表4-29 查询命令响应

HTTP方法 GET

URL apihecloudscomcmdscmd_uuidresp

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP 响应响

应消息内容

用户设备返回的响应内容

4374 查询设备历史命令

表4-30 查询设备历史命令

HTTP方法 GET

URL apihecloudscomcmdshistoryltdevice_idgtltdevice_idgt

URL 参数

start=2015-01-10T080035 查询的开始时间(可选)

end=2015-01-10T080535 查询的结束时间(可选)

page=1 指定页码最大页数为 10000(可选)

per_page=30 指定每页输出设备个数默认 30最多 100(可选)

HTTP头部 api-key xxxxddddsssaaa

HTTP响应响

应消息内容

errno 0

error succ

data

page 1当前页码

per_page 10当前每页总数

total_count 100

items [

cmd_uuid 2302-312-FWs

device_id 2设备 ID

expire_time 2016-07-05 000000过期时间

status 0命令状态

send_time 2016-07-05 000000发送时间

confirm_time 2016-07-05 000000响应时间

confirm_body 2463726571007b202274797022 响应内容

16进制字符

body 2463726571007b202274797022请求内容16进制字符

hellip

中移物联网有限公司 OneNET 开发文档中心

hellip

]

438 视频能力

4381 获取播放地址

表4-31 获取播放地址

HTTP方法 GET

URL apihecloudscomipcrtmp_address

URL 参数

device_id= 接收该数据的设备 ID(必填)

channel_id = 对应数据流名称中的 channelnum

protocol_type = 播放协议类型 0rtmp1hls2http-flv

HTTP头部 api-key xxxxddddsssaaa masterkey或者设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

errorrdquosuccrdquo

ldquodatardquo

addripport

accessTokenldquo字符串rdquo

439 APIKEY

4391 新增

表4-32 新增 APIKEY

HTTP方法 POST

URL apihecloudscomkeys

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP内容

(示例)

title sharing key key 的命名

permissions [

resources [ 被授权的资源

中移物联网有限公司 OneNET 开发文档中心

dev_id 424 被授权的设备 id

dev_id 425 被授权的设备 id

hellip

hellip

]

access_methods [ 被授权的命令

get

put

post

]

]

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data key2302-312-FWs key_string

说明授权命令是可选的另外被授权的命令也可以是 getputpost 的

一个或几个如只授权 get和 put命令

access_methods [getput]

4392 更新

表4-33 更新 APIKEY

HTTP方法 PUT

URL apihecloudscomkeyskey_string

HTTP头部 api-key xxxxddddsssaaa masterkey(注只能为 master-key)

HTTP内容

(示例)

title sharing key key 的命名

permissions [

resources [ 被授权的资源

dev_id 424 被授权的设备 id

ds_idfan1 数据流 id可选

中移物联网有限公司 OneNET 开发文档中心

dev_id 425 被授权的设备 id

ds_idfan1 数据流 id可选

hellip

hellip

]

access_methods [ 被授权的命令可选

get

put

post

]

]

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

说明

1对于 masterkey 不允许更新操作masterkey 默认具有最大权限可以访

问该用户名下所有设备所有数据

可以进行 POSTGETPUTDELETE操作如果更新 master key 系统会返回

失败

2授权命令是可选的另外被授权的命令也可以是 getputpost 的一个

或几个如只授权 get和 put命令

access_methods [getput]

3API key 更新是覆盖操作会将原来存在的授权资源和授权命令覆盖不

会保留原来的授权资源和授权命令

4393 查看

中移物联网有限公司 OneNET 开发文档中心

表4-34 查看 APIKEY

HTTP方法 GET

URL httpapihecloudscomkeys

URL 参数

key = FWJPO-FZFHW-FFEWB可选只查看该 key相关信息

page = 1 指定页码 可选

per_page = 10 指定每页输出个数可选默认 10最多 100

device_id = xxbbcc可选只查看与该设备相关的非 master-key

HTTP头部 api-key xxxxddddsssaaa masterkey(注只能为 master-key)

HTTP响应响

应消息内容

(示例)

errno 0

data

per_page 30

total_count 2

keys [

create_time 2015-11-04 142552

title Auto-generated-master-key

key 03GeDLYk0WNk1V338g7yndKZYkQA

create_time 2015-12-03 100041

permissions [

resources [

dev_id 564280

]

]

title 设备 1测试 Key

key vuHebEWefiU2Ueo5ouoCc1CUsYQ=

]

page 1

error succ

中移物联网有限公司 OneNET 开发文档中心

4394 删除

表4-35 删除 APIKEY

HTTP方法 DELETE

URL httpapihecloudscomkeyskey_string

HTTP头部 api-key xxxxddddsssaaa masterkey(注只能为 master-key)

HTTP 响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

4310 消息订阅

43101 按 Topic 发送命令

表4-36 按 Topic 发送命令

HTTP方法 POST

URL apihecloudscommqtt

URL参数 topic=xxx 设备订阅的主题(必选)

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP 内 容

(示例)

HTTP响应响

应消息内容

(示例)

errno0

errorldquosuccrdquo

data

total_count1

per_page30

page1

devices [123123433333]

43102 查询订阅指定 Topic设备的列表

表4-37 查询订阅制定 Topic设备的列表

HTTP方法 GET

URL apihecloudscommqtttopic_device

URL 参数

topic=xxx 设备订阅的主题(必选)

page=1 当前页码 必填大于等于 1

per_page=10 每页 必填范围 1-1000

中移物联网有限公司 OneNET 开发文档中心

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP内容

(示例)

HTTP响应响

应消息内容

(示例)

errno0

errorldquosuccrdquo

data

total_count1

per_page30

page1

devices [123123433333]

43103 查询设备订阅的 Topic列表

表4-38 查询设备订阅的 Topic列表

HTTP方法 GET

URL apihecloudscommqttdevice_topicdevice_id

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno0

errorldquosuccrdquo

data

[topic_name1 topic_name2 topic_name3]

43104 删除产品的 Topic

表4-39 删除产品的 Topic

HTTP方法 DELETE

URL apihecloudscommqtttopic

URL参数 name=xxx topic名(必选)

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno0

errorldquosuccrdquo

中移物联网有限公司 OneNET 开发文档中心

43105 查询产品的 Topic

表4-40 查询产品的 Topic

HTTP方法 GET

URL apihecloudscommqtttopic

URL参数 无

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno0

errorldquosuccrdquo

data

[topic_name1topic_name2topic_name3]

中移物联网有限公司 OneNET 开发文档中心

第五章 接入实例

51 MQTT-device 接入

511 工具下载

为方便开发人员直观感受使用 mqtt 协议进入平台的便利可使用平台提供

的 MQTT 设备模拟器进行接入平台请在首页-gt开发文档-gt资源下载-gt13 调试

工具下载进行下载如下图

图5-1 资源下载

下载地址

httpupfileshecloudscom123ueditor201707125d5bc37eca39c0c5b7a5bcb9

0e451eeerar

中移物联网有限公司 OneNET 开发文档中心

512 界面说明

图5-2 界面说明

513 使用方法

5131 创建产品

如 323 的过程在设备接入协议中选择 MQTT

中移物联网有限公司 OneNET 开发文档中心

图5-3 选择连接协议

5132 创建设备

如 323描述在平台上新建一个设备

5133 建立连接

在产品概况中可以查看产品 ID此信息填入模拟器 ProductID一栏如下图

图5-4 产品ID

在平台上进入设备信息页面可查看设备 ID及鉴权信息(此鉴权信息是新建设备时候填

写的鉴权信息)如下图

中移物联网有限公司 OneNET 开发文档中心

图5-5 设备ID及鉴权信息

相应把设备 ID及鉴权信息填入模拟器之中然后点击连接按钮如果未弹出提示对话

框则表示设备鉴权成功如下图

图5-6 连接成功

中移物联网有限公司 OneNET 开发文档中心

5135订阅与发布

演示本操作需要在 OneNet平台建立两个基于 MQTT协议的设备一个用于消息发布

另一个用于消息订阅

图5-7 设备状态

开启两个模拟器分别模拟以上两个设备然后建立连接

首先使用订阅主题打开第一个模拟器模拟消息订阅者

图5-8 订阅主题

其次发布主题打开第二个模拟器模拟消息发布者

中移物联网有限公司 OneNET 开发文档中心

图5-9 发布主题

经过以上两个操作后查看模拟消息订阅者的模拟器则收到了主题

为rdquotopic_namerdquo的消息如下图

中移物联网有限公司 OneNET 开发文档中心

图5-10 收到的主题

5136接收平台指令

建立连接后模拟器也可接收来自平台的指令具体操作如下

先打开模拟器-gt建立连接-gt选中【[OneNet]平台指令接收】选项栏利用平台下发指

令功能下发如下图平台下发指令

图5-11 平台发送命令

中移物联网有限公司 OneNET 开发文档中心

图5-12 下发指令

填写好将要发送的消息后点击【发送命令】按钮则模拟器成功接收到来自平台的

数据如下图模拟器截图

图5-13 模拟器收到的指令

5137上传数据点

Mqtt支持 Json 数据格式上报数据现根据 Json几种格式举一些例来演示怎么利用

模拟器上传数据

1)使用 Json数据 Type1上传 Json数据

datastreams[idtemperaturedatapoints[value255]]

中移物联网有限公司 OneNET 开发文档中心

如下模拟器上传数据界面

图5-14 Type1数据格式

则在平台数据展示中则可看到上传的数据点

图5-15 收到数据展示

2)使用 Json数据 Type3示例 Json数据为

temp32humi98

模拟器发送数据截图

中移物联网有限公司 OneNET 开发文档中心

图5-16 Type3数据格式

平台数据展示截图

图5-17 数据展示

3)使用 Json数据 Type4示例 Json数据为

temperature233pm2589

模拟器上传数据截图

中移物联网有限公司 OneNET 开发文档中心

图5-18 Type5数据格式

平台接收数据展示截图

图5-19 数据展示

52 基于麒麟开发板的 MQTT 接入实例

OneNet 平台为使用户能快速接入发布麒麟座开发板官网提交您的创意免

费申请开发板下面利用麒麟座开发板 V31 演示开发板采集温湿度使用 MQTT发

送到平台的接入流程

开发板申请链接httpsopeniot10086cneventdetail185html

521 搭建开发环境

OneNET 平台提供的麒麟座开发板是基予 STM32 单片机开发的一块功能应用

板开发板包含 MCU温湿度传感器GSM 模块WIFI 模块电源模块键盘

中移物联网有限公司 OneNET 开发文档中心

LED以及 lcd显示接口等满足用户对平台接入的基本需求能快速接入到平台

资料包配备完整工程代码方便工程移植等使用

目前 STM32 开发常用的 IDE 有 IARMDK 等我挑选 MDK 作为开发工具打

开工具包先安装 MDK511A安装完毕后再安装 MDKCM511A开发板所有资料软件

工具包下载案例包

案例包下载链接

httpspanbaiducoms1UB1qZGrVuovSVdbqqXP0Lglistpath=2F

图5-20 MDK包

安装完毕并安装 license详细步骤不做演示

中移物联网有限公司 OneNET 开发文档中心

522 连接硬件准备

5221 开发板接线

图5-21 开发板接线图

电源DC-5V

运行信息USART1-MicroUSB 线

软件下载ST-Link

中移物联网有限公司 OneNET 开发文档中心

5222 ESP8266跳线帽连接

图5-22 ESP8266跳线帽连接

中移物联网有限公司 OneNET 开发文档中心

5223 M6312跳线帽连接

图5-23 M6312跳线帽连接

523 工程实例

例程使用最简单易懂的方式编写着重让大家明白接入流程和协议

10~12 协议专属例程是展示该协议下的专用功能比如 EDP 的 PushData

中移物联网有限公司 OneNET 开发文档中心

HTTP 注册新设备MQTT 的订阅发布等具体使用方法查看该目录下的《使用

说明》

图5-24 工程文件

524 开发工程文件

中移物联网有限公司 OneNET 开发文档中心

图5-25 工程文件

图5-26 工程结构

默认已创建好产品以及设备打开文件工程 onenetc 和 esp8266c 修改例

程的 WIFI 信息和平台信息

分别在 esp8266c 的 36和 onenetc的 414345行

图5-27 更改项

525 编译下载

开发版接串口会有相应状态显示平台设备显示在线状态绿色为连接成功

设备在线灰色表示未连接并在数据展示中显示对应主题的所有数据

中移物联网有限公司 OneNET 开发文档中心

图5-28 连接成功

图5-29 收到数据

其他实例详情请见httpsopeniot10086cnbbsthread-1266-1-1html

中移物联网有限公司 OneNET 开发文档中心

第六章 MQTT 协议详解

61 设备与平台通信协议包格式

协议就是通信双方的一个约定即表示第 1字节传输的什么第 2字节

传输的什么helliphellip在 MQTT协议中一个 MQTT 数据包由固定头(Fixed

header) 可变头(Variable header) 消息体(payload)三部分构成

MQTT 数据包结构固定头部+可变头部+消息体

固定头(Fixed header)存在于所有 MQTT数据包中表示数据包类型及

数据包的分组类标识固定头格式如下

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 - 5 Remaining Length(该字段占用 1-4个字节)

目前平台版本支持的 Packet Type如下

名字 值 流向 描述

CONNECT 1 C-gtS 客户端请求与服务端建立连接

CONNACK 2 S-gtC 服务端确认连接建立

PUBLISH 3 CS 发布消息

PUBACK 4 CS 收到发布消息确认

PUBREC 5 CS 发布消息收到

PUBREL 6 CS 发布消息释放

PUBCOMP 7 CS 发布消息完成

SUBSCRIBE 8 C-gtS 订阅请求

SUBACK 9 S-gtC 订阅确认

UNSUBSCRIBE 10 C-gtS 取消订阅

UNSUBACK 11 S-gtC 取消订阅确认

PING 12 C-gtS 客户端发送 PING(连接保活)命令

PINGRSP 13 S-gtC PING命令回复

DISCONNECT 14 C-gtS 断开连接

可变头(Variable header)存在于部分 MQTT 数据包中数据包类型决定

了可变头是否存在及其具体内容

消息体(Payload)存在于部分 MQTT 数据包中表示客户端收到的具体内

中移物联网有限公司 OneNET 开发文档中心

不同类型数据包中可变头和消息体包含关系如下

消息类型 Variabl

e

Header

Payloa

d

CONNECT 有 有

CONNACK 有 有

PUBLISH 有 有

PUBACK 有 无

PUBREC 有 无

PUBREL 有 无

PUBCOMP 有 无

SUBSCRIBE 有 有

SUBACK 有 有

UNSUBSCRIBE 有 有

UNSUBACK 有 无

PING 无 无

PINGRSP 无 无

DISCONNECT 无 无

62 平台支持数据包类型

621 CONNECT(客户端请求与服务端建立连接 client -gt server)

固定头(Fixed Header)

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 - 5 Remaining Length(该字段占用 1-4个字节)

MQTT Packet Type 值为 0001表示该数据包为请求连接数据包

Remaining Length 剩余长度占 1-4字节

可变头(Variable Header)

包含内容如下

Description 7 6 5 4 3 2 1 0

byte

1-2

ProtocolNa

me Length

0 0 0 0 0 0 0 0

0 0 0 0 0 1 0 0

byte

3

lsquoMrsquo 0 1 0 0 1 1 0 1

byte

4

lsquoQrsquo 0 1 0 1 0 0 0 1

中移物联网有限公司 OneNET 开发文档中心

byte

5

lsquoTrsquo 0 1 0 1 0 1 0 0

byte

6

lsquoTrsquo 0 1 0 1 0 1 0 0

Byte

7

Protocol

Level

0 0 0 0 0 0 0 1

Byte

8

Connect

Flag

Use

r

flag

Passwo

rd

flag

WillReta

in

Flag

WillQo

s Flag

WillFl

ag

CleanSessi

on

Flag

Reser

ve

Byte

9-10

KeepAlive

(1) 版本

Protocol Level 必须设置为 4平台只支持协议版本 v 311不支持更老

的版本使用第三方客户端时需要注意选择正确的版本

(2) user flag 与 password flag

平台不允许匿名登陆因此这两个标志位在连接时必须设置为 1否则认为

协议错误平台将会断开连接

(3) Will flag 与 WillretainflagWillQosFlag

Will flag 为 0时WillQosFlag 和 WillRetainFlag 必须为 0Will Flag

为 1时WillQosFlag 只能为 012

1当该设备下一次正常上线后服务器会清除之前的 will 消息(包括

retain 消息)

2如果设备上线时设置了 Will Topic 和 msg且将 WillRetainFlag 设

置为 1只有设备异常断开后服务器才会将该 Will msg 分发给新的 Will

Topic 的订阅者且 Qos 级别以订阅的 Request qos 级别为准

3如果设备上线时设置了 Will Topic 和 msg且将 WillRetainFlag 设

置为 0服务器不会存储该消息当设备异常断开后会将该 Will msg 以设

备设置的 WillQosFlag的 Qos级别进行分发

(4) CleanSessionFlag

若客户端将 clean session 标志位设置为 0当其断开后平台将会保存

sessionsession 需保持的内容包含

客户端订阅的 topic列表

中移物联网有限公司 OneNET 开发文档中心

还未完成确认的 Qos1Qos2级别的 publish消息

客户端保存 session 的内容包含

已经发送到服务端的但还没有收到确认的 Qos1Qos2消息列表

待发送的 Qos0列表

若客户端将 clean session 标志位设置为 1当其断开后平台会清除设备

的订阅列表及未完成确认的 Qos1Qos2 的 publish消息

(5) Reserve

保留位置 0

(6) KeepAlive 保活时间

每个客户端可自定义设置连接保持时间最短 120秒最长 65535 秒

消息体(Payload) Description 是否必须存在 格式

Field1 Client

Identifier

是 2字节字串长度 + utf8字

Field2 UserName 是 2字节字串长度 + utf8字

Field3 UserPassword 是 2字节字串长度 + utf8字

目前平台支持的方式为以后两种

方式 1设备 ID项目 ID鉴权信息(auth_info)

字段设置 消息示例

client_id设置为平台创建设备时的

设备 id

username设置为ldquo项目 IDrdquo

password设置为ldquo鉴权信息

(auth_info)rdquo

client_id=rdquo123rdquo

username=rdquo433223rdquo

password=rdquo注册的鉴权信息rdquo

各字段说明如下

鉴权信息(auth_info)在平台申请设备时填写设备的 auth_info 属性(数

字+字母的字符串)该属性需要产品内具备唯一性(可使用设备出厂唯一编号)

方式 2设备 ID + APIKey(项目 ID也需要填写)

字段设置 消息示例

client_id设置为平台创建设备时的

设备 ID

username设置为ldquo项目 IDrdquo

client_id=rdquo123rdquo

username=rdquo433223rdquo

password=Api Key

中移物联网有限公司 OneNET 开发文档中心

password设置为ldquoAPI鉴权信息

(auth_info)rdquo

项目 ID在平台添加项目时平台生成的 ID

APIKey在平台上创建产品时生成的 APIKey

连接包实例如下

Send one mqtt packet

FixHeader

PacketTag = 16

PacketType = 1

RemainLength = 34

VariableHeaderConnect

protocol_name_len_= 4

protocol_name_= MQTT

protocol_level_= 4

connect_flag_= 192

keep_alive_= 12000

client_id_len_= 8

client_id_= 34764813

usr_name_len_= 6

usr_name_= 150295

password_len_= 4

password_= push

MQTT0x10 0x22 0x00 0x04 0x4D 0x51 0x54 0x54 0x04 0xC0 0x2E 0xE0 0x00 0x08 0x33

0x34 0x37 0x36 0x34 0x38 0x31 0x33 0x00 0x06 0x31 0x35 0x30 0x32 0x39 0x35 0x00

0x04 0x70 0x75 0x73 0x68

Send One Packet Succ

中移物联网有限公司 OneNET 开发文档中心

622 CONNACK (服务端确认连接建立)

Fixed Header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type = 2 0 0 0 0

byte2 - 5 Remaining Length(该字段占用 1-4个字节)

Variable Header

Description 7 6 5 4 3 2 1 0

byte 1 Acknowledge Flags 0 0 0 0 0 0 0 Sp

byte 2 Return Code x x x x x x x x

Sp Session Present Flagsession信息在服务器已保持置 1未保存置

0

返回码说明

返回码 描述

0 成功

1 协议版本错误

2 非法的 clientid

3 服务不可用

4 用户名或密码错误

中移物联网有限公司 OneNET 开发文档中心

5 非法链接(比如 token非法)

失败

如果 connect包不符合协议内容约束则直接断掉连接而不需要发送 conn

ack包

如果鉴权或授权失败回复一个带非 0错误码的 connack包

成功

必须断掉重复的 clientid

执行 cleansession 对应的操作

必须回复一个 connack回复码为 0

开始消息传递并加入 keepalive的监视

PS客户端需要等到服务端的 connack报文才能发送后续的数据包

623 PUBLISH(发布消息 client -gt server)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type DUP f

lag

QoS Level RETAI

N

byte2 - 5 Remaining Length(该字段占用 1-4 个字节)

DUP

QoS2Qos1如果为 0则表示是第一次发送该包如果为 1则表示

为重复发送的包

Qos0DUP 必须为 0

中移物联网有限公司 OneNET 开发文档中心

QoS 指定了该 publish包的 Qos 等级如下

Qos 值 Bit2 Bit1 描述

0 0 0 最多发送一次

1 0 1 至少发送一次

2 1 0 只发送一次

RETAIN 保留标志位如果为 1服务器存储最新一条 RETAIN消息以便

分发给新的订阅者如果 RETAIN为 1Payload 为空服务器分发该消息后会

清空该 topic 下的 RETAIN 消息

PS该版本实现了 Qos0Qos1Qos2

Variable Header

Description 格式 是否必须

Field1 TopicName 2 字节字串长度 + utf8字

Field2 PacketIdent

ifier

2 字节 QoS0否QoS1Qos2是

Payload

内容根据不同业务自定义

624 PUBLISH(发布消息 server -gt client)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type DUP f

lag

Qos Level RETAIN

byte2 - 5 Remaining Length(该字段占用 1-4个字节)

DUP

Qos2QoS1如果为 0则表示是第一次发送该包如果为 1则表示

为重复发送的包

中移物联网有限公司 OneNET 开发文档中心

Qos0DUP 必须为 0

QOS 指定了该 publish包的 qos等级如下

Qos 值 Bit2 Bit1 描述

0 0 0 最多发送一次

1 0 1 至少发送一次

2 1 0 只发送一次

RETAIN如果服务器分发的消息是 RETAIN 消息则将该标志位置 1否则置

0

PS该版本实现 Qos0Qos1Qos2其中服务器分发消息的 Qos级别是以 Clien

t-gtServer 发送的 publish 包的 qos 等级为准非订阅的 topic 的 Qos 等级R

etain 消息是以订阅的 Request Qos 级别进行推送

VariableHeader

Description 格式

Field1 TopicName 2 字节字串长度 + utf8字

Payload

内容根据不同业务自定义

625 PUBACK(收到发布消息确认)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

中移物联网有限公司 OneNET 开发文档中心

626 PUBREC(发布消息收到)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

627 PUBREL(发布消息释放)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

628 PUBCOMP(发布消息完成)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

中移物联网有限公司 OneNET 开发文档中心

byte 1~

2

PacketIdentifier PacketIdentifier

629 SUBSCRIBE(订阅请求)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

Payload

Description 格式

Byte1~

n

TopicName 2 字节字串长度 + utf8字

Byten+

1

Request Qos 服务质量要求(只能为 0

12)

topic 说明

可以包含一个或多个 topic

topic必须是数字英文反斜杠()的组合目前不支持通配符

每个客户端最多订阅 100个 topic

以下 topic 被系统保留使用(客户端不能订阅)

类型 说明

$开头 平台保留

中移物联网有限公司 OneNET 开发文档中心

6210 SUBACK(订阅确认)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

Payload

Description 7 6 5 4 3 2 1 0

byte 1 retcode

返回码说明

返回码 描述

0x00 成功(granted qos = 0)

0x01 成功(granted qos = 1)

0x02 成功(granted qos = 2)

0x80 失败

6211 UNSUBSCRIBE(取消订阅)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

中移物联网有限公司 OneNET 开发文档中心

Payload

Description 格式

Byte1~

n

TopicName 2 字节字串长度 + utf8字

可以包含一个或多个 topic

6212 UNSUBACK(取消订阅确认)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

6213 PING(客户端发送 PING(连接保活)命令)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

NULL NULL

注PING命令无 VariableHeader

中移物联网有限公司 OneNET 开发文档中心

6214 PINGRSP(PING命令回复)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

NULL NULL

注PINGRSP无 VariableHeader

6215 DISCONNECT(断开连接)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

NULL NULL

注DISCONNECT无 VariableHeader

中移物联网有限公司 OneNET 开发文档中心

第七章 设备开发流程

71 连接鉴权

Device Onenet

(Connect)鉴权请求

(ConnAck)鉴权结果

加载session

鉴权

图7-1 连接鉴权

设备向平台发起 connect 请求connect 中携带鉴权信息具体

参见(报文格式参考 621)

平台拿到鉴权信息进行鉴权

鉴权通过后如果 cleansession=0 平台将会加载保存的设备

的一些信息如订阅列表(621中描述)

如果 cleansession=1 设备没有保存信息在平台则不加载设

备相关信息

返回鉴权结果 ConnAck(报文格式参考 621)

72 消息发布

721 数据点上报

设备使用 publish 报文来上传数据点 报文格式如下

中移物联网有限公司 OneNET 开发文档中心

VariableHeader

Field 名称 说明 格式

Field1 TopicName=rdquo$dprdquo $dp 为系统上传数据点

的指令

2字节字串长度 + utf8

字串

Payload

Payload包含真正的数据点内容支持的格式如下

Byte 1 Bit0-5数据类型指示目前支持

Type = 1

Type = 2

Type = 3

Type = 4

Type = 5

Type = 6

Type = 7

Bit6-7 flags 根据具体类型不同意义

Type6Type7这两种需要填写时间戳的数据类型

如果填入了时间戳则须将 bit7 置 1否则置 0(即

忽略数据类型说明中的日期时间相关字段)

0 0 0 0 0 0 0 1

Byte 2 根据数据类型指示不同

Byte n

中移物联网有限公司 OneNET 开发文档中心

数据类型 1(type == 1)格式说明

数据类型 2(type == 2)格式说明

Byte 1 数据点类型值1 1JSON 格式 1 字符串 0 0 0 0 0 0 0 1

Byte 2 指示后面 json 字符串长度

固定两字节长度高位字节值为 0x00

Byte 3 固定两字节长度低位字节值为 0x41

Byte 4

ldquodatastreamsrdquo[ 可以同时传递多个数据流

ldquoidrdquordquotemperaturerdquo

ldquodatapointsrdquo[数据流可以有多个数据点

rdquoatrdquordquo2013-04-22 222222rdquo可选

rdquovaluerdquo 365用户自定义

]

ldquoidrdquordquolocationrdquo

ldquodatapointsrdquo[hellip]

hellip

]

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

Byte n

Byte 1 数据点类型指示type=2 二进制数据 0 0 0 0 0 0 1 0

Byte 2 指示后面 json 字符串长度

固定两字节长度-高位字节值为 0x00

Byte 3 固定两字节长度-低位字节值为 0x10

Byte 4

rdquods_idrdquordquoimagerdquo 创建数据流时定义的 ID(必填)

ldquoatrdquordquo2014-10-25 122323rdquo 时间(可选)

rdquodescrdquo字符串或 json 对象对该数据的描述(可选)

hellip

Byte n

Byte n+1 指示后面二进制数据长度

固定四字节长度-第 1 字节(最高)值为 0x00

Byte n+1 固定四字节长度-第 2 字节值为 0x00

Byte n+2 固定四字节长度-第 3 字节值为 0x01

Byte n+3 固定四字节长度-第 4 字节(最低)值为 0x00

Byte n+4 该域目前最大支持 3M

中移物联网有限公司 OneNET 开发文档中心

数据类型 3(type == 3)格式说明

数据类型 4(type ==4)格式说明

hellip 本例中的该域 256 字节数据

Byte n+260

Byte 1 数据点类型指示type=3 JSON 格式 2 字符串 0 0 0 0 0 0 1 1

Byte 2 指示后面字符串长度

固定两字节长度高位字节值为 0x00

Byte 3 固定两字节长度低位字节值为 0x46

Byte 4 通用格式

ldquodatastream_id1rdquordquovalue1rdquo

ldquodatastream_id2rdquordquovalue2rdquo

hellip

示例

ldquotemperaturerdquo225rdquohumidityrdquordquo952rdquo

hellip

hellip

hellip

hellip

Byte n

Byte 1 数据点类型指示type=4 JSON 格式 3 字符串 0 0 0 0 0 1 0 0

Byte 2 指示后面字符串长度

固定两字节长度高位字节值为 0x00

Byte 3 固定两字节长度低位字节值为 0x46

Byte 4 通用格式

ldquodatastream_id1rdquoldquodatetime1rdquordquovalue1rdquo

ldquodatastream_id2rdquo ldquodatetime2rdquordquovalue2rdquo

hellip

示例

ldquotemperaturerdquoldquo2015-03-22 223112rdquo225

hellip

hellip

hellip

hellip

Byte n

中移物联网有限公司 OneNET 开发文档中心

数据类型 5(type == 5)格式说明

数据类型 6(type == 6)格式说明

Byte 1 数据点类型指示type=5 自定义分隔符 0 0 0 0 0 1 0 1

Byte 2 指示后面字符串长度

固定两字节长度高位字节值为 0x00

Byte 3 固定两字节长度低位字节值为 0x41

Byte 4 消息中最前面两字节为用户自定义的域中分隔符和域间分隔符

这两个分隔符不能相同比如采用逗号作为域中分隔符分号作

为域间分隔符的格式如下

feild0feild1hellipfeildn

其中每个 field 格式支持 3种

field 格式 1 3 个子字段分别是数据流 ID时间戳数据值

通用格式

Datastream_iddatetimevalue

field 格式 2 2 个子字段分别是数据流 ID 和数据值省略时

间戳通用格式

Datastream_idvalue

field 格式 3 1 个子字段省略了数据 ID 和时间戳只传输数

据值平台将用该域(feild)所在的位置号(从 0 开始)作为数据

流 ID通用格式

value

示例

(1)temperature2015-03-22

223112225102pm258910

(2)temperature2015-03-22

223112225102pm258910

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

Byte n

Byte 1 数据类型指示type=6 带时间自定义分隔符 0 0 0 0 0 1 1 0

Byte 2 年(后两位)例如 2016 年则该字节为 16 0 0 0 1 0 0 0 0

Byte 3 月(1-12)

Byte 4 日(1-31)

Byte 5 小时(0~23)

Byte 6 分钟(0~59)

Byte 7 秒(0~59)

Byte 8 指示后面字符串长度

固定两字节长度高位字节值为 0x00

Byte 9 固定两字节长度低位字节值为 0x41

Byte 10 消息中最前面两字节为用户自定义的域中分隔符和域间分隔符

具体格式见 type=5 说明若相关域中没有时间戳则采用本类

hellip

中移物联网有限公司 OneNET 开发文档中心

数据类型 7(type == 7)格式说明(每次最多 500个数据流的浮点数)

hellip 型的默认时间戳当作数据点的时间来存储

Byte n

Byte 1 Bit0-5 数据类型指示type=7 可离散浮点数数据流

Bit6保留置 0

Bit7 时间指示位1携带 6字节时间

1 0 0 0 0 1 1 1

Byte 2 年(后两位)例如 2016 年则该字节为 16 0 0 0 1 0 0 0 0

Byte 3 月(1-12)

Byte 4 日(1-31)

Byte 5 小时(0~23)

Byte 6 分钟(0~59)

Byte7 秒(0~59)

Byte 8 数据流名称(取值范围 1-65535)

高位字节值为 0x00

Byte 9 低位字节值为 0x01

Byte10 数据流个数(取值范围 1-500)

高位字节值为 0x00

Byte11 低位字节值为 0x01

Byte 10 4 字节 float 类型低位在前高位在后

Byte 11

Byte 12

Byte 13

Byte n 数据流名称(取值范围 1-65535)

高位字节值为 0x24

Byte n+1 低位字节值为 0x37

Byte n+2 数据流个数(取值范围 1-500)

高位字节值为 0x01

Byte n+3 低位字节值为 0x00

Byte n+2 4 字节 float 类型低位在前高位在后

Byte n+4

Byte n+5

Byte n+6

中移物联网有限公司 OneNET 开发文档中心

7211 Qos0(Client-gtServer)

Device OneNet

Publish $dp(Qos0)

存储

图7-2 QoS连接图

设备发布 Qos0 消息(上报数据点)

平台收到上报数据点后保存起来

7212 Qos1(Client-gtServer)

Device OneNet

Publish $dp(Qos1)

存储

PubAck

图7-3 Qos1连接图

设备发布 Qos1 消息(上报数据点)

中移物联网有限公司 OneNET 开发文档中心

平台收到上报数据点后保存起来

平台给设备回复相应的 PubAck (报文格式参考 625)

7213 Qos2(Client-gtServer)

Device OneNet

Publish $dp(Qos2)

存储

PubRec

PubRel

PubComp

图7-4 Qos2连接图

设备发布 Qos2 消息(上报数据点)

平台收到上报数据点后保存起来

平台给设备回复相应的 PubRec报文

设备需回复平台 PubRel报文如超时不回平台则会断开相应连接

平台给设备回复 PubComp报文

注数据点上报功能不支持 Retain 特性

中移物联网有限公司 OneNET 开发文档中心

722 平台命令(下发amp回复)

7221 命令下发

平台使用 publish 报文来下发平台指令 报文格式如下

FixHeader

参考 623

VariableHeader

Field 名称 说明 格式

Field1 TopicName=rdquo$creqcmduuidrdquo $creq为系统下发

Cmd 的 指 令

cmduuid为该条指

令的 uuid

2字节字串长度 +

utf8字串

Payload

Payload包含真正的指令内容

72211 Qos0(Server-gtClient)

DeviceOneNet

Publish $creq(Qos0)

图7-5 Qos0命令下发

命令下发

平台向设备发送 topic为$creq的消息(该 topic为平台命令)

中移物联网有限公司 OneNET 开发文档中心

设备收到 topic 为$creq 的 topic 时需将其作为平台下发的指令来处

注目前命令下发以 Qos0级别进行推送

7222 命令回复

设备使用 publish 报文来回复平台指令 报文格式如下

FixHeader

参考 623

VariableHeader

Field 名称 说明 格式

Field1 TopicName=rdquo$crspcmduuidrdquo $crsp为系统处理

设备回复 cmd 的

指令cmduuid为

该条指令的 uuid

2字节字串长度 +

utf8字串

Payload

Payload包含真正回复的指令内容

72221 Qos0(Client-gtServer)

DeviceOneNet

Pulish $crsp(Qos0)

图7-6 Qos0下发命令

中移物联网有限公司 OneNET 开发文档中心

72222 Qos1(Clientlt-gt Server)

DeviceOneNet

Pulish $crsp(Qos1)

Puback

图7-7 Qos1下发命令

如果设备回复响应时以 Qos1回复则平台需要给设备回复一个 Puback 报文

72223 Qos2(Clientlt-gt Server)

DeviceOneNet

Pulish $crsp(Qos2)

PubRec

PubRel

PubComp

图7-8 Qos2下发命令

如果设备回复响应时以 Qos2回复则

1平台需回复设备一个 PubRec报文

中移物联网有限公司 OneNET 开发文档中心

2设备在收到 PubRec后需向平台回复 PubRel报文

3平台收到 PubRel 报文后向设备回复 PubComp报文

73 创建 Topic

Device OneNet

HTTP 请求

HTTP 响应

图7-9 创建Topic

设备通过发送 HTTP请求进行 topic 的创建操作

平台收到请求后创建 topic 并返回结果

请求及响应定义如下

HTTP方法 POST

URL httpapihecloudscommqtttopic

HTTP头部 api-keyxxxx-ffff-zzzzz必须 master key

URL参数

HTTP body

内容

ldquonamerdquordquoxxxxxxrdquo topic 名字只能由英文下划线反斜杠组成最长

1024个字符同一产品下 topic name 不重复

成功返回

errno 0

errorldquosuccrdquo

说明 每个产品最多 100个 topic

中移物联网有限公司 OneNET 开发文档中心

74 订阅

Device OneNet

Subscribe

Suback

更新设备订阅列表

图7-10 订阅

设备发起订阅请求(报文格式参考 629)

平台收到请求后更新 topic列表

平台给设备回复 SubAck (报文格式参考 6210)

注subscribe 的 request qos级别可以为 012

75 取消订阅

Device OneNet

UnSubscribe

UnSuback

更新设备订阅列表

图7-11取消订阅

中移物联网有限公司 OneNET 开发文档中心

设备发起取消订阅请求 (报文格式参考 6211)

平台收到请求后更新 topic 列表

平台给设备回复 UnSubAck (报文格式参考 6212)

76 推送设备 Topic

761 Publish 报文推送

Qos0设备使用 Qos 级别为 0的 Publish报文来进行推送

Device OneNet

Publish(Qos0)

Device

以Qos0 Publish到订阅设备

图7-12 Qos0推送

设备发起推送 topic请求(以 Qos0级别)

平台收到请求后将 topic以 Qos0级别推送到相关订阅设备(支持离线设

备推送)

平台不返回 PubAck或 PubRec 等报文

Qos1

设备使用 Qos级别为 1的 publish报文来推送 Topic

中移物联网有限公司 OneNET 开发文档中心

Device OneNet

Publish(Qos1)

PubAck

Device

以Qos1 Publish到订阅设备

设备回复平台 PubAck

图7-13 Qos1发布

设备发起推送 topic请求(以 Qos1级别)

平台收到请求后将 topic以 Qos1级别推送到相关订阅设备(支持离线设

备推送)

平台返回 PubAck 报文

Qos2

设备使用 Qos级别为 2的 publish报文来推送 Topic

中移物联网有限公司 OneNET 开发文档中心

Device OneNet

Publish(Qos2)

PubRec

Device

以Qos2 Publish到订阅设备

PubRec

PubRel

PubComp

PubRel

PubComp

图7-14 Qos2推送

设备发起推送 topic请求(以 Qos2级别)

平台收到请求后回复 PubRec报文

设备收到 PubRec后需回复 PubRel报文 (如超时不回复平台会断开与设

备的连接)

平台收到 PubRel 报文后回复 PubComp 给设备

平台在回复 PubComp 后会以 Qos2 级别推送到相关订阅设备(支持离线设

备推送)

设备需回复 PubRec报文 (如超时不回复平台会断开与设备的连接)

平台发送 PubRel 报文给设备

设备需回复 PubComp(发布完成)

Publish报文的格式如下

FixHeader

参考 623

中移物联网有限公司 OneNET 开发文档中心

VariableHeader

Field 名称 说明 格式

Field1 TopicName 填写设备订阅的 topic 2字节字串长度 + utf8

字串

Payload

Payload为设备自定义内容

762 HTTP 请求推送

Device OneNet

HTTP 请求

HTTP 响应

Device

Publish到订阅设备

图7-15 HTTP请求

设备以 HTTP 的方式发起推送 topic 请求

平台收到请求后将 topic推送到相关订阅设备 (目前只支持在线推送)

平台返回推送结果

请求及响应定义如下 HTTP方法 POST

URL httpapihecloudscommqtt

HTTP头部 api-keyxxxx-ffff-zzzzz必须 master key

URL参数 topic=ldquoXXXXXXrdquo必选在发送 mqtt协议的 topic 必填

HTTP body内容 用户自定义 Json 或二进制数据(小于 64K)

成功返回

errno 0

errorldquosuccrdquo

中移物联网有限公司 OneNET 开发文档中心

77 离线 Topic

推送 Topic只针对在线设备进行 topic 消息的推送离线设备不会收到订阅

的 topic 的消息离线 Topic则会将该消息推送给在线以及离线设备

1 如果设备在上线时设置了 clean session flag服务端会删除其订阅的

topic及相关的离线 topic消息

2 如果设备没有设置 clean session flag如果有与该设备相关的离线

topic消息则在鉴权成功后将离线消息推送给设备

3 遗嘱消息(will msg)只会推送给订阅了该 will topic的在线的设备离

线设备不会收到

4 离线消息的有效期默认为 2 天(暂不支持用户设定有效期)服务器只会

推送在 2天内的最近 10 条消息

78 数据点订阅

数据点订阅同一产品下的设备可以订阅其他设备的数据点订阅的 topic

格式为deviceid数据流名称即

被关注的设备在上传了该数据流名称的数据点后订阅了该 topic的其他设备都

会收到上传的数据点

1 AB设备的 deviceid分别为 92779278

2 A 设备订阅了名为92789527 的 topic(9278 为设备 B 的 id9527 为 B

设备上传的数据流名称)

3 B 设备上传了名为 9527的数据流(数据点为 11 1578hellip)

4 A 设备会收到多条(取决于设备 B 上传的数据点的个数)推送的 topic 名

为92789527 的 publish消息消息的 payload中则包含设备 B 上传的数据

注目前支持订阅的数据点的类型为 Type1~Type7(详见 721节)

中移物联网有限公司 OneNET 开发文档中心

第八章 常见问题 FAQ

用户在基于 OneNET 平台进行产品开发的过程中可能会遇到各种各样的问

题开发过程中遇到的问题一方面可以参考 OneNET 文档中心的文档或者本文

档前几个章节的内容另一方面用户可以参考本章节总结的常见问题希望这些

文档能对用户在开发过程中有一定的指导和帮助

本章将分三个小节对用户在开发产品过程中可能遇到的问题进行梳理分别

为终端设备接入 OneNET平台的常见问题API调用的常见问题和 OneNET平台

的能力

81 终端设备接入 OneNET 平台的常见问题

序号 问题描述 原因分析 解决方法

1

2

3

4

5

6

7

82 API 调用的常见问题

序号 问题描述 原因分析 解决方法

1

2

3

4

5

6

7

8

9

中移物联网有限公司 OneNET 开发文档中心

83 使用 OneNET平台遇到的常见问题

序号 问题描述 原因分析 解决方法

1

2

3

4

5

6

7

8

Page 13: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com

中移物联网有限公司 OneNET 开发文档中心

产品创建完成后页面弹出ldquo创建产品成功rdquo如图 3-5所示点击ldquo立即

添加设备rdquo显示如图 3-6所示界面依次填写ldquo设备名称rdquo鉴权信息设备

名称自定义鉴权信息用于平台对终端设备鉴权每台设备具有唯一性建议设

置为产品出厂编号方便管理鉴权信息需写入设备

图3-3 创建产品页面

中移物联网有限公司 OneNET 开发文档中心

图3-4 创建产品页面

图3-5 创建产品成功页面

中移物联网有限公司 OneNET 开发文档中心

图3-6 添加设备页面

322 终端设备软硬件初始化

终端设备在上电以后需要完成设备的软硬件初始化硬件初始化包括各个

硬件模块的上电处理器的寄存器初始化工作模式初始化等等软件初始化包

括基础通信套件初始化应用接口初始化应用程序初始化等等

323 终端创建设备及资源

终端设备创建设备(device_id)配置产品 ID鉴权信息注册码连接

服务器 IP端口号等信息创建成功后与平台建立登陆连接连接成功后即可向

平台上报数据点

324 登录 OneNET平台

终端设备的基础通信套件完成初始化以及设备资源创建完成后可向

OneNET平台发送登陆请求返回登录结果如果参数错误或者登录超时平台会

返回登录失败如果验证通过平台会返回登录成功

若终端设备登录平台成功设备名称左边的圆形图标会由灰色(离线状态)

变成绿色(在线状态)如图 3-7所示

中移物联网有限公司 OneNET 开发文档中心

图3-7 平台侧设备状态显示

325 设备数据点上报

终端设备与平台成功建立连接后设备使用 publish 报文向平台上报数据点

平台收到数据点后保存到对应数据流下方便应用查阅数据点上报格式以及类型详见

721

图3-8 平台侧收到设备数据流显示

326 创建应用

用户可以利用上传的数据创建相关的应用发布直观的展示页面目前在平台应用孵化

器中提供了曲线图柱状图表盘物体位置图片和开关等应用

在产品详情页面点击ldquo应用管理rdquo进入应用管理主界面如下图

中移物联网有限公司 OneNET 开发文档中心

图3-9 应用管理模块

点击ldquo创建应用rdquo输入应用名称点击ldquo创建rdquo如下图

图3-10 新应用创建

保存成功后点击编辑按键进入应用编辑页面如下图

中移物联网有限公司 OneNET 开发文档中心

图3-11 应用编辑入口

图3-12 应用编辑界面

在应用编辑页面中使用左侧的控件进行应用编辑此例中我们选择表盘控件来显示

刚刚上传的数据点击表盘控件如下图所示

中移物联网有限公司 OneNET 开发文档中心

图3-13 表盘控件添加

在右侧的属性中选择设备以及数据源(及刚刚上传的数据流)如下图

图3-14 表盘控件数据流绑定

在确定好数据流之后可以看到表盘回显示成我们添加的数据的值其他的

刷新频率以及表盘显示样式读者可以自行更具需求加以修改

完成应用编辑之后点击右上角保存按钮退出应用编辑

在应用管理页面点击该应用即可查看编辑好的应用页面

中移物联网有限公司 OneNET 开发文档中心

图3-15 保存应用

图3-16 应用查看与分享

该应用可以通过共享ldquo发布链接rdquo的方式将该应用共享给他人

33 设备批量接入

单个设备可以通过平台的开发者中心添加设备的方式进行创建若用户有多

个设备直接与平台 TCP连接的终端通过手动添加需耗费大量时间人力OneNET

中移物联网有限公司 OneNET 开发文档中心

为大批量接入用户提供 3种批量创建设备的方案

331 平台设备批量复制

此种方式为选择某个设备作为复制的模板通过导入 EXCEL的方式进行设备

复制厂商可以在小批量测试时使用该功能

在设备列表中点击查看详情

图3-17 设备批量接入

在设备详情页面点击批量导入设备信息

中移物联网有限公司 OneNET 开发文档中心

图3-18 导入设备信息

点击批量复制

图3-19 批量复制

中移物联网有限公司 OneNET 开发文档中心

目前提供三种批量创建的方式 excel 导入的方式为主要接入方式选择

excel导入点击下载模板

图3-20 快速导入

图3-21 Excel导入

打开下载下来的 excel模板表中的 titledesctags等均为将要批量导

入的设备的数据其中的 title 和 auth_info 为必填选项title 为设备名

中移物联网有限公司 OneNET 开发文档中心

auth_info对应设备的鉴权信息

图3-22 Excel格式

填写 3个设备信息

图3-23 Excel内容

三个设备的 title和 auth_info都一样均为 20170808000012017080800002

2017080800003保存该表格点击ldquo点击上传rdquo上传保存好的 excel 文件

点击ldquo确定导入批量rdquo

中移物联网有限公司 OneNET 开发文档中心

图3-24 导入上传

图3-25 确认创建

可以看到在原设备目录下新增了 3个设备其名称分别为 2017080800001

20170808000022017080800003

中移物联网有限公司 OneNET 开发文档中心

图3-26 批量创建的设备

点击设备详情可以看到设备目录下各个设备的鉴权信息与表格中所填

写的内容一致

图3-27 设备ID及鉴权信息

至此完成了通过批量设备复制的方式完成设备批量创建的过程用户如果

要使用这个功能需要将自己终端的出厂序列号整理到这个 excel表中然后利

中移物联网有限公司 OneNET 开发文档中心

用上传表格的方式进行批量创建

332 应用平台调用新增设备 API

OneNET 提供了创建设备的 API接口

图3-28 新增设备API接口

其中的 auth_info 参数对应着设备的鉴权信息通过调用此 API 接口可以

实现在平台上新增设备的功能用户如果有自己的第三方应用平台进行设备管理

可以通过多次调用此接口的方式进行设备的批量创建在调用接口时需要确保每

次调用的 auth_info 参数对应着自己的每一个终端不同的出厂序列号

333 终端调用注册 API

API 实际是 HTTP 协议的通信协议终端也可以通过封装 HTTP 包发送注册

中移物联网有限公司 OneNET 开发文档中心

设备请求的方式调用 API

终端调用注册 API 创建设备并接入的流程如图 3-29所示

平台

TCP连接协议接入机

创建产品

发送连接报文

连接应答

数据应答

发送数据报文

生成连接报文

设备

发送下行命令 下发命令

解析下行命令

生成存储数据报文

解析连接应答

解析数据应答

必要流程

可选流程

存储到数据流 数据源 创建应用

心跳应答

发送心跳报文生成心跳报文

解析心跳应答

平台操作

设备操作

利用设备本身的sn和产品的设备注册码生成注册报文

TCP连接API服务器

发送注册报文

注册应答

解析设备ID

创建设备

设备开机

读取硬件中烧录的设备编号(sn)

图3-29 终端调用注册API接入流程

1) 创建产品

重要参数产品 ID注册码产品 APIKey(见附录一)

2) 生成并发送注册报文

每一个用户终端中都有厂商烧录的唯一出厂序列号(sn)终端上电

之后应该首先读取自己的 sn然后通过 1)中的注册码和 sn 一起组成注

册报文

注册报文格式如下例

POST httpapihecloudscomregister_deregister_code=6TM7OkhNsTjATvFx HTTP11

Host apihecloudscom

Content-Length 48

中移物联网有限公司 OneNET 开发文档中心

sn02136616511001titletestdevice0001

其中

6TM7OkhNsTjATvFx 为产品注册码

02136616511001 是本例中模拟的设备唯一编号

testdevice0001 是本例中模拟的设备名

若上传的数据格式以及参数鉴权均正确则平台会返回设备创建成功

返回设备 ID以及该设备对应的设备 api-key

HTTP11 200 OK

Date Wed 09 Aug 2017 064821 GMT

Content-Type applicationjson

Content-Length 95

Connection keep-alive

Server Apache-Coyote11

Pragma no-cache

errno0datadevice_id11142371keyq9Mw0zqiAPjTwqfyCk2mWrUi8=errorsucc

3) 在步骤 2)完成之后平台上的设备就已经成功创建了终端需要

重新 TCP连接到对应协议的服务器上完成设备连接(与设备进行映射)以

及上传数据的操作

34 设备 ID 与产品序列号

通过 OneNET构建的物联网系统中有两套比较重要的编码设备 ID与产品序列号

(SN)其中

产品序列号是由厂商指定的在厂商的产品范围内是保持唯一的在出厂前烧写到每

一个终端中通常包含在与平台通信的数据中并以条形码的方式贴在产品的包装上用

于从用户的角度区分每一个独立的终端

设备 ID是在平台创建设备时由 OneNET分配的平台范围内唯一的编号应用于第三

方平台调用 OneNET API时使用

在创建设备时OneNET平台需要用户以设备 sn为参数进行设备创建成功之后平

台会分配一个设备 ID这样 OneNET内部就有了一个 sn-设备 ID的映射关系

终端登陆使用的鉴权信息是出厂时烧写好的 sn鉴权通过之后平台可以将该终端

上传是数据放到对应的设备中

上层应用通过创建设备 API或者查询设备 API建立 sn-设备 ID映射表在需要操作

某一设备时首先可以获取的是终端的 sn号(因为对用户是可见的)通过映射表获取设

中移物联网有限公司 OneNET 开发文档中心

备 ID然后再通过 API访问 OneNET平台上的对应设备

两套编码在物联网系统中的应用位置如下图所示

物联网应用

OneNET

终端

(烧写sn)

HTTP API 以设备ID为参数进行API访问

接入协议以sn为鉴权参数进行设备连接

设备

设备名

设备ID

设备sn

设备标签

sn 设备ID

snmdash设备ID映射表

中移物联网有限公司 OneNET 开发文档中心

第四章 第三方应用开发

第三方应用与 OneNET 平台的业务逻辑关系如图 4-1 所示第三方应用与

OneNET平台之间通过 HTTPS请求应答的方式实现数据交互OneNET 平台为第三

方应用提供封装好的 API 接口应用平台通过调用这些 API 接口完成对 OneNET

平台的读写执行以及设备管理请求然后 OneNET 平台会将相应的指令请求发送

到终端设备OneNET 平台收到终端设备响应的数据及设备信息后会将数据及

设备信息推送到应用平台完成应答

下面将分别介绍第三方应用接入 OneNET 平台的步骤OneNET平台提供的数

据推送功能以及 OneNET 平台为第三方应用封装好的 API接口

图4-1 第三方应用与OneNET平台的逻辑关系

41 第三方应用接入 OneNET 平台

第三方应用与 OneNET平台实现数据交互的前提是已经建立连接第三方应

用接入 OneNET平台的开发流程如图 4-2所示包括三个步骤

(1) 在 OneNET 平台创建了设备该设备有对应的真实设备且能正常上报

数据

(2) 用户已经开发并部署了 OneNET平台验证接入的程序

(3) 在 OneNET 平台正确配置了第三方应用数据接收的地址(URL)

Token以及其他参数

中移物联网有限公司 OneNET 开发文档中心

在确保上述第(1)步已经实现的基础上下面将分别讲述第(2)步和第

(3)步的实现过程

图4-2 数据推送的开发流程

412 第三方应用平台接入验证程序

第三方应用平台接入验证程序工作流程如下所述当 OneNET 平台完成对第

三方开发平台的配置后会向第三方开发平台发起 URLampToken验证接入验证程

序对平台发送的验证参数进行验证验证通过后第三方开发平台会向 OneNET

平台返回验证消息当 OneNET 平台收到验证消息后说明第三方开发平台与

OneNET平台已建立连接

目前 OneNET平台为第三方应用平台提供接入验证程序的 SDK有 Javaphp

Nodejs和 C四个版本

SDK 下载地址httpsopeniot10086cndocart432html118 -ldquo数

据推送rdquo

413 OneNET 平台配置第三方应用平台

在 OneNET平台对第三方应用平台的配置界面如图 4-3所示

URL第三方开发平台的地址

Token可以自定义用于第三方开发平台接入平台握手验证

消息加解密方式有明文模式和安全模式当启用安全模式后平台端需要

用户自定义 AESKey 或者由平台随机生成在应用程序中使用该 AESKey 解密消

中移物联网有限公司 OneNET 开发文档中心

推送时间限制(秒)和推送数据限制(个)设置ldquo推送时间限制rdquoldquo推送数

据限制rdquo可以实现批量推送数据减少服务器压力当满足ldquo推送时间限制rdquo和

ldquo推送数据限制rdquo要求后OneNET 将给第三方推送数据如果没有设置ldquo推送

时间限制rdquo和ldquo推送数据限制rdquo将默认数据实时推送

图4-3 第三方开发平台的配置界面

当用户成功在 OneNET 平台配置了第三方开发平台服务器地址后点击ldquo提

交rdquo按钮后OneNET 平台会向第三方应用平台发起 URLampToken 验证请求验证

通过且收到第三方返回的验证消息后则第三方应用平台与 OneNET 平台已建立

连接之后OneNET 平台在收到设备数据时会将设备数据推送到已配置的第三

方应用平台

用户数据接收服务程序接收到 OneNET平台发送的 ldquoURLampTokenrdquo验证请求

请求的格式形如httpipporttestmsg=xxxampnonce=xxxampsignature=xxx

蓝色字体部分为用户在 OneNET平台配置的 URL常规的验证流程如下

(1)在请求中获取参数ldquononcerdquoldquomsgrdquo的值将ldquotokenrdquo(此为页面

配置参数 token的值)ldquononcerdquoldquomsgrdquo的值计算 MD5(token+nonce+msg)

加密值并且编码为 Base64字符串值

中移物联网有限公司 OneNET 开发文档中心

(2)将上一步中 Base64字符串值通过 URL Decode 计算后的值与请求参数

ldquosignaturerdquo的值进行对比如果相等则表示 token验证成功

(3)如果 token 验证成功向 OneNET 平台返回ldquomsgrdquo参数值否则返回

其他值

说明如果用户不想验证 Token 的有效性可以忽略以上步骤并直接向

OneNET平台返回ldquomsgrdquo参数值

42 OneNET 平台数据推送

平台以 HTTPS POST 请求形式向第三方应用平台注册地址推送数据推送数

据相关信息以 JSON 串的形式置于 HTTPS请求中的 body部分

第三方应用平台在接收数据时会接收到数据的明文消息或者密文消息

明文消息中以ldquotyperdquo的数值区分不同的消息而密文消息与明文消息的区别

是ldquomsgrdquo部分经过了加密处理下面将分别对明文消息密文消息以及消息相

关字段和密文的加密算法进行说明

421 明文消息

明文消息有两种消息类型分别为数据点消息和设备上下线消息而数据点

消息又分为单条数据点消息和数据点消息批量形式数据点消息批量形式中的不

同数据点是以不同时间戳区分的

(1)数据点消息(type=1)

msg

type 1

dev_id 2016617

ds_id datastream_id

at 1466133706841

value 42

msg_signature message signature

nonce abcdefgh

(2)数据点消息批量形式(type=1)

msg [

type 1

dev_id 2016617

ds_id datastream_id

中移物联网有限公司 OneNET 开发文档中心

at 1466133706841

value 42

type 1

dev_id 2016617

ds_id datastream_id

at 1466133706842

value43

]

msg_signature message signature

nonce abcdefgh

(3)设备上下线消息(type=2)

msg

type 2

dev_id 2016617

status 0

login_type 1

at 1466133706841

msg_signature message signature

nonce abcdefgh

422 密文消息

密文消息中的ldquoenc_msgrdquo是由明文消息中的ldquomsgrdquo采用 AES 加密算法而

enc_msgxxxx

msg_signature

message signature

nonceabcdefgh

423 消息相关字段说明

表4-1 消息相关字段说明

字段 字段说明

type 标识数据类型当前版本范围[15]

dev_id 设备 ID

ds_id 公 开 协 议 中 的 数 据 流 ID 其 格 式 为

objectID_instanceID_resourceID

at 平台时间戳单位 ms

value 具体数据部分为设备上传至平台或触发的相关

数据

中移物联网有限公司 OneNET 开发文档中心

status 设备上下线标识

0-下线 1-上线

login_type

设备登陆协议类型

1EDP 2nwx 3JTEXT 5JT808 6

MODBUS 7MQTT 8gr2010NB-IoT

cmd_type

命令响应的类型

1设备收到 cmd的 ACK 响应信息 2设备收到

cmd的 Confirm响应信息

cmd_id 命令 ID

msg_signatur

e 消息摘要

nonce 用于计算消息摘要的随机串

enc_msg 加密密文消息体对明文 JSON串(msg字段)的

加密

424 加密算法详述

平台基于 AES算法提供加解密技术具体阐述如下

EncodingAESKey 即消息加解密 Key 的 BASE64编码形式长度固定为 43

个字符从 a-zA-Z0-9共 62个字符中选取由服务开启时填写后

也可申请修改

AES密钥计算为 AESKey=Base64_Decode(EncodingAESKey + ldquo=rdquo)

EncodingAESKey 尾部填充一个字符的ldquo=rdquo 用 Base64_Decode 生成 32

个字节的 AESKey

AES采用 CBC 模式秘钥长度为 32 个字节(256位)数据采用

PKCS7填充 初始化 iv向量取秘钥前 16字节 PKCS7K为秘钥字

节数(采用 32)buf为待加密的内容N为其字节数Buf 需要被填

充为 K的整数倍在 buf的尾部填充(K-NK)个字节每个字节的内容

是(K- NK)具体详见toolsietforghtmlrfc2315

BASE64采用 MIME格式字符包括大小写字母各 26个加上 10个数

字和加号ldquo+rdquo斜杠ldquordquo一共 64个字符等号ldquo=rdquo用作后缀填

出于安全考虑平台网站提供了修改 EncodingAESKey的功能(在

EncodingAESKey 可能泄漏时进行修改对应上第三方平台申请时填写

的接收消息的加密对称密钥)所以建议保存当前的和上一次的

中移物联网有限公司 OneNET 开发文档中心

EncodingAESKey若当前 EncodingAESKey 生成的 AESKey解密失败则

尝试用上一次的 AESKey的解密

平台的加密消息部分为 enc_msg= Base64_Encode( AES_Encrypt

[random(16B)+msg_len(4B)+msg] )即以 16字节随机字节串拼接 4字

节表示消息体长度的字节串(此处 4 字节长度表示为网络字节序)再加

上消息本身的字节串作为 AES加密的明文再以 AES算法对明文进行加

密生成密文最后对密文进行 BASE64 的编码操作生成加密消息体

对加密消息体的解密流程为1)首先进行加密消息体的 BASE64 解码操作

aes_msg=Base64_Decode(enc_msg)2)对获取的解码内容以 AES 算法进行解密

操作获取明文部分plain_msg=AES_Decrypt(aes_msg)解密中使用的秘钥由

EncodingAESKey 计算得来使用的初始化 iv 向量为计算出的 aes 秘钥的前 16

字节3)去掉 plain_msg 的前 16 字节再以前 4 字节取出消息体长度根据消

息体长度获取真实的消息部分(推荐以消息体长度获取真实消息以兼容

plain_msg 未来可能出现的结构变更)表示加密传输的数据后两字段与明文

传输一致

43 API 接口

第三方开发平台应用层通过 Rsetful API 的方式和 OneNET平台进行交互对

接实现命令的下发数据的读写以及相关业务的交互

针对 MQTT 协议目前主要开发了以下 API 用来实现第三方开发平台向

OneNET平台请求读写执行以及设备管理请求具体见下表 4-2下面分别对每一

种 API进行说明

表4-2 API功能说明

API 类别 操作对象 API名称

需要终端响应 只需平台响应

设备

注册

更新设备注册属性

新增

更新

精确查询单个设备

中移物联网有限公司 OneNET 开发文档中心

模糊查询设备

批量查询设备状态

删除

数据流

新增

更新

查询单个数据流

查询多个数据流

删除

数据点

新增

查询

二进制数

新增

查询

触发器

新增

更新

查询单个触发器

模糊查询触发器

删除

触发数据内容

命令

发送命令

查询命令状态

查询命令相应

查询设备历史命令

视频能力 获取播放地址

APIKEY

新增

更新

查看

删除

消息订阅

按 Topic发送命令

查询订阅指定 Topic设备的列表

查询设备订阅的 Topic列表

删除产品的 Topic

查询产品的 Topic

中移物联网有限公司 OneNET 开发文档中心

432 设备

4321 注册

表4-3 设备注册

HTTP方法 POST

URL apihecloudscomregister_de

URL参数 register_code=6TM1OkhNsTjATvFx 设备注册码(必填)

HTTP内容

(示例)

sn 2015031401421 设备唯一标识 string类型最长 512字符

mac C89346DA4373 设备唯一 mac标识最长 32字符

title myedpdevice 设备名(可选) 最长 32个字符

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

keyQ1VdWoEvdkCye=d1=HcCSP6LvCw= 新设备 apikey

device_id 325018 设备 ID

说明

1 响应消息中 errno 表示错误码error 表示错误原因如果创建设备失

败则没有 data字段

2 snmac一定要必填其中一个而且只可以传一个用于鉴权就是设备

新增中的 auth_info

3 此接口根据产品设置的不同默认 allow_dup=true可以生成新设备及

key或获取原有设备及 key见下表

表4-4 对应表

产品允许重复 sn 在产品中已存在 sn 在产品中不存在

allow_dup=true 是 sn 对应的设备 id 和 key 新的设备 id 和 key

allow_dup=false 否 报错 新的设备 id 和 key

中移物联网有限公司 OneNET 开发文档中心

此接口返回的新设备默认设备名均为auto_register均为私有设

备设备协议与产品协议相同

4322 更新设备注册属性

表4-5 更新设备注册属性

HTTP方法 PUT

URL apihecloudscomregister_attr

HTTP头部 api-key xxxxddddsssaaa 必须为 masterkey

HTTP内容

(示例)

allow_dup true|false是否允许重复提交相同的设备 sn 默认 true

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

默认 allow_dup 为 true主要用于设备注册码创建设备属性限制

4323 新增

表4-6 新增设备注册属性

HTTP方法 POST

URL apihecloudscomdevices

HTTP头部 api-key xxxxddddsssaaa 必须为 masterkey

HTTP内容

(示例)

title mydevice 设备名

desc some description 设备描述(可选)

tags [chinamobile] 设备标签(可选可为一个或多个)

protocolMQTT 选择一种接入协议(可选默认为 HTTP)

location lon 106 lat 29 ele 370设备位置纬度

经度 高度(可选)

private true| false 设备私密性(可选默认为 ture)

auth_info 201503041a5829151 MQTT设备设备唯一编号

other version 100 manu china mobile 其他信息(可

选JSON格式可自定义)

HTTP响应响

应消息内容

(实例)

errno 0

error succ

data

中移物联网有限公司 OneNET 开发文档中心

device_id233444 平台分配的设备 ID

4324 更新

表4-7 更新

HTTP方法 PUT

URL apihecloudscomdevicesdevice_id

HTTP头部 api-key xxxxddddsssaaa masterkey或设备 apikey

HTTP内容

(示例)

title mydevice 设备名(可选)

desc some description 设备描述(可选)

tags [chinamobile] 设备标签(可选)

protocolMQTT 选择一种接入协议(可选)

location lon106 lat 29 ele 370设备位置经度

纬度 高度(可选)

private true| false 设备私密性(可选)

auth_info201503041a5829151 MQTT设备设备唯一编号(可选)

other version 100 manufacturer china mobile 其

他信息(可选)

HTTP响应响

应消息内容

(示例)

errno 0

error succ

中移物联网有限公司 OneNET 开发文档中心

4325 精确查询单个设备

表4-8 精确查询单个设备

HTTP方法 GET

URL apihecloudscomdevicesdevice_id

HTTP头部 api-key xxxxddddsssaaa masterkey 或设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

iddevice_id

tags [chinamobile]

onlinetrue|false

protocolMQTT

titlemy device1

descsome description

create_time2015-09-16 102222

privatetrue|false

locationele370lat17609lon17703

auth_infohellip

otherversion100manufacturerchina mobile

keys[titledevice-auto-keykey2JO3B12O1]

数据流

datastreams[

create_time 2014-10-23 202222

iddatastream_id1

unitcelsius

unit_symbolC

uuid 231a5aa9-9de4-5f2e-9e0f-015181c98429

]

4326 模糊查询设备

表4-9 模糊查询设备

HTTP方法 GET

URL apihecloudscomdevices

中移物联网有限公司 OneNET 开发文档中心

URL 参数

key_words=my 匹配关键字(可选从 id和 title字段中左匹配)

auth_info=203x1 鉴权信息(可选对应注册时的 sn参数唯一设

备编号)

tag=mobile 标签(可选)

online=true| false 在线状态(可选)

private=true| false 私密性(可选)

page=1 指定页码最大页数为 10000(可选)

per_page=30 指定每页输出设备个数默认 30最多 100(可选)

device_id=235122 指定设备 ID多个用逗号分隔最多 100个(可

选)

begin=2016-06-20 起始时间包括当天(可选)

end=2016-06-20 结束时间包括当天(可选)

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

total_count1

per_page30

page1

devices

[

id3497307

titlemy device1

desc device desc

privatetrue

protocolMQTT

onlinefalse

locationlon10655231191544001lat29535451246673

create_time2013-02-11 122233

auth_infoSYSz=8QY3r7aTQ48UKfqPnB=PybYRo=

]

4327 批量查询设备最新数据

表4-10 批量查询设备最新数据

HTTP方法 GET

中移物联网有限公司 OneNET 开发文档中心

URL apihecloudscomdevicesdatapoints

URL参数 devIds=1221122331123 设备 id用逗号隔开限制 1000 个设备

HTTP头部 api-key xxxxddddsssaaa masterkey 或设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

error ldquosuccrdquo

data

devices [

id 12323 设备 id

title daf设备名

datastreams

[

id temperature数据流名称

at 2017-02-12 102222数据流更新时间

value 12数据流最新数据

hellip

helliphellip

]

hellip

hellip

]

4328 删除

表4-11 删除设备

HTTP方法 DELETE

URL apihecloudscomdevicesdevice_id

HTTP头部 api-key xxxxddddsssaaa 可为设备级别的 Key

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

中移物联网有限公司 OneNET 开发文档中心

说明删除设备会删除该设备下所有数据流和数据点删除设备动作是异步

的系统会在后续逐步删除该设备下的数据流和数据点

433 数据流

4331 新增

表4-12 新增数据流

HTTP方法 POST

URL apihecloudscomdevicesdevice_iddatastreams

HTTP头部 api-key xxxxddddsssaaa masterkey 或设备 apikey

HTTP内容

(示例)

idtemperature 数据流名称 示例温度

tags[Tag1Tag2] 数据流标签(可选可以为一个或多个)

unitcelsius 单位(可选)

unit_symbolC 单位符号(可选)

HTTP响应响

应消息内容

(示例)

errno 0

data

ds_uuid 9e6bcac9-2c6f-59d5-adae-3955df2e7bce平台分配

数据流 UUID

error succ

4332 更新

表4-13 更新数据流属性

HTTP方法 PUT

URL apihecloudscomdevicesdevice_iddatastreamsdatastream_id

示例apihecloudscomdevices421240datastreamstemperature

HTTP头部 api-key xxxxddddsssaaa masterkey 或设备 apikey

HTTP内容

(示例)

tags[Tag1Tag2] 数据流标签(可选)

unitcelsius 单位(可选)

unit_symbolC 单位符号(可选)

HTTP响应响

应消息内容

(示例)

errno 0

error succ

中移物联网有限公司 OneNET 开发文档中心

4333 查询单个数据流

表4-14 查询单个数据流

HTTP方法 GET

URL apihecloudscomdevicesdevice_iddatastreams

URL参数 datastreams_ids = 查看的 datastream的 id

HTTP头部 api-key xxxxddddsssaaa masterkey 或该设备的设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

data [

update_at 2018-06-29 112938 数据流最后更新时

id 湿度 数据流名称

create_time 2018-06-28 170548数据流创建时间

current_value 53845013最新数据点

]

error succ

4334 查询多个数据流

表4-15 查询多个数据流

HTTP方法 GET

URL apihecloudscomdevicesdevice_iddatastreams

URL 参数

datastream_ids= 查看的 datastream的 id多个 id之间用英文逗号

分开(参数缺省时为查询所有数据流)

示例

apionenetcomdevices1234datastreamsdatastream_ids=tempgps

表示查看 temp和 gps两个数据流的信息

HTTP头部 api-key xxxxddddsssaaa masterkey 或者 该设备的设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data 数据流信息

[

idtemperature 数据流名称设备范围内唯一

tags[Tag1Tag2] 数据流标签

unitcelsius 单位

unit_symbolC单位符号

create_timexxxx-xx-xx 102222 创建时间

中移物联网有限公司 OneNET 开发文档中心

current_valuehellip该数据流下数据点最新值

update_atxx-xx-xx该数据流下数据点最新上传时间

]

[

idhumi 数据流名称设备范围内唯一

tags[Tag1Tag2]

unit_symbol

create_timexxxx-xx-xx 102222

current_valuehellip

update_atxx-xx-xx

]

[]

4335 删除

表4-16 删除数据流

HTTP方法 DELETE

URL apihecloudscomdevicesdevice_iddatastreamsdatastream_id

URL参数 无

HTTP头部 api-key xxxxddddsssaaa masterkey 或者设备 key

HTTP响应响

应消息内容

(示例)

errno 0

error succ

434 数据点

4341 新增

中移物联网有限公司 OneNET 开发文档中心

表4-17 新增数据点

HTTP方法 POST

URL apihecloudscomdevicesdevice_iddatapoints

URL参数 type=3 上传数据类型(可选默认为完整 JSON型见 HTTP内容示

例)

HTTP头部 api-key xxxxddddsssaaa masterkey 或者 设备 apikey

HTTP内容

(示例)

datastreams

[

id temperature 数据流名称或数据流模板名称

datapoints [

at 2013-04-22T003543 上传数据点时间可选如

果为空则设备云会取当前时间如果存在其格式必须为 YYYY-MM-

DDThhmmss的形式(例如2015-03-22T223112)

value 42 上传数据点值

at 2013-04-22T005543

value 84 上传数据点值

]

id key 数据流名称或数据流模板名称

datapoints [

at 2013-04-22T003543上传数据点时间可选

value hellip上传数据点值

at 2013-04-22T003543

value hellip上传数据点值

]

hellip

]

中移物联网有限公司 OneNET 开发文档中心

HTTP 响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

1 可以一次性向设备云上传多个数据流每个数据流中可以包括多个数据

点示例程序表示向设备云上数据流 temperature 和数据流 key上传数据其中

temperature数据流有两个数据点key数据流也有两个数据点

2 如果某个数据流不存在则在增加数据点时设备云会自动创建一个新

的数据流注意新数据流的 datastream id 不可为空

3 数据点表示在某个时刻该数据流的值其 at表示时间为可选字段如

果为空则设备云会取当前时间如果存在其格式必须为YYYY-MM-DDThhmmss

的形式(例如2015-03-22T223112)

4 数据点中的 value表示具体的值其值为 JSON对象可以为整型浮点

型字符串多种类型如果 value部分用双引号括起来则其在设备云存储为字

符串如果不用双引号括起来则其表示数值字符编码现在只支持 UTF-8

5 数据点对应的时间是数据点的标识的一部分相同时间的两个数据点

设备云会同时对这两个相同时间的数据点进行保存不会出现覆盖另一个数据点

的情况一般如果 at 部分取空设备云会取系统时间精度为毫秒如果在一

条命令中某一个数据流包含多个数据点都没有 at 字段设备云将会对所有数据

点进行保存

6 新增数据点支持如下简写方式在请求的 URL中增加 type字段指示所

使用的格式类型目前 type支持 345三种情况

URLapihecloudscomdevices2214570datapointstype=3

示例temperature225humidity952

表示在数据流 temperature中增加一个数据点 225在 humidity 中增加一

个数据点 952

URLapihecloudscomdevices2214570datapointstype=4

示例temperature2015-03-22T223112225

表示在数据流 temperature中加一个数据点在 2015年 3月 22 日 22点 31

中移物联网有限公司 OneNET 开发文档中心

分 12秒的值为 225

URLapihecloudscomdevices2214570datapointstype=5

示例temperature2015-03-22T223112225pm2589

表示在数据流 temperature中加一个数据点即 2015年 3月 22 日 22点 31

分 12秒的值为 225在数据流 pm25中添加一个数据点即当前时间的值为 89

4342 查询

表4-18 查询数据点

HTTP方法 GET

URL apihecloudscomdevicesdevice_iddatapoints

URL 参数

datastream_id=abc 查询的数据流多个数据流之间用逗号分隔

(可选)

start=2015-01-10T080035 提取数据点的开始时间(可选)

end=2015-01-10T080035 提取数据点的结束时间(可选)

duration=3600 查询时间区间(可选单位为秒)

start+duration按时间顺序返回从 start开始一段时间内的数据点

end+duration按时间倒序返回从 end回溯一段时间内的数据点

limit=100 限定本次请求最多返回的数据点数0ltnlt=6000(可选

默认 1440)

cursor= 指定本次请求继续从 cursor位置开始提取数据(可选)

sort=DESC | ASC 值为 DESC|ASC时间排序方式DESC倒序ASC升

序默认升序

ltnlt=6000(可选默认 1440)

HTTP头部 api-key xxxxddddsssaaa masterkey 或者 该设备的设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

cursor70921_3771908_1472355096

datastreams[

idtemperature数据流名称或数据流模板名称

datapoints[

at xxxx-xx-xx 102222value42数据点上传时间和

at xxxx-xx-xx 102222value84

]

中移物联网有限公司 OneNET 开发文档中心

idkey 数据流名称或数据流模板名称

datapoints[

at xxxx-xx-xx 102222valuehellip

atxxxx-xx-xx 102222valuehellip

]

hellip

]

1 若不携带任何参数平台返回本设备所存在的所有数据流中的最新数据

(这一种情况下查询时出现时延较大的性能问题建议在 URL 参数中加上

newadd参数并将其值赋为 true如 newadd=true)

2 若不携带数据流 id参数携带 limit 参数时会返回该设备每个数据流

最多 limit 条数据

3 若要查看某一条数据流数据需在上述 URL中增加参数 datastream_id

4

apihecloudscomdevices564280datapointsdatastream_id=tempamplimit

=10会返回数据流temp中最近的 10个数据点

5 要查看某一条数据流在某个时间范围内的数据可以在增加 start和 end

参数

示例

apihecloudscomdevices564280datapointsdatastream_id=temper

atureampstart=2013-05-12T171233ampend=2013-06-12T172233 表示查询本设

备对应的数据流在 2013 年 5 月 12 日 17 点 12 分 33 秒到 17 点 22 分 33 秒的数

据点注意如果 start 参数存在end参数不存在表示取 start后的所有数据

如果 start 不存在end 存在设备云会忽略 end参数注意日期时间格式格

式必须为示例中的格式YYYY-MM-DDThhmmss例如2013-05-12T171233

日期和时间之间用大写字母 T 分隔start 和 end 之间的时间间隔最大为 1 年

超过一年会忽略

如果指定了 start 参数则可能返回的数据点的数目会很多此时默认会返

回最多 100 个数据点可以使用 limit 参数设定返回多少个数据点最大为

6000个数据点当实际的数据点数目多于 limit 限定的数目时返回的 json串

中移物联网有限公司 OneNET 开发文档中心

中会有一个 cursor 字段下一次请求的命令行中可以携带此 cursor 字段表示接

着遍历本数据流此 cursor字段标识上次取出数据点后下一个数据点的位置

435 二进制数据

4351 新增

将二进制数据将作为数据点保存到设备下的某个数据流中设备云返回该二

进制数据的索引号

表4-19 新增二进制数据

HTTP方法 POST

URL apihecloudscombindata

URL参数 device_id=421590 数据所属设备(必选)

datastream_id=bin 该数据所属已经存在的数据流(必选)

HTTP头部 api-key xxxxddddsssaaa masterkey 或者该设备的设备 key

HTTP 内 容

(示例)

普通二进制数据文件图像等

(最大限制为 800上传时间间隔需大于 1ms)

HTTP响应响

应消息内容

(示例)

errno 0

error succ

data

index3491506_1475204886914_bin 二进制数据索引号

4352 查询

表4-20 查询二进制数据

HTTP方法 GET

URL apihecloudscombindataindex

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

普通二进制数据文件图像等二进制形式数据

436 触发器

4361 新增

表4-21 新增触发器

HTTP方法 POST

中移物联网有限公司 OneNET 开发文档中心

URL apihecloudscomtriggers

HTTP头部 api-key xxxxddddsssaaa 必须为 masterkey

HTTP内容

(示例)

titlewen du jian kong 设备名(可选)

ds_idgps 数据流名称(id)(可选)

dev_ids[10272345615523] 设备 ID(可选)

ds_uuids[ 数据流 uuid(可选)

9ad09uac-7446-512f-b07c-90jdnzj8120ad

4599436e-7146-5349-b07c-79fa0919cs62

]

urlxxbbcom

typegt | gt= | lt | lt= | == | inout | in | out |change | frozen |

live

threshold100 阙值根据 type不同见以下说明

1) type 为gt|gt=|lt|lt=|==时threshold必须为数值

2) type为 inout时threshold 设置为lolmt40 uplmt52 表示

数据流的值首次进入或离开闭区间[4052]时触发

3) type为 change时threshold 参数不用传递当上传的值有改变时触发

告警

4) type为 frozen时threshold 为数值指定距离最后一次数据上报多少

秒内未上报数据触发告警同时被监控对象进入 frozen状态

5) type 为 live 时threshold 为数值指定距离最后一次数据上报多少秒

后上报数据触发告警

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

tirgger_id233444 触发器 ID

说明

1触发器的含义是当指定范围内的数据点满足触发条件的要求时会向

url参数指定的地址发送 post请求

2触发器有三种工作触发模式

1)在请求参数中单独指定了 ds_id不包括其他参数那么当前项目下

中移物联网有限公司 OneNET 开发文档中心

所有设备的数据流中数据流名称符合 ds_id 的数据都会进入触发判断逻辑

2)在请求参数中单独指定了 ds_uuids 数组那么只有这些指定的数据

流会进入触发判断逻辑

3)在请求参数中指定了 ds_id 和 dev_ids那么只有这些指定的设备的

数据流会进入触发判断逻辑

4362 更新

表4-22 更新触发器属性

HTTP方法 PUT

URL apihecloudscomtriggerstirgger_id

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP内容

(示例)

titlewen du jian kong

ds_uuids[

9ad09uac-7446-512f-b07c-90jdnzj8120ad

4599436e-7146-5349-b07c-79fa0919cs62

]

urlxxbbcom

typegt | gt= | lt | lt= | == | inout | in | out | exp | change |

frozen | live

threshold100

注若要修改 type需要对应设置 threshold

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

4363 查询单个触发器

表4-23 查询单个触发器

HTTP方法 GET

URL apihecloudscomtriggerstirgger_id

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

idtrigger_id1

中移物联网有限公司 OneNET 开发文档中心

titlewen du jian kong

ds_uuids[

datastream1_uuidrdquo

datastream2_uuidrdquo

datastream3_uuidrdquo

]

urlxxbbcom

typegt|gt=|lt|lt=|==|in|out|exp|change|frozen|live

threshold100

invalidtrue 触发器是否已失效

create_timexx-xx-xx 102222

4364 模糊查询触发器

表4-24 模糊查询触发器

HTTP方法 GET

URL apihecloudscomtriggers

URL 参数

title=name 指定触发器名称

page=1 指定页码可选

per_page=10 指定每页输出个数可选默认 10最多 100

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

total_count600

per_page30

page1

triggers[

idtrigger_id1

titlewen du jian kong

ds_uuids

[datastream1_uuidrdquo datastream2_uuidrdquo]

urlxxbbcom

typegt|gt=|lt|lt=|==|in|out|exp|change|frozen|live

threshold100

invalidtrue 触发器是否已失效

create_timeXXXXXXXX

中移物联网有限公司 OneNET 开发文档中心

]

说明触发器失效是指触发器所依赖的数据流或者设备被删除了此时触发

器永远不会有效触发事件

4365 删除

表4-25 删除触发器

HTTP方法 DELETE

URL apihecloudscomtriggerstirgger_id

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno 0

error succ

4366 触发数据内容

触发数据是指当 OneNET 设备云判断某个触发器的触发条件满足时会通过

POST方式向外抛出的 URL请求在 HTTP的 POST消息体中会携带如下格式的 JSON

字符串

表4-26 触发器内容

数据内容

(示例)

trigger

id1

threshold90

typegt

current_data[

dev_id2656

ds_idgps

ds_uuidFWEF-ZFW-ZFW-ZFWW

at2009-09-07T121602001403Z

value100

dev_id2656

ds_idtemper

中移物联网有限公司 OneNET 开发文档中心

ds_uuidFEWEF-ZFWFWW-WFWW-FWEFFWW

at2009-09-07T121602001403Z

value882

]

437 命令

命令是指应用发送命令数据给 OneNET设备云再由 OneNET设备云转发给终

端设备终端设备收到命令后可以向设备云反馈响应的一种工作机制命令下发

后应用可以通过 API查询命令状态和提取命令的响应数据

命令的执行步骤如下

1应用通过 API 向设备云发送命令数据

2设备云生成该命令的 uuid作为该命令的唯一标识并向应用返回同时向

终端设备转发命令数据

3 终端设备收到命令数据后执行命令数据可以生成响应也可以不响应

4设备云跟踪记录命令的响应如果设备有响应就关联命令 uuid和响应

结果

5应用通过 API 向设备云提取命令执行结果(API 请求中携带命令 uuid 标

识)

特别说明

命令下发到终端设备后如果终端设备 10 秒内未收到响应则此命令的状

态将被设置为超时应用通过 API 查询命令状态时会反馈超时超过 10 秒后

收到的响应会被丢弃

终端设备针对同一条命令回复多条命令响应只有在未超时时间内收到的最

后一条是有效响应前面的响应包将会被覆盖因此终端设备应该对每个命令只

有一个响应包

4371 发送命令

表4-27 发送命令

HTTP方法 POST

URL apihecloudscomcmds

URL 参数 device_id=415120 接收该数据的设备 ID(必选)

中移物联网有限公司 OneNET 开发文档中心

qos=0 | 1 是否需要响应默认为 0

0不需要响应即最多发送一次不关心设备是否响应

1需要响应如果设备收到命令后没有响应则会在下一次设备登陆

时若命令在有效期内(有效期定义参见 timeout参数)则会继续发送

对响应时间无限制多次响应以最后一次为准

本参数仅当 type=0时有效

timeout=300 命令有效时间默认 0

0在线命令若设备在线下发给设备若设备离线直接丢弃

gt0 离线命令若设备在线下发给设备若设备离线在当前时间

加 timeout时间内为有效期有效期内若设备上线则下发给设备单

位秒有效围0~2678400

本参数仅当 type=0时有效

type=0 | 1 默认 00发送 CMD_REQ包1发送 PUSH_DATA包

HTTP头部 api-key xxxxddddsssaaa masterkey或者设备 apikey

HTTP内容 用户自定义数据jsonstring二进制数据(小于 64K)

HTTP响应响

应消息内容

(示例)

errno 0

error succ

data

cmd_uuid2302-312-FWs 命令 id

4372 查询命令状态

表4-28 查询命令状态

HTTP方法 GET

URL apihecloudscomcmdscmd_uuid

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno 0

error succ

data

status1

0设备不在线|Device not online

1命令已创建| Command Created

2命令已发往设备| Command Sent

3命令发往设备失败| Send Command Failed

4设备正常响应| Command Response Received

5命令执行超时| Command Response Timeout

6设备响应消息过长 | Command Response Too Large

descldquosendingrdquo

中移物联网有限公司 OneNET 开发文档中心

4373 查询命令响应

表4-29 查询命令响应

HTTP方法 GET

URL apihecloudscomcmdscmd_uuidresp

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP 响应响

应消息内容

用户设备返回的响应内容

4374 查询设备历史命令

表4-30 查询设备历史命令

HTTP方法 GET

URL apihecloudscomcmdshistoryltdevice_idgtltdevice_idgt

URL 参数

start=2015-01-10T080035 查询的开始时间(可选)

end=2015-01-10T080535 查询的结束时间(可选)

page=1 指定页码最大页数为 10000(可选)

per_page=30 指定每页输出设备个数默认 30最多 100(可选)

HTTP头部 api-key xxxxddddsssaaa

HTTP响应响

应消息内容

errno 0

error succ

data

page 1当前页码

per_page 10当前每页总数

total_count 100

items [

cmd_uuid 2302-312-FWs

device_id 2设备 ID

expire_time 2016-07-05 000000过期时间

status 0命令状态

send_time 2016-07-05 000000发送时间

confirm_time 2016-07-05 000000响应时间

confirm_body 2463726571007b202274797022 响应内容

16进制字符

body 2463726571007b202274797022请求内容16进制字符

hellip

中移物联网有限公司 OneNET 开发文档中心

hellip

]

438 视频能力

4381 获取播放地址

表4-31 获取播放地址

HTTP方法 GET

URL apihecloudscomipcrtmp_address

URL 参数

device_id= 接收该数据的设备 ID(必填)

channel_id = 对应数据流名称中的 channelnum

protocol_type = 播放协议类型 0rtmp1hls2http-flv

HTTP头部 api-key xxxxddddsssaaa masterkey或者设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

errorrdquosuccrdquo

ldquodatardquo

addripport

accessTokenldquo字符串rdquo

439 APIKEY

4391 新增

表4-32 新增 APIKEY

HTTP方法 POST

URL apihecloudscomkeys

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP内容

(示例)

title sharing key key 的命名

permissions [

resources [ 被授权的资源

中移物联网有限公司 OneNET 开发文档中心

dev_id 424 被授权的设备 id

dev_id 425 被授权的设备 id

hellip

hellip

]

access_methods [ 被授权的命令

get

put

post

]

]

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data key2302-312-FWs key_string

说明授权命令是可选的另外被授权的命令也可以是 getputpost 的

一个或几个如只授权 get和 put命令

access_methods [getput]

4392 更新

表4-33 更新 APIKEY

HTTP方法 PUT

URL apihecloudscomkeyskey_string

HTTP头部 api-key xxxxddddsssaaa masterkey(注只能为 master-key)

HTTP内容

(示例)

title sharing key key 的命名

permissions [

resources [ 被授权的资源

dev_id 424 被授权的设备 id

ds_idfan1 数据流 id可选

中移物联网有限公司 OneNET 开发文档中心

dev_id 425 被授权的设备 id

ds_idfan1 数据流 id可选

hellip

hellip

]

access_methods [ 被授权的命令可选

get

put

post

]

]

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

说明

1对于 masterkey 不允许更新操作masterkey 默认具有最大权限可以访

问该用户名下所有设备所有数据

可以进行 POSTGETPUTDELETE操作如果更新 master key 系统会返回

失败

2授权命令是可选的另外被授权的命令也可以是 getputpost 的一个

或几个如只授权 get和 put命令

access_methods [getput]

3API key 更新是覆盖操作会将原来存在的授权资源和授权命令覆盖不

会保留原来的授权资源和授权命令

4393 查看

中移物联网有限公司 OneNET 开发文档中心

表4-34 查看 APIKEY

HTTP方法 GET

URL httpapihecloudscomkeys

URL 参数

key = FWJPO-FZFHW-FFEWB可选只查看该 key相关信息

page = 1 指定页码 可选

per_page = 10 指定每页输出个数可选默认 10最多 100

device_id = xxbbcc可选只查看与该设备相关的非 master-key

HTTP头部 api-key xxxxddddsssaaa masterkey(注只能为 master-key)

HTTP响应响

应消息内容

(示例)

errno 0

data

per_page 30

total_count 2

keys [

create_time 2015-11-04 142552

title Auto-generated-master-key

key 03GeDLYk0WNk1V338g7yndKZYkQA

create_time 2015-12-03 100041

permissions [

resources [

dev_id 564280

]

]

title 设备 1测试 Key

key vuHebEWefiU2Ueo5ouoCc1CUsYQ=

]

page 1

error succ

中移物联网有限公司 OneNET 开发文档中心

4394 删除

表4-35 删除 APIKEY

HTTP方法 DELETE

URL httpapihecloudscomkeyskey_string

HTTP头部 api-key xxxxddddsssaaa masterkey(注只能为 master-key)

HTTP 响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

4310 消息订阅

43101 按 Topic 发送命令

表4-36 按 Topic 发送命令

HTTP方法 POST

URL apihecloudscommqtt

URL参数 topic=xxx 设备订阅的主题(必选)

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP 内 容

(示例)

HTTP响应响

应消息内容

(示例)

errno0

errorldquosuccrdquo

data

total_count1

per_page30

page1

devices [123123433333]

43102 查询订阅指定 Topic设备的列表

表4-37 查询订阅制定 Topic设备的列表

HTTP方法 GET

URL apihecloudscommqtttopic_device

URL 参数

topic=xxx 设备订阅的主题(必选)

page=1 当前页码 必填大于等于 1

per_page=10 每页 必填范围 1-1000

中移物联网有限公司 OneNET 开发文档中心

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP内容

(示例)

HTTP响应响

应消息内容

(示例)

errno0

errorldquosuccrdquo

data

total_count1

per_page30

page1

devices [123123433333]

43103 查询设备订阅的 Topic列表

表4-38 查询设备订阅的 Topic列表

HTTP方法 GET

URL apihecloudscommqttdevice_topicdevice_id

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno0

errorldquosuccrdquo

data

[topic_name1 topic_name2 topic_name3]

43104 删除产品的 Topic

表4-39 删除产品的 Topic

HTTP方法 DELETE

URL apihecloudscommqtttopic

URL参数 name=xxx topic名(必选)

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno0

errorldquosuccrdquo

中移物联网有限公司 OneNET 开发文档中心

43105 查询产品的 Topic

表4-40 查询产品的 Topic

HTTP方法 GET

URL apihecloudscommqtttopic

URL参数 无

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno0

errorldquosuccrdquo

data

[topic_name1topic_name2topic_name3]

中移物联网有限公司 OneNET 开发文档中心

第五章 接入实例

51 MQTT-device 接入

511 工具下载

为方便开发人员直观感受使用 mqtt 协议进入平台的便利可使用平台提供

的 MQTT 设备模拟器进行接入平台请在首页-gt开发文档-gt资源下载-gt13 调试

工具下载进行下载如下图

图5-1 资源下载

下载地址

httpupfileshecloudscom123ueditor201707125d5bc37eca39c0c5b7a5bcb9

0e451eeerar

中移物联网有限公司 OneNET 开发文档中心

512 界面说明

图5-2 界面说明

513 使用方法

5131 创建产品

如 323 的过程在设备接入协议中选择 MQTT

中移物联网有限公司 OneNET 开发文档中心

图5-3 选择连接协议

5132 创建设备

如 323描述在平台上新建一个设备

5133 建立连接

在产品概况中可以查看产品 ID此信息填入模拟器 ProductID一栏如下图

图5-4 产品ID

在平台上进入设备信息页面可查看设备 ID及鉴权信息(此鉴权信息是新建设备时候填

写的鉴权信息)如下图

中移物联网有限公司 OneNET 开发文档中心

图5-5 设备ID及鉴权信息

相应把设备 ID及鉴权信息填入模拟器之中然后点击连接按钮如果未弹出提示对话

框则表示设备鉴权成功如下图

图5-6 连接成功

中移物联网有限公司 OneNET 开发文档中心

5135订阅与发布

演示本操作需要在 OneNet平台建立两个基于 MQTT协议的设备一个用于消息发布

另一个用于消息订阅

图5-7 设备状态

开启两个模拟器分别模拟以上两个设备然后建立连接

首先使用订阅主题打开第一个模拟器模拟消息订阅者

图5-8 订阅主题

其次发布主题打开第二个模拟器模拟消息发布者

中移物联网有限公司 OneNET 开发文档中心

图5-9 发布主题

经过以上两个操作后查看模拟消息订阅者的模拟器则收到了主题

为rdquotopic_namerdquo的消息如下图

中移物联网有限公司 OneNET 开发文档中心

图5-10 收到的主题

5136接收平台指令

建立连接后模拟器也可接收来自平台的指令具体操作如下

先打开模拟器-gt建立连接-gt选中【[OneNet]平台指令接收】选项栏利用平台下发指

令功能下发如下图平台下发指令

图5-11 平台发送命令

中移物联网有限公司 OneNET 开发文档中心

图5-12 下发指令

填写好将要发送的消息后点击【发送命令】按钮则模拟器成功接收到来自平台的

数据如下图模拟器截图

图5-13 模拟器收到的指令

5137上传数据点

Mqtt支持 Json 数据格式上报数据现根据 Json几种格式举一些例来演示怎么利用

模拟器上传数据

1)使用 Json数据 Type1上传 Json数据

datastreams[idtemperaturedatapoints[value255]]

中移物联网有限公司 OneNET 开发文档中心

如下模拟器上传数据界面

图5-14 Type1数据格式

则在平台数据展示中则可看到上传的数据点

图5-15 收到数据展示

2)使用 Json数据 Type3示例 Json数据为

temp32humi98

模拟器发送数据截图

中移物联网有限公司 OneNET 开发文档中心

图5-16 Type3数据格式

平台数据展示截图

图5-17 数据展示

3)使用 Json数据 Type4示例 Json数据为

temperature233pm2589

模拟器上传数据截图

中移物联网有限公司 OneNET 开发文档中心

图5-18 Type5数据格式

平台接收数据展示截图

图5-19 数据展示

52 基于麒麟开发板的 MQTT 接入实例

OneNet 平台为使用户能快速接入发布麒麟座开发板官网提交您的创意免

费申请开发板下面利用麒麟座开发板 V31 演示开发板采集温湿度使用 MQTT发

送到平台的接入流程

开发板申请链接httpsopeniot10086cneventdetail185html

521 搭建开发环境

OneNET 平台提供的麒麟座开发板是基予 STM32 单片机开发的一块功能应用

板开发板包含 MCU温湿度传感器GSM 模块WIFI 模块电源模块键盘

中移物联网有限公司 OneNET 开发文档中心

LED以及 lcd显示接口等满足用户对平台接入的基本需求能快速接入到平台

资料包配备完整工程代码方便工程移植等使用

目前 STM32 开发常用的 IDE 有 IARMDK 等我挑选 MDK 作为开发工具打

开工具包先安装 MDK511A安装完毕后再安装 MDKCM511A开发板所有资料软件

工具包下载案例包

案例包下载链接

httpspanbaiducoms1UB1qZGrVuovSVdbqqXP0Lglistpath=2F

图5-20 MDK包

安装完毕并安装 license详细步骤不做演示

中移物联网有限公司 OneNET 开发文档中心

522 连接硬件准备

5221 开发板接线

图5-21 开发板接线图

电源DC-5V

运行信息USART1-MicroUSB 线

软件下载ST-Link

中移物联网有限公司 OneNET 开发文档中心

5222 ESP8266跳线帽连接

图5-22 ESP8266跳线帽连接

中移物联网有限公司 OneNET 开发文档中心

5223 M6312跳线帽连接

图5-23 M6312跳线帽连接

523 工程实例

例程使用最简单易懂的方式编写着重让大家明白接入流程和协议

10~12 协议专属例程是展示该协议下的专用功能比如 EDP 的 PushData

中移物联网有限公司 OneNET 开发文档中心

HTTP 注册新设备MQTT 的订阅发布等具体使用方法查看该目录下的《使用

说明》

图5-24 工程文件

524 开发工程文件

中移物联网有限公司 OneNET 开发文档中心

图5-25 工程文件

图5-26 工程结构

默认已创建好产品以及设备打开文件工程 onenetc 和 esp8266c 修改例

程的 WIFI 信息和平台信息

分别在 esp8266c 的 36和 onenetc的 414345行

图5-27 更改项

525 编译下载

开发版接串口会有相应状态显示平台设备显示在线状态绿色为连接成功

设备在线灰色表示未连接并在数据展示中显示对应主题的所有数据

中移物联网有限公司 OneNET 开发文档中心

图5-28 连接成功

图5-29 收到数据

其他实例详情请见httpsopeniot10086cnbbsthread-1266-1-1html

中移物联网有限公司 OneNET 开发文档中心

第六章 MQTT 协议详解

61 设备与平台通信协议包格式

协议就是通信双方的一个约定即表示第 1字节传输的什么第 2字节

传输的什么helliphellip在 MQTT协议中一个 MQTT 数据包由固定头(Fixed

header) 可变头(Variable header) 消息体(payload)三部分构成

MQTT 数据包结构固定头部+可变头部+消息体

固定头(Fixed header)存在于所有 MQTT数据包中表示数据包类型及

数据包的分组类标识固定头格式如下

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 - 5 Remaining Length(该字段占用 1-4个字节)

目前平台版本支持的 Packet Type如下

名字 值 流向 描述

CONNECT 1 C-gtS 客户端请求与服务端建立连接

CONNACK 2 S-gtC 服务端确认连接建立

PUBLISH 3 CS 发布消息

PUBACK 4 CS 收到发布消息确认

PUBREC 5 CS 发布消息收到

PUBREL 6 CS 发布消息释放

PUBCOMP 7 CS 发布消息完成

SUBSCRIBE 8 C-gtS 订阅请求

SUBACK 9 S-gtC 订阅确认

UNSUBSCRIBE 10 C-gtS 取消订阅

UNSUBACK 11 S-gtC 取消订阅确认

PING 12 C-gtS 客户端发送 PING(连接保活)命令

PINGRSP 13 S-gtC PING命令回复

DISCONNECT 14 C-gtS 断开连接

可变头(Variable header)存在于部分 MQTT 数据包中数据包类型决定

了可变头是否存在及其具体内容

消息体(Payload)存在于部分 MQTT 数据包中表示客户端收到的具体内

中移物联网有限公司 OneNET 开发文档中心

不同类型数据包中可变头和消息体包含关系如下

消息类型 Variabl

e

Header

Payloa

d

CONNECT 有 有

CONNACK 有 有

PUBLISH 有 有

PUBACK 有 无

PUBREC 有 无

PUBREL 有 无

PUBCOMP 有 无

SUBSCRIBE 有 有

SUBACK 有 有

UNSUBSCRIBE 有 有

UNSUBACK 有 无

PING 无 无

PINGRSP 无 无

DISCONNECT 无 无

62 平台支持数据包类型

621 CONNECT(客户端请求与服务端建立连接 client -gt server)

固定头(Fixed Header)

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 - 5 Remaining Length(该字段占用 1-4个字节)

MQTT Packet Type 值为 0001表示该数据包为请求连接数据包

Remaining Length 剩余长度占 1-4字节

可变头(Variable Header)

包含内容如下

Description 7 6 5 4 3 2 1 0

byte

1-2

ProtocolNa

me Length

0 0 0 0 0 0 0 0

0 0 0 0 0 1 0 0

byte

3

lsquoMrsquo 0 1 0 0 1 1 0 1

byte

4

lsquoQrsquo 0 1 0 1 0 0 0 1

中移物联网有限公司 OneNET 开发文档中心

byte

5

lsquoTrsquo 0 1 0 1 0 1 0 0

byte

6

lsquoTrsquo 0 1 0 1 0 1 0 0

Byte

7

Protocol

Level

0 0 0 0 0 0 0 1

Byte

8

Connect

Flag

Use

r

flag

Passwo

rd

flag

WillReta

in

Flag

WillQo

s Flag

WillFl

ag

CleanSessi

on

Flag

Reser

ve

Byte

9-10

KeepAlive

(1) 版本

Protocol Level 必须设置为 4平台只支持协议版本 v 311不支持更老

的版本使用第三方客户端时需要注意选择正确的版本

(2) user flag 与 password flag

平台不允许匿名登陆因此这两个标志位在连接时必须设置为 1否则认为

协议错误平台将会断开连接

(3) Will flag 与 WillretainflagWillQosFlag

Will flag 为 0时WillQosFlag 和 WillRetainFlag 必须为 0Will Flag

为 1时WillQosFlag 只能为 012

1当该设备下一次正常上线后服务器会清除之前的 will 消息(包括

retain 消息)

2如果设备上线时设置了 Will Topic 和 msg且将 WillRetainFlag 设

置为 1只有设备异常断开后服务器才会将该 Will msg 分发给新的 Will

Topic 的订阅者且 Qos 级别以订阅的 Request qos 级别为准

3如果设备上线时设置了 Will Topic 和 msg且将 WillRetainFlag 设

置为 0服务器不会存储该消息当设备异常断开后会将该 Will msg 以设

备设置的 WillQosFlag的 Qos级别进行分发

(4) CleanSessionFlag

若客户端将 clean session 标志位设置为 0当其断开后平台将会保存

sessionsession 需保持的内容包含

客户端订阅的 topic列表

中移物联网有限公司 OneNET 开发文档中心

还未完成确认的 Qos1Qos2级别的 publish消息

客户端保存 session 的内容包含

已经发送到服务端的但还没有收到确认的 Qos1Qos2消息列表

待发送的 Qos0列表

若客户端将 clean session 标志位设置为 1当其断开后平台会清除设备

的订阅列表及未完成确认的 Qos1Qos2 的 publish消息

(5) Reserve

保留位置 0

(6) KeepAlive 保活时间

每个客户端可自定义设置连接保持时间最短 120秒最长 65535 秒

消息体(Payload) Description 是否必须存在 格式

Field1 Client

Identifier

是 2字节字串长度 + utf8字

Field2 UserName 是 2字节字串长度 + utf8字

Field3 UserPassword 是 2字节字串长度 + utf8字

目前平台支持的方式为以后两种

方式 1设备 ID项目 ID鉴权信息(auth_info)

字段设置 消息示例

client_id设置为平台创建设备时的

设备 id

username设置为ldquo项目 IDrdquo

password设置为ldquo鉴权信息

(auth_info)rdquo

client_id=rdquo123rdquo

username=rdquo433223rdquo

password=rdquo注册的鉴权信息rdquo

各字段说明如下

鉴权信息(auth_info)在平台申请设备时填写设备的 auth_info 属性(数

字+字母的字符串)该属性需要产品内具备唯一性(可使用设备出厂唯一编号)

方式 2设备 ID + APIKey(项目 ID也需要填写)

字段设置 消息示例

client_id设置为平台创建设备时的

设备 ID

username设置为ldquo项目 IDrdquo

client_id=rdquo123rdquo

username=rdquo433223rdquo

password=Api Key

中移物联网有限公司 OneNET 开发文档中心

password设置为ldquoAPI鉴权信息

(auth_info)rdquo

项目 ID在平台添加项目时平台生成的 ID

APIKey在平台上创建产品时生成的 APIKey

连接包实例如下

Send one mqtt packet

FixHeader

PacketTag = 16

PacketType = 1

RemainLength = 34

VariableHeaderConnect

protocol_name_len_= 4

protocol_name_= MQTT

protocol_level_= 4

connect_flag_= 192

keep_alive_= 12000

client_id_len_= 8

client_id_= 34764813

usr_name_len_= 6

usr_name_= 150295

password_len_= 4

password_= push

MQTT0x10 0x22 0x00 0x04 0x4D 0x51 0x54 0x54 0x04 0xC0 0x2E 0xE0 0x00 0x08 0x33

0x34 0x37 0x36 0x34 0x38 0x31 0x33 0x00 0x06 0x31 0x35 0x30 0x32 0x39 0x35 0x00

0x04 0x70 0x75 0x73 0x68

Send One Packet Succ

中移物联网有限公司 OneNET 开发文档中心

622 CONNACK (服务端确认连接建立)

Fixed Header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type = 2 0 0 0 0

byte2 - 5 Remaining Length(该字段占用 1-4个字节)

Variable Header

Description 7 6 5 4 3 2 1 0

byte 1 Acknowledge Flags 0 0 0 0 0 0 0 Sp

byte 2 Return Code x x x x x x x x

Sp Session Present Flagsession信息在服务器已保持置 1未保存置

0

返回码说明

返回码 描述

0 成功

1 协议版本错误

2 非法的 clientid

3 服务不可用

4 用户名或密码错误

中移物联网有限公司 OneNET 开发文档中心

5 非法链接(比如 token非法)

失败

如果 connect包不符合协议内容约束则直接断掉连接而不需要发送 conn

ack包

如果鉴权或授权失败回复一个带非 0错误码的 connack包

成功

必须断掉重复的 clientid

执行 cleansession 对应的操作

必须回复一个 connack回复码为 0

开始消息传递并加入 keepalive的监视

PS客户端需要等到服务端的 connack报文才能发送后续的数据包

623 PUBLISH(发布消息 client -gt server)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type DUP f

lag

QoS Level RETAI

N

byte2 - 5 Remaining Length(该字段占用 1-4 个字节)

DUP

QoS2Qos1如果为 0则表示是第一次发送该包如果为 1则表示

为重复发送的包

Qos0DUP 必须为 0

中移物联网有限公司 OneNET 开发文档中心

QoS 指定了该 publish包的 Qos 等级如下

Qos 值 Bit2 Bit1 描述

0 0 0 最多发送一次

1 0 1 至少发送一次

2 1 0 只发送一次

RETAIN 保留标志位如果为 1服务器存储最新一条 RETAIN消息以便

分发给新的订阅者如果 RETAIN为 1Payload 为空服务器分发该消息后会

清空该 topic 下的 RETAIN 消息

PS该版本实现了 Qos0Qos1Qos2

Variable Header

Description 格式 是否必须

Field1 TopicName 2 字节字串长度 + utf8字

Field2 PacketIdent

ifier

2 字节 QoS0否QoS1Qos2是

Payload

内容根据不同业务自定义

624 PUBLISH(发布消息 server -gt client)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type DUP f

lag

Qos Level RETAIN

byte2 - 5 Remaining Length(该字段占用 1-4个字节)

DUP

Qos2QoS1如果为 0则表示是第一次发送该包如果为 1则表示

为重复发送的包

中移物联网有限公司 OneNET 开发文档中心

Qos0DUP 必须为 0

QOS 指定了该 publish包的 qos等级如下

Qos 值 Bit2 Bit1 描述

0 0 0 最多发送一次

1 0 1 至少发送一次

2 1 0 只发送一次

RETAIN如果服务器分发的消息是 RETAIN 消息则将该标志位置 1否则置

0

PS该版本实现 Qos0Qos1Qos2其中服务器分发消息的 Qos级别是以 Clien

t-gtServer 发送的 publish 包的 qos 等级为准非订阅的 topic 的 Qos 等级R

etain 消息是以订阅的 Request Qos 级别进行推送

VariableHeader

Description 格式

Field1 TopicName 2 字节字串长度 + utf8字

Payload

内容根据不同业务自定义

625 PUBACK(收到发布消息确认)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

中移物联网有限公司 OneNET 开发文档中心

626 PUBREC(发布消息收到)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

627 PUBREL(发布消息释放)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

628 PUBCOMP(发布消息完成)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

中移物联网有限公司 OneNET 开发文档中心

byte 1~

2

PacketIdentifier PacketIdentifier

629 SUBSCRIBE(订阅请求)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

Payload

Description 格式

Byte1~

n

TopicName 2 字节字串长度 + utf8字

Byten+

1

Request Qos 服务质量要求(只能为 0

12)

topic 说明

可以包含一个或多个 topic

topic必须是数字英文反斜杠()的组合目前不支持通配符

每个客户端最多订阅 100个 topic

以下 topic 被系统保留使用(客户端不能订阅)

类型 说明

$开头 平台保留

中移物联网有限公司 OneNET 开发文档中心

6210 SUBACK(订阅确认)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

Payload

Description 7 6 5 4 3 2 1 0

byte 1 retcode

返回码说明

返回码 描述

0x00 成功(granted qos = 0)

0x01 成功(granted qos = 1)

0x02 成功(granted qos = 2)

0x80 失败

6211 UNSUBSCRIBE(取消订阅)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

中移物联网有限公司 OneNET 开发文档中心

Payload

Description 格式

Byte1~

n

TopicName 2 字节字串长度 + utf8字

可以包含一个或多个 topic

6212 UNSUBACK(取消订阅确认)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

6213 PING(客户端发送 PING(连接保活)命令)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

NULL NULL

注PING命令无 VariableHeader

中移物联网有限公司 OneNET 开发文档中心

6214 PINGRSP(PING命令回复)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

NULL NULL

注PINGRSP无 VariableHeader

6215 DISCONNECT(断开连接)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

NULL NULL

注DISCONNECT无 VariableHeader

中移物联网有限公司 OneNET 开发文档中心

第七章 设备开发流程

71 连接鉴权

Device Onenet

(Connect)鉴权请求

(ConnAck)鉴权结果

加载session

鉴权

图7-1 连接鉴权

设备向平台发起 connect 请求connect 中携带鉴权信息具体

参见(报文格式参考 621)

平台拿到鉴权信息进行鉴权

鉴权通过后如果 cleansession=0 平台将会加载保存的设备

的一些信息如订阅列表(621中描述)

如果 cleansession=1 设备没有保存信息在平台则不加载设

备相关信息

返回鉴权结果 ConnAck(报文格式参考 621)

72 消息发布

721 数据点上报

设备使用 publish 报文来上传数据点 报文格式如下

中移物联网有限公司 OneNET 开发文档中心

VariableHeader

Field 名称 说明 格式

Field1 TopicName=rdquo$dprdquo $dp 为系统上传数据点

的指令

2字节字串长度 + utf8

字串

Payload

Payload包含真正的数据点内容支持的格式如下

Byte 1 Bit0-5数据类型指示目前支持

Type = 1

Type = 2

Type = 3

Type = 4

Type = 5

Type = 6

Type = 7

Bit6-7 flags 根据具体类型不同意义

Type6Type7这两种需要填写时间戳的数据类型

如果填入了时间戳则须将 bit7 置 1否则置 0(即

忽略数据类型说明中的日期时间相关字段)

0 0 0 0 0 0 0 1

Byte 2 根据数据类型指示不同

Byte n

中移物联网有限公司 OneNET 开发文档中心

数据类型 1(type == 1)格式说明

数据类型 2(type == 2)格式说明

Byte 1 数据点类型值1 1JSON 格式 1 字符串 0 0 0 0 0 0 0 1

Byte 2 指示后面 json 字符串长度

固定两字节长度高位字节值为 0x00

Byte 3 固定两字节长度低位字节值为 0x41

Byte 4

ldquodatastreamsrdquo[ 可以同时传递多个数据流

ldquoidrdquordquotemperaturerdquo

ldquodatapointsrdquo[数据流可以有多个数据点

rdquoatrdquordquo2013-04-22 222222rdquo可选

rdquovaluerdquo 365用户自定义

]

ldquoidrdquordquolocationrdquo

ldquodatapointsrdquo[hellip]

hellip

]

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

Byte n

Byte 1 数据点类型指示type=2 二进制数据 0 0 0 0 0 0 1 0

Byte 2 指示后面 json 字符串长度

固定两字节长度-高位字节值为 0x00

Byte 3 固定两字节长度-低位字节值为 0x10

Byte 4

rdquods_idrdquordquoimagerdquo 创建数据流时定义的 ID(必填)

ldquoatrdquordquo2014-10-25 122323rdquo 时间(可选)

rdquodescrdquo字符串或 json 对象对该数据的描述(可选)

hellip

Byte n

Byte n+1 指示后面二进制数据长度

固定四字节长度-第 1 字节(最高)值为 0x00

Byte n+1 固定四字节长度-第 2 字节值为 0x00

Byte n+2 固定四字节长度-第 3 字节值为 0x01

Byte n+3 固定四字节长度-第 4 字节(最低)值为 0x00

Byte n+4 该域目前最大支持 3M

中移物联网有限公司 OneNET 开发文档中心

数据类型 3(type == 3)格式说明

数据类型 4(type ==4)格式说明

hellip 本例中的该域 256 字节数据

Byte n+260

Byte 1 数据点类型指示type=3 JSON 格式 2 字符串 0 0 0 0 0 0 1 1

Byte 2 指示后面字符串长度

固定两字节长度高位字节值为 0x00

Byte 3 固定两字节长度低位字节值为 0x46

Byte 4 通用格式

ldquodatastream_id1rdquordquovalue1rdquo

ldquodatastream_id2rdquordquovalue2rdquo

hellip

示例

ldquotemperaturerdquo225rdquohumidityrdquordquo952rdquo

hellip

hellip

hellip

hellip

Byte n

Byte 1 数据点类型指示type=4 JSON 格式 3 字符串 0 0 0 0 0 1 0 0

Byte 2 指示后面字符串长度

固定两字节长度高位字节值为 0x00

Byte 3 固定两字节长度低位字节值为 0x46

Byte 4 通用格式

ldquodatastream_id1rdquoldquodatetime1rdquordquovalue1rdquo

ldquodatastream_id2rdquo ldquodatetime2rdquordquovalue2rdquo

hellip

示例

ldquotemperaturerdquoldquo2015-03-22 223112rdquo225

hellip

hellip

hellip

hellip

Byte n

中移物联网有限公司 OneNET 开发文档中心

数据类型 5(type == 5)格式说明

数据类型 6(type == 6)格式说明

Byte 1 数据点类型指示type=5 自定义分隔符 0 0 0 0 0 1 0 1

Byte 2 指示后面字符串长度

固定两字节长度高位字节值为 0x00

Byte 3 固定两字节长度低位字节值为 0x41

Byte 4 消息中最前面两字节为用户自定义的域中分隔符和域间分隔符

这两个分隔符不能相同比如采用逗号作为域中分隔符分号作

为域间分隔符的格式如下

feild0feild1hellipfeildn

其中每个 field 格式支持 3种

field 格式 1 3 个子字段分别是数据流 ID时间戳数据值

通用格式

Datastream_iddatetimevalue

field 格式 2 2 个子字段分别是数据流 ID 和数据值省略时

间戳通用格式

Datastream_idvalue

field 格式 3 1 个子字段省略了数据 ID 和时间戳只传输数

据值平台将用该域(feild)所在的位置号(从 0 开始)作为数据

流 ID通用格式

value

示例

(1)temperature2015-03-22

223112225102pm258910

(2)temperature2015-03-22

223112225102pm258910

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

Byte n

Byte 1 数据类型指示type=6 带时间自定义分隔符 0 0 0 0 0 1 1 0

Byte 2 年(后两位)例如 2016 年则该字节为 16 0 0 0 1 0 0 0 0

Byte 3 月(1-12)

Byte 4 日(1-31)

Byte 5 小时(0~23)

Byte 6 分钟(0~59)

Byte 7 秒(0~59)

Byte 8 指示后面字符串长度

固定两字节长度高位字节值为 0x00

Byte 9 固定两字节长度低位字节值为 0x41

Byte 10 消息中最前面两字节为用户自定义的域中分隔符和域间分隔符

具体格式见 type=5 说明若相关域中没有时间戳则采用本类

hellip

中移物联网有限公司 OneNET 开发文档中心

数据类型 7(type == 7)格式说明(每次最多 500个数据流的浮点数)

hellip 型的默认时间戳当作数据点的时间来存储

Byte n

Byte 1 Bit0-5 数据类型指示type=7 可离散浮点数数据流

Bit6保留置 0

Bit7 时间指示位1携带 6字节时间

1 0 0 0 0 1 1 1

Byte 2 年(后两位)例如 2016 年则该字节为 16 0 0 0 1 0 0 0 0

Byte 3 月(1-12)

Byte 4 日(1-31)

Byte 5 小时(0~23)

Byte 6 分钟(0~59)

Byte7 秒(0~59)

Byte 8 数据流名称(取值范围 1-65535)

高位字节值为 0x00

Byte 9 低位字节值为 0x01

Byte10 数据流个数(取值范围 1-500)

高位字节值为 0x00

Byte11 低位字节值为 0x01

Byte 10 4 字节 float 类型低位在前高位在后

Byte 11

Byte 12

Byte 13

Byte n 数据流名称(取值范围 1-65535)

高位字节值为 0x24

Byte n+1 低位字节值为 0x37

Byte n+2 数据流个数(取值范围 1-500)

高位字节值为 0x01

Byte n+3 低位字节值为 0x00

Byte n+2 4 字节 float 类型低位在前高位在后

Byte n+4

Byte n+5

Byte n+6

中移物联网有限公司 OneNET 开发文档中心

7211 Qos0(Client-gtServer)

Device OneNet

Publish $dp(Qos0)

存储

图7-2 QoS连接图

设备发布 Qos0 消息(上报数据点)

平台收到上报数据点后保存起来

7212 Qos1(Client-gtServer)

Device OneNet

Publish $dp(Qos1)

存储

PubAck

图7-3 Qos1连接图

设备发布 Qos1 消息(上报数据点)

中移物联网有限公司 OneNET 开发文档中心

平台收到上报数据点后保存起来

平台给设备回复相应的 PubAck (报文格式参考 625)

7213 Qos2(Client-gtServer)

Device OneNet

Publish $dp(Qos2)

存储

PubRec

PubRel

PubComp

图7-4 Qos2连接图

设备发布 Qos2 消息(上报数据点)

平台收到上报数据点后保存起来

平台给设备回复相应的 PubRec报文

设备需回复平台 PubRel报文如超时不回平台则会断开相应连接

平台给设备回复 PubComp报文

注数据点上报功能不支持 Retain 特性

中移物联网有限公司 OneNET 开发文档中心

722 平台命令(下发amp回复)

7221 命令下发

平台使用 publish 报文来下发平台指令 报文格式如下

FixHeader

参考 623

VariableHeader

Field 名称 说明 格式

Field1 TopicName=rdquo$creqcmduuidrdquo $creq为系统下发

Cmd 的 指 令

cmduuid为该条指

令的 uuid

2字节字串长度 +

utf8字串

Payload

Payload包含真正的指令内容

72211 Qos0(Server-gtClient)

DeviceOneNet

Publish $creq(Qos0)

图7-5 Qos0命令下发

命令下发

平台向设备发送 topic为$creq的消息(该 topic为平台命令)

中移物联网有限公司 OneNET 开发文档中心

设备收到 topic 为$creq 的 topic 时需将其作为平台下发的指令来处

注目前命令下发以 Qos0级别进行推送

7222 命令回复

设备使用 publish 报文来回复平台指令 报文格式如下

FixHeader

参考 623

VariableHeader

Field 名称 说明 格式

Field1 TopicName=rdquo$crspcmduuidrdquo $crsp为系统处理

设备回复 cmd 的

指令cmduuid为

该条指令的 uuid

2字节字串长度 +

utf8字串

Payload

Payload包含真正回复的指令内容

72221 Qos0(Client-gtServer)

DeviceOneNet

Pulish $crsp(Qos0)

图7-6 Qos0下发命令

中移物联网有限公司 OneNET 开发文档中心

72222 Qos1(Clientlt-gt Server)

DeviceOneNet

Pulish $crsp(Qos1)

Puback

图7-7 Qos1下发命令

如果设备回复响应时以 Qos1回复则平台需要给设备回复一个 Puback 报文

72223 Qos2(Clientlt-gt Server)

DeviceOneNet

Pulish $crsp(Qos2)

PubRec

PubRel

PubComp

图7-8 Qos2下发命令

如果设备回复响应时以 Qos2回复则

1平台需回复设备一个 PubRec报文

中移物联网有限公司 OneNET 开发文档中心

2设备在收到 PubRec后需向平台回复 PubRel报文

3平台收到 PubRel 报文后向设备回复 PubComp报文

73 创建 Topic

Device OneNet

HTTP 请求

HTTP 响应

图7-9 创建Topic

设备通过发送 HTTP请求进行 topic 的创建操作

平台收到请求后创建 topic 并返回结果

请求及响应定义如下

HTTP方法 POST

URL httpapihecloudscommqtttopic

HTTP头部 api-keyxxxx-ffff-zzzzz必须 master key

URL参数

HTTP body

内容

ldquonamerdquordquoxxxxxxrdquo topic 名字只能由英文下划线反斜杠组成最长

1024个字符同一产品下 topic name 不重复

成功返回

errno 0

errorldquosuccrdquo

说明 每个产品最多 100个 topic

中移物联网有限公司 OneNET 开发文档中心

74 订阅

Device OneNet

Subscribe

Suback

更新设备订阅列表

图7-10 订阅

设备发起订阅请求(报文格式参考 629)

平台收到请求后更新 topic列表

平台给设备回复 SubAck (报文格式参考 6210)

注subscribe 的 request qos级别可以为 012

75 取消订阅

Device OneNet

UnSubscribe

UnSuback

更新设备订阅列表

图7-11取消订阅

中移物联网有限公司 OneNET 开发文档中心

设备发起取消订阅请求 (报文格式参考 6211)

平台收到请求后更新 topic 列表

平台给设备回复 UnSubAck (报文格式参考 6212)

76 推送设备 Topic

761 Publish 报文推送

Qos0设备使用 Qos 级别为 0的 Publish报文来进行推送

Device OneNet

Publish(Qos0)

Device

以Qos0 Publish到订阅设备

图7-12 Qos0推送

设备发起推送 topic请求(以 Qos0级别)

平台收到请求后将 topic以 Qos0级别推送到相关订阅设备(支持离线设

备推送)

平台不返回 PubAck或 PubRec 等报文

Qos1

设备使用 Qos级别为 1的 publish报文来推送 Topic

中移物联网有限公司 OneNET 开发文档中心

Device OneNet

Publish(Qos1)

PubAck

Device

以Qos1 Publish到订阅设备

设备回复平台 PubAck

图7-13 Qos1发布

设备发起推送 topic请求(以 Qos1级别)

平台收到请求后将 topic以 Qos1级别推送到相关订阅设备(支持离线设

备推送)

平台返回 PubAck 报文

Qos2

设备使用 Qos级别为 2的 publish报文来推送 Topic

中移物联网有限公司 OneNET 开发文档中心

Device OneNet

Publish(Qos2)

PubRec

Device

以Qos2 Publish到订阅设备

PubRec

PubRel

PubComp

PubRel

PubComp

图7-14 Qos2推送

设备发起推送 topic请求(以 Qos2级别)

平台收到请求后回复 PubRec报文

设备收到 PubRec后需回复 PubRel报文 (如超时不回复平台会断开与设

备的连接)

平台收到 PubRel 报文后回复 PubComp 给设备

平台在回复 PubComp 后会以 Qos2 级别推送到相关订阅设备(支持离线设

备推送)

设备需回复 PubRec报文 (如超时不回复平台会断开与设备的连接)

平台发送 PubRel 报文给设备

设备需回复 PubComp(发布完成)

Publish报文的格式如下

FixHeader

参考 623

中移物联网有限公司 OneNET 开发文档中心

VariableHeader

Field 名称 说明 格式

Field1 TopicName 填写设备订阅的 topic 2字节字串长度 + utf8

字串

Payload

Payload为设备自定义内容

762 HTTP 请求推送

Device OneNet

HTTP 请求

HTTP 响应

Device

Publish到订阅设备

图7-15 HTTP请求

设备以 HTTP 的方式发起推送 topic 请求

平台收到请求后将 topic推送到相关订阅设备 (目前只支持在线推送)

平台返回推送结果

请求及响应定义如下 HTTP方法 POST

URL httpapihecloudscommqtt

HTTP头部 api-keyxxxx-ffff-zzzzz必须 master key

URL参数 topic=ldquoXXXXXXrdquo必选在发送 mqtt协议的 topic 必填

HTTP body内容 用户自定义 Json 或二进制数据(小于 64K)

成功返回

errno 0

errorldquosuccrdquo

中移物联网有限公司 OneNET 开发文档中心

77 离线 Topic

推送 Topic只针对在线设备进行 topic 消息的推送离线设备不会收到订阅

的 topic 的消息离线 Topic则会将该消息推送给在线以及离线设备

1 如果设备在上线时设置了 clean session flag服务端会删除其订阅的

topic及相关的离线 topic消息

2 如果设备没有设置 clean session flag如果有与该设备相关的离线

topic消息则在鉴权成功后将离线消息推送给设备

3 遗嘱消息(will msg)只会推送给订阅了该 will topic的在线的设备离

线设备不会收到

4 离线消息的有效期默认为 2 天(暂不支持用户设定有效期)服务器只会

推送在 2天内的最近 10 条消息

78 数据点订阅

数据点订阅同一产品下的设备可以订阅其他设备的数据点订阅的 topic

格式为deviceid数据流名称即

被关注的设备在上传了该数据流名称的数据点后订阅了该 topic的其他设备都

会收到上传的数据点

1 AB设备的 deviceid分别为 92779278

2 A 设备订阅了名为92789527 的 topic(9278 为设备 B 的 id9527 为 B

设备上传的数据流名称)

3 B 设备上传了名为 9527的数据流(数据点为 11 1578hellip)

4 A 设备会收到多条(取决于设备 B 上传的数据点的个数)推送的 topic 名

为92789527 的 publish消息消息的 payload中则包含设备 B 上传的数据

注目前支持订阅的数据点的类型为 Type1~Type7(详见 721节)

中移物联网有限公司 OneNET 开发文档中心

第八章 常见问题 FAQ

用户在基于 OneNET 平台进行产品开发的过程中可能会遇到各种各样的问

题开发过程中遇到的问题一方面可以参考 OneNET 文档中心的文档或者本文

档前几个章节的内容另一方面用户可以参考本章节总结的常见问题希望这些

文档能对用户在开发过程中有一定的指导和帮助

本章将分三个小节对用户在开发产品过程中可能遇到的问题进行梳理分别

为终端设备接入 OneNET平台的常见问题API调用的常见问题和 OneNET平台

的能力

81 终端设备接入 OneNET 平台的常见问题

序号 问题描述 原因分析 解决方法

1

2

3

4

5

6

7

82 API 调用的常见问题

序号 问题描述 原因分析 解决方法

1

2

3

4

5

6

7

8

9

中移物联网有限公司 OneNET 开发文档中心

83 使用 OneNET平台遇到的常见问题

序号 问题描述 原因分析 解决方法

1

2

3

4

5

6

7

8

Page 14: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com

中移物联网有限公司 OneNET 开发文档中心

图3-4 创建产品页面

图3-5 创建产品成功页面

中移物联网有限公司 OneNET 开发文档中心

图3-6 添加设备页面

322 终端设备软硬件初始化

终端设备在上电以后需要完成设备的软硬件初始化硬件初始化包括各个

硬件模块的上电处理器的寄存器初始化工作模式初始化等等软件初始化包

括基础通信套件初始化应用接口初始化应用程序初始化等等

323 终端创建设备及资源

终端设备创建设备(device_id)配置产品 ID鉴权信息注册码连接

服务器 IP端口号等信息创建成功后与平台建立登陆连接连接成功后即可向

平台上报数据点

324 登录 OneNET平台

终端设备的基础通信套件完成初始化以及设备资源创建完成后可向

OneNET平台发送登陆请求返回登录结果如果参数错误或者登录超时平台会

返回登录失败如果验证通过平台会返回登录成功

若终端设备登录平台成功设备名称左边的圆形图标会由灰色(离线状态)

变成绿色(在线状态)如图 3-7所示

中移物联网有限公司 OneNET 开发文档中心

图3-7 平台侧设备状态显示

325 设备数据点上报

终端设备与平台成功建立连接后设备使用 publish 报文向平台上报数据点

平台收到数据点后保存到对应数据流下方便应用查阅数据点上报格式以及类型详见

721

图3-8 平台侧收到设备数据流显示

326 创建应用

用户可以利用上传的数据创建相关的应用发布直观的展示页面目前在平台应用孵化

器中提供了曲线图柱状图表盘物体位置图片和开关等应用

在产品详情页面点击ldquo应用管理rdquo进入应用管理主界面如下图

中移物联网有限公司 OneNET 开发文档中心

图3-9 应用管理模块

点击ldquo创建应用rdquo输入应用名称点击ldquo创建rdquo如下图

图3-10 新应用创建

保存成功后点击编辑按键进入应用编辑页面如下图

中移物联网有限公司 OneNET 开发文档中心

图3-11 应用编辑入口

图3-12 应用编辑界面

在应用编辑页面中使用左侧的控件进行应用编辑此例中我们选择表盘控件来显示

刚刚上传的数据点击表盘控件如下图所示

中移物联网有限公司 OneNET 开发文档中心

图3-13 表盘控件添加

在右侧的属性中选择设备以及数据源(及刚刚上传的数据流)如下图

图3-14 表盘控件数据流绑定

在确定好数据流之后可以看到表盘回显示成我们添加的数据的值其他的

刷新频率以及表盘显示样式读者可以自行更具需求加以修改

完成应用编辑之后点击右上角保存按钮退出应用编辑

在应用管理页面点击该应用即可查看编辑好的应用页面

中移物联网有限公司 OneNET 开发文档中心

图3-15 保存应用

图3-16 应用查看与分享

该应用可以通过共享ldquo发布链接rdquo的方式将该应用共享给他人

33 设备批量接入

单个设备可以通过平台的开发者中心添加设备的方式进行创建若用户有多

个设备直接与平台 TCP连接的终端通过手动添加需耗费大量时间人力OneNET

中移物联网有限公司 OneNET 开发文档中心

为大批量接入用户提供 3种批量创建设备的方案

331 平台设备批量复制

此种方式为选择某个设备作为复制的模板通过导入 EXCEL的方式进行设备

复制厂商可以在小批量测试时使用该功能

在设备列表中点击查看详情

图3-17 设备批量接入

在设备详情页面点击批量导入设备信息

中移物联网有限公司 OneNET 开发文档中心

图3-18 导入设备信息

点击批量复制

图3-19 批量复制

中移物联网有限公司 OneNET 开发文档中心

目前提供三种批量创建的方式 excel 导入的方式为主要接入方式选择

excel导入点击下载模板

图3-20 快速导入

图3-21 Excel导入

打开下载下来的 excel模板表中的 titledesctags等均为将要批量导

入的设备的数据其中的 title 和 auth_info 为必填选项title 为设备名

中移物联网有限公司 OneNET 开发文档中心

auth_info对应设备的鉴权信息

图3-22 Excel格式

填写 3个设备信息

图3-23 Excel内容

三个设备的 title和 auth_info都一样均为 20170808000012017080800002

2017080800003保存该表格点击ldquo点击上传rdquo上传保存好的 excel 文件

点击ldquo确定导入批量rdquo

中移物联网有限公司 OneNET 开发文档中心

图3-24 导入上传

图3-25 确认创建

可以看到在原设备目录下新增了 3个设备其名称分别为 2017080800001

20170808000022017080800003

中移物联网有限公司 OneNET 开发文档中心

图3-26 批量创建的设备

点击设备详情可以看到设备目录下各个设备的鉴权信息与表格中所填

写的内容一致

图3-27 设备ID及鉴权信息

至此完成了通过批量设备复制的方式完成设备批量创建的过程用户如果

要使用这个功能需要将自己终端的出厂序列号整理到这个 excel表中然后利

中移物联网有限公司 OneNET 开发文档中心

用上传表格的方式进行批量创建

332 应用平台调用新增设备 API

OneNET 提供了创建设备的 API接口

图3-28 新增设备API接口

其中的 auth_info 参数对应着设备的鉴权信息通过调用此 API 接口可以

实现在平台上新增设备的功能用户如果有自己的第三方应用平台进行设备管理

可以通过多次调用此接口的方式进行设备的批量创建在调用接口时需要确保每

次调用的 auth_info 参数对应着自己的每一个终端不同的出厂序列号

333 终端调用注册 API

API 实际是 HTTP 协议的通信协议终端也可以通过封装 HTTP 包发送注册

中移物联网有限公司 OneNET 开发文档中心

设备请求的方式调用 API

终端调用注册 API 创建设备并接入的流程如图 3-29所示

平台

TCP连接协议接入机

创建产品

发送连接报文

连接应答

数据应答

发送数据报文

生成连接报文

设备

发送下行命令 下发命令

解析下行命令

生成存储数据报文

解析连接应答

解析数据应答

必要流程

可选流程

存储到数据流 数据源 创建应用

心跳应答

发送心跳报文生成心跳报文

解析心跳应答

平台操作

设备操作

利用设备本身的sn和产品的设备注册码生成注册报文

TCP连接API服务器

发送注册报文

注册应答

解析设备ID

创建设备

设备开机

读取硬件中烧录的设备编号(sn)

图3-29 终端调用注册API接入流程

1) 创建产品

重要参数产品 ID注册码产品 APIKey(见附录一)

2) 生成并发送注册报文

每一个用户终端中都有厂商烧录的唯一出厂序列号(sn)终端上电

之后应该首先读取自己的 sn然后通过 1)中的注册码和 sn 一起组成注

册报文

注册报文格式如下例

POST httpapihecloudscomregister_deregister_code=6TM7OkhNsTjATvFx HTTP11

Host apihecloudscom

Content-Length 48

中移物联网有限公司 OneNET 开发文档中心

sn02136616511001titletestdevice0001

其中

6TM7OkhNsTjATvFx 为产品注册码

02136616511001 是本例中模拟的设备唯一编号

testdevice0001 是本例中模拟的设备名

若上传的数据格式以及参数鉴权均正确则平台会返回设备创建成功

返回设备 ID以及该设备对应的设备 api-key

HTTP11 200 OK

Date Wed 09 Aug 2017 064821 GMT

Content-Type applicationjson

Content-Length 95

Connection keep-alive

Server Apache-Coyote11

Pragma no-cache

errno0datadevice_id11142371keyq9Mw0zqiAPjTwqfyCk2mWrUi8=errorsucc

3) 在步骤 2)完成之后平台上的设备就已经成功创建了终端需要

重新 TCP连接到对应协议的服务器上完成设备连接(与设备进行映射)以

及上传数据的操作

34 设备 ID 与产品序列号

通过 OneNET构建的物联网系统中有两套比较重要的编码设备 ID与产品序列号

(SN)其中

产品序列号是由厂商指定的在厂商的产品范围内是保持唯一的在出厂前烧写到每

一个终端中通常包含在与平台通信的数据中并以条形码的方式贴在产品的包装上用

于从用户的角度区分每一个独立的终端

设备 ID是在平台创建设备时由 OneNET分配的平台范围内唯一的编号应用于第三

方平台调用 OneNET API时使用

在创建设备时OneNET平台需要用户以设备 sn为参数进行设备创建成功之后平

台会分配一个设备 ID这样 OneNET内部就有了一个 sn-设备 ID的映射关系

终端登陆使用的鉴权信息是出厂时烧写好的 sn鉴权通过之后平台可以将该终端

上传是数据放到对应的设备中

上层应用通过创建设备 API或者查询设备 API建立 sn-设备 ID映射表在需要操作

某一设备时首先可以获取的是终端的 sn号(因为对用户是可见的)通过映射表获取设

中移物联网有限公司 OneNET 开发文档中心

备 ID然后再通过 API访问 OneNET平台上的对应设备

两套编码在物联网系统中的应用位置如下图所示

物联网应用

OneNET

终端

(烧写sn)

HTTP API 以设备ID为参数进行API访问

接入协议以sn为鉴权参数进行设备连接

设备

设备名

设备ID

设备sn

设备标签

sn 设备ID

snmdash设备ID映射表

中移物联网有限公司 OneNET 开发文档中心

第四章 第三方应用开发

第三方应用与 OneNET 平台的业务逻辑关系如图 4-1 所示第三方应用与

OneNET平台之间通过 HTTPS请求应答的方式实现数据交互OneNET 平台为第三

方应用提供封装好的 API 接口应用平台通过调用这些 API 接口完成对 OneNET

平台的读写执行以及设备管理请求然后 OneNET 平台会将相应的指令请求发送

到终端设备OneNET 平台收到终端设备响应的数据及设备信息后会将数据及

设备信息推送到应用平台完成应答

下面将分别介绍第三方应用接入 OneNET 平台的步骤OneNET平台提供的数

据推送功能以及 OneNET 平台为第三方应用封装好的 API接口

图4-1 第三方应用与OneNET平台的逻辑关系

41 第三方应用接入 OneNET 平台

第三方应用与 OneNET平台实现数据交互的前提是已经建立连接第三方应

用接入 OneNET平台的开发流程如图 4-2所示包括三个步骤

(1) 在 OneNET 平台创建了设备该设备有对应的真实设备且能正常上报

数据

(2) 用户已经开发并部署了 OneNET平台验证接入的程序

(3) 在 OneNET 平台正确配置了第三方应用数据接收的地址(URL)

Token以及其他参数

中移物联网有限公司 OneNET 开发文档中心

在确保上述第(1)步已经实现的基础上下面将分别讲述第(2)步和第

(3)步的实现过程

图4-2 数据推送的开发流程

412 第三方应用平台接入验证程序

第三方应用平台接入验证程序工作流程如下所述当 OneNET 平台完成对第

三方开发平台的配置后会向第三方开发平台发起 URLampToken验证接入验证程

序对平台发送的验证参数进行验证验证通过后第三方开发平台会向 OneNET

平台返回验证消息当 OneNET 平台收到验证消息后说明第三方开发平台与

OneNET平台已建立连接

目前 OneNET平台为第三方应用平台提供接入验证程序的 SDK有 Javaphp

Nodejs和 C四个版本

SDK 下载地址httpsopeniot10086cndocart432html118 -ldquo数

据推送rdquo

413 OneNET 平台配置第三方应用平台

在 OneNET平台对第三方应用平台的配置界面如图 4-3所示

URL第三方开发平台的地址

Token可以自定义用于第三方开发平台接入平台握手验证

消息加解密方式有明文模式和安全模式当启用安全模式后平台端需要

用户自定义 AESKey 或者由平台随机生成在应用程序中使用该 AESKey 解密消

中移物联网有限公司 OneNET 开发文档中心

推送时间限制(秒)和推送数据限制(个)设置ldquo推送时间限制rdquoldquo推送数

据限制rdquo可以实现批量推送数据减少服务器压力当满足ldquo推送时间限制rdquo和

ldquo推送数据限制rdquo要求后OneNET 将给第三方推送数据如果没有设置ldquo推送

时间限制rdquo和ldquo推送数据限制rdquo将默认数据实时推送

图4-3 第三方开发平台的配置界面

当用户成功在 OneNET 平台配置了第三方开发平台服务器地址后点击ldquo提

交rdquo按钮后OneNET 平台会向第三方应用平台发起 URLampToken 验证请求验证

通过且收到第三方返回的验证消息后则第三方应用平台与 OneNET 平台已建立

连接之后OneNET 平台在收到设备数据时会将设备数据推送到已配置的第三

方应用平台

用户数据接收服务程序接收到 OneNET平台发送的 ldquoURLampTokenrdquo验证请求

请求的格式形如httpipporttestmsg=xxxampnonce=xxxampsignature=xxx

蓝色字体部分为用户在 OneNET平台配置的 URL常规的验证流程如下

(1)在请求中获取参数ldquononcerdquoldquomsgrdquo的值将ldquotokenrdquo(此为页面

配置参数 token的值)ldquononcerdquoldquomsgrdquo的值计算 MD5(token+nonce+msg)

加密值并且编码为 Base64字符串值

中移物联网有限公司 OneNET 开发文档中心

(2)将上一步中 Base64字符串值通过 URL Decode 计算后的值与请求参数

ldquosignaturerdquo的值进行对比如果相等则表示 token验证成功

(3)如果 token 验证成功向 OneNET 平台返回ldquomsgrdquo参数值否则返回

其他值

说明如果用户不想验证 Token 的有效性可以忽略以上步骤并直接向

OneNET平台返回ldquomsgrdquo参数值

42 OneNET 平台数据推送

平台以 HTTPS POST 请求形式向第三方应用平台注册地址推送数据推送数

据相关信息以 JSON 串的形式置于 HTTPS请求中的 body部分

第三方应用平台在接收数据时会接收到数据的明文消息或者密文消息

明文消息中以ldquotyperdquo的数值区分不同的消息而密文消息与明文消息的区别

是ldquomsgrdquo部分经过了加密处理下面将分别对明文消息密文消息以及消息相

关字段和密文的加密算法进行说明

421 明文消息

明文消息有两种消息类型分别为数据点消息和设备上下线消息而数据点

消息又分为单条数据点消息和数据点消息批量形式数据点消息批量形式中的不

同数据点是以不同时间戳区分的

(1)数据点消息(type=1)

msg

type 1

dev_id 2016617

ds_id datastream_id

at 1466133706841

value 42

msg_signature message signature

nonce abcdefgh

(2)数据点消息批量形式(type=1)

msg [

type 1

dev_id 2016617

ds_id datastream_id

中移物联网有限公司 OneNET 开发文档中心

at 1466133706841

value 42

type 1

dev_id 2016617

ds_id datastream_id

at 1466133706842

value43

]

msg_signature message signature

nonce abcdefgh

(3)设备上下线消息(type=2)

msg

type 2

dev_id 2016617

status 0

login_type 1

at 1466133706841

msg_signature message signature

nonce abcdefgh

422 密文消息

密文消息中的ldquoenc_msgrdquo是由明文消息中的ldquomsgrdquo采用 AES 加密算法而

enc_msgxxxx

msg_signature

message signature

nonceabcdefgh

423 消息相关字段说明

表4-1 消息相关字段说明

字段 字段说明

type 标识数据类型当前版本范围[15]

dev_id 设备 ID

ds_id 公 开 协 议 中 的 数 据 流 ID 其 格 式 为

objectID_instanceID_resourceID

at 平台时间戳单位 ms

value 具体数据部分为设备上传至平台或触发的相关

数据

中移物联网有限公司 OneNET 开发文档中心

status 设备上下线标识

0-下线 1-上线

login_type

设备登陆协议类型

1EDP 2nwx 3JTEXT 5JT808 6

MODBUS 7MQTT 8gr2010NB-IoT

cmd_type

命令响应的类型

1设备收到 cmd的 ACK 响应信息 2设备收到

cmd的 Confirm响应信息

cmd_id 命令 ID

msg_signatur

e 消息摘要

nonce 用于计算消息摘要的随机串

enc_msg 加密密文消息体对明文 JSON串(msg字段)的

加密

424 加密算法详述

平台基于 AES算法提供加解密技术具体阐述如下

EncodingAESKey 即消息加解密 Key 的 BASE64编码形式长度固定为 43

个字符从 a-zA-Z0-9共 62个字符中选取由服务开启时填写后

也可申请修改

AES密钥计算为 AESKey=Base64_Decode(EncodingAESKey + ldquo=rdquo)

EncodingAESKey 尾部填充一个字符的ldquo=rdquo 用 Base64_Decode 生成 32

个字节的 AESKey

AES采用 CBC 模式秘钥长度为 32 个字节(256位)数据采用

PKCS7填充 初始化 iv向量取秘钥前 16字节 PKCS7K为秘钥字

节数(采用 32)buf为待加密的内容N为其字节数Buf 需要被填

充为 K的整数倍在 buf的尾部填充(K-NK)个字节每个字节的内容

是(K- NK)具体详见toolsietforghtmlrfc2315

BASE64采用 MIME格式字符包括大小写字母各 26个加上 10个数

字和加号ldquo+rdquo斜杠ldquordquo一共 64个字符等号ldquo=rdquo用作后缀填

出于安全考虑平台网站提供了修改 EncodingAESKey的功能(在

EncodingAESKey 可能泄漏时进行修改对应上第三方平台申请时填写

的接收消息的加密对称密钥)所以建议保存当前的和上一次的

中移物联网有限公司 OneNET 开发文档中心

EncodingAESKey若当前 EncodingAESKey 生成的 AESKey解密失败则

尝试用上一次的 AESKey的解密

平台的加密消息部分为 enc_msg= Base64_Encode( AES_Encrypt

[random(16B)+msg_len(4B)+msg] )即以 16字节随机字节串拼接 4字

节表示消息体长度的字节串(此处 4 字节长度表示为网络字节序)再加

上消息本身的字节串作为 AES加密的明文再以 AES算法对明文进行加

密生成密文最后对密文进行 BASE64 的编码操作生成加密消息体

对加密消息体的解密流程为1)首先进行加密消息体的 BASE64 解码操作

aes_msg=Base64_Decode(enc_msg)2)对获取的解码内容以 AES 算法进行解密

操作获取明文部分plain_msg=AES_Decrypt(aes_msg)解密中使用的秘钥由

EncodingAESKey 计算得来使用的初始化 iv 向量为计算出的 aes 秘钥的前 16

字节3)去掉 plain_msg 的前 16 字节再以前 4 字节取出消息体长度根据消

息体长度获取真实的消息部分(推荐以消息体长度获取真实消息以兼容

plain_msg 未来可能出现的结构变更)表示加密传输的数据后两字段与明文

传输一致

43 API 接口

第三方开发平台应用层通过 Rsetful API 的方式和 OneNET平台进行交互对

接实现命令的下发数据的读写以及相关业务的交互

针对 MQTT 协议目前主要开发了以下 API 用来实现第三方开发平台向

OneNET平台请求读写执行以及设备管理请求具体见下表 4-2下面分别对每一

种 API进行说明

表4-2 API功能说明

API 类别 操作对象 API名称

需要终端响应 只需平台响应

设备

注册

更新设备注册属性

新增

更新

精确查询单个设备

中移物联网有限公司 OneNET 开发文档中心

模糊查询设备

批量查询设备状态

删除

数据流

新增

更新

查询单个数据流

查询多个数据流

删除

数据点

新增

查询

二进制数

新增

查询

触发器

新增

更新

查询单个触发器

模糊查询触发器

删除

触发数据内容

命令

发送命令

查询命令状态

查询命令相应

查询设备历史命令

视频能力 获取播放地址

APIKEY

新增

更新

查看

删除

消息订阅

按 Topic发送命令

查询订阅指定 Topic设备的列表

查询设备订阅的 Topic列表

删除产品的 Topic

查询产品的 Topic

中移物联网有限公司 OneNET 开发文档中心

432 设备

4321 注册

表4-3 设备注册

HTTP方法 POST

URL apihecloudscomregister_de

URL参数 register_code=6TM1OkhNsTjATvFx 设备注册码(必填)

HTTP内容

(示例)

sn 2015031401421 设备唯一标识 string类型最长 512字符

mac C89346DA4373 设备唯一 mac标识最长 32字符

title myedpdevice 设备名(可选) 最长 32个字符

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

keyQ1VdWoEvdkCye=d1=HcCSP6LvCw= 新设备 apikey

device_id 325018 设备 ID

说明

1 响应消息中 errno 表示错误码error 表示错误原因如果创建设备失

败则没有 data字段

2 snmac一定要必填其中一个而且只可以传一个用于鉴权就是设备

新增中的 auth_info

3 此接口根据产品设置的不同默认 allow_dup=true可以生成新设备及

key或获取原有设备及 key见下表

表4-4 对应表

产品允许重复 sn 在产品中已存在 sn 在产品中不存在

allow_dup=true 是 sn 对应的设备 id 和 key 新的设备 id 和 key

allow_dup=false 否 报错 新的设备 id 和 key

中移物联网有限公司 OneNET 开发文档中心

此接口返回的新设备默认设备名均为auto_register均为私有设

备设备协议与产品协议相同

4322 更新设备注册属性

表4-5 更新设备注册属性

HTTP方法 PUT

URL apihecloudscomregister_attr

HTTP头部 api-key xxxxddddsssaaa 必须为 masterkey

HTTP内容

(示例)

allow_dup true|false是否允许重复提交相同的设备 sn 默认 true

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

默认 allow_dup 为 true主要用于设备注册码创建设备属性限制

4323 新增

表4-6 新增设备注册属性

HTTP方法 POST

URL apihecloudscomdevices

HTTP头部 api-key xxxxddddsssaaa 必须为 masterkey

HTTP内容

(示例)

title mydevice 设备名

desc some description 设备描述(可选)

tags [chinamobile] 设备标签(可选可为一个或多个)

protocolMQTT 选择一种接入协议(可选默认为 HTTP)

location lon 106 lat 29 ele 370设备位置纬度

经度 高度(可选)

private true| false 设备私密性(可选默认为 ture)

auth_info 201503041a5829151 MQTT设备设备唯一编号

other version 100 manu china mobile 其他信息(可

选JSON格式可自定义)

HTTP响应响

应消息内容

(实例)

errno 0

error succ

data

中移物联网有限公司 OneNET 开发文档中心

device_id233444 平台分配的设备 ID

4324 更新

表4-7 更新

HTTP方法 PUT

URL apihecloudscomdevicesdevice_id

HTTP头部 api-key xxxxddddsssaaa masterkey或设备 apikey

HTTP内容

(示例)

title mydevice 设备名(可选)

desc some description 设备描述(可选)

tags [chinamobile] 设备标签(可选)

protocolMQTT 选择一种接入协议(可选)

location lon106 lat 29 ele 370设备位置经度

纬度 高度(可选)

private true| false 设备私密性(可选)

auth_info201503041a5829151 MQTT设备设备唯一编号(可选)

other version 100 manufacturer china mobile 其

他信息(可选)

HTTP响应响

应消息内容

(示例)

errno 0

error succ

中移物联网有限公司 OneNET 开发文档中心

4325 精确查询单个设备

表4-8 精确查询单个设备

HTTP方法 GET

URL apihecloudscomdevicesdevice_id

HTTP头部 api-key xxxxddddsssaaa masterkey 或设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

iddevice_id

tags [chinamobile]

onlinetrue|false

protocolMQTT

titlemy device1

descsome description

create_time2015-09-16 102222

privatetrue|false

locationele370lat17609lon17703

auth_infohellip

otherversion100manufacturerchina mobile

keys[titledevice-auto-keykey2JO3B12O1]

数据流

datastreams[

create_time 2014-10-23 202222

iddatastream_id1

unitcelsius

unit_symbolC

uuid 231a5aa9-9de4-5f2e-9e0f-015181c98429

]

4326 模糊查询设备

表4-9 模糊查询设备

HTTP方法 GET

URL apihecloudscomdevices

中移物联网有限公司 OneNET 开发文档中心

URL 参数

key_words=my 匹配关键字(可选从 id和 title字段中左匹配)

auth_info=203x1 鉴权信息(可选对应注册时的 sn参数唯一设

备编号)

tag=mobile 标签(可选)

online=true| false 在线状态(可选)

private=true| false 私密性(可选)

page=1 指定页码最大页数为 10000(可选)

per_page=30 指定每页输出设备个数默认 30最多 100(可选)

device_id=235122 指定设备 ID多个用逗号分隔最多 100个(可

选)

begin=2016-06-20 起始时间包括当天(可选)

end=2016-06-20 结束时间包括当天(可选)

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

total_count1

per_page30

page1

devices

[

id3497307

titlemy device1

desc device desc

privatetrue

protocolMQTT

onlinefalse

locationlon10655231191544001lat29535451246673

create_time2013-02-11 122233

auth_infoSYSz=8QY3r7aTQ48UKfqPnB=PybYRo=

]

4327 批量查询设备最新数据

表4-10 批量查询设备最新数据

HTTP方法 GET

中移物联网有限公司 OneNET 开发文档中心

URL apihecloudscomdevicesdatapoints

URL参数 devIds=1221122331123 设备 id用逗号隔开限制 1000 个设备

HTTP头部 api-key xxxxddddsssaaa masterkey 或设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

error ldquosuccrdquo

data

devices [

id 12323 设备 id

title daf设备名

datastreams

[

id temperature数据流名称

at 2017-02-12 102222数据流更新时间

value 12数据流最新数据

hellip

helliphellip

]

hellip

hellip

]

4328 删除

表4-11 删除设备

HTTP方法 DELETE

URL apihecloudscomdevicesdevice_id

HTTP头部 api-key xxxxddddsssaaa 可为设备级别的 Key

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

中移物联网有限公司 OneNET 开发文档中心

说明删除设备会删除该设备下所有数据流和数据点删除设备动作是异步

的系统会在后续逐步删除该设备下的数据流和数据点

433 数据流

4331 新增

表4-12 新增数据流

HTTP方法 POST

URL apihecloudscomdevicesdevice_iddatastreams

HTTP头部 api-key xxxxddddsssaaa masterkey 或设备 apikey

HTTP内容

(示例)

idtemperature 数据流名称 示例温度

tags[Tag1Tag2] 数据流标签(可选可以为一个或多个)

unitcelsius 单位(可选)

unit_symbolC 单位符号(可选)

HTTP响应响

应消息内容

(示例)

errno 0

data

ds_uuid 9e6bcac9-2c6f-59d5-adae-3955df2e7bce平台分配

数据流 UUID

error succ

4332 更新

表4-13 更新数据流属性

HTTP方法 PUT

URL apihecloudscomdevicesdevice_iddatastreamsdatastream_id

示例apihecloudscomdevices421240datastreamstemperature

HTTP头部 api-key xxxxddddsssaaa masterkey 或设备 apikey

HTTP内容

(示例)

tags[Tag1Tag2] 数据流标签(可选)

unitcelsius 单位(可选)

unit_symbolC 单位符号(可选)

HTTP响应响

应消息内容

(示例)

errno 0

error succ

中移物联网有限公司 OneNET 开发文档中心

4333 查询单个数据流

表4-14 查询单个数据流

HTTP方法 GET

URL apihecloudscomdevicesdevice_iddatastreams

URL参数 datastreams_ids = 查看的 datastream的 id

HTTP头部 api-key xxxxddddsssaaa masterkey 或该设备的设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

data [

update_at 2018-06-29 112938 数据流最后更新时

id 湿度 数据流名称

create_time 2018-06-28 170548数据流创建时间

current_value 53845013最新数据点

]

error succ

4334 查询多个数据流

表4-15 查询多个数据流

HTTP方法 GET

URL apihecloudscomdevicesdevice_iddatastreams

URL 参数

datastream_ids= 查看的 datastream的 id多个 id之间用英文逗号

分开(参数缺省时为查询所有数据流)

示例

apionenetcomdevices1234datastreamsdatastream_ids=tempgps

表示查看 temp和 gps两个数据流的信息

HTTP头部 api-key xxxxddddsssaaa masterkey 或者 该设备的设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data 数据流信息

[

idtemperature 数据流名称设备范围内唯一

tags[Tag1Tag2] 数据流标签

unitcelsius 单位

unit_symbolC单位符号

create_timexxxx-xx-xx 102222 创建时间

中移物联网有限公司 OneNET 开发文档中心

current_valuehellip该数据流下数据点最新值

update_atxx-xx-xx该数据流下数据点最新上传时间

]

[

idhumi 数据流名称设备范围内唯一

tags[Tag1Tag2]

unit_symbol

create_timexxxx-xx-xx 102222

current_valuehellip

update_atxx-xx-xx

]

[]

4335 删除

表4-16 删除数据流

HTTP方法 DELETE

URL apihecloudscomdevicesdevice_iddatastreamsdatastream_id

URL参数 无

HTTP头部 api-key xxxxddddsssaaa masterkey 或者设备 key

HTTP响应响

应消息内容

(示例)

errno 0

error succ

434 数据点

4341 新增

中移物联网有限公司 OneNET 开发文档中心

表4-17 新增数据点

HTTP方法 POST

URL apihecloudscomdevicesdevice_iddatapoints

URL参数 type=3 上传数据类型(可选默认为完整 JSON型见 HTTP内容示

例)

HTTP头部 api-key xxxxddddsssaaa masterkey 或者 设备 apikey

HTTP内容

(示例)

datastreams

[

id temperature 数据流名称或数据流模板名称

datapoints [

at 2013-04-22T003543 上传数据点时间可选如

果为空则设备云会取当前时间如果存在其格式必须为 YYYY-MM-

DDThhmmss的形式(例如2015-03-22T223112)

value 42 上传数据点值

at 2013-04-22T005543

value 84 上传数据点值

]

id key 数据流名称或数据流模板名称

datapoints [

at 2013-04-22T003543上传数据点时间可选

value hellip上传数据点值

at 2013-04-22T003543

value hellip上传数据点值

]

hellip

]

中移物联网有限公司 OneNET 开发文档中心

HTTP 响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

1 可以一次性向设备云上传多个数据流每个数据流中可以包括多个数据

点示例程序表示向设备云上数据流 temperature 和数据流 key上传数据其中

temperature数据流有两个数据点key数据流也有两个数据点

2 如果某个数据流不存在则在增加数据点时设备云会自动创建一个新

的数据流注意新数据流的 datastream id 不可为空

3 数据点表示在某个时刻该数据流的值其 at表示时间为可选字段如

果为空则设备云会取当前时间如果存在其格式必须为YYYY-MM-DDThhmmss

的形式(例如2015-03-22T223112)

4 数据点中的 value表示具体的值其值为 JSON对象可以为整型浮点

型字符串多种类型如果 value部分用双引号括起来则其在设备云存储为字

符串如果不用双引号括起来则其表示数值字符编码现在只支持 UTF-8

5 数据点对应的时间是数据点的标识的一部分相同时间的两个数据点

设备云会同时对这两个相同时间的数据点进行保存不会出现覆盖另一个数据点

的情况一般如果 at 部分取空设备云会取系统时间精度为毫秒如果在一

条命令中某一个数据流包含多个数据点都没有 at 字段设备云将会对所有数据

点进行保存

6 新增数据点支持如下简写方式在请求的 URL中增加 type字段指示所

使用的格式类型目前 type支持 345三种情况

URLapihecloudscomdevices2214570datapointstype=3

示例temperature225humidity952

表示在数据流 temperature中增加一个数据点 225在 humidity 中增加一

个数据点 952

URLapihecloudscomdevices2214570datapointstype=4

示例temperature2015-03-22T223112225

表示在数据流 temperature中加一个数据点在 2015年 3月 22 日 22点 31

中移物联网有限公司 OneNET 开发文档中心

分 12秒的值为 225

URLapihecloudscomdevices2214570datapointstype=5

示例temperature2015-03-22T223112225pm2589

表示在数据流 temperature中加一个数据点即 2015年 3月 22 日 22点 31

分 12秒的值为 225在数据流 pm25中添加一个数据点即当前时间的值为 89

4342 查询

表4-18 查询数据点

HTTP方法 GET

URL apihecloudscomdevicesdevice_iddatapoints

URL 参数

datastream_id=abc 查询的数据流多个数据流之间用逗号分隔

(可选)

start=2015-01-10T080035 提取数据点的开始时间(可选)

end=2015-01-10T080035 提取数据点的结束时间(可选)

duration=3600 查询时间区间(可选单位为秒)

start+duration按时间顺序返回从 start开始一段时间内的数据点

end+duration按时间倒序返回从 end回溯一段时间内的数据点

limit=100 限定本次请求最多返回的数据点数0ltnlt=6000(可选

默认 1440)

cursor= 指定本次请求继续从 cursor位置开始提取数据(可选)

sort=DESC | ASC 值为 DESC|ASC时间排序方式DESC倒序ASC升

序默认升序

ltnlt=6000(可选默认 1440)

HTTP头部 api-key xxxxddddsssaaa masterkey 或者 该设备的设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

cursor70921_3771908_1472355096

datastreams[

idtemperature数据流名称或数据流模板名称

datapoints[

at xxxx-xx-xx 102222value42数据点上传时间和

at xxxx-xx-xx 102222value84

]

中移物联网有限公司 OneNET 开发文档中心

idkey 数据流名称或数据流模板名称

datapoints[

at xxxx-xx-xx 102222valuehellip

atxxxx-xx-xx 102222valuehellip

]

hellip

]

1 若不携带任何参数平台返回本设备所存在的所有数据流中的最新数据

(这一种情况下查询时出现时延较大的性能问题建议在 URL 参数中加上

newadd参数并将其值赋为 true如 newadd=true)

2 若不携带数据流 id参数携带 limit 参数时会返回该设备每个数据流

最多 limit 条数据

3 若要查看某一条数据流数据需在上述 URL中增加参数 datastream_id

4

apihecloudscomdevices564280datapointsdatastream_id=tempamplimit

=10会返回数据流temp中最近的 10个数据点

5 要查看某一条数据流在某个时间范围内的数据可以在增加 start和 end

参数

示例

apihecloudscomdevices564280datapointsdatastream_id=temper

atureampstart=2013-05-12T171233ampend=2013-06-12T172233 表示查询本设

备对应的数据流在 2013 年 5 月 12 日 17 点 12 分 33 秒到 17 点 22 分 33 秒的数

据点注意如果 start 参数存在end参数不存在表示取 start后的所有数据

如果 start 不存在end 存在设备云会忽略 end参数注意日期时间格式格

式必须为示例中的格式YYYY-MM-DDThhmmss例如2013-05-12T171233

日期和时间之间用大写字母 T 分隔start 和 end 之间的时间间隔最大为 1 年

超过一年会忽略

如果指定了 start 参数则可能返回的数据点的数目会很多此时默认会返

回最多 100 个数据点可以使用 limit 参数设定返回多少个数据点最大为

6000个数据点当实际的数据点数目多于 limit 限定的数目时返回的 json串

中移物联网有限公司 OneNET 开发文档中心

中会有一个 cursor 字段下一次请求的命令行中可以携带此 cursor 字段表示接

着遍历本数据流此 cursor字段标识上次取出数据点后下一个数据点的位置

435 二进制数据

4351 新增

将二进制数据将作为数据点保存到设备下的某个数据流中设备云返回该二

进制数据的索引号

表4-19 新增二进制数据

HTTP方法 POST

URL apihecloudscombindata

URL参数 device_id=421590 数据所属设备(必选)

datastream_id=bin 该数据所属已经存在的数据流(必选)

HTTP头部 api-key xxxxddddsssaaa masterkey 或者该设备的设备 key

HTTP 内 容

(示例)

普通二进制数据文件图像等

(最大限制为 800上传时间间隔需大于 1ms)

HTTP响应响

应消息内容

(示例)

errno 0

error succ

data

index3491506_1475204886914_bin 二进制数据索引号

4352 查询

表4-20 查询二进制数据

HTTP方法 GET

URL apihecloudscombindataindex

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

普通二进制数据文件图像等二进制形式数据

436 触发器

4361 新增

表4-21 新增触发器

HTTP方法 POST

中移物联网有限公司 OneNET 开发文档中心

URL apihecloudscomtriggers

HTTP头部 api-key xxxxddddsssaaa 必须为 masterkey

HTTP内容

(示例)

titlewen du jian kong 设备名(可选)

ds_idgps 数据流名称(id)(可选)

dev_ids[10272345615523] 设备 ID(可选)

ds_uuids[ 数据流 uuid(可选)

9ad09uac-7446-512f-b07c-90jdnzj8120ad

4599436e-7146-5349-b07c-79fa0919cs62

]

urlxxbbcom

typegt | gt= | lt | lt= | == | inout | in | out |change | frozen |

live

threshold100 阙值根据 type不同见以下说明

1) type 为gt|gt=|lt|lt=|==时threshold必须为数值

2) type为 inout时threshold 设置为lolmt40 uplmt52 表示

数据流的值首次进入或离开闭区间[4052]时触发

3) type为 change时threshold 参数不用传递当上传的值有改变时触发

告警

4) type为 frozen时threshold 为数值指定距离最后一次数据上报多少

秒内未上报数据触发告警同时被监控对象进入 frozen状态

5) type 为 live 时threshold 为数值指定距离最后一次数据上报多少秒

后上报数据触发告警

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

tirgger_id233444 触发器 ID

说明

1触发器的含义是当指定范围内的数据点满足触发条件的要求时会向

url参数指定的地址发送 post请求

2触发器有三种工作触发模式

1)在请求参数中单独指定了 ds_id不包括其他参数那么当前项目下

中移物联网有限公司 OneNET 开发文档中心

所有设备的数据流中数据流名称符合 ds_id 的数据都会进入触发判断逻辑

2)在请求参数中单独指定了 ds_uuids 数组那么只有这些指定的数据

流会进入触发判断逻辑

3)在请求参数中指定了 ds_id 和 dev_ids那么只有这些指定的设备的

数据流会进入触发判断逻辑

4362 更新

表4-22 更新触发器属性

HTTP方法 PUT

URL apihecloudscomtriggerstirgger_id

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP内容

(示例)

titlewen du jian kong

ds_uuids[

9ad09uac-7446-512f-b07c-90jdnzj8120ad

4599436e-7146-5349-b07c-79fa0919cs62

]

urlxxbbcom

typegt | gt= | lt | lt= | == | inout | in | out | exp | change |

frozen | live

threshold100

注若要修改 type需要对应设置 threshold

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

4363 查询单个触发器

表4-23 查询单个触发器

HTTP方法 GET

URL apihecloudscomtriggerstirgger_id

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

idtrigger_id1

中移物联网有限公司 OneNET 开发文档中心

titlewen du jian kong

ds_uuids[

datastream1_uuidrdquo

datastream2_uuidrdquo

datastream3_uuidrdquo

]

urlxxbbcom

typegt|gt=|lt|lt=|==|in|out|exp|change|frozen|live

threshold100

invalidtrue 触发器是否已失效

create_timexx-xx-xx 102222

4364 模糊查询触发器

表4-24 模糊查询触发器

HTTP方法 GET

URL apihecloudscomtriggers

URL 参数

title=name 指定触发器名称

page=1 指定页码可选

per_page=10 指定每页输出个数可选默认 10最多 100

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

total_count600

per_page30

page1

triggers[

idtrigger_id1

titlewen du jian kong

ds_uuids

[datastream1_uuidrdquo datastream2_uuidrdquo]

urlxxbbcom

typegt|gt=|lt|lt=|==|in|out|exp|change|frozen|live

threshold100

invalidtrue 触发器是否已失效

create_timeXXXXXXXX

中移物联网有限公司 OneNET 开发文档中心

]

说明触发器失效是指触发器所依赖的数据流或者设备被删除了此时触发

器永远不会有效触发事件

4365 删除

表4-25 删除触发器

HTTP方法 DELETE

URL apihecloudscomtriggerstirgger_id

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno 0

error succ

4366 触发数据内容

触发数据是指当 OneNET 设备云判断某个触发器的触发条件满足时会通过

POST方式向外抛出的 URL请求在 HTTP的 POST消息体中会携带如下格式的 JSON

字符串

表4-26 触发器内容

数据内容

(示例)

trigger

id1

threshold90

typegt

current_data[

dev_id2656

ds_idgps

ds_uuidFWEF-ZFW-ZFW-ZFWW

at2009-09-07T121602001403Z

value100

dev_id2656

ds_idtemper

中移物联网有限公司 OneNET 开发文档中心

ds_uuidFEWEF-ZFWFWW-WFWW-FWEFFWW

at2009-09-07T121602001403Z

value882

]

437 命令

命令是指应用发送命令数据给 OneNET设备云再由 OneNET设备云转发给终

端设备终端设备收到命令后可以向设备云反馈响应的一种工作机制命令下发

后应用可以通过 API查询命令状态和提取命令的响应数据

命令的执行步骤如下

1应用通过 API 向设备云发送命令数据

2设备云生成该命令的 uuid作为该命令的唯一标识并向应用返回同时向

终端设备转发命令数据

3 终端设备收到命令数据后执行命令数据可以生成响应也可以不响应

4设备云跟踪记录命令的响应如果设备有响应就关联命令 uuid和响应

结果

5应用通过 API 向设备云提取命令执行结果(API 请求中携带命令 uuid 标

识)

特别说明

命令下发到终端设备后如果终端设备 10 秒内未收到响应则此命令的状

态将被设置为超时应用通过 API 查询命令状态时会反馈超时超过 10 秒后

收到的响应会被丢弃

终端设备针对同一条命令回复多条命令响应只有在未超时时间内收到的最

后一条是有效响应前面的响应包将会被覆盖因此终端设备应该对每个命令只

有一个响应包

4371 发送命令

表4-27 发送命令

HTTP方法 POST

URL apihecloudscomcmds

URL 参数 device_id=415120 接收该数据的设备 ID(必选)

中移物联网有限公司 OneNET 开发文档中心

qos=0 | 1 是否需要响应默认为 0

0不需要响应即最多发送一次不关心设备是否响应

1需要响应如果设备收到命令后没有响应则会在下一次设备登陆

时若命令在有效期内(有效期定义参见 timeout参数)则会继续发送

对响应时间无限制多次响应以最后一次为准

本参数仅当 type=0时有效

timeout=300 命令有效时间默认 0

0在线命令若设备在线下发给设备若设备离线直接丢弃

gt0 离线命令若设备在线下发给设备若设备离线在当前时间

加 timeout时间内为有效期有效期内若设备上线则下发给设备单

位秒有效围0~2678400

本参数仅当 type=0时有效

type=0 | 1 默认 00发送 CMD_REQ包1发送 PUSH_DATA包

HTTP头部 api-key xxxxddddsssaaa masterkey或者设备 apikey

HTTP内容 用户自定义数据jsonstring二进制数据(小于 64K)

HTTP响应响

应消息内容

(示例)

errno 0

error succ

data

cmd_uuid2302-312-FWs 命令 id

4372 查询命令状态

表4-28 查询命令状态

HTTP方法 GET

URL apihecloudscomcmdscmd_uuid

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno 0

error succ

data

status1

0设备不在线|Device not online

1命令已创建| Command Created

2命令已发往设备| Command Sent

3命令发往设备失败| Send Command Failed

4设备正常响应| Command Response Received

5命令执行超时| Command Response Timeout

6设备响应消息过长 | Command Response Too Large

descldquosendingrdquo

中移物联网有限公司 OneNET 开发文档中心

4373 查询命令响应

表4-29 查询命令响应

HTTP方法 GET

URL apihecloudscomcmdscmd_uuidresp

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP 响应响

应消息内容

用户设备返回的响应内容

4374 查询设备历史命令

表4-30 查询设备历史命令

HTTP方法 GET

URL apihecloudscomcmdshistoryltdevice_idgtltdevice_idgt

URL 参数

start=2015-01-10T080035 查询的开始时间(可选)

end=2015-01-10T080535 查询的结束时间(可选)

page=1 指定页码最大页数为 10000(可选)

per_page=30 指定每页输出设备个数默认 30最多 100(可选)

HTTP头部 api-key xxxxddddsssaaa

HTTP响应响

应消息内容

errno 0

error succ

data

page 1当前页码

per_page 10当前每页总数

total_count 100

items [

cmd_uuid 2302-312-FWs

device_id 2设备 ID

expire_time 2016-07-05 000000过期时间

status 0命令状态

send_time 2016-07-05 000000发送时间

confirm_time 2016-07-05 000000响应时间

confirm_body 2463726571007b202274797022 响应内容

16进制字符

body 2463726571007b202274797022请求内容16进制字符

hellip

中移物联网有限公司 OneNET 开发文档中心

hellip

]

438 视频能力

4381 获取播放地址

表4-31 获取播放地址

HTTP方法 GET

URL apihecloudscomipcrtmp_address

URL 参数

device_id= 接收该数据的设备 ID(必填)

channel_id = 对应数据流名称中的 channelnum

protocol_type = 播放协议类型 0rtmp1hls2http-flv

HTTP头部 api-key xxxxddddsssaaa masterkey或者设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

errorrdquosuccrdquo

ldquodatardquo

addripport

accessTokenldquo字符串rdquo

439 APIKEY

4391 新增

表4-32 新增 APIKEY

HTTP方法 POST

URL apihecloudscomkeys

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP内容

(示例)

title sharing key key 的命名

permissions [

resources [ 被授权的资源

中移物联网有限公司 OneNET 开发文档中心

dev_id 424 被授权的设备 id

dev_id 425 被授权的设备 id

hellip

hellip

]

access_methods [ 被授权的命令

get

put

post

]

]

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data key2302-312-FWs key_string

说明授权命令是可选的另外被授权的命令也可以是 getputpost 的

一个或几个如只授权 get和 put命令

access_methods [getput]

4392 更新

表4-33 更新 APIKEY

HTTP方法 PUT

URL apihecloudscomkeyskey_string

HTTP头部 api-key xxxxddddsssaaa masterkey(注只能为 master-key)

HTTP内容

(示例)

title sharing key key 的命名

permissions [

resources [ 被授权的资源

dev_id 424 被授权的设备 id

ds_idfan1 数据流 id可选

中移物联网有限公司 OneNET 开发文档中心

dev_id 425 被授权的设备 id

ds_idfan1 数据流 id可选

hellip

hellip

]

access_methods [ 被授权的命令可选

get

put

post

]

]

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

说明

1对于 masterkey 不允许更新操作masterkey 默认具有最大权限可以访

问该用户名下所有设备所有数据

可以进行 POSTGETPUTDELETE操作如果更新 master key 系统会返回

失败

2授权命令是可选的另外被授权的命令也可以是 getputpost 的一个

或几个如只授权 get和 put命令

access_methods [getput]

3API key 更新是覆盖操作会将原来存在的授权资源和授权命令覆盖不

会保留原来的授权资源和授权命令

4393 查看

中移物联网有限公司 OneNET 开发文档中心

表4-34 查看 APIKEY

HTTP方法 GET

URL httpapihecloudscomkeys

URL 参数

key = FWJPO-FZFHW-FFEWB可选只查看该 key相关信息

page = 1 指定页码 可选

per_page = 10 指定每页输出个数可选默认 10最多 100

device_id = xxbbcc可选只查看与该设备相关的非 master-key

HTTP头部 api-key xxxxddddsssaaa masterkey(注只能为 master-key)

HTTP响应响

应消息内容

(示例)

errno 0

data

per_page 30

total_count 2

keys [

create_time 2015-11-04 142552

title Auto-generated-master-key

key 03GeDLYk0WNk1V338g7yndKZYkQA

create_time 2015-12-03 100041

permissions [

resources [

dev_id 564280

]

]

title 设备 1测试 Key

key vuHebEWefiU2Ueo5ouoCc1CUsYQ=

]

page 1

error succ

中移物联网有限公司 OneNET 开发文档中心

4394 删除

表4-35 删除 APIKEY

HTTP方法 DELETE

URL httpapihecloudscomkeyskey_string

HTTP头部 api-key xxxxddddsssaaa masterkey(注只能为 master-key)

HTTP 响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

4310 消息订阅

43101 按 Topic 发送命令

表4-36 按 Topic 发送命令

HTTP方法 POST

URL apihecloudscommqtt

URL参数 topic=xxx 设备订阅的主题(必选)

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP 内 容

(示例)

HTTP响应响

应消息内容

(示例)

errno0

errorldquosuccrdquo

data

total_count1

per_page30

page1

devices [123123433333]

43102 查询订阅指定 Topic设备的列表

表4-37 查询订阅制定 Topic设备的列表

HTTP方法 GET

URL apihecloudscommqtttopic_device

URL 参数

topic=xxx 设备订阅的主题(必选)

page=1 当前页码 必填大于等于 1

per_page=10 每页 必填范围 1-1000

中移物联网有限公司 OneNET 开发文档中心

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP内容

(示例)

HTTP响应响

应消息内容

(示例)

errno0

errorldquosuccrdquo

data

total_count1

per_page30

page1

devices [123123433333]

43103 查询设备订阅的 Topic列表

表4-38 查询设备订阅的 Topic列表

HTTP方法 GET

URL apihecloudscommqttdevice_topicdevice_id

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno0

errorldquosuccrdquo

data

[topic_name1 topic_name2 topic_name3]

43104 删除产品的 Topic

表4-39 删除产品的 Topic

HTTP方法 DELETE

URL apihecloudscommqtttopic

URL参数 name=xxx topic名(必选)

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno0

errorldquosuccrdquo

中移物联网有限公司 OneNET 开发文档中心

43105 查询产品的 Topic

表4-40 查询产品的 Topic

HTTP方法 GET

URL apihecloudscommqtttopic

URL参数 无

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno0

errorldquosuccrdquo

data

[topic_name1topic_name2topic_name3]

中移物联网有限公司 OneNET 开发文档中心

第五章 接入实例

51 MQTT-device 接入

511 工具下载

为方便开发人员直观感受使用 mqtt 协议进入平台的便利可使用平台提供

的 MQTT 设备模拟器进行接入平台请在首页-gt开发文档-gt资源下载-gt13 调试

工具下载进行下载如下图

图5-1 资源下载

下载地址

httpupfileshecloudscom123ueditor201707125d5bc37eca39c0c5b7a5bcb9

0e451eeerar

中移物联网有限公司 OneNET 开发文档中心

512 界面说明

图5-2 界面说明

513 使用方法

5131 创建产品

如 323 的过程在设备接入协议中选择 MQTT

中移物联网有限公司 OneNET 开发文档中心

图5-3 选择连接协议

5132 创建设备

如 323描述在平台上新建一个设备

5133 建立连接

在产品概况中可以查看产品 ID此信息填入模拟器 ProductID一栏如下图

图5-4 产品ID

在平台上进入设备信息页面可查看设备 ID及鉴权信息(此鉴权信息是新建设备时候填

写的鉴权信息)如下图

中移物联网有限公司 OneNET 开发文档中心

图5-5 设备ID及鉴权信息

相应把设备 ID及鉴权信息填入模拟器之中然后点击连接按钮如果未弹出提示对话

框则表示设备鉴权成功如下图

图5-6 连接成功

中移物联网有限公司 OneNET 开发文档中心

5135订阅与发布

演示本操作需要在 OneNet平台建立两个基于 MQTT协议的设备一个用于消息发布

另一个用于消息订阅

图5-7 设备状态

开启两个模拟器分别模拟以上两个设备然后建立连接

首先使用订阅主题打开第一个模拟器模拟消息订阅者

图5-8 订阅主题

其次发布主题打开第二个模拟器模拟消息发布者

中移物联网有限公司 OneNET 开发文档中心

图5-9 发布主题

经过以上两个操作后查看模拟消息订阅者的模拟器则收到了主题

为rdquotopic_namerdquo的消息如下图

中移物联网有限公司 OneNET 开发文档中心

图5-10 收到的主题

5136接收平台指令

建立连接后模拟器也可接收来自平台的指令具体操作如下

先打开模拟器-gt建立连接-gt选中【[OneNet]平台指令接收】选项栏利用平台下发指

令功能下发如下图平台下发指令

图5-11 平台发送命令

中移物联网有限公司 OneNET 开发文档中心

图5-12 下发指令

填写好将要发送的消息后点击【发送命令】按钮则模拟器成功接收到来自平台的

数据如下图模拟器截图

图5-13 模拟器收到的指令

5137上传数据点

Mqtt支持 Json 数据格式上报数据现根据 Json几种格式举一些例来演示怎么利用

模拟器上传数据

1)使用 Json数据 Type1上传 Json数据

datastreams[idtemperaturedatapoints[value255]]

中移物联网有限公司 OneNET 开发文档中心

如下模拟器上传数据界面

图5-14 Type1数据格式

则在平台数据展示中则可看到上传的数据点

图5-15 收到数据展示

2)使用 Json数据 Type3示例 Json数据为

temp32humi98

模拟器发送数据截图

中移物联网有限公司 OneNET 开发文档中心

图5-16 Type3数据格式

平台数据展示截图

图5-17 数据展示

3)使用 Json数据 Type4示例 Json数据为

temperature233pm2589

模拟器上传数据截图

中移物联网有限公司 OneNET 开发文档中心

图5-18 Type5数据格式

平台接收数据展示截图

图5-19 数据展示

52 基于麒麟开发板的 MQTT 接入实例

OneNet 平台为使用户能快速接入发布麒麟座开发板官网提交您的创意免

费申请开发板下面利用麒麟座开发板 V31 演示开发板采集温湿度使用 MQTT发

送到平台的接入流程

开发板申请链接httpsopeniot10086cneventdetail185html

521 搭建开发环境

OneNET 平台提供的麒麟座开发板是基予 STM32 单片机开发的一块功能应用

板开发板包含 MCU温湿度传感器GSM 模块WIFI 模块电源模块键盘

中移物联网有限公司 OneNET 开发文档中心

LED以及 lcd显示接口等满足用户对平台接入的基本需求能快速接入到平台

资料包配备完整工程代码方便工程移植等使用

目前 STM32 开发常用的 IDE 有 IARMDK 等我挑选 MDK 作为开发工具打

开工具包先安装 MDK511A安装完毕后再安装 MDKCM511A开发板所有资料软件

工具包下载案例包

案例包下载链接

httpspanbaiducoms1UB1qZGrVuovSVdbqqXP0Lglistpath=2F

图5-20 MDK包

安装完毕并安装 license详细步骤不做演示

中移物联网有限公司 OneNET 开发文档中心

522 连接硬件准备

5221 开发板接线

图5-21 开发板接线图

电源DC-5V

运行信息USART1-MicroUSB 线

软件下载ST-Link

中移物联网有限公司 OneNET 开发文档中心

5222 ESP8266跳线帽连接

图5-22 ESP8266跳线帽连接

中移物联网有限公司 OneNET 开发文档中心

5223 M6312跳线帽连接

图5-23 M6312跳线帽连接

523 工程实例

例程使用最简单易懂的方式编写着重让大家明白接入流程和协议

10~12 协议专属例程是展示该协议下的专用功能比如 EDP 的 PushData

中移物联网有限公司 OneNET 开发文档中心

HTTP 注册新设备MQTT 的订阅发布等具体使用方法查看该目录下的《使用

说明》

图5-24 工程文件

524 开发工程文件

中移物联网有限公司 OneNET 开发文档中心

图5-25 工程文件

图5-26 工程结构

默认已创建好产品以及设备打开文件工程 onenetc 和 esp8266c 修改例

程的 WIFI 信息和平台信息

分别在 esp8266c 的 36和 onenetc的 414345行

图5-27 更改项

525 编译下载

开发版接串口会有相应状态显示平台设备显示在线状态绿色为连接成功

设备在线灰色表示未连接并在数据展示中显示对应主题的所有数据

中移物联网有限公司 OneNET 开发文档中心

图5-28 连接成功

图5-29 收到数据

其他实例详情请见httpsopeniot10086cnbbsthread-1266-1-1html

中移物联网有限公司 OneNET 开发文档中心

第六章 MQTT 协议详解

61 设备与平台通信协议包格式

协议就是通信双方的一个约定即表示第 1字节传输的什么第 2字节

传输的什么helliphellip在 MQTT协议中一个 MQTT 数据包由固定头(Fixed

header) 可变头(Variable header) 消息体(payload)三部分构成

MQTT 数据包结构固定头部+可变头部+消息体

固定头(Fixed header)存在于所有 MQTT数据包中表示数据包类型及

数据包的分组类标识固定头格式如下

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 - 5 Remaining Length(该字段占用 1-4个字节)

目前平台版本支持的 Packet Type如下

名字 值 流向 描述

CONNECT 1 C-gtS 客户端请求与服务端建立连接

CONNACK 2 S-gtC 服务端确认连接建立

PUBLISH 3 CS 发布消息

PUBACK 4 CS 收到发布消息确认

PUBREC 5 CS 发布消息收到

PUBREL 6 CS 发布消息释放

PUBCOMP 7 CS 发布消息完成

SUBSCRIBE 8 C-gtS 订阅请求

SUBACK 9 S-gtC 订阅确认

UNSUBSCRIBE 10 C-gtS 取消订阅

UNSUBACK 11 S-gtC 取消订阅确认

PING 12 C-gtS 客户端发送 PING(连接保活)命令

PINGRSP 13 S-gtC PING命令回复

DISCONNECT 14 C-gtS 断开连接

可变头(Variable header)存在于部分 MQTT 数据包中数据包类型决定

了可变头是否存在及其具体内容

消息体(Payload)存在于部分 MQTT 数据包中表示客户端收到的具体内

中移物联网有限公司 OneNET 开发文档中心

不同类型数据包中可变头和消息体包含关系如下

消息类型 Variabl

e

Header

Payloa

d

CONNECT 有 有

CONNACK 有 有

PUBLISH 有 有

PUBACK 有 无

PUBREC 有 无

PUBREL 有 无

PUBCOMP 有 无

SUBSCRIBE 有 有

SUBACK 有 有

UNSUBSCRIBE 有 有

UNSUBACK 有 无

PING 无 无

PINGRSP 无 无

DISCONNECT 无 无

62 平台支持数据包类型

621 CONNECT(客户端请求与服务端建立连接 client -gt server)

固定头(Fixed Header)

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 - 5 Remaining Length(该字段占用 1-4个字节)

MQTT Packet Type 值为 0001表示该数据包为请求连接数据包

Remaining Length 剩余长度占 1-4字节

可变头(Variable Header)

包含内容如下

Description 7 6 5 4 3 2 1 0

byte

1-2

ProtocolNa

me Length

0 0 0 0 0 0 0 0

0 0 0 0 0 1 0 0

byte

3

lsquoMrsquo 0 1 0 0 1 1 0 1

byte

4

lsquoQrsquo 0 1 0 1 0 0 0 1

中移物联网有限公司 OneNET 开发文档中心

byte

5

lsquoTrsquo 0 1 0 1 0 1 0 0

byte

6

lsquoTrsquo 0 1 0 1 0 1 0 0

Byte

7

Protocol

Level

0 0 0 0 0 0 0 1

Byte

8

Connect

Flag

Use

r

flag

Passwo

rd

flag

WillReta

in

Flag

WillQo

s Flag

WillFl

ag

CleanSessi

on

Flag

Reser

ve

Byte

9-10

KeepAlive

(1) 版本

Protocol Level 必须设置为 4平台只支持协议版本 v 311不支持更老

的版本使用第三方客户端时需要注意选择正确的版本

(2) user flag 与 password flag

平台不允许匿名登陆因此这两个标志位在连接时必须设置为 1否则认为

协议错误平台将会断开连接

(3) Will flag 与 WillretainflagWillQosFlag

Will flag 为 0时WillQosFlag 和 WillRetainFlag 必须为 0Will Flag

为 1时WillQosFlag 只能为 012

1当该设备下一次正常上线后服务器会清除之前的 will 消息(包括

retain 消息)

2如果设备上线时设置了 Will Topic 和 msg且将 WillRetainFlag 设

置为 1只有设备异常断开后服务器才会将该 Will msg 分发给新的 Will

Topic 的订阅者且 Qos 级别以订阅的 Request qos 级别为准

3如果设备上线时设置了 Will Topic 和 msg且将 WillRetainFlag 设

置为 0服务器不会存储该消息当设备异常断开后会将该 Will msg 以设

备设置的 WillQosFlag的 Qos级别进行分发

(4) CleanSessionFlag

若客户端将 clean session 标志位设置为 0当其断开后平台将会保存

sessionsession 需保持的内容包含

客户端订阅的 topic列表

中移物联网有限公司 OneNET 开发文档中心

还未完成确认的 Qos1Qos2级别的 publish消息

客户端保存 session 的内容包含

已经发送到服务端的但还没有收到确认的 Qos1Qos2消息列表

待发送的 Qos0列表

若客户端将 clean session 标志位设置为 1当其断开后平台会清除设备

的订阅列表及未完成确认的 Qos1Qos2 的 publish消息

(5) Reserve

保留位置 0

(6) KeepAlive 保活时间

每个客户端可自定义设置连接保持时间最短 120秒最长 65535 秒

消息体(Payload) Description 是否必须存在 格式

Field1 Client

Identifier

是 2字节字串长度 + utf8字

Field2 UserName 是 2字节字串长度 + utf8字

Field3 UserPassword 是 2字节字串长度 + utf8字

目前平台支持的方式为以后两种

方式 1设备 ID项目 ID鉴权信息(auth_info)

字段设置 消息示例

client_id设置为平台创建设备时的

设备 id

username设置为ldquo项目 IDrdquo

password设置为ldquo鉴权信息

(auth_info)rdquo

client_id=rdquo123rdquo

username=rdquo433223rdquo

password=rdquo注册的鉴权信息rdquo

各字段说明如下

鉴权信息(auth_info)在平台申请设备时填写设备的 auth_info 属性(数

字+字母的字符串)该属性需要产品内具备唯一性(可使用设备出厂唯一编号)

方式 2设备 ID + APIKey(项目 ID也需要填写)

字段设置 消息示例

client_id设置为平台创建设备时的

设备 ID

username设置为ldquo项目 IDrdquo

client_id=rdquo123rdquo

username=rdquo433223rdquo

password=Api Key

中移物联网有限公司 OneNET 开发文档中心

password设置为ldquoAPI鉴权信息

(auth_info)rdquo

项目 ID在平台添加项目时平台生成的 ID

APIKey在平台上创建产品时生成的 APIKey

连接包实例如下

Send one mqtt packet

FixHeader

PacketTag = 16

PacketType = 1

RemainLength = 34

VariableHeaderConnect

protocol_name_len_= 4

protocol_name_= MQTT

protocol_level_= 4

connect_flag_= 192

keep_alive_= 12000

client_id_len_= 8

client_id_= 34764813

usr_name_len_= 6

usr_name_= 150295

password_len_= 4

password_= push

MQTT0x10 0x22 0x00 0x04 0x4D 0x51 0x54 0x54 0x04 0xC0 0x2E 0xE0 0x00 0x08 0x33

0x34 0x37 0x36 0x34 0x38 0x31 0x33 0x00 0x06 0x31 0x35 0x30 0x32 0x39 0x35 0x00

0x04 0x70 0x75 0x73 0x68

Send One Packet Succ

中移物联网有限公司 OneNET 开发文档中心

622 CONNACK (服务端确认连接建立)

Fixed Header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type = 2 0 0 0 0

byte2 - 5 Remaining Length(该字段占用 1-4个字节)

Variable Header

Description 7 6 5 4 3 2 1 0

byte 1 Acknowledge Flags 0 0 0 0 0 0 0 Sp

byte 2 Return Code x x x x x x x x

Sp Session Present Flagsession信息在服务器已保持置 1未保存置

0

返回码说明

返回码 描述

0 成功

1 协议版本错误

2 非法的 clientid

3 服务不可用

4 用户名或密码错误

中移物联网有限公司 OneNET 开发文档中心

5 非法链接(比如 token非法)

失败

如果 connect包不符合协议内容约束则直接断掉连接而不需要发送 conn

ack包

如果鉴权或授权失败回复一个带非 0错误码的 connack包

成功

必须断掉重复的 clientid

执行 cleansession 对应的操作

必须回复一个 connack回复码为 0

开始消息传递并加入 keepalive的监视

PS客户端需要等到服务端的 connack报文才能发送后续的数据包

623 PUBLISH(发布消息 client -gt server)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type DUP f

lag

QoS Level RETAI

N

byte2 - 5 Remaining Length(该字段占用 1-4 个字节)

DUP

QoS2Qos1如果为 0则表示是第一次发送该包如果为 1则表示

为重复发送的包

Qos0DUP 必须为 0

中移物联网有限公司 OneNET 开发文档中心

QoS 指定了该 publish包的 Qos 等级如下

Qos 值 Bit2 Bit1 描述

0 0 0 最多发送一次

1 0 1 至少发送一次

2 1 0 只发送一次

RETAIN 保留标志位如果为 1服务器存储最新一条 RETAIN消息以便

分发给新的订阅者如果 RETAIN为 1Payload 为空服务器分发该消息后会

清空该 topic 下的 RETAIN 消息

PS该版本实现了 Qos0Qos1Qos2

Variable Header

Description 格式 是否必须

Field1 TopicName 2 字节字串长度 + utf8字

Field2 PacketIdent

ifier

2 字节 QoS0否QoS1Qos2是

Payload

内容根据不同业务自定义

624 PUBLISH(发布消息 server -gt client)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type DUP f

lag

Qos Level RETAIN

byte2 - 5 Remaining Length(该字段占用 1-4个字节)

DUP

Qos2QoS1如果为 0则表示是第一次发送该包如果为 1则表示

为重复发送的包

中移物联网有限公司 OneNET 开发文档中心

Qos0DUP 必须为 0

QOS 指定了该 publish包的 qos等级如下

Qos 值 Bit2 Bit1 描述

0 0 0 最多发送一次

1 0 1 至少发送一次

2 1 0 只发送一次

RETAIN如果服务器分发的消息是 RETAIN 消息则将该标志位置 1否则置

0

PS该版本实现 Qos0Qos1Qos2其中服务器分发消息的 Qos级别是以 Clien

t-gtServer 发送的 publish 包的 qos 等级为准非订阅的 topic 的 Qos 等级R

etain 消息是以订阅的 Request Qos 级别进行推送

VariableHeader

Description 格式

Field1 TopicName 2 字节字串长度 + utf8字

Payload

内容根据不同业务自定义

625 PUBACK(收到发布消息确认)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

中移物联网有限公司 OneNET 开发文档中心

626 PUBREC(发布消息收到)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

627 PUBREL(发布消息释放)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

628 PUBCOMP(发布消息完成)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

中移物联网有限公司 OneNET 开发文档中心

byte 1~

2

PacketIdentifier PacketIdentifier

629 SUBSCRIBE(订阅请求)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

Payload

Description 格式

Byte1~

n

TopicName 2 字节字串长度 + utf8字

Byten+

1

Request Qos 服务质量要求(只能为 0

12)

topic 说明

可以包含一个或多个 topic

topic必须是数字英文反斜杠()的组合目前不支持通配符

每个客户端最多订阅 100个 topic

以下 topic 被系统保留使用(客户端不能订阅)

类型 说明

$开头 平台保留

中移物联网有限公司 OneNET 开发文档中心

6210 SUBACK(订阅确认)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

Payload

Description 7 6 5 4 3 2 1 0

byte 1 retcode

返回码说明

返回码 描述

0x00 成功(granted qos = 0)

0x01 成功(granted qos = 1)

0x02 成功(granted qos = 2)

0x80 失败

6211 UNSUBSCRIBE(取消订阅)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

中移物联网有限公司 OneNET 开发文档中心

Payload

Description 格式

Byte1~

n

TopicName 2 字节字串长度 + utf8字

可以包含一个或多个 topic

6212 UNSUBACK(取消订阅确认)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

6213 PING(客户端发送 PING(连接保活)命令)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

NULL NULL

注PING命令无 VariableHeader

中移物联网有限公司 OneNET 开发文档中心

6214 PINGRSP(PING命令回复)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

NULL NULL

注PINGRSP无 VariableHeader

6215 DISCONNECT(断开连接)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

NULL NULL

注DISCONNECT无 VariableHeader

中移物联网有限公司 OneNET 开发文档中心

第七章 设备开发流程

71 连接鉴权

Device Onenet

(Connect)鉴权请求

(ConnAck)鉴权结果

加载session

鉴权

图7-1 连接鉴权

设备向平台发起 connect 请求connect 中携带鉴权信息具体

参见(报文格式参考 621)

平台拿到鉴权信息进行鉴权

鉴权通过后如果 cleansession=0 平台将会加载保存的设备

的一些信息如订阅列表(621中描述)

如果 cleansession=1 设备没有保存信息在平台则不加载设

备相关信息

返回鉴权结果 ConnAck(报文格式参考 621)

72 消息发布

721 数据点上报

设备使用 publish 报文来上传数据点 报文格式如下

中移物联网有限公司 OneNET 开发文档中心

VariableHeader

Field 名称 说明 格式

Field1 TopicName=rdquo$dprdquo $dp 为系统上传数据点

的指令

2字节字串长度 + utf8

字串

Payload

Payload包含真正的数据点内容支持的格式如下

Byte 1 Bit0-5数据类型指示目前支持

Type = 1

Type = 2

Type = 3

Type = 4

Type = 5

Type = 6

Type = 7

Bit6-7 flags 根据具体类型不同意义

Type6Type7这两种需要填写时间戳的数据类型

如果填入了时间戳则须将 bit7 置 1否则置 0(即

忽略数据类型说明中的日期时间相关字段)

0 0 0 0 0 0 0 1

Byte 2 根据数据类型指示不同

Byte n

中移物联网有限公司 OneNET 开发文档中心

数据类型 1(type == 1)格式说明

数据类型 2(type == 2)格式说明

Byte 1 数据点类型值1 1JSON 格式 1 字符串 0 0 0 0 0 0 0 1

Byte 2 指示后面 json 字符串长度

固定两字节长度高位字节值为 0x00

Byte 3 固定两字节长度低位字节值为 0x41

Byte 4

ldquodatastreamsrdquo[ 可以同时传递多个数据流

ldquoidrdquordquotemperaturerdquo

ldquodatapointsrdquo[数据流可以有多个数据点

rdquoatrdquordquo2013-04-22 222222rdquo可选

rdquovaluerdquo 365用户自定义

]

ldquoidrdquordquolocationrdquo

ldquodatapointsrdquo[hellip]

hellip

]

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

Byte n

Byte 1 数据点类型指示type=2 二进制数据 0 0 0 0 0 0 1 0

Byte 2 指示后面 json 字符串长度

固定两字节长度-高位字节值为 0x00

Byte 3 固定两字节长度-低位字节值为 0x10

Byte 4

rdquods_idrdquordquoimagerdquo 创建数据流时定义的 ID(必填)

ldquoatrdquordquo2014-10-25 122323rdquo 时间(可选)

rdquodescrdquo字符串或 json 对象对该数据的描述(可选)

hellip

Byte n

Byte n+1 指示后面二进制数据长度

固定四字节长度-第 1 字节(最高)值为 0x00

Byte n+1 固定四字节长度-第 2 字节值为 0x00

Byte n+2 固定四字节长度-第 3 字节值为 0x01

Byte n+3 固定四字节长度-第 4 字节(最低)值为 0x00

Byte n+4 该域目前最大支持 3M

中移物联网有限公司 OneNET 开发文档中心

数据类型 3(type == 3)格式说明

数据类型 4(type ==4)格式说明

hellip 本例中的该域 256 字节数据

Byte n+260

Byte 1 数据点类型指示type=3 JSON 格式 2 字符串 0 0 0 0 0 0 1 1

Byte 2 指示后面字符串长度

固定两字节长度高位字节值为 0x00

Byte 3 固定两字节长度低位字节值为 0x46

Byte 4 通用格式

ldquodatastream_id1rdquordquovalue1rdquo

ldquodatastream_id2rdquordquovalue2rdquo

hellip

示例

ldquotemperaturerdquo225rdquohumidityrdquordquo952rdquo

hellip

hellip

hellip

hellip

Byte n

Byte 1 数据点类型指示type=4 JSON 格式 3 字符串 0 0 0 0 0 1 0 0

Byte 2 指示后面字符串长度

固定两字节长度高位字节值为 0x00

Byte 3 固定两字节长度低位字节值为 0x46

Byte 4 通用格式

ldquodatastream_id1rdquoldquodatetime1rdquordquovalue1rdquo

ldquodatastream_id2rdquo ldquodatetime2rdquordquovalue2rdquo

hellip

示例

ldquotemperaturerdquoldquo2015-03-22 223112rdquo225

hellip

hellip

hellip

hellip

Byte n

中移物联网有限公司 OneNET 开发文档中心

数据类型 5(type == 5)格式说明

数据类型 6(type == 6)格式说明

Byte 1 数据点类型指示type=5 自定义分隔符 0 0 0 0 0 1 0 1

Byte 2 指示后面字符串长度

固定两字节长度高位字节值为 0x00

Byte 3 固定两字节长度低位字节值为 0x41

Byte 4 消息中最前面两字节为用户自定义的域中分隔符和域间分隔符

这两个分隔符不能相同比如采用逗号作为域中分隔符分号作

为域间分隔符的格式如下

feild0feild1hellipfeildn

其中每个 field 格式支持 3种

field 格式 1 3 个子字段分别是数据流 ID时间戳数据值

通用格式

Datastream_iddatetimevalue

field 格式 2 2 个子字段分别是数据流 ID 和数据值省略时

间戳通用格式

Datastream_idvalue

field 格式 3 1 个子字段省略了数据 ID 和时间戳只传输数

据值平台将用该域(feild)所在的位置号(从 0 开始)作为数据

流 ID通用格式

value

示例

(1)temperature2015-03-22

223112225102pm258910

(2)temperature2015-03-22

223112225102pm258910

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

Byte n

Byte 1 数据类型指示type=6 带时间自定义分隔符 0 0 0 0 0 1 1 0

Byte 2 年(后两位)例如 2016 年则该字节为 16 0 0 0 1 0 0 0 0

Byte 3 月(1-12)

Byte 4 日(1-31)

Byte 5 小时(0~23)

Byte 6 分钟(0~59)

Byte 7 秒(0~59)

Byte 8 指示后面字符串长度

固定两字节长度高位字节值为 0x00

Byte 9 固定两字节长度低位字节值为 0x41

Byte 10 消息中最前面两字节为用户自定义的域中分隔符和域间分隔符

具体格式见 type=5 说明若相关域中没有时间戳则采用本类

hellip

中移物联网有限公司 OneNET 开发文档中心

数据类型 7(type == 7)格式说明(每次最多 500个数据流的浮点数)

hellip 型的默认时间戳当作数据点的时间来存储

Byte n

Byte 1 Bit0-5 数据类型指示type=7 可离散浮点数数据流

Bit6保留置 0

Bit7 时间指示位1携带 6字节时间

1 0 0 0 0 1 1 1

Byte 2 年(后两位)例如 2016 年则该字节为 16 0 0 0 1 0 0 0 0

Byte 3 月(1-12)

Byte 4 日(1-31)

Byte 5 小时(0~23)

Byte 6 分钟(0~59)

Byte7 秒(0~59)

Byte 8 数据流名称(取值范围 1-65535)

高位字节值为 0x00

Byte 9 低位字节值为 0x01

Byte10 数据流个数(取值范围 1-500)

高位字节值为 0x00

Byte11 低位字节值为 0x01

Byte 10 4 字节 float 类型低位在前高位在后

Byte 11

Byte 12

Byte 13

Byte n 数据流名称(取值范围 1-65535)

高位字节值为 0x24

Byte n+1 低位字节值为 0x37

Byte n+2 数据流个数(取值范围 1-500)

高位字节值为 0x01

Byte n+3 低位字节值为 0x00

Byte n+2 4 字节 float 类型低位在前高位在后

Byte n+4

Byte n+5

Byte n+6

中移物联网有限公司 OneNET 开发文档中心

7211 Qos0(Client-gtServer)

Device OneNet

Publish $dp(Qos0)

存储

图7-2 QoS连接图

设备发布 Qos0 消息(上报数据点)

平台收到上报数据点后保存起来

7212 Qos1(Client-gtServer)

Device OneNet

Publish $dp(Qos1)

存储

PubAck

图7-3 Qos1连接图

设备发布 Qos1 消息(上报数据点)

中移物联网有限公司 OneNET 开发文档中心

平台收到上报数据点后保存起来

平台给设备回复相应的 PubAck (报文格式参考 625)

7213 Qos2(Client-gtServer)

Device OneNet

Publish $dp(Qos2)

存储

PubRec

PubRel

PubComp

图7-4 Qos2连接图

设备发布 Qos2 消息(上报数据点)

平台收到上报数据点后保存起来

平台给设备回复相应的 PubRec报文

设备需回复平台 PubRel报文如超时不回平台则会断开相应连接

平台给设备回复 PubComp报文

注数据点上报功能不支持 Retain 特性

中移物联网有限公司 OneNET 开发文档中心

722 平台命令(下发amp回复)

7221 命令下发

平台使用 publish 报文来下发平台指令 报文格式如下

FixHeader

参考 623

VariableHeader

Field 名称 说明 格式

Field1 TopicName=rdquo$creqcmduuidrdquo $creq为系统下发

Cmd 的 指 令

cmduuid为该条指

令的 uuid

2字节字串长度 +

utf8字串

Payload

Payload包含真正的指令内容

72211 Qos0(Server-gtClient)

DeviceOneNet

Publish $creq(Qos0)

图7-5 Qos0命令下发

命令下发

平台向设备发送 topic为$creq的消息(该 topic为平台命令)

中移物联网有限公司 OneNET 开发文档中心

设备收到 topic 为$creq 的 topic 时需将其作为平台下发的指令来处

注目前命令下发以 Qos0级别进行推送

7222 命令回复

设备使用 publish 报文来回复平台指令 报文格式如下

FixHeader

参考 623

VariableHeader

Field 名称 说明 格式

Field1 TopicName=rdquo$crspcmduuidrdquo $crsp为系统处理

设备回复 cmd 的

指令cmduuid为

该条指令的 uuid

2字节字串长度 +

utf8字串

Payload

Payload包含真正回复的指令内容

72221 Qos0(Client-gtServer)

DeviceOneNet

Pulish $crsp(Qos0)

图7-6 Qos0下发命令

中移物联网有限公司 OneNET 开发文档中心

72222 Qos1(Clientlt-gt Server)

DeviceOneNet

Pulish $crsp(Qos1)

Puback

图7-7 Qos1下发命令

如果设备回复响应时以 Qos1回复则平台需要给设备回复一个 Puback 报文

72223 Qos2(Clientlt-gt Server)

DeviceOneNet

Pulish $crsp(Qos2)

PubRec

PubRel

PubComp

图7-8 Qos2下发命令

如果设备回复响应时以 Qos2回复则

1平台需回复设备一个 PubRec报文

中移物联网有限公司 OneNET 开发文档中心

2设备在收到 PubRec后需向平台回复 PubRel报文

3平台收到 PubRel 报文后向设备回复 PubComp报文

73 创建 Topic

Device OneNet

HTTP 请求

HTTP 响应

图7-9 创建Topic

设备通过发送 HTTP请求进行 topic 的创建操作

平台收到请求后创建 topic 并返回结果

请求及响应定义如下

HTTP方法 POST

URL httpapihecloudscommqtttopic

HTTP头部 api-keyxxxx-ffff-zzzzz必须 master key

URL参数

HTTP body

内容

ldquonamerdquordquoxxxxxxrdquo topic 名字只能由英文下划线反斜杠组成最长

1024个字符同一产品下 topic name 不重复

成功返回

errno 0

errorldquosuccrdquo

说明 每个产品最多 100个 topic

中移物联网有限公司 OneNET 开发文档中心

74 订阅

Device OneNet

Subscribe

Suback

更新设备订阅列表

图7-10 订阅

设备发起订阅请求(报文格式参考 629)

平台收到请求后更新 topic列表

平台给设备回复 SubAck (报文格式参考 6210)

注subscribe 的 request qos级别可以为 012

75 取消订阅

Device OneNet

UnSubscribe

UnSuback

更新设备订阅列表

图7-11取消订阅

中移物联网有限公司 OneNET 开发文档中心

设备发起取消订阅请求 (报文格式参考 6211)

平台收到请求后更新 topic 列表

平台给设备回复 UnSubAck (报文格式参考 6212)

76 推送设备 Topic

761 Publish 报文推送

Qos0设备使用 Qos 级别为 0的 Publish报文来进行推送

Device OneNet

Publish(Qos0)

Device

以Qos0 Publish到订阅设备

图7-12 Qos0推送

设备发起推送 topic请求(以 Qos0级别)

平台收到请求后将 topic以 Qos0级别推送到相关订阅设备(支持离线设

备推送)

平台不返回 PubAck或 PubRec 等报文

Qos1

设备使用 Qos级别为 1的 publish报文来推送 Topic

中移物联网有限公司 OneNET 开发文档中心

Device OneNet

Publish(Qos1)

PubAck

Device

以Qos1 Publish到订阅设备

设备回复平台 PubAck

图7-13 Qos1发布

设备发起推送 topic请求(以 Qos1级别)

平台收到请求后将 topic以 Qos1级别推送到相关订阅设备(支持离线设

备推送)

平台返回 PubAck 报文

Qos2

设备使用 Qos级别为 2的 publish报文来推送 Topic

中移物联网有限公司 OneNET 开发文档中心

Device OneNet

Publish(Qos2)

PubRec

Device

以Qos2 Publish到订阅设备

PubRec

PubRel

PubComp

PubRel

PubComp

图7-14 Qos2推送

设备发起推送 topic请求(以 Qos2级别)

平台收到请求后回复 PubRec报文

设备收到 PubRec后需回复 PubRel报文 (如超时不回复平台会断开与设

备的连接)

平台收到 PubRel 报文后回复 PubComp 给设备

平台在回复 PubComp 后会以 Qos2 级别推送到相关订阅设备(支持离线设

备推送)

设备需回复 PubRec报文 (如超时不回复平台会断开与设备的连接)

平台发送 PubRel 报文给设备

设备需回复 PubComp(发布完成)

Publish报文的格式如下

FixHeader

参考 623

中移物联网有限公司 OneNET 开发文档中心

VariableHeader

Field 名称 说明 格式

Field1 TopicName 填写设备订阅的 topic 2字节字串长度 + utf8

字串

Payload

Payload为设备自定义内容

762 HTTP 请求推送

Device OneNet

HTTP 请求

HTTP 响应

Device

Publish到订阅设备

图7-15 HTTP请求

设备以 HTTP 的方式发起推送 topic 请求

平台收到请求后将 topic推送到相关订阅设备 (目前只支持在线推送)

平台返回推送结果

请求及响应定义如下 HTTP方法 POST

URL httpapihecloudscommqtt

HTTP头部 api-keyxxxx-ffff-zzzzz必须 master key

URL参数 topic=ldquoXXXXXXrdquo必选在发送 mqtt协议的 topic 必填

HTTP body内容 用户自定义 Json 或二进制数据(小于 64K)

成功返回

errno 0

errorldquosuccrdquo

中移物联网有限公司 OneNET 开发文档中心

77 离线 Topic

推送 Topic只针对在线设备进行 topic 消息的推送离线设备不会收到订阅

的 topic 的消息离线 Topic则会将该消息推送给在线以及离线设备

1 如果设备在上线时设置了 clean session flag服务端会删除其订阅的

topic及相关的离线 topic消息

2 如果设备没有设置 clean session flag如果有与该设备相关的离线

topic消息则在鉴权成功后将离线消息推送给设备

3 遗嘱消息(will msg)只会推送给订阅了该 will topic的在线的设备离

线设备不会收到

4 离线消息的有效期默认为 2 天(暂不支持用户设定有效期)服务器只会

推送在 2天内的最近 10 条消息

78 数据点订阅

数据点订阅同一产品下的设备可以订阅其他设备的数据点订阅的 topic

格式为deviceid数据流名称即

被关注的设备在上传了该数据流名称的数据点后订阅了该 topic的其他设备都

会收到上传的数据点

1 AB设备的 deviceid分别为 92779278

2 A 设备订阅了名为92789527 的 topic(9278 为设备 B 的 id9527 为 B

设备上传的数据流名称)

3 B 设备上传了名为 9527的数据流(数据点为 11 1578hellip)

4 A 设备会收到多条(取决于设备 B 上传的数据点的个数)推送的 topic 名

为92789527 的 publish消息消息的 payload中则包含设备 B 上传的数据

注目前支持订阅的数据点的类型为 Type1~Type7(详见 721节)

中移物联网有限公司 OneNET 开发文档中心

第八章 常见问题 FAQ

用户在基于 OneNET 平台进行产品开发的过程中可能会遇到各种各样的问

题开发过程中遇到的问题一方面可以参考 OneNET 文档中心的文档或者本文

档前几个章节的内容另一方面用户可以参考本章节总结的常见问题希望这些

文档能对用户在开发过程中有一定的指导和帮助

本章将分三个小节对用户在开发产品过程中可能遇到的问题进行梳理分别

为终端设备接入 OneNET平台的常见问题API调用的常见问题和 OneNET平台

的能力

81 终端设备接入 OneNET 平台的常见问题

序号 问题描述 原因分析 解决方法

1

2

3

4

5

6

7

82 API 调用的常见问题

序号 问题描述 原因分析 解决方法

1

2

3

4

5

6

7

8

9

中移物联网有限公司 OneNET 开发文档中心

83 使用 OneNET平台遇到的常见问题

序号 问题描述 原因分析 解决方法

1

2

3

4

5

6

7

8

Page 15: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com

中移物联网有限公司 OneNET 开发文档中心

图3-6 添加设备页面

322 终端设备软硬件初始化

终端设备在上电以后需要完成设备的软硬件初始化硬件初始化包括各个

硬件模块的上电处理器的寄存器初始化工作模式初始化等等软件初始化包

括基础通信套件初始化应用接口初始化应用程序初始化等等

323 终端创建设备及资源

终端设备创建设备(device_id)配置产品 ID鉴权信息注册码连接

服务器 IP端口号等信息创建成功后与平台建立登陆连接连接成功后即可向

平台上报数据点

324 登录 OneNET平台

终端设备的基础通信套件完成初始化以及设备资源创建完成后可向

OneNET平台发送登陆请求返回登录结果如果参数错误或者登录超时平台会

返回登录失败如果验证通过平台会返回登录成功

若终端设备登录平台成功设备名称左边的圆形图标会由灰色(离线状态)

变成绿色(在线状态)如图 3-7所示

中移物联网有限公司 OneNET 开发文档中心

图3-7 平台侧设备状态显示

325 设备数据点上报

终端设备与平台成功建立连接后设备使用 publish 报文向平台上报数据点

平台收到数据点后保存到对应数据流下方便应用查阅数据点上报格式以及类型详见

721

图3-8 平台侧收到设备数据流显示

326 创建应用

用户可以利用上传的数据创建相关的应用发布直观的展示页面目前在平台应用孵化

器中提供了曲线图柱状图表盘物体位置图片和开关等应用

在产品详情页面点击ldquo应用管理rdquo进入应用管理主界面如下图

中移物联网有限公司 OneNET 开发文档中心

图3-9 应用管理模块

点击ldquo创建应用rdquo输入应用名称点击ldquo创建rdquo如下图

图3-10 新应用创建

保存成功后点击编辑按键进入应用编辑页面如下图

中移物联网有限公司 OneNET 开发文档中心

图3-11 应用编辑入口

图3-12 应用编辑界面

在应用编辑页面中使用左侧的控件进行应用编辑此例中我们选择表盘控件来显示

刚刚上传的数据点击表盘控件如下图所示

中移物联网有限公司 OneNET 开发文档中心

图3-13 表盘控件添加

在右侧的属性中选择设备以及数据源(及刚刚上传的数据流)如下图

图3-14 表盘控件数据流绑定

在确定好数据流之后可以看到表盘回显示成我们添加的数据的值其他的

刷新频率以及表盘显示样式读者可以自行更具需求加以修改

完成应用编辑之后点击右上角保存按钮退出应用编辑

在应用管理页面点击该应用即可查看编辑好的应用页面

中移物联网有限公司 OneNET 开发文档中心

图3-15 保存应用

图3-16 应用查看与分享

该应用可以通过共享ldquo发布链接rdquo的方式将该应用共享给他人

33 设备批量接入

单个设备可以通过平台的开发者中心添加设备的方式进行创建若用户有多

个设备直接与平台 TCP连接的终端通过手动添加需耗费大量时间人力OneNET

中移物联网有限公司 OneNET 开发文档中心

为大批量接入用户提供 3种批量创建设备的方案

331 平台设备批量复制

此种方式为选择某个设备作为复制的模板通过导入 EXCEL的方式进行设备

复制厂商可以在小批量测试时使用该功能

在设备列表中点击查看详情

图3-17 设备批量接入

在设备详情页面点击批量导入设备信息

中移物联网有限公司 OneNET 开发文档中心

图3-18 导入设备信息

点击批量复制

图3-19 批量复制

中移物联网有限公司 OneNET 开发文档中心

目前提供三种批量创建的方式 excel 导入的方式为主要接入方式选择

excel导入点击下载模板

图3-20 快速导入

图3-21 Excel导入

打开下载下来的 excel模板表中的 titledesctags等均为将要批量导

入的设备的数据其中的 title 和 auth_info 为必填选项title 为设备名

中移物联网有限公司 OneNET 开发文档中心

auth_info对应设备的鉴权信息

图3-22 Excel格式

填写 3个设备信息

图3-23 Excel内容

三个设备的 title和 auth_info都一样均为 20170808000012017080800002

2017080800003保存该表格点击ldquo点击上传rdquo上传保存好的 excel 文件

点击ldquo确定导入批量rdquo

中移物联网有限公司 OneNET 开发文档中心

图3-24 导入上传

图3-25 确认创建

可以看到在原设备目录下新增了 3个设备其名称分别为 2017080800001

20170808000022017080800003

中移物联网有限公司 OneNET 开发文档中心

图3-26 批量创建的设备

点击设备详情可以看到设备目录下各个设备的鉴权信息与表格中所填

写的内容一致

图3-27 设备ID及鉴权信息

至此完成了通过批量设备复制的方式完成设备批量创建的过程用户如果

要使用这个功能需要将自己终端的出厂序列号整理到这个 excel表中然后利

中移物联网有限公司 OneNET 开发文档中心

用上传表格的方式进行批量创建

332 应用平台调用新增设备 API

OneNET 提供了创建设备的 API接口

图3-28 新增设备API接口

其中的 auth_info 参数对应着设备的鉴权信息通过调用此 API 接口可以

实现在平台上新增设备的功能用户如果有自己的第三方应用平台进行设备管理

可以通过多次调用此接口的方式进行设备的批量创建在调用接口时需要确保每

次调用的 auth_info 参数对应着自己的每一个终端不同的出厂序列号

333 终端调用注册 API

API 实际是 HTTP 协议的通信协议终端也可以通过封装 HTTP 包发送注册

中移物联网有限公司 OneNET 开发文档中心

设备请求的方式调用 API

终端调用注册 API 创建设备并接入的流程如图 3-29所示

平台

TCP连接协议接入机

创建产品

发送连接报文

连接应答

数据应答

发送数据报文

生成连接报文

设备

发送下行命令 下发命令

解析下行命令

生成存储数据报文

解析连接应答

解析数据应答

必要流程

可选流程

存储到数据流 数据源 创建应用

心跳应答

发送心跳报文生成心跳报文

解析心跳应答

平台操作

设备操作

利用设备本身的sn和产品的设备注册码生成注册报文

TCP连接API服务器

发送注册报文

注册应答

解析设备ID

创建设备

设备开机

读取硬件中烧录的设备编号(sn)

图3-29 终端调用注册API接入流程

1) 创建产品

重要参数产品 ID注册码产品 APIKey(见附录一)

2) 生成并发送注册报文

每一个用户终端中都有厂商烧录的唯一出厂序列号(sn)终端上电

之后应该首先读取自己的 sn然后通过 1)中的注册码和 sn 一起组成注

册报文

注册报文格式如下例

POST httpapihecloudscomregister_deregister_code=6TM7OkhNsTjATvFx HTTP11

Host apihecloudscom

Content-Length 48

中移物联网有限公司 OneNET 开发文档中心

sn02136616511001titletestdevice0001

其中

6TM7OkhNsTjATvFx 为产品注册码

02136616511001 是本例中模拟的设备唯一编号

testdevice0001 是本例中模拟的设备名

若上传的数据格式以及参数鉴权均正确则平台会返回设备创建成功

返回设备 ID以及该设备对应的设备 api-key

HTTP11 200 OK

Date Wed 09 Aug 2017 064821 GMT

Content-Type applicationjson

Content-Length 95

Connection keep-alive

Server Apache-Coyote11

Pragma no-cache

errno0datadevice_id11142371keyq9Mw0zqiAPjTwqfyCk2mWrUi8=errorsucc

3) 在步骤 2)完成之后平台上的设备就已经成功创建了终端需要

重新 TCP连接到对应协议的服务器上完成设备连接(与设备进行映射)以

及上传数据的操作

34 设备 ID 与产品序列号

通过 OneNET构建的物联网系统中有两套比较重要的编码设备 ID与产品序列号

(SN)其中

产品序列号是由厂商指定的在厂商的产品范围内是保持唯一的在出厂前烧写到每

一个终端中通常包含在与平台通信的数据中并以条形码的方式贴在产品的包装上用

于从用户的角度区分每一个独立的终端

设备 ID是在平台创建设备时由 OneNET分配的平台范围内唯一的编号应用于第三

方平台调用 OneNET API时使用

在创建设备时OneNET平台需要用户以设备 sn为参数进行设备创建成功之后平

台会分配一个设备 ID这样 OneNET内部就有了一个 sn-设备 ID的映射关系

终端登陆使用的鉴权信息是出厂时烧写好的 sn鉴权通过之后平台可以将该终端

上传是数据放到对应的设备中

上层应用通过创建设备 API或者查询设备 API建立 sn-设备 ID映射表在需要操作

某一设备时首先可以获取的是终端的 sn号(因为对用户是可见的)通过映射表获取设

中移物联网有限公司 OneNET 开发文档中心

备 ID然后再通过 API访问 OneNET平台上的对应设备

两套编码在物联网系统中的应用位置如下图所示

物联网应用

OneNET

终端

(烧写sn)

HTTP API 以设备ID为参数进行API访问

接入协议以sn为鉴权参数进行设备连接

设备

设备名

设备ID

设备sn

设备标签

sn 设备ID

snmdash设备ID映射表

中移物联网有限公司 OneNET 开发文档中心

第四章 第三方应用开发

第三方应用与 OneNET 平台的业务逻辑关系如图 4-1 所示第三方应用与

OneNET平台之间通过 HTTPS请求应答的方式实现数据交互OneNET 平台为第三

方应用提供封装好的 API 接口应用平台通过调用这些 API 接口完成对 OneNET

平台的读写执行以及设备管理请求然后 OneNET 平台会将相应的指令请求发送

到终端设备OneNET 平台收到终端设备响应的数据及设备信息后会将数据及

设备信息推送到应用平台完成应答

下面将分别介绍第三方应用接入 OneNET 平台的步骤OneNET平台提供的数

据推送功能以及 OneNET 平台为第三方应用封装好的 API接口

图4-1 第三方应用与OneNET平台的逻辑关系

41 第三方应用接入 OneNET 平台

第三方应用与 OneNET平台实现数据交互的前提是已经建立连接第三方应

用接入 OneNET平台的开发流程如图 4-2所示包括三个步骤

(1) 在 OneNET 平台创建了设备该设备有对应的真实设备且能正常上报

数据

(2) 用户已经开发并部署了 OneNET平台验证接入的程序

(3) 在 OneNET 平台正确配置了第三方应用数据接收的地址(URL)

Token以及其他参数

中移物联网有限公司 OneNET 开发文档中心

在确保上述第(1)步已经实现的基础上下面将分别讲述第(2)步和第

(3)步的实现过程

图4-2 数据推送的开发流程

412 第三方应用平台接入验证程序

第三方应用平台接入验证程序工作流程如下所述当 OneNET 平台完成对第

三方开发平台的配置后会向第三方开发平台发起 URLampToken验证接入验证程

序对平台发送的验证参数进行验证验证通过后第三方开发平台会向 OneNET

平台返回验证消息当 OneNET 平台收到验证消息后说明第三方开发平台与

OneNET平台已建立连接

目前 OneNET平台为第三方应用平台提供接入验证程序的 SDK有 Javaphp

Nodejs和 C四个版本

SDK 下载地址httpsopeniot10086cndocart432html118 -ldquo数

据推送rdquo

413 OneNET 平台配置第三方应用平台

在 OneNET平台对第三方应用平台的配置界面如图 4-3所示

URL第三方开发平台的地址

Token可以自定义用于第三方开发平台接入平台握手验证

消息加解密方式有明文模式和安全模式当启用安全模式后平台端需要

用户自定义 AESKey 或者由平台随机生成在应用程序中使用该 AESKey 解密消

中移物联网有限公司 OneNET 开发文档中心

推送时间限制(秒)和推送数据限制(个)设置ldquo推送时间限制rdquoldquo推送数

据限制rdquo可以实现批量推送数据减少服务器压力当满足ldquo推送时间限制rdquo和

ldquo推送数据限制rdquo要求后OneNET 将给第三方推送数据如果没有设置ldquo推送

时间限制rdquo和ldquo推送数据限制rdquo将默认数据实时推送

图4-3 第三方开发平台的配置界面

当用户成功在 OneNET 平台配置了第三方开发平台服务器地址后点击ldquo提

交rdquo按钮后OneNET 平台会向第三方应用平台发起 URLampToken 验证请求验证

通过且收到第三方返回的验证消息后则第三方应用平台与 OneNET 平台已建立

连接之后OneNET 平台在收到设备数据时会将设备数据推送到已配置的第三

方应用平台

用户数据接收服务程序接收到 OneNET平台发送的 ldquoURLampTokenrdquo验证请求

请求的格式形如httpipporttestmsg=xxxampnonce=xxxampsignature=xxx

蓝色字体部分为用户在 OneNET平台配置的 URL常规的验证流程如下

(1)在请求中获取参数ldquononcerdquoldquomsgrdquo的值将ldquotokenrdquo(此为页面

配置参数 token的值)ldquononcerdquoldquomsgrdquo的值计算 MD5(token+nonce+msg)

加密值并且编码为 Base64字符串值

中移物联网有限公司 OneNET 开发文档中心

(2)将上一步中 Base64字符串值通过 URL Decode 计算后的值与请求参数

ldquosignaturerdquo的值进行对比如果相等则表示 token验证成功

(3)如果 token 验证成功向 OneNET 平台返回ldquomsgrdquo参数值否则返回

其他值

说明如果用户不想验证 Token 的有效性可以忽略以上步骤并直接向

OneNET平台返回ldquomsgrdquo参数值

42 OneNET 平台数据推送

平台以 HTTPS POST 请求形式向第三方应用平台注册地址推送数据推送数

据相关信息以 JSON 串的形式置于 HTTPS请求中的 body部分

第三方应用平台在接收数据时会接收到数据的明文消息或者密文消息

明文消息中以ldquotyperdquo的数值区分不同的消息而密文消息与明文消息的区别

是ldquomsgrdquo部分经过了加密处理下面将分别对明文消息密文消息以及消息相

关字段和密文的加密算法进行说明

421 明文消息

明文消息有两种消息类型分别为数据点消息和设备上下线消息而数据点

消息又分为单条数据点消息和数据点消息批量形式数据点消息批量形式中的不

同数据点是以不同时间戳区分的

(1)数据点消息(type=1)

msg

type 1

dev_id 2016617

ds_id datastream_id

at 1466133706841

value 42

msg_signature message signature

nonce abcdefgh

(2)数据点消息批量形式(type=1)

msg [

type 1

dev_id 2016617

ds_id datastream_id

中移物联网有限公司 OneNET 开发文档中心

at 1466133706841

value 42

type 1

dev_id 2016617

ds_id datastream_id

at 1466133706842

value43

]

msg_signature message signature

nonce abcdefgh

(3)设备上下线消息(type=2)

msg

type 2

dev_id 2016617

status 0

login_type 1

at 1466133706841

msg_signature message signature

nonce abcdefgh

422 密文消息

密文消息中的ldquoenc_msgrdquo是由明文消息中的ldquomsgrdquo采用 AES 加密算法而

enc_msgxxxx

msg_signature

message signature

nonceabcdefgh

423 消息相关字段说明

表4-1 消息相关字段说明

字段 字段说明

type 标识数据类型当前版本范围[15]

dev_id 设备 ID

ds_id 公 开 协 议 中 的 数 据 流 ID 其 格 式 为

objectID_instanceID_resourceID

at 平台时间戳单位 ms

value 具体数据部分为设备上传至平台或触发的相关

数据

中移物联网有限公司 OneNET 开发文档中心

status 设备上下线标识

0-下线 1-上线

login_type

设备登陆协议类型

1EDP 2nwx 3JTEXT 5JT808 6

MODBUS 7MQTT 8gr2010NB-IoT

cmd_type

命令响应的类型

1设备收到 cmd的 ACK 响应信息 2设备收到

cmd的 Confirm响应信息

cmd_id 命令 ID

msg_signatur

e 消息摘要

nonce 用于计算消息摘要的随机串

enc_msg 加密密文消息体对明文 JSON串(msg字段)的

加密

424 加密算法详述

平台基于 AES算法提供加解密技术具体阐述如下

EncodingAESKey 即消息加解密 Key 的 BASE64编码形式长度固定为 43

个字符从 a-zA-Z0-9共 62个字符中选取由服务开启时填写后

也可申请修改

AES密钥计算为 AESKey=Base64_Decode(EncodingAESKey + ldquo=rdquo)

EncodingAESKey 尾部填充一个字符的ldquo=rdquo 用 Base64_Decode 生成 32

个字节的 AESKey

AES采用 CBC 模式秘钥长度为 32 个字节(256位)数据采用

PKCS7填充 初始化 iv向量取秘钥前 16字节 PKCS7K为秘钥字

节数(采用 32)buf为待加密的内容N为其字节数Buf 需要被填

充为 K的整数倍在 buf的尾部填充(K-NK)个字节每个字节的内容

是(K- NK)具体详见toolsietforghtmlrfc2315

BASE64采用 MIME格式字符包括大小写字母各 26个加上 10个数

字和加号ldquo+rdquo斜杠ldquordquo一共 64个字符等号ldquo=rdquo用作后缀填

出于安全考虑平台网站提供了修改 EncodingAESKey的功能(在

EncodingAESKey 可能泄漏时进行修改对应上第三方平台申请时填写

的接收消息的加密对称密钥)所以建议保存当前的和上一次的

中移物联网有限公司 OneNET 开发文档中心

EncodingAESKey若当前 EncodingAESKey 生成的 AESKey解密失败则

尝试用上一次的 AESKey的解密

平台的加密消息部分为 enc_msg= Base64_Encode( AES_Encrypt

[random(16B)+msg_len(4B)+msg] )即以 16字节随机字节串拼接 4字

节表示消息体长度的字节串(此处 4 字节长度表示为网络字节序)再加

上消息本身的字节串作为 AES加密的明文再以 AES算法对明文进行加

密生成密文最后对密文进行 BASE64 的编码操作生成加密消息体

对加密消息体的解密流程为1)首先进行加密消息体的 BASE64 解码操作

aes_msg=Base64_Decode(enc_msg)2)对获取的解码内容以 AES 算法进行解密

操作获取明文部分plain_msg=AES_Decrypt(aes_msg)解密中使用的秘钥由

EncodingAESKey 计算得来使用的初始化 iv 向量为计算出的 aes 秘钥的前 16

字节3)去掉 plain_msg 的前 16 字节再以前 4 字节取出消息体长度根据消

息体长度获取真实的消息部分(推荐以消息体长度获取真实消息以兼容

plain_msg 未来可能出现的结构变更)表示加密传输的数据后两字段与明文

传输一致

43 API 接口

第三方开发平台应用层通过 Rsetful API 的方式和 OneNET平台进行交互对

接实现命令的下发数据的读写以及相关业务的交互

针对 MQTT 协议目前主要开发了以下 API 用来实现第三方开发平台向

OneNET平台请求读写执行以及设备管理请求具体见下表 4-2下面分别对每一

种 API进行说明

表4-2 API功能说明

API 类别 操作对象 API名称

需要终端响应 只需平台响应

设备

注册

更新设备注册属性

新增

更新

精确查询单个设备

中移物联网有限公司 OneNET 开发文档中心

模糊查询设备

批量查询设备状态

删除

数据流

新增

更新

查询单个数据流

查询多个数据流

删除

数据点

新增

查询

二进制数

新增

查询

触发器

新增

更新

查询单个触发器

模糊查询触发器

删除

触发数据内容

命令

发送命令

查询命令状态

查询命令相应

查询设备历史命令

视频能力 获取播放地址

APIKEY

新增

更新

查看

删除

消息订阅

按 Topic发送命令

查询订阅指定 Topic设备的列表

查询设备订阅的 Topic列表

删除产品的 Topic

查询产品的 Topic

中移物联网有限公司 OneNET 开发文档中心

432 设备

4321 注册

表4-3 设备注册

HTTP方法 POST

URL apihecloudscomregister_de

URL参数 register_code=6TM1OkhNsTjATvFx 设备注册码(必填)

HTTP内容

(示例)

sn 2015031401421 设备唯一标识 string类型最长 512字符

mac C89346DA4373 设备唯一 mac标识最长 32字符

title myedpdevice 设备名(可选) 最长 32个字符

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

keyQ1VdWoEvdkCye=d1=HcCSP6LvCw= 新设备 apikey

device_id 325018 设备 ID

说明

1 响应消息中 errno 表示错误码error 表示错误原因如果创建设备失

败则没有 data字段

2 snmac一定要必填其中一个而且只可以传一个用于鉴权就是设备

新增中的 auth_info

3 此接口根据产品设置的不同默认 allow_dup=true可以生成新设备及

key或获取原有设备及 key见下表

表4-4 对应表

产品允许重复 sn 在产品中已存在 sn 在产品中不存在

allow_dup=true 是 sn 对应的设备 id 和 key 新的设备 id 和 key

allow_dup=false 否 报错 新的设备 id 和 key

中移物联网有限公司 OneNET 开发文档中心

此接口返回的新设备默认设备名均为auto_register均为私有设

备设备协议与产品协议相同

4322 更新设备注册属性

表4-5 更新设备注册属性

HTTP方法 PUT

URL apihecloudscomregister_attr

HTTP头部 api-key xxxxddddsssaaa 必须为 masterkey

HTTP内容

(示例)

allow_dup true|false是否允许重复提交相同的设备 sn 默认 true

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

默认 allow_dup 为 true主要用于设备注册码创建设备属性限制

4323 新增

表4-6 新增设备注册属性

HTTP方法 POST

URL apihecloudscomdevices

HTTP头部 api-key xxxxddddsssaaa 必须为 masterkey

HTTP内容

(示例)

title mydevice 设备名

desc some description 设备描述(可选)

tags [chinamobile] 设备标签(可选可为一个或多个)

protocolMQTT 选择一种接入协议(可选默认为 HTTP)

location lon 106 lat 29 ele 370设备位置纬度

经度 高度(可选)

private true| false 设备私密性(可选默认为 ture)

auth_info 201503041a5829151 MQTT设备设备唯一编号

other version 100 manu china mobile 其他信息(可

选JSON格式可自定义)

HTTP响应响

应消息内容

(实例)

errno 0

error succ

data

中移物联网有限公司 OneNET 开发文档中心

device_id233444 平台分配的设备 ID

4324 更新

表4-7 更新

HTTP方法 PUT

URL apihecloudscomdevicesdevice_id

HTTP头部 api-key xxxxddddsssaaa masterkey或设备 apikey

HTTP内容

(示例)

title mydevice 设备名(可选)

desc some description 设备描述(可选)

tags [chinamobile] 设备标签(可选)

protocolMQTT 选择一种接入协议(可选)

location lon106 lat 29 ele 370设备位置经度

纬度 高度(可选)

private true| false 设备私密性(可选)

auth_info201503041a5829151 MQTT设备设备唯一编号(可选)

other version 100 manufacturer china mobile 其

他信息(可选)

HTTP响应响

应消息内容

(示例)

errno 0

error succ

中移物联网有限公司 OneNET 开发文档中心

4325 精确查询单个设备

表4-8 精确查询单个设备

HTTP方法 GET

URL apihecloudscomdevicesdevice_id

HTTP头部 api-key xxxxddddsssaaa masterkey 或设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

iddevice_id

tags [chinamobile]

onlinetrue|false

protocolMQTT

titlemy device1

descsome description

create_time2015-09-16 102222

privatetrue|false

locationele370lat17609lon17703

auth_infohellip

otherversion100manufacturerchina mobile

keys[titledevice-auto-keykey2JO3B12O1]

数据流

datastreams[

create_time 2014-10-23 202222

iddatastream_id1

unitcelsius

unit_symbolC

uuid 231a5aa9-9de4-5f2e-9e0f-015181c98429

]

4326 模糊查询设备

表4-9 模糊查询设备

HTTP方法 GET

URL apihecloudscomdevices

中移物联网有限公司 OneNET 开发文档中心

URL 参数

key_words=my 匹配关键字(可选从 id和 title字段中左匹配)

auth_info=203x1 鉴权信息(可选对应注册时的 sn参数唯一设

备编号)

tag=mobile 标签(可选)

online=true| false 在线状态(可选)

private=true| false 私密性(可选)

page=1 指定页码最大页数为 10000(可选)

per_page=30 指定每页输出设备个数默认 30最多 100(可选)

device_id=235122 指定设备 ID多个用逗号分隔最多 100个(可

选)

begin=2016-06-20 起始时间包括当天(可选)

end=2016-06-20 结束时间包括当天(可选)

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

total_count1

per_page30

page1

devices

[

id3497307

titlemy device1

desc device desc

privatetrue

protocolMQTT

onlinefalse

locationlon10655231191544001lat29535451246673

create_time2013-02-11 122233

auth_infoSYSz=8QY3r7aTQ48UKfqPnB=PybYRo=

]

4327 批量查询设备最新数据

表4-10 批量查询设备最新数据

HTTP方法 GET

中移物联网有限公司 OneNET 开发文档中心

URL apihecloudscomdevicesdatapoints

URL参数 devIds=1221122331123 设备 id用逗号隔开限制 1000 个设备

HTTP头部 api-key xxxxddddsssaaa masterkey 或设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

error ldquosuccrdquo

data

devices [

id 12323 设备 id

title daf设备名

datastreams

[

id temperature数据流名称

at 2017-02-12 102222数据流更新时间

value 12数据流最新数据

hellip

helliphellip

]

hellip

hellip

]

4328 删除

表4-11 删除设备

HTTP方法 DELETE

URL apihecloudscomdevicesdevice_id

HTTP头部 api-key xxxxddddsssaaa 可为设备级别的 Key

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

中移物联网有限公司 OneNET 开发文档中心

说明删除设备会删除该设备下所有数据流和数据点删除设备动作是异步

的系统会在后续逐步删除该设备下的数据流和数据点

433 数据流

4331 新增

表4-12 新增数据流

HTTP方法 POST

URL apihecloudscomdevicesdevice_iddatastreams

HTTP头部 api-key xxxxddddsssaaa masterkey 或设备 apikey

HTTP内容

(示例)

idtemperature 数据流名称 示例温度

tags[Tag1Tag2] 数据流标签(可选可以为一个或多个)

unitcelsius 单位(可选)

unit_symbolC 单位符号(可选)

HTTP响应响

应消息内容

(示例)

errno 0

data

ds_uuid 9e6bcac9-2c6f-59d5-adae-3955df2e7bce平台分配

数据流 UUID

error succ

4332 更新

表4-13 更新数据流属性

HTTP方法 PUT

URL apihecloudscomdevicesdevice_iddatastreamsdatastream_id

示例apihecloudscomdevices421240datastreamstemperature

HTTP头部 api-key xxxxddddsssaaa masterkey 或设备 apikey

HTTP内容

(示例)

tags[Tag1Tag2] 数据流标签(可选)

unitcelsius 单位(可选)

unit_symbolC 单位符号(可选)

HTTP响应响

应消息内容

(示例)

errno 0

error succ

中移物联网有限公司 OneNET 开发文档中心

4333 查询单个数据流

表4-14 查询单个数据流

HTTP方法 GET

URL apihecloudscomdevicesdevice_iddatastreams

URL参数 datastreams_ids = 查看的 datastream的 id

HTTP头部 api-key xxxxddddsssaaa masterkey 或该设备的设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

data [

update_at 2018-06-29 112938 数据流最后更新时

id 湿度 数据流名称

create_time 2018-06-28 170548数据流创建时间

current_value 53845013最新数据点

]

error succ

4334 查询多个数据流

表4-15 查询多个数据流

HTTP方法 GET

URL apihecloudscomdevicesdevice_iddatastreams

URL 参数

datastream_ids= 查看的 datastream的 id多个 id之间用英文逗号

分开(参数缺省时为查询所有数据流)

示例

apionenetcomdevices1234datastreamsdatastream_ids=tempgps

表示查看 temp和 gps两个数据流的信息

HTTP头部 api-key xxxxddddsssaaa masterkey 或者 该设备的设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data 数据流信息

[

idtemperature 数据流名称设备范围内唯一

tags[Tag1Tag2] 数据流标签

unitcelsius 单位

unit_symbolC单位符号

create_timexxxx-xx-xx 102222 创建时间

中移物联网有限公司 OneNET 开发文档中心

current_valuehellip该数据流下数据点最新值

update_atxx-xx-xx该数据流下数据点最新上传时间

]

[

idhumi 数据流名称设备范围内唯一

tags[Tag1Tag2]

unit_symbol

create_timexxxx-xx-xx 102222

current_valuehellip

update_atxx-xx-xx

]

[]

4335 删除

表4-16 删除数据流

HTTP方法 DELETE

URL apihecloudscomdevicesdevice_iddatastreamsdatastream_id

URL参数 无

HTTP头部 api-key xxxxddddsssaaa masterkey 或者设备 key

HTTP响应响

应消息内容

(示例)

errno 0

error succ

434 数据点

4341 新增

中移物联网有限公司 OneNET 开发文档中心

表4-17 新增数据点

HTTP方法 POST

URL apihecloudscomdevicesdevice_iddatapoints

URL参数 type=3 上传数据类型(可选默认为完整 JSON型见 HTTP内容示

例)

HTTP头部 api-key xxxxddddsssaaa masterkey 或者 设备 apikey

HTTP内容

(示例)

datastreams

[

id temperature 数据流名称或数据流模板名称

datapoints [

at 2013-04-22T003543 上传数据点时间可选如

果为空则设备云会取当前时间如果存在其格式必须为 YYYY-MM-

DDThhmmss的形式(例如2015-03-22T223112)

value 42 上传数据点值

at 2013-04-22T005543

value 84 上传数据点值

]

id key 数据流名称或数据流模板名称

datapoints [

at 2013-04-22T003543上传数据点时间可选

value hellip上传数据点值

at 2013-04-22T003543

value hellip上传数据点值

]

hellip

]

中移物联网有限公司 OneNET 开发文档中心

HTTP 响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

1 可以一次性向设备云上传多个数据流每个数据流中可以包括多个数据

点示例程序表示向设备云上数据流 temperature 和数据流 key上传数据其中

temperature数据流有两个数据点key数据流也有两个数据点

2 如果某个数据流不存在则在增加数据点时设备云会自动创建一个新

的数据流注意新数据流的 datastream id 不可为空

3 数据点表示在某个时刻该数据流的值其 at表示时间为可选字段如

果为空则设备云会取当前时间如果存在其格式必须为YYYY-MM-DDThhmmss

的形式(例如2015-03-22T223112)

4 数据点中的 value表示具体的值其值为 JSON对象可以为整型浮点

型字符串多种类型如果 value部分用双引号括起来则其在设备云存储为字

符串如果不用双引号括起来则其表示数值字符编码现在只支持 UTF-8

5 数据点对应的时间是数据点的标识的一部分相同时间的两个数据点

设备云会同时对这两个相同时间的数据点进行保存不会出现覆盖另一个数据点

的情况一般如果 at 部分取空设备云会取系统时间精度为毫秒如果在一

条命令中某一个数据流包含多个数据点都没有 at 字段设备云将会对所有数据

点进行保存

6 新增数据点支持如下简写方式在请求的 URL中增加 type字段指示所

使用的格式类型目前 type支持 345三种情况

URLapihecloudscomdevices2214570datapointstype=3

示例temperature225humidity952

表示在数据流 temperature中增加一个数据点 225在 humidity 中增加一

个数据点 952

URLapihecloudscomdevices2214570datapointstype=4

示例temperature2015-03-22T223112225

表示在数据流 temperature中加一个数据点在 2015年 3月 22 日 22点 31

中移物联网有限公司 OneNET 开发文档中心

分 12秒的值为 225

URLapihecloudscomdevices2214570datapointstype=5

示例temperature2015-03-22T223112225pm2589

表示在数据流 temperature中加一个数据点即 2015年 3月 22 日 22点 31

分 12秒的值为 225在数据流 pm25中添加一个数据点即当前时间的值为 89

4342 查询

表4-18 查询数据点

HTTP方法 GET

URL apihecloudscomdevicesdevice_iddatapoints

URL 参数

datastream_id=abc 查询的数据流多个数据流之间用逗号分隔

(可选)

start=2015-01-10T080035 提取数据点的开始时间(可选)

end=2015-01-10T080035 提取数据点的结束时间(可选)

duration=3600 查询时间区间(可选单位为秒)

start+duration按时间顺序返回从 start开始一段时间内的数据点

end+duration按时间倒序返回从 end回溯一段时间内的数据点

limit=100 限定本次请求最多返回的数据点数0ltnlt=6000(可选

默认 1440)

cursor= 指定本次请求继续从 cursor位置开始提取数据(可选)

sort=DESC | ASC 值为 DESC|ASC时间排序方式DESC倒序ASC升

序默认升序

ltnlt=6000(可选默认 1440)

HTTP头部 api-key xxxxddddsssaaa masterkey 或者 该设备的设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

cursor70921_3771908_1472355096

datastreams[

idtemperature数据流名称或数据流模板名称

datapoints[

at xxxx-xx-xx 102222value42数据点上传时间和

at xxxx-xx-xx 102222value84

]

中移物联网有限公司 OneNET 开发文档中心

idkey 数据流名称或数据流模板名称

datapoints[

at xxxx-xx-xx 102222valuehellip

atxxxx-xx-xx 102222valuehellip

]

hellip

]

1 若不携带任何参数平台返回本设备所存在的所有数据流中的最新数据

(这一种情况下查询时出现时延较大的性能问题建议在 URL 参数中加上

newadd参数并将其值赋为 true如 newadd=true)

2 若不携带数据流 id参数携带 limit 参数时会返回该设备每个数据流

最多 limit 条数据

3 若要查看某一条数据流数据需在上述 URL中增加参数 datastream_id

4

apihecloudscomdevices564280datapointsdatastream_id=tempamplimit

=10会返回数据流temp中最近的 10个数据点

5 要查看某一条数据流在某个时间范围内的数据可以在增加 start和 end

参数

示例

apihecloudscomdevices564280datapointsdatastream_id=temper

atureampstart=2013-05-12T171233ampend=2013-06-12T172233 表示查询本设

备对应的数据流在 2013 年 5 月 12 日 17 点 12 分 33 秒到 17 点 22 分 33 秒的数

据点注意如果 start 参数存在end参数不存在表示取 start后的所有数据

如果 start 不存在end 存在设备云会忽略 end参数注意日期时间格式格

式必须为示例中的格式YYYY-MM-DDThhmmss例如2013-05-12T171233

日期和时间之间用大写字母 T 分隔start 和 end 之间的时间间隔最大为 1 年

超过一年会忽略

如果指定了 start 参数则可能返回的数据点的数目会很多此时默认会返

回最多 100 个数据点可以使用 limit 参数设定返回多少个数据点最大为

6000个数据点当实际的数据点数目多于 limit 限定的数目时返回的 json串

中移物联网有限公司 OneNET 开发文档中心

中会有一个 cursor 字段下一次请求的命令行中可以携带此 cursor 字段表示接

着遍历本数据流此 cursor字段标识上次取出数据点后下一个数据点的位置

435 二进制数据

4351 新增

将二进制数据将作为数据点保存到设备下的某个数据流中设备云返回该二

进制数据的索引号

表4-19 新增二进制数据

HTTP方法 POST

URL apihecloudscombindata

URL参数 device_id=421590 数据所属设备(必选)

datastream_id=bin 该数据所属已经存在的数据流(必选)

HTTP头部 api-key xxxxddddsssaaa masterkey 或者该设备的设备 key

HTTP 内 容

(示例)

普通二进制数据文件图像等

(最大限制为 800上传时间间隔需大于 1ms)

HTTP响应响

应消息内容

(示例)

errno 0

error succ

data

index3491506_1475204886914_bin 二进制数据索引号

4352 查询

表4-20 查询二进制数据

HTTP方法 GET

URL apihecloudscombindataindex

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

普通二进制数据文件图像等二进制形式数据

436 触发器

4361 新增

表4-21 新增触发器

HTTP方法 POST

中移物联网有限公司 OneNET 开发文档中心

URL apihecloudscomtriggers

HTTP头部 api-key xxxxddddsssaaa 必须为 masterkey

HTTP内容

(示例)

titlewen du jian kong 设备名(可选)

ds_idgps 数据流名称(id)(可选)

dev_ids[10272345615523] 设备 ID(可选)

ds_uuids[ 数据流 uuid(可选)

9ad09uac-7446-512f-b07c-90jdnzj8120ad

4599436e-7146-5349-b07c-79fa0919cs62

]

urlxxbbcom

typegt | gt= | lt | lt= | == | inout | in | out |change | frozen |

live

threshold100 阙值根据 type不同见以下说明

1) type 为gt|gt=|lt|lt=|==时threshold必须为数值

2) type为 inout时threshold 设置为lolmt40 uplmt52 表示

数据流的值首次进入或离开闭区间[4052]时触发

3) type为 change时threshold 参数不用传递当上传的值有改变时触发

告警

4) type为 frozen时threshold 为数值指定距离最后一次数据上报多少

秒内未上报数据触发告警同时被监控对象进入 frozen状态

5) type 为 live 时threshold 为数值指定距离最后一次数据上报多少秒

后上报数据触发告警

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

tirgger_id233444 触发器 ID

说明

1触发器的含义是当指定范围内的数据点满足触发条件的要求时会向

url参数指定的地址发送 post请求

2触发器有三种工作触发模式

1)在请求参数中单独指定了 ds_id不包括其他参数那么当前项目下

中移物联网有限公司 OneNET 开发文档中心

所有设备的数据流中数据流名称符合 ds_id 的数据都会进入触发判断逻辑

2)在请求参数中单独指定了 ds_uuids 数组那么只有这些指定的数据

流会进入触发判断逻辑

3)在请求参数中指定了 ds_id 和 dev_ids那么只有这些指定的设备的

数据流会进入触发判断逻辑

4362 更新

表4-22 更新触发器属性

HTTP方法 PUT

URL apihecloudscomtriggerstirgger_id

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP内容

(示例)

titlewen du jian kong

ds_uuids[

9ad09uac-7446-512f-b07c-90jdnzj8120ad

4599436e-7146-5349-b07c-79fa0919cs62

]

urlxxbbcom

typegt | gt= | lt | lt= | == | inout | in | out | exp | change |

frozen | live

threshold100

注若要修改 type需要对应设置 threshold

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

4363 查询单个触发器

表4-23 查询单个触发器

HTTP方法 GET

URL apihecloudscomtriggerstirgger_id

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

idtrigger_id1

中移物联网有限公司 OneNET 开发文档中心

titlewen du jian kong

ds_uuids[

datastream1_uuidrdquo

datastream2_uuidrdquo

datastream3_uuidrdquo

]

urlxxbbcom

typegt|gt=|lt|lt=|==|in|out|exp|change|frozen|live

threshold100

invalidtrue 触发器是否已失效

create_timexx-xx-xx 102222

4364 模糊查询触发器

表4-24 模糊查询触发器

HTTP方法 GET

URL apihecloudscomtriggers

URL 参数

title=name 指定触发器名称

page=1 指定页码可选

per_page=10 指定每页输出个数可选默认 10最多 100

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

total_count600

per_page30

page1

triggers[

idtrigger_id1

titlewen du jian kong

ds_uuids

[datastream1_uuidrdquo datastream2_uuidrdquo]

urlxxbbcom

typegt|gt=|lt|lt=|==|in|out|exp|change|frozen|live

threshold100

invalidtrue 触发器是否已失效

create_timeXXXXXXXX

中移物联网有限公司 OneNET 开发文档中心

]

说明触发器失效是指触发器所依赖的数据流或者设备被删除了此时触发

器永远不会有效触发事件

4365 删除

表4-25 删除触发器

HTTP方法 DELETE

URL apihecloudscomtriggerstirgger_id

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno 0

error succ

4366 触发数据内容

触发数据是指当 OneNET 设备云判断某个触发器的触发条件满足时会通过

POST方式向外抛出的 URL请求在 HTTP的 POST消息体中会携带如下格式的 JSON

字符串

表4-26 触发器内容

数据内容

(示例)

trigger

id1

threshold90

typegt

current_data[

dev_id2656

ds_idgps

ds_uuidFWEF-ZFW-ZFW-ZFWW

at2009-09-07T121602001403Z

value100

dev_id2656

ds_idtemper

中移物联网有限公司 OneNET 开发文档中心

ds_uuidFEWEF-ZFWFWW-WFWW-FWEFFWW

at2009-09-07T121602001403Z

value882

]

437 命令

命令是指应用发送命令数据给 OneNET设备云再由 OneNET设备云转发给终

端设备终端设备收到命令后可以向设备云反馈响应的一种工作机制命令下发

后应用可以通过 API查询命令状态和提取命令的响应数据

命令的执行步骤如下

1应用通过 API 向设备云发送命令数据

2设备云生成该命令的 uuid作为该命令的唯一标识并向应用返回同时向

终端设备转发命令数据

3 终端设备收到命令数据后执行命令数据可以生成响应也可以不响应

4设备云跟踪记录命令的响应如果设备有响应就关联命令 uuid和响应

结果

5应用通过 API 向设备云提取命令执行结果(API 请求中携带命令 uuid 标

识)

特别说明

命令下发到终端设备后如果终端设备 10 秒内未收到响应则此命令的状

态将被设置为超时应用通过 API 查询命令状态时会反馈超时超过 10 秒后

收到的响应会被丢弃

终端设备针对同一条命令回复多条命令响应只有在未超时时间内收到的最

后一条是有效响应前面的响应包将会被覆盖因此终端设备应该对每个命令只

有一个响应包

4371 发送命令

表4-27 发送命令

HTTP方法 POST

URL apihecloudscomcmds

URL 参数 device_id=415120 接收该数据的设备 ID(必选)

中移物联网有限公司 OneNET 开发文档中心

qos=0 | 1 是否需要响应默认为 0

0不需要响应即最多发送一次不关心设备是否响应

1需要响应如果设备收到命令后没有响应则会在下一次设备登陆

时若命令在有效期内(有效期定义参见 timeout参数)则会继续发送

对响应时间无限制多次响应以最后一次为准

本参数仅当 type=0时有效

timeout=300 命令有效时间默认 0

0在线命令若设备在线下发给设备若设备离线直接丢弃

gt0 离线命令若设备在线下发给设备若设备离线在当前时间

加 timeout时间内为有效期有效期内若设备上线则下发给设备单

位秒有效围0~2678400

本参数仅当 type=0时有效

type=0 | 1 默认 00发送 CMD_REQ包1发送 PUSH_DATA包

HTTP头部 api-key xxxxddddsssaaa masterkey或者设备 apikey

HTTP内容 用户自定义数据jsonstring二进制数据(小于 64K)

HTTP响应响

应消息内容

(示例)

errno 0

error succ

data

cmd_uuid2302-312-FWs 命令 id

4372 查询命令状态

表4-28 查询命令状态

HTTP方法 GET

URL apihecloudscomcmdscmd_uuid

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno 0

error succ

data

status1

0设备不在线|Device not online

1命令已创建| Command Created

2命令已发往设备| Command Sent

3命令发往设备失败| Send Command Failed

4设备正常响应| Command Response Received

5命令执行超时| Command Response Timeout

6设备响应消息过长 | Command Response Too Large

descldquosendingrdquo

中移物联网有限公司 OneNET 开发文档中心

4373 查询命令响应

表4-29 查询命令响应

HTTP方法 GET

URL apihecloudscomcmdscmd_uuidresp

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP 响应响

应消息内容

用户设备返回的响应内容

4374 查询设备历史命令

表4-30 查询设备历史命令

HTTP方法 GET

URL apihecloudscomcmdshistoryltdevice_idgtltdevice_idgt

URL 参数

start=2015-01-10T080035 查询的开始时间(可选)

end=2015-01-10T080535 查询的结束时间(可选)

page=1 指定页码最大页数为 10000(可选)

per_page=30 指定每页输出设备个数默认 30最多 100(可选)

HTTP头部 api-key xxxxddddsssaaa

HTTP响应响

应消息内容

errno 0

error succ

data

page 1当前页码

per_page 10当前每页总数

total_count 100

items [

cmd_uuid 2302-312-FWs

device_id 2设备 ID

expire_time 2016-07-05 000000过期时间

status 0命令状态

send_time 2016-07-05 000000发送时间

confirm_time 2016-07-05 000000响应时间

confirm_body 2463726571007b202274797022 响应内容

16进制字符

body 2463726571007b202274797022请求内容16进制字符

hellip

中移物联网有限公司 OneNET 开发文档中心

hellip

]

438 视频能力

4381 获取播放地址

表4-31 获取播放地址

HTTP方法 GET

URL apihecloudscomipcrtmp_address

URL 参数

device_id= 接收该数据的设备 ID(必填)

channel_id = 对应数据流名称中的 channelnum

protocol_type = 播放协议类型 0rtmp1hls2http-flv

HTTP头部 api-key xxxxddddsssaaa masterkey或者设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

errorrdquosuccrdquo

ldquodatardquo

addripport

accessTokenldquo字符串rdquo

439 APIKEY

4391 新增

表4-32 新增 APIKEY

HTTP方法 POST

URL apihecloudscomkeys

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP内容

(示例)

title sharing key key 的命名

permissions [

resources [ 被授权的资源

中移物联网有限公司 OneNET 开发文档中心

dev_id 424 被授权的设备 id

dev_id 425 被授权的设备 id

hellip

hellip

]

access_methods [ 被授权的命令

get

put

post

]

]

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data key2302-312-FWs key_string

说明授权命令是可选的另外被授权的命令也可以是 getputpost 的

一个或几个如只授权 get和 put命令

access_methods [getput]

4392 更新

表4-33 更新 APIKEY

HTTP方法 PUT

URL apihecloudscomkeyskey_string

HTTP头部 api-key xxxxddddsssaaa masterkey(注只能为 master-key)

HTTP内容

(示例)

title sharing key key 的命名

permissions [

resources [ 被授权的资源

dev_id 424 被授权的设备 id

ds_idfan1 数据流 id可选

中移物联网有限公司 OneNET 开发文档中心

dev_id 425 被授权的设备 id

ds_idfan1 数据流 id可选

hellip

hellip

]

access_methods [ 被授权的命令可选

get

put

post

]

]

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

说明

1对于 masterkey 不允许更新操作masterkey 默认具有最大权限可以访

问该用户名下所有设备所有数据

可以进行 POSTGETPUTDELETE操作如果更新 master key 系统会返回

失败

2授权命令是可选的另外被授权的命令也可以是 getputpost 的一个

或几个如只授权 get和 put命令

access_methods [getput]

3API key 更新是覆盖操作会将原来存在的授权资源和授权命令覆盖不

会保留原来的授权资源和授权命令

4393 查看

中移物联网有限公司 OneNET 开发文档中心

表4-34 查看 APIKEY

HTTP方法 GET

URL httpapihecloudscomkeys

URL 参数

key = FWJPO-FZFHW-FFEWB可选只查看该 key相关信息

page = 1 指定页码 可选

per_page = 10 指定每页输出个数可选默认 10最多 100

device_id = xxbbcc可选只查看与该设备相关的非 master-key

HTTP头部 api-key xxxxddddsssaaa masterkey(注只能为 master-key)

HTTP响应响

应消息内容

(示例)

errno 0

data

per_page 30

total_count 2

keys [

create_time 2015-11-04 142552

title Auto-generated-master-key

key 03GeDLYk0WNk1V338g7yndKZYkQA

create_time 2015-12-03 100041

permissions [

resources [

dev_id 564280

]

]

title 设备 1测试 Key

key vuHebEWefiU2Ueo5ouoCc1CUsYQ=

]

page 1

error succ

中移物联网有限公司 OneNET 开发文档中心

4394 删除

表4-35 删除 APIKEY

HTTP方法 DELETE

URL httpapihecloudscomkeyskey_string

HTTP头部 api-key xxxxddddsssaaa masterkey(注只能为 master-key)

HTTP 响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

4310 消息订阅

43101 按 Topic 发送命令

表4-36 按 Topic 发送命令

HTTP方法 POST

URL apihecloudscommqtt

URL参数 topic=xxx 设备订阅的主题(必选)

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP 内 容

(示例)

HTTP响应响

应消息内容

(示例)

errno0

errorldquosuccrdquo

data

total_count1

per_page30

page1

devices [123123433333]

43102 查询订阅指定 Topic设备的列表

表4-37 查询订阅制定 Topic设备的列表

HTTP方法 GET

URL apihecloudscommqtttopic_device

URL 参数

topic=xxx 设备订阅的主题(必选)

page=1 当前页码 必填大于等于 1

per_page=10 每页 必填范围 1-1000

中移物联网有限公司 OneNET 开发文档中心

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP内容

(示例)

HTTP响应响

应消息内容

(示例)

errno0

errorldquosuccrdquo

data

total_count1

per_page30

page1

devices [123123433333]

43103 查询设备订阅的 Topic列表

表4-38 查询设备订阅的 Topic列表

HTTP方法 GET

URL apihecloudscommqttdevice_topicdevice_id

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno0

errorldquosuccrdquo

data

[topic_name1 topic_name2 topic_name3]

43104 删除产品的 Topic

表4-39 删除产品的 Topic

HTTP方法 DELETE

URL apihecloudscommqtttopic

URL参数 name=xxx topic名(必选)

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno0

errorldquosuccrdquo

中移物联网有限公司 OneNET 开发文档中心

43105 查询产品的 Topic

表4-40 查询产品的 Topic

HTTP方法 GET

URL apihecloudscommqtttopic

URL参数 无

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno0

errorldquosuccrdquo

data

[topic_name1topic_name2topic_name3]

中移物联网有限公司 OneNET 开发文档中心

第五章 接入实例

51 MQTT-device 接入

511 工具下载

为方便开发人员直观感受使用 mqtt 协议进入平台的便利可使用平台提供

的 MQTT 设备模拟器进行接入平台请在首页-gt开发文档-gt资源下载-gt13 调试

工具下载进行下载如下图

图5-1 资源下载

下载地址

httpupfileshecloudscom123ueditor201707125d5bc37eca39c0c5b7a5bcb9

0e451eeerar

中移物联网有限公司 OneNET 开发文档中心

512 界面说明

图5-2 界面说明

513 使用方法

5131 创建产品

如 323 的过程在设备接入协议中选择 MQTT

中移物联网有限公司 OneNET 开发文档中心

图5-3 选择连接协议

5132 创建设备

如 323描述在平台上新建一个设备

5133 建立连接

在产品概况中可以查看产品 ID此信息填入模拟器 ProductID一栏如下图

图5-4 产品ID

在平台上进入设备信息页面可查看设备 ID及鉴权信息(此鉴权信息是新建设备时候填

写的鉴权信息)如下图

中移物联网有限公司 OneNET 开发文档中心

图5-5 设备ID及鉴权信息

相应把设备 ID及鉴权信息填入模拟器之中然后点击连接按钮如果未弹出提示对话

框则表示设备鉴权成功如下图

图5-6 连接成功

中移物联网有限公司 OneNET 开发文档中心

5135订阅与发布

演示本操作需要在 OneNet平台建立两个基于 MQTT协议的设备一个用于消息发布

另一个用于消息订阅

图5-7 设备状态

开启两个模拟器分别模拟以上两个设备然后建立连接

首先使用订阅主题打开第一个模拟器模拟消息订阅者

图5-8 订阅主题

其次发布主题打开第二个模拟器模拟消息发布者

中移物联网有限公司 OneNET 开发文档中心

图5-9 发布主题

经过以上两个操作后查看模拟消息订阅者的模拟器则收到了主题

为rdquotopic_namerdquo的消息如下图

中移物联网有限公司 OneNET 开发文档中心

图5-10 收到的主题

5136接收平台指令

建立连接后模拟器也可接收来自平台的指令具体操作如下

先打开模拟器-gt建立连接-gt选中【[OneNet]平台指令接收】选项栏利用平台下发指

令功能下发如下图平台下发指令

图5-11 平台发送命令

中移物联网有限公司 OneNET 开发文档中心

图5-12 下发指令

填写好将要发送的消息后点击【发送命令】按钮则模拟器成功接收到来自平台的

数据如下图模拟器截图

图5-13 模拟器收到的指令

5137上传数据点

Mqtt支持 Json 数据格式上报数据现根据 Json几种格式举一些例来演示怎么利用

模拟器上传数据

1)使用 Json数据 Type1上传 Json数据

datastreams[idtemperaturedatapoints[value255]]

中移物联网有限公司 OneNET 开发文档中心

如下模拟器上传数据界面

图5-14 Type1数据格式

则在平台数据展示中则可看到上传的数据点

图5-15 收到数据展示

2)使用 Json数据 Type3示例 Json数据为

temp32humi98

模拟器发送数据截图

中移物联网有限公司 OneNET 开发文档中心

图5-16 Type3数据格式

平台数据展示截图

图5-17 数据展示

3)使用 Json数据 Type4示例 Json数据为

temperature233pm2589

模拟器上传数据截图

中移物联网有限公司 OneNET 开发文档中心

图5-18 Type5数据格式

平台接收数据展示截图

图5-19 数据展示

52 基于麒麟开发板的 MQTT 接入实例

OneNet 平台为使用户能快速接入发布麒麟座开发板官网提交您的创意免

费申请开发板下面利用麒麟座开发板 V31 演示开发板采集温湿度使用 MQTT发

送到平台的接入流程

开发板申请链接httpsopeniot10086cneventdetail185html

521 搭建开发环境

OneNET 平台提供的麒麟座开发板是基予 STM32 单片机开发的一块功能应用

板开发板包含 MCU温湿度传感器GSM 模块WIFI 模块电源模块键盘

中移物联网有限公司 OneNET 开发文档中心

LED以及 lcd显示接口等满足用户对平台接入的基本需求能快速接入到平台

资料包配备完整工程代码方便工程移植等使用

目前 STM32 开发常用的 IDE 有 IARMDK 等我挑选 MDK 作为开发工具打

开工具包先安装 MDK511A安装完毕后再安装 MDKCM511A开发板所有资料软件

工具包下载案例包

案例包下载链接

httpspanbaiducoms1UB1qZGrVuovSVdbqqXP0Lglistpath=2F

图5-20 MDK包

安装完毕并安装 license详细步骤不做演示

中移物联网有限公司 OneNET 开发文档中心

522 连接硬件准备

5221 开发板接线

图5-21 开发板接线图

电源DC-5V

运行信息USART1-MicroUSB 线

软件下载ST-Link

中移物联网有限公司 OneNET 开发文档中心

5222 ESP8266跳线帽连接

图5-22 ESP8266跳线帽连接

中移物联网有限公司 OneNET 开发文档中心

5223 M6312跳线帽连接

图5-23 M6312跳线帽连接

523 工程实例

例程使用最简单易懂的方式编写着重让大家明白接入流程和协议

10~12 协议专属例程是展示该协议下的专用功能比如 EDP 的 PushData

中移物联网有限公司 OneNET 开发文档中心

HTTP 注册新设备MQTT 的订阅发布等具体使用方法查看该目录下的《使用

说明》

图5-24 工程文件

524 开发工程文件

中移物联网有限公司 OneNET 开发文档中心

图5-25 工程文件

图5-26 工程结构

默认已创建好产品以及设备打开文件工程 onenetc 和 esp8266c 修改例

程的 WIFI 信息和平台信息

分别在 esp8266c 的 36和 onenetc的 414345行

图5-27 更改项

525 编译下载

开发版接串口会有相应状态显示平台设备显示在线状态绿色为连接成功

设备在线灰色表示未连接并在数据展示中显示对应主题的所有数据

中移物联网有限公司 OneNET 开发文档中心

图5-28 连接成功

图5-29 收到数据

其他实例详情请见httpsopeniot10086cnbbsthread-1266-1-1html

中移物联网有限公司 OneNET 开发文档中心

第六章 MQTT 协议详解

61 设备与平台通信协议包格式

协议就是通信双方的一个约定即表示第 1字节传输的什么第 2字节

传输的什么helliphellip在 MQTT协议中一个 MQTT 数据包由固定头(Fixed

header) 可变头(Variable header) 消息体(payload)三部分构成

MQTT 数据包结构固定头部+可变头部+消息体

固定头(Fixed header)存在于所有 MQTT数据包中表示数据包类型及

数据包的分组类标识固定头格式如下

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 - 5 Remaining Length(该字段占用 1-4个字节)

目前平台版本支持的 Packet Type如下

名字 值 流向 描述

CONNECT 1 C-gtS 客户端请求与服务端建立连接

CONNACK 2 S-gtC 服务端确认连接建立

PUBLISH 3 CS 发布消息

PUBACK 4 CS 收到发布消息确认

PUBREC 5 CS 发布消息收到

PUBREL 6 CS 发布消息释放

PUBCOMP 7 CS 发布消息完成

SUBSCRIBE 8 C-gtS 订阅请求

SUBACK 9 S-gtC 订阅确认

UNSUBSCRIBE 10 C-gtS 取消订阅

UNSUBACK 11 S-gtC 取消订阅确认

PING 12 C-gtS 客户端发送 PING(连接保活)命令

PINGRSP 13 S-gtC PING命令回复

DISCONNECT 14 C-gtS 断开连接

可变头(Variable header)存在于部分 MQTT 数据包中数据包类型决定

了可变头是否存在及其具体内容

消息体(Payload)存在于部分 MQTT 数据包中表示客户端收到的具体内

中移物联网有限公司 OneNET 开发文档中心

不同类型数据包中可变头和消息体包含关系如下

消息类型 Variabl

e

Header

Payloa

d

CONNECT 有 有

CONNACK 有 有

PUBLISH 有 有

PUBACK 有 无

PUBREC 有 无

PUBREL 有 无

PUBCOMP 有 无

SUBSCRIBE 有 有

SUBACK 有 有

UNSUBSCRIBE 有 有

UNSUBACK 有 无

PING 无 无

PINGRSP 无 无

DISCONNECT 无 无

62 平台支持数据包类型

621 CONNECT(客户端请求与服务端建立连接 client -gt server)

固定头(Fixed Header)

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 - 5 Remaining Length(该字段占用 1-4个字节)

MQTT Packet Type 值为 0001表示该数据包为请求连接数据包

Remaining Length 剩余长度占 1-4字节

可变头(Variable Header)

包含内容如下

Description 7 6 5 4 3 2 1 0

byte

1-2

ProtocolNa

me Length

0 0 0 0 0 0 0 0

0 0 0 0 0 1 0 0

byte

3

lsquoMrsquo 0 1 0 0 1 1 0 1

byte

4

lsquoQrsquo 0 1 0 1 0 0 0 1

中移物联网有限公司 OneNET 开发文档中心

byte

5

lsquoTrsquo 0 1 0 1 0 1 0 0

byte

6

lsquoTrsquo 0 1 0 1 0 1 0 0

Byte

7

Protocol

Level

0 0 0 0 0 0 0 1

Byte

8

Connect

Flag

Use

r

flag

Passwo

rd

flag

WillReta

in

Flag

WillQo

s Flag

WillFl

ag

CleanSessi

on

Flag

Reser

ve

Byte

9-10

KeepAlive

(1) 版本

Protocol Level 必须设置为 4平台只支持协议版本 v 311不支持更老

的版本使用第三方客户端时需要注意选择正确的版本

(2) user flag 与 password flag

平台不允许匿名登陆因此这两个标志位在连接时必须设置为 1否则认为

协议错误平台将会断开连接

(3) Will flag 与 WillretainflagWillQosFlag

Will flag 为 0时WillQosFlag 和 WillRetainFlag 必须为 0Will Flag

为 1时WillQosFlag 只能为 012

1当该设备下一次正常上线后服务器会清除之前的 will 消息(包括

retain 消息)

2如果设备上线时设置了 Will Topic 和 msg且将 WillRetainFlag 设

置为 1只有设备异常断开后服务器才会将该 Will msg 分发给新的 Will

Topic 的订阅者且 Qos 级别以订阅的 Request qos 级别为准

3如果设备上线时设置了 Will Topic 和 msg且将 WillRetainFlag 设

置为 0服务器不会存储该消息当设备异常断开后会将该 Will msg 以设

备设置的 WillQosFlag的 Qos级别进行分发

(4) CleanSessionFlag

若客户端将 clean session 标志位设置为 0当其断开后平台将会保存

sessionsession 需保持的内容包含

客户端订阅的 topic列表

中移物联网有限公司 OneNET 开发文档中心

还未完成确认的 Qos1Qos2级别的 publish消息

客户端保存 session 的内容包含

已经发送到服务端的但还没有收到确认的 Qos1Qos2消息列表

待发送的 Qos0列表

若客户端将 clean session 标志位设置为 1当其断开后平台会清除设备

的订阅列表及未完成确认的 Qos1Qos2 的 publish消息

(5) Reserve

保留位置 0

(6) KeepAlive 保活时间

每个客户端可自定义设置连接保持时间最短 120秒最长 65535 秒

消息体(Payload) Description 是否必须存在 格式

Field1 Client

Identifier

是 2字节字串长度 + utf8字

Field2 UserName 是 2字节字串长度 + utf8字

Field3 UserPassword 是 2字节字串长度 + utf8字

目前平台支持的方式为以后两种

方式 1设备 ID项目 ID鉴权信息(auth_info)

字段设置 消息示例

client_id设置为平台创建设备时的

设备 id

username设置为ldquo项目 IDrdquo

password设置为ldquo鉴权信息

(auth_info)rdquo

client_id=rdquo123rdquo

username=rdquo433223rdquo

password=rdquo注册的鉴权信息rdquo

各字段说明如下

鉴权信息(auth_info)在平台申请设备时填写设备的 auth_info 属性(数

字+字母的字符串)该属性需要产品内具备唯一性(可使用设备出厂唯一编号)

方式 2设备 ID + APIKey(项目 ID也需要填写)

字段设置 消息示例

client_id设置为平台创建设备时的

设备 ID

username设置为ldquo项目 IDrdquo

client_id=rdquo123rdquo

username=rdquo433223rdquo

password=Api Key

中移物联网有限公司 OneNET 开发文档中心

password设置为ldquoAPI鉴权信息

(auth_info)rdquo

项目 ID在平台添加项目时平台生成的 ID

APIKey在平台上创建产品时生成的 APIKey

连接包实例如下

Send one mqtt packet

FixHeader

PacketTag = 16

PacketType = 1

RemainLength = 34

VariableHeaderConnect

protocol_name_len_= 4

protocol_name_= MQTT

protocol_level_= 4

connect_flag_= 192

keep_alive_= 12000

client_id_len_= 8

client_id_= 34764813

usr_name_len_= 6

usr_name_= 150295

password_len_= 4

password_= push

MQTT0x10 0x22 0x00 0x04 0x4D 0x51 0x54 0x54 0x04 0xC0 0x2E 0xE0 0x00 0x08 0x33

0x34 0x37 0x36 0x34 0x38 0x31 0x33 0x00 0x06 0x31 0x35 0x30 0x32 0x39 0x35 0x00

0x04 0x70 0x75 0x73 0x68

Send One Packet Succ

中移物联网有限公司 OneNET 开发文档中心

622 CONNACK (服务端确认连接建立)

Fixed Header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type = 2 0 0 0 0

byte2 - 5 Remaining Length(该字段占用 1-4个字节)

Variable Header

Description 7 6 5 4 3 2 1 0

byte 1 Acknowledge Flags 0 0 0 0 0 0 0 Sp

byte 2 Return Code x x x x x x x x

Sp Session Present Flagsession信息在服务器已保持置 1未保存置

0

返回码说明

返回码 描述

0 成功

1 协议版本错误

2 非法的 clientid

3 服务不可用

4 用户名或密码错误

中移物联网有限公司 OneNET 开发文档中心

5 非法链接(比如 token非法)

失败

如果 connect包不符合协议内容约束则直接断掉连接而不需要发送 conn

ack包

如果鉴权或授权失败回复一个带非 0错误码的 connack包

成功

必须断掉重复的 clientid

执行 cleansession 对应的操作

必须回复一个 connack回复码为 0

开始消息传递并加入 keepalive的监视

PS客户端需要等到服务端的 connack报文才能发送后续的数据包

623 PUBLISH(发布消息 client -gt server)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type DUP f

lag

QoS Level RETAI

N

byte2 - 5 Remaining Length(该字段占用 1-4 个字节)

DUP

QoS2Qos1如果为 0则表示是第一次发送该包如果为 1则表示

为重复发送的包

Qos0DUP 必须为 0

中移物联网有限公司 OneNET 开发文档中心

QoS 指定了该 publish包的 Qos 等级如下

Qos 值 Bit2 Bit1 描述

0 0 0 最多发送一次

1 0 1 至少发送一次

2 1 0 只发送一次

RETAIN 保留标志位如果为 1服务器存储最新一条 RETAIN消息以便

分发给新的订阅者如果 RETAIN为 1Payload 为空服务器分发该消息后会

清空该 topic 下的 RETAIN 消息

PS该版本实现了 Qos0Qos1Qos2

Variable Header

Description 格式 是否必须

Field1 TopicName 2 字节字串长度 + utf8字

Field2 PacketIdent

ifier

2 字节 QoS0否QoS1Qos2是

Payload

内容根据不同业务自定义

624 PUBLISH(发布消息 server -gt client)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type DUP f

lag

Qos Level RETAIN

byte2 - 5 Remaining Length(该字段占用 1-4个字节)

DUP

Qos2QoS1如果为 0则表示是第一次发送该包如果为 1则表示

为重复发送的包

中移物联网有限公司 OneNET 开发文档中心

Qos0DUP 必须为 0

QOS 指定了该 publish包的 qos等级如下

Qos 值 Bit2 Bit1 描述

0 0 0 最多发送一次

1 0 1 至少发送一次

2 1 0 只发送一次

RETAIN如果服务器分发的消息是 RETAIN 消息则将该标志位置 1否则置

0

PS该版本实现 Qos0Qos1Qos2其中服务器分发消息的 Qos级别是以 Clien

t-gtServer 发送的 publish 包的 qos 等级为准非订阅的 topic 的 Qos 等级R

etain 消息是以订阅的 Request Qos 级别进行推送

VariableHeader

Description 格式

Field1 TopicName 2 字节字串长度 + utf8字

Payload

内容根据不同业务自定义

625 PUBACK(收到发布消息确认)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

中移物联网有限公司 OneNET 开发文档中心

626 PUBREC(发布消息收到)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

627 PUBREL(发布消息释放)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

628 PUBCOMP(发布消息完成)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

中移物联网有限公司 OneNET 开发文档中心

byte 1~

2

PacketIdentifier PacketIdentifier

629 SUBSCRIBE(订阅请求)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

Payload

Description 格式

Byte1~

n

TopicName 2 字节字串长度 + utf8字

Byten+

1

Request Qos 服务质量要求(只能为 0

12)

topic 说明

可以包含一个或多个 topic

topic必须是数字英文反斜杠()的组合目前不支持通配符

每个客户端最多订阅 100个 topic

以下 topic 被系统保留使用(客户端不能订阅)

类型 说明

$开头 平台保留

中移物联网有限公司 OneNET 开发文档中心

6210 SUBACK(订阅确认)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

Payload

Description 7 6 5 4 3 2 1 0

byte 1 retcode

返回码说明

返回码 描述

0x00 成功(granted qos = 0)

0x01 成功(granted qos = 1)

0x02 成功(granted qos = 2)

0x80 失败

6211 UNSUBSCRIBE(取消订阅)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

中移物联网有限公司 OneNET 开发文档中心

Payload

Description 格式

Byte1~

n

TopicName 2 字节字串长度 + utf8字

可以包含一个或多个 topic

6212 UNSUBACK(取消订阅确认)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

6213 PING(客户端发送 PING(连接保活)命令)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

NULL NULL

注PING命令无 VariableHeader

中移物联网有限公司 OneNET 开发文档中心

6214 PINGRSP(PING命令回复)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

NULL NULL

注PINGRSP无 VariableHeader

6215 DISCONNECT(断开连接)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

NULL NULL

注DISCONNECT无 VariableHeader

中移物联网有限公司 OneNET 开发文档中心

第七章 设备开发流程

71 连接鉴权

Device Onenet

(Connect)鉴权请求

(ConnAck)鉴权结果

加载session

鉴权

图7-1 连接鉴权

设备向平台发起 connect 请求connect 中携带鉴权信息具体

参见(报文格式参考 621)

平台拿到鉴权信息进行鉴权

鉴权通过后如果 cleansession=0 平台将会加载保存的设备

的一些信息如订阅列表(621中描述)

如果 cleansession=1 设备没有保存信息在平台则不加载设

备相关信息

返回鉴权结果 ConnAck(报文格式参考 621)

72 消息发布

721 数据点上报

设备使用 publish 报文来上传数据点 报文格式如下

中移物联网有限公司 OneNET 开发文档中心

VariableHeader

Field 名称 说明 格式

Field1 TopicName=rdquo$dprdquo $dp 为系统上传数据点

的指令

2字节字串长度 + utf8

字串

Payload

Payload包含真正的数据点内容支持的格式如下

Byte 1 Bit0-5数据类型指示目前支持

Type = 1

Type = 2

Type = 3

Type = 4

Type = 5

Type = 6

Type = 7

Bit6-7 flags 根据具体类型不同意义

Type6Type7这两种需要填写时间戳的数据类型

如果填入了时间戳则须将 bit7 置 1否则置 0(即

忽略数据类型说明中的日期时间相关字段)

0 0 0 0 0 0 0 1

Byte 2 根据数据类型指示不同

Byte n

中移物联网有限公司 OneNET 开发文档中心

数据类型 1(type == 1)格式说明

数据类型 2(type == 2)格式说明

Byte 1 数据点类型值1 1JSON 格式 1 字符串 0 0 0 0 0 0 0 1

Byte 2 指示后面 json 字符串长度

固定两字节长度高位字节值为 0x00

Byte 3 固定两字节长度低位字节值为 0x41

Byte 4

ldquodatastreamsrdquo[ 可以同时传递多个数据流

ldquoidrdquordquotemperaturerdquo

ldquodatapointsrdquo[数据流可以有多个数据点

rdquoatrdquordquo2013-04-22 222222rdquo可选

rdquovaluerdquo 365用户自定义

]

ldquoidrdquordquolocationrdquo

ldquodatapointsrdquo[hellip]

hellip

]

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

Byte n

Byte 1 数据点类型指示type=2 二进制数据 0 0 0 0 0 0 1 0

Byte 2 指示后面 json 字符串长度

固定两字节长度-高位字节值为 0x00

Byte 3 固定两字节长度-低位字节值为 0x10

Byte 4

rdquods_idrdquordquoimagerdquo 创建数据流时定义的 ID(必填)

ldquoatrdquordquo2014-10-25 122323rdquo 时间(可选)

rdquodescrdquo字符串或 json 对象对该数据的描述(可选)

hellip

Byte n

Byte n+1 指示后面二进制数据长度

固定四字节长度-第 1 字节(最高)值为 0x00

Byte n+1 固定四字节长度-第 2 字节值为 0x00

Byte n+2 固定四字节长度-第 3 字节值为 0x01

Byte n+3 固定四字节长度-第 4 字节(最低)值为 0x00

Byte n+4 该域目前最大支持 3M

中移物联网有限公司 OneNET 开发文档中心

数据类型 3(type == 3)格式说明

数据类型 4(type ==4)格式说明

hellip 本例中的该域 256 字节数据

Byte n+260

Byte 1 数据点类型指示type=3 JSON 格式 2 字符串 0 0 0 0 0 0 1 1

Byte 2 指示后面字符串长度

固定两字节长度高位字节值为 0x00

Byte 3 固定两字节长度低位字节值为 0x46

Byte 4 通用格式

ldquodatastream_id1rdquordquovalue1rdquo

ldquodatastream_id2rdquordquovalue2rdquo

hellip

示例

ldquotemperaturerdquo225rdquohumidityrdquordquo952rdquo

hellip

hellip

hellip

hellip

Byte n

Byte 1 数据点类型指示type=4 JSON 格式 3 字符串 0 0 0 0 0 1 0 0

Byte 2 指示后面字符串长度

固定两字节长度高位字节值为 0x00

Byte 3 固定两字节长度低位字节值为 0x46

Byte 4 通用格式

ldquodatastream_id1rdquoldquodatetime1rdquordquovalue1rdquo

ldquodatastream_id2rdquo ldquodatetime2rdquordquovalue2rdquo

hellip

示例

ldquotemperaturerdquoldquo2015-03-22 223112rdquo225

hellip

hellip

hellip

hellip

Byte n

中移物联网有限公司 OneNET 开发文档中心

数据类型 5(type == 5)格式说明

数据类型 6(type == 6)格式说明

Byte 1 数据点类型指示type=5 自定义分隔符 0 0 0 0 0 1 0 1

Byte 2 指示后面字符串长度

固定两字节长度高位字节值为 0x00

Byte 3 固定两字节长度低位字节值为 0x41

Byte 4 消息中最前面两字节为用户自定义的域中分隔符和域间分隔符

这两个分隔符不能相同比如采用逗号作为域中分隔符分号作

为域间分隔符的格式如下

feild0feild1hellipfeildn

其中每个 field 格式支持 3种

field 格式 1 3 个子字段分别是数据流 ID时间戳数据值

通用格式

Datastream_iddatetimevalue

field 格式 2 2 个子字段分别是数据流 ID 和数据值省略时

间戳通用格式

Datastream_idvalue

field 格式 3 1 个子字段省略了数据 ID 和时间戳只传输数

据值平台将用该域(feild)所在的位置号(从 0 开始)作为数据

流 ID通用格式

value

示例

(1)temperature2015-03-22

223112225102pm258910

(2)temperature2015-03-22

223112225102pm258910

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

Byte n

Byte 1 数据类型指示type=6 带时间自定义分隔符 0 0 0 0 0 1 1 0

Byte 2 年(后两位)例如 2016 年则该字节为 16 0 0 0 1 0 0 0 0

Byte 3 月(1-12)

Byte 4 日(1-31)

Byte 5 小时(0~23)

Byte 6 分钟(0~59)

Byte 7 秒(0~59)

Byte 8 指示后面字符串长度

固定两字节长度高位字节值为 0x00

Byte 9 固定两字节长度低位字节值为 0x41

Byte 10 消息中最前面两字节为用户自定义的域中分隔符和域间分隔符

具体格式见 type=5 说明若相关域中没有时间戳则采用本类

hellip

中移物联网有限公司 OneNET 开发文档中心

数据类型 7(type == 7)格式说明(每次最多 500个数据流的浮点数)

hellip 型的默认时间戳当作数据点的时间来存储

Byte n

Byte 1 Bit0-5 数据类型指示type=7 可离散浮点数数据流

Bit6保留置 0

Bit7 时间指示位1携带 6字节时间

1 0 0 0 0 1 1 1

Byte 2 年(后两位)例如 2016 年则该字节为 16 0 0 0 1 0 0 0 0

Byte 3 月(1-12)

Byte 4 日(1-31)

Byte 5 小时(0~23)

Byte 6 分钟(0~59)

Byte7 秒(0~59)

Byte 8 数据流名称(取值范围 1-65535)

高位字节值为 0x00

Byte 9 低位字节值为 0x01

Byte10 数据流个数(取值范围 1-500)

高位字节值为 0x00

Byte11 低位字节值为 0x01

Byte 10 4 字节 float 类型低位在前高位在后

Byte 11

Byte 12

Byte 13

Byte n 数据流名称(取值范围 1-65535)

高位字节值为 0x24

Byte n+1 低位字节值为 0x37

Byte n+2 数据流个数(取值范围 1-500)

高位字节值为 0x01

Byte n+3 低位字节值为 0x00

Byte n+2 4 字节 float 类型低位在前高位在后

Byte n+4

Byte n+5

Byte n+6

中移物联网有限公司 OneNET 开发文档中心

7211 Qos0(Client-gtServer)

Device OneNet

Publish $dp(Qos0)

存储

图7-2 QoS连接图

设备发布 Qos0 消息(上报数据点)

平台收到上报数据点后保存起来

7212 Qos1(Client-gtServer)

Device OneNet

Publish $dp(Qos1)

存储

PubAck

图7-3 Qos1连接图

设备发布 Qos1 消息(上报数据点)

中移物联网有限公司 OneNET 开发文档中心

平台收到上报数据点后保存起来

平台给设备回复相应的 PubAck (报文格式参考 625)

7213 Qos2(Client-gtServer)

Device OneNet

Publish $dp(Qos2)

存储

PubRec

PubRel

PubComp

图7-4 Qos2连接图

设备发布 Qos2 消息(上报数据点)

平台收到上报数据点后保存起来

平台给设备回复相应的 PubRec报文

设备需回复平台 PubRel报文如超时不回平台则会断开相应连接

平台给设备回复 PubComp报文

注数据点上报功能不支持 Retain 特性

中移物联网有限公司 OneNET 开发文档中心

722 平台命令(下发amp回复)

7221 命令下发

平台使用 publish 报文来下发平台指令 报文格式如下

FixHeader

参考 623

VariableHeader

Field 名称 说明 格式

Field1 TopicName=rdquo$creqcmduuidrdquo $creq为系统下发

Cmd 的 指 令

cmduuid为该条指

令的 uuid

2字节字串长度 +

utf8字串

Payload

Payload包含真正的指令内容

72211 Qos0(Server-gtClient)

DeviceOneNet

Publish $creq(Qos0)

图7-5 Qos0命令下发

命令下发

平台向设备发送 topic为$creq的消息(该 topic为平台命令)

中移物联网有限公司 OneNET 开发文档中心

设备收到 topic 为$creq 的 topic 时需将其作为平台下发的指令来处

注目前命令下发以 Qos0级别进行推送

7222 命令回复

设备使用 publish 报文来回复平台指令 报文格式如下

FixHeader

参考 623

VariableHeader

Field 名称 说明 格式

Field1 TopicName=rdquo$crspcmduuidrdquo $crsp为系统处理

设备回复 cmd 的

指令cmduuid为

该条指令的 uuid

2字节字串长度 +

utf8字串

Payload

Payload包含真正回复的指令内容

72221 Qos0(Client-gtServer)

DeviceOneNet

Pulish $crsp(Qos0)

图7-6 Qos0下发命令

中移物联网有限公司 OneNET 开发文档中心

72222 Qos1(Clientlt-gt Server)

DeviceOneNet

Pulish $crsp(Qos1)

Puback

图7-7 Qos1下发命令

如果设备回复响应时以 Qos1回复则平台需要给设备回复一个 Puback 报文

72223 Qos2(Clientlt-gt Server)

DeviceOneNet

Pulish $crsp(Qos2)

PubRec

PubRel

PubComp

图7-8 Qos2下发命令

如果设备回复响应时以 Qos2回复则

1平台需回复设备一个 PubRec报文

中移物联网有限公司 OneNET 开发文档中心

2设备在收到 PubRec后需向平台回复 PubRel报文

3平台收到 PubRel 报文后向设备回复 PubComp报文

73 创建 Topic

Device OneNet

HTTP 请求

HTTP 响应

图7-9 创建Topic

设备通过发送 HTTP请求进行 topic 的创建操作

平台收到请求后创建 topic 并返回结果

请求及响应定义如下

HTTP方法 POST

URL httpapihecloudscommqtttopic

HTTP头部 api-keyxxxx-ffff-zzzzz必须 master key

URL参数

HTTP body

内容

ldquonamerdquordquoxxxxxxrdquo topic 名字只能由英文下划线反斜杠组成最长

1024个字符同一产品下 topic name 不重复

成功返回

errno 0

errorldquosuccrdquo

说明 每个产品最多 100个 topic

中移物联网有限公司 OneNET 开发文档中心

74 订阅

Device OneNet

Subscribe

Suback

更新设备订阅列表

图7-10 订阅

设备发起订阅请求(报文格式参考 629)

平台收到请求后更新 topic列表

平台给设备回复 SubAck (报文格式参考 6210)

注subscribe 的 request qos级别可以为 012

75 取消订阅

Device OneNet

UnSubscribe

UnSuback

更新设备订阅列表

图7-11取消订阅

中移物联网有限公司 OneNET 开发文档中心

设备发起取消订阅请求 (报文格式参考 6211)

平台收到请求后更新 topic 列表

平台给设备回复 UnSubAck (报文格式参考 6212)

76 推送设备 Topic

761 Publish 报文推送

Qos0设备使用 Qos 级别为 0的 Publish报文来进行推送

Device OneNet

Publish(Qos0)

Device

以Qos0 Publish到订阅设备

图7-12 Qos0推送

设备发起推送 topic请求(以 Qos0级别)

平台收到请求后将 topic以 Qos0级别推送到相关订阅设备(支持离线设

备推送)

平台不返回 PubAck或 PubRec 等报文

Qos1

设备使用 Qos级别为 1的 publish报文来推送 Topic

中移物联网有限公司 OneNET 开发文档中心

Device OneNet

Publish(Qos1)

PubAck

Device

以Qos1 Publish到订阅设备

设备回复平台 PubAck

图7-13 Qos1发布

设备发起推送 topic请求(以 Qos1级别)

平台收到请求后将 topic以 Qos1级别推送到相关订阅设备(支持离线设

备推送)

平台返回 PubAck 报文

Qos2

设备使用 Qos级别为 2的 publish报文来推送 Topic

中移物联网有限公司 OneNET 开发文档中心

Device OneNet

Publish(Qos2)

PubRec

Device

以Qos2 Publish到订阅设备

PubRec

PubRel

PubComp

PubRel

PubComp

图7-14 Qos2推送

设备发起推送 topic请求(以 Qos2级别)

平台收到请求后回复 PubRec报文

设备收到 PubRec后需回复 PubRel报文 (如超时不回复平台会断开与设

备的连接)

平台收到 PubRel 报文后回复 PubComp 给设备

平台在回复 PubComp 后会以 Qos2 级别推送到相关订阅设备(支持离线设

备推送)

设备需回复 PubRec报文 (如超时不回复平台会断开与设备的连接)

平台发送 PubRel 报文给设备

设备需回复 PubComp(发布完成)

Publish报文的格式如下

FixHeader

参考 623

中移物联网有限公司 OneNET 开发文档中心

VariableHeader

Field 名称 说明 格式

Field1 TopicName 填写设备订阅的 topic 2字节字串长度 + utf8

字串

Payload

Payload为设备自定义内容

762 HTTP 请求推送

Device OneNet

HTTP 请求

HTTP 响应

Device

Publish到订阅设备

图7-15 HTTP请求

设备以 HTTP 的方式发起推送 topic 请求

平台收到请求后将 topic推送到相关订阅设备 (目前只支持在线推送)

平台返回推送结果

请求及响应定义如下 HTTP方法 POST

URL httpapihecloudscommqtt

HTTP头部 api-keyxxxx-ffff-zzzzz必须 master key

URL参数 topic=ldquoXXXXXXrdquo必选在发送 mqtt协议的 topic 必填

HTTP body内容 用户自定义 Json 或二进制数据(小于 64K)

成功返回

errno 0

errorldquosuccrdquo

中移物联网有限公司 OneNET 开发文档中心

77 离线 Topic

推送 Topic只针对在线设备进行 topic 消息的推送离线设备不会收到订阅

的 topic 的消息离线 Topic则会将该消息推送给在线以及离线设备

1 如果设备在上线时设置了 clean session flag服务端会删除其订阅的

topic及相关的离线 topic消息

2 如果设备没有设置 clean session flag如果有与该设备相关的离线

topic消息则在鉴权成功后将离线消息推送给设备

3 遗嘱消息(will msg)只会推送给订阅了该 will topic的在线的设备离

线设备不会收到

4 离线消息的有效期默认为 2 天(暂不支持用户设定有效期)服务器只会

推送在 2天内的最近 10 条消息

78 数据点订阅

数据点订阅同一产品下的设备可以订阅其他设备的数据点订阅的 topic

格式为deviceid数据流名称即

被关注的设备在上传了该数据流名称的数据点后订阅了该 topic的其他设备都

会收到上传的数据点

1 AB设备的 deviceid分别为 92779278

2 A 设备订阅了名为92789527 的 topic(9278 为设备 B 的 id9527 为 B

设备上传的数据流名称)

3 B 设备上传了名为 9527的数据流(数据点为 11 1578hellip)

4 A 设备会收到多条(取决于设备 B 上传的数据点的个数)推送的 topic 名

为92789527 的 publish消息消息的 payload中则包含设备 B 上传的数据

注目前支持订阅的数据点的类型为 Type1~Type7(详见 721节)

中移物联网有限公司 OneNET 开发文档中心

第八章 常见问题 FAQ

用户在基于 OneNET 平台进行产品开发的过程中可能会遇到各种各样的问

题开发过程中遇到的问题一方面可以参考 OneNET 文档中心的文档或者本文

档前几个章节的内容另一方面用户可以参考本章节总结的常见问题希望这些

文档能对用户在开发过程中有一定的指导和帮助

本章将分三个小节对用户在开发产品过程中可能遇到的问题进行梳理分别

为终端设备接入 OneNET平台的常见问题API调用的常见问题和 OneNET平台

的能力

81 终端设备接入 OneNET 平台的常见问题

序号 问题描述 原因分析 解决方法

1

2

3

4

5

6

7

82 API 调用的常见问题

序号 问题描述 原因分析 解决方法

1

2

3

4

5

6

7

8

9

中移物联网有限公司 OneNET 开发文档中心

83 使用 OneNET平台遇到的常见问题

序号 问题描述 原因分析 解决方法

1

2

3

4

5

6

7

8

Page 16: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com

中移物联网有限公司 OneNET 开发文档中心

图3-7 平台侧设备状态显示

325 设备数据点上报

终端设备与平台成功建立连接后设备使用 publish 报文向平台上报数据点

平台收到数据点后保存到对应数据流下方便应用查阅数据点上报格式以及类型详见

721

图3-8 平台侧收到设备数据流显示

326 创建应用

用户可以利用上传的数据创建相关的应用发布直观的展示页面目前在平台应用孵化

器中提供了曲线图柱状图表盘物体位置图片和开关等应用

在产品详情页面点击ldquo应用管理rdquo进入应用管理主界面如下图

中移物联网有限公司 OneNET 开发文档中心

图3-9 应用管理模块

点击ldquo创建应用rdquo输入应用名称点击ldquo创建rdquo如下图

图3-10 新应用创建

保存成功后点击编辑按键进入应用编辑页面如下图

中移物联网有限公司 OneNET 开发文档中心

图3-11 应用编辑入口

图3-12 应用编辑界面

在应用编辑页面中使用左侧的控件进行应用编辑此例中我们选择表盘控件来显示

刚刚上传的数据点击表盘控件如下图所示

中移物联网有限公司 OneNET 开发文档中心

图3-13 表盘控件添加

在右侧的属性中选择设备以及数据源(及刚刚上传的数据流)如下图

图3-14 表盘控件数据流绑定

在确定好数据流之后可以看到表盘回显示成我们添加的数据的值其他的

刷新频率以及表盘显示样式读者可以自行更具需求加以修改

完成应用编辑之后点击右上角保存按钮退出应用编辑

在应用管理页面点击该应用即可查看编辑好的应用页面

中移物联网有限公司 OneNET 开发文档中心

图3-15 保存应用

图3-16 应用查看与分享

该应用可以通过共享ldquo发布链接rdquo的方式将该应用共享给他人

33 设备批量接入

单个设备可以通过平台的开发者中心添加设备的方式进行创建若用户有多

个设备直接与平台 TCP连接的终端通过手动添加需耗费大量时间人力OneNET

中移物联网有限公司 OneNET 开发文档中心

为大批量接入用户提供 3种批量创建设备的方案

331 平台设备批量复制

此种方式为选择某个设备作为复制的模板通过导入 EXCEL的方式进行设备

复制厂商可以在小批量测试时使用该功能

在设备列表中点击查看详情

图3-17 设备批量接入

在设备详情页面点击批量导入设备信息

中移物联网有限公司 OneNET 开发文档中心

图3-18 导入设备信息

点击批量复制

图3-19 批量复制

中移物联网有限公司 OneNET 开发文档中心

目前提供三种批量创建的方式 excel 导入的方式为主要接入方式选择

excel导入点击下载模板

图3-20 快速导入

图3-21 Excel导入

打开下载下来的 excel模板表中的 titledesctags等均为将要批量导

入的设备的数据其中的 title 和 auth_info 为必填选项title 为设备名

中移物联网有限公司 OneNET 开发文档中心

auth_info对应设备的鉴权信息

图3-22 Excel格式

填写 3个设备信息

图3-23 Excel内容

三个设备的 title和 auth_info都一样均为 20170808000012017080800002

2017080800003保存该表格点击ldquo点击上传rdquo上传保存好的 excel 文件

点击ldquo确定导入批量rdquo

中移物联网有限公司 OneNET 开发文档中心

图3-24 导入上传

图3-25 确认创建

可以看到在原设备目录下新增了 3个设备其名称分别为 2017080800001

20170808000022017080800003

中移物联网有限公司 OneNET 开发文档中心

图3-26 批量创建的设备

点击设备详情可以看到设备目录下各个设备的鉴权信息与表格中所填

写的内容一致

图3-27 设备ID及鉴权信息

至此完成了通过批量设备复制的方式完成设备批量创建的过程用户如果

要使用这个功能需要将自己终端的出厂序列号整理到这个 excel表中然后利

中移物联网有限公司 OneNET 开发文档中心

用上传表格的方式进行批量创建

332 应用平台调用新增设备 API

OneNET 提供了创建设备的 API接口

图3-28 新增设备API接口

其中的 auth_info 参数对应着设备的鉴权信息通过调用此 API 接口可以

实现在平台上新增设备的功能用户如果有自己的第三方应用平台进行设备管理

可以通过多次调用此接口的方式进行设备的批量创建在调用接口时需要确保每

次调用的 auth_info 参数对应着自己的每一个终端不同的出厂序列号

333 终端调用注册 API

API 实际是 HTTP 协议的通信协议终端也可以通过封装 HTTP 包发送注册

中移物联网有限公司 OneNET 开发文档中心

设备请求的方式调用 API

终端调用注册 API 创建设备并接入的流程如图 3-29所示

平台

TCP连接协议接入机

创建产品

发送连接报文

连接应答

数据应答

发送数据报文

生成连接报文

设备

发送下行命令 下发命令

解析下行命令

生成存储数据报文

解析连接应答

解析数据应答

必要流程

可选流程

存储到数据流 数据源 创建应用

心跳应答

发送心跳报文生成心跳报文

解析心跳应答

平台操作

设备操作

利用设备本身的sn和产品的设备注册码生成注册报文

TCP连接API服务器

发送注册报文

注册应答

解析设备ID

创建设备

设备开机

读取硬件中烧录的设备编号(sn)

图3-29 终端调用注册API接入流程

1) 创建产品

重要参数产品 ID注册码产品 APIKey(见附录一)

2) 生成并发送注册报文

每一个用户终端中都有厂商烧录的唯一出厂序列号(sn)终端上电

之后应该首先读取自己的 sn然后通过 1)中的注册码和 sn 一起组成注

册报文

注册报文格式如下例

POST httpapihecloudscomregister_deregister_code=6TM7OkhNsTjATvFx HTTP11

Host apihecloudscom

Content-Length 48

中移物联网有限公司 OneNET 开发文档中心

sn02136616511001titletestdevice0001

其中

6TM7OkhNsTjATvFx 为产品注册码

02136616511001 是本例中模拟的设备唯一编号

testdevice0001 是本例中模拟的设备名

若上传的数据格式以及参数鉴权均正确则平台会返回设备创建成功

返回设备 ID以及该设备对应的设备 api-key

HTTP11 200 OK

Date Wed 09 Aug 2017 064821 GMT

Content-Type applicationjson

Content-Length 95

Connection keep-alive

Server Apache-Coyote11

Pragma no-cache

errno0datadevice_id11142371keyq9Mw0zqiAPjTwqfyCk2mWrUi8=errorsucc

3) 在步骤 2)完成之后平台上的设备就已经成功创建了终端需要

重新 TCP连接到对应协议的服务器上完成设备连接(与设备进行映射)以

及上传数据的操作

34 设备 ID 与产品序列号

通过 OneNET构建的物联网系统中有两套比较重要的编码设备 ID与产品序列号

(SN)其中

产品序列号是由厂商指定的在厂商的产品范围内是保持唯一的在出厂前烧写到每

一个终端中通常包含在与平台通信的数据中并以条形码的方式贴在产品的包装上用

于从用户的角度区分每一个独立的终端

设备 ID是在平台创建设备时由 OneNET分配的平台范围内唯一的编号应用于第三

方平台调用 OneNET API时使用

在创建设备时OneNET平台需要用户以设备 sn为参数进行设备创建成功之后平

台会分配一个设备 ID这样 OneNET内部就有了一个 sn-设备 ID的映射关系

终端登陆使用的鉴权信息是出厂时烧写好的 sn鉴权通过之后平台可以将该终端

上传是数据放到对应的设备中

上层应用通过创建设备 API或者查询设备 API建立 sn-设备 ID映射表在需要操作

某一设备时首先可以获取的是终端的 sn号(因为对用户是可见的)通过映射表获取设

中移物联网有限公司 OneNET 开发文档中心

备 ID然后再通过 API访问 OneNET平台上的对应设备

两套编码在物联网系统中的应用位置如下图所示

物联网应用

OneNET

终端

(烧写sn)

HTTP API 以设备ID为参数进行API访问

接入协议以sn为鉴权参数进行设备连接

设备

设备名

设备ID

设备sn

设备标签

sn 设备ID

snmdash设备ID映射表

中移物联网有限公司 OneNET 开发文档中心

第四章 第三方应用开发

第三方应用与 OneNET 平台的业务逻辑关系如图 4-1 所示第三方应用与

OneNET平台之间通过 HTTPS请求应答的方式实现数据交互OneNET 平台为第三

方应用提供封装好的 API 接口应用平台通过调用这些 API 接口完成对 OneNET

平台的读写执行以及设备管理请求然后 OneNET 平台会将相应的指令请求发送

到终端设备OneNET 平台收到终端设备响应的数据及设备信息后会将数据及

设备信息推送到应用平台完成应答

下面将分别介绍第三方应用接入 OneNET 平台的步骤OneNET平台提供的数

据推送功能以及 OneNET 平台为第三方应用封装好的 API接口

图4-1 第三方应用与OneNET平台的逻辑关系

41 第三方应用接入 OneNET 平台

第三方应用与 OneNET平台实现数据交互的前提是已经建立连接第三方应

用接入 OneNET平台的开发流程如图 4-2所示包括三个步骤

(1) 在 OneNET 平台创建了设备该设备有对应的真实设备且能正常上报

数据

(2) 用户已经开发并部署了 OneNET平台验证接入的程序

(3) 在 OneNET 平台正确配置了第三方应用数据接收的地址(URL)

Token以及其他参数

中移物联网有限公司 OneNET 开发文档中心

在确保上述第(1)步已经实现的基础上下面将分别讲述第(2)步和第

(3)步的实现过程

图4-2 数据推送的开发流程

412 第三方应用平台接入验证程序

第三方应用平台接入验证程序工作流程如下所述当 OneNET 平台完成对第

三方开发平台的配置后会向第三方开发平台发起 URLampToken验证接入验证程

序对平台发送的验证参数进行验证验证通过后第三方开发平台会向 OneNET

平台返回验证消息当 OneNET 平台收到验证消息后说明第三方开发平台与

OneNET平台已建立连接

目前 OneNET平台为第三方应用平台提供接入验证程序的 SDK有 Javaphp

Nodejs和 C四个版本

SDK 下载地址httpsopeniot10086cndocart432html118 -ldquo数

据推送rdquo

413 OneNET 平台配置第三方应用平台

在 OneNET平台对第三方应用平台的配置界面如图 4-3所示

URL第三方开发平台的地址

Token可以自定义用于第三方开发平台接入平台握手验证

消息加解密方式有明文模式和安全模式当启用安全模式后平台端需要

用户自定义 AESKey 或者由平台随机生成在应用程序中使用该 AESKey 解密消

中移物联网有限公司 OneNET 开发文档中心

推送时间限制(秒)和推送数据限制(个)设置ldquo推送时间限制rdquoldquo推送数

据限制rdquo可以实现批量推送数据减少服务器压力当满足ldquo推送时间限制rdquo和

ldquo推送数据限制rdquo要求后OneNET 将给第三方推送数据如果没有设置ldquo推送

时间限制rdquo和ldquo推送数据限制rdquo将默认数据实时推送

图4-3 第三方开发平台的配置界面

当用户成功在 OneNET 平台配置了第三方开发平台服务器地址后点击ldquo提

交rdquo按钮后OneNET 平台会向第三方应用平台发起 URLampToken 验证请求验证

通过且收到第三方返回的验证消息后则第三方应用平台与 OneNET 平台已建立

连接之后OneNET 平台在收到设备数据时会将设备数据推送到已配置的第三

方应用平台

用户数据接收服务程序接收到 OneNET平台发送的 ldquoURLampTokenrdquo验证请求

请求的格式形如httpipporttestmsg=xxxampnonce=xxxampsignature=xxx

蓝色字体部分为用户在 OneNET平台配置的 URL常规的验证流程如下

(1)在请求中获取参数ldquononcerdquoldquomsgrdquo的值将ldquotokenrdquo(此为页面

配置参数 token的值)ldquononcerdquoldquomsgrdquo的值计算 MD5(token+nonce+msg)

加密值并且编码为 Base64字符串值

中移物联网有限公司 OneNET 开发文档中心

(2)将上一步中 Base64字符串值通过 URL Decode 计算后的值与请求参数

ldquosignaturerdquo的值进行对比如果相等则表示 token验证成功

(3)如果 token 验证成功向 OneNET 平台返回ldquomsgrdquo参数值否则返回

其他值

说明如果用户不想验证 Token 的有效性可以忽略以上步骤并直接向

OneNET平台返回ldquomsgrdquo参数值

42 OneNET 平台数据推送

平台以 HTTPS POST 请求形式向第三方应用平台注册地址推送数据推送数

据相关信息以 JSON 串的形式置于 HTTPS请求中的 body部分

第三方应用平台在接收数据时会接收到数据的明文消息或者密文消息

明文消息中以ldquotyperdquo的数值区分不同的消息而密文消息与明文消息的区别

是ldquomsgrdquo部分经过了加密处理下面将分别对明文消息密文消息以及消息相

关字段和密文的加密算法进行说明

421 明文消息

明文消息有两种消息类型分别为数据点消息和设备上下线消息而数据点

消息又分为单条数据点消息和数据点消息批量形式数据点消息批量形式中的不

同数据点是以不同时间戳区分的

(1)数据点消息(type=1)

msg

type 1

dev_id 2016617

ds_id datastream_id

at 1466133706841

value 42

msg_signature message signature

nonce abcdefgh

(2)数据点消息批量形式(type=1)

msg [

type 1

dev_id 2016617

ds_id datastream_id

中移物联网有限公司 OneNET 开发文档中心

at 1466133706841

value 42

type 1

dev_id 2016617

ds_id datastream_id

at 1466133706842

value43

]

msg_signature message signature

nonce abcdefgh

(3)设备上下线消息(type=2)

msg

type 2

dev_id 2016617

status 0

login_type 1

at 1466133706841

msg_signature message signature

nonce abcdefgh

422 密文消息

密文消息中的ldquoenc_msgrdquo是由明文消息中的ldquomsgrdquo采用 AES 加密算法而

enc_msgxxxx

msg_signature

message signature

nonceabcdefgh

423 消息相关字段说明

表4-1 消息相关字段说明

字段 字段说明

type 标识数据类型当前版本范围[15]

dev_id 设备 ID

ds_id 公 开 协 议 中 的 数 据 流 ID 其 格 式 为

objectID_instanceID_resourceID

at 平台时间戳单位 ms

value 具体数据部分为设备上传至平台或触发的相关

数据

中移物联网有限公司 OneNET 开发文档中心

status 设备上下线标识

0-下线 1-上线

login_type

设备登陆协议类型

1EDP 2nwx 3JTEXT 5JT808 6

MODBUS 7MQTT 8gr2010NB-IoT

cmd_type

命令响应的类型

1设备收到 cmd的 ACK 响应信息 2设备收到

cmd的 Confirm响应信息

cmd_id 命令 ID

msg_signatur

e 消息摘要

nonce 用于计算消息摘要的随机串

enc_msg 加密密文消息体对明文 JSON串(msg字段)的

加密

424 加密算法详述

平台基于 AES算法提供加解密技术具体阐述如下

EncodingAESKey 即消息加解密 Key 的 BASE64编码形式长度固定为 43

个字符从 a-zA-Z0-9共 62个字符中选取由服务开启时填写后

也可申请修改

AES密钥计算为 AESKey=Base64_Decode(EncodingAESKey + ldquo=rdquo)

EncodingAESKey 尾部填充一个字符的ldquo=rdquo 用 Base64_Decode 生成 32

个字节的 AESKey

AES采用 CBC 模式秘钥长度为 32 个字节(256位)数据采用

PKCS7填充 初始化 iv向量取秘钥前 16字节 PKCS7K为秘钥字

节数(采用 32)buf为待加密的内容N为其字节数Buf 需要被填

充为 K的整数倍在 buf的尾部填充(K-NK)个字节每个字节的内容

是(K- NK)具体详见toolsietforghtmlrfc2315

BASE64采用 MIME格式字符包括大小写字母各 26个加上 10个数

字和加号ldquo+rdquo斜杠ldquordquo一共 64个字符等号ldquo=rdquo用作后缀填

出于安全考虑平台网站提供了修改 EncodingAESKey的功能(在

EncodingAESKey 可能泄漏时进行修改对应上第三方平台申请时填写

的接收消息的加密对称密钥)所以建议保存当前的和上一次的

中移物联网有限公司 OneNET 开发文档中心

EncodingAESKey若当前 EncodingAESKey 生成的 AESKey解密失败则

尝试用上一次的 AESKey的解密

平台的加密消息部分为 enc_msg= Base64_Encode( AES_Encrypt

[random(16B)+msg_len(4B)+msg] )即以 16字节随机字节串拼接 4字

节表示消息体长度的字节串(此处 4 字节长度表示为网络字节序)再加

上消息本身的字节串作为 AES加密的明文再以 AES算法对明文进行加

密生成密文最后对密文进行 BASE64 的编码操作生成加密消息体

对加密消息体的解密流程为1)首先进行加密消息体的 BASE64 解码操作

aes_msg=Base64_Decode(enc_msg)2)对获取的解码内容以 AES 算法进行解密

操作获取明文部分plain_msg=AES_Decrypt(aes_msg)解密中使用的秘钥由

EncodingAESKey 计算得来使用的初始化 iv 向量为计算出的 aes 秘钥的前 16

字节3)去掉 plain_msg 的前 16 字节再以前 4 字节取出消息体长度根据消

息体长度获取真实的消息部分(推荐以消息体长度获取真实消息以兼容

plain_msg 未来可能出现的结构变更)表示加密传输的数据后两字段与明文

传输一致

43 API 接口

第三方开发平台应用层通过 Rsetful API 的方式和 OneNET平台进行交互对

接实现命令的下发数据的读写以及相关业务的交互

针对 MQTT 协议目前主要开发了以下 API 用来实现第三方开发平台向

OneNET平台请求读写执行以及设备管理请求具体见下表 4-2下面分别对每一

种 API进行说明

表4-2 API功能说明

API 类别 操作对象 API名称

需要终端响应 只需平台响应

设备

注册

更新设备注册属性

新增

更新

精确查询单个设备

中移物联网有限公司 OneNET 开发文档中心

模糊查询设备

批量查询设备状态

删除

数据流

新增

更新

查询单个数据流

查询多个数据流

删除

数据点

新增

查询

二进制数

新增

查询

触发器

新增

更新

查询单个触发器

模糊查询触发器

删除

触发数据内容

命令

发送命令

查询命令状态

查询命令相应

查询设备历史命令

视频能力 获取播放地址

APIKEY

新增

更新

查看

删除

消息订阅

按 Topic发送命令

查询订阅指定 Topic设备的列表

查询设备订阅的 Topic列表

删除产品的 Topic

查询产品的 Topic

中移物联网有限公司 OneNET 开发文档中心

432 设备

4321 注册

表4-3 设备注册

HTTP方法 POST

URL apihecloudscomregister_de

URL参数 register_code=6TM1OkhNsTjATvFx 设备注册码(必填)

HTTP内容

(示例)

sn 2015031401421 设备唯一标识 string类型最长 512字符

mac C89346DA4373 设备唯一 mac标识最长 32字符

title myedpdevice 设备名(可选) 最长 32个字符

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

keyQ1VdWoEvdkCye=d1=HcCSP6LvCw= 新设备 apikey

device_id 325018 设备 ID

说明

1 响应消息中 errno 表示错误码error 表示错误原因如果创建设备失

败则没有 data字段

2 snmac一定要必填其中一个而且只可以传一个用于鉴权就是设备

新增中的 auth_info

3 此接口根据产品设置的不同默认 allow_dup=true可以生成新设备及

key或获取原有设备及 key见下表

表4-4 对应表

产品允许重复 sn 在产品中已存在 sn 在产品中不存在

allow_dup=true 是 sn 对应的设备 id 和 key 新的设备 id 和 key

allow_dup=false 否 报错 新的设备 id 和 key

中移物联网有限公司 OneNET 开发文档中心

此接口返回的新设备默认设备名均为auto_register均为私有设

备设备协议与产品协议相同

4322 更新设备注册属性

表4-5 更新设备注册属性

HTTP方法 PUT

URL apihecloudscomregister_attr

HTTP头部 api-key xxxxddddsssaaa 必须为 masterkey

HTTP内容

(示例)

allow_dup true|false是否允许重复提交相同的设备 sn 默认 true

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

默认 allow_dup 为 true主要用于设备注册码创建设备属性限制

4323 新增

表4-6 新增设备注册属性

HTTP方法 POST

URL apihecloudscomdevices

HTTP头部 api-key xxxxddddsssaaa 必须为 masterkey

HTTP内容

(示例)

title mydevice 设备名

desc some description 设备描述(可选)

tags [chinamobile] 设备标签(可选可为一个或多个)

protocolMQTT 选择一种接入协议(可选默认为 HTTP)

location lon 106 lat 29 ele 370设备位置纬度

经度 高度(可选)

private true| false 设备私密性(可选默认为 ture)

auth_info 201503041a5829151 MQTT设备设备唯一编号

other version 100 manu china mobile 其他信息(可

选JSON格式可自定义)

HTTP响应响

应消息内容

(实例)

errno 0

error succ

data

中移物联网有限公司 OneNET 开发文档中心

device_id233444 平台分配的设备 ID

4324 更新

表4-7 更新

HTTP方法 PUT

URL apihecloudscomdevicesdevice_id

HTTP头部 api-key xxxxddddsssaaa masterkey或设备 apikey

HTTP内容

(示例)

title mydevice 设备名(可选)

desc some description 设备描述(可选)

tags [chinamobile] 设备标签(可选)

protocolMQTT 选择一种接入协议(可选)

location lon106 lat 29 ele 370设备位置经度

纬度 高度(可选)

private true| false 设备私密性(可选)

auth_info201503041a5829151 MQTT设备设备唯一编号(可选)

other version 100 manufacturer china mobile 其

他信息(可选)

HTTP响应响

应消息内容

(示例)

errno 0

error succ

中移物联网有限公司 OneNET 开发文档中心

4325 精确查询单个设备

表4-8 精确查询单个设备

HTTP方法 GET

URL apihecloudscomdevicesdevice_id

HTTP头部 api-key xxxxddddsssaaa masterkey 或设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

iddevice_id

tags [chinamobile]

onlinetrue|false

protocolMQTT

titlemy device1

descsome description

create_time2015-09-16 102222

privatetrue|false

locationele370lat17609lon17703

auth_infohellip

otherversion100manufacturerchina mobile

keys[titledevice-auto-keykey2JO3B12O1]

数据流

datastreams[

create_time 2014-10-23 202222

iddatastream_id1

unitcelsius

unit_symbolC

uuid 231a5aa9-9de4-5f2e-9e0f-015181c98429

]

4326 模糊查询设备

表4-9 模糊查询设备

HTTP方法 GET

URL apihecloudscomdevices

中移物联网有限公司 OneNET 开发文档中心

URL 参数

key_words=my 匹配关键字(可选从 id和 title字段中左匹配)

auth_info=203x1 鉴权信息(可选对应注册时的 sn参数唯一设

备编号)

tag=mobile 标签(可选)

online=true| false 在线状态(可选)

private=true| false 私密性(可选)

page=1 指定页码最大页数为 10000(可选)

per_page=30 指定每页输出设备个数默认 30最多 100(可选)

device_id=235122 指定设备 ID多个用逗号分隔最多 100个(可

选)

begin=2016-06-20 起始时间包括当天(可选)

end=2016-06-20 结束时间包括当天(可选)

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

total_count1

per_page30

page1

devices

[

id3497307

titlemy device1

desc device desc

privatetrue

protocolMQTT

onlinefalse

locationlon10655231191544001lat29535451246673

create_time2013-02-11 122233

auth_infoSYSz=8QY3r7aTQ48UKfqPnB=PybYRo=

]

4327 批量查询设备最新数据

表4-10 批量查询设备最新数据

HTTP方法 GET

中移物联网有限公司 OneNET 开发文档中心

URL apihecloudscomdevicesdatapoints

URL参数 devIds=1221122331123 设备 id用逗号隔开限制 1000 个设备

HTTP头部 api-key xxxxddddsssaaa masterkey 或设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

error ldquosuccrdquo

data

devices [

id 12323 设备 id

title daf设备名

datastreams

[

id temperature数据流名称

at 2017-02-12 102222数据流更新时间

value 12数据流最新数据

hellip

helliphellip

]

hellip

hellip

]

4328 删除

表4-11 删除设备

HTTP方法 DELETE

URL apihecloudscomdevicesdevice_id

HTTP头部 api-key xxxxddddsssaaa 可为设备级别的 Key

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

中移物联网有限公司 OneNET 开发文档中心

说明删除设备会删除该设备下所有数据流和数据点删除设备动作是异步

的系统会在后续逐步删除该设备下的数据流和数据点

433 数据流

4331 新增

表4-12 新增数据流

HTTP方法 POST

URL apihecloudscomdevicesdevice_iddatastreams

HTTP头部 api-key xxxxddddsssaaa masterkey 或设备 apikey

HTTP内容

(示例)

idtemperature 数据流名称 示例温度

tags[Tag1Tag2] 数据流标签(可选可以为一个或多个)

unitcelsius 单位(可选)

unit_symbolC 单位符号(可选)

HTTP响应响

应消息内容

(示例)

errno 0

data

ds_uuid 9e6bcac9-2c6f-59d5-adae-3955df2e7bce平台分配

数据流 UUID

error succ

4332 更新

表4-13 更新数据流属性

HTTP方法 PUT

URL apihecloudscomdevicesdevice_iddatastreamsdatastream_id

示例apihecloudscomdevices421240datastreamstemperature

HTTP头部 api-key xxxxddddsssaaa masterkey 或设备 apikey

HTTP内容

(示例)

tags[Tag1Tag2] 数据流标签(可选)

unitcelsius 单位(可选)

unit_symbolC 单位符号(可选)

HTTP响应响

应消息内容

(示例)

errno 0

error succ

中移物联网有限公司 OneNET 开发文档中心

4333 查询单个数据流

表4-14 查询单个数据流

HTTP方法 GET

URL apihecloudscomdevicesdevice_iddatastreams

URL参数 datastreams_ids = 查看的 datastream的 id

HTTP头部 api-key xxxxddddsssaaa masterkey 或该设备的设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

data [

update_at 2018-06-29 112938 数据流最后更新时

id 湿度 数据流名称

create_time 2018-06-28 170548数据流创建时间

current_value 53845013最新数据点

]

error succ

4334 查询多个数据流

表4-15 查询多个数据流

HTTP方法 GET

URL apihecloudscomdevicesdevice_iddatastreams

URL 参数

datastream_ids= 查看的 datastream的 id多个 id之间用英文逗号

分开(参数缺省时为查询所有数据流)

示例

apionenetcomdevices1234datastreamsdatastream_ids=tempgps

表示查看 temp和 gps两个数据流的信息

HTTP头部 api-key xxxxddddsssaaa masterkey 或者 该设备的设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data 数据流信息

[

idtemperature 数据流名称设备范围内唯一

tags[Tag1Tag2] 数据流标签

unitcelsius 单位

unit_symbolC单位符号

create_timexxxx-xx-xx 102222 创建时间

中移物联网有限公司 OneNET 开发文档中心

current_valuehellip该数据流下数据点最新值

update_atxx-xx-xx该数据流下数据点最新上传时间

]

[

idhumi 数据流名称设备范围内唯一

tags[Tag1Tag2]

unit_symbol

create_timexxxx-xx-xx 102222

current_valuehellip

update_atxx-xx-xx

]

[]

4335 删除

表4-16 删除数据流

HTTP方法 DELETE

URL apihecloudscomdevicesdevice_iddatastreamsdatastream_id

URL参数 无

HTTP头部 api-key xxxxddddsssaaa masterkey 或者设备 key

HTTP响应响

应消息内容

(示例)

errno 0

error succ

434 数据点

4341 新增

中移物联网有限公司 OneNET 开发文档中心

表4-17 新增数据点

HTTP方法 POST

URL apihecloudscomdevicesdevice_iddatapoints

URL参数 type=3 上传数据类型(可选默认为完整 JSON型见 HTTP内容示

例)

HTTP头部 api-key xxxxddddsssaaa masterkey 或者 设备 apikey

HTTP内容

(示例)

datastreams

[

id temperature 数据流名称或数据流模板名称

datapoints [

at 2013-04-22T003543 上传数据点时间可选如

果为空则设备云会取当前时间如果存在其格式必须为 YYYY-MM-

DDThhmmss的形式(例如2015-03-22T223112)

value 42 上传数据点值

at 2013-04-22T005543

value 84 上传数据点值

]

id key 数据流名称或数据流模板名称

datapoints [

at 2013-04-22T003543上传数据点时间可选

value hellip上传数据点值

at 2013-04-22T003543

value hellip上传数据点值

]

hellip

]

中移物联网有限公司 OneNET 开发文档中心

HTTP 响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

1 可以一次性向设备云上传多个数据流每个数据流中可以包括多个数据

点示例程序表示向设备云上数据流 temperature 和数据流 key上传数据其中

temperature数据流有两个数据点key数据流也有两个数据点

2 如果某个数据流不存在则在增加数据点时设备云会自动创建一个新

的数据流注意新数据流的 datastream id 不可为空

3 数据点表示在某个时刻该数据流的值其 at表示时间为可选字段如

果为空则设备云会取当前时间如果存在其格式必须为YYYY-MM-DDThhmmss

的形式(例如2015-03-22T223112)

4 数据点中的 value表示具体的值其值为 JSON对象可以为整型浮点

型字符串多种类型如果 value部分用双引号括起来则其在设备云存储为字

符串如果不用双引号括起来则其表示数值字符编码现在只支持 UTF-8

5 数据点对应的时间是数据点的标识的一部分相同时间的两个数据点

设备云会同时对这两个相同时间的数据点进行保存不会出现覆盖另一个数据点

的情况一般如果 at 部分取空设备云会取系统时间精度为毫秒如果在一

条命令中某一个数据流包含多个数据点都没有 at 字段设备云将会对所有数据

点进行保存

6 新增数据点支持如下简写方式在请求的 URL中增加 type字段指示所

使用的格式类型目前 type支持 345三种情况

URLapihecloudscomdevices2214570datapointstype=3

示例temperature225humidity952

表示在数据流 temperature中增加一个数据点 225在 humidity 中增加一

个数据点 952

URLapihecloudscomdevices2214570datapointstype=4

示例temperature2015-03-22T223112225

表示在数据流 temperature中加一个数据点在 2015年 3月 22 日 22点 31

中移物联网有限公司 OneNET 开发文档中心

分 12秒的值为 225

URLapihecloudscomdevices2214570datapointstype=5

示例temperature2015-03-22T223112225pm2589

表示在数据流 temperature中加一个数据点即 2015年 3月 22 日 22点 31

分 12秒的值为 225在数据流 pm25中添加一个数据点即当前时间的值为 89

4342 查询

表4-18 查询数据点

HTTP方法 GET

URL apihecloudscomdevicesdevice_iddatapoints

URL 参数

datastream_id=abc 查询的数据流多个数据流之间用逗号分隔

(可选)

start=2015-01-10T080035 提取数据点的开始时间(可选)

end=2015-01-10T080035 提取数据点的结束时间(可选)

duration=3600 查询时间区间(可选单位为秒)

start+duration按时间顺序返回从 start开始一段时间内的数据点

end+duration按时间倒序返回从 end回溯一段时间内的数据点

limit=100 限定本次请求最多返回的数据点数0ltnlt=6000(可选

默认 1440)

cursor= 指定本次请求继续从 cursor位置开始提取数据(可选)

sort=DESC | ASC 值为 DESC|ASC时间排序方式DESC倒序ASC升

序默认升序

ltnlt=6000(可选默认 1440)

HTTP头部 api-key xxxxddddsssaaa masterkey 或者 该设备的设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

cursor70921_3771908_1472355096

datastreams[

idtemperature数据流名称或数据流模板名称

datapoints[

at xxxx-xx-xx 102222value42数据点上传时间和

at xxxx-xx-xx 102222value84

]

中移物联网有限公司 OneNET 开发文档中心

idkey 数据流名称或数据流模板名称

datapoints[

at xxxx-xx-xx 102222valuehellip

atxxxx-xx-xx 102222valuehellip

]

hellip

]

1 若不携带任何参数平台返回本设备所存在的所有数据流中的最新数据

(这一种情况下查询时出现时延较大的性能问题建议在 URL 参数中加上

newadd参数并将其值赋为 true如 newadd=true)

2 若不携带数据流 id参数携带 limit 参数时会返回该设备每个数据流

最多 limit 条数据

3 若要查看某一条数据流数据需在上述 URL中增加参数 datastream_id

4

apihecloudscomdevices564280datapointsdatastream_id=tempamplimit

=10会返回数据流temp中最近的 10个数据点

5 要查看某一条数据流在某个时间范围内的数据可以在增加 start和 end

参数

示例

apihecloudscomdevices564280datapointsdatastream_id=temper

atureampstart=2013-05-12T171233ampend=2013-06-12T172233 表示查询本设

备对应的数据流在 2013 年 5 月 12 日 17 点 12 分 33 秒到 17 点 22 分 33 秒的数

据点注意如果 start 参数存在end参数不存在表示取 start后的所有数据

如果 start 不存在end 存在设备云会忽略 end参数注意日期时间格式格

式必须为示例中的格式YYYY-MM-DDThhmmss例如2013-05-12T171233

日期和时间之间用大写字母 T 分隔start 和 end 之间的时间间隔最大为 1 年

超过一年会忽略

如果指定了 start 参数则可能返回的数据点的数目会很多此时默认会返

回最多 100 个数据点可以使用 limit 参数设定返回多少个数据点最大为

6000个数据点当实际的数据点数目多于 limit 限定的数目时返回的 json串

中移物联网有限公司 OneNET 开发文档中心

中会有一个 cursor 字段下一次请求的命令行中可以携带此 cursor 字段表示接

着遍历本数据流此 cursor字段标识上次取出数据点后下一个数据点的位置

435 二进制数据

4351 新增

将二进制数据将作为数据点保存到设备下的某个数据流中设备云返回该二

进制数据的索引号

表4-19 新增二进制数据

HTTP方法 POST

URL apihecloudscombindata

URL参数 device_id=421590 数据所属设备(必选)

datastream_id=bin 该数据所属已经存在的数据流(必选)

HTTP头部 api-key xxxxddddsssaaa masterkey 或者该设备的设备 key

HTTP 内 容

(示例)

普通二进制数据文件图像等

(最大限制为 800上传时间间隔需大于 1ms)

HTTP响应响

应消息内容

(示例)

errno 0

error succ

data

index3491506_1475204886914_bin 二进制数据索引号

4352 查询

表4-20 查询二进制数据

HTTP方法 GET

URL apihecloudscombindataindex

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

普通二进制数据文件图像等二进制形式数据

436 触发器

4361 新增

表4-21 新增触发器

HTTP方法 POST

中移物联网有限公司 OneNET 开发文档中心

URL apihecloudscomtriggers

HTTP头部 api-key xxxxddddsssaaa 必须为 masterkey

HTTP内容

(示例)

titlewen du jian kong 设备名(可选)

ds_idgps 数据流名称(id)(可选)

dev_ids[10272345615523] 设备 ID(可选)

ds_uuids[ 数据流 uuid(可选)

9ad09uac-7446-512f-b07c-90jdnzj8120ad

4599436e-7146-5349-b07c-79fa0919cs62

]

urlxxbbcom

typegt | gt= | lt | lt= | == | inout | in | out |change | frozen |

live

threshold100 阙值根据 type不同见以下说明

1) type 为gt|gt=|lt|lt=|==时threshold必须为数值

2) type为 inout时threshold 设置为lolmt40 uplmt52 表示

数据流的值首次进入或离开闭区间[4052]时触发

3) type为 change时threshold 参数不用传递当上传的值有改变时触发

告警

4) type为 frozen时threshold 为数值指定距离最后一次数据上报多少

秒内未上报数据触发告警同时被监控对象进入 frozen状态

5) type 为 live 时threshold 为数值指定距离最后一次数据上报多少秒

后上报数据触发告警

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

tirgger_id233444 触发器 ID

说明

1触发器的含义是当指定范围内的数据点满足触发条件的要求时会向

url参数指定的地址发送 post请求

2触发器有三种工作触发模式

1)在请求参数中单独指定了 ds_id不包括其他参数那么当前项目下

中移物联网有限公司 OneNET 开发文档中心

所有设备的数据流中数据流名称符合 ds_id 的数据都会进入触发判断逻辑

2)在请求参数中单独指定了 ds_uuids 数组那么只有这些指定的数据

流会进入触发判断逻辑

3)在请求参数中指定了 ds_id 和 dev_ids那么只有这些指定的设备的

数据流会进入触发判断逻辑

4362 更新

表4-22 更新触发器属性

HTTP方法 PUT

URL apihecloudscomtriggerstirgger_id

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP内容

(示例)

titlewen du jian kong

ds_uuids[

9ad09uac-7446-512f-b07c-90jdnzj8120ad

4599436e-7146-5349-b07c-79fa0919cs62

]

urlxxbbcom

typegt | gt= | lt | lt= | == | inout | in | out | exp | change |

frozen | live

threshold100

注若要修改 type需要对应设置 threshold

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

4363 查询单个触发器

表4-23 查询单个触发器

HTTP方法 GET

URL apihecloudscomtriggerstirgger_id

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

idtrigger_id1

中移物联网有限公司 OneNET 开发文档中心

titlewen du jian kong

ds_uuids[

datastream1_uuidrdquo

datastream2_uuidrdquo

datastream3_uuidrdquo

]

urlxxbbcom

typegt|gt=|lt|lt=|==|in|out|exp|change|frozen|live

threshold100

invalidtrue 触发器是否已失效

create_timexx-xx-xx 102222

4364 模糊查询触发器

表4-24 模糊查询触发器

HTTP方法 GET

URL apihecloudscomtriggers

URL 参数

title=name 指定触发器名称

page=1 指定页码可选

per_page=10 指定每页输出个数可选默认 10最多 100

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

total_count600

per_page30

page1

triggers[

idtrigger_id1

titlewen du jian kong

ds_uuids

[datastream1_uuidrdquo datastream2_uuidrdquo]

urlxxbbcom

typegt|gt=|lt|lt=|==|in|out|exp|change|frozen|live

threshold100

invalidtrue 触发器是否已失效

create_timeXXXXXXXX

中移物联网有限公司 OneNET 开发文档中心

]

说明触发器失效是指触发器所依赖的数据流或者设备被删除了此时触发

器永远不会有效触发事件

4365 删除

表4-25 删除触发器

HTTP方法 DELETE

URL apihecloudscomtriggerstirgger_id

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno 0

error succ

4366 触发数据内容

触发数据是指当 OneNET 设备云判断某个触发器的触发条件满足时会通过

POST方式向外抛出的 URL请求在 HTTP的 POST消息体中会携带如下格式的 JSON

字符串

表4-26 触发器内容

数据内容

(示例)

trigger

id1

threshold90

typegt

current_data[

dev_id2656

ds_idgps

ds_uuidFWEF-ZFW-ZFW-ZFWW

at2009-09-07T121602001403Z

value100

dev_id2656

ds_idtemper

中移物联网有限公司 OneNET 开发文档中心

ds_uuidFEWEF-ZFWFWW-WFWW-FWEFFWW

at2009-09-07T121602001403Z

value882

]

437 命令

命令是指应用发送命令数据给 OneNET设备云再由 OneNET设备云转发给终

端设备终端设备收到命令后可以向设备云反馈响应的一种工作机制命令下发

后应用可以通过 API查询命令状态和提取命令的响应数据

命令的执行步骤如下

1应用通过 API 向设备云发送命令数据

2设备云生成该命令的 uuid作为该命令的唯一标识并向应用返回同时向

终端设备转发命令数据

3 终端设备收到命令数据后执行命令数据可以生成响应也可以不响应

4设备云跟踪记录命令的响应如果设备有响应就关联命令 uuid和响应

结果

5应用通过 API 向设备云提取命令执行结果(API 请求中携带命令 uuid 标

识)

特别说明

命令下发到终端设备后如果终端设备 10 秒内未收到响应则此命令的状

态将被设置为超时应用通过 API 查询命令状态时会反馈超时超过 10 秒后

收到的响应会被丢弃

终端设备针对同一条命令回复多条命令响应只有在未超时时间内收到的最

后一条是有效响应前面的响应包将会被覆盖因此终端设备应该对每个命令只

有一个响应包

4371 发送命令

表4-27 发送命令

HTTP方法 POST

URL apihecloudscomcmds

URL 参数 device_id=415120 接收该数据的设备 ID(必选)

中移物联网有限公司 OneNET 开发文档中心

qos=0 | 1 是否需要响应默认为 0

0不需要响应即最多发送一次不关心设备是否响应

1需要响应如果设备收到命令后没有响应则会在下一次设备登陆

时若命令在有效期内(有效期定义参见 timeout参数)则会继续发送

对响应时间无限制多次响应以最后一次为准

本参数仅当 type=0时有效

timeout=300 命令有效时间默认 0

0在线命令若设备在线下发给设备若设备离线直接丢弃

gt0 离线命令若设备在线下发给设备若设备离线在当前时间

加 timeout时间内为有效期有效期内若设备上线则下发给设备单

位秒有效围0~2678400

本参数仅当 type=0时有效

type=0 | 1 默认 00发送 CMD_REQ包1发送 PUSH_DATA包

HTTP头部 api-key xxxxddddsssaaa masterkey或者设备 apikey

HTTP内容 用户自定义数据jsonstring二进制数据(小于 64K)

HTTP响应响

应消息内容

(示例)

errno 0

error succ

data

cmd_uuid2302-312-FWs 命令 id

4372 查询命令状态

表4-28 查询命令状态

HTTP方法 GET

URL apihecloudscomcmdscmd_uuid

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno 0

error succ

data

status1

0设备不在线|Device not online

1命令已创建| Command Created

2命令已发往设备| Command Sent

3命令发往设备失败| Send Command Failed

4设备正常响应| Command Response Received

5命令执行超时| Command Response Timeout

6设备响应消息过长 | Command Response Too Large

descldquosendingrdquo

中移物联网有限公司 OneNET 开发文档中心

4373 查询命令响应

表4-29 查询命令响应

HTTP方法 GET

URL apihecloudscomcmdscmd_uuidresp

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP 响应响

应消息内容

用户设备返回的响应内容

4374 查询设备历史命令

表4-30 查询设备历史命令

HTTP方法 GET

URL apihecloudscomcmdshistoryltdevice_idgtltdevice_idgt

URL 参数

start=2015-01-10T080035 查询的开始时间(可选)

end=2015-01-10T080535 查询的结束时间(可选)

page=1 指定页码最大页数为 10000(可选)

per_page=30 指定每页输出设备个数默认 30最多 100(可选)

HTTP头部 api-key xxxxddddsssaaa

HTTP响应响

应消息内容

errno 0

error succ

data

page 1当前页码

per_page 10当前每页总数

total_count 100

items [

cmd_uuid 2302-312-FWs

device_id 2设备 ID

expire_time 2016-07-05 000000过期时间

status 0命令状态

send_time 2016-07-05 000000发送时间

confirm_time 2016-07-05 000000响应时间

confirm_body 2463726571007b202274797022 响应内容

16进制字符

body 2463726571007b202274797022请求内容16进制字符

hellip

中移物联网有限公司 OneNET 开发文档中心

hellip

]

438 视频能力

4381 获取播放地址

表4-31 获取播放地址

HTTP方法 GET

URL apihecloudscomipcrtmp_address

URL 参数

device_id= 接收该数据的设备 ID(必填)

channel_id = 对应数据流名称中的 channelnum

protocol_type = 播放协议类型 0rtmp1hls2http-flv

HTTP头部 api-key xxxxddddsssaaa masterkey或者设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

errorrdquosuccrdquo

ldquodatardquo

addripport

accessTokenldquo字符串rdquo

439 APIKEY

4391 新增

表4-32 新增 APIKEY

HTTP方法 POST

URL apihecloudscomkeys

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP内容

(示例)

title sharing key key 的命名

permissions [

resources [ 被授权的资源

中移物联网有限公司 OneNET 开发文档中心

dev_id 424 被授权的设备 id

dev_id 425 被授权的设备 id

hellip

hellip

]

access_methods [ 被授权的命令

get

put

post

]

]

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data key2302-312-FWs key_string

说明授权命令是可选的另外被授权的命令也可以是 getputpost 的

一个或几个如只授权 get和 put命令

access_methods [getput]

4392 更新

表4-33 更新 APIKEY

HTTP方法 PUT

URL apihecloudscomkeyskey_string

HTTP头部 api-key xxxxddddsssaaa masterkey(注只能为 master-key)

HTTP内容

(示例)

title sharing key key 的命名

permissions [

resources [ 被授权的资源

dev_id 424 被授权的设备 id

ds_idfan1 数据流 id可选

中移物联网有限公司 OneNET 开发文档中心

dev_id 425 被授权的设备 id

ds_idfan1 数据流 id可选

hellip

hellip

]

access_methods [ 被授权的命令可选

get

put

post

]

]

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

说明

1对于 masterkey 不允许更新操作masterkey 默认具有最大权限可以访

问该用户名下所有设备所有数据

可以进行 POSTGETPUTDELETE操作如果更新 master key 系统会返回

失败

2授权命令是可选的另外被授权的命令也可以是 getputpost 的一个

或几个如只授权 get和 put命令

access_methods [getput]

3API key 更新是覆盖操作会将原来存在的授权资源和授权命令覆盖不

会保留原来的授权资源和授权命令

4393 查看

中移物联网有限公司 OneNET 开发文档中心

表4-34 查看 APIKEY

HTTP方法 GET

URL httpapihecloudscomkeys

URL 参数

key = FWJPO-FZFHW-FFEWB可选只查看该 key相关信息

page = 1 指定页码 可选

per_page = 10 指定每页输出个数可选默认 10最多 100

device_id = xxbbcc可选只查看与该设备相关的非 master-key

HTTP头部 api-key xxxxddddsssaaa masterkey(注只能为 master-key)

HTTP响应响

应消息内容

(示例)

errno 0

data

per_page 30

total_count 2

keys [

create_time 2015-11-04 142552

title Auto-generated-master-key

key 03GeDLYk0WNk1V338g7yndKZYkQA

create_time 2015-12-03 100041

permissions [

resources [

dev_id 564280

]

]

title 设备 1测试 Key

key vuHebEWefiU2Ueo5ouoCc1CUsYQ=

]

page 1

error succ

中移物联网有限公司 OneNET 开发文档中心

4394 删除

表4-35 删除 APIKEY

HTTP方法 DELETE

URL httpapihecloudscomkeyskey_string

HTTP头部 api-key xxxxddddsssaaa masterkey(注只能为 master-key)

HTTP 响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

4310 消息订阅

43101 按 Topic 发送命令

表4-36 按 Topic 发送命令

HTTP方法 POST

URL apihecloudscommqtt

URL参数 topic=xxx 设备订阅的主题(必选)

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP 内 容

(示例)

HTTP响应响

应消息内容

(示例)

errno0

errorldquosuccrdquo

data

total_count1

per_page30

page1

devices [123123433333]

43102 查询订阅指定 Topic设备的列表

表4-37 查询订阅制定 Topic设备的列表

HTTP方法 GET

URL apihecloudscommqtttopic_device

URL 参数

topic=xxx 设备订阅的主题(必选)

page=1 当前页码 必填大于等于 1

per_page=10 每页 必填范围 1-1000

中移物联网有限公司 OneNET 开发文档中心

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP内容

(示例)

HTTP响应响

应消息内容

(示例)

errno0

errorldquosuccrdquo

data

total_count1

per_page30

page1

devices [123123433333]

43103 查询设备订阅的 Topic列表

表4-38 查询设备订阅的 Topic列表

HTTP方法 GET

URL apihecloudscommqttdevice_topicdevice_id

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno0

errorldquosuccrdquo

data

[topic_name1 topic_name2 topic_name3]

43104 删除产品的 Topic

表4-39 删除产品的 Topic

HTTP方法 DELETE

URL apihecloudscommqtttopic

URL参数 name=xxx topic名(必选)

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno0

errorldquosuccrdquo

中移物联网有限公司 OneNET 开发文档中心

43105 查询产品的 Topic

表4-40 查询产品的 Topic

HTTP方法 GET

URL apihecloudscommqtttopic

URL参数 无

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno0

errorldquosuccrdquo

data

[topic_name1topic_name2topic_name3]

中移物联网有限公司 OneNET 开发文档中心

第五章 接入实例

51 MQTT-device 接入

511 工具下载

为方便开发人员直观感受使用 mqtt 协议进入平台的便利可使用平台提供

的 MQTT 设备模拟器进行接入平台请在首页-gt开发文档-gt资源下载-gt13 调试

工具下载进行下载如下图

图5-1 资源下载

下载地址

httpupfileshecloudscom123ueditor201707125d5bc37eca39c0c5b7a5bcb9

0e451eeerar

中移物联网有限公司 OneNET 开发文档中心

512 界面说明

图5-2 界面说明

513 使用方法

5131 创建产品

如 323 的过程在设备接入协议中选择 MQTT

中移物联网有限公司 OneNET 开发文档中心

图5-3 选择连接协议

5132 创建设备

如 323描述在平台上新建一个设备

5133 建立连接

在产品概况中可以查看产品 ID此信息填入模拟器 ProductID一栏如下图

图5-4 产品ID

在平台上进入设备信息页面可查看设备 ID及鉴权信息(此鉴权信息是新建设备时候填

写的鉴权信息)如下图

中移物联网有限公司 OneNET 开发文档中心

图5-5 设备ID及鉴权信息

相应把设备 ID及鉴权信息填入模拟器之中然后点击连接按钮如果未弹出提示对话

框则表示设备鉴权成功如下图

图5-6 连接成功

中移物联网有限公司 OneNET 开发文档中心

5135订阅与发布

演示本操作需要在 OneNet平台建立两个基于 MQTT协议的设备一个用于消息发布

另一个用于消息订阅

图5-7 设备状态

开启两个模拟器分别模拟以上两个设备然后建立连接

首先使用订阅主题打开第一个模拟器模拟消息订阅者

图5-8 订阅主题

其次发布主题打开第二个模拟器模拟消息发布者

中移物联网有限公司 OneNET 开发文档中心

图5-9 发布主题

经过以上两个操作后查看模拟消息订阅者的模拟器则收到了主题

为rdquotopic_namerdquo的消息如下图

中移物联网有限公司 OneNET 开发文档中心

图5-10 收到的主题

5136接收平台指令

建立连接后模拟器也可接收来自平台的指令具体操作如下

先打开模拟器-gt建立连接-gt选中【[OneNet]平台指令接收】选项栏利用平台下发指

令功能下发如下图平台下发指令

图5-11 平台发送命令

中移物联网有限公司 OneNET 开发文档中心

图5-12 下发指令

填写好将要发送的消息后点击【发送命令】按钮则模拟器成功接收到来自平台的

数据如下图模拟器截图

图5-13 模拟器收到的指令

5137上传数据点

Mqtt支持 Json 数据格式上报数据现根据 Json几种格式举一些例来演示怎么利用

模拟器上传数据

1)使用 Json数据 Type1上传 Json数据

datastreams[idtemperaturedatapoints[value255]]

中移物联网有限公司 OneNET 开发文档中心

如下模拟器上传数据界面

图5-14 Type1数据格式

则在平台数据展示中则可看到上传的数据点

图5-15 收到数据展示

2)使用 Json数据 Type3示例 Json数据为

temp32humi98

模拟器发送数据截图

中移物联网有限公司 OneNET 开发文档中心

图5-16 Type3数据格式

平台数据展示截图

图5-17 数据展示

3)使用 Json数据 Type4示例 Json数据为

temperature233pm2589

模拟器上传数据截图

中移物联网有限公司 OneNET 开发文档中心

图5-18 Type5数据格式

平台接收数据展示截图

图5-19 数据展示

52 基于麒麟开发板的 MQTT 接入实例

OneNet 平台为使用户能快速接入发布麒麟座开发板官网提交您的创意免

费申请开发板下面利用麒麟座开发板 V31 演示开发板采集温湿度使用 MQTT发

送到平台的接入流程

开发板申请链接httpsopeniot10086cneventdetail185html

521 搭建开发环境

OneNET 平台提供的麒麟座开发板是基予 STM32 单片机开发的一块功能应用

板开发板包含 MCU温湿度传感器GSM 模块WIFI 模块电源模块键盘

中移物联网有限公司 OneNET 开发文档中心

LED以及 lcd显示接口等满足用户对平台接入的基本需求能快速接入到平台

资料包配备完整工程代码方便工程移植等使用

目前 STM32 开发常用的 IDE 有 IARMDK 等我挑选 MDK 作为开发工具打

开工具包先安装 MDK511A安装完毕后再安装 MDKCM511A开发板所有资料软件

工具包下载案例包

案例包下载链接

httpspanbaiducoms1UB1qZGrVuovSVdbqqXP0Lglistpath=2F

图5-20 MDK包

安装完毕并安装 license详细步骤不做演示

中移物联网有限公司 OneNET 开发文档中心

522 连接硬件准备

5221 开发板接线

图5-21 开发板接线图

电源DC-5V

运行信息USART1-MicroUSB 线

软件下载ST-Link

中移物联网有限公司 OneNET 开发文档中心

5222 ESP8266跳线帽连接

图5-22 ESP8266跳线帽连接

中移物联网有限公司 OneNET 开发文档中心

5223 M6312跳线帽连接

图5-23 M6312跳线帽连接

523 工程实例

例程使用最简单易懂的方式编写着重让大家明白接入流程和协议

10~12 协议专属例程是展示该协议下的专用功能比如 EDP 的 PushData

中移物联网有限公司 OneNET 开发文档中心

HTTP 注册新设备MQTT 的订阅发布等具体使用方法查看该目录下的《使用

说明》

图5-24 工程文件

524 开发工程文件

中移物联网有限公司 OneNET 开发文档中心

图5-25 工程文件

图5-26 工程结构

默认已创建好产品以及设备打开文件工程 onenetc 和 esp8266c 修改例

程的 WIFI 信息和平台信息

分别在 esp8266c 的 36和 onenetc的 414345行

图5-27 更改项

525 编译下载

开发版接串口会有相应状态显示平台设备显示在线状态绿色为连接成功

设备在线灰色表示未连接并在数据展示中显示对应主题的所有数据

中移物联网有限公司 OneNET 开发文档中心

图5-28 连接成功

图5-29 收到数据

其他实例详情请见httpsopeniot10086cnbbsthread-1266-1-1html

中移物联网有限公司 OneNET 开发文档中心

第六章 MQTT 协议详解

61 设备与平台通信协议包格式

协议就是通信双方的一个约定即表示第 1字节传输的什么第 2字节

传输的什么helliphellip在 MQTT协议中一个 MQTT 数据包由固定头(Fixed

header) 可变头(Variable header) 消息体(payload)三部分构成

MQTT 数据包结构固定头部+可变头部+消息体

固定头(Fixed header)存在于所有 MQTT数据包中表示数据包类型及

数据包的分组类标识固定头格式如下

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 - 5 Remaining Length(该字段占用 1-4个字节)

目前平台版本支持的 Packet Type如下

名字 值 流向 描述

CONNECT 1 C-gtS 客户端请求与服务端建立连接

CONNACK 2 S-gtC 服务端确认连接建立

PUBLISH 3 CS 发布消息

PUBACK 4 CS 收到发布消息确认

PUBREC 5 CS 发布消息收到

PUBREL 6 CS 发布消息释放

PUBCOMP 7 CS 发布消息完成

SUBSCRIBE 8 C-gtS 订阅请求

SUBACK 9 S-gtC 订阅确认

UNSUBSCRIBE 10 C-gtS 取消订阅

UNSUBACK 11 S-gtC 取消订阅确认

PING 12 C-gtS 客户端发送 PING(连接保活)命令

PINGRSP 13 S-gtC PING命令回复

DISCONNECT 14 C-gtS 断开连接

可变头(Variable header)存在于部分 MQTT 数据包中数据包类型决定

了可变头是否存在及其具体内容

消息体(Payload)存在于部分 MQTT 数据包中表示客户端收到的具体内

中移物联网有限公司 OneNET 开发文档中心

不同类型数据包中可变头和消息体包含关系如下

消息类型 Variabl

e

Header

Payloa

d

CONNECT 有 有

CONNACK 有 有

PUBLISH 有 有

PUBACK 有 无

PUBREC 有 无

PUBREL 有 无

PUBCOMP 有 无

SUBSCRIBE 有 有

SUBACK 有 有

UNSUBSCRIBE 有 有

UNSUBACK 有 无

PING 无 无

PINGRSP 无 无

DISCONNECT 无 无

62 平台支持数据包类型

621 CONNECT(客户端请求与服务端建立连接 client -gt server)

固定头(Fixed Header)

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 - 5 Remaining Length(该字段占用 1-4个字节)

MQTT Packet Type 值为 0001表示该数据包为请求连接数据包

Remaining Length 剩余长度占 1-4字节

可变头(Variable Header)

包含内容如下

Description 7 6 5 4 3 2 1 0

byte

1-2

ProtocolNa

me Length

0 0 0 0 0 0 0 0

0 0 0 0 0 1 0 0

byte

3

lsquoMrsquo 0 1 0 0 1 1 0 1

byte

4

lsquoQrsquo 0 1 0 1 0 0 0 1

中移物联网有限公司 OneNET 开发文档中心

byte

5

lsquoTrsquo 0 1 0 1 0 1 0 0

byte

6

lsquoTrsquo 0 1 0 1 0 1 0 0

Byte

7

Protocol

Level

0 0 0 0 0 0 0 1

Byte

8

Connect

Flag

Use

r

flag

Passwo

rd

flag

WillReta

in

Flag

WillQo

s Flag

WillFl

ag

CleanSessi

on

Flag

Reser

ve

Byte

9-10

KeepAlive

(1) 版本

Protocol Level 必须设置为 4平台只支持协议版本 v 311不支持更老

的版本使用第三方客户端时需要注意选择正确的版本

(2) user flag 与 password flag

平台不允许匿名登陆因此这两个标志位在连接时必须设置为 1否则认为

协议错误平台将会断开连接

(3) Will flag 与 WillretainflagWillQosFlag

Will flag 为 0时WillQosFlag 和 WillRetainFlag 必须为 0Will Flag

为 1时WillQosFlag 只能为 012

1当该设备下一次正常上线后服务器会清除之前的 will 消息(包括

retain 消息)

2如果设备上线时设置了 Will Topic 和 msg且将 WillRetainFlag 设

置为 1只有设备异常断开后服务器才会将该 Will msg 分发给新的 Will

Topic 的订阅者且 Qos 级别以订阅的 Request qos 级别为准

3如果设备上线时设置了 Will Topic 和 msg且将 WillRetainFlag 设

置为 0服务器不会存储该消息当设备异常断开后会将该 Will msg 以设

备设置的 WillQosFlag的 Qos级别进行分发

(4) CleanSessionFlag

若客户端将 clean session 标志位设置为 0当其断开后平台将会保存

sessionsession 需保持的内容包含

客户端订阅的 topic列表

中移物联网有限公司 OneNET 开发文档中心

还未完成确认的 Qos1Qos2级别的 publish消息

客户端保存 session 的内容包含

已经发送到服务端的但还没有收到确认的 Qos1Qos2消息列表

待发送的 Qos0列表

若客户端将 clean session 标志位设置为 1当其断开后平台会清除设备

的订阅列表及未完成确认的 Qos1Qos2 的 publish消息

(5) Reserve

保留位置 0

(6) KeepAlive 保活时间

每个客户端可自定义设置连接保持时间最短 120秒最长 65535 秒

消息体(Payload) Description 是否必须存在 格式

Field1 Client

Identifier

是 2字节字串长度 + utf8字

Field2 UserName 是 2字节字串长度 + utf8字

Field3 UserPassword 是 2字节字串长度 + utf8字

目前平台支持的方式为以后两种

方式 1设备 ID项目 ID鉴权信息(auth_info)

字段设置 消息示例

client_id设置为平台创建设备时的

设备 id

username设置为ldquo项目 IDrdquo

password设置为ldquo鉴权信息

(auth_info)rdquo

client_id=rdquo123rdquo

username=rdquo433223rdquo

password=rdquo注册的鉴权信息rdquo

各字段说明如下

鉴权信息(auth_info)在平台申请设备时填写设备的 auth_info 属性(数

字+字母的字符串)该属性需要产品内具备唯一性(可使用设备出厂唯一编号)

方式 2设备 ID + APIKey(项目 ID也需要填写)

字段设置 消息示例

client_id设置为平台创建设备时的

设备 ID

username设置为ldquo项目 IDrdquo

client_id=rdquo123rdquo

username=rdquo433223rdquo

password=Api Key

中移物联网有限公司 OneNET 开发文档中心

password设置为ldquoAPI鉴权信息

(auth_info)rdquo

项目 ID在平台添加项目时平台生成的 ID

APIKey在平台上创建产品时生成的 APIKey

连接包实例如下

Send one mqtt packet

FixHeader

PacketTag = 16

PacketType = 1

RemainLength = 34

VariableHeaderConnect

protocol_name_len_= 4

protocol_name_= MQTT

protocol_level_= 4

connect_flag_= 192

keep_alive_= 12000

client_id_len_= 8

client_id_= 34764813

usr_name_len_= 6

usr_name_= 150295

password_len_= 4

password_= push

MQTT0x10 0x22 0x00 0x04 0x4D 0x51 0x54 0x54 0x04 0xC0 0x2E 0xE0 0x00 0x08 0x33

0x34 0x37 0x36 0x34 0x38 0x31 0x33 0x00 0x06 0x31 0x35 0x30 0x32 0x39 0x35 0x00

0x04 0x70 0x75 0x73 0x68

Send One Packet Succ

中移物联网有限公司 OneNET 开发文档中心

622 CONNACK (服务端确认连接建立)

Fixed Header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type = 2 0 0 0 0

byte2 - 5 Remaining Length(该字段占用 1-4个字节)

Variable Header

Description 7 6 5 4 3 2 1 0

byte 1 Acknowledge Flags 0 0 0 0 0 0 0 Sp

byte 2 Return Code x x x x x x x x

Sp Session Present Flagsession信息在服务器已保持置 1未保存置

0

返回码说明

返回码 描述

0 成功

1 协议版本错误

2 非法的 clientid

3 服务不可用

4 用户名或密码错误

中移物联网有限公司 OneNET 开发文档中心

5 非法链接(比如 token非法)

失败

如果 connect包不符合协议内容约束则直接断掉连接而不需要发送 conn

ack包

如果鉴权或授权失败回复一个带非 0错误码的 connack包

成功

必须断掉重复的 clientid

执行 cleansession 对应的操作

必须回复一个 connack回复码为 0

开始消息传递并加入 keepalive的监视

PS客户端需要等到服务端的 connack报文才能发送后续的数据包

623 PUBLISH(发布消息 client -gt server)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type DUP f

lag

QoS Level RETAI

N

byte2 - 5 Remaining Length(该字段占用 1-4 个字节)

DUP

QoS2Qos1如果为 0则表示是第一次发送该包如果为 1则表示

为重复发送的包

Qos0DUP 必须为 0

中移物联网有限公司 OneNET 开发文档中心

QoS 指定了该 publish包的 Qos 等级如下

Qos 值 Bit2 Bit1 描述

0 0 0 最多发送一次

1 0 1 至少发送一次

2 1 0 只发送一次

RETAIN 保留标志位如果为 1服务器存储最新一条 RETAIN消息以便

分发给新的订阅者如果 RETAIN为 1Payload 为空服务器分发该消息后会

清空该 topic 下的 RETAIN 消息

PS该版本实现了 Qos0Qos1Qos2

Variable Header

Description 格式 是否必须

Field1 TopicName 2 字节字串长度 + utf8字

Field2 PacketIdent

ifier

2 字节 QoS0否QoS1Qos2是

Payload

内容根据不同业务自定义

624 PUBLISH(发布消息 server -gt client)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type DUP f

lag

Qos Level RETAIN

byte2 - 5 Remaining Length(该字段占用 1-4个字节)

DUP

Qos2QoS1如果为 0则表示是第一次发送该包如果为 1则表示

为重复发送的包

中移物联网有限公司 OneNET 开发文档中心

Qos0DUP 必须为 0

QOS 指定了该 publish包的 qos等级如下

Qos 值 Bit2 Bit1 描述

0 0 0 最多发送一次

1 0 1 至少发送一次

2 1 0 只发送一次

RETAIN如果服务器分发的消息是 RETAIN 消息则将该标志位置 1否则置

0

PS该版本实现 Qos0Qos1Qos2其中服务器分发消息的 Qos级别是以 Clien

t-gtServer 发送的 publish 包的 qos 等级为准非订阅的 topic 的 Qos 等级R

etain 消息是以订阅的 Request Qos 级别进行推送

VariableHeader

Description 格式

Field1 TopicName 2 字节字串长度 + utf8字

Payload

内容根据不同业务自定义

625 PUBACK(收到发布消息确认)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

中移物联网有限公司 OneNET 开发文档中心

626 PUBREC(发布消息收到)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

627 PUBREL(发布消息释放)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

628 PUBCOMP(发布消息完成)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

中移物联网有限公司 OneNET 开发文档中心

byte 1~

2

PacketIdentifier PacketIdentifier

629 SUBSCRIBE(订阅请求)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

Payload

Description 格式

Byte1~

n

TopicName 2 字节字串长度 + utf8字

Byten+

1

Request Qos 服务质量要求(只能为 0

12)

topic 说明

可以包含一个或多个 topic

topic必须是数字英文反斜杠()的组合目前不支持通配符

每个客户端最多订阅 100个 topic

以下 topic 被系统保留使用(客户端不能订阅)

类型 说明

$开头 平台保留

中移物联网有限公司 OneNET 开发文档中心

6210 SUBACK(订阅确认)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

Payload

Description 7 6 5 4 3 2 1 0

byte 1 retcode

返回码说明

返回码 描述

0x00 成功(granted qos = 0)

0x01 成功(granted qos = 1)

0x02 成功(granted qos = 2)

0x80 失败

6211 UNSUBSCRIBE(取消订阅)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

中移物联网有限公司 OneNET 开发文档中心

Payload

Description 格式

Byte1~

n

TopicName 2 字节字串长度 + utf8字

可以包含一个或多个 topic

6212 UNSUBACK(取消订阅确认)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

6213 PING(客户端发送 PING(连接保活)命令)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

NULL NULL

注PING命令无 VariableHeader

中移物联网有限公司 OneNET 开发文档中心

6214 PINGRSP(PING命令回复)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

NULL NULL

注PINGRSP无 VariableHeader

6215 DISCONNECT(断开连接)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

NULL NULL

注DISCONNECT无 VariableHeader

中移物联网有限公司 OneNET 开发文档中心

第七章 设备开发流程

71 连接鉴权

Device Onenet

(Connect)鉴权请求

(ConnAck)鉴权结果

加载session

鉴权

图7-1 连接鉴权

设备向平台发起 connect 请求connect 中携带鉴权信息具体

参见(报文格式参考 621)

平台拿到鉴权信息进行鉴权

鉴权通过后如果 cleansession=0 平台将会加载保存的设备

的一些信息如订阅列表(621中描述)

如果 cleansession=1 设备没有保存信息在平台则不加载设

备相关信息

返回鉴权结果 ConnAck(报文格式参考 621)

72 消息发布

721 数据点上报

设备使用 publish 报文来上传数据点 报文格式如下

中移物联网有限公司 OneNET 开发文档中心

VariableHeader

Field 名称 说明 格式

Field1 TopicName=rdquo$dprdquo $dp 为系统上传数据点

的指令

2字节字串长度 + utf8

字串

Payload

Payload包含真正的数据点内容支持的格式如下

Byte 1 Bit0-5数据类型指示目前支持

Type = 1

Type = 2

Type = 3

Type = 4

Type = 5

Type = 6

Type = 7

Bit6-7 flags 根据具体类型不同意义

Type6Type7这两种需要填写时间戳的数据类型

如果填入了时间戳则须将 bit7 置 1否则置 0(即

忽略数据类型说明中的日期时间相关字段)

0 0 0 0 0 0 0 1

Byte 2 根据数据类型指示不同

Byte n

中移物联网有限公司 OneNET 开发文档中心

数据类型 1(type == 1)格式说明

数据类型 2(type == 2)格式说明

Byte 1 数据点类型值1 1JSON 格式 1 字符串 0 0 0 0 0 0 0 1

Byte 2 指示后面 json 字符串长度

固定两字节长度高位字节值为 0x00

Byte 3 固定两字节长度低位字节值为 0x41

Byte 4

ldquodatastreamsrdquo[ 可以同时传递多个数据流

ldquoidrdquordquotemperaturerdquo

ldquodatapointsrdquo[数据流可以有多个数据点

rdquoatrdquordquo2013-04-22 222222rdquo可选

rdquovaluerdquo 365用户自定义

]

ldquoidrdquordquolocationrdquo

ldquodatapointsrdquo[hellip]

hellip

]

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

Byte n

Byte 1 数据点类型指示type=2 二进制数据 0 0 0 0 0 0 1 0

Byte 2 指示后面 json 字符串长度

固定两字节长度-高位字节值为 0x00

Byte 3 固定两字节长度-低位字节值为 0x10

Byte 4

rdquods_idrdquordquoimagerdquo 创建数据流时定义的 ID(必填)

ldquoatrdquordquo2014-10-25 122323rdquo 时间(可选)

rdquodescrdquo字符串或 json 对象对该数据的描述(可选)

hellip

Byte n

Byte n+1 指示后面二进制数据长度

固定四字节长度-第 1 字节(最高)值为 0x00

Byte n+1 固定四字节长度-第 2 字节值为 0x00

Byte n+2 固定四字节长度-第 3 字节值为 0x01

Byte n+3 固定四字节长度-第 4 字节(最低)值为 0x00

Byte n+4 该域目前最大支持 3M

中移物联网有限公司 OneNET 开发文档中心

数据类型 3(type == 3)格式说明

数据类型 4(type ==4)格式说明

hellip 本例中的该域 256 字节数据

Byte n+260

Byte 1 数据点类型指示type=3 JSON 格式 2 字符串 0 0 0 0 0 0 1 1

Byte 2 指示后面字符串长度

固定两字节长度高位字节值为 0x00

Byte 3 固定两字节长度低位字节值为 0x46

Byte 4 通用格式

ldquodatastream_id1rdquordquovalue1rdquo

ldquodatastream_id2rdquordquovalue2rdquo

hellip

示例

ldquotemperaturerdquo225rdquohumidityrdquordquo952rdquo

hellip

hellip

hellip

hellip

Byte n

Byte 1 数据点类型指示type=4 JSON 格式 3 字符串 0 0 0 0 0 1 0 0

Byte 2 指示后面字符串长度

固定两字节长度高位字节值为 0x00

Byte 3 固定两字节长度低位字节值为 0x46

Byte 4 通用格式

ldquodatastream_id1rdquoldquodatetime1rdquordquovalue1rdquo

ldquodatastream_id2rdquo ldquodatetime2rdquordquovalue2rdquo

hellip

示例

ldquotemperaturerdquoldquo2015-03-22 223112rdquo225

hellip

hellip

hellip

hellip

Byte n

中移物联网有限公司 OneNET 开发文档中心

数据类型 5(type == 5)格式说明

数据类型 6(type == 6)格式说明

Byte 1 数据点类型指示type=5 自定义分隔符 0 0 0 0 0 1 0 1

Byte 2 指示后面字符串长度

固定两字节长度高位字节值为 0x00

Byte 3 固定两字节长度低位字节值为 0x41

Byte 4 消息中最前面两字节为用户自定义的域中分隔符和域间分隔符

这两个分隔符不能相同比如采用逗号作为域中分隔符分号作

为域间分隔符的格式如下

feild0feild1hellipfeildn

其中每个 field 格式支持 3种

field 格式 1 3 个子字段分别是数据流 ID时间戳数据值

通用格式

Datastream_iddatetimevalue

field 格式 2 2 个子字段分别是数据流 ID 和数据值省略时

间戳通用格式

Datastream_idvalue

field 格式 3 1 个子字段省略了数据 ID 和时间戳只传输数

据值平台将用该域(feild)所在的位置号(从 0 开始)作为数据

流 ID通用格式

value

示例

(1)temperature2015-03-22

223112225102pm258910

(2)temperature2015-03-22

223112225102pm258910

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

Byte n

Byte 1 数据类型指示type=6 带时间自定义分隔符 0 0 0 0 0 1 1 0

Byte 2 年(后两位)例如 2016 年则该字节为 16 0 0 0 1 0 0 0 0

Byte 3 月(1-12)

Byte 4 日(1-31)

Byte 5 小时(0~23)

Byte 6 分钟(0~59)

Byte 7 秒(0~59)

Byte 8 指示后面字符串长度

固定两字节长度高位字节值为 0x00

Byte 9 固定两字节长度低位字节值为 0x41

Byte 10 消息中最前面两字节为用户自定义的域中分隔符和域间分隔符

具体格式见 type=5 说明若相关域中没有时间戳则采用本类

hellip

中移物联网有限公司 OneNET 开发文档中心

数据类型 7(type == 7)格式说明(每次最多 500个数据流的浮点数)

hellip 型的默认时间戳当作数据点的时间来存储

Byte n

Byte 1 Bit0-5 数据类型指示type=7 可离散浮点数数据流

Bit6保留置 0

Bit7 时间指示位1携带 6字节时间

1 0 0 0 0 1 1 1

Byte 2 年(后两位)例如 2016 年则该字节为 16 0 0 0 1 0 0 0 0

Byte 3 月(1-12)

Byte 4 日(1-31)

Byte 5 小时(0~23)

Byte 6 分钟(0~59)

Byte7 秒(0~59)

Byte 8 数据流名称(取值范围 1-65535)

高位字节值为 0x00

Byte 9 低位字节值为 0x01

Byte10 数据流个数(取值范围 1-500)

高位字节值为 0x00

Byte11 低位字节值为 0x01

Byte 10 4 字节 float 类型低位在前高位在后

Byte 11

Byte 12

Byte 13

Byte n 数据流名称(取值范围 1-65535)

高位字节值为 0x24

Byte n+1 低位字节值为 0x37

Byte n+2 数据流个数(取值范围 1-500)

高位字节值为 0x01

Byte n+3 低位字节值为 0x00

Byte n+2 4 字节 float 类型低位在前高位在后

Byte n+4

Byte n+5

Byte n+6

中移物联网有限公司 OneNET 开发文档中心

7211 Qos0(Client-gtServer)

Device OneNet

Publish $dp(Qos0)

存储

图7-2 QoS连接图

设备发布 Qos0 消息(上报数据点)

平台收到上报数据点后保存起来

7212 Qos1(Client-gtServer)

Device OneNet

Publish $dp(Qos1)

存储

PubAck

图7-3 Qos1连接图

设备发布 Qos1 消息(上报数据点)

中移物联网有限公司 OneNET 开发文档中心

平台收到上报数据点后保存起来

平台给设备回复相应的 PubAck (报文格式参考 625)

7213 Qos2(Client-gtServer)

Device OneNet

Publish $dp(Qos2)

存储

PubRec

PubRel

PubComp

图7-4 Qos2连接图

设备发布 Qos2 消息(上报数据点)

平台收到上报数据点后保存起来

平台给设备回复相应的 PubRec报文

设备需回复平台 PubRel报文如超时不回平台则会断开相应连接

平台给设备回复 PubComp报文

注数据点上报功能不支持 Retain 特性

中移物联网有限公司 OneNET 开发文档中心

722 平台命令(下发amp回复)

7221 命令下发

平台使用 publish 报文来下发平台指令 报文格式如下

FixHeader

参考 623

VariableHeader

Field 名称 说明 格式

Field1 TopicName=rdquo$creqcmduuidrdquo $creq为系统下发

Cmd 的 指 令

cmduuid为该条指

令的 uuid

2字节字串长度 +

utf8字串

Payload

Payload包含真正的指令内容

72211 Qos0(Server-gtClient)

DeviceOneNet

Publish $creq(Qos0)

图7-5 Qos0命令下发

命令下发

平台向设备发送 topic为$creq的消息(该 topic为平台命令)

中移物联网有限公司 OneNET 开发文档中心

设备收到 topic 为$creq 的 topic 时需将其作为平台下发的指令来处

注目前命令下发以 Qos0级别进行推送

7222 命令回复

设备使用 publish 报文来回复平台指令 报文格式如下

FixHeader

参考 623

VariableHeader

Field 名称 说明 格式

Field1 TopicName=rdquo$crspcmduuidrdquo $crsp为系统处理

设备回复 cmd 的

指令cmduuid为

该条指令的 uuid

2字节字串长度 +

utf8字串

Payload

Payload包含真正回复的指令内容

72221 Qos0(Client-gtServer)

DeviceOneNet

Pulish $crsp(Qos0)

图7-6 Qos0下发命令

中移物联网有限公司 OneNET 开发文档中心

72222 Qos1(Clientlt-gt Server)

DeviceOneNet

Pulish $crsp(Qos1)

Puback

图7-7 Qos1下发命令

如果设备回复响应时以 Qos1回复则平台需要给设备回复一个 Puback 报文

72223 Qos2(Clientlt-gt Server)

DeviceOneNet

Pulish $crsp(Qos2)

PubRec

PubRel

PubComp

图7-8 Qos2下发命令

如果设备回复响应时以 Qos2回复则

1平台需回复设备一个 PubRec报文

中移物联网有限公司 OneNET 开发文档中心

2设备在收到 PubRec后需向平台回复 PubRel报文

3平台收到 PubRel 报文后向设备回复 PubComp报文

73 创建 Topic

Device OneNet

HTTP 请求

HTTP 响应

图7-9 创建Topic

设备通过发送 HTTP请求进行 topic 的创建操作

平台收到请求后创建 topic 并返回结果

请求及响应定义如下

HTTP方法 POST

URL httpapihecloudscommqtttopic

HTTP头部 api-keyxxxx-ffff-zzzzz必须 master key

URL参数

HTTP body

内容

ldquonamerdquordquoxxxxxxrdquo topic 名字只能由英文下划线反斜杠组成最长

1024个字符同一产品下 topic name 不重复

成功返回

errno 0

errorldquosuccrdquo

说明 每个产品最多 100个 topic

中移物联网有限公司 OneNET 开发文档中心

74 订阅

Device OneNet

Subscribe

Suback

更新设备订阅列表

图7-10 订阅

设备发起订阅请求(报文格式参考 629)

平台收到请求后更新 topic列表

平台给设备回复 SubAck (报文格式参考 6210)

注subscribe 的 request qos级别可以为 012

75 取消订阅

Device OneNet

UnSubscribe

UnSuback

更新设备订阅列表

图7-11取消订阅

中移物联网有限公司 OneNET 开发文档中心

设备发起取消订阅请求 (报文格式参考 6211)

平台收到请求后更新 topic 列表

平台给设备回复 UnSubAck (报文格式参考 6212)

76 推送设备 Topic

761 Publish 报文推送

Qos0设备使用 Qos 级别为 0的 Publish报文来进行推送

Device OneNet

Publish(Qos0)

Device

以Qos0 Publish到订阅设备

图7-12 Qos0推送

设备发起推送 topic请求(以 Qos0级别)

平台收到请求后将 topic以 Qos0级别推送到相关订阅设备(支持离线设

备推送)

平台不返回 PubAck或 PubRec 等报文

Qos1

设备使用 Qos级别为 1的 publish报文来推送 Topic

中移物联网有限公司 OneNET 开发文档中心

Device OneNet

Publish(Qos1)

PubAck

Device

以Qos1 Publish到订阅设备

设备回复平台 PubAck

图7-13 Qos1发布

设备发起推送 topic请求(以 Qos1级别)

平台收到请求后将 topic以 Qos1级别推送到相关订阅设备(支持离线设

备推送)

平台返回 PubAck 报文

Qos2

设备使用 Qos级别为 2的 publish报文来推送 Topic

中移物联网有限公司 OneNET 开发文档中心

Device OneNet

Publish(Qos2)

PubRec

Device

以Qos2 Publish到订阅设备

PubRec

PubRel

PubComp

PubRel

PubComp

图7-14 Qos2推送

设备发起推送 topic请求(以 Qos2级别)

平台收到请求后回复 PubRec报文

设备收到 PubRec后需回复 PubRel报文 (如超时不回复平台会断开与设

备的连接)

平台收到 PubRel 报文后回复 PubComp 给设备

平台在回复 PubComp 后会以 Qos2 级别推送到相关订阅设备(支持离线设

备推送)

设备需回复 PubRec报文 (如超时不回复平台会断开与设备的连接)

平台发送 PubRel 报文给设备

设备需回复 PubComp(发布完成)

Publish报文的格式如下

FixHeader

参考 623

中移物联网有限公司 OneNET 开发文档中心

VariableHeader

Field 名称 说明 格式

Field1 TopicName 填写设备订阅的 topic 2字节字串长度 + utf8

字串

Payload

Payload为设备自定义内容

762 HTTP 请求推送

Device OneNet

HTTP 请求

HTTP 响应

Device

Publish到订阅设备

图7-15 HTTP请求

设备以 HTTP 的方式发起推送 topic 请求

平台收到请求后将 topic推送到相关订阅设备 (目前只支持在线推送)

平台返回推送结果

请求及响应定义如下 HTTP方法 POST

URL httpapihecloudscommqtt

HTTP头部 api-keyxxxx-ffff-zzzzz必须 master key

URL参数 topic=ldquoXXXXXXrdquo必选在发送 mqtt协议的 topic 必填

HTTP body内容 用户自定义 Json 或二进制数据(小于 64K)

成功返回

errno 0

errorldquosuccrdquo

中移物联网有限公司 OneNET 开发文档中心

77 离线 Topic

推送 Topic只针对在线设备进行 topic 消息的推送离线设备不会收到订阅

的 topic 的消息离线 Topic则会将该消息推送给在线以及离线设备

1 如果设备在上线时设置了 clean session flag服务端会删除其订阅的

topic及相关的离线 topic消息

2 如果设备没有设置 clean session flag如果有与该设备相关的离线

topic消息则在鉴权成功后将离线消息推送给设备

3 遗嘱消息(will msg)只会推送给订阅了该 will topic的在线的设备离

线设备不会收到

4 离线消息的有效期默认为 2 天(暂不支持用户设定有效期)服务器只会

推送在 2天内的最近 10 条消息

78 数据点订阅

数据点订阅同一产品下的设备可以订阅其他设备的数据点订阅的 topic

格式为deviceid数据流名称即

被关注的设备在上传了该数据流名称的数据点后订阅了该 topic的其他设备都

会收到上传的数据点

1 AB设备的 deviceid分别为 92779278

2 A 设备订阅了名为92789527 的 topic(9278 为设备 B 的 id9527 为 B

设备上传的数据流名称)

3 B 设备上传了名为 9527的数据流(数据点为 11 1578hellip)

4 A 设备会收到多条(取决于设备 B 上传的数据点的个数)推送的 topic 名

为92789527 的 publish消息消息的 payload中则包含设备 B 上传的数据

注目前支持订阅的数据点的类型为 Type1~Type7(详见 721节)

中移物联网有限公司 OneNET 开发文档中心

第八章 常见问题 FAQ

用户在基于 OneNET 平台进行产品开发的过程中可能会遇到各种各样的问

题开发过程中遇到的问题一方面可以参考 OneNET 文档中心的文档或者本文

档前几个章节的内容另一方面用户可以参考本章节总结的常见问题希望这些

文档能对用户在开发过程中有一定的指导和帮助

本章将分三个小节对用户在开发产品过程中可能遇到的问题进行梳理分别

为终端设备接入 OneNET平台的常见问题API调用的常见问题和 OneNET平台

的能力

81 终端设备接入 OneNET 平台的常见问题

序号 问题描述 原因分析 解决方法

1

2

3

4

5

6

7

82 API 调用的常见问题

序号 问题描述 原因分析 解决方法

1

2

3

4

5

6

7

8

9

中移物联网有限公司 OneNET 开发文档中心

83 使用 OneNET平台遇到的常见问题

序号 问题描述 原因分析 解决方法

1

2

3

4

5

6

7

8

Page 17: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com

中移物联网有限公司 OneNET 开发文档中心

图3-9 应用管理模块

点击ldquo创建应用rdquo输入应用名称点击ldquo创建rdquo如下图

图3-10 新应用创建

保存成功后点击编辑按键进入应用编辑页面如下图

中移物联网有限公司 OneNET 开发文档中心

图3-11 应用编辑入口

图3-12 应用编辑界面

在应用编辑页面中使用左侧的控件进行应用编辑此例中我们选择表盘控件来显示

刚刚上传的数据点击表盘控件如下图所示

中移物联网有限公司 OneNET 开发文档中心

图3-13 表盘控件添加

在右侧的属性中选择设备以及数据源(及刚刚上传的数据流)如下图

图3-14 表盘控件数据流绑定

在确定好数据流之后可以看到表盘回显示成我们添加的数据的值其他的

刷新频率以及表盘显示样式读者可以自行更具需求加以修改

完成应用编辑之后点击右上角保存按钮退出应用编辑

在应用管理页面点击该应用即可查看编辑好的应用页面

中移物联网有限公司 OneNET 开发文档中心

图3-15 保存应用

图3-16 应用查看与分享

该应用可以通过共享ldquo发布链接rdquo的方式将该应用共享给他人

33 设备批量接入

单个设备可以通过平台的开发者中心添加设备的方式进行创建若用户有多

个设备直接与平台 TCP连接的终端通过手动添加需耗费大量时间人力OneNET

中移物联网有限公司 OneNET 开发文档中心

为大批量接入用户提供 3种批量创建设备的方案

331 平台设备批量复制

此种方式为选择某个设备作为复制的模板通过导入 EXCEL的方式进行设备

复制厂商可以在小批量测试时使用该功能

在设备列表中点击查看详情

图3-17 设备批量接入

在设备详情页面点击批量导入设备信息

中移物联网有限公司 OneNET 开发文档中心

图3-18 导入设备信息

点击批量复制

图3-19 批量复制

中移物联网有限公司 OneNET 开发文档中心

目前提供三种批量创建的方式 excel 导入的方式为主要接入方式选择

excel导入点击下载模板

图3-20 快速导入

图3-21 Excel导入

打开下载下来的 excel模板表中的 titledesctags等均为将要批量导

入的设备的数据其中的 title 和 auth_info 为必填选项title 为设备名

中移物联网有限公司 OneNET 开发文档中心

auth_info对应设备的鉴权信息

图3-22 Excel格式

填写 3个设备信息

图3-23 Excel内容

三个设备的 title和 auth_info都一样均为 20170808000012017080800002

2017080800003保存该表格点击ldquo点击上传rdquo上传保存好的 excel 文件

点击ldquo确定导入批量rdquo

中移物联网有限公司 OneNET 开发文档中心

图3-24 导入上传

图3-25 确认创建

可以看到在原设备目录下新增了 3个设备其名称分别为 2017080800001

20170808000022017080800003

中移物联网有限公司 OneNET 开发文档中心

图3-26 批量创建的设备

点击设备详情可以看到设备目录下各个设备的鉴权信息与表格中所填

写的内容一致

图3-27 设备ID及鉴权信息

至此完成了通过批量设备复制的方式完成设备批量创建的过程用户如果

要使用这个功能需要将自己终端的出厂序列号整理到这个 excel表中然后利

中移物联网有限公司 OneNET 开发文档中心

用上传表格的方式进行批量创建

332 应用平台调用新增设备 API

OneNET 提供了创建设备的 API接口

图3-28 新增设备API接口

其中的 auth_info 参数对应着设备的鉴权信息通过调用此 API 接口可以

实现在平台上新增设备的功能用户如果有自己的第三方应用平台进行设备管理

可以通过多次调用此接口的方式进行设备的批量创建在调用接口时需要确保每

次调用的 auth_info 参数对应着自己的每一个终端不同的出厂序列号

333 终端调用注册 API

API 实际是 HTTP 协议的通信协议终端也可以通过封装 HTTP 包发送注册

中移物联网有限公司 OneNET 开发文档中心

设备请求的方式调用 API

终端调用注册 API 创建设备并接入的流程如图 3-29所示

平台

TCP连接协议接入机

创建产品

发送连接报文

连接应答

数据应答

发送数据报文

生成连接报文

设备

发送下行命令 下发命令

解析下行命令

生成存储数据报文

解析连接应答

解析数据应答

必要流程

可选流程

存储到数据流 数据源 创建应用

心跳应答

发送心跳报文生成心跳报文

解析心跳应答

平台操作

设备操作

利用设备本身的sn和产品的设备注册码生成注册报文

TCP连接API服务器

发送注册报文

注册应答

解析设备ID

创建设备

设备开机

读取硬件中烧录的设备编号(sn)

图3-29 终端调用注册API接入流程

1) 创建产品

重要参数产品 ID注册码产品 APIKey(见附录一)

2) 生成并发送注册报文

每一个用户终端中都有厂商烧录的唯一出厂序列号(sn)终端上电

之后应该首先读取自己的 sn然后通过 1)中的注册码和 sn 一起组成注

册报文

注册报文格式如下例

POST httpapihecloudscomregister_deregister_code=6TM7OkhNsTjATvFx HTTP11

Host apihecloudscom

Content-Length 48

中移物联网有限公司 OneNET 开发文档中心

sn02136616511001titletestdevice0001

其中

6TM7OkhNsTjATvFx 为产品注册码

02136616511001 是本例中模拟的设备唯一编号

testdevice0001 是本例中模拟的设备名

若上传的数据格式以及参数鉴权均正确则平台会返回设备创建成功

返回设备 ID以及该设备对应的设备 api-key

HTTP11 200 OK

Date Wed 09 Aug 2017 064821 GMT

Content-Type applicationjson

Content-Length 95

Connection keep-alive

Server Apache-Coyote11

Pragma no-cache

errno0datadevice_id11142371keyq9Mw0zqiAPjTwqfyCk2mWrUi8=errorsucc

3) 在步骤 2)完成之后平台上的设备就已经成功创建了终端需要

重新 TCP连接到对应协议的服务器上完成设备连接(与设备进行映射)以

及上传数据的操作

34 设备 ID 与产品序列号

通过 OneNET构建的物联网系统中有两套比较重要的编码设备 ID与产品序列号

(SN)其中

产品序列号是由厂商指定的在厂商的产品范围内是保持唯一的在出厂前烧写到每

一个终端中通常包含在与平台通信的数据中并以条形码的方式贴在产品的包装上用

于从用户的角度区分每一个独立的终端

设备 ID是在平台创建设备时由 OneNET分配的平台范围内唯一的编号应用于第三

方平台调用 OneNET API时使用

在创建设备时OneNET平台需要用户以设备 sn为参数进行设备创建成功之后平

台会分配一个设备 ID这样 OneNET内部就有了一个 sn-设备 ID的映射关系

终端登陆使用的鉴权信息是出厂时烧写好的 sn鉴权通过之后平台可以将该终端

上传是数据放到对应的设备中

上层应用通过创建设备 API或者查询设备 API建立 sn-设备 ID映射表在需要操作

某一设备时首先可以获取的是终端的 sn号(因为对用户是可见的)通过映射表获取设

中移物联网有限公司 OneNET 开发文档中心

备 ID然后再通过 API访问 OneNET平台上的对应设备

两套编码在物联网系统中的应用位置如下图所示

物联网应用

OneNET

终端

(烧写sn)

HTTP API 以设备ID为参数进行API访问

接入协议以sn为鉴权参数进行设备连接

设备

设备名

设备ID

设备sn

设备标签

sn 设备ID

snmdash设备ID映射表

中移物联网有限公司 OneNET 开发文档中心

第四章 第三方应用开发

第三方应用与 OneNET 平台的业务逻辑关系如图 4-1 所示第三方应用与

OneNET平台之间通过 HTTPS请求应答的方式实现数据交互OneNET 平台为第三

方应用提供封装好的 API 接口应用平台通过调用这些 API 接口完成对 OneNET

平台的读写执行以及设备管理请求然后 OneNET 平台会将相应的指令请求发送

到终端设备OneNET 平台收到终端设备响应的数据及设备信息后会将数据及

设备信息推送到应用平台完成应答

下面将分别介绍第三方应用接入 OneNET 平台的步骤OneNET平台提供的数

据推送功能以及 OneNET 平台为第三方应用封装好的 API接口

图4-1 第三方应用与OneNET平台的逻辑关系

41 第三方应用接入 OneNET 平台

第三方应用与 OneNET平台实现数据交互的前提是已经建立连接第三方应

用接入 OneNET平台的开发流程如图 4-2所示包括三个步骤

(1) 在 OneNET 平台创建了设备该设备有对应的真实设备且能正常上报

数据

(2) 用户已经开发并部署了 OneNET平台验证接入的程序

(3) 在 OneNET 平台正确配置了第三方应用数据接收的地址(URL)

Token以及其他参数

中移物联网有限公司 OneNET 开发文档中心

在确保上述第(1)步已经实现的基础上下面将分别讲述第(2)步和第

(3)步的实现过程

图4-2 数据推送的开发流程

412 第三方应用平台接入验证程序

第三方应用平台接入验证程序工作流程如下所述当 OneNET 平台完成对第

三方开发平台的配置后会向第三方开发平台发起 URLampToken验证接入验证程

序对平台发送的验证参数进行验证验证通过后第三方开发平台会向 OneNET

平台返回验证消息当 OneNET 平台收到验证消息后说明第三方开发平台与

OneNET平台已建立连接

目前 OneNET平台为第三方应用平台提供接入验证程序的 SDK有 Javaphp

Nodejs和 C四个版本

SDK 下载地址httpsopeniot10086cndocart432html118 -ldquo数

据推送rdquo

413 OneNET 平台配置第三方应用平台

在 OneNET平台对第三方应用平台的配置界面如图 4-3所示

URL第三方开发平台的地址

Token可以自定义用于第三方开发平台接入平台握手验证

消息加解密方式有明文模式和安全模式当启用安全模式后平台端需要

用户自定义 AESKey 或者由平台随机生成在应用程序中使用该 AESKey 解密消

中移物联网有限公司 OneNET 开发文档中心

推送时间限制(秒)和推送数据限制(个)设置ldquo推送时间限制rdquoldquo推送数

据限制rdquo可以实现批量推送数据减少服务器压力当满足ldquo推送时间限制rdquo和

ldquo推送数据限制rdquo要求后OneNET 将给第三方推送数据如果没有设置ldquo推送

时间限制rdquo和ldquo推送数据限制rdquo将默认数据实时推送

图4-3 第三方开发平台的配置界面

当用户成功在 OneNET 平台配置了第三方开发平台服务器地址后点击ldquo提

交rdquo按钮后OneNET 平台会向第三方应用平台发起 URLampToken 验证请求验证

通过且收到第三方返回的验证消息后则第三方应用平台与 OneNET 平台已建立

连接之后OneNET 平台在收到设备数据时会将设备数据推送到已配置的第三

方应用平台

用户数据接收服务程序接收到 OneNET平台发送的 ldquoURLampTokenrdquo验证请求

请求的格式形如httpipporttestmsg=xxxampnonce=xxxampsignature=xxx

蓝色字体部分为用户在 OneNET平台配置的 URL常规的验证流程如下

(1)在请求中获取参数ldquononcerdquoldquomsgrdquo的值将ldquotokenrdquo(此为页面

配置参数 token的值)ldquononcerdquoldquomsgrdquo的值计算 MD5(token+nonce+msg)

加密值并且编码为 Base64字符串值

中移物联网有限公司 OneNET 开发文档中心

(2)将上一步中 Base64字符串值通过 URL Decode 计算后的值与请求参数

ldquosignaturerdquo的值进行对比如果相等则表示 token验证成功

(3)如果 token 验证成功向 OneNET 平台返回ldquomsgrdquo参数值否则返回

其他值

说明如果用户不想验证 Token 的有效性可以忽略以上步骤并直接向

OneNET平台返回ldquomsgrdquo参数值

42 OneNET 平台数据推送

平台以 HTTPS POST 请求形式向第三方应用平台注册地址推送数据推送数

据相关信息以 JSON 串的形式置于 HTTPS请求中的 body部分

第三方应用平台在接收数据时会接收到数据的明文消息或者密文消息

明文消息中以ldquotyperdquo的数值区分不同的消息而密文消息与明文消息的区别

是ldquomsgrdquo部分经过了加密处理下面将分别对明文消息密文消息以及消息相

关字段和密文的加密算法进行说明

421 明文消息

明文消息有两种消息类型分别为数据点消息和设备上下线消息而数据点

消息又分为单条数据点消息和数据点消息批量形式数据点消息批量形式中的不

同数据点是以不同时间戳区分的

(1)数据点消息(type=1)

msg

type 1

dev_id 2016617

ds_id datastream_id

at 1466133706841

value 42

msg_signature message signature

nonce abcdefgh

(2)数据点消息批量形式(type=1)

msg [

type 1

dev_id 2016617

ds_id datastream_id

中移物联网有限公司 OneNET 开发文档中心

at 1466133706841

value 42

type 1

dev_id 2016617

ds_id datastream_id

at 1466133706842

value43

]

msg_signature message signature

nonce abcdefgh

(3)设备上下线消息(type=2)

msg

type 2

dev_id 2016617

status 0

login_type 1

at 1466133706841

msg_signature message signature

nonce abcdefgh

422 密文消息

密文消息中的ldquoenc_msgrdquo是由明文消息中的ldquomsgrdquo采用 AES 加密算法而

enc_msgxxxx

msg_signature

message signature

nonceabcdefgh

423 消息相关字段说明

表4-1 消息相关字段说明

字段 字段说明

type 标识数据类型当前版本范围[15]

dev_id 设备 ID

ds_id 公 开 协 议 中 的 数 据 流 ID 其 格 式 为

objectID_instanceID_resourceID

at 平台时间戳单位 ms

value 具体数据部分为设备上传至平台或触发的相关

数据

中移物联网有限公司 OneNET 开发文档中心

status 设备上下线标识

0-下线 1-上线

login_type

设备登陆协议类型

1EDP 2nwx 3JTEXT 5JT808 6

MODBUS 7MQTT 8gr2010NB-IoT

cmd_type

命令响应的类型

1设备收到 cmd的 ACK 响应信息 2设备收到

cmd的 Confirm响应信息

cmd_id 命令 ID

msg_signatur

e 消息摘要

nonce 用于计算消息摘要的随机串

enc_msg 加密密文消息体对明文 JSON串(msg字段)的

加密

424 加密算法详述

平台基于 AES算法提供加解密技术具体阐述如下

EncodingAESKey 即消息加解密 Key 的 BASE64编码形式长度固定为 43

个字符从 a-zA-Z0-9共 62个字符中选取由服务开启时填写后

也可申请修改

AES密钥计算为 AESKey=Base64_Decode(EncodingAESKey + ldquo=rdquo)

EncodingAESKey 尾部填充一个字符的ldquo=rdquo 用 Base64_Decode 生成 32

个字节的 AESKey

AES采用 CBC 模式秘钥长度为 32 个字节(256位)数据采用

PKCS7填充 初始化 iv向量取秘钥前 16字节 PKCS7K为秘钥字

节数(采用 32)buf为待加密的内容N为其字节数Buf 需要被填

充为 K的整数倍在 buf的尾部填充(K-NK)个字节每个字节的内容

是(K- NK)具体详见toolsietforghtmlrfc2315

BASE64采用 MIME格式字符包括大小写字母各 26个加上 10个数

字和加号ldquo+rdquo斜杠ldquordquo一共 64个字符等号ldquo=rdquo用作后缀填

出于安全考虑平台网站提供了修改 EncodingAESKey的功能(在

EncodingAESKey 可能泄漏时进行修改对应上第三方平台申请时填写

的接收消息的加密对称密钥)所以建议保存当前的和上一次的

中移物联网有限公司 OneNET 开发文档中心

EncodingAESKey若当前 EncodingAESKey 生成的 AESKey解密失败则

尝试用上一次的 AESKey的解密

平台的加密消息部分为 enc_msg= Base64_Encode( AES_Encrypt

[random(16B)+msg_len(4B)+msg] )即以 16字节随机字节串拼接 4字

节表示消息体长度的字节串(此处 4 字节长度表示为网络字节序)再加

上消息本身的字节串作为 AES加密的明文再以 AES算法对明文进行加

密生成密文最后对密文进行 BASE64 的编码操作生成加密消息体

对加密消息体的解密流程为1)首先进行加密消息体的 BASE64 解码操作

aes_msg=Base64_Decode(enc_msg)2)对获取的解码内容以 AES 算法进行解密

操作获取明文部分plain_msg=AES_Decrypt(aes_msg)解密中使用的秘钥由

EncodingAESKey 计算得来使用的初始化 iv 向量为计算出的 aes 秘钥的前 16

字节3)去掉 plain_msg 的前 16 字节再以前 4 字节取出消息体长度根据消

息体长度获取真实的消息部分(推荐以消息体长度获取真实消息以兼容

plain_msg 未来可能出现的结构变更)表示加密传输的数据后两字段与明文

传输一致

43 API 接口

第三方开发平台应用层通过 Rsetful API 的方式和 OneNET平台进行交互对

接实现命令的下发数据的读写以及相关业务的交互

针对 MQTT 协议目前主要开发了以下 API 用来实现第三方开发平台向

OneNET平台请求读写执行以及设备管理请求具体见下表 4-2下面分别对每一

种 API进行说明

表4-2 API功能说明

API 类别 操作对象 API名称

需要终端响应 只需平台响应

设备

注册

更新设备注册属性

新增

更新

精确查询单个设备

中移物联网有限公司 OneNET 开发文档中心

模糊查询设备

批量查询设备状态

删除

数据流

新增

更新

查询单个数据流

查询多个数据流

删除

数据点

新增

查询

二进制数

新增

查询

触发器

新增

更新

查询单个触发器

模糊查询触发器

删除

触发数据内容

命令

发送命令

查询命令状态

查询命令相应

查询设备历史命令

视频能力 获取播放地址

APIKEY

新增

更新

查看

删除

消息订阅

按 Topic发送命令

查询订阅指定 Topic设备的列表

查询设备订阅的 Topic列表

删除产品的 Topic

查询产品的 Topic

中移物联网有限公司 OneNET 开发文档中心

432 设备

4321 注册

表4-3 设备注册

HTTP方法 POST

URL apihecloudscomregister_de

URL参数 register_code=6TM1OkhNsTjATvFx 设备注册码(必填)

HTTP内容

(示例)

sn 2015031401421 设备唯一标识 string类型最长 512字符

mac C89346DA4373 设备唯一 mac标识最长 32字符

title myedpdevice 设备名(可选) 最长 32个字符

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

keyQ1VdWoEvdkCye=d1=HcCSP6LvCw= 新设备 apikey

device_id 325018 设备 ID

说明

1 响应消息中 errno 表示错误码error 表示错误原因如果创建设备失

败则没有 data字段

2 snmac一定要必填其中一个而且只可以传一个用于鉴权就是设备

新增中的 auth_info

3 此接口根据产品设置的不同默认 allow_dup=true可以生成新设备及

key或获取原有设备及 key见下表

表4-4 对应表

产品允许重复 sn 在产品中已存在 sn 在产品中不存在

allow_dup=true 是 sn 对应的设备 id 和 key 新的设备 id 和 key

allow_dup=false 否 报错 新的设备 id 和 key

中移物联网有限公司 OneNET 开发文档中心

此接口返回的新设备默认设备名均为auto_register均为私有设

备设备协议与产品协议相同

4322 更新设备注册属性

表4-5 更新设备注册属性

HTTP方法 PUT

URL apihecloudscomregister_attr

HTTP头部 api-key xxxxddddsssaaa 必须为 masterkey

HTTP内容

(示例)

allow_dup true|false是否允许重复提交相同的设备 sn 默认 true

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

默认 allow_dup 为 true主要用于设备注册码创建设备属性限制

4323 新增

表4-6 新增设备注册属性

HTTP方法 POST

URL apihecloudscomdevices

HTTP头部 api-key xxxxddddsssaaa 必须为 masterkey

HTTP内容

(示例)

title mydevice 设备名

desc some description 设备描述(可选)

tags [chinamobile] 设备标签(可选可为一个或多个)

protocolMQTT 选择一种接入协议(可选默认为 HTTP)

location lon 106 lat 29 ele 370设备位置纬度

经度 高度(可选)

private true| false 设备私密性(可选默认为 ture)

auth_info 201503041a5829151 MQTT设备设备唯一编号

other version 100 manu china mobile 其他信息(可

选JSON格式可自定义)

HTTP响应响

应消息内容

(实例)

errno 0

error succ

data

中移物联网有限公司 OneNET 开发文档中心

device_id233444 平台分配的设备 ID

4324 更新

表4-7 更新

HTTP方法 PUT

URL apihecloudscomdevicesdevice_id

HTTP头部 api-key xxxxddddsssaaa masterkey或设备 apikey

HTTP内容

(示例)

title mydevice 设备名(可选)

desc some description 设备描述(可选)

tags [chinamobile] 设备标签(可选)

protocolMQTT 选择一种接入协议(可选)

location lon106 lat 29 ele 370设备位置经度

纬度 高度(可选)

private true| false 设备私密性(可选)

auth_info201503041a5829151 MQTT设备设备唯一编号(可选)

other version 100 manufacturer china mobile 其

他信息(可选)

HTTP响应响

应消息内容

(示例)

errno 0

error succ

中移物联网有限公司 OneNET 开发文档中心

4325 精确查询单个设备

表4-8 精确查询单个设备

HTTP方法 GET

URL apihecloudscomdevicesdevice_id

HTTP头部 api-key xxxxddddsssaaa masterkey 或设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

iddevice_id

tags [chinamobile]

onlinetrue|false

protocolMQTT

titlemy device1

descsome description

create_time2015-09-16 102222

privatetrue|false

locationele370lat17609lon17703

auth_infohellip

otherversion100manufacturerchina mobile

keys[titledevice-auto-keykey2JO3B12O1]

数据流

datastreams[

create_time 2014-10-23 202222

iddatastream_id1

unitcelsius

unit_symbolC

uuid 231a5aa9-9de4-5f2e-9e0f-015181c98429

]

4326 模糊查询设备

表4-9 模糊查询设备

HTTP方法 GET

URL apihecloudscomdevices

中移物联网有限公司 OneNET 开发文档中心

URL 参数

key_words=my 匹配关键字(可选从 id和 title字段中左匹配)

auth_info=203x1 鉴权信息(可选对应注册时的 sn参数唯一设

备编号)

tag=mobile 标签(可选)

online=true| false 在线状态(可选)

private=true| false 私密性(可选)

page=1 指定页码最大页数为 10000(可选)

per_page=30 指定每页输出设备个数默认 30最多 100(可选)

device_id=235122 指定设备 ID多个用逗号分隔最多 100个(可

选)

begin=2016-06-20 起始时间包括当天(可选)

end=2016-06-20 结束时间包括当天(可选)

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

total_count1

per_page30

page1

devices

[

id3497307

titlemy device1

desc device desc

privatetrue

protocolMQTT

onlinefalse

locationlon10655231191544001lat29535451246673

create_time2013-02-11 122233

auth_infoSYSz=8QY3r7aTQ48UKfqPnB=PybYRo=

]

4327 批量查询设备最新数据

表4-10 批量查询设备最新数据

HTTP方法 GET

中移物联网有限公司 OneNET 开发文档中心

URL apihecloudscomdevicesdatapoints

URL参数 devIds=1221122331123 设备 id用逗号隔开限制 1000 个设备

HTTP头部 api-key xxxxddddsssaaa masterkey 或设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

error ldquosuccrdquo

data

devices [

id 12323 设备 id

title daf设备名

datastreams

[

id temperature数据流名称

at 2017-02-12 102222数据流更新时间

value 12数据流最新数据

hellip

helliphellip

]

hellip

hellip

]

4328 删除

表4-11 删除设备

HTTP方法 DELETE

URL apihecloudscomdevicesdevice_id

HTTP头部 api-key xxxxddddsssaaa 可为设备级别的 Key

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

中移物联网有限公司 OneNET 开发文档中心

说明删除设备会删除该设备下所有数据流和数据点删除设备动作是异步

的系统会在后续逐步删除该设备下的数据流和数据点

433 数据流

4331 新增

表4-12 新增数据流

HTTP方法 POST

URL apihecloudscomdevicesdevice_iddatastreams

HTTP头部 api-key xxxxddddsssaaa masterkey 或设备 apikey

HTTP内容

(示例)

idtemperature 数据流名称 示例温度

tags[Tag1Tag2] 数据流标签(可选可以为一个或多个)

unitcelsius 单位(可选)

unit_symbolC 单位符号(可选)

HTTP响应响

应消息内容

(示例)

errno 0

data

ds_uuid 9e6bcac9-2c6f-59d5-adae-3955df2e7bce平台分配

数据流 UUID

error succ

4332 更新

表4-13 更新数据流属性

HTTP方法 PUT

URL apihecloudscomdevicesdevice_iddatastreamsdatastream_id

示例apihecloudscomdevices421240datastreamstemperature

HTTP头部 api-key xxxxddddsssaaa masterkey 或设备 apikey

HTTP内容

(示例)

tags[Tag1Tag2] 数据流标签(可选)

unitcelsius 单位(可选)

unit_symbolC 单位符号(可选)

HTTP响应响

应消息内容

(示例)

errno 0

error succ

中移物联网有限公司 OneNET 开发文档中心

4333 查询单个数据流

表4-14 查询单个数据流

HTTP方法 GET

URL apihecloudscomdevicesdevice_iddatastreams

URL参数 datastreams_ids = 查看的 datastream的 id

HTTP头部 api-key xxxxddddsssaaa masterkey 或该设备的设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

data [

update_at 2018-06-29 112938 数据流最后更新时

id 湿度 数据流名称

create_time 2018-06-28 170548数据流创建时间

current_value 53845013最新数据点

]

error succ

4334 查询多个数据流

表4-15 查询多个数据流

HTTP方法 GET

URL apihecloudscomdevicesdevice_iddatastreams

URL 参数

datastream_ids= 查看的 datastream的 id多个 id之间用英文逗号

分开(参数缺省时为查询所有数据流)

示例

apionenetcomdevices1234datastreamsdatastream_ids=tempgps

表示查看 temp和 gps两个数据流的信息

HTTP头部 api-key xxxxddddsssaaa masterkey 或者 该设备的设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data 数据流信息

[

idtemperature 数据流名称设备范围内唯一

tags[Tag1Tag2] 数据流标签

unitcelsius 单位

unit_symbolC单位符号

create_timexxxx-xx-xx 102222 创建时间

中移物联网有限公司 OneNET 开发文档中心

current_valuehellip该数据流下数据点最新值

update_atxx-xx-xx该数据流下数据点最新上传时间

]

[

idhumi 数据流名称设备范围内唯一

tags[Tag1Tag2]

unit_symbol

create_timexxxx-xx-xx 102222

current_valuehellip

update_atxx-xx-xx

]

[]

4335 删除

表4-16 删除数据流

HTTP方法 DELETE

URL apihecloudscomdevicesdevice_iddatastreamsdatastream_id

URL参数 无

HTTP头部 api-key xxxxddddsssaaa masterkey 或者设备 key

HTTP响应响

应消息内容

(示例)

errno 0

error succ

434 数据点

4341 新增

中移物联网有限公司 OneNET 开发文档中心

表4-17 新增数据点

HTTP方法 POST

URL apihecloudscomdevicesdevice_iddatapoints

URL参数 type=3 上传数据类型(可选默认为完整 JSON型见 HTTP内容示

例)

HTTP头部 api-key xxxxddddsssaaa masterkey 或者 设备 apikey

HTTP内容

(示例)

datastreams

[

id temperature 数据流名称或数据流模板名称

datapoints [

at 2013-04-22T003543 上传数据点时间可选如

果为空则设备云会取当前时间如果存在其格式必须为 YYYY-MM-

DDThhmmss的形式(例如2015-03-22T223112)

value 42 上传数据点值

at 2013-04-22T005543

value 84 上传数据点值

]

id key 数据流名称或数据流模板名称

datapoints [

at 2013-04-22T003543上传数据点时间可选

value hellip上传数据点值

at 2013-04-22T003543

value hellip上传数据点值

]

hellip

]

中移物联网有限公司 OneNET 开发文档中心

HTTP 响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

1 可以一次性向设备云上传多个数据流每个数据流中可以包括多个数据

点示例程序表示向设备云上数据流 temperature 和数据流 key上传数据其中

temperature数据流有两个数据点key数据流也有两个数据点

2 如果某个数据流不存在则在增加数据点时设备云会自动创建一个新

的数据流注意新数据流的 datastream id 不可为空

3 数据点表示在某个时刻该数据流的值其 at表示时间为可选字段如

果为空则设备云会取当前时间如果存在其格式必须为YYYY-MM-DDThhmmss

的形式(例如2015-03-22T223112)

4 数据点中的 value表示具体的值其值为 JSON对象可以为整型浮点

型字符串多种类型如果 value部分用双引号括起来则其在设备云存储为字

符串如果不用双引号括起来则其表示数值字符编码现在只支持 UTF-8

5 数据点对应的时间是数据点的标识的一部分相同时间的两个数据点

设备云会同时对这两个相同时间的数据点进行保存不会出现覆盖另一个数据点

的情况一般如果 at 部分取空设备云会取系统时间精度为毫秒如果在一

条命令中某一个数据流包含多个数据点都没有 at 字段设备云将会对所有数据

点进行保存

6 新增数据点支持如下简写方式在请求的 URL中增加 type字段指示所

使用的格式类型目前 type支持 345三种情况

URLapihecloudscomdevices2214570datapointstype=3

示例temperature225humidity952

表示在数据流 temperature中增加一个数据点 225在 humidity 中增加一

个数据点 952

URLapihecloudscomdevices2214570datapointstype=4

示例temperature2015-03-22T223112225

表示在数据流 temperature中加一个数据点在 2015年 3月 22 日 22点 31

中移物联网有限公司 OneNET 开发文档中心

分 12秒的值为 225

URLapihecloudscomdevices2214570datapointstype=5

示例temperature2015-03-22T223112225pm2589

表示在数据流 temperature中加一个数据点即 2015年 3月 22 日 22点 31

分 12秒的值为 225在数据流 pm25中添加一个数据点即当前时间的值为 89

4342 查询

表4-18 查询数据点

HTTP方法 GET

URL apihecloudscomdevicesdevice_iddatapoints

URL 参数

datastream_id=abc 查询的数据流多个数据流之间用逗号分隔

(可选)

start=2015-01-10T080035 提取数据点的开始时间(可选)

end=2015-01-10T080035 提取数据点的结束时间(可选)

duration=3600 查询时间区间(可选单位为秒)

start+duration按时间顺序返回从 start开始一段时间内的数据点

end+duration按时间倒序返回从 end回溯一段时间内的数据点

limit=100 限定本次请求最多返回的数据点数0ltnlt=6000(可选

默认 1440)

cursor= 指定本次请求继续从 cursor位置开始提取数据(可选)

sort=DESC | ASC 值为 DESC|ASC时间排序方式DESC倒序ASC升

序默认升序

ltnlt=6000(可选默认 1440)

HTTP头部 api-key xxxxddddsssaaa masterkey 或者 该设备的设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

cursor70921_3771908_1472355096

datastreams[

idtemperature数据流名称或数据流模板名称

datapoints[

at xxxx-xx-xx 102222value42数据点上传时间和

at xxxx-xx-xx 102222value84

]

中移物联网有限公司 OneNET 开发文档中心

idkey 数据流名称或数据流模板名称

datapoints[

at xxxx-xx-xx 102222valuehellip

atxxxx-xx-xx 102222valuehellip

]

hellip

]

1 若不携带任何参数平台返回本设备所存在的所有数据流中的最新数据

(这一种情况下查询时出现时延较大的性能问题建议在 URL 参数中加上

newadd参数并将其值赋为 true如 newadd=true)

2 若不携带数据流 id参数携带 limit 参数时会返回该设备每个数据流

最多 limit 条数据

3 若要查看某一条数据流数据需在上述 URL中增加参数 datastream_id

4

apihecloudscomdevices564280datapointsdatastream_id=tempamplimit

=10会返回数据流temp中最近的 10个数据点

5 要查看某一条数据流在某个时间范围内的数据可以在增加 start和 end

参数

示例

apihecloudscomdevices564280datapointsdatastream_id=temper

atureampstart=2013-05-12T171233ampend=2013-06-12T172233 表示查询本设

备对应的数据流在 2013 年 5 月 12 日 17 点 12 分 33 秒到 17 点 22 分 33 秒的数

据点注意如果 start 参数存在end参数不存在表示取 start后的所有数据

如果 start 不存在end 存在设备云会忽略 end参数注意日期时间格式格

式必须为示例中的格式YYYY-MM-DDThhmmss例如2013-05-12T171233

日期和时间之间用大写字母 T 分隔start 和 end 之间的时间间隔最大为 1 年

超过一年会忽略

如果指定了 start 参数则可能返回的数据点的数目会很多此时默认会返

回最多 100 个数据点可以使用 limit 参数设定返回多少个数据点最大为

6000个数据点当实际的数据点数目多于 limit 限定的数目时返回的 json串

中移物联网有限公司 OneNET 开发文档中心

中会有一个 cursor 字段下一次请求的命令行中可以携带此 cursor 字段表示接

着遍历本数据流此 cursor字段标识上次取出数据点后下一个数据点的位置

435 二进制数据

4351 新增

将二进制数据将作为数据点保存到设备下的某个数据流中设备云返回该二

进制数据的索引号

表4-19 新增二进制数据

HTTP方法 POST

URL apihecloudscombindata

URL参数 device_id=421590 数据所属设备(必选)

datastream_id=bin 该数据所属已经存在的数据流(必选)

HTTP头部 api-key xxxxddddsssaaa masterkey 或者该设备的设备 key

HTTP 内 容

(示例)

普通二进制数据文件图像等

(最大限制为 800上传时间间隔需大于 1ms)

HTTP响应响

应消息内容

(示例)

errno 0

error succ

data

index3491506_1475204886914_bin 二进制数据索引号

4352 查询

表4-20 查询二进制数据

HTTP方法 GET

URL apihecloudscombindataindex

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

普通二进制数据文件图像等二进制形式数据

436 触发器

4361 新增

表4-21 新增触发器

HTTP方法 POST

中移物联网有限公司 OneNET 开发文档中心

URL apihecloudscomtriggers

HTTP头部 api-key xxxxddddsssaaa 必须为 masterkey

HTTP内容

(示例)

titlewen du jian kong 设备名(可选)

ds_idgps 数据流名称(id)(可选)

dev_ids[10272345615523] 设备 ID(可选)

ds_uuids[ 数据流 uuid(可选)

9ad09uac-7446-512f-b07c-90jdnzj8120ad

4599436e-7146-5349-b07c-79fa0919cs62

]

urlxxbbcom

typegt | gt= | lt | lt= | == | inout | in | out |change | frozen |

live

threshold100 阙值根据 type不同见以下说明

1) type 为gt|gt=|lt|lt=|==时threshold必须为数值

2) type为 inout时threshold 设置为lolmt40 uplmt52 表示

数据流的值首次进入或离开闭区间[4052]时触发

3) type为 change时threshold 参数不用传递当上传的值有改变时触发

告警

4) type为 frozen时threshold 为数值指定距离最后一次数据上报多少

秒内未上报数据触发告警同时被监控对象进入 frozen状态

5) type 为 live 时threshold 为数值指定距离最后一次数据上报多少秒

后上报数据触发告警

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

tirgger_id233444 触发器 ID

说明

1触发器的含义是当指定范围内的数据点满足触发条件的要求时会向

url参数指定的地址发送 post请求

2触发器有三种工作触发模式

1)在请求参数中单独指定了 ds_id不包括其他参数那么当前项目下

中移物联网有限公司 OneNET 开发文档中心

所有设备的数据流中数据流名称符合 ds_id 的数据都会进入触发判断逻辑

2)在请求参数中单独指定了 ds_uuids 数组那么只有这些指定的数据

流会进入触发判断逻辑

3)在请求参数中指定了 ds_id 和 dev_ids那么只有这些指定的设备的

数据流会进入触发判断逻辑

4362 更新

表4-22 更新触发器属性

HTTP方法 PUT

URL apihecloudscomtriggerstirgger_id

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP内容

(示例)

titlewen du jian kong

ds_uuids[

9ad09uac-7446-512f-b07c-90jdnzj8120ad

4599436e-7146-5349-b07c-79fa0919cs62

]

urlxxbbcom

typegt | gt= | lt | lt= | == | inout | in | out | exp | change |

frozen | live

threshold100

注若要修改 type需要对应设置 threshold

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

4363 查询单个触发器

表4-23 查询单个触发器

HTTP方法 GET

URL apihecloudscomtriggerstirgger_id

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

idtrigger_id1

中移物联网有限公司 OneNET 开发文档中心

titlewen du jian kong

ds_uuids[

datastream1_uuidrdquo

datastream2_uuidrdquo

datastream3_uuidrdquo

]

urlxxbbcom

typegt|gt=|lt|lt=|==|in|out|exp|change|frozen|live

threshold100

invalidtrue 触发器是否已失效

create_timexx-xx-xx 102222

4364 模糊查询触发器

表4-24 模糊查询触发器

HTTP方法 GET

URL apihecloudscomtriggers

URL 参数

title=name 指定触发器名称

page=1 指定页码可选

per_page=10 指定每页输出个数可选默认 10最多 100

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

total_count600

per_page30

page1

triggers[

idtrigger_id1

titlewen du jian kong

ds_uuids

[datastream1_uuidrdquo datastream2_uuidrdquo]

urlxxbbcom

typegt|gt=|lt|lt=|==|in|out|exp|change|frozen|live

threshold100

invalidtrue 触发器是否已失效

create_timeXXXXXXXX

中移物联网有限公司 OneNET 开发文档中心

]

说明触发器失效是指触发器所依赖的数据流或者设备被删除了此时触发

器永远不会有效触发事件

4365 删除

表4-25 删除触发器

HTTP方法 DELETE

URL apihecloudscomtriggerstirgger_id

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno 0

error succ

4366 触发数据内容

触发数据是指当 OneNET 设备云判断某个触发器的触发条件满足时会通过

POST方式向外抛出的 URL请求在 HTTP的 POST消息体中会携带如下格式的 JSON

字符串

表4-26 触发器内容

数据内容

(示例)

trigger

id1

threshold90

typegt

current_data[

dev_id2656

ds_idgps

ds_uuidFWEF-ZFW-ZFW-ZFWW

at2009-09-07T121602001403Z

value100

dev_id2656

ds_idtemper

中移物联网有限公司 OneNET 开发文档中心

ds_uuidFEWEF-ZFWFWW-WFWW-FWEFFWW

at2009-09-07T121602001403Z

value882

]

437 命令

命令是指应用发送命令数据给 OneNET设备云再由 OneNET设备云转发给终

端设备终端设备收到命令后可以向设备云反馈响应的一种工作机制命令下发

后应用可以通过 API查询命令状态和提取命令的响应数据

命令的执行步骤如下

1应用通过 API 向设备云发送命令数据

2设备云生成该命令的 uuid作为该命令的唯一标识并向应用返回同时向

终端设备转发命令数据

3 终端设备收到命令数据后执行命令数据可以生成响应也可以不响应

4设备云跟踪记录命令的响应如果设备有响应就关联命令 uuid和响应

结果

5应用通过 API 向设备云提取命令执行结果(API 请求中携带命令 uuid 标

识)

特别说明

命令下发到终端设备后如果终端设备 10 秒内未收到响应则此命令的状

态将被设置为超时应用通过 API 查询命令状态时会反馈超时超过 10 秒后

收到的响应会被丢弃

终端设备针对同一条命令回复多条命令响应只有在未超时时间内收到的最

后一条是有效响应前面的响应包将会被覆盖因此终端设备应该对每个命令只

有一个响应包

4371 发送命令

表4-27 发送命令

HTTP方法 POST

URL apihecloudscomcmds

URL 参数 device_id=415120 接收该数据的设备 ID(必选)

中移物联网有限公司 OneNET 开发文档中心

qos=0 | 1 是否需要响应默认为 0

0不需要响应即最多发送一次不关心设备是否响应

1需要响应如果设备收到命令后没有响应则会在下一次设备登陆

时若命令在有效期内(有效期定义参见 timeout参数)则会继续发送

对响应时间无限制多次响应以最后一次为准

本参数仅当 type=0时有效

timeout=300 命令有效时间默认 0

0在线命令若设备在线下发给设备若设备离线直接丢弃

gt0 离线命令若设备在线下发给设备若设备离线在当前时间

加 timeout时间内为有效期有效期内若设备上线则下发给设备单

位秒有效围0~2678400

本参数仅当 type=0时有效

type=0 | 1 默认 00发送 CMD_REQ包1发送 PUSH_DATA包

HTTP头部 api-key xxxxddddsssaaa masterkey或者设备 apikey

HTTP内容 用户自定义数据jsonstring二进制数据(小于 64K)

HTTP响应响

应消息内容

(示例)

errno 0

error succ

data

cmd_uuid2302-312-FWs 命令 id

4372 查询命令状态

表4-28 查询命令状态

HTTP方法 GET

URL apihecloudscomcmdscmd_uuid

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno 0

error succ

data

status1

0设备不在线|Device not online

1命令已创建| Command Created

2命令已发往设备| Command Sent

3命令发往设备失败| Send Command Failed

4设备正常响应| Command Response Received

5命令执行超时| Command Response Timeout

6设备响应消息过长 | Command Response Too Large

descldquosendingrdquo

中移物联网有限公司 OneNET 开发文档中心

4373 查询命令响应

表4-29 查询命令响应

HTTP方法 GET

URL apihecloudscomcmdscmd_uuidresp

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP 响应响

应消息内容

用户设备返回的响应内容

4374 查询设备历史命令

表4-30 查询设备历史命令

HTTP方法 GET

URL apihecloudscomcmdshistoryltdevice_idgtltdevice_idgt

URL 参数

start=2015-01-10T080035 查询的开始时间(可选)

end=2015-01-10T080535 查询的结束时间(可选)

page=1 指定页码最大页数为 10000(可选)

per_page=30 指定每页输出设备个数默认 30最多 100(可选)

HTTP头部 api-key xxxxddddsssaaa

HTTP响应响

应消息内容

errno 0

error succ

data

page 1当前页码

per_page 10当前每页总数

total_count 100

items [

cmd_uuid 2302-312-FWs

device_id 2设备 ID

expire_time 2016-07-05 000000过期时间

status 0命令状态

send_time 2016-07-05 000000发送时间

confirm_time 2016-07-05 000000响应时间

confirm_body 2463726571007b202274797022 响应内容

16进制字符

body 2463726571007b202274797022请求内容16进制字符

hellip

中移物联网有限公司 OneNET 开发文档中心

hellip

]

438 视频能力

4381 获取播放地址

表4-31 获取播放地址

HTTP方法 GET

URL apihecloudscomipcrtmp_address

URL 参数

device_id= 接收该数据的设备 ID(必填)

channel_id = 对应数据流名称中的 channelnum

protocol_type = 播放协议类型 0rtmp1hls2http-flv

HTTP头部 api-key xxxxddddsssaaa masterkey或者设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

errorrdquosuccrdquo

ldquodatardquo

addripport

accessTokenldquo字符串rdquo

439 APIKEY

4391 新增

表4-32 新增 APIKEY

HTTP方法 POST

URL apihecloudscomkeys

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP内容

(示例)

title sharing key key 的命名

permissions [

resources [ 被授权的资源

中移物联网有限公司 OneNET 开发文档中心

dev_id 424 被授权的设备 id

dev_id 425 被授权的设备 id

hellip

hellip

]

access_methods [ 被授权的命令

get

put

post

]

]

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data key2302-312-FWs key_string

说明授权命令是可选的另外被授权的命令也可以是 getputpost 的

一个或几个如只授权 get和 put命令

access_methods [getput]

4392 更新

表4-33 更新 APIKEY

HTTP方法 PUT

URL apihecloudscomkeyskey_string

HTTP头部 api-key xxxxddddsssaaa masterkey(注只能为 master-key)

HTTP内容

(示例)

title sharing key key 的命名

permissions [

resources [ 被授权的资源

dev_id 424 被授权的设备 id

ds_idfan1 数据流 id可选

中移物联网有限公司 OneNET 开发文档中心

dev_id 425 被授权的设备 id

ds_idfan1 数据流 id可选

hellip

hellip

]

access_methods [ 被授权的命令可选

get

put

post

]

]

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

说明

1对于 masterkey 不允许更新操作masterkey 默认具有最大权限可以访

问该用户名下所有设备所有数据

可以进行 POSTGETPUTDELETE操作如果更新 master key 系统会返回

失败

2授权命令是可选的另外被授权的命令也可以是 getputpost 的一个

或几个如只授权 get和 put命令

access_methods [getput]

3API key 更新是覆盖操作会将原来存在的授权资源和授权命令覆盖不

会保留原来的授权资源和授权命令

4393 查看

中移物联网有限公司 OneNET 开发文档中心

表4-34 查看 APIKEY

HTTP方法 GET

URL httpapihecloudscomkeys

URL 参数

key = FWJPO-FZFHW-FFEWB可选只查看该 key相关信息

page = 1 指定页码 可选

per_page = 10 指定每页输出个数可选默认 10最多 100

device_id = xxbbcc可选只查看与该设备相关的非 master-key

HTTP头部 api-key xxxxddddsssaaa masterkey(注只能为 master-key)

HTTP响应响

应消息内容

(示例)

errno 0

data

per_page 30

total_count 2

keys [

create_time 2015-11-04 142552

title Auto-generated-master-key

key 03GeDLYk0WNk1V338g7yndKZYkQA

create_time 2015-12-03 100041

permissions [

resources [

dev_id 564280

]

]

title 设备 1测试 Key

key vuHebEWefiU2Ueo5ouoCc1CUsYQ=

]

page 1

error succ

中移物联网有限公司 OneNET 开发文档中心

4394 删除

表4-35 删除 APIKEY

HTTP方法 DELETE

URL httpapihecloudscomkeyskey_string

HTTP头部 api-key xxxxddddsssaaa masterkey(注只能为 master-key)

HTTP 响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

4310 消息订阅

43101 按 Topic 发送命令

表4-36 按 Topic 发送命令

HTTP方法 POST

URL apihecloudscommqtt

URL参数 topic=xxx 设备订阅的主题(必选)

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP 内 容

(示例)

HTTP响应响

应消息内容

(示例)

errno0

errorldquosuccrdquo

data

total_count1

per_page30

page1

devices [123123433333]

43102 查询订阅指定 Topic设备的列表

表4-37 查询订阅制定 Topic设备的列表

HTTP方法 GET

URL apihecloudscommqtttopic_device

URL 参数

topic=xxx 设备订阅的主题(必选)

page=1 当前页码 必填大于等于 1

per_page=10 每页 必填范围 1-1000

中移物联网有限公司 OneNET 开发文档中心

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP内容

(示例)

HTTP响应响

应消息内容

(示例)

errno0

errorldquosuccrdquo

data

total_count1

per_page30

page1

devices [123123433333]

43103 查询设备订阅的 Topic列表

表4-38 查询设备订阅的 Topic列表

HTTP方法 GET

URL apihecloudscommqttdevice_topicdevice_id

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno0

errorldquosuccrdquo

data

[topic_name1 topic_name2 topic_name3]

43104 删除产品的 Topic

表4-39 删除产品的 Topic

HTTP方法 DELETE

URL apihecloudscommqtttopic

URL参数 name=xxx topic名(必选)

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno0

errorldquosuccrdquo

中移物联网有限公司 OneNET 开发文档中心

43105 查询产品的 Topic

表4-40 查询产品的 Topic

HTTP方法 GET

URL apihecloudscommqtttopic

URL参数 无

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno0

errorldquosuccrdquo

data

[topic_name1topic_name2topic_name3]

中移物联网有限公司 OneNET 开发文档中心

第五章 接入实例

51 MQTT-device 接入

511 工具下载

为方便开发人员直观感受使用 mqtt 协议进入平台的便利可使用平台提供

的 MQTT 设备模拟器进行接入平台请在首页-gt开发文档-gt资源下载-gt13 调试

工具下载进行下载如下图

图5-1 资源下载

下载地址

httpupfileshecloudscom123ueditor201707125d5bc37eca39c0c5b7a5bcb9

0e451eeerar

中移物联网有限公司 OneNET 开发文档中心

512 界面说明

图5-2 界面说明

513 使用方法

5131 创建产品

如 323 的过程在设备接入协议中选择 MQTT

中移物联网有限公司 OneNET 开发文档中心

图5-3 选择连接协议

5132 创建设备

如 323描述在平台上新建一个设备

5133 建立连接

在产品概况中可以查看产品 ID此信息填入模拟器 ProductID一栏如下图

图5-4 产品ID

在平台上进入设备信息页面可查看设备 ID及鉴权信息(此鉴权信息是新建设备时候填

写的鉴权信息)如下图

中移物联网有限公司 OneNET 开发文档中心

图5-5 设备ID及鉴权信息

相应把设备 ID及鉴权信息填入模拟器之中然后点击连接按钮如果未弹出提示对话

框则表示设备鉴权成功如下图

图5-6 连接成功

中移物联网有限公司 OneNET 开发文档中心

5135订阅与发布

演示本操作需要在 OneNet平台建立两个基于 MQTT协议的设备一个用于消息发布

另一个用于消息订阅

图5-7 设备状态

开启两个模拟器分别模拟以上两个设备然后建立连接

首先使用订阅主题打开第一个模拟器模拟消息订阅者

图5-8 订阅主题

其次发布主题打开第二个模拟器模拟消息发布者

中移物联网有限公司 OneNET 开发文档中心

图5-9 发布主题

经过以上两个操作后查看模拟消息订阅者的模拟器则收到了主题

为rdquotopic_namerdquo的消息如下图

中移物联网有限公司 OneNET 开发文档中心

图5-10 收到的主题

5136接收平台指令

建立连接后模拟器也可接收来自平台的指令具体操作如下

先打开模拟器-gt建立连接-gt选中【[OneNet]平台指令接收】选项栏利用平台下发指

令功能下发如下图平台下发指令

图5-11 平台发送命令

中移物联网有限公司 OneNET 开发文档中心

图5-12 下发指令

填写好将要发送的消息后点击【发送命令】按钮则模拟器成功接收到来自平台的

数据如下图模拟器截图

图5-13 模拟器收到的指令

5137上传数据点

Mqtt支持 Json 数据格式上报数据现根据 Json几种格式举一些例来演示怎么利用

模拟器上传数据

1)使用 Json数据 Type1上传 Json数据

datastreams[idtemperaturedatapoints[value255]]

中移物联网有限公司 OneNET 开发文档中心

如下模拟器上传数据界面

图5-14 Type1数据格式

则在平台数据展示中则可看到上传的数据点

图5-15 收到数据展示

2)使用 Json数据 Type3示例 Json数据为

temp32humi98

模拟器发送数据截图

中移物联网有限公司 OneNET 开发文档中心

图5-16 Type3数据格式

平台数据展示截图

图5-17 数据展示

3)使用 Json数据 Type4示例 Json数据为

temperature233pm2589

模拟器上传数据截图

中移物联网有限公司 OneNET 开发文档中心

图5-18 Type5数据格式

平台接收数据展示截图

图5-19 数据展示

52 基于麒麟开发板的 MQTT 接入实例

OneNet 平台为使用户能快速接入发布麒麟座开发板官网提交您的创意免

费申请开发板下面利用麒麟座开发板 V31 演示开发板采集温湿度使用 MQTT发

送到平台的接入流程

开发板申请链接httpsopeniot10086cneventdetail185html

521 搭建开发环境

OneNET 平台提供的麒麟座开发板是基予 STM32 单片机开发的一块功能应用

板开发板包含 MCU温湿度传感器GSM 模块WIFI 模块电源模块键盘

中移物联网有限公司 OneNET 开发文档中心

LED以及 lcd显示接口等满足用户对平台接入的基本需求能快速接入到平台

资料包配备完整工程代码方便工程移植等使用

目前 STM32 开发常用的 IDE 有 IARMDK 等我挑选 MDK 作为开发工具打

开工具包先安装 MDK511A安装完毕后再安装 MDKCM511A开发板所有资料软件

工具包下载案例包

案例包下载链接

httpspanbaiducoms1UB1qZGrVuovSVdbqqXP0Lglistpath=2F

图5-20 MDK包

安装完毕并安装 license详细步骤不做演示

中移物联网有限公司 OneNET 开发文档中心

522 连接硬件准备

5221 开发板接线

图5-21 开发板接线图

电源DC-5V

运行信息USART1-MicroUSB 线

软件下载ST-Link

中移物联网有限公司 OneNET 开发文档中心

5222 ESP8266跳线帽连接

图5-22 ESP8266跳线帽连接

中移物联网有限公司 OneNET 开发文档中心

5223 M6312跳线帽连接

图5-23 M6312跳线帽连接

523 工程实例

例程使用最简单易懂的方式编写着重让大家明白接入流程和协议

10~12 协议专属例程是展示该协议下的专用功能比如 EDP 的 PushData

中移物联网有限公司 OneNET 开发文档中心

HTTP 注册新设备MQTT 的订阅发布等具体使用方法查看该目录下的《使用

说明》

图5-24 工程文件

524 开发工程文件

中移物联网有限公司 OneNET 开发文档中心

图5-25 工程文件

图5-26 工程结构

默认已创建好产品以及设备打开文件工程 onenetc 和 esp8266c 修改例

程的 WIFI 信息和平台信息

分别在 esp8266c 的 36和 onenetc的 414345行

图5-27 更改项

525 编译下载

开发版接串口会有相应状态显示平台设备显示在线状态绿色为连接成功

设备在线灰色表示未连接并在数据展示中显示对应主题的所有数据

中移物联网有限公司 OneNET 开发文档中心

图5-28 连接成功

图5-29 收到数据

其他实例详情请见httpsopeniot10086cnbbsthread-1266-1-1html

中移物联网有限公司 OneNET 开发文档中心

第六章 MQTT 协议详解

61 设备与平台通信协议包格式

协议就是通信双方的一个约定即表示第 1字节传输的什么第 2字节

传输的什么helliphellip在 MQTT协议中一个 MQTT 数据包由固定头(Fixed

header) 可变头(Variable header) 消息体(payload)三部分构成

MQTT 数据包结构固定头部+可变头部+消息体

固定头(Fixed header)存在于所有 MQTT数据包中表示数据包类型及

数据包的分组类标识固定头格式如下

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 - 5 Remaining Length(该字段占用 1-4个字节)

目前平台版本支持的 Packet Type如下

名字 值 流向 描述

CONNECT 1 C-gtS 客户端请求与服务端建立连接

CONNACK 2 S-gtC 服务端确认连接建立

PUBLISH 3 CS 发布消息

PUBACK 4 CS 收到发布消息确认

PUBREC 5 CS 发布消息收到

PUBREL 6 CS 发布消息释放

PUBCOMP 7 CS 发布消息完成

SUBSCRIBE 8 C-gtS 订阅请求

SUBACK 9 S-gtC 订阅确认

UNSUBSCRIBE 10 C-gtS 取消订阅

UNSUBACK 11 S-gtC 取消订阅确认

PING 12 C-gtS 客户端发送 PING(连接保活)命令

PINGRSP 13 S-gtC PING命令回复

DISCONNECT 14 C-gtS 断开连接

可变头(Variable header)存在于部分 MQTT 数据包中数据包类型决定

了可变头是否存在及其具体内容

消息体(Payload)存在于部分 MQTT 数据包中表示客户端收到的具体内

中移物联网有限公司 OneNET 开发文档中心

不同类型数据包中可变头和消息体包含关系如下

消息类型 Variabl

e

Header

Payloa

d

CONNECT 有 有

CONNACK 有 有

PUBLISH 有 有

PUBACK 有 无

PUBREC 有 无

PUBREL 有 无

PUBCOMP 有 无

SUBSCRIBE 有 有

SUBACK 有 有

UNSUBSCRIBE 有 有

UNSUBACK 有 无

PING 无 无

PINGRSP 无 无

DISCONNECT 无 无

62 平台支持数据包类型

621 CONNECT(客户端请求与服务端建立连接 client -gt server)

固定头(Fixed Header)

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 - 5 Remaining Length(该字段占用 1-4个字节)

MQTT Packet Type 值为 0001表示该数据包为请求连接数据包

Remaining Length 剩余长度占 1-4字节

可变头(Variable Header)

包含内容如下

Description 7 6 5 4 3 2 1 0

byte

1-2

ProtocolNa

me Length

0 0 0 0 0 0 0 0

0 0 0 0 0 1 0 0

byte

3

lsquoMrsquo 0 1 0 0 1 1 0 1

byte

4

lsquoQrsquo 0 1 0 1 0 0 0 1

中移物联网有限公司 OneNET 开发文档中心

byte

5

lsquoTrsquo 0 1 0 1 0 1 0 0

byte

6

lsquoTrsquo 0 1 0 1 0 1 0 0

Byte

7

Protocol

Level

0 0 0 0 0 0 0 1

Byte

8

Connect

Flag

Use

r

flag

Passwo

rd

flag

WillReta

in

Flag

WillQo

s Flag

WillFl

ag

CleanSessi

on

Flag

Reser

ve

Byte

9-10

KeepAlive

(1) 版本

Protocol Level 必须设置为 4平台只支持协议版本 v 311不支持更老

的版本使用第三方客户端时需要注意选择正确的版本

(2) user flag 与 password flag

平台不允许匿名登陆因此这两个标志位在连接时必须设置为 1否则认为

协议错误平台将会断开连接

(3) Will flag 与 WillretainflagWillQosFlag

Will flag 为 0时WillQosFlag 和 WillRetainFlag 必须为 0Will Flag

为 1时WillQosFlag 只能为 012

1当该设备下一次正常上线后服务器会清除之前的 will 消息(包括

retain 消息)

2如果设备上线时设置了 Will Topic 和 msg且将 WillRetainFlag 设

置为 1只有设备异常断开后服务器才会将该 Will msg 分发给新的 Will

Topic 的订阅者且 Qos 级别以订阅的 Request qos 级别为准

3如果设备上线时设置了 Will Topic 和 msg且将 WillRetainFlag 设

置为 0服务器不会存储该消息当设备异常断开后会将该 Will msg 以设

备设置的 WillQosFlag的 Qos级别进行分发

(4) CleanSessionFlag

若客户端将 clean session 标志位设置为 0当其断开后平台将会保存

sessionsession 需保持的内容包含

客户端订阅的 topic列表

中移物联网有限公司 OneNET 开发文档中心

还未完成确认的 Qos1Qos2级别的 publish消息

客户端保存 session 的内容包含

已经发送到服务端的但还没有收到确认的 Qos1Qos2消息列表

待发送的 Qos0列表

若客户端将 clean session 标志位设置为 1当其断开后平台会清除设备

的订阅列表及未完成确认的 Qos1Qos2 的 publish消息

(5) Reserve

保留位置 0

(6) KeepAlive 保活时间

每个客户端可自定义设置连接保持时间最短 120秒最长 65535 秒

消息体(Payload) Description 是否必须存在 格式

Field1 Client

Identifier

是 2字节字串长度 + utf8字

Field2 UserName 是 2字节字串长度 + utf8字

Field3 UserPassword 是 2字节字串长度 + utf8字

目前平台支持的方式为以后两种

方式 1设备 ID项目 ID鉴权信息(auth_info)

字段设置 消息示例

client_id设置为平台创建设备时的

设备 id

username设置为ldquo项目 IDrdquo

password设置为ldquo鉴权信息

(auth_info)rdquo

client_id=rdquo123rdquo

username=rdquo433223rdquo

password=rdquo注册的鉴权信息rdquo

各字段说明如下

鉴权信息(auth_info)在平台申请设备时填写设备的 auth_info 属性(数

字+字母的字符串)该属性需要产品内具备唯一性(可使用设备出厂唯一编号)

方式 2设备 ID + APIKey(项目 ID也需要填写)

字段设置 消息示例

client_id设置为平台创建设备时的

设备 ID

username设置为ldquo项目 IDrdquo

client_id=rdquo123rdquo

username=rdquo433223rdquo

password=Api Key

中移物联网有限公司 OneNET 开发文档中心

password设置为ldquoAPI鉴权信息

(auth_info)rdquo

项目 ID在平台添加项目时平台生成的 ID

APIKey在平台上创建产品时生成的 APIKey

连接包实例如下

Send one mqtt packet

FixHeader

PacketTag = 16

PacketType = 1

RemainLength = 34

VariableHeaderConnect

protocol_name_len_= 4

protocol_name_= MQTT

protocol_level_= 4

connect_flag_= 192

keep_alive_= 12000

client_id_len_= 8

client_id_= 34764813

usr_name_len_= 6

usr_name_= 150295

password_len_= 4

password_= push

MQTT0x10 0x22 0x00 0x04 0x4D 0x51 0x54 0x54 0x04 0xC0 0x2E 0xE0 0x00 0x08 0x33

0x34 0x37 0x36 0x34 0x38 0x31 0x33 0x00 0x06 0x31 0x35 0x30 0x32 0x39 0x35 0x00

0x04 0x70 0x75 0x73 0x68

Send One Packet Succ

中移物联网有限公司 OneNET 开发文档中心

622 CONNACK (服务端确认连接建立)

Fixed Header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type = 2 0 0 0 0

byte2 - 5 Remaining Length(该字段占用 1-4个字节)

Variable Header

Description 7 6 5 4 3 2 1 0

byte 1 Acknowledge Flags 0 0 0 0 0 0 0 Sp

byte 2 Return Code x x x x x x x x

Sp Session Present Flagsession信息在服务器已保持置 1未保存置

0

返回码说明

返回码 描述

0 成功

1 协议版本错误

2 非法的 clientid

3 服务不可用

4 用户名或密码错误

中移物联网有限公司 OneNET 开发文档中心

5 非法链接(比如 token非法)

失败

如果 connect包不符合协议内容约束则直接断掉连接而不需要发送 conn

ack包

如果鉴权或授权失败回复一个带非 0错误码的 connack包

成功

必须断掉重复的 clientid

执行 cleansession 对应的操作

必须回复一个 connack回复码为 0

开始消息传递并加入 keepalive的监视

PS客户端需要等到服务端的 connack报文才能发送后续的数据包

623 PUBLISH(发布消息 client -gt server)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type DUP f

lag

QoS Level RETAI

N

byte2 - 5 Remaining Length(该字段占用 1-4 个字节)

DUP

QoS2Qos1如果为 0则表示是第一次发送该包如果为 1则表示

为重复发送的包

Qos0DUP 必须为 0

中移物联网有限公司 OneNET 开发文档中心

QoS 指定了该 publish包的 Qos 等级如下

Qos 值 Bit2 Bit1 描述

0 0 0 最多发送一次

1 0 1 至少发送一次

2 1 0 只发送一次

RETAIN 保留标志位如果为 1服务器存储最新一条 RETAIN消息以便

分发给新的订阅者如果 RETAIN为 1Payload 为空服务器分发该消息后会

清空该 topic 下的 RETAIN 消息

PS该版本实现了 Qos0Qos1Qos2

Variable Header

Description 格式 是否必须

Field1 TopicName 2 字节字串长度 + utf8字

Field2 PacketIdent

ifier

2 字节 QoS0否QoS1Qos2是

Payload

内容根据不同业务自定义

624 PUBLISH(发布消息 server -gt client)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type DUP f

lag

Qos Level RETAIN

byte2 - 5 Remaining Length(该字段占用 1-4个字节)

DUP

Qos2QoS1如果为 0则表示是第一次发送该包如果为 1则表示

为重复发送的包

中移物联网有限公司 OneNET 开发文档中心

Qos0DUP 必须为 0

QOS 指定了该 publish包的 qos等级如下

Qos 值 Bit2 Bit1 描述

0 0 0 最多发送一次

1 0 1 至少发送一次

2 1 0 只发送一次

RETAIN如果服务器分发的消息是 RETAIN 消息则将该标志位置 1否则置

0

PS该版本实现 Qos0Qos1Qos2其中服务器分发消息的 Qos级别是以 Clien

t-gtServer 发送的 publish 包的 qos 等级为准非订阅的 topic 的 Qos 等级R

etain 消息是以订阅的 Request Qos 级别进行推送

VariableHeader

Description 格式

Field1 TopicName 2 字节字串长度 + utf8字

Payload

内容根据不同业务自定义

625 PUBACK(收到发布消息确认)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

中移物联网有限公司 OneNET 开发文档中心

626 PUBREC(发布消息收到)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

627 PUBREL(发布消息释放)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

628 PUBCOMP(发布消息完成)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

中移物联网有限公司 OneNET 开发文档中心

byte 1~

2

PacketIdentifier PacketIdentifier

629 SUBSCRIBE(订阅请求)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

Payload

Description 格式

Byte1~

n

TopicName 2 字节字串长度 + utf8字

Byten+

1

Request Qos 服务质量要求(只能为 0

12)

topic 说明

可以包含一个或多个 topic

topic必须是数字英文反斜杠()的组合目前不支持通配符

每个客户端最多订阅 100个 topic

以下 topic 被系统保留使用(客户端不能订阅)

类型 说明

$开头 平台保留

中移物联网有限公司 OneNET 开发文档中心

6210 SUBACK(订阅确认)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

Payload

Description 7 6 5 4 3 2 1 0

byte 1 retcode

返回码说明

返回码 描述

0x00 成功(granted qos = 0)

0x01 成功(granted qos = 1)

0x02 成功(granted qos = 2)

0x80 失败

6211 UNSUBSCRIBE(取消订阅)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

中移物联网有限公司 OneNET 开发文档中心

Payload

Description 格式

Byte1~

n

TopicName 2 字节字串长度 + utf8字

可以包含一个或多个 topic

6212 UNSUBACK(取消订阅确认)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

6213 PING(客户端发送 PING(连接保活)命令)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

NULL NULL

注PING命令无 VariableHeader

中移物联网有限公司 OneNET 开发文档中心

6214 PINGRSP(PING命令回复)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

NULL NULL

注PINGRSP无 VariableHeader

6215 DISCONNECT(断开连接)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

NULL NULL

注DISCONNECT无 VariableHeader

中移物联网有限公司 OneNET 开发文档中心

第七章 设备开发流程

71 连接鉴权

Device Onenet

(Connect)鉴权请求

(ConnAck)鉴权结果

加载session

鉴权

图7-1 连接鉴权

设备向平台发起 connect 请求connect 中携带鉴权信息具体

参见(报文格式参考 621)

平台拿到鉴权信息进行鉴权

鉴权通过后如果 cleansession=0 平台将会加载保存的设备

的一些信息如订阅列表(621中描述)

如果 cleansession=1 设备没有保存信息在平台则不加载设

备相关信息

返回鉴权结果 ConnAck(报文格式参考 621)

72 消息发布

721 数据点上报

设备使用 publish 报文来上传数据点 报文格式如下

中移物联网有限公司 OneNET 开发文档中心

VariableHeader

Field 名称 说明 格式

Field1 TopicName=rdquo$dprdquo $dp 为系统上传数据点

的指令

2字节字串长度 + utf8

字串

Payload

Payload包含真正的数据点内容支持的格式如下

Byte 1 Bit0-5数据类型指示目前支持

Type = 1

Type = 2

Type = 3

Type = 4

Type = 5

Type = 6

Type = 7

Bit6-7 flags 根据具体类型不同意义

Type6Type7这两种需要填写时间戳的数据类型

如果填入了时间戳则须将 bit7 置 1否则置 0(即

忽略数据类型说明中的日期时间相关字段)

0 0 0 0 0 0 0 1

Byte 2 根据数据类型指示不同

Byte n

中移物联网有限公司 OneNET 开发文档中心

数据类型 1(type == 1)格式说明

数据类型 2(type == 2)格式说明

Byte 1 数据点类型值1 1JSON 格式 1 字符串 0 0 0 0 0 0 0 1

Byte 2 指示后面 json 字符串长度

固定两字节长度高位字节值为 0x00

Byte 3 固定两字节长度低位字节值为 0x41

Byte 4

ldquodatastreamsrdquo[ 可以同时传递多个数据流

ldquoidrdquordquotemperaturerdquo

ldquodatapointsrdquo[数据流可以有多个数据点

rdquoatrdquordquo2013-04-22 222222rdquo可选

rdquovaluerdquo 365用户自定义

]

ldquoidrdquordquolocationrdquo

ldquodatapointsrdquo[hellip]

hellip

]

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

Byte n

Byte 1 数据点类型指示type=2 二进制数据 0 0 0 0 0 0 1 0

Byte 2 指示后面 json 字符串长度

固定两字节长度-高位字节值为 0x00

Byte 3 固定两字节长度-低位字节值为 0x10

Byte 4

rdquods_idrdquordquoimagerdquo 创建数据流时定义的 ID(必填)

ldquoatrdquordquo2014-10-25 122323rdquo 时间(可选)

rdquodescrdquo字符串或 json 对象对该数据的描述(可选)

hellip

Byte n

Byte n+1 指示后面二进制数据长度

固定四字节长度-第 1 字节(最高)值为 0x00

Byte n+1 固定四字节长度-第 2 字节值为 0x00

Byte n+2 固定四字节长度-第 3 字节值为 0x01

Byte n+3 固定四字节长度-第 4 字节(最低)值为 0x00

Byte n+4 该域目前最大支持 3M

中移物联网有限公司 OneNET 开发文档中心

数据类型 3(type == 3)格式说明

数据类型 4(type ==4)格式说明

hellip 本例中的该域 256 字节数据

Byte n+260

Byte 1 数据点类型指示type=3 JSON 格式 2 字符串 0 0 0 0 0 0 1 1

Byte 2 指示后面字符串长度

固定两字节长度高位字节值为 0x00

Byte 3 固定两字节长度低位字节值为 0x46

Byte 4 通用格式

ldquodatastream_id1rdquordquovalue1rdquo

ldquodatastream_id2rdquordquovalue2rdquo

hellip

示例

ldquotemperaturerdquo225rdquohumidityrdquordquo952rdquo

hellip

hellip

hellip

hellip

Byte n

Byte 1 数据点类型指示type=4 JSON 格式 3 字符串 0 0 0 0 0 1 0 0

Byte 2 指示后面字符串长度

固定两字节长度高位字节值为 0x00

Byte 3 固定两字节长度低位字节值为 0x46

Byte 4 通用格式

ldquodatastream_id1rdquoldquodatetime1rdquordquovalue1rdquo

ldquodatastream_id2rdquo ldquodatetime2rdquordquovalue2rdquo

hellip

示例

ldquotemperaturerdquoldquo2015-03-22 223112rdquo225

hellip

hellip

hellip

hellip

Byte n

中移物联网有限公司 OneNET 开发文档中心

数据类型 5(type == 5)格式说明

数据类型 6(type == 6)格式说明

Byte 1 数据点类型指示type=5 自定义分隔符 0 0 0 0 0 1 0 1

Byte 2 指示后面字符串长度

固定两字节长度高位字节值为 0x00

Byte 3 固定两字节长度低位字节值为 0x41

Byte 4 消息中最前面两字节为用户自定义的域中分隔符和域间分隔符

这两个分隔符不能相同比如采用逗号作为域中分隔符分号作

为域间分隔符的格式如下

feild0feild1hellipfeildn

其中每个 field 格式支持 3种

field 格式 1 3 个子字段分别是数据流 ID时间戳数据值

通用格式

Datastream_iddatetimevalue

field 格式 2 2 个子字段分别是数据流 ID 和数据值省略时

间戳通用格式

Datastream_idvalue

field 格式 3 1 个子字段省略了数据 ID 和时间戳只传输数

据值平台将用该域(feild)所在的位置号(从 0 开始)作为数据

流 ID通用格式

value

示例

(1)temperature2015-03-22

223112225102pm258910

(2)temperature2015-03-22

223112225102pm258910

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

Byte n

Byte 1 数据类型指示type=6 带时间自定义分隔符 0 0 0 0 0 1 1 0

Byte 2 年(后两位)例如 2016 年则该字节为 16 0 0 0 1 0 0 0 0

Byte 3 月(1-12)

Byte 4 日(1-31)

Byte 5 小时(0~23)

Byte 6 分钟(0~59)

Byte 7 秒(0~59)

Byte 8 指示后面字符串长度

固定两字节长度高位字节值为 0x00

Byte 9 固定两字节长度低位字节值为 0x41

Byte 10 消息中最前面两字节为用户自定义的域中分隔符和域间分隔符

具体格式见 type=5 说明若相关域中没有时间戳则采用本类

hellip

中移物联网有限公司 OneNET 开发文档中心

数据类型 7(type == 7)格式说明(每次最多 500个数据流的浮点数)

hellip 型的默认时间戳当作数据点的时间来存储

Byte n

Byte 1 Bit0-5 数据类型指示type=7 可离散浮点数数据流

Bit6保留置 0

Bit7 时间指示位1携带 6字节时间

1 0 0 0 0 1 1 1

Byte 2 年(后两位)例如 2016 年则该字节为 16 0 0 0 1 0 0 0 0

Byte 3 月(1-12)

Byte 4 日(1-31)

Byte 5 小时(0~23)

Byte 6 分钟(0~59)

Byte7 秒(0~59)

Byte 8 数据流名称(取值范围 1-65535)

高位字节值为 0x00

Byte 9 低位字节值为 0x01

Byte10 数据流个数(取值范围 1-500)

高位字节值为 0x00

Byte11 低位字节值为 0x01

Byte 10 4 字节 float 类型低位在前高位在后

Byte 11

Byte 12

Byte 13

Byte n 数据流名称(取值范围 1-65535)

高位字节值为 0x24

Byte n+1 低位字节值为 0x37

Byte n+2 数据流个数(取值范围 1-500)

高位字节值为 0x01

Byte n+3 低位字节值为 0x00

Byte n+2 4 字节 float 类型低位在前高位在后

Byte n+4

Byte n+5

Byte n+6

中移物联网有限公司 OneNET 开发文档中心

7211 Qos0(Client-gtServer)

Device OneNet

Publish $dp(Qos0)

存储

图7-2 QoS连接图

设备发布 Qos0 消息(上报数据点)

平台收到上报数据点后保存起来

7212 Qos1(Client-gtServer)

Device OneNet

Publish $dp(Qos1)

存储

PubAck

图7-3 Qos1连接图

设备发布 Qos1 消息(上报数据点)

中移物联网有限公司 OneNET 开发文档中心

平台收到上报数据点后保存起来

平台给设备回复相应的 PubAck (报文格式参考 625)

7213 Qos2(Client-gtServer)

Device OneNet

Publish $dp(Qos2)

存储

PubRec

PubRel

PubComp

图7-4 Qos2连接图

设备发布 Qos2 消息(上报数据点)

平台收到上报数据点后保存起来

平台给设备回复相应的 PubRec报文

设备需回复平台 PubRel报文如超时不回平台则会断开相应连接

平台给设备回复 PubComp报文

注数据点上报功能不支持 Retain 特性

中移物联网有限公司 OneNET 开发文档中心

722 平台命令(下发amp回复)

7221 命令下发

平台使用 publish 报文来下发平台指令 报文格式如下

FixHeader

参考 623

VariableHeader

Field 名称 说明 格式

Field1 TopicName=rdquo$creqcmduuidrdquo $creq为系统下发

Cmd 的 指 令

cmduuid为该条指

令的 uuid

2字节字串长度 +

utf8字串

Payload

Payload包含真正的指令内容

72211 Qos0(Server-gtClient)

DeviceOneNet

Publish $creq(Qos0)

图7-5 Qos0命令下发

命令下发

平台向设备发送 topic为$creq的消息(该 topic为平台命令)

中移物联网有限公司 OneNET 开发文档中心

设备收到 topic 为$creq 的 topic 时需将其作为平台下发的指令来处

注目前命令下发以 Qos0级别进行推送

7222 命令回复

设备使用 publish 报文来回复平台指令 报文格式如下

FixHeader

参考 623

VariableHeader

Field 名称 说明 格式

Field1 TopicName=rdquo$crspcmduuidrdquo $crsp为系统处理

设备回复 cmd 的

指令cmduuid为

该条指令的 uuid

2字节字串长度 +

utf8字串

Payload

Payload包含真正回复的指令内容

72221 Qos0(Client-gtServer)

DeviceOneNet

Pulish $crsp(Qos0)

图7-6 Qos0下发命令

中移物联网有限公司 OneNET 开发文档中心

72222 Qos1(Clientlt-gt Server)

DeviceOneNet

Pulish $crsp(Qos1)

Puback

图7-7 Qos1下发命令

如果设备回复响应时以 Qos1回复则平台需要给设备回复一个 Puback 报文

72223 Qos2(Clientlt-gt Server)

DeviceOneNet

Pulish $crsp(Qos2)

PubRec

PubRel

PubComp

图7-8 Qos2下发命令

如果设备回复响应时以 Qos2回复则

1平台需回复设备一个 PubRec报文

中移物联网有限公司 OneNET 开发文档中心

2设备在收到 PubRec后需向平台回复 PubRel报文

3平台收到 PubRel 报文后向设备回复 PubComp报文

73 创建 Topic

Device OneNet

HTTP 请求

HTTP 响应

图7-9 创建Topic

设备通过发送 HTTP请求进行 topic 的创建操作

平台收到请求后创建 topic 并返回结果

请求及响应定义如下

HTTP方法 POST

URL httpapihecloudscommqtttopic

HTTP头部 api-keyxxxx-ffff-zzzzz必须 master key

URL参数

HTTP body

内容

ldquonamerdquordquoxxxxxxrdquo topic 名字只能由英文下划线反斜杠组成最长

1024个字符同一产品下 topic name 不重复

成功返回

errno 0

errorldquosuccrdquo

说明 每个产品最多 100个 topic

中移物联网有限公司 OneNET 开发文档中心

74 订阅

Device OneNet

Subscribe

Suback

更新设备订阅列表

图7-10 订阅

设备发起订阅请求(报文格式参考 629)

平台收到请求后更新 topic列表

平台给设备回复 SubAck (报文格式参考 6210)

注subscribe 的 request qos级别可以为 012

75 取消订阅

Device OneNet

UnSubscribe

UnSuback

更新设备订阅列表

图7-11取消订阅

中移物联网有限公司 OneNET 开发文档中心

设备发起取消订阅请求 (报文格式参考 6211)

平台收到请求后更新 topic 列表

平台给设备回复 UnSubAck (报文格式参考 6212)

76 推送设备 Topic

761 Publish 报文推送

Qos0设备使用 Qos 级别为 0的 Publish报文来进行推送

Device OneNet

Publish(Qos0)

Device

以Qos0 Publish到订阅设备

图7-12 Qos0推送

设备发起推送 topic请求(以 Qos0级别)

平台收到请求后将 topic以 Qos0级别推送到相关订阅设备(支持离线设

备推送)

平台不返回 PubAck或 PubRec 等报文

Qos1

设备使用 Qos级别为 1的 publish报文来推送 Topic

中移物联网有限公司 OneNET 开发文档中心

Device OneNet

Publish(Qos1)

PubAck

Device

以Qos1 Publish到订阅设备

设备回复平台 PubAck

图7-13 Qos1发布

设备发起推送 topic请求(以 Qos1级别)

平台收到请求后将 topic以 Qos1级别推送到相关订阅设备(支持离线设

备推送)

平台返回 PubAck 报文

Qos2

设备使用 Qos级别为 2的 publish报文来推送 Topic

中移物联网有限公司 OneNET 开发文档中心

Device OneNet

Publish(Qos2)

PubRec

Device

以Qos2 Publish到订阅设备

PubRec

PubRel

PubComp

PubRel

PubComp

图7-14 Qos2推送

设备发起推送 topic请求(以 Qos2级别)

平台收到请求后回复 PubRec报文

设备收到 PubRec后需回复 PubRel报文 (如超时不回复平台会断开与设

备的连接)

平台收到 PubRel 报文后回复 PubComp 给设备

平台在回复 PubComp 后会以 Qos2 级别推送到相关订阅设备(支持离线设

备推送)

设备需回复 PubRec报文 (如超时不回复平台会断开与设备的连接)

平台发送 PubRel 报文给设备

设备需回复 PubComp(发布完成)

Publish报文的格式如下

FixHeader

参考 623

中移物联网有限公司 OneNET 开发文档中心

VariableHeader

Field 名称 说明 格式

Field1 TopicName 填写设备订阅的 topic 2字节字串长度 + utf8

字串

Payload

Payload为设备自定义内容

762 HTTP 请求推送

Device OneNet

HTTP 请求

HTTP 响应

Device

Publish到订阅设备

图7-15 HTTP请求

设备以 HTTP 的方式发起推送 topic 请求

平台收到请求后将 topic推送到相关订阅设备 (目前只支持在线推送)

平台返回推送结果

请求及响应定义如下 HTTP方法 POST

URL httpapihecloudscommqtt

HTTP头部 api-keyxxxx-ffff-zzzzz必须 master key

URL参数 topic=ldquoXXXXXXrdquo必选在发送 mqtt协议的 topic 必填

HTTP body内容 用户自定义 Json 或二进制数据(小于 64K)

成功返回

errno 0

errorldquosuccrdquo

中移物联网有限公司 OneNET 开发文档中心

77 离线 Topic

推送 Topic只针对在线设备进行 topic 消息的推送离线设备不会收到订阅

的 topic 的消息离线 Topic则会将该消息推送给在线以及离线设备

1 如果设备在上线时设置了 clean session flag服务端会删除其订阅的

topic及相关的离线 topic消息

2 如果设备没有设置 clean session flag如果有与该设备相关的离线

topic消息则在鉴权成功后将离线消息推送给设备

3 遗嘱消息(will msg)只会推送给订阅了该 will topic的在线的设备离

线设备不会收到

4 离线消息的有效期默认为 2 天(暂不支持用户设定有效期)服务器只会

推送在 2天内的最近 10 条消息

78 数据点订阅

数据点订阅同一产品下的设备可以订阅其他设备的数据点订阅的 topic

格式为deviceid数据流名称即

被关注的设备在上传了该数据流名称的数据点后订阅了该 topic的其他设备都

会收到上传的数据点

1 AB设备的 deviceid分别为 92779278

2 A 设备订阅了名为92789527 的 topic(9278 为设备 B 的 id9527 为 B

设备上传的数据流名称)

3 B 设备上传了名为 9527的数据流(数据点为 11 1578hellip)

4 A 设备会收到多条(取决于设备 B 上传的数据点的个数)推送的 topic 名

为92789527 的 publish消息消息的 payload中则包含设备 B 上传的数据

注目前支持订阅的数据点的类型为 Type1~Type7(详见 721节)

中移物联网有限公司 OneNET 开发文档中心

第八章 常见问题 FAQ

用户在基于 OneNET 平台进行产品开发的过程中可能会遇到各种各样的问

题开发过程中遇到的问题一方面可以参考 OneNET 文档中心的文档或者本文

档前几个章节的内容另一方面用户可以参考本章节总结的常见问题希望这些

文档能对用户在开发过程中有一定的指导和帮助

本章将分三个小节对用户在开发产品过程中可能遇到的问题进行梳理分别

为终端设备接入 OneNET平台的常见问题API调用的常见问题和 OneNET平台

的能力

81 终端设备接入 OneNET 平台的常见问题

序号 问题描述 原因分析 解决方法

1

2

3

4

5

6

7

82 API 调用的常见问题

序号 问题描述 原因分析 解决方法

1

2

3

4

5

6

7

8

9

中移物联网有限公司 OneNET 开发文档中心

83 使用 OneNET平台遇到的常见问题

序号 问题描述 原因分析 解决方法

1

2

3

4

5

6

7

8

Page 18: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com

中移物联网有限公司 OneNET 开发文档中心

图3-11 应用编辑入口

图3-12 应用编辑界面

在应用编辑页面中使用左侧的控件进行应用编辑此例中我们选择表盘控件来显示

刚刚上传的数据点击表盘控件如下图所示

中移物联网有限公司 OneNET 开发文档中心

图3-13 表盘控件添加

在右侧的属性中选择设备以及数据源(及刚刚上传的数据流)如下图

图3-14 表盘控件数据流绑定

在确定好数据流之后可以看到表盘回显示成我们添加的数据的值其他的

刷新频率以及表盘显示样式读者可以自行更具需求加以修改

完成应用编辑之后点击右上角保存按钮退出应用编辑

在应用管理页面点击该应用即可查看编辑好的应用页面

中移物联网有限公司 OneNET 开发文档中心

图3-15 保存应用

图3-16 应用查看与分享

该应用可以通过共享ldquo发布链接rdquo的方式将该应用共享给他人

33 设备批量接入

单个设备可以通过平台的开发者中心添加设备的方式进行创建若用户有多

个设备直接与平台 TCP连接的终端通过手动添加需耗费大量时间人力OneNET

中移物联网有限公司 OneNET 开发文档中心

为大批量接入用户提供 3种批量创建设备的方案

331 平台设备批量复制

此种方式为选择某个设备作为复制的模板通过导入 EXCEL的方式进行设备

复制厂商可以在小批量测试时使用该功能

在设备列表中点击查看详情

图3-17 设备批量接入

在设备详情页面点击批量导入设备信息

中移物联网有限公司 OneNET 开发文档中心

图3-18 导入设备信息

点击批量复制

图3-19 批量复制

中移物联网有限公司 OneNET 开发文档中心

目前提供三种批量创建的方式 excel 导入的方式为主要接入方式选择

excel导入点击下载模板

图3-20 快速导入

图3-21 Excel导入

打开下载下来的 excel模板表中的 titledesctags等均为将要批量导

入的设备的数据其中的 title 和 auth_info 为必填选项title 为设备名

中移物联网有限公司 OneNET 开发文档中心

auth_info对应设备的鉴权信息

图3-22 Excel格式

填写 3个设备信息

图3-23 Excel内容

三个设备的 title和 auth_info都一样均为 20170808000012017080800002

2017080800003保存该表格点击ldquo点击上传rdquo上传保存好的 excel 文件

点击ldquo确定导入批量rdquo

中移物联网有限公司 OneNET 开发文档中心

图3-24 导入上传

图3-25 确认创建

可以看到在原设备目录下新增了 3个设备其名称分别为 2017080800001

20170808000022017080800003

中移物联网有限公司 OneNET 开发文档中心

图3-26 批量创建的设备

点击设备详情可以看到设备目录下各个设备的鉴权信息与表格中所填

写的内容一致

图3-27 设备ID及鉴权信息

至此完成了通过批量设备复制的方式完成设备批量创建的过程用户如果

要使用这个功能需要将自己终端的出厂序列号整理到这个 excel表中然后利

中移物联网有限公司 OneNET 开发文档中心

用上传表格的方式进行批量创建

332 应用平台调用新增设备 API

OneNET 提供了创建设备的 API接口

图3-28 新增设备API接口

其中的 auth_info 参数对应着设备的鉴权信息通过调用此 API 接口可以

实现在平台上新增设备的功能用户如果有自己的第三方应用平台进行设备管理

可以通过多次调用此接口的方式进行设备的批量创建在调用接口时需要确保每

次调用的 auth_info 参数对应着自己的每一个终端不同的出厂序列号

333 终端调用注册 API

API 实际是 HTTP 协议的通信协议终端也可以通过封装 HTTP 包发送注册

中移物联网有限公司 OneNET 开发文档中心

设备请求的方式调用 API

终端调用注册 API 创建设备并接入的流程如图 3-29所示

平台

TCP连接协议接入机

创建产品

发送连接报文

连接应答

数据应答

发送数据报文

生成连接报文

设备

发送下行命令 下发命令

解析下行命令

生成存储数据报文

解析连接应答

解析数据应答

必要流程

可选流程

存储到数据流 数据源 创建应用

心跳应答

发送心跳报文生成心跳报文

解析心跳应答

平台操作

设备操作

利用设备本身的sn和产品的设备注册码生成注册报文

TCP连接API服务器

发送注册报文

注册应答

解析设备ID

创建设备

设备开机

读取硬件中烧录的设备编号(sn)

图3-29 终端调用注册API接入流程

1) 创建产品

重要参数产品 ID注册码产品 APIKey(见附录一)

2) 生成并发送注册报文

每一个用户终端中都有厂商烧录的唯一出厂序列号(sn)终端上电

之后应该首先读取自己的 sn然后通过 1)中的注册码和 sn 一起组成注

册报文

注册报文格式如下例

POST httpapihecloudscomregister_deregister_code=6TM7OkhNsTjATvFx HTTP11

Host apihecloudscom

Content-Length 48

中移物联网有限公司 OneNET 开发文档中心

sn02136616511001titletestdevice0001

其中

6TM7OkhNsTjATvFx 为产品注册码

02136616511001 是本例中模拟的设备唯一编号

testdevice0001 是本例中模拟的设备名

若上传的数据格式以及参数鉴权均正确则平台会返回设备创建成功

返回设备 ID以及该设备对应的设备 api-key

HTTP11 200 OK

Date Wed 09 Aug 2017 064821 GMT

Content-Type applicationjson

Content-Length 95

Connection keep-alive

Server Apache-Coyote11

Pragma no-cache

errno0datadevice_id11142371keyq9Mw0zqiAPjTwqfyCk2mWrUi8=errorsucc

3) 在步骤 2)完成之后平台上的设备就已经成功创建了终端需要

重新 TCP连接到对应协议的服务器上完成设备连接(与设备进行映射)以

及上传数据的操作

34 设备 ID 与产品序列号

通过 OneNET构建的物联网系统中有两套比较重要的编码设备 ID与产品序列号

(SN)其中

产品序列号是由厂商指定的在厂商的产品范围内是保持唯一的在出厂前烧写到每

一个终端中通常包含在与平台通信的数据中并以条形码的方式贴在产品的包装上用

于从用户的角度区分每一个独立的终端

设备 ID是在平台创建设备时由 OneNET分配的平台范围内唯一的编号应用于第三

方平台调用 OneNET API时使用

在创建设备时OneNET平台需要用户以设备 sn为参数进行设备创建成功之后平

台会分配一个设备 ID这样 OneNET内部就有了一个 sn-设备 ID的映射关系

终端登陆使用的鉴权信息是出厂时烧写好的 sn鉴权通过之后平台可以将该终端

上传是数据放到对应的设备中

上层应用通过创建设备 API或者查询设备 API建立 sn-设备 ID映射表在需要操作

某一设备时首先可以获取的是终端的 sn号(因为对用户是可见的)通过映射表获取设

中移物联网有限公司 OneNET 开发文档中心

备 ID然后再通过 API访问 OneNET平台上的对应设备

两套编码在物联网系统中的应用位置如下图所示

物联网应用

OneNET

终端

(烧写sn)

HTTP API 以设备ID为参数进行API访问

接入协议以sn为鉴权参数进行设备连接

设备

设备名

设备ID

设备sn

设备标签

sn 设备ID

snmdash设备ID映射表

中移物联网有限公司 OneNET 开发文档中心

第四章 第三方应用开发

第三方应用与 OneNET 平台的业务逻辑关系如图 4-1 所示第三方应用与

OneNET平台之间通过 HTTPS请求应答的方式实现数据交互OneNET 平台为第三

方应用提供封装好的 API 接口应用平台通过调用这些 API 接口完成对 OneNET

平台的读写执行以及设备管理请求然后 OneNET 平台会将相应的指令请求发送

到终端设备OneNET 平台收到终端设备响应的数据及设备信息后会将数据及

设备信息推送到应用平台完成应答

下面将分别介绍第三方应用接入 OneNET 平台的步骤OneNET平台提供的数

据推送功能以及 OneNET 平台为第三方应用封装好的 API接口

图4-1 第三方应用与OneNET平台的逻辑关系

41 第三方应用接入 OneNET 平台

第三方应用与 OneNET平台实现数据交互的前提是已经建立连接第三方应

用接入 OneNET平台的开发流程如图 4-2所示包括三个步骤

(1) 在 OneNET 平台创建了设备该设备有对应的真实设备且能正常上报

数据

(2) 用户已经开发并部署了 OneNET平台验证接入的程序

(3) 在 OneNET 平台正确配置了第三方应用数据接收的地址(URL)

Token以及其他参数

中移物联网有限公司 OneNET 开发文档中心

在确保上述第(1)步已经实现的基础上下面将分别讲述第(2)步和第

(3)步的实现过程

图4-2 数据推送的开发流程

412 第三方应用平台接入验证程序

第三方应用平台接入验证程序工作流程如下所述当 OneNET 平台完成对第

三方开发平台的配置后会向第三方开发平台发起 URLampToken验证接入验证程

序对平台发送的验证参数进行验证验证通过后第三方开发平台会向 OneNET

平台返回验证消息当 OneNET 平台收到验证消息后说明第三方开发平台与

OneNET平台已建立连接

目前 OneNET平台为第三方应用平台提供接入验证程序的 SDK有 Javaphp

Nodejs和 C四个版本

SDK 下载地址httpsopeniot10086cndocart432html118 -ldquo数

据推送rdquo

413 OneNET 平台配置第三方应用平台

在 OneNET平台对第三方应用平台的配置界面如图 4-3所示

URL第三方开发平台的地址

Token可以自定义用于第三方开发平台接入平台握手验证

消息加解密方式有明文模式和安全模式当启用安全模式后平台端需要

用户自定义 AESKey 或者由平台随机生成在应用程序中使用该 AESKey 解密消

中移物联网有限公司 OneNET 开发文档中心

推送时间限制(秒)和推送数据限制(个)设置ldquo推送时间限制rdquoldquo推送数

据限制rdquo可以实现批量推送数据减少服务器压力当满足ldquo推送时间限制rdquo和

ldquo推送数据限制rdquo要求后OneNET 将给第三方推送数据如果没有设置ldquo推送

时间限制rdquo和ldquo推送数据限制rdquo将默认数据实时推送

图4-3 第三方开发平台的配置界面

当用户成功在 OneNET 平台配置了第三方开发平台服务器地址后点击ldquo提

交rdquo按钮后OneNET 平台会向第三方应用平台发起 URLampToken 验证请求验证

通过且收到第三方返回的验证消息后则第三方应用平台与 OneNET 平台已建立

连接之后OneNET 平台在收到设备数据时会将设备数据推送到已配置的第三

方应用平台

用户数据接收服务程序接收到 OneNET平台发送的 ldquoURLampTokenrdquo验证请求

请求的格式形如httpipporttestmsg=xxxampnonce=xxxampsignature=xxx

蓝色字体部分为用户在 OneNET平台配置的 URL常规的验证流程如下

(1)在请求中获取参数ldquononcerdquoldquomsgrdquo的值将ldquotokenrdquo(此为页面

配置参数 token的值)ldquononcerdquoldquomsgrdquo的值计算 MD5(token+nonce+msg)

加密值并且编码为 Base64字符串值

中移物联网有限公司 OneNET 开发文档中心

(2)将上一步中 Base64字符串值通过 URL Decode 计算后的值与请求参数

ldquosignaturerdquo的值进行对比如果相等则表示 token验证成功

(3)如果 token 验证成功向 OneNET 平台返回ldquomsgrdquo参数值否则返回

其他值

说明如果用户不想验证 Token 的有效性可以忽略以上步骤并直接向

OneNET平台返回ldquomsgrdquo参数值

42 OneNET 平台数据推送

平台以 HTTPS POST 请求形式向第三方应用平台注册地址推送数据推送数

据相关信息以 JSON 串的形式置于 HTTPS请求中的 body部分

第三方应用平台在接收数据时会接收到数据的明文消息或者密文消息

明文消息中以ldquotyperdquo的数值区分不同的消息而密文消息与明文消息的区别

是ldquomsgrdquo部分经过了加密处理下面将分别对明文消息密文消息以及消息相

关字段和密文的加密算法进行说明

421 明文消息

明文消息有两种消息类型分别为数据点消息和设备上下线消息而数据点

消息又分为单条数据点消息和数据点消息批量形式数据点消息批量形式中的不

同数据点是以不同时间戳区分的

(1)数据点消息(type=1)

msg

type 1

dev_id 2016617

ds_id datastream_id

at 1466133706841

value 42

msg_signature message signature

nonce abcdefgh

(2)数据点消息批量形式(type=1)

msg [

type 1

dev_id 2016617

ds_id datastream_id

中移物联网有限公司 OneNET 开发文档中心

at 1466133706841

value 42

type 1

dev_id 2016617

ds_id datastream_id

at 1466133706842

value43

]

msg_signature message signature

nonce abcdefgh

(3)设备上下线消息(type=2)

msg

type 2

dev_id 2016617

status 0

login_type 1

at 1466133706841

msg_signature message signature

nonce abcdefgh

422 密文消息

密文消息中的ldquoenc_msgrdquo是由明文消息中的ldquomsgrdquo采用 AES 加密算法而

enc_msgxxxx

msg_signature

message signature

nonceabcdefgh

423 消息相关字段说明

表4-1 消息相关字段说明

字段 字段说明

type 标识数据类型当前版本范围[15]

dev_id 设备 ID

ds_id 公 开 协 议 中 的 数 据 流 ID 其 格 式 为

objectID_instanceID_resourceID

at 平台时间戳单位 ms

value 具体数据部分为设备上传至平台或触发的相关

数据

中移物联网有限公司 OneNET 开发文档中心

status 设备上下线标识

0-下线 1-上线

login_type

设备登陆协议类型

1EDP 2nwx 3JTEXT 5JT808 6

MODBUS 7MQTT 8gr2010NB-IoT

cmd_type

命令响应的类型

1设备收到 cmd的 ACK 响应信息 2设备收到

cmd的 Confirm响应信息

cmd_id 命令 ID

msg_signatur

e 消息摘要

nonce 用于计算消息摘要的随机串

enc_msg 加密密文消息体对明文 JSON串(msg字段)的

加密

424 加密算法详述

平台基于 AES算法提供加解密技术具体阐述如下

EncodingAESKey 即消息加解密 Key 的 BASE64编码形式长度固定为 43

个字符从 a-zA-Z0-9共 62个字符中选取由服务开启时填写后

也可申请修改

AES密钥计算为 AESKey=Base64_Decode(EncodingAESKey + ldquo=rdquo)

EncodingAESKey 尾部填充一个字符的ldquo=rdquo 用 Base64_Decode 生成 32

个字节的 AESKey

AES采用 CBC 模式秘钥长度为 32 个字节(256位)数据采用

PKCS7填充 初始化 iv向量取秘钥前 16字节 PKCS7K为秘钥字

节数(采用 32)buf为待加密的内容N为其字节数Buf 需要被填

充为 K的整数倍在 buf的尾部填充(K-NK)个字节每个字节的内容

是(K- NK)具体详见toolsietforghtmlrfc2315

BASE64采用 MIME格式字符包括大小写字母各 26个加上 10个数

字和加号ldquo+rdquo斜杠ldquordquo一共 64个字符等号ldquo=rdquo用作后缀填

出于安全考虑平台网站提供了修改 EncodingAESKey的功能(在

EncodingAESKey 可能泄漏时进行修改对应上第三方平台申请时填写

的接收消息的加密对称密钥)所以建议保存当前的和上一次的

中移物联网有限公司 OneNET 开发文档中心

EncodingAESKey若当前 EncodingAESKey 生成的 AESKey解密失败则

尝试用上一次的 AESKey的解密

平台的加密消息部分为 enc_msg= Base64_Encode( AES_Encrypt

[random(16B)+msg_len(4B)+msg] )即以 16字节随机字节串拼接 4字

节表示消息体长度的字节串(此处 4 字节长度表示为网络字节序)再加

上消息本身的字节串作为 AES加密的明文再以 AES算法对明文进行加

密生成密文最后对密文进行 BASE64 的编码操作生成加密消息体

对加密消息体的解密流程为1)首先进行加密消息体的 BASE64 解码操作

aes_msg=Base64_Decode(enc_msg)2)对获取的解码内容以 AES 算法进行解密

操作获取明文部分plain_msg=AES_Decrypt(aes_msg)解密中使用的秘钥由

EncodingAESKey 计算得来使用的初始化 iv 向量为计算出的 aes 秘钥的前 16

字节3)去掉 plain_msg 的前 16 字节再以前 4 字节取出消息体长度根据消

息体长度获取真实的消息部分(推荐以消息体长度获取真实消息以兼容

plain_msg 未来可能出现的结构变更)表示加密传输的数据后两字段与明文

传输一致

43 API 接口

第三方开发平台应用层通过 Rsetful API 的方式和 OneNET平台进行交互对

接实现命令的下发数据的读写以及相关业务的交互

针对 MQTT 协议目前主要开发了以下 API 用来实现第三方开发平台向

OneNET平台请求读写执行以及设备管理请求具体见下表 4-2下面分别对每一

种 API进行说明

表4-2 API功能说明

API 类别 操作对象 API名称

需要终端响应 只需平台响应

设备

注册

更新设备注册属性

新增

更新

精确查询单个设备

中移物联网有限公司 OneNET 开发文档中心

模糊查询设备

批量查询设备状态

删除

数据流

新增

更新

查询单个数据流

查询多个数据流

删除

数据点

新增

查询

二进制数

新增

查询

触发器

新增

更新

查询单个触发器

模糊查询触发器

删除

触发数据内容

命令

发送命令

查询命令状态

查询命令相应

查询设备历史命令

视频能力 获取播放地址

APIKEY

新增

更新

查看

删除

消息订阅

按 Topic发送命令

查询订阅指定 Topic设备的列表

查询设备订阅的 Topic列表

删除产品的 Topic

查询产品的 Topic

中移物联网有限公司 OneNET 开发文档中心

432 设备

4321 注册

表4-3 设备注册

HTTP方法 POST

URL apihecloudscomregister_de

URL参数 register_code=6TM1OkhNsTjATvFx 设备注册码(必填)

HTTP内容

(示例)

sn 2015031401421 设备唯一标识 string类型最长 512字符

mac C89346DA4373 设备唯一 mac标识最长 32字符

title myedpdevice 设备名(可选) 最长 32个字符

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

keyQ1VdWoEvdkCye=d1=HcCSP6LvCw= 新设备 apikey

device_id 325018 设备 ID

说明

1 响应消息中 errno 表示错误码error 表示错误原因如果创建设备失

败则没有 data字段

2 snmac一定要必填其中一个而且只可以传一个用于鉴权就是设备

新增中的 auth_info

3 此接口根据产品设置的不同默认 allow_dup=true可以生成新设备及

key或获取原有设备及 key见下表

表4-4 对应表

产品允许重复 sn 在产品中已存在 sn 在产品中不存在

allow_dup=true 是 sn 对应的设备 id 和 key 新的设备 id 和 key

allow_dup=false 否 报错 新的设备 id 和 key

中移物联网有限公司 OneNET 开发文档中心

此接口返回的新设备默认设备名均为auto_register均为私有设

备设备协议与产品协议相同

4322 更新设备注册属性

表4-5 更新设备注册属性

HTTP方法 PUT

URL apihecloudscomregister_attr

HTTP头部 api-key xxxxddddsssaaa 必须为 masterkey

HTTP内容

(示例)

allow_dup true|false是否允许重复提交相同的设备 sn 默认 true

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

默认 allow_dup 为 true主要用于设备注册码创建设备属性限制

4323 新增

表4-6 新增设备注册属性

HTTP方法 POST

URL apihecloudscomdevices

HTTP头部 api-key xxxxddddsssaaa 必须为 masterkey

HTTP内容

(示例)

title mydevice 设备名

desc some description 设备描述(可选)

tags [chinamobile] 设备标签(可选可为一个或多个)

protocolMQTT 选择一种接入协议(可选默认为 HTTP)

location lon 106 lat 29 ele 370设备位置纬度

经度 高度(可选)

private true| false 设备私密性(可选默认为 ture)

auth_info 201503041a5829151 MQTT设备设备唯一编号

other version 100 manu china mobile 其他信息(可

选JSON格式可自定义)

HTTP响应响

应消息内容

(实例)

errno 0

error succ

data

中移物联网有限公司 OneNET 开发文档中心

device_id233444 平台分配的设备 ID

4324 更新

表4-7 更新

HTTP方法 PUT

URL apihecloudscomdevicesdevice_id

HTTP头部 api-key xxxxddddsssaaa masterkey或设备 apikey

HTTP内容

(示例)

title mydevice 设备名(可选)

desc some description 设备描述(可选)

tags [chinamobile] 设备标签(可选)

protocolMQTT 选择一种接入协议(可选)

location lon106 lat 29 ele 370设备位置经度

纬度 高度(可选)

private true| false 设备私密性(可选)

auth_info201503041a5829151 MQTT设备设备唯一编号(可选)

other version 100 manufacturer china mobile 其

他信息(可选)

HTTP响应响

应消息内容

(示例)

errno 0

error succ

中移物联网有限公司 OneNET 开发文档中心

4325 精确查询单个设备

表4-8 精确查询单个设备

HTTP方法 GET

URL apihecloudscomdevicesdevice_id

HTTP头部 api-key xxxxddddsssaaa masterkey 或设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

iddevice_id

tags [chinamobile]

onlinetrue|false

protocolMQTT

titlemy device1

descsome description

create_time2015-09-16 102222

privatetrue|false

locationele370lat17609lon17703

auth_infohellip

otherversion100manufacturerchina mobile

keys[titledevice-auto-keykey2JO3B12O1]

数据流

datastreams[

create_time 2014-10-23 202222

iddatastream_id1

unitcelsius

unit_symbolC

uuid 231a5aa9-9de4-5f2e-9e0f-015181c98429

]

4326 模糊查询设备

表4-9 模糊查询设备

HTTP方法 GET

URL apihecloudscomdevices

中移物联网有限公司 OneNET 开发文档中心

URL 参数

key_words=my 匹配关键字(可选从 id和 title字段中左匹配)

auth_info=203x1 鉴权信息(可选对应注册时的 sn参数唯一设

备编号)

tag=mobile 标签(可选)

online=true| false 在线状态(可选)

private=true| false 私密性(可选)

page=1 指定页码最大页数为 10000(可选)

per_page=30 指定每页输出设备个数默认 30最多 100(可选)

device_id=235122 指定设备 ID多个用逗号分隔最多 100个(可

选)

begin=2016-06-20 起始时间包括当天(可选)

end=2016-06-20 结束时间包括当天(可选)

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

total_count1

per_page30

page1

devices

[

id3497307

titlemy device1

desc device desc

privatetrue

protocolMQTT

onlinefalse

locationlon10655231191544001lat29535451246673

create_time2013-02-11 122233

auth_infoSYSz=8QY3r7aTQ48UKfqPnB=PybYRo=

]

4327 批量查询设备最新数据

表4-10 批量查询设备最新数据

HTTP方法 GET

中移物联网有限公司 OneNET 开发文档中心

URL apihecloudscomdevicesdatapoints

URL参数 devIds=1221122331123 设备 id用逗号隔开限制 1000 个设备

HTTP头部 api-key xxxxddddsssaaa masterkey 或设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

error ldquosuccrdquo

data

devices [

id 12323 设备 id

title daf设备名

datastreams

[

id temperature数据流名称

at 2017-02-12 102222数据流更新时间

value 12数据流最新数据

hellip

helliphellip

]

hellip

hellip

]

4328 删除

表4-11 删除设备

HTTP方法 DELETE

URL apihecloudscomdevicesdevice_id

HTTP头部 api-key xxxxddddsssaaa 可为设备级别的 Key

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

中移物联网有限公司 OneNET 开发文档中心

说明删除设备会删除该设备下所有数据流和数据点删除设备动作是异步

的系统会在后续逐步删除该设备下的数据流和数据点

433 数据流

4331 新增

表4-12 新增数据流

HTTP方法 POST

URL apihecloudscomdevicesdevice_iddatastreams

HTTP头部 api-key xxxxddddsssaaa masterkey 或设备 apikey

HTTP内容

(示例)

idtemperature 数据流名称 示例温度

tags[Tag1Tag2] 数据流标签(可选可以为一个或多个)

unitcelsius 单位(可选)

unit_symbolC 单位符号(可选)

HTTP响应响

应消息内容

(示例)

errno 0

data

ds_uuid 9e6bcac9-2c6f-59d5-adae-3955df2e7bce平台分配

数据流 UUID

error succ

4332 更新

表4-13 更新数据流属性

HTTP方法 PUT

URL apihecloudscomdevicesdevice_iddatastreamsdatastream_id

示例apihecloudscomdevices421240datastreamstemperature

HTTP头部 api-key xxxxddddsssaaa masterkey 或设备 apikey

HTTP内容

(示例)

tags[Tag1Tag2] 数据流标签(可选)

unitcelsius 单位(可选)

unit_symbolC 单位符号(可选)

HTTP响应响

应消息内容

(示例)

errno 0

error succ

中移物联网有限公司 OneNET 开发文档中心

4333 查询单个数据流

表4-14 查询单个数据流

HTTP方法 GET

URL apihecloudscomdevicesdevice_iddatastreams

URL参数 datastreams_ids = 查看的 datastream的 id

HTTP头部 api-key xxxxddddsssaaa masterkey 或该设备的设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

data [

update_at 2018-06-29 112938 数据流最后更新时

id 湿度 数据流名称

create_time 2018-06-28 170548数据流创建时间

current_value 53845013最新数据点

]

error succ

4334 查询多个数据流

表4-15 查询多个数据流

HTTP方法 GET

URL apihecloudscomdevicesdevice_iddatastreams

URL 参数

datastream_ids= 查看的 datastream的 id多个 id之间用英文逗号

分开(参数缺省时为查询所有数据流)

示例

apionenetcomdevices1234datastreamsdatastream_ids=tempgps

表示查看 temp和 gps两个数据流的信息

HTTP头部 api-key xxxxddddsssaaa masterkey 或者 该设备的设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data 数据流信息

[

idtemperature 数据流名称设备范围内唯一

tags[Tag1Tag2] 数据流标签

unitcelsius 单位

unit_symbolC单位符号

create_timexxxx-xx-xx 102222 创建时间

中移物联网有限公司 OneNET 开发文档中心

current_valuehellip该数据流下数据点最新值

update_atxx-xx-xx该数据流下数据点最新上传时间

]

[

idhumi 数据流名称设备范围内唯一

tags[Tag1Tag2]

unit_symbol

create_timexxxx-xx-xx 102222

current_valuehellip

update_atxx-xx-xx

]

[]

4335 删除

表4-16 删除数据流

HTTP方法 DELETE

URL apihecloudscomdevicesdevice_iddatastreamsdatastream_id

URL参数 无

HTTP头部 api-key xxxxddddsssaaa masterkey 或者设备 key

HTTP响应响

应消息内容

(示例)

errno 0

error succ

434 数据点

4341 新增

中移物联网有限公司 OneNET 开发文档中心

表4-17 新增数据点

HTTP方法 POST

URL apihecloudscomdevicesdevice_iddatapoints

URL参数 type=3 上传数据类型(可选默认为完整 JSON型见 HTTP内容示

例)

HTTP头部 api-key xxxxddddsssaaa masterkey 或者 设备 apikey

HTTP内容

(示例)

datastreams

[

id temperature 数据流名称或数据流模板名称

datapoints [

at 2013-04-22T003543 上传数据点时间可选如

果为空则设备云会取当前时间如果存在其格式必须为 YYYY-MM-

DDThhmmss的形式(例如2015-03-22T223112)

value 42 上传数据点值

at 2013-04-22T005543

value 84 上传数据点值

]

id key 数据流名称或数据流模板名称

datapoints [

at 2013-04-22T003543上传数据点时间可选

value hellip上传数据点值

at 2013-04-22T003543

value hellip上传数据点值

]

hellip

]

中移物联网有限公司 OneNET 开发文档中心

HTTP 响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

1 可以一次性向设备云上传多个数据流每个数据流中可以包括多个数据

点示例程序表示向设备云上数据流 temperature 和数据流 key上传数据其中

temperature数据流有两个数据点key数据流也有两个数据点

2 如果某个数据流不存在则在增加数据点时设备云会自动创建一个新

的数据流注意新数据流的 datastream id 不可为空

3 数据点表示在某个时刻该数据流的值其 at表示时间为可选字段如

果为空则设备云会取当前时间如果存在其格式必须为YYYY-MM-DDThhmmss

的形式(例如2015-03-22T223112)

4 数据点中的 value表示具体的值其值为 JSON对象可以为整型浮点

型字符串多种类型如果 value部分用双引号括起来则其在设备云存储为字

符串如果不用双引号括起来则其表示数值字符编码现在只支持 UTF-8

5 数据点对应的时间是数据点的标识的一部分相同时间的两个数据点

设备云会同时对这两个相同时间的数据点进行保存不会出现覆盖另一个数据点

的情况一般如果 at 部分取空设备云会取系统时间精度为毫秒如果在一

条命令中某一个数据流包含多个数据点都没有 at 字段设备云将会对所有数据

点进行保存

6 新增数据点支持如下简写方式在请求的 URL中增加 type字段指示所

使用的格式类型目前 type支持 345三种情况

URLapihecloudscomdevices2214570datapointstype=3

示例temperature225humidity952

表示在数据流 temperature中增加一个数据点 225在 humidity 中增加一

个数据点 952

URLapihecloudscomdevices2214570datapointstype=4

示例temperature2015-03-22T223112225

表示在数据流 temperature中加一个数据点在 2015年 3月 22 日 22点 31

中移物联网有限公司 OneNET 开发文档中心

分 12秒的值为 225

URLapihecloudscomdevices2214570datapointstype=5

示例temperature2015-03-22T223112225pm2589

表示在数据流 temperature中加一个数据点即 2015年 3月 22 日 22点 31

分 12秒的值为 225在数据流 pm25中添加一个数据点即当前时间的值为 89

4342 查询

表4-18 查询数据点

HTTP方法 GET

URL apihecloudscomdevicesdevice_iddatapoints

URL 参数

datastream_id=abc 查询的数据流多个数据流之间用逗号分隔

(可选)

start=2015-01-10T080035 提取数据点的开始时间(可选)

end=2015-01-10T080035 提取数据点的结束时间(可选)

duration=3600 查询时间区间(可选单位为秒)

start+duration按时间顺序返回从 start开始一段时间内的数据点

end+duration按时间倒序返回从 end回溯一段时间内的数据点

limit=100 限定本次请求最多返回的数据点数0ltnlt=6000(可选

默认 1440)

cursor= 指定本次请求继续从 cursor位置开始提取数据(可选)

sort=DESC | ASC 值为 DESC|ASC时间排序方式DESC倒序ASC升

序默认升序

ltnlt=6000(可选默认 1440)

HTTP头部 api-key xxxxddddsssaaa masterkey 或者 该设备的设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

cursor70921_3771908_1472355096

datastreams[

idtemperature数据流名称或数据流模板名称

datapoints[

at xxxx-xx-xx 102222value42数据点上传时间和

at xxxx-xx-xx 102222value84

]

中移物联网有限公司 OneNET 开发文档中心

idkey 数据流名称或数据流模板名称

datapoints[

at xxxx-xx-xx 102222valuehellip

atxxxx-xx-xx 102222valuehellip

]

hellip

]

1 若不携带任何参数平台返回本设备所存在的所有数据流中的最新数据

(这一种情况下查询时出现时延较大的性能问题建议在 URL 参数中加上

newadd参数并将其值赋为 true如 newadd=true)

2 若不携带数据流 id参数携带 limit 参数时会返回该设备每个数据流

最多 limit 条数据

3 若要查看某一条数据流数据需在上述 URL中增加参数 datastream_id

4

apihecloudscomdevices564280datapointsdatastream_id=tempamplimit

=10会返回数据流temp中最近的 10个数据点

5 要查看某一条数据流在某个时间范围内的数据可以在增加 start和 end

参数

示例

apihecloudscomdevices564280datapointsdatastream_id=temper

atureampstart=2013-05-12T171233ampend=2013-06-12T172233 表示查询本设

备对应的数据流在 2013 年 5 月 12 日 17 点 12 分 33 秒到 17 点 22 分 33 秒的数

据点注意如果 start 参数存在end参数不存在表示取 start后的所有数据

如果 start 不存在end 存在设备云会忽略 end参数注意日期时间格式格

式必须为示例中的格式YYYY-MM-DDThhmmss例如2013-05-12T171233

日期和时间之间用大写字母 T 分隔start 和 end 之间的时间间隔最大为 1 年

超过一年会忽略

如果指定了 start 参数则可能返回的数据点的数目会很多此时默认会返

回最多 100 个数据点可以使用 limit 参数设定返回多少个数据点最大为

6000个数据点当实际的数据点数目多于 limit 限定的数目时返回的 json串

中移物联网有限公司 OneNET 开发文档中心

中会有一个 cursor 字段下一次请求的命令行中可以携带此 cursor 字段表示接

着遍历本数据流此 cursor字段标识上次取出数据点后下一个数据点的位置

435 二进制数据

4351 新增

将二进制数据将作为数据点保存到设备下的某个数据流中设备云返回该二

进制数据的索引号

表4-19 新增二进制数据

HTTP方法 POST

URL apihecloudscombindata

URL参数 device_id=421590 数据所属设备(必选)

datastream_id=bin 该数据所属已经存在的数据流(必选)

HTTP头部 api-key xxxxddddsssaaa masterkey 或者该设备的设备 key

HTTP 内 容

(示例)

普通二进制数据文件图像等

(最大限制为 800上传时间间隔需大于 1ms)

HTTP响应响

应消息内容

(示例)

errno 0

error succ

data

index3491506_1475204886914_bin 二进制数据索引号

4352 查询

表4-20 查询二进制数据

HTTP方法 GET

URL apihecloudscombindataindex

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

普通二进制数据文件图像等二进制形式数据

436 触发器

4361 新增

表4-21 新增触发器

HTTP方法 POST

中移物联网有限公司 OneNET 开发文档中心

URL apihecloudscomtriggers

HTTP头部 api-key xxxxddddsssaaa 必须为 masterkey

HTTP内容

(示例)

titlewen du jian kong 设备名(可选)

ds_idgps 数据流名称(id)(可选)

dev_ids[10272345615523] 设备 ID(可选)

ds_uuids[ 数据流 uuid(可选)

9ad09uac-7446-512f-b07c-90jdnzj8120ad

4599436e-7146-5349-b07c-79fa0919cs62

]

urlxxbbcom

typegt | gt= | lt | lt= | == | inout | in | out |change | frozen |

live

threshold100 阙值根据 type不同见以下说明

1) type 为gt|gt=|lt|lt=|==时threshold必须为数值

2) type为 inout时threshold 设置为lolmt40 uplmt52 表示

数据流的值首次进入或离开闭区间[4052]时触发

3) type为 change时threshold 参数不用传递当上传的值有改变时触发

告警

4) type为 frozen时threshold 为数值指定距离最后一次数据上报多少

秒内未上报数据触发告警同时被监控对象进入 frozen状态

5) type 为 live 时threshold 为数值指定距离最后一次数据上报多少秒

后上报数据触发告警

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

tirgger_id233444 触发器 ID

说明

1触发器的含义是当指定范围内的数据点满足触发条件的要求时会向

url参数指定的地址发送 post请求

2触发器有三种工作触发模式

1)在请求参数中单独指定了 ds_id不包括其他参数那么当前项目下

中移物联网有限公司 OneNET 开发文档中心

所有设备的数据流中数据流名称符合 ds_id 的数据都会进入触发判断逻辑

2)在请求参数中单独指定了 ds_uuids 数组那么只有这些指定的数据

流会进入触发判断逻辑

3)在请求参数中指定了 ds_id 和 dev_ids那么只有这些指定的设备的

数据流会进入触发判断逻辑

4362 更新

表4-22 更新触发器属性

HTTP方法 PUT

URL apihecloudscomtriggerstirgger_id

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP内容

(示例)

titlewen du jian kong

ds_uuids[

9ad09uac-7446-512f-b07c-90jdnzj8120ad

4599436e-7146-5349-b07c-79fa0919cs62

]

urlxxbbcom

typegt | gt= | lt | lt= | == | inout | in | out | exp | change |

frozen | live

threshold100

注若要修改 type需要对应设置 threshold

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

4363 查询单个触发器

表4-23 查询单个触发器

HTTP方法 GET

URL apihecloudscomtriggerstirgger_id

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

idtrigger_id1

中移物联网有限公司 OneNET 开发文档中心

titlewen du jian kong

ds_uuids[

datastream1_uuidrdquo

datastream2_uuidrdquo

datastream3_uuidrdquo

]

urlxxbbcom

typegt|gt=|lt|lt=|==|in|out|exp|change|frozen|live

threshold100

invalidtrue 触发器是否已失效

create_timexx-xx-xx 102222

4364 模糊查询触发器

表4-24 模糊查询触发器

HTTP方法 GET

URL apihecloudscomtriggers

URL 参数

title=name 指定触发器名称

page=1 指定页码可选

per_page=10 指定每页输出个数可选默认 10最多 100

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

total_count600

per_page30

page1

triggers[

idtrigger_id1

titlewen du jian kong

ds_uuids

[datastream1_uuidrdquo datastream2_uuidrdquo]

urlxxbbcom

typegt|gt=|lt|lt=|==|in|out|exp|change|frozen|live

threshold100

invalidtrue 触发器是否已失效

create_timeXXXXXXXX

中移物联网有限公司 OneNET 开发文档中心

]

说明触发器失效是指触发器所依赖的数据流或者设备被删除了此时触发

器永远不会有效触发事件

4365 删除

表4-25 删除触发器

HTTP方法 DELETE

URL apihecloudscomtriggerstirgger_id

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno 0

error succ

4366 触发数据内容

触发数据是指当 OneNET 设备云判断某个触发器的触发条件满足时会通过

POST方式向外抛出的 URL请求在 HTTP的 POST消息体中会携带如下格式的 JSON

字符串

表4-26 触发器内容

数据内容

(示例)

trigger

id1

threshold90

typegt

current_data[

dev_id2656

ds_idgps

ds_uuidFWEF-ZFW-ZFW-ZFWW

at2009-09-07T121602001403Z

value100

dev_id2656

ds_idtemper

中移物联网有限公司 OneNET 开发文档中心

ds_uuidFEWEF-ZFWFWW-WFWW-FWEFFWW

at2009-09-07T121602001403Z

value882

]

437 命令

命令是指应用发送命令数据给 OneNET设备云再由 OneNET设备云转发给终

端设备终端设备收到命令后可以向设备云反馈响应的一种工作机制命令下发

后应用可以通过 API查询命令状态和提取命令的响应数据

命令的执行步骤如下

1应用通过 API 向设备云发送命令数据

2设备云生成该命令的 uuid作为该命令的唯一标识并向应用返回同时向

终端设备转发命令数据

3 终端设备收到命令数据后执行命令数据可以生成响应也可以不响应

4设备云跟踪记录命令的响应如果设备有响应就关联命令 uuid和响应

结果

5应用通过 API 向设备云提取命令执行结果(API 请求中携带命令 uuid 标

识)

特别说明

命令下发到终端设备后如果终端设备 10 秒内未收到响应则此命令的状

态将被设置为超时应用通过 API 查询命令状态时会反馈超时超过 10 秒后

收到的响应会被丢弃

终端设备针对同一条命令回复多条命令响应只有在未超时时间内收到的最

后一条是有效响应前面的响应包将会被覆盖因此终端设备应该对每个命令只

有一个响应包

4371 发送命令

表4-27 发送命令

HTTP方法 POST

URL apihecloudscomcmds

URL 参数 device_id=415120 接收该数据的设备 ID(必选)

中移物联网有限公司 OneNET 开发文档中心

qos=0 | 1 是否需要响应默认为 0

0不需要响应即最多发送一次不关心设备是否响应

1需要响应如果设备收到命令后没有响应则会在下一次设备登陆

时若命令在有效期内(有效期定义参见 timeout参数)则会继续发送

对响应时间无限制多次响应以最后一次为准

本参数仅当 type=0时有效

timeout=300 命令有效时间默认 0

0在线命令若设备在线下发给设备若设备离线直接丢弃

gt0 离线命令若设备在线下发给设备若设备离线在当前时间

加 timeout时间内为有效期有效期内若设备上线则下发给设备单

位秒有效围0~2678400

本参数仅当 type=0时有效

type=0 | 1 默认 00发送 CMD_REQ包1发送 PUSH_DATA包

HTTP头部 api-key xxxxddddsssaaa masterkey或者设备 apikey

HTTP内容 用户自定义数据jsonstring二进制数据(小于 64K)

HTTP响应响

应消息内容

(示例)

errno 0

error succ

data

cmd_uuid2302-312-FWs 命令 id

4372 查询命令状态

表4-28 查询命令状态

HTTP方法 GET

URL apihecloudscomcmdscmd_uuid

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno 0

error succ

data

status1

0设备不在线|Device not online

1命令已创建| Command Created

2命令已发往设备| Command Sent

3命令发往设备失败| Send Command Failed

4设备正常响应| Command Response Received

5命令执行超时| Command Response Timeout

6设备响应消息过长 | Command Response Too Large

descldquosendingrdquo

中移物联网有限公司 OneNET 开发文档中心

4373 查询命令响应

表4-29 查询命令响应

HTTP方法 GET

URL apihecloudscomcmdscmd_uuidresp

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP 响应响

应消息内容

用户设备返回的响应内容

4374 查询设备历史命令

表4-30 查询设备历史命令

HTTP方法 GET

URL apihecloudscomcmdshistoryltdevice_idgtltdevice_idgt

URL 参数

start=2015-01-10T080035 查询的开始时间(可选)

end=2015-01-10T080535 查询的结束时间(可选)

page=1 指定页码最大页数为 10000(可选)

per_page=30 指定每页输出设备个数默认 30最多 100(可选)

HTTP头部 api-key xxxxddddsssaaa

HTTP响应响

应消息内容

errno 0

error succ

data

page 1当前页码

per_page 10当前每页总数

total_count 100

items [

cmd_uuid 2302-312-FWs

device_id 2设备 ID

expire_time 2016-07-05 000000过期时间

status 0命令状态

send_time 2016-07-05 000000发送时间

confirm_time 2016-07-05 000000响应时间

confirm_body 2463726571007b202274797022 响应内容

16进制字符

body 2463726571007b202274797022请求内容16进制字符

hellip

中移物联网有限公司 OneNET 开发文档中心

hellip

]

438 视频能力

4381 获取播放地址

表4-31 获取播放地址

HTTP方法 GET

URL apihecloudscomipcrtmp_address

URL 参数

device_id= 接收该数据的设备 ID(必填)

channel_id = 对应数据流名称中的 channelnum

protocol_type = 播放协议类型 0rtmp1hls2http-flv

HTTP头部 api-key xxxxddddsssaaa masterkey或者设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

errorrdquosuccrdquo

ldquodatardquo

addripport

accessTokenldquo字符串rdquo

439 APIKEY

4391 新增

表4-32 新增 APIKEY

HTTP方法 POST

URL apihecloudscomkeys

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP内容

(示例)

title sharing key key 的命名

permissions [

resources [ 被授权的资源

中移物联网有限公司 OneNET 开发文档中心

dev_id 424 被授权的设备 id

dev_id 425 被授权的设备 id

hellip

hellip

]

access_methods [ 被授权的命令

get

put

post

]

]

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data key2302-312-FWs key_string

说明授权命令是可选的另外被授权的命令也可以是 getputpost 的

一个或几个如只授权 get和 put命令

access_methods [getput]

4392 更新

表4-33 更新 APIKEY

HTTP方法 PUT

URL apihecloudscomkeyskey_string

HTTP头部 api-key xxxxddddsssaaa masterkey(注只能为 master-key)

HTTP内容

(示例)

title sharing key key 的命名

permissions [

resources [ 被授权的资源

dev_id 424 被授权的设备 id

ds_idfan1 数据流 id可选

中移物联网有限公司 OneNET 开发文档中心

dev_id 425 被授权的设备 id

ds_idfan1 数据流 id可选

hellip

hellip

]

access_methods [ 被授权的命令可选

get

put

post

]

]

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

说明

1对于 masterkey 不允许更新操作masterkey 默认具有最大权限可以访

问该用户名下所有设备所有数据

可以进行 POSTGETPUTDELETE操作如果更新 master key 系统会返回

失败

2授权命令是可选的另外被授权的命令也可以是 getputpost 的一个

或几个如只授权 get和 put命令

access_methods [getput]

3API key 更新是覆盖操作会将原来存在的授权资源和授权命令覆盖不

会保留原来的授权资源和授权命令

4393 查看

中移物联网有限公司 OneNET 开发文档中心

表4-34 查看 APIKEY

HTTP方法 GET

URL httpapihecloudscomkeys

URL 参数

key = FWJPO-FZFHW-FFEWB可选只查看该 key相关信息

page = 1 指定页码 可选

per_page = 10 指定每页输出个数可选默认 10最多 100

device_id = xxbbcc可选只查看与该设备相关的非 master-key

HTTP头部 api-key xxxxddddsssaaa masterkey(注只能为 master-key)

HTTP响应响

应消息内容

(示例)

errno 0

data

per_page 30

total_count 2

keys [

create_time 2015-11-04 142552

title Auto-generated-master-key

key 03GeDLYk0WNk1V338g7yndKZYkQA

create_time 2015-12-03 100041

permissions [

resources [

dev_id 564280

]

]

title 设备 1测试 Key

key vuHebEWefiU2Ueo5ouoCc1CUsYQ=

]

page 1

error succ

中移物联网有限公司 OneNET 开发文档中心

4394 删除

表4-35 删除 APIKEY

HTTP方法 DELETE

URL httpapihecloudscomkeyskey_string

HTTP头部 api-key xxxxddddsssaaa masterkey(注只能为 master-key)

HTTP 响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

4310 消息订阅

43101 按 Topic 发送命令

表4-36 按 Topic 发送命令

HTTP方法 POST

URL apihecloudscommqtt

URL参数 topic=xxx 设备订阅的主题(必选)

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP 内 容

(示例)

HTTP响应响

应消息内容

(示例)

errno0

errorldquosuccrdquo

data

total_count1

per_page30

page1

devices [123123433333]

43102 查询订阅指定 Topic设备的列表

表4-37 查询订阅制定 Topic设备的列表

HTTP方法 GET

URL apihecloudscommqtttopic_device

URL 参数

topic=xxx 设备订阅的主题(必选)

page=1 当前页码 必填大于等于 1

per_page=10 每页 必填范围 1-1000

中移物联网有限公司 OneNET 开发文档中心

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP内容

(示例)

HTTP响应响

应消息内容

(示例)

errno0

errorldquosuccrdquo

data

total_count1

per_page30

page1

devices [123123433333]

43103 查询设备订阅的 Topic列表

表4-38 查询设备订阅的 Topic列表

HTTP方法 GET

URL apihecloudscommqttdevice_topicdevice_id

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno0

errorldquosuccrdquo

data

[topic_name1 topic_name2 topic_name3]

43104 删除产品的 Topic

表4-39 删除产品的 Topic

HTTP方法 DELETE

URL apihecloudscommqtttopic

URL参数 name=xxx topic名(必选)

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno0

errorldquosuccrdquo

中移物联网有限公司 OneNET 开发文档中心

43105 查询产品的 Topic

表4-40 查询产品的 Topic

HTTP方法 GET

URL apihecloudscommqtttopic

URL参数 无

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno0

errorldquosuccrdquo

data

[topic_name1topic_name2topic_name3]

中移物联网有限公司 OneNET 开发文档中心

第五章 接入实例

51 MQTT-device 接入

511 工具下载

为方便开发人员直观感受使用 mqtt 协议进入平台的便利可使用平台提供

的 MQTT 设备模拟器进行接入平台请在首页-gt开发文档-gt资源下载-gt13 调试

工具下载进行下载如下图

图5-1 资源下载

下载地址

httpupfileshecloudscom123ueditor201707125d5bc37eca39c0c5b7a5bcb9

0e451eeerar

中移物联网有限公司 OneNET 开发文档中心

512 界面说明

图5-2 界面说明

513 使用方法

5131 创建产品

如 323 的过程在设备接入协议中选择 MQTT

中移物联网有限公司 OneNET 开发文档中心

图5-3 选择连接协议

5132 创建设备

如 323描述在平台上新建一个设备

5133 建立连接

在产品概况中可以查看产品 ID此信息填入模拟器 ProductID一栏如下图

图5-4 产品ID

在平台上进入设备信息页面可查看设备 ID及鉴权信息(此鉴权信息是新建设备时候填

写的鉴权信息)如下图

中移物联网有限公司 OneNET 开发文档中心

图5-5 设备ID及鉴权信息

相应把设备 ID及鉴权信息填入模拟器之中然后点击连接按钮如果未弹出提示对话

框则表示设备鉴权成功如下图

图5-6 连接成功

中移物联网有限公司 OneNET 开发文档中心

5135订阅与发布

演示本操作需要在 OneNet平台建立两个基于 MQTT协议的设备一个用于消息发布

另一个用于消息订阅

图5-7 设备状态

开启两个模拟器分别模拟以上两个设备然后建立连接

首先使用订阅主题打开第一个模拟器模拟消息订阅者

图5-8 订阅主题

其次发布主题打开第二个模拟器模拟消息发布者

中移物联网有限公司 OneNET 开发文档中心

图5-9 发布主题

经过以上两个操作后查看模拟消息订阅者的模拟器则收到了主题

为rdquotopic_namerdquo的消息如下图

中移物联网有限公司 OneNET 开发文档中心

图5-10 收到的主题

5136接收平台指令

建立连接后模拟器也可接收来自平台的指令具体操作如下

先打开模拟器-gt建立连接-gt选中【[OneNet]平台指令接收】选项栏利用平台下发指

令功能下发如下图平台下发指令

图5-11 平台发送命令

中移物联网有限公司 OneNET 开发文档中心

图5-12 下发指令

填写好将要发送的消息后点击【发送命令】按钮则模拟器成功接收到来自平台的

数据如下图模拟器截图

图5-13 模拟器收到的指令

5137上传数据点

Mqtt支持 Json 数据格式上报数据现根据 Json几种格式举一些例来演示怎么利用

模拟器上传数据

1)使用 Json数据 Type1上传 Json数据

datastreams[idtemperaturedatapoints[value255]]

中移物联网有限公司 OneNET 开发文档中心

如下模拟器上传数据界面

图5-14 Type1数据格式

则在平台数据展示中则可看到上传的数据点

图5-15 收到数据展示

2)使用 Json数据 Type3示例 Json数据为

temp32humi98

模拟器发送数据截图

中移物联网有限公司 OneNET 开发文档中心

图5-16 Type3数据格式

平台数据展示截图

图5-17 数据展示

3)使用 Json数据 Type4示例 Json数据为

temperature233pm2589

模拟器上传数据截图

中移物联网有限公司 OneNET 开发文档中心

图5-18 Type5数据格式

平台接收数据展示截图

图5-19 数据展示

52 基于麒麟开发板的 MQTT 接入实例

OneNet 平台为使用户能快速接入发布麒麟座开发板官网提交您的创意免

费申请开发板下面利用麒麟座开发板 V31 演示开发板采集温湿度使用 MQTT发

送到平台的接入流程

开发板申请链接httpsopeniot10086cneventdetail185html

521 搭建开发环境

OneNET 平台提供的麒麟座开发板是基予 STM32 单片机开发的一块功能应用

板开发板包含 MCU温湿度传感器GSM 模块WIFI 模块电源模块键盘

中移物联网有限公司 OneNET 开发文档中心

LED以及 lcd显示接口等满足用户对平台接入的基本需求能快速接入到平台

资料包配备完整工程代码方便工程移植等使用

目前 STM32 开发常用的 IDE 有 IARMDK 等我挑选 MDK 作为开发工具打

开工具包先安装 MDK511A安装完毕后再安装 MDKCM511A开发板所有资料软件

工具包下载案例包

案例包下载链接

httpspanbaiducoms1UB1qZGrVuovSVdbqqXP0Lglistpath=2F

图5-20 MDK包

安装完毕并安装 license详细步骤不做演示

中移物联网有限公司 OneNET 开发文档中心

522 连接硬件准备

5221 开发板接线

图5-21 开发板接线图

电源DC-5V

运行信息USART1-MicroUSB 线

软件下载ST-Link

中移物联网有限公司 OneNET 开发文档中心

5222 ESP8266跳线帽连接

图5-22 ESP8266跳线帽连接

中移物联网有限公司 OneNET 开发文档中心

5223 M6312跳线帽连接

图5-23 M6312跳线帽连接

523 工程实例

例程使用最简单易懂的方式编写着重让大家明白接入流程和协议

10~12 协议专属例程是展示该协议下的专用功能比如 EDP 的 PushData

中移物联网有限公司 OneNET 开发文档中心

HTTP 注册新设备MQTT 的订阅发布等具体使用方法查看该目录下的《使用

说明》

图5-24 工程文件

524 开发工程文件

中移物联网有限公司 OneNET 开发文档中心

图5-25 工程文件

图5-26 工程结构

默认已创建好产品以及设备打开文件工程 onenetc 和 esp8266c 修改例

程的 WIFI 信息和平台信息

分别在 esp8266c 的 36和 onenetc的 414345行

图5-27 更改项

525 编译下载

开发版接串口会有相应状态显示平台设备显示在线状态绿色为连接成功

设备在线灰色表示未连接并在数据展示中显示对应主题的所有数据

中移物联网有限公司 OneNET 开发文档中心

图5-28 连接成功

图5-29 收到数据

其他实例详情请见httpsopeniot10086cnbbsthread-1266-1-1html

中移物联网有限公司 OneNET 开发文档中心

第六章 MQTT 协议详解

61 设备与平台通信协议包格式

协议就是通信双方的一个约定即表示第 1字节传输的什么第 2字节

传输的什么helliphellip在 MQTT协议中一个 MQTT 数据包由固定头(Fixed

header) 可变头(Variable header) 消息体(payload)三部分构成

MQTT 数据包结构固定头部+可变头部+消息体

固定头(Fixed header)存在于所有 MQTT数据包中表示数据包类型及

数据包的分组类标识固定头格式如下

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 - 5 Remaining Length(该字段占用 1-4个字节)

目前平台版本支持的 Packet Type如下

名字 值 流向 描述

CONNECT 1 C-gtS 客户端请求与服务端建立连接

CONNACK 2 S-gtC 服务端确认连接建立

PUBLISH 3 CS 发布消息

PUBACK 4 CS 收到发布消息确认

PUBREC 5 CS 发布消息收到

PUBREL 6 CS 发布消息释放

PUBCOMP 7 CS 发布消息完成

SUBSCRIBE 8 C-gtS 订阅请求

SUBACK 9 S-gtC 订阅确认

UNSUBSCRIBE 10 C-gtS 取消订阅

UNSUBACK 11 S-gtC 取消订阅确认

PING 12 C-gtS 客户端发送 PING(连接保活)命令

PINGRSP 13 S-gtC PING命令回复

DISCONNECT 14 C-gtS 断开连接

可变头(Variable header)存在于部分 MQTT 数据包中数据包类型决定

了可变头是否存在及其具体内容

消息体(Payload)存在于部分 MQTT 数据包中表示客户端收到的具体内

中移物联网有限公司 OneNET 开发文档中心

不同类型数据包中可变头和消息体包含关系如下

消息类型 Variabl

e

Header

Payloa

d

CONNECT 有 有

CONNACK 有 有

PUBLISH 有 有

PUBACK 有 无

PUBREC 有 无

PUBREL 有 无

PUBCOMP 有 无

SUBSCRIBE 有 有

SUBACK 有 有

UNSUBSCRIBE 有 有

UNSUBACK 有 无

PING 无 无

PINGRSP 无 无

DISCONNECT 无 无

62 平台支持数据包类型

621 CONNECT(客户端请求与服务端建立连接 client -gt server)

固定头(Fixed Header)

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 - 5 Remaining Length(该字段占用 1-4个字节)

MQTT Packet Type 值为 0001表示该数据包为请求连接数据包

Remaining Length 剩余长度占 1-4字节

可变头(Variable Header)

包含内容如下

Description 7 6 5 4 3 2 1 0

byte

1-2

ProtocolNa

me Length

0 0 0 0 0 0 0 0

0 0 0 0 0 1 0 0

byte

3

lsquoMrsquo 0 1 0 0 1 1 0 1

byte

4

lsquoQrsquo 0 1 0 1 0 0 0 1

中移物联网有限公司 OneNET 开发文档中心

byte

5

lsquoTrsquo 0 1 0 1 0 1 0 0

byte

6

lsquoTrsquo 0 1 0 1 0 1 0 0

Byte

7

Protocol

Level

0 0 0 0 0 0 0 1

Byte

8

Connect

Flag

Use

r

flag

Passwo

rd

flag

WillReta

in

Flag

WillQo

s Flag

WillFl

ag

CleanSessi

on

Flag

Reser

ve

Byte

9-10

KeepAlive

(1) 版本

Protocol Level 必须设置为 4平台只支持协议版本 v 311不支持更老

的版本使用第三方客户端时需要注意选择正确的版本

(2) user flag 与 password flag

平台不允许匿名登陆因此这两个标志位在连接时必须设置为 1否则认为

协议错误平台将会断开连接

(3) Will flag 与 WillretainflagWillQosFlag

Will flag 为 0时WillQosFlag 和 WillRetainFlag 必须为 0Will Flag

为 1时WillQosFlag 只能为 012

1当该设备下一次正常上线后服务器会清除之前的 will 消息(包括

retain 消息)

2如果设备上线时设置了 Will Topic 和 msg且将 WillRetainFlag 设

置为 1只有设备异常断开后服务器才会将该 Will msg 分发给新的 Will

Topic 的订阅者且 Qos 级别以订阅的 Request qos 级别为准

3如果设备上线时设置了 Will Topic 和 msg且将 WillRetainFlag 设

置为 0服务器不会存储该消息当设备异常断开后会将该 Will msg 以设

备设置的 WillQosFlag的 Qos级别进行分发

(4) CleanSessionFlag

若客户端将 clean session 标志位设置为 0当其断开后平台将会保存

sessionsession 需保持的内容包含

客户端订阅的 topic列表

中移物联网有限公司 OneNET 开发文档中心

还未完成确认的 Qos1Qos2级别的 publish消息

客户端保存 session 的内容包含

已经发送到服务端的但还没有收到确认的 Qos1Qos2消息列表

待发送的 Qos0列表

若客户端将 clean session 标志位设置为 1当其断开后平台会清除设备

的订阅列表及未完成确认的 Qos1Qos2 的 publish消息

(5) Reserve

保留位置 0

(6) KeepAlive 保活时间

每个客户端可自定义设置连接保持时间最短 120秒最长 65535 秒

消息体(Payload) Description 是否必须存在 格式

Field1 Client

Identifier

是 2字节字串长度 + utf8字

Field2 UserName 是 2字节字串长度 + utf8字

Field3 UserPassword 是 2字节字串长度 + utf8字

目前平台支持的方式为以后两种

方式 1设备 ID项目 ID鉴权信息(auth_info)

字段设置 消息示例

client_id设置为平台创建设备时的

设备 id

username设置为ldquo项目 IDrdquo

password设置为ldquo鉴权信息

(auth_info)rdquo

client_id=rdquo123rdquo

username=rdquo433223rdquo

password=rdquo注册的鉴权信息rdquo

各字段说明如下

鉴权信息(auth_info)在平台申请设备时填写设备的 auth_info 属性(数

字+字母的字符串)该属性需要产品内具备唯一性(可使用设备出厂唯一编号)

方式 2设备 ID + APIKey(项目 ID也需要填写)

字段设置 消息示例

client_id设置为平台创建设备时的

设备 ID

username设置为ldquo项目 IDrdquo

client_id=rdquo123rdquo

username=rdquo433223rdquo

password=Api Key

中移物联网有限公司 OneNET 开发文档中心

password设置为ldquoAPI鉴权信息

(auth_info)rdquo

项目 ID在平台添加项目时平台生成的 ID

APIKey在平台上创建产品时生成的 APIKey

连接包实例如下

Send one mqtt packet

FixHeader

PacketTag = 16

PacketType = 1

RemainLength = 34

VariableHeaderConnect

protocol_name_len_= 4

protocol_name_= MQTT

protocol_level_= 4

connect_flag_= 192

keep_alive_= 12000

client_id_len_= 8

client_id_= 34764813

usr_name_len_= 6

usr_name_= 150295

password_len_= 4

password_= push

MQTT0x10 0x22 0x00 0x04 0x4D 0x51 0x54 0x54 0x04 0xC0 0x2E 0xE0 0x00 0x08 0x33

0x34 0x37 0x36 0x34 0x38 0x31 0x33 0x00 0x06 0x31 0x35 0x30 0x32 0x39 0x35 0x00

0x04 0x70 0x75 0x73 0x68

Send One Packet Succ

中移物联网有限公司 OneNET 开发文档中心

622 CONNACK (服务端确认连接建立)

Fixed Header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type = 2 0 0 0 0

byte2 - 5 Remaining Length(该字段占用 1-4个字节)

Variable Header

Description 7 6 5 4 3 2 1 0

byte 1 Acknowledge Flags 0 0 0 0 0 0 0 Sp

byte 2 Return Code x x x x x x x x

Sp Session Present Flagsession信息在服务器已保持置 1未保存置

0

返回码说明

返回码 描述

0 成功

1 协议版本错误

2 非法的 clientid

3 服务不可用

4 用户名或密码错误

中移物联网有限公司 OneNET 开发文档中心

5 非法链接(比如 token非法)

失败

如果 connect包不符合协议内容约束则直接断掉连接而不需要发送 conn

ack包

如果鉴权或授权失败回复一个带非 0错误码的 connack包

成功

必须断掉重复的 clientid

执行 cleansession 对应的操作

必须回复一个 connack回复码为 0

开始消息传递并加入 keepalive的监视

PS客户端需要等到服务端的 connack报文才能发送后续的数据包

623 PUBLISH(发布消息 client -gt server)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type DUP f

lag

QoS Level RETAI

N

byte2 - 5 Remaining Length(该字段占用 1-4 个字节)

DUP

QoS2Qos1如果为 0则表示是第一次发送该包如果为 1则表示

为重复发送的包

Qos0DUP 必须为 0

中移物联网有限公司 OneNET 开发文档中心

QoS 指定了该 publish包的 Qos 等级如下

Qos 值 Bit2 Bit1 描述

0 0 0 最多发送一次

1 0 1 至少发送一次

2 1 0 只发送一次

RETAIN 保留标志位如果为 1服务器存储最新一条 RETAIN消息以便

分发给新的订阅者如果 RETAIN为 1Payload 为空服务器分发该消息后会

清空该 topic 下的 RETAIN 消息

PS该版本实现了 Qos0Qos1Qos2

Variable Header

Description 格式 是否必须

Field1 TopicName 2 字节字串长度 + utf8字

Field2 PacketIdent

ifier

2 字节 QoS0否QoS1Qos2是

Payload

内容根据不同业务自定义

624 PUBLISH(发布消息 server -gt client)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type DUP f

lag

Qos Level RETAIN

byte2 - 5 Remaining Length(该字段占用 1-4个字节)

DUP

Qos2QoS1如果为 0则表示是第一次发送该包如果为 1则表示

为重复发送的包

中移物联网有限公司 OneNET 开发文档中心

Qos0DUP 必须为 0

QOS 指定了该 publish包的 qos等级如下

Qos 值 Bit2 Bit1 描述

0 0 0 最多发送一次

1 0 1 至少发送一次

2 1 0 只发送一次

RETAIN如果服务器分发的消息是 RETAIN 消息则将该标志位置 1否则置

0

PS该版本实现 Qos0Qos1Qos2其中服务器分发消息的 Qos级别是以 Clien

t-gtServer 发送的 publish 包的 qos 等级为准非订阅的 topic 的 Qos 等级R

etain 消息是以订阅的 Request Qos 级别进行推送

VariableHeader

Description 格式

Field1 TopicName 2 字节字串长度 + utf8字

Payload

内容根据不同业务自定义

625 PUBACK(收到发布消息确认)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

中移物联网有限公司 OneNET 开发文档中心

626 PUBREC(发布消息收到)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

627 PUBREL(发布消息释放)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

628 PUBCOMP(发布消息完成)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

中移物联网有限公司 OneNET 开发文档中心

byte 1~

2

PacketIdentifier PacketIdentifier

629 SUBSCRIBE(订阅请求)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

Payload

Description 格式

Byte1~

n

TopicName 2 字节字串长度 + utf8字

Byten+

1

Request Qos 服务质量要求(只能为 0

12)

topic 说明

可以包含一个或多个 topic

topic必须是数字英文反斜杠()的组合目前不支持通配符

每个客户端最多订阅 100个 topic

以下 topic 被系统保留使用(客户端不能订阅)

类型 说明

$开头 平台保留

中移物联网有限公司 OneNET 开发文档中心

6210 SUBACK(订阅确认)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

Payload

Description 7 6 5 4 3 2 1 0

byte 1 retcode

返回码说明

返回码 描述

0x00 成功(granted qos = 0)

0x01 成功(granted qos = 1)

0x02 成功(granted qos = 2)

0x80 失败

6211 UNSUBSCRIBE(取消订阅)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

中移物联网有限公司 OneNET 开发文档中心

Payload

Description 格式

Byte1~

n

TopicName 2 字节字串长度 + utf8字

可以包含一个或多个 topic

6212 UNSUBACK(取消订阅确认)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

6213 PING(客户端发送 PING(连接保活)命令)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

NULL NULL

注PING命令无 VariableHeader

中移物联网有限公司 OneNET 开发文档中心

6214 PINGRSP(PING命令回复)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

NULL NULL

注PINGRSP无 VariableHeader

6215 DISCONNECT(断开连接)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

NULL NULL

注DISCONNECT无 VariableHeader

中移物联网有限公司 OneNET 开发文档中心

第七章 设备开发流程

71 连接鉴权

Device Onenet

(Connect)鉴权请求

(ConnAck)鉴权结果

加载session

鉴权

图7-1 连接鉴权

设备向平台发起 connect 请求connect 中携带鉴权信息具体

参见(报文格式参考 621)

平台拿到鉴权信息进行鉴权

鉴权通过后如果 cleansession=0 平台将会加载保存的设备

的一些信息如订阅列表(621中描述)

如果 cleansession=1 设备没有保存信息在平台则不加载设

备相关信息

返回鉴权结果 ConnAck(报文格式参考 621)

72 消息发布

721 数据点上报

设备使用 publish 报文来上传数据点 报文格式如下

中移物联网有限公司 OneNET 开发文档中心

VariableHeader

Field 名称 说明 格式

Field1 TopicName=rdquo$dprdquo $dp 为系统上传数据点

的指令

2字节字串长度 + utf8

字串

Payload

Payload包含真正的数据点内容支持的格式如下

Byte 1 Bit0-5数据类型指示目前支持

Type = 1

Type = 2

Type = 3

Type = 4

Type = 5

Type = 6

Type = 7

Bit6-7 flags 根据具体类型不同意义

Type6Type7这两种需要填写时间戳的数据类型

如果填入了时间戳则须将 bit7 置 1否则置 0(即

忽略数据类型说明中的日期时间相关字段)

0 0 0 0 0 0 0 1

Byte 2 根据数据类型指示不同

Byte n

中移物联网有限公司 OneNET 开发文档中心

数据类型 1(type == 1)格式说明

数据类型 2(type == 2)格式说明

Byte 1 数据点类型值1 1JSON 格式 1 字符串 0 0 0 0 0 0 0 1

Byte 2 指示后面 json 字符串长度

固定两字节长度高位字节值为 0x00

Byte 3 固定两字节长度低位字节值为 0x41

Byte 4

ldquodatastreamsrdquo[ 可以同时传递多个数据流

ldquoidrdquordquotemperaturerdquo

ldquodatapointsrdquo[数据流可以有多个数据点

rdquoatrdquordquo2013-04-22 222222rdquo可选

rdquovaluerdquo 365用户自定义

]

ldquoidrdquordquolocationrdquo

ldquodatapointsrdquo[hellip]

hellip

]

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

Byte n

Byte 1 数据点类型指示type=2 二进制数据 0 0 0 0 0 0 1 0

Byte 2 指示后面 json 字符串长度

固定两字节长度-高位字节值为 0x00

Byte 3 固定两字节长度-低位字节值为 0x10

Byte 4

rdquods_idrdquordquoimagerdquo 创建数据流时定义的 ID(必填)

ldquoatrdquordquo2014-10-25 122323rdquo 时间(可选)

rdquodescrdquo字符串或 json 对象对该数据的描述(可选)

hellip

Byte n

Byte n+1 指示后面二进制数据长度

固定四字节长度-第 1 字节(最高)值为 0x00

Byte n+1 固定四字节长度-第 2 字节值为 0x00

Byte n+2 固定四字节长度-第 3 字节值为 0x01

Byte n+3 固定四字节长度-第 4 字节(最低)值为 0x00

Byte n+4 该域目前最大支持 3M

中移物联网有限公司 OneNET 开发文档中心

数据类型 3(type == 3)格式说明

数据类型 4(type ==4)格式说明

hellip 本例中的该域 256 字节数据

Byte n+260

Byte 1 数据点类型指示type=3 JSON 格式 2 字符串 0 0 0 0 0 0 1 1

Byte 2 指示后面字符串长度

固定两字节长度高位字节值为 0x00

Byte 3 固定两字节长度低位字节值为 0x46

Byte 4 通用格式

ldquodatastream_id1rdquordquovalue1rdquo

ldquodatastream_id2rdquordquovalue2rdquo

hellip

示例

ldquotemperaturerdquo225rdquohumidityrdquordquo952rdquo

hellip

hellip

hellip

hellip

Byte n

Byte 1 数据点类型指示type=4 JSON 格式 3 字符串 0 0 0 0 0 1 0 0

Byte 2 指示后面字符串长度

固定两字节长度高位字节值为 0x00

Byte 3 固定两字节长度低位字节值为 0x46

Byte 4 通用格式

ldquodatastream_id1rdquoldquodatetime1rdquordquovalue1rdquo

ldquodatastream_id2rdquo ldquodatetime2rdquordquovalue2rdquo

hellip

示例

ldquotemperaturerdquoldquo2015-03-22 223112rdquo225

hellip

hellip

hellip

hellip

Byte n

中移物联网有限公司 OneNET 开发文档中心

数据类型 5(type == 5)格式说明

数据类型 6(type == 6)格式说明

Byte 1 数据点类型指示type=5 自定义分隔符 0 0 0 0 0 1 0 1

Byte 2 指示后面字符串长度

固定两字节长度高位字节值为 0x00

Byte 3 固定两字节长度低位字节值为 0x41

Byte 4 消息中最前面两字节为用户自定义的域中分隔符和域间分隔符

这两个分隔符不能相同比如采用逗号作为域中分隔符分号作

为域间分隔符的格式如下

feild0feild1hellipfeildn

其中每个 field 格式支持 3种

field 格式 1 3 个子字段分别是数据流 ID时间戳数据值

通用格式

Datastream_iddatetimevalue

field 格式 2 2 个子字段分别是数据流 ID 和数据值省略时

间戳通用格式

Datastream_idvalue

field 格式 3 1 个子字段省略了数据 ID 和时间戳只传输数

据值平台将用该域(feild)所在的位置号(从 0 开始)作为数据

流 ID通用格式

value

示例

(1)temperature2015-03-22

223112225102pm258910

(2)temperature2015-03-22

223112225102pm258910

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

Byte n

Byte 1 数据类型指示type=6 带时间自定义分隔符 0 0 0 0 0 1 1 0

Byte 2 年(后两位)例如 2016 年则该字节为 16 0 0 0 1 0 0 0 0

Byte 3 月(1-12)

Byte 4 日(1-31)

Byte 5 小时(0~23)

Byte 6 分钟(0~59)

Byte 7 秒(0~59)

Byte 8 指示后面字符串长度

固定两字节长度高位字节值为 0x00

Byte 9 固定两字节长度低位字节值为 0x41

Byte 10 消息中最前面两字节为用户自定义的域中分隔符和域间分隔符

具体格式见 type=5 说明若相关域中没有时间戳则采用本类

hellip

中移物联网有限公司 OneNET 开发文档中心

数据类型 7(type == 7)格式说明(每次最多 500个数据流的浮点数)

hellip 型的默认时间戳当作数据点的时间来存储

Byte n

Byte 1 Bit0-5 数据类型指示type=7 可离散浮点数数据流

Bit6保留置 0

Bit7 时间指示位1携带 6字节时间

1 0 0 0 0 1 1 1

Byte 2 年(后两位)例如 2016 年则该字节为 16 0 0 0 1 0 0 0 0

Byte 3 月(1-12)

Byte 4 日(1-31)

Byte 5 小时(0~23)

Byte 6 分钟(0~59)

Byte7 秒(0~59)

Byte 8 数据流名称(取值范围 1-65535)

高位字节值为 0x00

Byte 9 低位字节值为 0x01

Byte10 数据流个数(取值范围 1-500)

高位字节值为 0x00

Byte11 低位字节值为 0x01

Byte 10 4 字节 float 类型低位在前高位在后

Byte 11

Byte 12

Byte 13

Byte n 数据流名称(取值范围 1-65535)

高位字节值为 0x24

Byte n+1 低位字节值为 0x37

Byte n+2 数据流个数(取值范围 1-500)

高位字节值为 0x01

Byte n+3 低位字节值为 0x00

Byte n+2 4 字节 float 类型低位在前高位在后

Byte n+4

Byte n+5

Byte n+6

中移物联网有限公司 OneNET 开发文档中心

7211 Qos0(Client-gtServer)

Device OneNet

Publish $dp(Qos0)

存储

图7-2 QoS连接图

设备发布 Qos0 消息(上报数据点)

平台收到上报数据点后保存起来

7212 Qos1(Client-gtServer)

Device OneNet

Publish $dp(Qos1)

存储

PubAck

图7-3 Qos1连接图

设备发布 Qos1 消息(上报数据点)

中移物联网有限公司 OneNET 开发文档中心

平台收到上报数据点后保存起来

平台给设备回复相应的 PubAck (报文格式参考 625)

7213 Qos2(Client-gtServer)

Device OneNet

Publish $dp(Qos2)

存储

PubRec

PubRel

PubComp

图7-4 Qos2连接图

设备发布 Qos2 消息(上报数据点)

平台收到上报数据点后保存起来

平台给设备回复相应的 PubRec报文

设备需回复平台 PubRel报文如超时不回平台则会断开相应连接

平台给设备回复 PubComp报文

注数据点上报功能不支持 Retain 特性

中移物联网有限公司 OneNET 开发文档中心

722 平台命令(下发amp回复)

7221 命令下发

平台使用 publish 报文来下发平台指令 报文格式如下

FixHeader

参考 623

VariableHeader

Field 名称 说明 格式

Field1 TopicName=rdquo$creqcmduuidrdquo $creq为系统下发

Cmd 的 指 令

cmduuid为该条指

令的 uuid

2字节字串长度 +

utf8字串

Payload

Payload包含真正的指令内容

72211 Qos0(Server-gtClient)

DeviceOneNet

Publish $creq(Qos0)

图7-5 Qos0命令下发

命令下发

平台向设备发送 topic为$creq的消息(该 topic为平台命令)

中移物联网有限公司 OneNET 开发文档中心

设备收到 topic 为$creq 的 topic 时需将其作为平台下发的指令来处

注目前命令下发以 Qos0级别进行推送

7222 命令回复

设备使用 publish 报文来回复平台指令 报文格式如下

FixHeader

参考 623

VariableHeader

Field 名称 说明 格式

Field1 TopicName=rdquo$crspcmduuidrdquo $crsp为系统处理

设备回复 cmd 的

指令cmduuid为

该条指令的 uuid

2字节字串长度 +

utf8字串

Payload

Payload包含真正回复的指令内容

72221 Qos0(Client-gtServer)

DeviceOneNet

Pulish $crsp(Qos0)

图7-6 Qos0下发命令

中移物联网有限公司 OneNET 开发文档中心

72222 Qos1(Clientlt-gt Server)

DeviceOneNet

Pulish $crsp(Qos1)

Puback

图7-7 Qos1下发命令

如果设备回复响应时以 Qos1回复则平台需要给设备回复一个 Puback 报文

72223 Qos2(Clientlt-gt Server)

DeviceOneNet

Pulish $crsp(Qos2)

PubRec

PubRel

PubComp

图7-8 Qos2下发命令

如果设备回复响应时以 Qos2回复则

1平台需回复设备一个 PubRec报文

中移物联网有限公司 OneNET 开发文档中心

2设备在收到 PubRec后需向平台回复 PubRel报文

3平台收到 PubRel 报文后向设备回复 PubComp报文

73 创建 Topic

Device OneNet

HTTP 请求

HTTP 响应

图7-9 创建Topic

设备通过发送 HTTP请求进行 topic 的创建操作

平台收到请求后创建 topic 并返回结果

请求及响应定义如下

HTTP方法 POST

URL httpapihecloudscommqtttopic

HTTP头部 api-keyxxxx-ffff-zzzzz必须 master key

URL参数

HTTP body

内容

ldquonamerdquordquoxxxxxxrdquo topic 名字只能由英文下划线反斜杠组成最长

1024个字符同一产品下 topic name 不重复

成功返回

errno 0

errorldquosuccrdquo

说明 每个产品最多 100个 topic

中移物联网有限公司 OneNET 开发文档中心

74 订阅

Device OneNet

Subscribe

Suback

更新设备订阅列表

图7-10 订阅

设备发起订阅请求(报文格式参考 629)

平台收到请求后更新 topic列表

平台给设备回复 SubAck (报文格式参考 6210)

注subscribe 的 request qos级别可以为 012

75 取消订阅

Device OneNet

UnSubscribe

UnSuback

更新设备订阅列表

图7-11取消订阅

中移物联网有限公司 OneNET 开发文档中心

设备发起取消订阅请求 (报文格式参考 6211)

平台收到请求后更新 topic 列表

平台给设备回复 UnSubAck (报文格式参考 6212)

76 推送设备 Topic

761 Publish 报文推送

Qos0设备使用 Qos 级别为 0的 Publish报文来进行推送

Device OneNet

Publish(Qos0)

Device

以Qos0 Publish到订阅设备

图7-12 Qos0推送

设备发起推送 topic请求(以 Qos0级别)

平台收到请求后将 topic以 Qos0级别推送到相关订阅设备(支持离线设

备推送)

平台不返回 PubAck或 PubRec 等报文

Qos1

设备使用 Qos级别为 1的 publish报文来推送 Topic

中移物联网有限公司 OneNET 开发文档中心

Device OneNet

Publish(Qos1)

PubAck

Device

以Qos1 Publish到订阅设备

设备回复平台 PubAck

图7-13 Qos1发布

设备发起推送 topic请求(以 Qos1级别)

平台收到请求后将 topic以 Qos1级别推送到相关订阅设备(支持离线设

备推送)

平台返回 PubAck 报文

Qos2

设备使用 Qos级别为 2的 publish报文来推送 Topic

中移物联网有限公司 OneNET 开发文档中心

Device OneNet

Publish(Qos2)

PubRec

Device

以Qos2 Publish到订阅设备

PubRec

PubRel

PubComp

PubRel

PubComp

图7-14 Qos2推送

设备发起推送 topic请求(以 Qos2级别)

平台收到请求后回复 PubRec报文

设备收到 PubRec后需回复 PubRel报文 (如超时不回复平台会断开与设

备的连接)

平台收到 PubRel 报文后回复 PubComp 给设备

平台在回复 PubComp 后会以 Qos2 级别推送到相关订阅设备(支持离线设

备推送)

设备需回复 PubRec报文 (如超时不回复平台会断开与设备的连接)

平台发送 PubRel 报文给设备

设备需回复 PubComp(发布完成)

Publish报文的格式如下

FixHeader

参考 623

中移物联网有限公司 OneNET 开发文档中心

VariableHeader

Field 名称 说明 格式

Field1 TopicName 填写设备订阅的 topic 2字节字串长度 + utf8

字串

Payload

Payload为设备自定义内容

762 HTTP 请求推送

Device OneNet

HTTP 请求

HTTP 响应

Device

Publish到订阅设备

图7-15 HTTP请求

设备以 HTTP 的方式发起推送 topic 请求

平台收到请求后将 topic推送到相关订阅设备 (目前只支持在线推送)

平台返回推送结果

请求及响应定义如下 HTTP方法 POST

URL httpapihecloudscommqtt

HTTP头部 api-keyxxxx-ffff-zzzzz必须 master key

URL参数 topic=ldquoXXXXXXrdquo必选在发送 mqtt协议的 topic 必填

HTTP body内容 用户自定义 Json 或二进制数据(小于 64K)

成功返回

errno 0

errorldquosuccrdquo

中移物联网有限公司 OneNET 开发文档中心

77 离线 Topic

推送 Topic只针对在线设备进行 topic 消息的推送离线设备不会收到订阅

的 topic 的消息离线 Topic则会将该消息推送给在线以及离线设备

1 如果设备在上线时设置了 clean session flag服务端会删除其订阅的

topic及相关的离线 topic消息

2 如果设备没有设置 clean session flag如果有与该设备相关的离线

topic消息则在鉴权成功后将离线消息推送给设备

3 遗嘱消息(will msg)只会推送给订阅了该 will topic的在线的设备离

线设备不会收到

4 离线消息的有效期默认为 2 天(暂不支持用户设定有效期)服务器只会

推送在 2天内的最近 10 条消息

78 数据点订阅

数据点订阅同一产品下的设备可以订阅其他设备的数据点订阅的 topic

格式为deviceid数据流名称即

被关注的设备在上传了该数据流名称的数据点后订阅了该 topic的其他设备都

会收到上传的数据点

1 AB设备的 deviceid分别为 92779278

2 A 设备订阅了名为92789527 的 topic(9278 为设备 B 的 id9527 为 B

设备上传的数据流名称)

3 B 设备上传了名为 9527的数据流(数据点为 11 1578hellip)

4 A 设备会收到多条(取决于设备 B 上传的数据点的个数)推送的 topic 名

为92789527 的 publish消息消息的 payload中则包含设备 B 上传的数据

注目前支持订阅的数据点的类型为 Type1~Type7(详见 721节)

中移物联网有限公司 OneNET 开发文档中心

第八章 常见问题 FAQ

用户在基于 OneNET 平台进行产品开发的过程中可能会遇到各种各样的问

题开发过程中遇到的问题一方面可以参考 OneNET 文档中心的文档或者本文

档前几个章节的内容另一方面用户可以参考本章节总结的常见问题希望这些

文档能对用户在开发过程中有一定的指导和帮助

本章将分三个小节对用户在开发产品过程中可能遇到的问题进行梳理分别

为终端设备接入 OneNET平台的常见问题API调用的常见问题和 OneNET平台

的能力

81 终端设备接入 OneNET 平台的常见问题

序号 问题描述 原因分析 解决方法

1

2

3

4

5

6

7

82 API 调用的常见问题

序号 问题描述 原因分析 解决方法

1

2

3

4

5

6

7

8

9

中移物联网有限公司 OneNET 开发文档中心

83 使用 OneNET平台遇到的常见问题

序号 问题描述 原因分析 解决方法

1

2

3

4

5

6

7

8

Page 19: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com

中移物联网有限公司 OneNET 开发文档中心

图3-13 表盘控件添加

在右侧的属性中选择设备以及数据源(及刚刚上传的数据流)如下图

图3-14 表盘控件数据流绑定

在确定好数据流之后可以看到表盘回显示成我们添加的数据的值其他的

刷新频率以及表盘显示样式读者可以自行更具需求加以修改

完成应用编辑之后点击右上角保存按钮退出应用编辑

在应用管理页面点击该应用即可查看编辑好的应用页面

中移物联网有限公司 OneNET 开发文档中心

图3-15 保存应用

图3-16 应用查看与分享

该应用可以通过共享ldquo发布链接rdquo的方式将该应用共享给他人

33 设备批量接入

单个设备可以通过平台的开发者中心添加设备的方式进行创建若用户有多

个设备直接与平台 TCP连接的终端通过手动添加需耗费大量时间人力OneNET

中移物联网有限公司 OneNET 开发文档中心

为大批量接入用户提供 3种批量创建设备的方案

331 平台设备批量复制

此种方式为选择某个设备作为复制的模板通过导入 EXCEL的方式进行设备

复制厂商可以在小批量测试时使用该功能

在设备列表中点击查看详情

图3-17 设备批量接入

在设备详情页面点击批量导入设备信息

中移物联网有限公司 OneNET 开发文档中心

图3-18 导入设备信息

点击批量复制

图3-19 批量复制

中移物联网有限公司 OneNET 开发文档中心

目前提供三种批量创建的方式 excel 导入的方式为主要接入方式选择

excel导入点击下载模板

图3-20 快速导入

图3-21 Excel导入

打开下载下来的 excel模板表中的 titledesctags等均为将要批量导

入的设备的数据其中的 title 和 auth_info 为必填选项title 为设备名

中移物联网有限公司 OneNET 开发文档中心

auth_info对应设备的鉴权信息

图3-22 Excel格式

填写 3个设备信息

图3-23 Excel内容

三个设备的 title和 auth_info都一样均为 20170808000012017080800002

2017080800003保存该表格点击ldquo点击上传rdquo上传保存好的 excel 文件

点击ldquo确定导入批量rdquo

中移物联网有限公司 OneNET 开发文档中心

图3-24 导入上传

图3-25 确认创建

可以看到在原设备目录下新增了 3个设备其名称分别为 2017080800001

20170808000022017080800003

中移物联网有限公司 OneNET 开发文档中心

图3-26 批量创建的设备

点击设备详情可以看到设备目录下各个设备的鉴权信息与表格中所填

写的内容一致

图3-27 设备ID及鉴权信息

至此完成了通过批量设备复制的方式完成设备批量创建的过程用户如果

要使用这个功能需要将自己终端的出厂序列号整理到这个 excel表中然后利

中移物联网有限公司 OneNET 开发文档中心

用上传表格的方式进行批量创建

332 应用平台调用新增设备 API

OneNET 提供了创建设备的 API接口

图3-28 新增设备API接口

其中的 auth_info 参数对应着设备的鉴权信息通过调用此 API 接口可以

实现在平台上新增设备的功能用户如果有自己的第三方应用平台进行设备管理

可以通过多次调用此接口的方式进行设备的批量创建在调用接口时需要确保每

次调用的 auth_info 参数对应着自己的每一个终端不同的出厂序列号

333 终端调用注册 API

API 实际是 HTTP 协议的通信协议终端也可以通过封装 HTTP 包发送注册

中移物联网有限公司 OneNET 开发文档中心

设备请求的方式调用 API

终端调用注册 API 创建设备并接入的流程如图 3-29所示

平台

TCP连接协议接入机

创建产品

发送连接报文

连接应答

数据应答

发送数据报文

生成连接报文

设备

发送下行命令 下发命令

解析下行命令

生成存储数据报文

解析连接应答

解析数据应答

必要流程

可选流程

存储到数据流 数据源 创建应用

心跳应答

发送心跳报文生成心跳报文

解析心跳应答

平台操作

设备操作

利用设备本身的sn和产品的设备注册码生成注册报文

TCP连接API服务器

发送注册报文

注册应答

解析设备ID

创建设备

设备开机

读取硬件中烧录的设备编号(sn)

图3-29 终端调用注册API接入流程

1) 创建产品

重要参数产品 ID注册码产品 APIKey(见附录一)

2) 生成并发送注册报文

每一个用户终端中都有厂商烧录的唯一出厂序列号(sn)终端上电

之后应该首先读取自己的 sn然后通过 1)中的注册码和 sn 一起组成注

册报文

注册报文格式如下例

POST httpapihecloudscomregister_deregister_code=6TM7OkhNsTjATvFx HTTP11

Host apihecloudscom

Content-Length 48

中移物联网有限公司 OneNET 开发文档中心

sn02136616511001titletestdevice0001

其中

6TM7OkhNsTjATvFx 为产品注册码

02136616511001 是本例中模拟的设备唯一编号

testdevice0001 是本例中模拟的设备名

若上传的数据格式以及参数鉴权均正确则平台会返回设备创建成功

返回设备 ID以及该设备对应的设备 api-key

HTTP11 200 OK

Date Wed 09 Aug 2017 064821 GMT

Content-Type applicationjson

Content-Length 95

Connection keep-alive

Server Apache-Coyote11

Pragma no-cache

errno0datadevice_id11142371keyq9Mw0zqiAPjTwqfyCk2mWrUi8=errorsucc

3) 在步骤 2)完成之后平台上的设备就已经成功创建了终端需要

重新 TCP连接到对应协议的服务器上完成设备连接(与设备进行映射)以

及上传数据的操作

34 设备 ID 与产品序列号

通过 OneNET构建的物联网系统中有两套比较重要的编码设备 ID与产品序列号

(SN)其中

产品序列号是由厂商指定的在厂商的产品范围内是保持唯一的在出厂前烧写到每

一个终端中通常包含在与平台通信的数据中并以条形码的方式贴在产品的包装上用

于从用户的角度区分每一个独立的终端

设备 ID是在平台创建设备时由 OneNET分配的平台范围内唯一的编号应用于第三

方平台调用 OneNET API时使用

在创建设备时OneNET平台需要用户以设备 sn为参数进行设备创建成功之后平

台会分配一个设备 ID这样 OneNET内部就有了一个 sn-设备 ID的映射关系

终端登陆使用的鉴权信息是出厂时烧写好的 sn鉴权通过之后平台可以将该终端

上传是数据放到对应的设备中

上层应用通过创建设备 API或者查询设备 API建立 sn-设备 ID映射表在需要操作

某一设备时首先可以获取的是终端的 sn号(因为对用户是可见的)通过映射表获取设

中移物联网有限公司 OneNET 开发文档中心

备 ID然后再通过 API访问 OneNET平台上的对应设备

两套编码在物联网系统中的应用位置如下图所示

物联网应用

OneNET

终端

(烧写sn)

HTTP API 以设备ID为参数进行API访问

接入协议以sn为鉴权参数进行设备连接

设备

设备名

设备ID

设备sn

设备标签

sn 设备ID

snmdash设备ID映射表

中移物联网有限公司 OneNET 开发文档中心

第四章 第三方应用开发

第三方应用与 OneNET 平台的业务逻辑关系如图 4-1 所示第三方应用与

OneNET平台之间通过 HTTPS请求应答的方式实现数据交互OneNET 平台为第三

方应用提供封装好的 API 接口应用平台通过调用这些 API 接口完成对 OneNET

平台的读写执行以及设备管理请求然后 OneNET 平台会将相应的指令请求发送

到终端设备OneNET 平台收到终端设备响应的数据及设备信息后会将数据及

设备信息推送到应用平台完成应答

下面将分别介绍第三方应用接入 OneNET 平台的步骤OneNET平台提供的数

据推送功能以及 OneNET 平台为第三方应用封装好的 API接口

图4-1 第三方应用与OneNET平台的逻辑关系

41 第三方应用接入 OneNET 平台

第三方应用与 OneNET平台实现数据交互的前提是已经建立连接第三方应

用接入 OneNET平台的开发流程如图 4-2所示包括三个步骤

(1) 在 OneNET 平台创建了设备该设备有对应的真实设备且能正常上报

数据

(2) 用户已经开发并部署了 OneNET平台验证接入的程序

(3) 在 OneNET 平台正确配置了第三方应用数据接收的地址(URL)

Token以及其他参数

中移物联网有限公司 OneNET 开发文档中心

在确保上述第(1)步已经实现的基础上下面将分别讲述第(2)步和第

(3)步的实现过程

图4-2 数据推送的开发流程

412 第三方应用平台接入验证程序

第三方应用平台接入验证程序工作流程如下所述当 OneNET 平台完成对第

三方开发平台的配置后会向第三方开发平台发起 URLampToken验证接入验证程

序对平台发送的验证参数进行验证验证通过后第三方开发平台会向 OneNET

平台返回验证消息当 OneNET 平台收到验证消息后说明第三方开发平台与

OneNET平台已建立连接

目前 OneNET平台为第三方应用平台提供接入验证程序的 SDK有 Javaphp

Nodejs和 C四个版本

SDK 下载地址httpsopeniot10086cndocart432html118 -ldquo数

据推送rdquo

413 OneNET 平台配置第三方应用平台

在 OneNET平台对第三方应用平台的配置界面如图 4-3所示

URL第三方开发平台的地址

Token可以自定义用于第三方开发平台接入平台握手验证

消息加解密方式有明文模式和安全模式当启用安全模式后平台端需要

用户自定义 AESKey 或者由平台随机生成在应用程序中使用该 AESKey 解密消

中移物联网有限公司 OneNET 开发文档中心

推送时间限制(秒)和推送数据限制(个)设置ldquo推送时间限制rdquoldquo推送数

据限制rdquo可以实现批量推送数据减少服务器压力当满足ldquo推送时间限制rdquo和

ldquo推送数据限制rdquo要求后OneNET 将给第三方推送数据如果没有设置ldquo推送

时间限制rdquo和ldquo推送数据限制rdquo将默认数据实时推送

图4-3 第三方开发平台的配置界面

当用户成功在 OneNET 平台配置了第三方开发平台服务器地址后点击ldquo提

交rdquo按钮后OneNET 平台会向第三方应用平台发起 URLampToken 验证请求验证

通过且收到第三方返回的验证消息后则第三方应用平台与 OneNET 平台已建立

连接之后OneNET 平台在收到设备数据时会将设备数据推送到已配置的第三

方应用平台

用户数据接收服务程序接收到 OneNET平台发送的 ldquoURLampTokenrdquo验证请求

请求的格式形如httpipporttestmsg=xxxampnonce=xxxampsignature=xxx

蓝色字体部分为用户在 OneNET平台配置的 URL常规的验证流程如下

(1)在请求中获取参数ldquononcerdquoldquomsgrdquo的值将ldquotokenrdquo(此为页面

配置参数 token的值)ldquononcerdquoldquomsgrdquo的值计算 MD5(token+nonce+msg)

加密值并且编码为 Base64字符串值

中移物联网有限公司 OneNET 开发文档中心

(2)将上一步中 Base64字符串值通过 URL Decode 计算后的值与请求参数

ldquosignaturerdquo的值进行对比如果相等则表示 token验证成功

(3)如果 token 验证成功向 OneNET 平台返回ldquomsgrdquo参数值否则返回

其他值

说明如果用户不想验证 Token 的有效性可以忽略以上步骤并直接向

OneNET平台返回ldquomsgrdquo参数值

42 OneNET 平台数据推送

平台以 HTTPS POST 请求形式向第三方应用平台注册地址推送数据推送数

据相关信息以 JSON 串的形式置于 HTTPS请求中的 body部分

第三方应用平台在接收数据时会接收到数据的明文消息或者密文消息

明文消息中以ldquotyperdquo的数值区分不同的消息而密文消息与明文消息的区别

是ldquomsgrdquo部分经过了加密处理下面将分别对明文消息密文消息以及消息相

关字段和密文的加密算法进行说明

421 明文消息

明文消息有两种消息类型分别为数据点消息和设备上下线消息而数据点

消息又分为单条数据点消息和数据点消息批量形式数据点消息批量形式中的不

同数据点是以不同时间戳区分的

(1)数据点消息(type=1)

msg

type 1

dev_id 2016617

ds_id datastream_id

at 1466133706841

value 42

msg_signature message signature

nonce abcdefgh

(2)数据点消息批量形式(type=1)

msg [

type 1

dev_id 2016617

ds_id datastream_id

中移物联网有限公司 OneNET 开发文档中心

at 1466133706841

value 42

type 1

dev_id 2016617

ds_id datastream_id

at 1466133706842

value43

]

msg_signature message signature

nonce abcdefgh

(3)设备上下线消息(type=2)

msg

type 2

dev_id 2016617

status 0

login_type 1

at 1466133706841

msg_signature message signature

nonce abcdefgh

422 密文消息

密文消息中的ldquoenc_msgrdquo是由明文消息中的ldquomsgrdquo采用 AES 加密算法而

enc_msgxxxx

msg_signature

message signature

nonceabcdefgh

423 消息相关字段说明

表4-1 消息相关字段说明

字段 字段说明

type 标识数据类型当前版本范围[15]

dev_id 设备 ID

ds_id 公 开 协 议 中 的 数 据 流 ID 其 格 式 为

objectID_instanceID_resourceID

at 平台时间戳单位 ms

value 具体数据部分为设备上传至平台或触发的相关

数据

中移物联网有限公司 OneNET 开发文档中心

status 设备上下线标识

0-下线 1-上线

login_type

设备登陆协议类型

1EDP 2nwx 3JTEXT 5JT808 6

MODBUS 7MQTT 8gr2010NB-IoT

cmd_type

命令响应的类型

1设备收到 cmd的 ACK 响应信息 2设备收到

cmd的 Confirm响应信息

cmd_id 命令 ID

msg_signatur

e 消息摘要

nonce 用于计算消息摘要的随机串

enc_msg 加密密文消息体对明文 JSON串(msg字段)的

加密

424 加密算法详述

平台基于 AES算法提供加解密技术具体阐述如下

EncodingAESKey 即消息加解密 Key 的 BASE64编码形式长度固定为 43

个字符从 a-zA-Z0-9共 62个字符中选取由服务开启时填写后

也可申请修改

AES密钥计算为 AESKey=Base64_Decode(EncodingAESKey + ldquo=rdquo)

EncodingAESKey 尾部填充一个字符的ldquo=rdquo 用 Base64_Decode 生成 32

个字节的 AESKey

AES采用 CBC 模式秘钥长度为 32 个字节(256位)数据采用

PKCS7填充 初始化 iv向量取秘钥前 16字节 PKCS7K为秘钥字

节数(采用 32)buf为待加密的内容N为其字节数Buf 需要被填

充为 K的整数倍在 buf的尾部填充(K-NK)个字节每个字节的内容

是(K- NK)具体详见toolsietforghtmlrfc2315

BASE64采用 MIME格式字符包括大小写字母各 26个加上 10个数

字和加号ldquo+rdquo斜杠ldquordquo一共 64个字符等号ldquo=rdquo用作后缀填

出于安全考虑平台网站提供了修改 EncodingAESKey的功能(在

EncodingAESKey 可能泄漏时进行修改对应上第三方平台申请时填写

的接收消息的加密对称密钥)所以建议保存当前的和上一次的

中移物联网有限公司 OneNET 开发文档中心

EncodingAESKey若当前 EncodingAESKey 生成的 AESKey解密失败则

尝试用上一次的 AESKey的解密

平台的加密消息部分为 enc_msg= Base64_Encode( AES_Encrypt

[random(16B)+msg_len(4B)+msg] )即以 16字节随机字节串拼接 4字

节表示消息体长度的字节串(此处 4 字节长度表示为网络字节序)再加

上消息本身的字节串作为 AES加密的明文再以 AES算法对明文进行加

密生成密文最后对密文进行 BASE64 的编码操作生成加密消息体

对加密消息体的解密流程为1)首先进行加密消息体的 BASE64 解码操作

aes_msg=Base64_Decode(enc_msg)2)对获取的解码内容以 AES 算法进行解密

操作获取明文部分plain_msg=AES_Decrypt(aes_msg)解密中使用的秘钥由

EncodingAESKey 计算得来使用的初始化 iv 向量为计算出的 aes 秘钥的前 16

字节3)去掉 plain_msg 的前 16 字节再以前 4 字节取出消息体长度根据消

息体长度获取真实的消息部分(推荐以消息体长度获取真实消息以兼容

plain_msg 未来可能出现的结构变更)表示加密传输的数据后两字段与明文

传输一致

43 API 接口

第三方开发平台应用层通过 Rsetful API 的方式和 OneNET平台进行交互对

接实现命令的下发数据的读写以及相关业务的交互

针对 MQTT 协议目前主要开发了以下 API 用来实现第三方开发平台向

OneNET平台请求读写执行以及设备管理请求具体见下表 4-2下面分别对每一

种 API进行说明

表4-2 API功能说明

API 类别 操作对象 API名称

需要终端响应 只需平台响应

设备

注册

更新设备注册属性

新增

更新

精确查询单个设备

中移物联网有限公司 OneNET 开发文档中心

模糊查询设备

批量查询设备状态

删除

数据流

新增

更新

查询单个数据流

查询多个数据流

删除

数据点

新增

查询

二进制数

新增

查询

触发器

新增

更新

查询单个触发器

模糊查询触发器

删除

触发数据内容

命令

发送命令

查询命令状态

查询命令相应

查询设备历史命令

视频能力 获取播放地址

APIKEY

新增

更新

查看

删除

消息订阅

按 Topic发送命令

查询订阅指定 Topic设备的列表

查询设备订阅的 Topic列表

删除产品的 Topic

查询产品的 Topic

中移物联网有限公司 OneNET 开发文档中心

432 设备

4321 注册

表4-3 设备注册

HTTP方法 POST

URL apihecloudscomregister_de

URL参数 register_code=6TM1OkhNsTjATvFx 设备注册码(必填)

HTTP内容

(示例)

sn 2015031401421 设备唯一标识 string类型最长 512字符

mac C89346DA4373 设备唯一 mac标识最长 32字符

title myedpdevice 设备名(可选) 最长 32个字符

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

keyQ1VdWoEvdkCye=d1=HcCSP6LvCw= 新设备 apikey

device_id 325018 设备 ID

说明

1 响应消息中 errno 表示错误码error 表示错误原因如果创建设备失

败则没有 data字段

2 snmac一定要必填其中一个而且只可以传一个用于鉴权就是设备

新增中的 auth_info

3 此接口根据产品设置的不同默认 allow_dup=true可以生成新设备及

key或获取原有设备及 key见下表

表4-4 对应表

产品允许重复 sn 在产品中已存在 sn 在产品中不存在

allow_dup=true 是 sn 对应的设备 id 和 key 新的设备 id 和 key

allow_dup=false 否 报错 新的设备 id 和 key

中移物联网有限公司 OneNET 开发文档中心

此接口返回的新设备默认设备名均为auto_register均为私有设

备设备协议与产品协议相同

4322 更新设备注册属性

表4-5 更新设备注册属性

HTTP方法 PUT

URL apihecloudscomregister_attr

HTTP头部 api-key xxxxddddsssaaa 必须为 masterkey

HTTP内容

(示例)

allow_dup true|false是否允许重复提交相同的设备 sn 默认 true

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

默认 allow_dup 为 true主要用于设备注册码创建设备属性限制

4323 新增

表4-6 新增设备注册属性

HTTP方法 POST

URL apihecloudscomdevices

HTTP头部 api-key xxxxddddsssaaa 必须为 masterkey

HTTP内容

(示例)

title mydevice 设备名

desc some description 设备描述(可选)

tags [chinamobile] 设备标签(可选可为一个或多个)

protocolMQTT 选择一种接入协议(可选默认为 HTTP)

location lon 106 lat 29 ele 370设备位置纬度

经度 高度(可选)

private true| false 设备私密性(可选默认为 ture)

auth_info 201503041a5829151 MQTT设备设备唯一编号

other version 100 manu china mobile 其他信息(可

选JSON格式可自定义)

HTTP响应响

应消息内容

(实例)

errno 0

error succ

data

中移物联网有限公司 OneNET 开发文档中心

device_id233444 平台分配的设备 ID

4324 更新

表4-7 更新

HTTP方法 PUT

URL apihecloudscomdevicesdevice_id

HTTP头部 api-key xxxxddddsssaaa masterkey或设备 apikey

HTTP内容

(示例)

title mydevice 设备名(可选)

desc some description 设备描述(可选)

tags [chinamobile] 设备标签(可选)

protocolMQTT 选择一种接入协议(可选)

location lon106 lat 29 ele 370设备位置经度

纬度 高度(可选)

private true| false 设备私密性(可选)

auth_info201503041a5829151 MQTT设备设备唯一编号(可选)

other version 100 manufacturer china mobile 其

他信息(可选)

HTTP响应响

应消息内容

(示例)

errno 0

error succ

中移物联网有限公司 OneNET 开发文档中心

4325 精确查询单个设备

表4-8 精确查询单个设备

HTTP方法 GET

URL apihecloudscomdevicesdevice_id

HTTP头部 api-key xxxxddddsssaaa masterkey 或设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

iddevice_id

tags [chinamobile]

onlinetrue|false

protocolMQTT

titlemy device1

descsome description

create_time2015-09-16 102222

privatetrue|false

locationele370lat17609lon17703

auth_infohellip

otherversion100manufacturerchina mobile

keys[titledevice-auto-keykey2JO3B12O1]

数据流

datastreams[

create_time 2014-10-23 202222

iddatastream_id1

unitcelsius

unit_symbolC

uuid 231a5aa9-9de4-5f2e-9e0f-015181c98429

]

4326 模糊查询设备

表4-9 模糊查询设备

HTTP方法 GET

URL apihecloudscomdevices

中移物联网有限公司 OneNET 开发文档中心

URL 参数

key_words=my 匹配关键字(可选从 id和 title字段中左匹配)

auth_info=203x1 鉴权信息(可选对应注册时的 sn参数唯一设

备编号)

tag=mobile 标签(可选)

online=true| false 在线状态(可选)

private=true| false 私密性(可选)

page=1 指定页码最大页数为 10000(可选)

per_page=30 指定每页输出设备个数默认 30最多 100(可选)

device_id=235122 指定设备 ID多个用逗号分隔最多 100个(可

选)

begin=2016-06-20 起始时间包括当天(可选)

end=2016-06-20 结束时间包括当天(可选)

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

total_count1

per_page30

page1

devices

[

id3497307

titlemy device1

desc device desc

privatetrue

protocolMQTT

onlinefalse

locationlon10655231191544001lat29535451246673

create_time2013-02-11 122233

auth_infoSYSz=8QY3r7aTQ48UKfqPnB=PybYRo=

]

4327 批量查询设备最新数据

表4-10 批量查询设备最新数据

HTTP方法 GET

中移物联网有限公司 OneNET 开发文档中心

URL apihecloudscomdevicesdatapoints

URL参数 devIds=1221122331123 设备 id用逗号隔开限制 1000 个设备

HTTP头部 api-key xxxxddddsssaaa masterkey 或设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

error ldquosuccrdquo

data

devices [

id 12323 设备 id

title daf设备名

datastreams

[

id temperature数据流名称

at 2017-02-12 102222数据流更新时间

value 12数据流最新数据

hellip

helliphellip

]

hellip

hellip

]

4328 删除

表4-11 删除设备

HTTP方法 DELETE

URL apihecloudscomdevicesdevice_id

HTTP头部 api-key xxxxddddsssaaa 可为设备级别的 Key

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

中移物联网有限公司 OneNET 开发文档中心

说明删除设备会删除该设备下所有数据流和数据点删除设备动作是异步

的系统会在后续逐步删除该设备下的数据流和数据点

433 数据流

4331 新增

表4-12 新增数据流

HTTP方法 POST

URL apihecloudscomdevicesdevice_iddatastreams

HTTP头部 api-key xxxxddddsssaaa masterkey 或设备 apikey

HTTP内容

(示例)

idtemperature 数据流名称 示例温度

tags[Tag1Tag2] 数据流标签(可选可以为一个或多个)

unitcelsius 单位(可选)

unit_symbolC 单位符号(可选)

HTTP响应响

应消息内容

(示例)

errno 0

data

ds_uuid 9e6bcac9-2c6f-59d5-adae-3955df2e7bce平台分配

数据流 UUID

error succ

4332 更新

表4-13 更新数据流属性

HTTP方法 PUT

URL apihecloudscomdevicesdevice_iddatastreamsdatastream_id

示例apihecloudscomdevices421240datastreamstemperature

HTTP头部 api-key xxxxddddsssaaa masterkey 或设备 apikey

HTTP内容

(示例)

tags[Tag1Tag2] 数据流标签(可选)

unitcelsius 单位(可选)

unit_symbolC 单位符号(可选)

HTTP响应响

应消息内容

(示例)

errno 0

error succ

中移物联网有限公司 OneNET 开发文档中心

4333 查询单个数据流

表4-14 查询单个数据流

HTTP方法 GET

URL apihecloudscomdevicesdevice_iddatastreams

URL参数 datastreams_ids = 查看的 datastream的 id

HTTP头部 api-key xxxxddddsssaaa masterkey 或该设备的设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

data [

update_at 2018-06-29 112938 数据流最后更新时

id 湿度 数据流名称

create_time 2018-06-28 170548数据流创建时间

current_value 53845013最新数据点

]

error succ

4334 查询多个数据流

表4-15 查询多个数据流

HTTP方法 GET

URL apihecloudscomdevicesdevice_iddatastreams

URL 参数

datastream_ids= 查看的 datastream的 id多个 id之间用英文逗号

分开(参数缺省时为查询所有数据流)

示例

apionenetcomdevices1234datastreamsdatastream_ids=tempgps

表示查看 temp和 gps两个数据流的信息

HTTP头部 api-key xxxxddddsssaaa masterkey 或者 该设备的设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data 数据流信息

[

idtemperature 数据流名称设备范围内唯一

tags[Tag1Tag2] 数据流标签

unitcelsius 单位

unit_symbolC单位符号

create_timexxxx-xx-xx 102222 创建时间

中移物联网有限公司 OneNET 开发文档中心

current_valuehellip该数据流下数据点最新值

update_atxx-xx-xx该数据流下数据点最新上传时间

]

[

idhumi 数据流名称设备范围内唯一

tags[Tag1Tag2]

unit_symbol

create_timexxxx-xx-xx 102222

current_valuehellip

update_atxx-xx-xx

]

[]

4335 删除

表4-16 删除数据流

HTTP方法 DELETE

URL apihecloudscomdevicesdevice_iddatastreamsdatastream_id

URL参数 无

HTTP头部 api-key xxxxddddsssaaa masterkey 或者设备 key

HTTP响应响

应消息内容

(示例)

errno 0

error succ

434 数据点

4341 新增

中移物联网有限公司 OneNET 开发文档中心

表4-17 新增数据点

HTTP方法 POST

URL apihecloudscomdevicesdevice_iddatapoints

URL参数 type=3 上传数据类型(可选默认为完整 JSON型见 HTTP内容示

例)

HTTP头部 api-key xxxxddddsssaaa masterkey 或者 设备 apikey

HTTP内容

(示例)

datastreams

[

id temperature 数据流名称或数据流模板名称

datapoints [

at 2013-04-22T003543 上传数据点时间可选如

果为空则设备云会取当前时间如果存在其格式必须为 YYYY-MM-

DDThhmmss的形式(例如2015-03-22T223112)

value 42 上传数据点值

at 2013-04-22T005543

value 84 上传数据点值

]

id key 数据流名称或数据流模板名称

datapoints [

at 2013-04-22T003543上传数据点时间可选

value hellip上传数据点值

at 2013-04-22T003543

value hellip上传数据点值

]

hellip

]

中移物联网有限公司 OneNET 开发文档中心

HTTP 响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

1 可以一次性向设备云上传多个数据流每个数据流中可以包括多个数据

点示例程序表示向设备云上数据流 temperature 和数据流 key上传数据其中

temperature数据流有两个数据点key数据流也有两个数据点

2 如果某个数据流不存在则在增加数据点时设备云会自动创建一个新

的数据流注意新数据流的 datastream id 不可为空

3 数据点表示在某个时刻该数据流的值其 at表示时间为可选字段如

果为空则设备云会取当前时间如果存在其格式必须为YYYY-MM-DDThhmmss

的形式(例如2015-03-22T223112)

4 数据点中的 value表示具体的值其值为 JSON对象可以为整型浮点

型字符串多种类型如果 value部分用双引号括起来则其在设备云存储为字

符串如果不用双引号括起来则其表示数值字符编码现在只支持 UTF-8

5 数据点对应的时间是数据点的标识的一部分相同时间的两个数据点

设备云会同时对这两个相同时间的数据点进行保存不会出现覆盖另一个数据点

的情况一般如果 at 部分取空设备云会取系统时间精度为毫秒如果在一

条命令中某一个数据流包含多个数据点都没有 at 字段设备云将会对所有数据

点进行保存

6 新增数据点支持如下简写方式在请求的 URL中增加 type字段指示所

使用的格式类型目前 type支持 345三种情况

URLapihecloudscomdevices2214570datapointstype=3

示例temperature225humidity952

表示在数据流 temperature中增加一个数据点 225在 humidity 中增加一

个数据点 952

URLapihecloudscomdevices2214570datapointstype=4

示例temperature2015-03-22T223112225

表示在数据流 temperature中加一个数据点在 2015年 3月 22 日 22点 31

中移物联网有限公司 OneNET 开发文档中心

分 12秒的值为 225

URLapihecloudscomdevices2214570datapointstype=5

示例temperature2015-03-22T223112225pm2589

表示在数据流 temperature中加一个数据点即 2015年 3月 22 日 22点 31

分 12秒的值为 225在数据流 pm25中添加一个数据点即当前时间的值为 89

4342 查询

表4-18 查询数据点

HTTP方法 GET

URL apihecloudscomdevicesdevice_iddatapoints

URL 参数

datastream_id=abc 查询的数据流多个数据流之间用逗号分隔

(可选)

start=2015-01-10T080035 提取数据点的开始时间(可选)

end=2015-01-10T080035 提取数据点的结束时间(可选)

duration=3600 查询时间区间(可选单位为秒)

start+duration按时间顺序返回从 start开始一段时间内的数据点

end+duration按时间倒序返回从 end回溯一段时间内的数据点

limit=100 限定本次请求最多返回的数据点数0ltnlt=6000(可选

默认 1440)

cursor= 指定本次请求继续从 cursor位置开始提取数据(可选)

sort=DESC | ASC 值为 DESC|ASC时间排序方式DESC倒序ASC升

序默认升序

ltnlt=6000(可选默认 1440)

HTTP头部 api-key xxxxddddsssaaa masterkey 或者 该设备的设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

cursor70921_3771908_1472355096

datastreams[

idtemperature数据流名称或数据流模板名称

datapoints[

at xxxx-xx-xx 102222value42数据点上传时间和

at xxxx-xx-xx 102222value84

]

中移物联网有限公司 OneNET 开发文档中心

idkey 数据流名称或数据流模板名称

datapoints[

at xxxx-xx-xx 102222valuehellip

atxxxx-xx-xx 102222valuehellip

]

hellip

]

1 若不携带任何参数平台返回本设备所存在的所有数据流中的最新数据

(这一种情况下查询时出现时延较大的性能问题建议在 URL 参数中加上

newadd参数并将其值赋为 true如 newadd=true)

2 若不携带数据流 id参数携带 limit 参数时会返回该设备每个数据流

最多 limit 条数据

3 若要查看某一条数据流数据需在上述 URL中增加参数 datastream_id

4

apihecloudscomdevices564280datapointsdatastream_id=tempamplimit

=10会返回数据流temp中最近的 10个数据点

5 要查看某一条数据流在某个时间范围内的数据可以在增加 start和 end

参数

示例

apihecloudscomdevices564280datapointsdatastream_id=temper

atureampstart=2013-05-12T171233ampend=2013-06-12T172233 表示查询本设

备对应的数据流在 2013 年 5 月 12 日 17 点 12 分 33 秒到 17 点 22 分 33 秒的数

据点注意如果 start 参数存在end参数不存在表示取 start后的所有数据

如果 start 不存在end 存在设备云会忽略 end参数注意日期时间格式格

式必须为示例中的格式YYYY-MM-DDThhmmss例如2013-05-12T171233

日期和时间之间用大写字母 T 分隔start 和 end 之间的时间间隔最大为 1 年

超过一年会忽略

如果指定了 start 参数则可能返回的数据点的数目会很多此时默认会返

回最多 100 个数据点可以使用 limit 参数设定返回多少个数据点最大为

6000个数据点当实际的数据点数目多于 limit 限定的数目时返回的 json串

中移物联网有限公司 OneNET 开发文档中心

中会有一个 cursor 字段下一次请求的命令行中可以携带此 cursor 字段表示接

着遍历本数据流此 cursor字段标识上次取出数据点后下一个数据点的位置

435 二进制数据

4351 新增

将二进制数据将作为数据点保存到设备下的某个数据流中设备云返回该二

进制数据的索引号

表4-19 新增二进制数据

HTTP方法 POST

URL apihecloudscombindata

URL参数 device_id=421590 数据所属设备(必选)

datastream_id=bin 该数据所属已经存在的数据流(必选)

HTTP头部 api-key xxxxddddsssaaa masterkey 或者该设备的设备 key

HTTP 内 容

(示例)

普通二进制数据文件图像等

(最大限制为 800上传时间间隔需大于 1ms)

HTTP响应响

应消息内容

(示例)

errno 0

error succ

data

index3491506_1475204886914_bin 二进制数据索引号

4352 查询

表4-20 查询二进制数据

HTTP方法 GET

URL apihecloudscombindataindex

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

普通二进制数据文件图像等二进制形式数据

436 触发器

4361 新增

表4-21 新增触发器

HTTP方法 POST

中移物联网有限公司 OneNET 开发文档中心

URL apihecloudscomtriggers

HTTP头部 api-key xxxxddddsssaaa 必须为 masterkey

HTTP内容

(示例)

titlewen du jian kong 设备名(可选)

ds_idgps 数据流名称(id)(可选)

dev_ids[10272345615523] 设备 ID(可选)

ds_uuids[ 数据流 uuid(可选)

9ad09uac-7446-512f-b07c-90jdnzj8120ad

4599436e-7146-5349-b07c-79fa0919cs62

]

urlxxbbcom

typegt | gt= | lt | lt= | == | inout | in | out |change | frozen |

live

threshold100 阙值根据 type不同见以下说明

1) type 为gt|gt=|lt|lt=|==时threshold必须为数值

2) type为 inout时threshold 设置为lolmt40 uplmt52 表示

数据流的值首次进入或离开闭区间[4052]时触发

3) type为 change时threshold 参数不用传递当上传的值有改变时触发

告警

4) type为 frozen时threshold 为数值指定距离最后一次数据上报多少

秒内未上报数据触发告警同时被监控对象进入 frozen状态

5) type 为 live 时threshold 为数值指定距离最后一次数据上报多少秒

后上报数据触发告警

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

tirgger_id233444 触发器 ID

说明

1触发器的含义是当指定范围内的数据点满足触发条件的要求时会向

url参数指定的地址发送 post请求

2触发器有三种工作触发模式

1)在请求参数中单独指定了 ds_id不包括其他参数那么当前项目下

中移物联网有限公司 OneNET 开发文档中心

所有设备的数据流中数据流名称符合 ds_id 的数据都会进入触发判断逻辑

2)在请求参数中单独指定了 ds_uuids 数组那么只有这些指定的数据

流会进入触发判断逻辑

3)在请求参数中指定了 ds_id 和 dev_ids那么只有这些指定的设备的

数据流会进入触发判断逻辑

4362 更新

表4-22 更新触发器属性

HTTP方法 PUT

URL apihecloudscomtriggerstirgger_id

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP内容

(示例)

titlewen du jian kong

ds_uuids[

9ad09uac-7446-512f-b07c-90jdnzj8120ad

4599436e-7146-5349-b07c-79fa0919cs62

]

urlxxbbcom

typegt | gt= | lt | lt= | == | inout | in | out | exp | change |

frozen | live

threshold100

注若要修改 type需要对应设置 threshold

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

4363 查询单个触发器

表4-23 查询单个触发器

HTTP方法 GET

URL apihecloudscomtriggerstirgger_id

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

idtrigger_id1

中移物联网有限公司 OneNET 开发文档中心

titlewen du jian kong

ds_uuids[

datastream1_uuidrdquo

datastream2_uuidrdquo

datastream3_uuidrdquo

]

urlxxbbcom

typegt|gt=|lt|lt=|==|in|out|exp|change|frozen|live

threshold100

invalidtrue 触发器是否已失效

create_timexx-xx-xx 102222

4364 模糊查询触发器

表4-24 模糊查询触发器

HTTP方法 GET

URL apihecloudscomtriggers

URL 参数

title=name 指定触发器名称

page=1 指定页码可选

per_page=10 指定每页输出个数可选默认 10最多 100

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data

total_count600

per_page30

page1

triggers[

idtrigger_id1

titlewen du jian kong

ds_uuids

[datastream1_uuidrdquo datastream2_uuidrdquo]

urlxxbbcom

typegt|gt=|lt|lt=|==|in|out|exp|change|frozen|live

threshold100

invalidtrue 触发器是否已失效

create_timeXXXXXXXX

中移物联网有限公司 OneNET 开发文档中心

]

说明触发器失效是指触发器所依赖的数据流或者设备被删除了此时触发

器永远不会有效触发事件

4365 删除

表4-25 删除触发器

HTTP方法 DELETE

URL apihecloudscomtriggerstirgger_id

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno 0

error succ

4366 触发数据内容

触发数据是指当 OneNET 设备云判断某个触发器的触发条件满足时会通过

POST方式向外抛出的 URL请求在 HTTP的 POST消息体中会携带如下格式的 JSON

字符串

表4-26 触发器内容

数据内容

(示例)

trigger

id1

threshold90

typegt

current_data[

dev_id2656

ds_idgps

ds_uuidFWEF-ZFW-ZFW-ZFWW

at2009-09-07T121602001403Z

value100

dev_id2656

ds_idtemper

中移物联网有限公司 OneNET 开发文档中心

ds_uuidFEWEF-ZFWFWW-WFWW-FWEFFWW

at2009-09-07T121602001403Z

value882

]

437 命令

命令是指应用发送命令数据给 OneNET设备云再由 OneNET设备云转发给终

端设备终端设备收到命令后可以向设备云反馈响应的一种工作机制命令下发

后应用可以通过 API查询命令状态和提取命令的响应数据

命令的执行步骤如下

1应用通过 API 向设备云发送命令数据

2设备云生成该命令的 uuid作为该命令的唯一标识并向应用返回同时向

终端设备转发命令数据

3 终端设备收到命令数据后执行命令数据可以生成响应也可以不响应

4设备云跟踪记录命令的响应如果设备有响应就关联命令 uuid和响应

结果

5应用通过 API 向设备云提取命令执行结果(API 请求中携带命令 uuid 标

识)

特别说明

命令下发到终端设备后如果终端设备 10 秒内未收到响应则此命令的状

态将被设置为超时应用通过 API 查询命令状态时会反馈超时超过 10 秒后

收到的响应会被丢弃

终端设备针对同一条命令回复多条命令响应只有在未超时时间内收到的最

后一条是有效响应前面的响应包将会被覆盖因此终端设备应该对每个命令只

有一个响应包

4371 发送命令

表4-27 发送命令

HTTP方法 POST

URL apihecloudscomcmds

URL 参数 device_id=415120 接收该数据的设备 ID(必选)

中移物联网有限公司 OneNET 开发文档中心

qos=0 | 1 是否需要响应默认为 0

0不需要响应即最多发送一次不关心设备是否响应

1需要响应如果设备收到命令后没有响应则会在下一次设备登陆

时若命令在有效期内(有效期定义参见 timeout参数)则会继续发送

对响应时间无限制多次响应以最后一次为准

本参数仅当 type=0时有效

timeout=300 命令有效时间默认 0

0在线命令若设备在线下发给设备若设备离线直接丢弃

gt0 离线命令若设备在线下发给设备若设备离线在当前时间

加 timeout时间内为有效期有效期内若设备上线则下发给设备单

位秒有效围0~2678400

本参数仅当 type=0时有效

type=0 | 1 默认 00发送 CMD_REQ包1发送 PUSH_DATA包

HTTP头部 api-key xxxxddddsssaaa masterkey或者设备 apikey

HTTP内容 用户自定义数据jsonstring二进制数据(小于 64K)

HTTP响应响

应消息内容

(示例)

errno 0

error succ

data

cmd_uuid2302-312-FWs 命令 id

4372 查询命令状态

表4-28 查询命令状态

HTTP方法 GET

URL apihecloudscomcmdscmd_uuid

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno 0

error succ

data

status1

0设备不在线|Device not online

1命令已创建| Command Created

2命令已发往设备| Command Sent

3命令发往设备失败| Send Command Failed

4设备正常响应| Command Response Received

5命令执行超时| Command Response Timeout

6设备响应消息过长 | Command Response Too Large

descldquosendingrdquo

中移物联网有限公司 OneNET 开发文档中心

4373 查询命令响应

表4-29 查询命令响应

HTTP方法 GET

URL apihecloudscomcmdscmd_uuidresp

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP 响应响

应消息内容

用户设备返回的响应内容

4374 查询设备历史命令

表4-30 查询设备历史命令

HTTP方法 GET

URL apihecloudscomcmdshistoryltdevice_idgtltdevice_idgt

URL 参数

start=2015-01-10T080035 查询的开始时间(可选)

end=2015-01-10T080535 查询的结束时间(可选)

page=1 指定页码最大页数为 10000(可选)

per_page=30 指定每页输出设备个数默认 30最多 100(可选)

HTTP头部 api-key xxxxddddsssaaa

HTTP响应响

应消息内容

errno 0

error succ

data

page 1当前页码

per_page 10当前每页总数

total_count 100

items [

cmd_uuid 2302-312-FWs

device_id 2设备 ID

expire_time 2016-07-05 000000过期时间

status 0命令状态

send_time 2016-07-05 000000发送时间

confirm_time 2016-07-05 000000响应时间

confirm_body 2463726571007b202274797022 响应内容

16进制字符

body 2463726571007b202274797022请求内容16进制字符

hellip

中移物联网有限公司 OneNET 开发文档中心

hellip

]

438 视频能力

4381 获取播放地址

表4-31 获取播放地址

HTTP方法 GET

URL apihecloudscomipcrtmp_address

URL 参数

device_id= 接收该数据的设备 ID(必填)

channel_id = 对应数据流名称中的 channelnum

protocol_type = 播放协议类型 0rtmp1hls2http-flv

HTTP头部 api-key xxxxddddsssaaa masterkey或者设备 apikey

HTTP响应响

应消息内容

(示例)

errno 0

errorrdquosuccrdquo

ldquodatardquo

addripport

accessTokenldquo字符串rdquo

439 APIKEY

4391 新增

表4-32 新增 APIKEY

HTTP方法 POST

URL apihecloudscomkeys

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP内容

(示例)

title sharing key key 的命名

permissions [

resources [ 被授权的资源

中移物联网有限公司 OneNET 开发文档中心

dev_id 424 被授权的设备 id

dev_id 425 被授权的设备 id

hellip

hellip

]

access_methods [ 被授权的命令

get

put

post

]

]

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

data key2302-312-FWs key_string

说明授权命令是可选的另外被授权的命令也可以是 getputpost 的

一个或几个如只授权 get和 put命令

access_methods [getput]

4392 更新

表4-33 更新 APIKEY

HTTP方法 PUT

URL apihecloudscomkeyskey_string

HTTP头部 api-key xxxxddddsssaaa masterkey(注只能为 master-key)

HTTP内容

(示例)

title sharing key key 的命名

permissions [

resources [ 被授权的资源

dev_id 424 被授权的设备 id

ds_idfan1 数据流 id可选

中移物联网有限公司 OneNET 开发文档中心

dev_id 425 被授权的设备 id

ds_idfan1 数据流 id可选

hellip

hellip

]

access_methods [ 被授权的命令可选

get

put

post

]

]

HTTP响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

说明

1对于 masterkey 不允许更新操作masterkey 默认具有最大权限可以访

问该用户名下所有设备所有数据

可以进行 POSTGETPUTDELETE操作如果更新 master key 系统会返回

失败

2授权命令是可选的另外被授权的命令也可以是 getputpost 的一个

或几个如只授权 get和 put命令

access_methods [getput]

3API key 更新是覆盖操作会将原来存在的授权资源和授权命令覆盖不

会保留原来的授权资源和授权命令

4393 查看

中移物联网有限公司 OneNET 开发文档中心

表4-34 查看 APIKEY

HTTP方法 GET

URL httpapihecloudscomkeys

URL 参数

key = FWJPO-FZFHW-FFEWB可选只查看该 key相关信息

page = 1 指定页码 可选

per_page = 10 指定每页输出个数可选默认 10最多 100

device_id = xxbbcc可选只查看与该设备相关的非 master-key

HTTP头部 api-key xxxxddddsssaaa masterkey(注只能为 master-key)

HTTP响应响

应消息内容

(示例)

errno 0

data

per_page 30

total_count 2

keys [

create_time 2015-11-04 142552

title Auto-generated-master-key

key 03GeDLYk0WNk1V338g7yndKZYkQA

create_time 2015-12-03 100041

permissions [

resources [

dev_id 564280

]

]

title 设备 1测试 Key

key vuHebEWefiU2Ueo5ouoCc1CUsYQ=

]

page 1

error succ

中移物联网有限公司 OneNET 开发文档中心

4394 删除

表4-35 删除 APIKEY

HTTP方法 DELETE

URL httpapihecloudscomkeyskey_string

HTTP头部 api-key xxxxddddsssaaa masterkey(注只能为 master-key)

HTTP 响应响

应消息内容

(示例)

errno 0

errorldquosuccrdquo

4310 消息订阅

43101 按 Topic 发送命令

表4-36 按 Topic 发送命令

HTTP方法 POST

URL apihecloudscommqtt

URL参数 topic=xxx 设备订阅的主题(必选)

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP 内 容

(示例)

HTTP响应响

应消息内容

(示例)

errno0

errorldquosuccrdquo

data

total_count1

per_page30

page1

devices [123123433333]

43102 查询订阅指定 Topic设备的列表

表4-37 查询订阅制定 Topic设备的列表

HTTP方法 GET

URL apihecloudscommqtttopic_device

URL 参数

topic=xxx 设备订阅的主题(必选)

page=1 当前页码 必填大于等于 1

per_page=10 每页 必填范围 1-1000

中移物联网有限公司 OneNET 开发文档中心

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP内容

(示例)

HTTP响应响

应消息内容

(示例)

errno0

errorldquosuccrdquo

data

total_count1

per_page30

page1

devices [123123433333]

43103 查询设备订阅的 Topic列表

表4-38 查询设备订阅的 Topic列表

HTTP方法 GET

URL apihecloudscommqttdevice_topicdevice_id

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno0

errorldquosuccrdquo

data

[topic_name1 topic_name2 topic_name3]

43104 删除产品的 Topic

表4-39 删除产品的 Topic

HTTP方法 DELETE

URL apihecloudscommqtttopic

URL参数 name=xxx topic名(必选)

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno0

errorldquosuccrdquo

中移物联网有限公司 OneNET 开发文档中心

43105 查询产品的 Topic

表4-40 查询产品的 Topic

HTTP方法 GET

URL apihecloudscommqtttopic

URL参数 无

HTTP头部 api-key xxxxddddsssaaa masterkey

HTTP响应响

应消息内容

(示例)

errno0

errorldquosuccrdquo

data

[topic_name1topic_name2topic_name3]

中移物联网有限公司 OneNET 开发文档中心

第五章 接入实例

51 MQTT-device 接入

511 工具下载

为方便开发人员直观感受使用 mqtt 协议进入平台的便利可使用平台提供

的 MQTT 设备模拟器进行接入平台请在首页-gt开发文档-gt资源下载-gt13 调试

工具下载进行下载如下图

图5-1 资源下载

下载地址

httpupfileshecloudscom123ueditor201707125d5bc37eca39c0c5b7a5bcb9

0e451eeerar

中移物联网有限公司 OneNET 开发文档中心

512 界面说明

图5-2 界面说明

513 使用方法

5131 创建产品

如 323 的过程在设备接入协议中选择 MQTT

中移物联网有限公司 OneNET 开发文档中心

图5-3 选择连接协议

5132 创建设备

如 323描述在平台上新建一个设备

5133 建立连接

在产品概况中可以查看产品 ID此信息填入模拟器 ProductID一栏如下图

图5-4 产品ID

在平台上进入设备信息页面可查看设备 ID及鉴权信息(此鉴权信息是新建设备时候填

写的鉴权信息)如下图

中移物联网有限公司 OneNET 开发文档中心

图5-5 设备ID及鉴权信息

相应把设备 ID及鉴权信息填入模拟器之中然后点击连接按钮如果未弹出提示对话

框则表示设备鉴权成功如下图

图5-6 连接成功

中移物联网有限公司 OneNET 开发文档中心

5135订阅与发布

演示本操作需要在 OneNet平台建立两个基于 MQTT协议的设备一个用于消息发布

另一个用于消息订阅

图5-7 设备状态

开启两个模拟器分别模拟以上两个设备然后建立连接

首先使用订阅主题打开第一个模拟器模拟消息订阅者

图5-8 订阅主题

其次发布主题打开第二个模拟器模拟消息发布者

中移物联网有限公司 OneNET 开发文档中心

图5-9 发布主题

经过以上两个操作后查看模拟消息订阅者的模拟器则收到了主题

为rdquotopic_namerdquo的消息如下图

中移物联网有限公司 OneNET 开发文档中心

图5-10 收到的主题

5136接收平台指令

建立连接后模拟器也可接收来自平台的指令具体操作如下

先打开模拟器-gt建立连接-gt选中【[OneNet]平台指令接收】选项栏利用平台下发指

令功能下发如下图平台下发指令

图5-11 平台发送命令

中移物联网有限公司 OneNET 开发文档中心

图5-12 下发指令

填写好将要发送的消息后点击【发送命令】按钮则模拟器成功接收到来自平台的

数据如下图模拟器截图

图5-13 模拟器收到的指令

5137上传数据点

Mqtt支持 Json 数据格式上报数据现根据 Json几种格式举一些例来演示怎么利用

模拟器上传数据

1)使用 Json数据 Type1上传 Json数据

datastreams[idtemperaturedatapoints[value255]]

中移物联网有限公司 OneNET 开发文档中心

如下模拟器上传数据界面

图5-14 Type1数据格式

则在平台数据展示中则可看到上传的数据点

图5-15 收到数据展示

2)使用 Json数据 Type3示例 Json数据为

temp32humi98

模拟器发送数据截图

中移物联网有限公司 OneNET 开发文档中心

图5-16 Type3数据格式

平台数据展示截图

图5-17 数据展示

3)使用 Json数据 Type4示例 Json数据为

temperature233pm2589

模拟器上传数据截图

中移物联网有限公司 OneNET 开发文档中心

图5-18 Type5数据格式

平台接收数据展示截图

图5-19 数据展示

52 基于麒麟开发板的 MQTT 接入实例

OneNet 平台为使用户能快速接入发布麒麟座开发板官网提交您的创意免

费申请开发板下面利用麒麟座开发板 V31 演示开发板采集温湿度使用 MQTT发

送到平台的接入流程

开发板申请链接httpsopeniot10086cneventdetail185html

521 搭建开发环境

OneNET 平台提供的麒麟座开发板是基予 STM32 单片机开发的一块功能应用

板开发板包含 MCU温湿度传感器GSM 模块WIFI 模块电源模块键盘

中移物联网有限公司 OneNET 开发文档中心

LED以及 lcd显示接口等满足用户对平台接入的基本需求能快速接入到平台

资料包配备完整工程代码方便工程移植等使用

目前 STM32 开发常用的 IDE 有 IARMDK 等我挑选 MDK 作为开发工具打

开工具包先安装 MDK511A安装完毕后再安装 MDKCM511A开发板所有资料软件

工具包下载案例包

案例包下载链接

httpspanbaiducoms1UB1qZGrVuovSVdbqqXP0Lglistpath=2F

图5-20 MDK包

安装完毕并安装 license详细步骤不做演示

中移物联网有限公司 OneNET 开发文档中心

522 连接硬件准备

5221 开发板接线

图5-21 开发板接线图

电源DC-5V

运行信息USART1-MicroUSB 线

软件下载ST-Link

中移物联网有限公司 OneNET 开发文档中心

5222 ESP8266跳线帽连接

图5-22 ESP8266跳线帽连接

中移物联网有限公司 OneNET 开发文档中心

5223 M6312跳线帽连接

图5-23 M6312跳线帽连接

523 工程实例

例程使用最简单易懂的方式编写着重让大家明白接入流程和协议

10~12 协议专属例程是展示该协议下的专用功能比如 EDP 的 PushData

中移物联网有限公司 OneNET 开发文档中心

HTTP 注册新设备MQTT 的订阅发布等具体使用方法查看该目录下的《使用

说明》

图5-24 工程文件

524 开发工程文件

中移物联网有限公司 OneNET 开发文档中心

图5-25 工程文件

图5-26 工程结构

默认已创建好产品以及设备打开文件工程 onenetc 和 esp8266c 修改例

程的 WIFI 信息和平台信息

分别在 esp8266c 的 36和 onenetc的 414345行

图5-27 更改项

525 编译下载

开发版接串口会有相应状态显示平台设备显示在线状态绿色为连接成功

设备在线灰色表示未连接并在数据展示中显示对应主题的所有数据

中移物联网有限公司 OneNET 开发文档中心

图5-28 连接成功

图5-29 收到数据

其他实例详情请见httpsopeniot10086cnbbsthread-1266-1-1html

中移物联网有限公司 OneNET 开发文档中心

第六章 MQTT 协议详解

61 设备与平台通信协议包格式

协议就是通信双方的一个约定即表示第 1字节传输的什么第 2字节

传输的什么helliphellip在 MQTT协议中一个 MQTT 数据包由固定头(Fixed

header) 可变头(Variable header) 消息体(payload)三部分构成

MQTT 数据包结构固定头部+可变头部+消息体

固定头(Fixed header)存在于所有 MQTT数据包中表示数据包类型及

数据包的分组类标识固定头格式如下

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 - 5 Remaining Length(该字段占用 1-4个字节)

目前平台版本支持的 Packet Type如下

名字 值 流向 描述

CONNECT 1 C-gtS 客户端请求与服务端建立连接

CONNACK 2 S-gtC 服务端确认连接建立

PUBLISH 3 CS 发布消息

PUBACK 4 CS 收到发布消息确认

PUBREC 5 CS 发布消息收到

PUBREL 6 CS 发布消息释放

PUBCOMP 7 CS 发布消息完成

SUBSCRIBE 8 C-gtS 订阅请求

SUBACK 9 S-gtC 订阅确认

UNSUBSCRIBE 10 C-gtS 取消订阅

UNSUBACK 11 S-gtC 取消订阅确认

PING 12 C-gtS 客户端发送 PING(连接保活)命令

PINGRSP 13 S-gtC PING命令回复

DISCONNECT 14 C-gtS 断开连接

可变头(Variable header)存在于部分 MQTT 数据包中数据包类型决定

了可变头是否存在及其具体内容

消息体(Payload)存在于部分 MQTT 数据包中表示客户端收到的具体内

中移物联网有限公司 OneNET 开发文档中心

不同类型数据包中可变头和消息体包含关系如下

消息类型 Variabl

e

Header

Payloa

d

CONNECT 有 有

CONNACK 有 有

PUBLISH 有 有

PUBACK 有 无

PUBREC 有 无

PUBREL 有 无

PUBCOMP 有 无

SUBSCRIBE 有 有

SUBACK 有 有

UNSUBSCRIBE 有 有

UNSUBACK 有 无

PING 无 无

PINGRSP 无 无

DISCONNECT 无 无

62 平台支持数据包类型

621 CONNECT(客户端请求与服务端建立连接 client -gt server)

固定头(Fixed Header)

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 - 5 Remaining Length(该字段占用 1-4个字节)

MQTT Packet Type 值为 0001表示该数据包为请求连接数据包

Remaining Length 剩余长度占 1-4字节

可变头(Variable Header)

包含内容如下

Description 7 6 5 4 3 2 1 0

byte

1-2

ProtocolNa

me Length

0 0 0 0 0 0 0 0

0 0 0 0 0 1 0 0

byte

3

lsquoMrsquo 0 1 0 0 1 1 0 1

byte

4

lsquoQrsquo 0 1 0 1 0 0 0 1

中移物联网有限公司 OneNET 开发文档中心

byte

5

lsquoTrsquo 0 1 0 1 0 1 0 0

byte

6

lsquoTrsquo 0 1 0 1 0 1 0 0

Byte

7

Protocol

Level

0 0 0 0 0 0 0 1

Byte

8

Connect

Flag

Use

r

flag

Passwo

rd

flag

WillReta

in

Flag

WillQo

s Flag

WillFl

ag

CleanSessi

on

Flag

Reser

ve

Byte

9-10

KeepAlive

(1) 版本

Protocol Level 必须设置为 4平台只支持协议版本 v 311不支持更老

的版本使用第三方客户端时需要注意选择正确的版本

(2) user flag 与 password flag

平台不允许匿名登陆因此这两个标志位在连接时必须设置为 1否则认为

协议错误平台将会断开连接

(3) Will flag 与 WillretainflagWillQosFlag

Will flag 为 0时WillQosFlag 和 WillRetainFlag 必须为 0Will Flag

为 1时WillQosFlag 只能为 012

1当该设备下一次正常上线后服务器会清除之前的 will 消息(包括

retain 消息)

2如果设备上线时设置了 Will Topic 和 msg且将 WillRetainFlag 设

置为 1只有设备异常断开后服务器才会将该 Will msg 分发给新的 Will

Topic 的订阅者且 Qos 级别以订阅的 Request qos 级别为准

3如果设备上线时设置了 Will Topic 和 msg且将 WillRetainFlag 设

置为 0服务器不会存储该消息当设备异常断开后会将该 Will msg 以设

备设置的 WillQosFlag的 Qos级别进行分发

(4) CleanSessionFlag

若客户端将 clean session 标志位设置为 0当其断开后平台将会保存

sessionsession 需保持的内容包含

客户端订阅的 topic列表

中移物联网有限公司 OneNET 开发文档中心

还未完成确认的 Qos1Qos2级别的 publish消息

客户端保存 session 的内容包含

已经发送到服务端的但还没有收到确认的 Qos1Qos2消息列表

待发送的 Qos0列表

若客户端将 clean session 标志位设置为 1当其断开后平台会清除设备

的订阅列表及未完成确认的 Qos1Qos2 的 publish消息

(5) Reserve

保留位置 0

(6) KeepAlive 保活时间

每个客户端可自定义设置连接保持时间最短 120秒最长 65535 秒

消息体(Payload) Description 是否必须存在 格式

Field1 Client

Identifier

是 2字节字串长度 + utf8字

Field2 UserName 是 2字节字串长度 + utf8字

Field3 UserPassword 是 2字节字串长度 + utf8字

目前平台支持的方式为以后两种

方式 1设备 ID项目 ID鉴权信息(auth_info)

字段设置 消息示例

client_id设置为平台创建设备时的

设备 id

username设置为ldquo项目 IDrdquo

password设置为ldquo鉴权信息

(auth_info)rdquo

client_id=rdquo123rdquo

username=rdquo433223rdquo

password=rdquo注册的鉴权信息rdquo

各字段说明如下

鉴权信息(auth_info)在平台申请设备时填写设备的 auth_info 属性(数

字+字母的字符串)该属性需要产品内具备唯一性(可使用设备出厂唯一编号)

方式 2设备 ID + APIKey(项目 ID也需要填写)

字段设置 消息示例

client_id设置为平台创建设备时的

设备 ID

username设置为ldquo项目 IDrdquo

client_id=rdquo123rdquo

username=rdquo433223rdquo

password=Api Key

中移物联网有限公司 OneNET 开发文档中心

password设置为ldquoAPI鉴权信息

(auth_info)rdquo

项目 ID在平台添加项目时平台生成的 ID

APIKey在平台上创建产品时生成的 APIKey

连接包实例如下

Send one mqtt packet

FixHeader

PacketTag = 16

PacketType = 1

RemainLength = 34

VariableHeaderConnect

protocol_name_len_= 4

protocol_name_= MQTT

protocol_level_= 4

connect_flag_= 192

keep_alive_= 12000

client_id_len_= 8

client_id_= 34764813

usr_name_len_= 6

usr_name_= 150295

password_len_= 4

password_= push

MQTT0x10 0x22 0x00 0x04 0x4D 0x51 0x54 0x54 0x04 0xC0 0x2E 0xE0 0x00 0x08 0x33

0x34 0x37 0x36 0x34 0x38 0x31 0x33 0x00 0x06 0x31 0x35 0x30 0x32 0x39 0x35 0x00

0x04 0x70 0x75 0x73 0x68

Send One Packet Succ

中移物联网有限公司 OneNET 开发文档中心

622 CONNACK (服务端确认连接建立)

Fixed Header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type = 2 0 0 0 0

byte2 - 5 Remaining Length(该字段占用 1-4个字节)

Variable Header

Description 7 6 5 4 3 2 1 0

byte 1 Acknowledge Flags 0 0 0 0 0 0 0 Sp

byte 2 Return Code x x x x x x x x

Sp Session Present Flagsession信息在服务器已保持置 1未保存置

0

返回码说明

返回码 描述

0 成功

1 协议版本错误

2 非法的 clientid

3 服务不可用

4 用户名或密码错误

中移物联网有限公司 OneNET 开发文档中心

5 非法链接(比如 token非法)

失败

如果 connect包不符合协议内容约束则直接断掉连接而不需要发送 conn

ack包

如果鉴权或授权失败回复一个带非 0错误码的 connack包

成功

必须断掉重复的 clientid

执行 cleansession 对应的操作

必须回复一个 connack回复码为 0

开始消息传递并加入 keepalive的监视

PS客户端需要等到服务端的 connack报文才能发送后续的数据包

623 PUBLISH(发布消息 client -gt server)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type DUP f

lag

QoS Level RETAI

N

byte2 - 5 Remaining Length(该字段占用 1-4 个字节)

DUP

QoS2Qos1如果为 0则表示是第一次发送该包如果为 1则表示

为重复发送的包

Qos0DUP 必须为 0

中移物联网有限公司 OneNET 开发文档中心

QoS 指定了该 publish包的 Qos 等级如下

Qos 值 Bit2 Bit1 描述

0 0 0 最多发送一次

1 0 1 至少发送一次

2 1 0 只发送一次

RETAIN 保留标志位如果为 1服务器存储最新一条 RETAIN消息以便

分发给新的订阅者如果 RETAIN为 1Payload 为空服务器分发该消息后会

清空该 topic 下的 RETAIN 消息

PS该版本实现了 Qos0Qos1Qos2

Variable Header

Description 格式 是否必须

Field1 TopicName 2 字节字串长度 + utf8字

Field2 PacketIdent

ifier

2 字节 QoS0否QoS1Qos2是

Payload

内容根据不同业务自定义

624 PUBLISH(发布消息 server -gt client)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type DUP f

lag

Qos Level RETAIN

byte2 - 5 Remaining Length(该字段占用 1-4个字节)

DUP

Qos2QoS1如果为 0则表示是第一次发送该包如果为 1则表示

为重复发送的包

中移物联网有限公司 OneNET 开发文档中心

Qos0DUP 必须为 0

QOS 指定了该 publish包的 qos等级如下

Qos 值 Bit2 Bit1 描述

0 0 0 最多发送一次

1 0 1 至少发送一次

2 1 0 只发送一次

RETAIN如果服务器分发的消息是 RETAIN 消息则将该标志位置 1否则置

0

PS该版本实现 Qos0Qos1Qos2其中服务器分发消息的 Qos级别是以 Clien

t-gtServer 发送的 publish 包的 qos 等级为准非订阅的 topic 的 Qos 等级R

etain 消息是以订阅的 Request Qos 级别进行推送

VariableHeader

Description 格式

Field1 TopicName 2 字节字串长度 + utf8字

Payload

内容根据不同业务自定义

625 PUBACK(收到发布消息确认)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

中移物联网有限公司 OneNET 开发文档中心

626 PUBREC(发布消息收到)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

627 PUBREL(发布消息释放)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

628 PUBCOMP(发布消息完成)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

中移物联网有限公司 OneNET 开发文档中心

byte 1~

2

PacketIdentifier PacketIdentifier

629 SUBSCRIBE(订阅请求)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

Payload

Description 格式

Byte1~

n

TopicName 2 字节字串长度 + utf8字

Byten+

1

Request Qos 服务质量要求(只能为 0

12)

topic 说明

可以包含一个或多个 topic

topic必须是数字英文反斜杠()的组合目前不支持通配符

每个客户端最多订阅 100个 topic

以下 topic 被系统保留使用(客户端不能订阅)

类型 说明

$开头 平台保留

中移物联网有限公司 OneNET 开发文档中心

6210 SUBACK(订阅确认)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

Payload

Description 7 6 5 4 3 2 1 0

byte 1 retcode

返回码说明

返回码 描述

0x00 成功(granted qos = 0)

0x01 成功(granted qos = 1)

0x02 成功(granted qos = 2)

0x80 失败

6211 UNSUBSCRIBE(取消订阅)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

中移物联网有限公司 OneNET 开发文档中心

Payload

Description 格式

Byte1~

n

TopicName 2 字节字串长度 + utf8字

可以包含一个或多个 topic

6212 UNSUBACK(取消订阅确认)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

PacketIdentifier PacketIdentifier

6213 PING(客户端发送 PING(连接保活)命令)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

NULL NULL

注PING命令无 VariableHeader

中移物联网有限公司 OneNET 开发文档中心

6214 PINGRSP(PING命令回复)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

NULL NULL

注PINGRSP无 VariableHeader

6215 DISCONNECT(断开连接)

Fixed header

Bit 7 6 5 4 3 2 1 0

byte 1 MQTT Packet Type 0 0 0 0

byte2 ~ 5 Remaining Length(该字段占用 1-4个字节)

VariableHeader

Description 7 6 5 4 3 2 1 0

byte 1~

2

NULL NULL

注DISCONNECT无 VariableHeader

中移物联网有限公司 OneNET 开发文档中心

第七章 设备开发流程

71 连接鉴权

Device Onenet

(Connect)鉴权请求

(ConnAck)鉴权结果

加载session

鉴权

图7-1 连接鉴权

设备向平台发起 connect 请求connect 中携带鉴权信息具体

参见(报文格式参考 621)

平台拿到鉴权信息进行鉴权

鉴权通过后如果 cleansession=0 平台将会加载保存的设备

的一些信息如订阅列表(621中描述)

如果 cleansession=1 设备没有保存信息在平台则不加载设

备相关信息

返回鉴权结果 ConnAck(报文格式参考 621)

72 消息发布

721 数据点上报

设备使用 publish 报文来上传数据点 报文格式如下

中移物联网有限公司 OneNET 开发文档中心

VariableHeader

Field 名称 说明 格式

Field1 TopicName=rdquo$dprdquo $dp 为系统上传数据点

的指令

2字节字串长度 + utf8

字串

Payload

Payload包含真正的数据点内容支持的格式如下

Byte 1 Bit0-5数据类型指示目前支持

Type = 1

Type = 2

Type = 3

Type = 4

Type = 5

Type = 6

Type = 7

Bit6-7 flags 根据具体类型不同意义

Type6Type7这两种需要填写时间戳的数据类型

如果填入了时间戳则须将 bit7 置 1否则置 0(即

忽略数据类型说明中的日期时间相关字段)

0 0 0 0 0 0 0 1

Byte 2 根据数据类型指示不同

Byte n

中移物联网有限公司 OneNET 开发文档中心

数据类型 1(type == 1)格式说明

数据类型 2(type == 2)格式说明

Byte 1 数据点类型值1 1JSON 格式 1 字符串 0 0 0 0 0 0 0 1

Byte 2 指示后面 json 字符串长度

固定两字节长度高位字节值为 0x00

Byte 3 固定两字节长度低位字节值为 0x41

Byte 4

ldquodatastreamsrdquo[ 可以同时传递多个数据流

ldquoidrdquordquotemperaturerdquo

ldquodatapointsrdquo[数据流可以有多个数据点

rdquoatrdquordquo2013-04-22 222222rdquo可选

rdquovaluerdquo 365用户自定义

]

ldquoidrdquordquolocationrdquo

ldquodatapointsrdquo[hellip]

hellip

]

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

Byte n

Byte 1 数据点类型指示type=2 二进制数据 0 0 0 0 0 0 1 0

Byte 2 指示后面 json 字符串长度

固定两字节长度-高位字节值为 0x00

Byte 3 固定两字节长度-低位字节值为 0x10

Byte 4

rdquods_idrdquordquoimagerdquo 创建数据流时定义的 ID(必填)

ldquoatrdquordquo2014-10-25 122323rdquo 时间(可选)

rdquodescrdquo字符串或 json 对象对该数据的描述(可选)

hellip

Byte n

Byte n+1 指示后面二进制数据长度

固定四字节长度-第 1 字节(最高)值为 0x00

Byte n+1 固定四字节长度-第 2 字节值为 0x00

Byte n+2 固定四字节长度-第 3 字节值为 0x01

Byte n+3 固定四字节长度-第 4 字节(最低)值为 0x00

Byte n+4 该域目前最大支持 3M

中移物联网有限公司 OneNET 开发文档中心

数据类型 3(type == 3)格式说明

数据类型 4(type ==4)格式说明

hellip 本例中的该域 256 字节数据

Byte n+260

Byte 1 数据点类型指示type=3 JSON 格式 2 字符串 0 0 0 0 0 0 1 1

Byte 2 指示后面字符串长度

固定两字节长度高位字节值为 0x00

Byte 3 固定两字节长度低位字节值为 0x46

Byte 4 通用格式

ldquodatastream_id1rdquordquovalue1rdquo

ldquodatastream_id2rdquordquovalue2rdquo

hellip

示例

ldquotemperaturerdquo225rdquohumidityrdquordquo952rdquo

hellip

hellip

hellip

hellip

Byte n

Byte 1 数据点类型指示type=4 JSON 格式 3 字符串 0 0 0 0 0 1 0 0

Byte 2 指示后面字符串长度

固定两字节长度高位字节值为 0x00

Byte 3 固定两字节长度低位字节值为 0x46

Byte 4 通用格式

ldquodatastream_id1rdquoldquodatetime1rdquordquovalue1rdquo

ldquodatastream_id2rdquo ldquodatetime2rdquordquovalue2rdquo

hellip

示例

ldquotemperaturerdquoldquo2015-03-22 223112rdquo225

hellip

hellip

hellip

hellip

Byte n

中移物联网有限公司 OneNET 开发文档中心

数据类型 5(type == 5)格式说明

数据类型 6(type == 6)格式说明

Byte 1 数据点类型指示type=5 自定义分隔符 0 0 0 0 0 1 0 1

Byte 2 指示后面字符串长度

固定两字节长度高位字节值为 0x00

Byte 3 固定两字节长度低位字节值为 0x41

Byte 4 消息中最前面两字节为用户自定义的域中分隔符和域间分隔符

这两个分隔符不能相同比如采用逗号作为域中分隔符分号作

为域间分隔符的格式如下

feild0feild1hellipfeildn

其中每个 field 格式支持 3种

field 格式 1 3 个子字段分别是数据流 ID时间戳数据值

通用格式

Datastream_iddatetimevalue

field 格式 2 2 个子字段分别是数据流 ID 和数据值省略时

间戳通用格式

Datastream_idvalue

field 格式 3 1 个子字段省略了数据 ID 和时间戳只传输数

据值平台将用该域(feild)所在的位置号(从 0 开始)作为数据

流 ID通用格式

value

示例

(1)temperature2015-03-22

223112225102pm258910

(2)temperature2015-03-22

223112225102pm258910

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

hellip

Byte n

Byte 1 数据类型指示type=6 带时间自定义分隔符 0 0 0 0 0 1 1 0

Byte 2 年(后两位)例如 2016 年则该字节为 16 0 0 0 1 0 0 0 0

Byte 3 月(1-12)

Byte 4 日(1-31)

Byte 5 小时(0~23)

Byte 6 分钟(0~59)

Byte 7 秒(0~59)

Byte 8 指示后面字符串长度

固定两字节长度高位字节值为 0x00

Byte 9 固定两字节长度低位字节值为 0x41

Byte 10 消息中最前面两字节为用户自定义的域中分隔符和域间分隔符

具体格式见 type=5 说明若相关域中没有时间戳则采用本类

hellip

中移物联网有限公司 OneNET 开发文档中心

数据类型 7(type == 7)格式说明(每次最多 500个数据流的浮点数)

hellip 型的默认时间戳当作数据点的时间来存储

Byte n

Byte 1 Bit0-5 数据类型指示type=7 可离散浮点数数据流

Bit6保留置 0

Bit7 时间指示位1携带 6字节时间

1 0 0 0 0 1 1 1

Byte 2 年(后两位)例如 2016 年则该字节为 16 0 0 0 1 0 0 0 0

Byte 3 月(1-12)

Byte 4 日(1-31)

Byte 5 小时(0~23)

Byte 6 分钟(0~59)

Byte7 秒(0~59)

Byte 8 数据流名称(取值范围 1-65535)

高位字节值为 0x00

Byte 9 低位字节值为 0x01

Byte10 数据流个数(取值范围 1-500)

高位字节值为 0x00

Byte11 低位字节值为 0x01

Byte 10 4 字节 float 类型低位在前高位在后

Byte 11

Byte 12

Byte 13

Byte n 数据流名称(取值范围 1-65535)

高位字节值为 0x24

Byte n+1 低位字节值为 0x37

Byte n+2 数据流个数(取值范围 1-500)

高位字节值为 0x01

Byte n+3 低位字节值为 0x00

Byte n+2 4 字节 float 类型低位在前高位在后

Byte n+4

Byte n+5

Byte n+6

中移物联网有限公司 OneNET 开发文档中心

7211 Qos0(Client-gtServer)

Device OneNet

Publish $dp(Qos0)

存储

图7-2 QoS连接图

设备发布 Qos0 消息(上报数据点)

平台收到上报数据点后保存起来

7212 Qos1(Client-gtServer)

Device OneNet

Publish $dp(Qos1)

存储

PubAck

图7-3 Qos1连接图

设备发布 Qos1 消息(上报数据点)

中移物联网有限公司 OneNET 开发文档中心

平台收到上报数据点后保存起来

平台给设备回复相应的 PubAck (报文格式参考 625)

7213 Qos2(Client-gtServer)

Device OneNet

Publish $dp(Qos2)

存储

PubRec

PubRel

PubComp

图7-4 Qos2连接图

设备发布 Qos2 消息(上报数据点)

平台收到上报数据点后保存起来

平台给设备回复相应的 PubRec报文

设备需回复平台 PubRel报文如超时不回平台则会断开相应连接

平台给设备回复 PubComp报文

注数据点上报功能不支持 Retain 特性

中移物联网有限公司 OneNET 开发文档中心

722 平台命令(下发amp回复)

7221 命令下发

平台使用 publish 报文来下发平台指令 报文格式如下

FixHeader

参考 623

VariableHeader

Field 名称 说明 格式

Field1 TopicName=rdquo$creqcmduuidrdquo $creq为系统下发

Cmd 的 指 令

cmduuid为该条指

令的 uuid

2字节字串长度 +

utf8字串

Payload

Payload包含真正的指令内容

72211 Qos0(Server-gtClient)

DeviceOneNet

Publish $creq(Qos0)

图7-5 Qos0命令下发

命令下发

平台向设备发送 topic为$creq的消息(该 topic为平台命令)

中移物联网有限公司 OneNET 开发文档中心

设备收到 topic 为$creq 的 topic 时需将其作为平台下发的指令来处

注目前命令下发以 Qos0级别进行推送

7222 命令回复

设备使用 publish 报文来回复平台指令 报文格式如下

FixHeader

参考 623

VariableHeader

Field 名称 说明 格式

Field1 TopicName=rdquo$crspcmduuidrdquo $crsp为系统处理

设备回复 cmd 的

指令cmduuid为

该条指令的 uuid

2字节字串长度 +

utf8字串

Payload

Payload包含真正回复的指令内容

72221 Qos0(Client-gtServer)

DeviceOneNet

Pulish $crsp(Qos0)

图7-6 Qos0下发命令

中移物联网有限公司 OneNET 开发文档中心

72222 Qos1(Clientlt-gt Server)

DeviceOneNet

Pulish $crsp(Qos1)

Puback

图7-7 Qos1下发命令

如果设备回复响应时以 Qos1回复则平台需要给设备回复一个 Puback 报文

72223 Qos2(Clientlt-gt Server)

DeviceOneNet

Pulish $crsp(Qos2)

PubRec

PubRel

PubComp

图7-8 Qos2下发命令

如果设备回复响应时以 Qos2回复则

1平台需回复设备一个 PubRec报文

中移物联网有限公司 OneNET 开发文档中心

2设备在收到 PubRec后需向平台回复 PubRel报文

3平台收到 PubRel 报文后向设备回复 PubComp报文

73 创建 Topic

Device OneNet

HTTP 请求

HTTP 响应

图7-9 创建Topic

设备通过发送 HTTP请求进行 topic 的创建操作

平台收到请求后创建 topic 并返回结果

请求及响应定义如下

HTTP方法 POST

URL httpapihecloudscommqtttopic

HTTP头部 api-keyxxxx-ffff-zzzzz必须 master key

URL参数

HTTP body

内容

ldquonamerdquordquoxxxxxxrdquo topic 名字只能由英文下划线反斜杠组成最长

1024个字符同一产品下 topic name 不重复

成功返回

errno 0

errorldquosuccrdquo

说明 每个产品最多 100个 topic

中移物联网有限公司 OneNET 开发文档中心

74 订阅

Device OneNet

Subscribe

Suback

更新设备订阅列表

图7-10 订阅

设备发起订阅请求(报文格式参考 629)

平台收到请求后更新 topic列表

平台给设备回复 SubAck (报文格式参考 6210)

注subscribe 的 request qos级别可以为 012

75 取消订阅

Device OneNet

UnSubscribe

UnSuback

更新设备订阅列表

图7-11取消订阅

中移物联网有限公司 OneNET 开发文档中心

设备发起取消订阅请求 (报文格式参考 6211)

平台收到请求后更新 topic 列表

平台给设备回复 UnSubAck (报文格式参考 6212)

76 推送设备 Topic

761 Publish 报文推送

Qos0设备使用 Qos 级别为 0的 Publish报文来进行推送

Device OneNet

Publish(Qos0)

Device

以Qos0 Publish到订阅设备

图7-12 Qos0推送

设备发起推送 topic请求(以 Qos0级别)

平台收到请求后将 topic以 Qos0级别推送到相关订阅设备(支持离线设

备推送)

平台不返回 PubAck或 PubRec 等报文

Qos1

设备使用 Qos级别为 1的 publish报文来推送 Topic

中移物联网有限公司 OneNET 开发文档中心

Device OneNet

Publish(Qos1)

PubAck

Device

以Qos1 Publish到订阅设备

设备回复平台 PubAck

图7-13 Qos1发布

设备发起推送 topic请求(以 Qos1级别)

平台收到请求后将 topic以 Qos1级别推送到相关订阅设备(支持离线设

备推送)

平台返回 PubAck 报文

Qos2

设备使用 Qos级别为 2的 publish报文来推送 Topic

中移物联网有限公司 OneNET 开发文档中心

Device OneNet

Publish(Qos2)

PubRec

Device

以Qos2 Publish到订阅设备

PubRec

PubRel

PubComp

PubRel

PubComp

图7-14 Qos2推送

设备发起推送 topic请求(以 Qos2级别)

平台收到请求后回复 PubRec报文

设备收到 PubRec后需回复 PubRel报文 (如超时不回复平台会断开与设

备的连接)

平台收到 PubRel 报文后回复 PubComp 给设备

平台在回复 PubComp 后会以 Qos2 级别推送到相关订阅设备(支持离线设

备推送)

设备需回复 PubRec报文 (如超时不回复平台会断开与设备的连接)

平台发送 PubRel 报文给设备

设备需回复 PubComp(发布完成)

Publish报文的格式如下

FixHeader

参考 623

中移物联网有限公司 OneNET 开发文档中心

VariableHeader

Field 名称 说明 格式

Field1 TopicName 填写设备订阅的 topic 2字节字串长度 + utf8

字串

Payload

Payload为设备自定义内容

762 HTTP 请求推送

Device OneNet

HTTP 请求

HTTP 响应

Device

Publish到订阅设备

图7-15 HTTP请求

设备以 HTTP 的方式发起推送 topic 请求

平台收到请求后将 topic推送到相关订阅设备 (目前只支持在线推送)

平台返回推送结果

请求及响应定义如下 HTTP方法 POST

URL httpapihecloudscommqtt

HTTP头部 api-keyxxxx-ffff-zzzzz必须 master key

URL参数 topic=ldquoXXXXXXrdquo必选在发送 mqtt协议的 topic 必填

HTTP body内容 用户自定义 Json 或二进制数据(小于 64K)

成功返回

errno 0

errorldquosuccrdquo

中移物联网有限公司 OneNET 开发文档中心

77 离线 Topic

推送 Topic只针对在线设备进行 topic 消息的推送离线设备不会收到订阅

的 topic 的消息离线 Topic则会将该消息推送给在线以及离线设备

1 如果设备在上线时设置了 clean session flag服务端会删除其订阅的

topic及相关的离线 topic消息

2 如果设备没有设置 clean session flag如果有与该设备相关的离线

topic消息则在鉴权成功后将离线消息推送给设备

3 遗嘱消息(will msg)只会推送给订阅了该 will topic的在线的设备离

线设备不会收到

4 离线消息的有效期默认为 2 天(暂不支持用户设定有效期)服务器只会

推送在 2天内的最近 10 条消息

78 数据点订阅

数据点订阅同一产品下的设备可以订阅其他设备的数据点订阅的 topic

格式为deviceid数据流名称即

被关注的设备在上传了该数据流名称的数据点后订阅了该 topic的其他设备都

会收到上传的数据点

1 AB设备的 deviceid分别为 92779278

2 A 设备订阅了名为92789527 的 topic(9278 为设备 B 的 id9527 为 B

设备上传的数据流名称)

3 B 设备上传了名为 9527的数据流(数据点为 11 1578hellip)

4 A 设备会收到多条(取决于设备 B 上传的数据点的个数)推送的 topic 名

为92789527 的 publish消息消息的 payload中则包含设备 B 上传的数据

注目前支持订阅的数据点的类型为 Type1~Type7(详见 721节)

中移物联网有限公司 OneNET 开发文档中心

第八章 常见问题 FAQ

用户在基于 OneNET 平台进行产品开发的过程中可能会遇到各种各样的问

题开发过程中遇到的问题一方面可以参考 OneNET 文档中心的文档或者本文

档前几个章节的内容另一方面用户可以参考本章节总结的常见问题希望这些

文档能对用户在开发过程中有一定的指导和帮助

本章将分三个小节对用户在开发产品过程中可能遇到的问题进行梳理分别

为终端设备接入 OneNET平台的常见问题API调用的常见问题和 OneNET平台

的能力

81 终端设备接入 OneNET 平台的常见问题

序号 问题描述 原因分析 解决方法

1

2

3

4

5

6

7

82 API 调用的常见问题

序号 问题描述 原因分析 解决方法

1

2

3

4

5

6

7

8

9

中移物联网有限公司 OneNET 开发文档中心

83 使用 OneNET平台遇到的常见问题

序号 问题描述 原因分析 解决方法

1

2

3

4

5

6

7

8

Page 20: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com
Page 21: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com
Page 22: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com
Page 23: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com
Page 24: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com
Page 25: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com
Page 26: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com
Page 27: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com
Page 28: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com
Page 29: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com
Page 30: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com
Page 31: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com
Page 32: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com
Page 33: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com
Page 34: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com
Page 35: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com
Page 36: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com
Page 37: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com
Page 38: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com
Page 39: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com
Page 40: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com
Page 41: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com
Page 42: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com
Page 43: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com
Page 44: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com
Page 45: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com
Page 46: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com
Page 47: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com
Page 48: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com
Page 49: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com
Page 50: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com
Page 51: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com
Page 52: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com
Page 53: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com
Page 54: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com
Page 55: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com
Page 56: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com
Page 57: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com
Page 58: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com
Page 59: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com
Page 60: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com
Page 61: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com
Page 62: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com
Page 63: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com
Page 64: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com
Page 65: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com
Page 66: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com
Page 67: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com
Page 68: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com
Page 69: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com
Page 70: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com
Page 71: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com
Page 72: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com
Page 73: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com
Page 74: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com
Page 75: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com
Page 76: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com
Page 77: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com
Page 78: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com
Page 79: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com
Page 80: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com
Page 81: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com
Page 82: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com
Page 83: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com
Page 84: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com
Page 85: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com
Page 86: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com
Page 87: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com
Page 88: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com
Page 89: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com
Page 90: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com
Page 91: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com
Page 92: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com
Page 93: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com
Page 94: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com
Page 95: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com
Page 96: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com
Page 97: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com
Page 98: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com
Page 99: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com
Page 100: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com
Page 101: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com
Page 102: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com
Page 103: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com
Page 104: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com
Page 105: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com
Page 106: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com
Page 107: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com
Page 108: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com
Page 109: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com
Page 110: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com
Page 111: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com
Page 112: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com
Page 113: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com
Page 114: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com
Page 115: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com
Page 116: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com
Page 117: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com
Page 118: OneNET 平台 MQTT 接入开发文档 - upfiles.heclouds.com