优特云
[ { "name": "首页", "url": "http://www.utyun.com/", "target": "0", "child": [] }, { "name": "活动", "url": "https://pre-mobile.utyun.com/page-design/?__UT_TITLE__=%E4%BC%98%E7%89%B9%E4%BA%91%E7%A7%91%E6%8A%80-%E4%BA%91%E6%9C%8D%E5%8A%A1%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88%E5%AE%9A%E5%88%B6%E5%95%86#/8412299005246101317/events", "target": "0", "child": [] }, { "name": "产品", "url": "https://pre-mobile.utyun.com/page-design/?__UT_TITLE__=%E4%BC%98%E7%89%B9%E4%BA%91%E7%A7%91%E6%8A%80-%E4%BA%91%E6%9C%8D%E5%8A%A1%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88%E5%AE%9A%E5%88%B6%E5%95%86#/8412299005246101317/products", "target": "0", "child": [] }, { "name": "关于优特云", "url": "https://pre-mobile.utyun.com/page-design/?__UT_TITLE__=%E4%BC%98%E7%89%B9%E4%BA%91%E7%A7%91%E6%8A%80-%E4%BA%91%E6%9C%8D%E5%8A%A1%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88%E5%AE%9A%E5%88%B6%E5%95%86#/8412299005246101317/about", "target": "0", "child": [] } ]
硬件云(私网版)
硬件云(私网版)API文档

姚智聪 最后一次编辑

接近 4 年前 230

一、接口列表

云端API列表(共34个)

序号接口名称接口描述版本
产品管理
1产品发布POST: /product/releaseV1.00.00.00
2撤销产品发布POST: /product/cancelReleaseV1.00
3创建产品POST: /product/createV1.00.00.00
4删除产品POST: /product/deleteV1.00.00.00
5更新产品POST: /product/updateV1.00.00.00
6查询产品(单个)GET: /product/getV1.00.00.00
7分页查询产品信息 GET: /product/queryV1.00.00.00
8查询产品标签GET: /product/listTagsV1.00.00.00
9增量更新多个产品标签 PPOST: /product/incrementalUpdateTagsV1.00.00.00
10全量更新多个产品标签 POST: /product/fullUpdateTagsV1.00.00.00
设备管理
11查询设备属性值GET: /device/queryDevicePropertyV1.00.00.00
12创建设备POST: /device/createV1.00.00.00
13批量创建设备(随机名称)POST: /device/batchCreateV1.00.00.00
14批量查询设备GET: /device/listV1.00.00.00
15更新设备POST: /device/updateV1.00.00.00
16查询批量申请批次列表GET: /device/queryBatchListV1.00.00.00
17查询批量申请批次详情GET: /device/queryBatchInfoV1.00.00.00
18查询设备事件历史数据GET: /device/queryEventDataV1.00.00.00
19删除设备POST: /device/deleteV1.00.00.00
20查询设备属性历史数据 GET: /device/queryPropertyData  V1.00.00.00
21 查询设备服务历史数据  GET: /device/queryServiceDataV1.00.00.00
22查询设备详情GET: /device/getV1.00.00.00
23禁用设备POST: /device/disableThingV1.00.00.00
24获取设备的统计数量GET: /device/queryStatisticsV1.00.00.00
25解禁设备POST: /device/enableThingV1.00.00.00
26设置设备属性值POST: /device/setDevicePropertyV1.00.00.00
27调用设备服务 POST: /device/invokeThingService  V1.00.00.00
分组管理
28创建设备分组POST: /group/createV1.00.00.00
29删除设备分组 POST: /group/delete  V1.00.00.00
30更新设备分组 POST: /group/update  V1.00.00.00
31查询设备分组(单个)GET: /group/getV1.00.00.00
32查询设备分组(分页)GET: /group/queryV1.00.00.00
33设备分组添加设备(批量) POST: /group/batchAddDevice  V1.00.00.00
34设备分组移除设备(批量)POST: /group/batchRemoveDeviceV1.00.00.00

设备端接口 (共50个)

序号接口名称接口描述版本
基础HAL
1HAL_Free释放参数ptr指向的一块堆内存, 当传入的参数为NULL时不执行任何操作V1.00.00.00
2HAL_Malloc申请一块堆内存V1.00.00.00
3HAL_Printf打印函数, 用于向串口或其它标准输出打印日志或调试信息, 可参考C99的printf()函数实现V1.00.00.00
4HAL_Random随机数函数, 接受一个无符号数作为范围, 返回0到region范围内的一个随机数V1.00.00.00
5HAL_SleepMs  睡眠函数, 使当前执行线程睡眠指定的毫秒数V1.00.00.00
6HAL_Snprintf打印函数, 向内存缓冲区格式化构建一个字符串, 参考C99标准库函数V1.00.00.00
7HAL_Srandom随机数播种函数, 使 HAL_Random 的返回值每个随机序列各不相同, 类似C标准库中的srandV1.00.00.00
8HAL_UptimeMs获取设备从上电到当前时刻所经过的毫秒数V1.00.00.00
9HAL_Vsnprintf格式化输出字符串到指定buffer中, 可参考C标准库的vsnprintf()实现V1.00.00.00
线程HAL
10HAL_MutexCreate创建一个互斥量对象, 返回指向所创建互斥量的指针, 用于同步访问, 对于仅支持单线程应用, 可实现为空函数V1.00.00.00
11HAL_MutexDestroy销毁一个互斥量对象, 释放资源V1.00.00.00
12HAL_MutexLock锁住一个互斥量V1.00.00.00
13HAL_MutexUnlock解锁一个互斥量V1.00.00.00
14HAL_SemaphoreCreate创建一个计数信号量, 此接口实现必须为原子操作, 对于仅支持单线程应用, 可实现为空函数V1.00.00.00
15HAL_SemaphoreDestroy销毁一个由参数sem指定的信号量, 此接口实现必须为原子操作, 此函数无返回值V1.00.00.00
16HAL_SemaphorePost在指定的计数信号量上做自增操作, 解除其它线程的等待, 此接口实现必须为原子操作, 对于仅支持单线程应用, 可实现为空函数V1.00.00.00
17HAL_SemaphoreWait在指定的计数信号量上等待并做自减操作, 对于仅支持单线程应用, 此接口实现必须为原子操作, 可实现为空函数V1.00.00.00
18HAL_ThreadCreate按照指定入参创建一个线程V1.00.00.00
19HAL_ThreadDelete删除指定的线程V1.00.00.00
20HAL_ThreadDelete将指定线程设置为分离状态V1.00.00.00
产品设备HAL
21HAL_GetDeviceName获取设备的DeviceName, 用于唯一标识单个设备的名字, 三元组之一, 在云端控制台注册得到并烧写到设备中V1.00.00.00
22HAL_GetDeviceSecret获取设备的DeviceSecret, 用于标识单个设备的密钥, 三元组之一, 在云端控制台注册得到并烧写到设备中V1.00.00.00
23HAL_GetFirmwareVersion获取设备的固件版本字符串, 此固件版本号将会用于OTA升级的版本上报。如果设备不准备支持OTA,该函数返回空串即可。V1.00.00.00
24HAL_GetProductKey获取设备的ProductKey, 用于标识设备的品类, 三元组之一, 在云端控制台注册得到并烧写到设备中V1.00.00.00
25HAL_GetProductSecret获取设备的ProductSecret, 用于标识品类的密钥, 在云端控制台注册得到并烧写到设备中, 在一型一密的场景下将会使用到此字符串V1.00.00.00
26HAL_SetDeviceName设置设备的DeviceName, 用于标识设备单品的名字, 三元组之一V1.00.00.00
27HAL_SetDeviceSecret设置设备的DeviceSecret, 用于标识设备单品的密钥, 三元组之一V1.00.00.00
28HAL_SetProductKey设置设备的ProductKey, 用于标识设备的品类, 三元组之一V1.00.00.00
29HAL_SetProductSecret  设置设备的ProductSecret, 用于标识品类的密钥, 在一型一密场景中会使用到此字符串V1.00.00.00
存储HAL
30HAL_Kv_Del 删除指定KV数据, 删除key对应的KV对数据, 可以通过擦除Flash或修改文件数据的方式实现持久化数据的删除  V1.00.00.00
31HAL_Kv_Get  获取KV数据, 获取key对应的KV对数据, 可以通过读取Flash或读取文件的方式实现持久化数据的读取  V1.00.00.00
32HAL_Kv_Set  设置KV数据接口, 可通过写flash或写文件的方式实现数据持久化  V1.00.00.00
TCP HAL
33HAL_TCP_Destroy销毁由参数fd指定的TCP连接, 释放资源  V1.00.00.00
34 HAL_TCP_Establish   根据指定的服务器网络地址和端口号建立TCP连接, 并返回对应连接句柄  V1.00.00.00
35 HAL_TCP_Read   从指定的TCP连接中读取数据, 此接口为同步接口, 如果在超时时间内读取到参数len指定长度的数据则立即返回, 否则在超时时间到时才解除阻塞返回  V1.00.00.00
36 HAL_TCP_Write  从指定的TCP连接中写入数据, 此接口为同步接口, 如果在超时时间内写入了参数len指定长度的数据则立即返回, 否则在超时时间到时才解除阻塞返回V1.00.00.00
SSL/TLS HAL
37HAL_SSL_Destroy销毁由参数handle指定的TLS连接V1.00.00.00
38HAL_SSL_Establish根据指定的服务器网络地址, 服务器端口号和证书文件建立TLS连接, 返回对应的连接句柄V1.00.00.00
39HAL_SSL_Read从指定的TLS连接中读取数据, 此接口为同步接口, 如果在超时时间内读取到参数len指定长度的数据则立即返回, 否则在超时时间到时才解除阻塞返回V1.00.00.00
40 HAL_SSL_Write   从指定的TLS连接中写入数据, 此接口为同步接口, 如果在超时时间内写入了参数len指定长度的数据则立即返回, 否则在超时时间到时才解除阻塞返回  V1.00.00.00
物模型编程
41 IOT_Linkkit_Open  创建本地资源,在进行网络报文交互之前,必须先调用此接口,得到一个会话的句柄V1.00.00.00
42 IOT_Linkkit_Connect   对设备来说,将会建立设备与云端的通信  V1.00.00.00
43IOT_Linkkit_Yield若SDK占有独立线程,该函数只将接收到的网络报文分发到用户的回调函数中,否则表示将CPU交给SDK让其接收网络报文并将消息分发到用户的回调函数中V1.00.00.00
44 IOT_Linkkit_Close  若入参中的会话句柄为主设备/网关,则关闭网络连接并释放SDK为该会话所占用的所有资源V1.00.00.00
45IOT_Linkkit_TriggerEvent向云端发送事件报文、错误码、异常告警等V1.00.00.00
46 IOT_Linkkit_Report  向云端发送没有云端业务数据下发的上行报文,目前只包括属性值报文V1.00.00.00
47IOT_Linkkit_Query向云端发送存在云端业务数据下发的查询报文,目前只支持NTP时间查询报文V1.00.00.00
48IOT_RegisterCallback对SDK注册事件回调函数,如云端连接成功/失败,有属性设置/服务请求到达,答复等V1.00.00.00
49IOT_SetupConnInfo MQTT认证参数配置,因私网版服务器地址部署不一致,需配置连接参数信息  V1.00.00.00
50IOT_Ioctl对SDK进行各种参数运行时设置和获取,以及运行状态的信息获取等,实参可以是任何数据类型V1.00.00.00

二、云端接口

写在前面

API规范说明

查询数据使用GET方式,新增、修改、删除数据使用POST方式 返回数据统一使用JSON格式,请参考每个API具体说明 访问API出现异常需返回统一错误信息,返回JSON格式和响应码
{ “utCode”:”10001”, “utMsg”:”产品不存在!”, “utService”:”iot” }

错误码说明一览

接口调用准备及示例

登录账号信息

硬件云私部署预置了一个用户. 用户名:admin 密码 :Ut123456
调用方式:
  1. 运行jar启动硬件云私部署服务。 若在本机启动,则ip:port 为 http://localhost:20007 端口为20007
  2. 打开postman(以创建产品接口为例,其余接口类似)
a.在地址栏输入http://localhost:20007/product/create 其中/product/create为创建产品接口的uri。
授权方式选择Basic Auth. 右侧输入账号admin 密码 Ut123456
b. 切换到Headers页签,增加请求头信息。key为Content-Type, value为application/json
c. 切换到Body页签,增加请求参数json串信息
d.点击send。即可请求接口成功,得到返回结果。 以上步骤截图参考如下:

产品管理

产品发布

基本信息

Path: /product/release
Method: POST
接口描述:
调用该接口发布产品。产品发布后将不允许修改。

请求参数

Headers
参数名称参数值是否必须示例备注
Content-Typeapplication/json
Body
名称类型是否必须默认值备注其他信息
productKeystring必须产品Key

返回数据

OK

撤销产品发布

基本信息

Path: /product/cancelRelease
Method: POST
接口描述:
调用该接口撤销产品发布。

请求参数

Headers
参数名称参数值是否必须示例备注
Content-Typeapplication/json  
Body
名称类型是否必须默认值备注其他信息
productKeystring必须产品Key

返回数据

OK

创建产品

基本信息

Path:  /product/create
Method: POST
接口描述:
按输入条件创建产品。

请求参数

Headers
参数名称参数值是否必须示例备注
Content-Typeapplication/json
Body
名称类型是否必须默认值备注其他信息
productNamestring必须产品名称
dataFormatinteger必须数据格式。取值: 0:透传/自定义格式 1:ICA 标准数据格式 (Alink JSON)  
networkTypestring必须联网方式。取值: 'WIFI':WiFi 'ETHERNET':以太网 'BLUETOOTH':蓝牙  
productNodeTypestring必须节点类型,取值:0:普通设备  
tagsobject非必须产品标签JSON对象。key为标签键,value为标签值,例:{"tagKey":"tagValue"},
descriptionstring非必须产品描述
productTypestring非必须产品类型
productGroupstring非必须产品分组
imageKeystring非必须产品图片Key

返回数据

名称类型是否必须默认值备注其他信息
productKeystring非必须产品Key
createTimeinteger非必须创建时间format: int64

删除产品

基本信息

Path: /product/delete
Method: POST
接口描述:
根据产品key删除产品。

请求参数

Headers
参数名称参数值  是否必须示例备注
Content-Typeapplication/json
Body
名称类型是否必须默认值备注其他信息
productKeystring必须产品KEY  

返回数据

OK

更新产品

基本信息

Path: /product/update
Method: POST
接口描述:
根据产品key更新产品信息。

请求参数

Headers
参数名称参数值是否必须示例  备注
Content-Typeapplication/json
Body
名称类型是否必须默认值备注其他信息
productKeystring必须产品KEY
productNamestring非必须 产品名称  最大长度: 30,最小长度: 4
productTypestring非必须产品类型
productGroupstring非必须产品分组  
descriptionstring非必须产品描述  
imageKeystring非必须产品图片Key

返回数据

OK

查询产品(单个)

基本信息

Path: /product/get
Method: GET
接口描述:
根据产品key查询产品详细信息。

请求参数

Headers
参数名称是否必须示例备注
productKey产品KEY

返回数据

名称类型是否必须默认值备注其他信息
tagsobject非必须返回的设备标签信息JSON对象。key为标签键,value为标签值,例:{"tagKey":"tagValue"}
productKeystring非必须产品Key
productNamestring非必须数据格式。取值: 0:透传/自定义格式 1:ICA 标准数据格式 (Alink JSON)  
dataFormatinteger非必须联网方式。取值: 'WIFI':WiFi 'ETHERNET':以太网 'BLUETOOTH':蓝牙  
networkTypestring非必须节点类型,取值:0:普通设备
productNodeTypestring非必须节点类型,取值:0:普通设备
descriptionstring非必须产品描述
productTypestring非必须产品类型
productGroupstring非必须产品分组
imageKeystring非必须产品图片Key。
userIdstring非必须用户Id
productStatusstring非必须产品状态,枚举值:开发中:DEVELOPMENT_STATUS,已发布:RELEASE_STATUS
createTimeinteger非必须创建时间

分页查询产品信息

基本信息

Path: /product/get
Method: GET
接口描述:
返回产品信息分页数据。

请求参数

Query
参数名称是否必须示例备注
dataFormat数据格式。取值: 0:透传/自定义格式 1:ICA 标准数据格式 (Alink JSON)  
networkType联网方式。取值: ‘WIFI’:WiFi ‘ETHERNET’:以太网 ‘BLUETOOTH’:蓝牙  
pageNumber查询的页码(0..N)
pageSize页大小
productGroup产品分组
productKey产品KEY
productName产品名称(模糊查询)
productNodeType节点类型,取值:0:普通设备,1:普通网关,2:边缘网关
productType产品类型
sort排序条件,格式: 排序字段(,asc/desc). 默认按升序排序.支持多个排序条件.
tagList[0].tagKey标签键
tagList[0].tagValue标签值
tagsOr多个过滤标签之间是否OR操作。 true:使用OR操作,结果为并集 false:使用AND操作,结果为交集 默认为false  
userId用户Id

返回数据

名称类型是否必须默认值备注其他信息
contentobject []非必须item 类型: object
├─ productKeystring非必须产品KEY
├─ productNamestring非必须产品名称
├─ dataFormatinteger非必须  数据格式。取值: 0:透传/自定义格式 1:ICA 标准数据格式 (Alink JSON)    
├─ networkTypestring非必须  联网方式。取值: 'WIFI':WiFi 'ETHERNET':以太网 'BLUETOOTH':蓝牙    
├─ descriptionstring非必须产品描述
├─ productTypestring非必须产品类型  
├─ productGroupstring非必须产品分组
├─ imageKeystring非必须产品图片Key
├─ createTimeinteger非必须产品创建时间
├─ productNodeTypestring非必须节点类型,取值:0:普通设备
├─ productStatusstring非必须产品状态,枚举值:开发中:DEVELOPMENT_STATUS,已发布:RELEASE_STATUS
emptyboolean非必须
firstboolean非必须
lastboolean非必须
numberinteger非必须
numberOfElementsinteger非必须
pageableobject非必须
├─ pageNumberinteger非必须查询的页码(0..N)
├─ pageSizeinteger非必须页大小
├─ sortstring []非必须排序条件,格式: 排序字段(,asc/desc). 默认按升序排序.支持多个排序条件.
├─非必须
sizeinteger非必须
sortobject非必须
├─ emptyboolean非必须
├─ sortedboolean非必须
├─ unsortedboolean非必须
totalElementsinteger非必须
totalPagesinteger非必须

查询产品标签

基本信息

Path:/product/listTags
Method: GET
接口描述:
根据产品key返回产品标签列表。

请求参数

Query
参数名称是否必须示例备注
productKey产品Key

返回数据

名称类型是否必须默认值备注其他信息
tagsobject非必须返回的设备标签信息JSON对象。key为标签键,value为标签值,例:{"tagKey":"tagValue"}

增量更新多个产品标签

基本信息

Path:/product/incrementalUpdateTags
Method: POST
接口描述:
根据产品key增量更新产品标签信息,标签值为null即删除标签,产品最大标签数为10个。此接口需要以下功能权限:产品拥有者。

请求参数

Headers
参数名称参数值是否必须示例备注
Content-Typeapplication/json
Body
名称类型是否必须默认值备注其他信息  
productKeystring必须产品Key
tagsobject必须增量更新的标签JSON对象。key为标签键,value为标签值,需要删除标签,请将键值设为空值,例:{"tagKey":"tagValue"},

返回数据

OK

全量更新多个产品标签

基本信息

Path: /product/fullUpdateTags
Method: POST
接口描述:
根据产品key全量更新产品标签信息,产品最大标签数为10个。此接口需要以下功能权限:产品拥有者。

请求参数

Headers
参数名称参数值是否必须示例备注
Content-Typeapplication/json
Body
名称类型是否必须默认值备注其他信息
productKeystring必须产品Key
tagsobject必须全量更新的标签JSON对象。key为标签键,value为标签值,例:{"tagKey":"tagValue"},

返回数据

OK

设备管理

查询设备属性值

基本信息

Path: /device/queryDeviceProperty
Method: GET
接口描述:
调用该接口查询指定设备的属性。

请求参数

Query
参数名称是否必须示例备注
deviceName设备名称
productKey产品Key

返回数据

名称类型是否必须默认值备注其他信息
propertyDataListobject []非必须设备属性信息列表item 类型: object
├─ identifierstring非必须  属性格式类型,取值: int:整型。 float:单精度浮点型。 double:双精度浮点型。 enum:枚举型。 bool:布尔型。 text:字符型。 date:时间型(String类型的UTC时间戳,单位是毫秒)。 array:数组型。 struct:结构体类型。    
├─ identifierstring非必须属性标识符  
├─ namestring非必须属性名称
├─ timestring非必须属性修改的时间,单位是毫秒。
├─ unitstring非必须属性单位
├─ valuestring非必须属性值

创建设备

基本信息

Path: /device/create
Method: POST
接口描述:
调用该接口在指定产品下注册设备。

请求参数

Headers
参数名称参数值是否必须示例备注
Content-Typeapplication/json
Body
名称类型是否必须默认值备注其他信息
deviceNamestring非必须设备名称,长度为4-32个字符,可以包含英文字母、数字和特殊字符:连字符(-)、下划线(_)、at符号(@)、点号(.)、和英文冒号(:)。最大长度: 32 最小长度: 4  
indexinteger非必须自定义下标,通过维护此字段实现自定义排序format: int64
nicknamestring非必须备注名称,长度为4-64个字符,可包含中文汉字、英文字母、数字和下划线(_)。一个中文汉字算2字符。  最大长度: 64 最小长度: 4  
productKeystring必须隶属的产品key
remarkstring非必须备注

返回数据

名称类型是否必须默认值备注  其他信息
deviceNamestring非必须设备名称
deviceSecretstring非必须设备密钥

批量创建设备(随机名称)

基本信息

Path: /device/queryDeviceProperty
Method: GET
接口描述:
调用该接口在指定产品下批量创建多个设备(随机生成设备名)。

请求参数

Headers
参数名称参数值是否必须示例备注
Content-Typeapplication/json
Body
名称类型是否必须默认值备注其他信息
countinteger必须要创建的设备数量,取值不能大于1,000format: int32
indexinteger非必须自定义下标,若传入则批量创建设备的自定义下标将根据此值依次递增format: int64
productKeystring必须产品Key

返回数据

名称类型是否必须默认值备注其他信息
applyIdinteger非必须申请批次IDformat: int64

批量查询设备

基本信息

Path: /device/list
Method: GET
接口描述:
调用该接口批量查询设备。

请求参数

Query
参数名称是否必须示例备注
deviceName设备名称(模糊查询)
groupId分组Id,需要查询未分组设备则传空字符串””
networkType  联网方式。取值: ‘WIFI’:WiFi ‘ETHERNET’:以太网 ‘BLUETOOTH’:蓝  
nickname备注名称
ownerId设备用户Id
pageNumber查询的页码(0..N)
pageSize页大小
productGroup产品分组
productKey产品Key
productName产品名称
productNodeType节点类型,取值:0:普通设备,2:边缘网关,4:虚拟子产品  
productNodeTypes查询节点类型集合,取值:0:普通设备,2:边缘网关,4:虚拟子产品  
productType产品类型
sort 排序条件,格式: 排序字段(,asc/desc). 默认按升序排序.支持多个排序条件.  
status设备状态取值: ONLINE:设备在线。 OFFLINE:设备离线。 UNACTIVE:设备未激活。 DISABLE:设备已禁用。  
sub是否子设备
tagList[0].tagKey标签键
tagList[0].tagValue标签值
tagsOr多个过滤标签之间是否OR操作。 true:使用OR操作,结果为并集 false:使用AND操作,结果为交集 默认为false  

返回数据

名称类型是否必须默认值备注其他信息
contentobject []非必须开发者用户Id
├─ deviceNamestring  非必须设备名称
├─ groupobject []非必须分组ID集合,保存设备所属分组的id开发者用户Id
├─ imageKeystring非必须产品图片Key。通过该图片Key可以从文件服务中获取图片内容
├─ indexinteger非必须自定义下标,通过维护此字段实现自定义排序开发者用户Id
├─ lastOnlineTimestring非必须自定义下标,通过维护此字段实现自定义排序
├─ networkTypestring非必须  联网方式。取值: 'WIFI':WiFi 'ETHERNET':以太网 'BLUETOOTH':蓝牙      
├─ nicknamestring非必须设备备注名称
├─ ownerIdstring非必须设备用户Id
├─ productGroupstring非必须产品分组
├─ productKeystring非必须产品Key  
├─ productNamestring非必须产品名称
├─ productNodeTypestring非必须节点类型,取值:0:普通设备,1:普通网关,2:边缘网关,4: 虚拟子设备
├─ productTypestring非必须产品类型
├─ remarkstring非必须备注
├─ statusstring非必须    设备状态。取值: ONLINE:设备在线。 OFFLINE:设备离线。 UNACTIVE:设备未激活。 DISABLE:设备已禁用。    
├─ subboolean非必须是否子设备
├─ userIdstring非必须开发者用户Id
emptyboolean非必须
firstboolean非必须
lastboolean非必须
numberinteger非必须format: int32
numberOfElementsinteger非必须format: int32
pageableobject非必须
├─ pageNumberinteger非必须format: int32format: int32
├─ pageSizeinteger非必须format: int32format: int32
├─ sortstring []非必须format: int32format: int32
├─非必须
sizeinteger非必须format: int32
sortobject非必须
├─ emptyboolean非必须
├─ sortedboolean非必须
├─ unsortedboolean非必须
totalElementsinteger非必须format: int32
totalPagesinteger非必须format: int32

更新设备

基本信息

Path: /device/update
Method: POST
接口描述:
调用该接口更新指定设备。

请求参数

Headers
参数名称参数值是否必须示例备注
Content-Typeapplication/json
Body
名称类型是否必须默认值备注其他信息
deviceNamestring必须设备名称
nicknamestring非必须设备名称,长度为4-32个字符,可以包含英文字母、数字和特殊字符:连字符(-)、下划线(_)、at符号(@)、点号(.)、和英文冒号(:)。最大长度: 32 最小长度: 4  
productKeystring必须产品Key
remarkstring非必须备注

返回数据

OK

查询批量申请批次列表

基本信息

Path: /device/queryBatchList
Method: GET
接口描述:
调用该接口查询批量申请设备列表。

请求参数

Query
参数名称是否必须示例备注
pageNumber查询的页码(0..N)
pageSize页大小
productKey产品Key,不传则统计所有设备
sort排序条件,格式: 排序字段(,asc/desc). 默认按升序排序.支持多个排序条件.

返回数据

名称类型是否必须默认值备注其他信息
contentobject []非必须item 类型: object
├─ applyIdinteger非必须申请批次IDformat: int64
├─ countinteger非必须申请总数  format: int32
├─ createTimestring非必须设备的创建时间
├─ deviceNamestring非必须设备名称
├─ deviceSecretstring非必须设备密钥
├─ productKeystring非必须产品key
├─ productNamestring非必须产品名称
├─ statusstring非必须申请单的处理状态和结果,取值: CHECK:校验。 CHECK_SUCCESS:校验成功。 CHECK_FAILED:校验失败。 CREATE:创建。 CREATE_SUCCESS:创建成功。 CREATE_FAILED:创建失败。  
├─ userIdstring非必须申请人ID  
emptyboolean非必须
firstboolean非必须
lastboolean非必须
numberinteger非必须format: int32
numberOfElementsinteger非必须format: int32
pageableobject非必须
├─ pageNumberinteger非必须查询的页码(0..N)format: int32
├─ pageSizeinteger非必须页大小format: int32
├─ sortstring []非必须排序条件,格式: 排序字段(,asc/desc). 默认按升序排序.支持多个排序条件.item 类型: string
├─非必须
sizeinteger非必须format: int32
sortobject非必须
├─ emptyboolean非必须
├─ sortedboolean非必须
├─ unsortedboolean非必须
totalElementsinteger非必须
totalPagesinteger非必须format: int32

查询批量申请批次详情

基本信息

Path: /device/queryBatchInfo
Method: GET
接口描述:
调用该接口查询批量申请设备详情。

请求参数

Query
参数名称是否必须示例备注
applyId申请批次ID
pageNumber查询的页码(0..N)
pageSize页大小
productKey产品key
sort排序条件,格式: 排序字段(,asc/desc). 默认按升序排序.支持多个排序条件.
返回数据
名称类型是否必须默认值备注其他信息  
contentobject []非必须
├─ deviceNamestring非必须设备名称
├─ deviceSecretstring非必须设备密钥
├─ nicknamestring非必须设备备注名称  
├─ productKeystring非必须产品key
├─ statusstring非必须设备状态。取值: ONLINE:设备在线。 OFFLINE:设备离线。 UNACTIVE:设备未激活。 DISABLE:设备已禁用。  
├─ utcActivestring非必须设备的激活时间(UTC)
emptyboolean非必须
firstboolean非必须
lastboolean非必须
numberinteger非必须
numberOfElementsinteger非必须
pageableobject非必须
├─ pageNumberinteger非必须查询的页码(0..N)
├─ pageSizeinteger非必须页大小
├─ sortstring []非必须排序条件,格式: 排序字段(,asc/desc). 默认按升序排序.支持多个排序条件.
├─非必须
sizeinteger非必须
sortobject非必须
├─ emptyboolean非必须
├─ sortedboolean非必须
├─ unsortedboolean非必须
totalElementsinteger非必须
totalPagesinteger非必须

查询设备事件历史数据

基本信息

Path:/device/queryEventData
Method: GET
接口描述:
调用该接口查询指定设备的事件记录。

请求参数

Query
参数名称是否必须示例备注
asc
deviceName设备名称
endTime属性记录的结束时间。取值为13位毫秒值时间戳。
eventType要查询的事件类型。取值: info:信息。 alert:告警。 error:故障。  
identifier要查询的事件标识符。
pageSize单个属性可返回的数据记录数量。最大值为100。任意一个属性返回的数据记录数量不超过该值。
productKey产品Key
startTime属性记录的开始时间。取值为13位毫秒值时间戳。

返回参数

名称类型是否必须默认值备注其他信息
eventInfoListobject []非必须事件集合。item 类型: object
├─ eventTypestring非必须事件类型。
├─ identifierstring非必须事件标识符。  
├─ namestring非必须事件名称。
├─ outputDatastring非必须事件的输出参数,map格式的字符串。Key为参数标识符,value为参数值。
├─ timestring非必须事件发生时间。  
nextTimeinteger非必须  下一页属性记录的起始时间。 可以将NextTime的值作为下次查询的StartTime,继续查询本次查询不显示的数据。  format: int64
nextValidboolean非必须是否有下一页属性记录。true表示有,false表示没有。返回NextValid为true时,可以将NextTime的值作为下次查询的StartTime,继续查询本次查询不显示的数据。

删除设备

基本信息

Path:/device/delete
Method: POST
接口描述:
调用该接口删除指定设备。

请求参数

Headers
参数名称参数值是否必须示例备注
Content-Typeapplication/json
Body
名称类型是否必须默认值备注其他信息
deviceNamestring必须设备名称
productKeystring必须产品Key

返回数据

OK

查询设备属性历史数据

基本信息

Path:/device/queryPropertyData
Method: GET
接口描述:
调用该接口查询指定设备的属性记录。仅能查询最近30天内的属性数据。

请求参数

Query
参数名称是否必须示例备注
asc是 返回结果中,属性记录按时间排序的方式。取值:0:倒序,1:正序
deviceName设备名称
endTime属性记录的结束时间。取值为13位毫秒值时间戳。
identifier要查询的属性标识符。
pageSize单个属性可返回的数据记录数量。最大值为100。任意一个属性返回的数据记录数量不超过该值。
productKey产品Key  
startTime属性记录的开始时间。取值为13位毫秒值时间戳。

返回数据

名称类型是否必须默认值备注其他信息
nextTimeinteger非必须  下一页属性记录的起始时间。 可以将NextTime的值作为下次查询的StartTime,继续查询本次查询不显示的数据。  format: int64
nextValidboolean非必须是否有下一页属性记录。true表示有,false表示没有。返回NextValid为true时,可以将NextTime的值作为下次查询的StartTime,继续查询本次查询不显示的数据。
queryPropertyDataInfoList object []  非必须属性集合item 类型: object
├─ timestring非必须属性上报时间
├─ valuestring非必须属性值

查询设备服务历史数据

基本信息

Path:/device/queryServiceData
Method: GET
接口描述:
调用该接口查询指定设备的服务记录。仅能查询最近30天内的属性数据。

请求参数

Query
参数名称是否必须示例备注
asc返回结果中,属性记录按时间排序的方式。取值:0:倒序,1:正序
deviceName设备名称
endTime属性记录的结束时间。取值为13位毫秒值时间戳。
identifier要查询的服务标识符。
pageSize单个属性可返回的数据记录数量。最大值为100。任意一个属性返回的数据记录数量不超过该值。  
productKey产品Key
startTime属性记录的开始时间。取值为13位毫秒值时间戳。

返回数据

名称类型是否必须默认值备注  其他信息
nextTimeinteger非必须  下一页属性记录的起始时间。 可以将NextTime的值作为下次查询的StartTime,继续查询本次查询不显示的数据。  format: int64
nextValidboolean非必须  是否有下一页属性记录。true表示有,false表示没有。返回NextValid为true时,可以将NextTime的值作为下次查询的StartTime,继续查询本次查询不显示的数据。
serviceInfoListobject []非必须  服务记录集合。item 类型: object
├─ identifierstring非必须  服务标识符。
├─ inputDatastring非必须  服务的输入参数,map格式的字符串,结构为 key:value。
├─ namestring非必须  服务名称。
├─ outputDatastring非必须   服务的输出参数,map格式的字符串,结构为 key:value。  
├─ timestring非必须  服务执行的时间。

查询设备详情

基本信息

Path: /device/get
Method: GET
接口描述:
调用该接口查询指定设备的详细信息。

请求参数

Query
名称类型是否必须默认值备注其他信息
deviceNamestring非必须设备名称
deviceSecretstring非必须设备密钥
gmtActivestring非必须设备的激活时间
gmtCreatestring非必须创建时间
gmtOnlinestring非必须设备最近一次上线的时间
imageKeystring非必须产品图片Key。通过该图片Key可以从文件服务中获取图片内容
indexinteger非必须自定义下标,通过维护此字段实现自定义排序  format: int64
instanceIdstring非必须实例ID
ipAddressstring非必须设备IP地址
nicknamestring非必须备注名称
ownerIdstring非必须设备用户Id
parentDeviceNamestring非必须父设备名称
parentProductKeystring非必须父产品Key
productKeystring非必须产品key
productNamestring非必须产品名称
productNodeTypestring非必须节点类型,取值:0:普通设备,1:普通网关,2:边缘网关,4:虚拟子设备
remarkstring非必须备注
statusstring非必须设备状态。取值: ONLINE:设备在线。 OFFLINE:设备离线。 UNACTIVE:设备未激活。 DISABLE:设备已禁用。    
subDeviceNamestring非必须子设备名称
subProductKeystring非必须子产品Key
utcActivestring非必须设备的激活时间(UTC)
utcCreatestring非必须设备的创建时间(UTC)
utcOnlinestring非必须设备最近一次上线的时间(UTC)

禁用设备

基本信息

Path: /device/disableThing
Method: POST
接口描述:
调用该接口禁用设备。

请求参数

Headers
参数名称参数值是否必须示例备注
Content-Typeapplication/json
Body
名称类型是否必须默认值备注其他信息
deviceNamestring必须设备名称
productKeystring必须产品Key

返回数据

OK

获取设备的统计数量

基本信息

Path: /device/queryStatistics
Method:GET
接口描述:
调用该接口禁用设备。

请求参数

Query
参数名称是否必须示例备注
productKey产品key,不传则统计所有设备
返回数据
名称类型是否必须默认值备注其他信息
activeCountinteger非必须激活设备总数format: int64
deviceCountinteger非必须设备总数format: int64
onlineCountinteger非必须在线设备总数format: int64

解禁设备

基本信息

Path: /device/enableThing
Method:POST
接口描述:
调用该接口解禁设备。

请求参数

Headers
参数名称参数值是否必须示例备注
Content-Typeapplication/json
Body
名称类型是否必须默认值备注其他信息
deviceNamestring必须设备名称
productKey string必须产品Key

请求参数

OK

设置设备属性值

基本信息

Path: /device/setDeviceProperty
Method:POST
接口描述:
此接口需要权限:设备拥有者。

请求参数

Headers
参数名称参数值是否必须示例备注
Content-Typeapplication/json
Body
名称类型是否必须默认值备注其他信息
deviceNamestring必须设备名称
itemsstring要设置的属性信息,组成为key:value,数据格式为 JSON String。其中key:要设置的属性的标识符(identifier),value:属性值,取值需和您定义的属性的数据类型和取值范围保持一致
productKeystring产品Key

返回数据

OK

调用设备服务

基本信息

Path: /device/invokeThingService
Method:POST
接口描述:
此接口需要权限:设备拥有者。

请求参数

Headers
参数名称参数值是否必须示例备注
Content-Typeapplication/json
Body
名称类型是否必须默认值备注其他信息
argsstring必须要启用服务的入参信息,数据格式为JSON String,如, Args={"param1":1}。若此参数为空时,需传入 Args={} 。
deviceNamestring必须设备名称
identifierstring必须服务的标识符。
productKeystring必须产品Key

返回数据

名称类型是否必须默认值备注其他信息
resultstring非必须同步调用服务,返回的调用结果。异步调用服务,则此参数为空。

分组管理

创建设备分组

基本信息
Path: /group/create
Method: POST
接口描述:
按输入条件创建设备分组
请求参数
Headers
参数名称参数值是否必须示例备注
Content-Typeapplication/json是  
Body
名称类型是否必须默认值备注  其他信息  
groupNamestring必须  设备分组名称最大长度: 30;最小长度: 4;
imageKeystring非必须设备分组图片Key
descriptionstring非必须设备分组描述最大长度: 2147483647;最小长度: 5;
返回数据
名称类型是否必须默认值备注其他信息
groupIdstring非必须分组ID

删除设备分组

基本信息
Path: /group/delete
Method: POST
接口描述:
根据设备分组ID删除设备分组
请求参数
Headers
参数名称参数值是否必须示例  备注
Content-Typeapplication/json
Body
名称类型  是否必须默认值备注其他信息  
groupIdstring必须分组ID
返回数据
OK

更新设备分组

基本信息
Path: /group/update
Method: POST
接口描述:
根据设备分组ID更新设备分组信息
请求参数
Headers
参数名称参数值是否必须  示例备注  
Content-Typeapplication/json
Body
名称类型是否必须默认值  备注其他信息
groupIdstring必须分组ID
groupNamestring非必须设备分组名称最大长度: 3;最小长度: 4;
imageKeystring非必须设备分组图片Key
descriptionstring非必须设备分组描述最大长度: 2147483647;最小长度: 5;
返回数据
OK

查询设备分组(单个)

基本信息
Path: /group/get
Method: GET
接口描述:
根据分组ID查询设备分组详细信息
请求参数
Query
参数名称是否必须示例备注  
groupId是  分组ID
返回数据
名称类型是否必须默认值备注  其他信息
groupIdstring非必须设备分组ID
groupNamestring非必须设备分组名称
imageKeystring非必须设备分组图片Key
onlineCountinteger非必须在线设备数量format: int64
offlineCountinteger非必须在线设备数量format: int64
unactivatedCountinteger非必须未激活设备数量format: int64
disabledCountinteger非必须禁用设备数量format: int64
createTimeinteger非必须创建时间format: int64
userIdstring非必须创建人
descriptionstring非必须设备分组描述

查询设备分组(分页)

基本信息
Path: /group/query
Method: GET
接口描述:
返回设备分组信息分页数据
请求参数
Query
参数名称是否必须示例 备注
endTime查询结束时间(按创建时间查询)  
groupName设备分组名称(模糊查询)  
pageNumber查询的页码(0..N)
pageSize页大小
sort排序条件,格式: 排序字段(,asc/desc). 默认按升序排序.支持多个排序条件.
startTime查询起始时间(按创建时间查询)
userId创建人
返回数据
名称类型是否必须默认值备注其他信息
contentobject []非必须item 类型: object
├─ groupIdstring非必须设备分组ID
├─ groupNamestring非必须设备分组名称
├─ imageKeystring非必须设备分组图片Key
├─ onlineCountinteger非必须在线设备数量format: int64
├─ offlineCountinteger非必须离线设备数量format: int64
├─ createTimeinteger非必须 创建时间  format: int64
├─ userIdstring非必须创建人
├─ descriptionstring非必须设备分组描述
emptyboolean非必须
firstboolean非必须
lastboolean非必须
numberinteger非必须format: int32
numberOfElementsinteger非必须format: int32
pageableobject非必须
├─ pageNumberinteger非必须查询的页码(0..N)format: int32
├─ pageSizeinteger非必须页大小format: int32
├─ sortstring []非必须排序条件,格式: 排序字段(,asc/desc). 默认按升序排序.支持多个排序条件.item 类型: string
├─非必须
sizeinteger非必须format: int32
sortobject非必须
├─ emptyboolean非必须
├─ sortedboolean非必须
├─ unsortedboolean非必须
totalElementsinteger非必须format: int64
totalPagesinteger非必须format: int32

设备分组添加设备(批量)

基本信息
Path: /group/batchAddDevice
Method: POST
接口描述:
调用该接口批量添加设备到分组
请求参数
Headers
参数名称参数值是否必须示例备注
Content-Typeapplication/json 是  
Body
名称类型是否必须默认值备注其他信息
deviceKeysobject []  必须添加设备标识列表。单次最大可绑定设备数:20item 类型: object
├─ deviceNamestring必须设备名称
├─ productKeystring必须产品Key
groupIdstring必须设备分组ID
返回数据
OK

设备分组移除设备(批量)

基本信息
Path: /group/batchRemoveDevice
Method: POST
接口描述:
调用该接口批量添加从分组移除设备
请求参数
Headers
参数名称参数值是否必须示例备注  
Content-Typeapplication/json 是  
Body
名称类型是否必须默认值备注其他信息  
deviceKeysobject []必须添加设备标识列表。单次最大可绑定设备数:20  item 类型: object
├─ deviceNamestring必须设备名称  
├─ productKeystring必须产品Key
groupIdstring必须 设备分组ID  
返回数据
OK

设备端 SDK 功能说明

HAL列表

基础HAL

文件定位:wrappers/wrapper.c

HAL_Free

  1. 原型
void HAL_Free(_IN_ void *ptr);
  • 接口说明 释放参数ptr指向的一块堆内存, 当传入的参数为NULL时不执行任何操作
  • 参数说明
参数数据类型方向说明
ptrvoid *输入  指向将要释放的堆内存的指针
  • 返回值说明 void

HAL_Malloc

  • 原型
void *HAL_Malloc(_IN_ uint32_t size);
  • 接口说明 申请一块堆内存
  • 参数说明
参数数据类型方向说明
sizeuint32_t输入申请的堆内存大小
  • 返回值说明
说明
NULL内存申请失败
!NULL指向堆内存首地址的指针  

HAL_Printf

  • 原型
void HAL_Printf(_IN_ const char *fmt, ...);
  • 接口说明 打印函数, 用于向串口或其它标准输出打印日志或调试信息, 可参考C99的printf()函数实现
  • 参数说明
参数数据类型方向说明
fmtconst char *  输入格式化字符串
可变类型输入可变参数列表
  • 返回值说明 void

HAL_Random

  • 原型
uint32_t HAL_Random(_IN_ uint32_t region);
  • 接口说明 随机数函数, 接受一个无符号数作为范围, 返回0到region范围内的一个随机数
  • 参数说明
参数数据类型方向说明  
regionuint32_t输入用于指定随机数范围的无符号数  
  • 返回值说明 在指定范围的随机数

HAL_SleepMs

  • 原型
void HAL_SleepMs(_IN_ uint32_t ms);
  • 接口说明 睡眠函数, 使当前执行线程睡眠指定的毫秒数
  • 参数说明
参数数据类型方向  说明
msuint32_t输出线程挂起的时间, 单位ms
  • 返回值说明 void

HAL_Snprintf

  • 原型
int HAL_Snprintf(_OU_ char *str, _IN_ const int len, _IN_ const char *fmt, ...);
  • 接口说明 打印函数, 向内存缓冲区格式化构建一个字符串, 参考C99标准库函数
  • 参数说明
参数数据类型方向说明  
strchar *输入指向字符缓冲区的指针
lenint输入缓冲区的字符长度
fmtconst char *输入格式化字符串
输入可变参数列表
  • 返回值说明 实际写入缓冲区的字符串长度

HAL_Srandom

  1. 原型
void HAL_Srandom(_IN_ uint32_t seed);
  • 接口说明 随机数播种函数, 使 HAL_Random 的返回值每个随机序列各不相同, 类似C标准库中的srand
  • 参数说明
参数数据类型方向说明
seeduint32_t输入用于产生新随机序列的种子
  • 返回值说明 void

HAL_UptimeMs

  • 原型
uint64_t HAL_UptimeMs(void);
  • 接口说明 获取设备从上电到当前时刻所经过的毫秒数
  • 参数说明 void
  • 返回值说明 设备从上电到当前时刻所经过的毫秒数

HAL_Vsnprintf

  • 原型
int HAL_Vsnprintf(_OU_ char *str, _IN_ const int len, _IN_ const char *fmt, _IN_ va_list ap);
  • 接口说明 格式化输出字符串到指定buffer中, 可参考C标准库的vsnprintf()实现
  • 参数说明
参数数据类型方向说明
strchar *输出用于存放写入字符串的buffer
lenconst int输入  允许写入的最大字符串长度
fmtconst char输入  格式化字符串
apva_list输入  可变参数列表
  • 返回值说明 成功写入的字符串长

线程HAL

文件定位:wrappers/wrapper_thread.c

HAL_MutexCreate

  • 原型
void *HAL_MutexCreate(void);
  • 接口说明 创建一个互斥量对象, 返回指向所创建互斥量的指针, 用于同步访问, 对于仅支持单线程应用, 可实现为空函数
  • 参数说明 void
  • 返回值说明 void

HAL_MutexDestroy

  • 原型
void HAL_MutexDestroy(_IN_ void *mutex);
  • 接口说明 销毁一个互斥量对象, 释放资源
  • 参数说明
参数数据类型方向说明
mutexvoid *输入  互斥量指针
  • 返回值说明 void

HAL_MutexLock

  • 原型
void HAL_MutexLock(_IN_ void *mutex);
  • 接口说明 锁住一个互斥量
  • 参数说明
参数数据类型  方向 说明
mutexvoid *输入互斥量指针
  • 返回值说明 void

HAL_MutexUnlock

  • 原型
void HAL_MutexUnlock(_IN_ void *mutex);
  • 接口说明 解锁一个互斥量
  • 参数说明
参数数据类型方向说明
mutexvoid *  输入互斥量指针  
  • 返回值说明 void

HAL_SemaphoreCreate

  • 原型
void *HAL_SemaphoreCreate(void);
  • 接口说明 创建一个计数信号量, 此接口实现必须为原子操作, 对于仅支持单线程应用, 可实现为空函数
  • 参数说明 void
  • 返回值说明
参数数据类型
NULL创建失败
!NULL 创建成功, 返回信号量句柄  

HAL_SemaphoreDestroy

  • 原型
void HAL_SemaphoreDestroy(_IN_ void *sem);
  • 接口说明 销毁一个由参数sem指定的信号量, 此接口实现必须为原子操作, 此函数无返回值
  • 参数说明
参数数据类型方向说明
semvoid *输入信号量指针
  • 返回值说明 void

HAL_SemaphorePost

  • 原型
void HAL_SemaphorePost(_IN_ void *sem);
  • 接口说明 在指定的计数信号量上做自增操作, 解除其它线程的等待, 此接口实现必须为原子操作, 对于仅支持单线程应用, 可实现为空函数
  • 参数说明
参数数据类型方向说明
semvoid *输入信号量句柄
  • 返回值说明 void

HAL_SemaphoreWait

  • 原型
int HAL_SemaphoreWait(_IN_ void *sem, _IN_ uint32_t timeout_ms);
  • 接口说明 在指定的计数信号量上等待并做自减操作, 对于仅支持单线程应用, 此接口实现必须为原子操作, 可实现为空函数
  • 参数说明
参数数据类型  方向说明
semvoid *输入  信号量句柄
timeout_msuint32_t  输入  信号量等待超时时间, 单位ms, 如果参数为PLATFORM_WAIT_INFINITE, 则函数返回只能由获取信号量触发
  • 返回值说明
参数数据类型
0函数返回是由信号量触发
-1函数返回是由超时触发

HAL_ThreadCreate

  • 原型
int HAL_ThreadCreate( _OU_ void **thread_handle, _IN_ void *(*work_routine)(void *), _IN_ void *arg, _IN_ hal_os_thread_param_t *hal_os_thread_param, _OU_ int *stack_used);
  • 接口说明 按照指定入参创建一个线程
  • 参数说明
参数数据类型方向说明
thread_handlevoid **输出指向线程句柄变量的指针
work_routinevoid (work_routine)(void *)输入指向线程执行函数的函数指针
argvoid *输入传递给运行程序的单个参数
hal_os_thread_paramhal_os_thread_param_t *输入指向线程初始化参数的指针
stack_usedint *输出指示平台是否使用栈缓冲区, 0: 未使用. 1: 使用
线程初始化参数定义:
typedef struct _hal_os_thread { hal_os_thread_priority_t priority; /* initial thread priority */ void *stack_addr; /* thread stack address malloced by caller, use system stack by . */ size_t stack_size; /* stack size requirements in bytes; 0 is default stack size */ int detach_state; /* 0: not detached state; otherwise: detached state. */ char *name; /* thread name. */ } hal_os_thread_param_t;
线程优先级定义:
typedef enum { os_thread_priority_idle = -3, /* priority: idle (lowest) */ os_thread_priority_low = -2, /* priority: low */ os_thread_priority_belowNormal = -1, /* priority: below normal */ os_thread_priority_normal = 0, /* priority: normal (default) */ os_thread_priority_aboveNormal = 1, /* priority: above normal */ os_thread_priority_high = 2, /* priority: high */ os_thread_priority_realtime = 3, /* priority: realtime (highest) */ os_thread_priority_error = 0x84, /* system cannot determine priority or thread has illegal priority */ } hal_os_thread_priority_t;
  • 返回值说明
参数数据类型
-1创建失败
0创建成功

HAL_ThreadDelete

  • 原型
void HAL_ThreadDelete(_IN_ void *thread_handle);
  • 接口说明 删除指定的线程
  • 参数说明
参数数据类型方向说明
thread_handlevoid *输入线程句柄, NULL表示当前线程
  • 返回值说明 void

HAL_ThreadDetach

  • 原型
void HAL_ThreadDetach(_IN_ void *thread_handle);
  • 接口说明 将指定线程设置为分离状态
  • 参数说明
参数数据类型 方向说明
thread_handlevoid *输入线程句柄, NULL表示当前线程
  • 返回值说明 void

产品设备HAL

文件定位:wrappers/wrapper_product.c

HAL_GetDeviceName

  • 原型
int HAL_GetDeviceName(_OU_ char device_name[DEVICE_NAME_LEN]);
  • 接口说明 获取设备的DeviceName, 用于唯一标识单个设备的名字, 三元组之一, 在云端控制台注册得到并烧写到设备中
  • 参数说明
参数数据类型方向说明  
device_namechar[]输出存放DeviceName的字符串缓冲区
  • 返回值说明 实际获取到的DeviceName字符串长度

HAL_GetDeviceSecret

  • 原型
int HAL_GetDeviceSecret(_OU_ char device_secret[DEVICE_SECRET_LEN]);
  • 接口说明 获取设备的DeviceSecret, 用于标识单个设备的密钥, 三元组之一, 在云端控制台注册得到并烧写到设备中
  • 参数说明
参数数据类型方向说明
device_secretchar[]输出存放DeviceSecret的字符串缓冲区
  • 返回值说明 实际获取到的DeviceSecret字符串长度

HAL_GetFirmwareVersion

  • 原型
int HAL_GetFirmwareVersion(_OU_ char version[FIRMWARE_VERSION_MAXLEN]);
  • 接口说明 获取设备的固件版本字符串, 此固件版本号将会用于OTA升级的版本上报。如果设备不准备支持OTA,该函数返回空串即可。
  • 参数说明
参数数据类型方向说明
versionchar[]输出存放FirmwareVesion的字符串缓冲区
  • 返回值说明 实际获取到的FirmwareVesion字符串长度

HAL_GetProductKey

  • 原型
int HAL_GetProductKey(_OU_ char product_key[PRODUCT_KEY_LEN]);
  • 接口说明 获取设备的ProductKey, 用于标识设备的品类, 三元组之一, 在云端控制台注册得到并烧写到设备中
  • 参数说明
参数数据类型方向说明
product_keychar[]输出存放ProductKey的字符串缓冲区
  • 返回值说明 实际获取到的ProductKey字符串长度

HAL_GetProductSecret

  • 原型
int HAL_GetProductSecret(_OU_ char product_secret[DEVICE_SECRET_LEN]);
  • 接口说明 获取设备的ProductSecret, 用于标识品类的密钥, 在云端控制台注册得到并烧写到设备中, 在一型一密的场景下将会使用到此字符串
  • 参数说明
参数数据类型  方向  说明
product_secretchar[]输出存放ProductSecret的字符串缓冲区  
  • 返回值说明 实际获取到的ProductSecret字符串长度

HAL_SetDeviceName

  1. 原型
int HAL_SetDeviceName(_IN_ char *device_name);
  • 接口说明 设置设备的DeviceName, 用于标识设备单品的名字, 三元组之一
  • 参数说明
参数数据类型方向说明
device_namechar * 输出  指向待传入DeviceName字符串的指针
  • 返回值说明 待设置DeviceName字符串的长度

HAL_SetDeviceSecret

  • 原型
int HAL_SetDeviceSecret(_IN_ char *device_secret);
  • 接口说明 设置设备的DeviceSecret, 用于标识设备单品的密钥, 三元组之一
  • 参数说明
参数数据类型方向说明
device_secretchar *输出指向待传入DeviceSecret字符串的指针
  • 返回值说明 待设置DeviceSecret字符串的长度

HAL_SetProductKey

  • 原型
int HAL_SetProductKey(_IN_ char *product_key);
  • 接口说明 设置设备的ProductKey, 用于标识设备的品类, 三元组之一
  • 参数说明
参数数据类型方向说明
product_keychar *输出  指向待设置ProductKey字符串的指针
  • 返回值说明 待设置ProductKey字符串的长度

HAL_SetProductSecret

  • 原型
int HAL_SetProductSecret(_IN_ char *product_secret);
  • 接口说明 设置设备的ProductSecret, 用于标识品类的密钥, 在一型一密场景中会使用到此字符串
  • 参数说明
参数数据类型方向说明
product_secretchar *输出指向待传入ProductSecret字符串的指针
  • 返回值说明 待设置ProductSecret字符串的长度

存储HAL

文件定位:wrappers/wrapper_kv.c

HAL_Kv_Del

  • 原型
int HAL_Kv_Del(const char *key);
  • 接口说明 删除指定KV数据, 删除key对应的KV对数据, 可以通过擦除Flash或修改文件数据的方式实现持久化数据的删除
  • 参数说明
参数数据类型方向说明
keyconst char *输入  指向key字符串的指针
buffervoid *  输出指向存放获取数据的指针
buffer_lenint *输出指向存放获取
  1. 返回值说明
说明
0删除成功  
-1删除失败

HAL_Kv_Get

  • 原型
int HAL_Kv_Get(const char *key, void *buffer, int *buffer_len);
  • 接口说明 获取KV数据, 获取key对应的KV对数据, 可以通过读取Flash或读取文件的方式实现持久化数据的读取
  • 参数说明
参数数据类型方向说明
keyconst char *  输入  指向key字符串的指针
buffervoid *输出指向存放获取数据的指针
buffer_lenint *输出指向存放获取
  • 返回值说明
说明
0获取成功
-1获取失败

HAL_Kv_Set

  • 原型
int HAL_Kv_Set(const char *key, const void *val, int len, int sync);
  • 接口说明 设置KV数据接口, 可通过写flash或写文件的方式实现数据持久化
  • 参数说明
参数数据类型方向说明
keyconst char *  输入指向key字符串的指针
valconst void *输入  指向待设置数据的指针
lenint输入  待设置数据的字节长度  
syncint输入  0: 异步接口. 1: 同步接口
  • 返回值说明
说明
0设置成功  
-1 设置失败

TCP HAL

文件定位:wrappers/wrapper_tcp.c

HAL_TCP_Destroy

  • 原型
int32_t HAL_TCP_Destroy(_IN_ uintptr_t fd);
  • 接口说明 销毁由参数fd指定的TCP连接, 释放资源
  • 参数说明
参数数据类型方向说明
fduintptr_t输入TLS连接句柄
  • 返回值说明
参数数据类型
< 0操作失败
= 0操作成功  

HAL_TCP_Establish

  • 原型
uintptr_t HAL_TCP_Establish(_IN_ const char *host, _IN_ uint16_t port);
  • 接口说明 根据指定的服务器网络地址和端口号建立TCP连接, 并返回对应连接句柄
  • 参数说明
参数数据类型  方向说明
hostconst char *输入指定TCP服务器的网络地址
portuint16_t输入
  • 返回值说明
参数数据类型
NULLTCP连接建立失败
!NULLTCP连接建立成功, 返回对应的连接句柄

HAL_TCP_Read

  • 原型
int32_t HAL_TCP_Read(_IN_ uintptr_t fd, _OU_ char *buf, _IN_ uint32_t len, _IN_ uint32_t timeout_ms);
  • 接口说明 从指定的TCP连接中读取数据, 此接口为同步接口, 如果在超时时间内读取到参数len指定长度的数据则立即返回, 否则在超时时间到时才解除阻塞返回
  • 参数说明
参数数据类型方向说明
fduintptr_t  输入TCP连接句柄
bufchar *  输出指向数据接收缓冲区的指针
lenint输入数据接收缓冲区的字节大小
timeout_msint输入超时时间
  • 返回值说明
参数数据类型
-2TLS连接发生错误
-1TLS连接被远程设备关闭
0TLS读超时, 且没有接收到任何数据
> 0TLS读取到的字节数, TLS读取成功

HAL_TCP_Write

  • 原型
int32_t HAL_TCP_Write(_IN_ uintptr_t fd, _IN_ const char *buf, _IN_ uint32_t len, _IN_ uint32_t timeout_ms);
  • 接口说明 从指定的TCP连接中写入数据, 此接口为同步接口, 如果在超时时间内写入了参数len指定长度的数据则立即返回, 否则在超时时间到时才解除阻塞返回
  • 参数说明
参数数据类型  方向说明
fduintptr_t  输入TLS连接句柄
bufchar *  输出指向数据接收缓冲区的指针
lenint输入数据接收缓冲区的字节大小
timeout_msint输入超时时间
  1. 返回值说明
参数数据类型
< 0TLS连接发生错误
0TLS写超时, 且没有写入任何数据
> 0TLS写入的字节数, TLS写入成功

SSL/TLS HAL

文件定位:wrappers/wrapper_tls.c

HAL_SSL_Destroy

  • 原型
int32_t HAL_SSL_Destroy(_IN_ uintptr_t handle);
  • 接口说明 销毁由参数handle指定的TLS连接
  • 参数说明
参数数据类型方向说明
handleuintptr_t输入TLS连接句柄
  • 返回值说明
参数数据类型
< 0操作失败
= 0操作成功

HAL_SSL_Establish

  • 原型
uintptr_t HAL_SSL_Establish( _IN_ const char *host, _IN_ uint16_t port, _IN_ const char *ca_crt, _IN_ size_t ca_crt_len);
  • 接口说明 根据指定的服务器网络地址, 服务器端口号和证书文件建立TLS连接, 返回对应的连接句柄
  • 参数说明
参数数据类型方向  说明
hostconst char输入指定的TLS服务器网络地址  
portuint16_t输入指定的TLS服务器端口
ca_crtconst char输入指向PEM编码的X.509证书的指针
ca_crt_lensize_t输入证书字节长度
  • 返回值说明
参数数据类型  
NULL 创建失败
!NULL创建成功, 返回TLS连接句柄

HAL_SSL_Read

  • 原型
int32_t HAL_SSL_Read(_IN_ uintptr_t handle, _OU_ char *buf, _OU_ int len, _IN_ int timeout_ms);
  • 接口说明 从指定的TLS连接中读取数据, 此接口为同步接口, 如果在超时时间内读取到参数len指定长度的数据则立即返回, 否则在超时时间到时才解除阻塞返回
  • 参数说明
参数数据类型方向说明
handleuintptr_t  输入  TLS连接句柄
bufchar *输出指向数据接收缓冲区的指针
lenint输入数据接收缓冲区的字节大小
timeout_msint输入超时时间
  • 返回值说明
参数数据类型
-2TLS连接发生错误
-1TLS连接被远程设备关闭
0TLS读超时, 且没有接收到任何数据  
> 0 TLS读取到的字节数, TLS读取成功

HAL_SSL_Write

  • 原型
int32_t HAL_SSL_Write(_IN_ uintptr_t handle, _IN_ const char *buf, _IN_ int len, _IN_ int timeout_ms);
  • 接口说明 从指定的TLS连接中写入数据, 此接口为同步接口, 如果在超时时间内写入了参数len指定长度的数据则立即返回, 否则在超时时间到时才解除阻塞返回
  • 参数说明
参数数据类型方向说明
handleuintptr_t  输入  TLS连接句柄
bufchar *输出  指向数据接收缓冲区的指针
lenint输入  数据接收缓冲区的字节大小
timeout_msint输入  超时时间
  • 返回值说明
参数数据类型
< 0TLS连接发生错误
0TLS写超时, 且没有写入任何数据
> 0TLS写入的字节数, TLS写入成功

设备认证

设备的身份认证支持一机一密。
  • 一机一密 在设备上烧写设备的ProductKey、DeviceName、DeviceSecret,然后适配相应的HAL并调用SDK提供的连接云端的函数即可,这种方式要求对设备的产线工具进行一定的修改,需要对每个设备烧写不同的DeviceName和DeviceSecret。

一机一密编程

设备厂商需要实现下面的三个HAL,用于让SDK获取设备三元组:
  • HAL_GetProductKey
  • HAL_GetDeviceName
  • HAL_GetDeviceSecret
硬件云(私网版)因部署服务器不固定,只要配置三元组则可在设备签名时自由配置认证和签名。

设备签名

硬件云(私网版)支持使用MQTT协议作为IoT设备和平台之间的通信协议,MQTT Client在连接硬件云(私网版)平台时MQTT的userName、password、clientID需要遵守相应的规定,硬件云(私网版)平台将会使用这些参数验证设备的合法性。
获取设备认证时设置的三元组信息:
HAL_GetProductKey(PRODUCT_KEY); HAL_GetDeviceName(DEVICE_NAME); HAL_GetDeviceSecret(DEVICE_SECRET);

MQTT连接信息配置

因硬件云(私网版)的连接参数信息不固定,需手动变更配置。
通过IOT_SetupConnInfo重新配置配置MQTT连接参数。

参数解析

参数配置结构体:
typedef struct { uint16_t port; uint8_t init; char *host_name; char *client_id; char *username; char *password; const char *pub_key; } iotx_conn_info_t, *iotx_conn_info_pt;
参数含义
port  可以连接的MQTT服务器端口
init是否已经初始化配置,配置完应置为1
host_name可以连接的MQTT服务器域名地址
client_id连接MQTT服务器时标识设备的自定义ID,规则定义:ProductKey&DeviceName&Timestamp,即为:产品Key、设备名、时间戳的拼接
username连接MQTT服务器时将要使用的用户名,规则定义:ProductKey&DeviceName
password连接MQTT服务器时将要使用的密码, 和用户名一一对应,规则定义:DeviceSecret
pub_key连接MQTT服务器时,SSL/TLS签名
示例:
iotx_conn_info_pt pconn_info = NULL; /* Device AUTH */ if (0 != IOT_SetupConnInfo(PRODUCT_KEY, DEVICE_NAME, DEVICE_SECRET, (void **)&pconn_info)) { EXAMPLE_TRACE("AUTH request failed!"); } pconn_info->host_name = "192.168.105.161"; pconn_info->port = 1883; char _client_id[120] = {0}; HAL_Snprintf(_client_id, sizeof(_client_id), "%s&%s&%ld", PRODUCT_KEY, DEVICE_NAME, _get_sys_ms()); pconn_info->client_id = _client_id; char _username[60] = {0}; HAL_Snprintf(_username, sizeof(_username), "%s&%s", PRODUCT_KEY, DEVICE_NAME); pconn_info->username = _username; pconn_info->password = DEVICE_SECRET; pconn_info->init = 1;
注意:当前认证需在IOT_Linkkit_Open前设置。

优模型编程

优模型编程

优模型管理功能是指使用属性/事件/服务的方式对产品支持的能力进行描述,在设备开发时也需要以优模型的方式进行编程。

优模型功能API列表

  • IOT_Linkkit_Open 创建本地资源,在进行网络报文交互之前,必须先调用此接口,得到一个会话的句柄
  • IOT_Linkkit_Connect 对设备来说,将会建立设备与云端的通信
  • IOT_Linkkit_Yield 若SDK占有独立线程,该函数只将接收到的网络报文分发到用户的回调函数中,否则表示将CPU交给SDK让其接收网络报文并将消息分发到用户的回调函数中
  • IOT_Linkkit_Close 若入参中的会话句柄为主设备/网关,则关闭网络连接并释放SDK为该会话所占用的所有资源
  • IOT_Linkkit_TriggerEvent 向云端发送事件报文、错误码、异常告警等
  • IOT_Linkkit_Report 向云端发送没有云端业务数据下发的上行报文,目前只包括属性值报文
  • IOT_Linkkit_Query 向云端发送存在云端业务数据下发的查询报文,目前只支持NTP时间查询报文
  • IOT_RegisterCallback 对SDK注册事件回调函数,如云端连接成功/失败,有属性设置/服务请求到达,答复等
  • IOT_SetupConnInfo MQTT认证参数配置,因私网版服务器地址部署不一致,需配置连接参数信息
  • IOT_Ioctl 对SDK进行各种参数运行时设置和获取,以及运行状态的信息获取等,实参可以是任何数据类型

示例代码

示例代码位置:iot-privatization-sdk/examples/linkkit_example_solo.c。

设备属性

属性上报
用户可以调用IOT_Linkkit_Report()函数来上报属性,属性上报时需要按照云端定义的属性格式使用JSON编码后进行上报。示例中函数user_post_property展示了如何使用IOT_Linkkit_Report进行属性上报。
void user_post_property(void) { static int cnt = 0; int res = 0; char property_payload[30] = {0}; HAL_Snprintf(property_payload, sizeof(property_payload), "{\"bool_param\": %d}", 0); res = IOT_Linkkit_Report(EXAMPLE_MASTER_DEVID, ITM_MSG_POST_PROPERTY, (unsigned char *)property_payload, strlen(property_payload)); EXAMPLE_TRACE("Post Property Message ID: %d", res); }
注意 property_payload = “{"bool_param": %d}” 即是将属性编码为JSON对象。
当上报属性或者事件时需要云端应答时,通过IOT_Ioctl对IOTX_IOCTL_RECV_EVENT_REPLY选项进行设置。
注册属性上报回复: IOT_RegisterCallback(ITE_REPORT_REPLY, user_report_reply_event_handler);
属性设置
示例代码在回调函数user_property_set_event_handler中获取云端设置的属性值,并原样将收到的数据发回给云端,这样可以更新在云端的设备属性值,用户可在此处对收到的属性值进行处理。
说明:该回调函数是在example初始化时使用IOT_RegisterCallback注册的ITE_PROPERTY_SET事件对应的回调函数。
注册回调: IOT_RegisterCallback(ITE_PROPERTY_SET, user_property_set_event_handler);
/** recv property setting message from cloud **/ static int user_property_set_event_handler(const int devid, const char *request, const int request_len) { int res = 0; EXAMPLE_TRACE("Property Set Received, Request: %s", request); res = IOT_Linkkit_Report(EXAMPLE_MASTER_DEVID, ITM_MSG_POST_PROPERTY, (unsigned char *)request, request_len); EXAMPLE_TRACE("Post Property Message ID: %d", res); return 0; }
说明:属性设置成功通过属性上报的方式更新云端的属性值。

设备服务

在示例程序中,当收到服务调用请求(包括同步服务和异步服务)时,进入下面列出的回调函数:
注:目前暂只支持异步服务。
注册回调: IOT_RegisterCallback(ITE_SERVICE_REQUEST, user_service_request_event_handler);
static int user_service_request_event_handler(const int devid, const char *serviceid, const int serviceid_len, const char *request, const int request_len, char **response, int *response_len) { int add_result = 0; cJSON *root = NULL, *item_number_a = NULL, *item_number_b = NULL; const char *response_fmt = "{\"Result\": %d}"; EXAMPLE_TRACE("Service Request Received, Service ID: %.*s, Payload: %s", serviceid_len, serviceid, request); /* Parse Root */ root = cJSON_Parse(request); if (root == NULL || !cJSON_IsObject(root)) { EXAMPLE_TRACE("JSON Parse Error"); return -1; } if (strlen("service1") == serviceid_len && memcmp("service1", serviceid, serviceid_len) == 0) { /* Parse NumberA */ item_number_a = cJSON_GetObjectItem(root, "param1"); if (item_number_a == NULL || !cJSON_IsNumber(item_number_a)) { cJSON_Delete(root); return -1; } EXAMPLE_TRACE("NumberA = %d", item_number_a->valueint); add_result = item_number_a->valueint ; /* Send Service Response To Cloud */ *response_len = strlen(response_fmt) + 10 + 1; *response = (char *)HAL_Malloc(*response_len); if (*response == NULL) { EXAMPLE_TRACE("Memory Not Enough"); return -1; } memset(*response, 0, *response_len); HAL_Snprintf(*response, *response_len, response_fmt, add_result); *response_len = strlen(*response); } cJSON_Delete(root); return 0; }
用户需要动态分配内存空间用于存放服务应答数据,并通过response参数返回给SDK,SDK在完成应答数据发送后会负责response指向内存的释放。
说明:对服务输出参数为空的情况,*response应指向存放JSON对象{}的内存,不能让*response指向空指针。

设备事件

示例中使用IOT_Linkkit_TriggerEvent上报事件。其中展示了如何使用IOT_Linkkit_Report进行事件上报(对于异常情况的上报,详见example)。
void user_post_event(void) { int res = 0; char *event_id = "test_event0"; char *event_payload = "{\"int_param\": 1}"; res = IOT_Linkkit_TriggerEvent(EXAMPLE_MASTER_DEVID, event_id, strlen(event_id), event_payload, strlen(event_payload)); EXAMPLE_TRACE("Post Event Message ID: %d", res); }
当上报属性或者事件时需要云端应答时,通过IOT_Ioctl对IOTX_IOCTL_RECV_EVENT_REPLY选项进行设置。
注册事件上报回复: IOT_RegisterCallback(ITE_TRIGGER_EVENT_REPLY, user_trigger_event_reply_event_handler);

NTP事件获取

使用IOT_Linkkit_Query通过ITM_MSG_QUERY_TIMESTAMP类型来获取当前最新的时间。
void user_timestamp_query(void) { int res = 0; char ntp_payload[60] = {0}; HAL_Snprintf(ntp_payload, sizeof(ntp_payload), "{\"deviceSendTime\": \"%ld\"}", _get_sys_ms()); res = IOT_Linkkit_Query(EXAMPLE_MASTER_DEVID, ITM_MSG_QUERY_TIMESTAMP, ntp_payload, strlen(ntp_payload)); EXAMPLE_TRACE("Device Timestamp Query Message ID: %d", res); }
注意:时间查询payload中应带上当前的时间戳”{"deviceSendTime": "%ld"}”
注册云端应答回调: IOT_RegisterCallback(ITE_TIMESTAMP_REPLY, user_timestamp_reply_event_handler);
在回调中处理最新时间:
static int user_timestamp_reply_event_handler(const char *timestamp) { EXAMPLE_TRACE("Current Timestamp: %s", timestamp); return 0; }

关于上报消息的格式说明及示例

上报属性时,属性ID和值以JSON格式的形式放在IOT_Linkkit_Report()的payload中,不同数据类型以及多个属性的格式示例如下。
/* 整型数据 */ char *payload = "{\"Brightness\":50}"; /* 浮点型数据上报 */ char *payload = "{\"Temperature\":11.11}"; /* 枚举型数据上报 */ char *payload = "{\"WorkMode\":2}"; /* 布尔型数据上报, 在物模型定义中, 布尔型为整型, 取值为0或1, 与JSON格式的整型不同 */ *payload = "{\"LightSwitch\":1}"; /* 字符串数据上报 */ char *payload = "{\"Description\":\"Amazing Example\"}"; /* 时间型数据上报, 在物模型定义中, 时间型为字符串 */ char *payload = "{\"Timestamp\":\"1252512000\"}"; /* 复合类型属性上报, 在物模型定义中, 符合类型属性为JSON对象 */ char *payload = "{\"RGBColor\":{\"Red\":11,\"Green\":22,\"Blue\":33}}"; /* 多属性上报, 如果需要上报以上各种数据类型的所有属性, 将它们放在一个JSON对象中即可 */ char *payload = "{\"Brightness\":50,\"Temperature\":11.11,\"WorkMode\":2,\"LightSwitch\":1,\"Description\":\"Amazing Example\",\"Timestamp\":\"1252512000\",\"RGBColor:{\"Red\":11,\"Green\":22,\"Blue\":33}\"}"; /* 属性payload准备好以后, 就可以使用如下接口进行上报了 */ IOT_Linkkit_Report(devid, ITM_MSG_POST_PROPERTY, payload, strlen(payload));
上报事件时,与上报属性的区别是,事件ID需要单独拿出来,放在IOT_Linkkit_TriggerEvent()的eventid中,而事件的上报内容,也就是优模型定义中事件的输出参数,则使用与上报属性相同的格式进行上报,示例如下。
/* 事件ID为Error, 其输出参数ID为ErrorCode, 数据类型为枚举型 */ char *eventid = "Error"; char *payload = "{\"ErrorCode\":0}"; /* 事件ID为HeartbeatNotification, 其输出参数有2个. 第一个是布尔型参数ParkingState, 第二个是浮点型参数VoltageValue */ char *eventid = "HeartbeatNotification"; char *payload = "{\"ParkingState\":1,\"VoltageValue\":3.0}"; /* 事件payload准备好以后, 就可以使用如下接口进行上报了 */ IOT_Linkkit_TriggerEvent(devid, event_id, strlen(event_id), payload, strlen(payload)); /* 从上面的示例可以看出, 当事件的输出参数有多个时, payload的格式与多属性上报是相同的 */
优特云