API列表
endpoint: https://api-aep.xiot.senthink.com path: 参考接口描述中的请求地址说明
api列表中接口调用必须携带公共请求头,公共请求头如下。
Headers:
参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
---|---|---|---|---|
appId | 添加api应用生成的appId | 是 | ||
sign | 计算的签名值,参考签名计算示例 | 是 | ||
nonce | 随机数,可以使用随机数或者uuid | 是 |
产品管理
添加产品
接口名称: 添加产品
接口描述: 添加产品
请求地址: /api/senthink/aep/openApi/product/v1/add
传参方式:POST
备注: 无
请求参数
Headers:
参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
---|---|---|---|---|
Content-Type | application/json | 是 |
Body:
名称 | 类型 | 是否必须 | 备注 | 其他信息 |
---|---|---|---|---|
accessType | integer | 必须 | 接入方式,1 设备直连, 2 云云对接,3网关接入 | |
authType | integer | 非必须 | (设备直连必填 )认证加密方式,0 AES128 | |
deviceType | integer | 必须 | 节点类型 0: 设备 1: 网关 | |
encrypted | integer | 必须 | 数据是否加密, 0不加密,1加密 | |
name | string | 必须 | 产品名称 4-30个字符,中文算两个字符 | |
netType | integer | 必须 | 网络类型,0-WI-FI,1-移动蜂窝数据,2-以太网,4-NB-IOT,-1-其他 | |
payloadFormat | integer | 必须 | 数据格式, 0透传,1物模型(云云对接产品在平台为非透传只能填1物模型) | |
productDesc | string | 非必须 | 产品说明 长度不超过100 | |
protocol | integer | 必须 | 通信协议 0TCP,1mqtt,2mqtt开放协议,3云云对接,网关接入不填 | |
securityType | integer | 非必须 | 安全类型 0 一型一密免注册 1 一型一密预注册 2 一机一密预注册(设备直连必填 ;MQTT开放协议,安全类型只能一机一密预注册) | |
encrypted | integer | 非必须 | (设备直连必填 )是否加密 0否1是 | |
dataFormat | integer | 非必须 | 0 十六进制 ,1 JSON, 2 自定义 (payloadFormat 为1时必传;protocol为2或3时dataFormat只能填2) | |
ctwingAppId | string | 非必须 | 云云对接产品必填 | |
ctwingAppKey | string | 非必须 | 云云对接产品必填 | |
ctwingAppSecret | string | 非必须 | 云云对接产品必填 | |
ctwingMasterKey | string | 非必须 | 云云对接产品必填 | |
ctwingProductId | string | 非必须 | 云云对接产品必填 | |
ctwingPayloadFormat | integer | 非必须 | 云云对接产品必填,电信平台是否透传 1 透传 0 非透传 | |
gatewayProtocol | integer | 非必须 | 网关接入必填,网关接入协议0 Zigbee 1 Lora 2 自定义 |
响应参数
名称 | 类型 | 说明 |
---|---|---|
code | string | 响应码 |
msg | string | 响应码说明 |
data | object | 响应内容 |
data 说明如下
名称 | 类型 | 说明 |
---|---|---|
productId | string | 平台生成的产品标识id |
productKey | string | 产品秘钥 |
id | string | 产品唯一id |
name | string | 产品名称 |
accessType | string | 接入类型 |
netType | string | 网络类型 |
protocol | string | 协议类型 |
deviceType | string | 设备类型 |
securityType | string | 安全类型 |
authType | string | 认证方式 |
payloadFormat | string | 数据格式 |
encrypted | string | 是否加密 |
productDesc | string | 产品描述 |
createAt | string | 创建时间 |
请求示例
直连设备示例
{
"name": "api添加产品测试",
"accessType": 1,
"netType":1,
"protocol": 1,
"deviceType": 0,
"securityType": 0,
"authType": 0,
"payloadFormat": 0,
"encrypted":0
}
云云对接产品添加示例
{
"accessType": 2,
"ctwingAppId": 66675,
"ctwingAppKey": "DPtXJK2CZrc",
"ctwingAppSecret": "vLqJk5H5w7",
"ctwingMasterKey": "d8ad99856eab4f46822d704b5bb2b2ea",
"ctwingProductId": 15074825,
"dataFormat": 0,
"deviceType": 0,
"name": "openapi云云对接产品",
"netType": 1,
"payloadFormat": 0,
"productDesc": "这是产品信息",
"ctwingPayloadFormat":"1",
"productId": "",
"protocol": 1
}
子设备产品添加示例
{
"accessType": 3,
"deviceType": 0,
"protocol": 1,
"encrypted": 0,
"netType": 4,
"securityType": 1,
"name": "api添加子设备产品1",
"authType": 0,
"payloadFormat": "1",
"productDesc": "产品描述",
"dataFormat": 1,
"gatewayProtocol": "0"
}
响应示例
直连设备:
{
"code": "8001",
"msg": "操作成功",
"data": {
"productId": "30DE513B",
"productKey": "7313D093201946494C1C81E3E93B5D11",
"id": "601e83a9ffc81f7739951e82",
"name": "api添加产品测试7",
"accessType": "设备直连",
"netType": "移动蜂窝数据",
"protocol": "MQTT",
"deviceType": "设备",
"securityType": "一型一密免注册",
"authType": "AES128",
"payloadFormat": "透传",
"encrypted": "不加密",
"productDesc": null,
"createAt": "2021-02-06 21:43:48"
}
}
云云对接产品:
{
"code": "8001",
"msg": "操作成功",
"data": {
"productId": "A570A443",
"productKey": "B1D1EBB81260CA9A9C1A07A04D8CBA9B",
"id": "617f98be90a57f1fdff43039",
"name": "openapi云云对接产品1",
"accessType": "云云对接",
"netType": "移动蜂窝数据",
"protocol": "MQTT",
"deviceType": "设备",
"securityType": null,
"authType": null,
"payloadFormat": "透传",
"encrypted": "不加密",
"productDesc": "这是产品信息",
"createAt": "2021-11-01 15:35:26"
}
}
子设备产品:
{
"code": "8001",
"msg": "操作成功",
"data": {
"productId": "298DAB80",
"productKey": "200A7F9FEA848DDD10936E857206A494",
"id": "61ea56d8fc66163ed7f19888",
"name": "api添加子设备产品1",
"accessType": "网关接入",
"netType": "NB-IOT",
"protocol": "MQTT",
"deviceType": "设备",
"securityType": null,
"authType": null,
"payloadFormat": "非透传",
"encrypted": "不加密",
"productDesc": "产品描述",
"createAt": "2022-01-21 14:46:47"
}
}
错误码
code | code中文描述 | 详细信息 | 处理建议 |
---|---|---|---|
4001 | 操作失败 | 错误详情 | 根据错误详细信息,检查输入数据输入格式 |
删除产品
接口名称: 删除产品
接口描述: 删除产品
请求地址: /api/senthink/aep/openApi/product/v1/delete 传参方式:POST
备注: 无
请求参数
Headers:
参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
---|---|---|---|---|
Content-Type | application/json | 是 |
Body:
名称 | 类型 | 是否必须 | 备注 | 其他信息 |
---|---|---|---|---|
id | string | 非必须 | id | 产品唯一id |
返回数据
名称 | 类型 | 备注 | 其他信息 |
---|---|---|---|
code | string | 响应码 | |
data | boolean | 响应数据 | |
msg | string | 响应描述 |
请求示例
{
"id": "601ba1affc73a85454cdae21"
}
响应示例
{
"code": "8001",
"msg": "操作成功",
"data": true
}
错误码
code | code中文描述 | 详细信息 | 处理建议 |
---|---|---|---|
4301 | 产品不存在 | 无 | 请检查输入参数 |
4302 | 产品下有在线设备,请先手动删除在线设备 | 无 | 请先删除产品下所有在线的设备 |
编辑产品
接口名称: 编辑产品
接口描述: 编辑产品
请求地址: /api/senthink/aep/openApi/product/v1/edit
传参方式:POST
备注: 无
请求参数
Headers:
参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
---|---|---|---|---|
Content-Type | application/json | 是 |
Body:
名称 | 类型 | 是否必须 | 备注 | 其他信息 |
---|---|---|---|---|
id | string | 必须 | 产品id字段 | |
name | string | 必须 | 产品名称 | |
productDesc | string | 非必须 | 产品说明 |
返回数据
名称 | 类型 | 备注 | 其他信息 |
---|---|---|---|
code | string | 响应码 | |
data | boolean | 响应数据 | |
msg | string | 响应描述 |
请求示例
{
"id": "617f601fc496415b0adfa0fe",
"name": "智能钓鱼竿子",
"productDesc": "崭新的描述,后台测试产品"
}
响应示例
{
"code":"8001",
"msg":"操作成功",
"data":true
}
错误码
code | code中文描述 | 详细信息 | 处理建议 |
---|---|---|---|
4301 | 产品不存在 | 无 | 请检查输入参数 |
4102 | 请求参数有误 | 无 | 请检查参数,productDesc 为必填项 |
4001 | 操作失败 | 错误详情 | 请根据错误详情,检查输入参数 |
产品列表
接口名称: 产品列表
接口描述: 列表产品
请求地址: /api/senthink/aep/openApi/product/v1/list
传参方式:POST
备注: 无
请求参数
Headers:
参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
---|---|---|---|---|
Content-Type | application/json | 是 |
Body:
无
返回数据
名称 | 类型 | 备注 | 其他信息 |
---|---|---|---|
code | string | 响应码 | |
data | object [] | 响应数据 | **item 类型:** 产品列表 |
msg | string | 响应描述 |
data中的每个产品的数据结构是:
名称 | 类型 | 备注 | 其他信息 |
---|---|---|---|
accessType | integer | 接入方式,1 设备直连, 2 云云对接 | |
authType | integer | 认证加密方式,0 AES128 | |
deviceType | integer | 节点类型 0: 设备 1: 网关 | |
encrypted | integer | 数据是否加密, 0不加密,1加密 | |
id | string | 产品唯一id | |
name | string | 产品名称 | |
netType | integer | 网络类型,0-2G,1-3G,2-4G,3-5G,4-catOne,5-Nbiot | |
payloadFormat | integer | 数据格式, 0透传,1加密 | |
productDesc | string | 产品说明 | |
productId | string | 平台生成的产品标识id | |
protocol | integer | 通信协议 0TCP,1mqtt,2mqtt开放协议,3云云对接 | |
securityType | integer | 安全类型 0 一型一密免注册 1 一机一密预注册 2 一机一密免注册 | |
nodeTypeEnum | object | 设备类型枚举 | |
protocolEnum | object |
请求示例
{}
响应示例
{
"code": "8001",
"msg": "操作成功",
"data": {
"data": {
"records": [
{
"id": "5fe4468d889d320e238d447b",
"name": "后端调试用-tcp-免注册",
"productId": "C1168332",
"protocol": 0,
"deviceNum": 0,
"deviceType": 0,
"createAt": "2020-12-24 15:43:09"
},
{
"id": "5fe4468d889d320e238d447e",
"name": "后端调试用-mqtt-免注册",
"productId": "9ACB2DCC",
"protocol": 0,
"deviceNum": 1,
"deviceType": 0,
"createAt": "2020-12-24 15:43:09"
},
],
"pages": 2,
"current": 1,
"size": 10,
"searchCount": true,
"total": 2,
"optimizeCount": true,
"offset": 0,
"limit": 2147483647,
"asc": true,
"orderByField": null
},
"nodeTypeEnum": {
"0": "设备",
"1": "网关"
},
"protocolEnum": {
"0": "TCP",
"1": "MQTT"
}
}
}
查询产品
接口名称: 查询产品
接口描述: 查询产品
请求地址: /api/senthink/aep/openApi/product/v1/query
传参方式:POST
备注: 无
请求参数
Headers:
参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
---|---|---|---|---|
Content-Type | application/json | 是 |
Body:
名称 | 类型 | 是否必须 | 备注 | 其他信息 |
---|---|---|---|---|
id | string | 非必须 | id |
返回数据
名称 | 类型 | 备注 | 其他信息 |
---|---|---|---|
code | string | 响应码 | |
data | object | ||
msg | string | 响应描述 |
data的数据结构与产品列表接口的列表元素一致:
名称 | 类型 | 备注 | 其他信息 |
---|---|---|---|
accessType | string | 接入方式 | 无 |
authType | string | 认证加密方式 | 无 |
deviceType | string | 节点类型 | 无 |
encrypted | string | 数据是否加密 | 无 |
id | string | 产品唯一id | |
name | string | 产品名称 | |
netType | string | 网络类型 | 无 |
payloadFormat | string | 数据格式 | 无 |
productDesc | string | 产品说明 | |
productId | string | 平台生成的产品标识id | |
protocol | string | 通信协议 | 无 |
securityType | string | 安全类型 0 一型一密免注册 1 一机一密预注册 2 一机一密免注册 | 无 |
topic | List<Object> | 产品如果为mqtt产品为topic列表, tcp产品则为null | 无 |
请求示例:
{
"id": "601ba1affc73a85454cdae21"
}
响应示例
{
"code": "8001",
"msg": "操作成功",
"data": {
"id": "601ba1affc73a85454cdae21",
"name": "智能电动车",
"accessType": 1,
"netType": 1,
"protocol": 1,
"deviceType": 0,
"securityType": 0,
"authType": 0,
"payloadFormat": 0,
"encrypted": 0,
"productDesc": null,
"productId": "AB90E2E0"
"topic": null
}
}
mqtt 产品详情如下
{
"code": "8001",
"msg": "操作成功",
"data": {
"productId": "30DE513B",
"productKey": "7313D093201946494C1C81E3E93B5D11",
"id": "601e83a9ffc81f7739951e82",
"name": "api添加产品测试7",
"accessType": "设备直连",
"netType": "移动蜂窝数据",
"protocol": "MQTT",
"deviceType": "设备",
"securityType": "一型一密免注册",
"authType": "AES128",
"payloadFormat": "透传",
"encrypted": "不加密",
"productDesc": null,
"createAt": null,
"topic": [
{
"function": "认证",
"topic": "/sys/device/auth",
"permission": 0,
"desc": "用于设备认证"
},
{
"function": "入网",
"topic": "/sys/device/join",
"permission": 0,
"desc": "用于设备入网"
},
{
"function": "心跳",
"topic": "/sys/EEF63A10/30DE513B/${deviceId}/heartbeat",
"permission": 0,
"desc": "用于心跳上报"
},
{
"function": "上报",
"topic": "/sys/EEF63A10/30DE513B/${deviceId}/uplink",
"permission": 0,
"desc": "用于数据上报"
},
{
"function": "下行",
"topic": "/sys/EEF63A10/30DE513B/${deviceId}/downlink",
"permission": 1,
"desc": "接收下行指令"
}
],
"deviceCnt": 0
}
}
错误码
code | code中文描述 | 详细信息 | 处理建议 |
---|---|---|---|
4301 | 产品不存在 | 无 | 请检查输入参数 |
获取产品物模型TSL
接口名称:获取产品物模型TSL
接口描述:暂无
请求地址:/api/senthink/aep/openApi/product/v1/getTsl
传参方式:POST
备注:暂无
请求参数
Headers:
参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
---|---|---|---|---|
Content-Type | application/json | 是 |
Body:
名称 | 类型 | 是否必须 | 备注 | 其他信息 |
---|---|---|---|---|
id | string | 必须 | 产品productId |
返回数据
名称 | 类型 | 是否必须 | 备注 | 其他信息 |
---|---|---|---|---|
code | string | 必须 | 状态码 | |
msg | string | 必须 | 响应消息 | |
data | string | 必须 | 响应数据(产品TSL数据) |
请求示例
{
"id":"7F375F1C"
}
响应示例
{
"code": "8001",
"msg": "操作成功",
"data": "{\"profile\":{\"version\":\"1.0\",\"productKey\":\"91EDBA9A376ACB1CFA04791B3B0701AA\",\"productModelId\":\"61ea248bab40077dc259c4f0\"},\"properties\":[{\"identifier\":\"subNodeStatus\",\"name\":\"子节点状态\",\"dataType\":{\"type\":\"int32\",\"spec\":{\"min\":\"1\",\"max\":\"2\",\"step\":\"1\",\"unit\":\"stepCount\"}},\"accessMode\":\"r\"},{\"identifier\":\"electricity\",\"name\":\"电量\",\"dataType\":{\"type\":\"int32\",\"spec\":{\"min\":\"0\",\"max\":\"100\",\"step\":\"1\",\"unit\":\"%\"}},\"accessMode\":\"r\"},{\"identifier\":\"joinStatus\",\"identifierOld\":\"joinStatus\",\"name\":\"从节点入网状态\",\"dataType\":{\"type\":\"int32\",\"spec\":{\"min\":\"0\",\"max\":\"1\",\"step\":\"1\",\"unit\":\"pcs\"}},\"accessMode\":\"rw\"},{\"identifier\":\"ledStatus\",\"identifierOld\":\"ledStatus\",\"name\":\"led状态\",\"dataType\":{\"type\":\"int32\",\"spec\":{\"min\":\"0\",\"max\":\"1\",\"step\":\"1\",\"unit\":\"pcs\"}},\"accessMode\":\"rw\"},{\"identifier\":\"command\",\"name\":\"命令字\",\"dataType\":{\"type\":\"int32\",\"spec\":{\"min\":\"0\",\"max\":\"10000\",\"step\":\"1\",\"unit\":\"pcs\"}},\"accessMode\":\"rw\"},{\"identifier\":\"temperature\",\"identifierOld\":\"temperature\",\"name\":\"从节点温度\",\"dataType\":{\"type\":\"float\",\"spec\":{\"min\":\"-1000.0\",\"max\":\"1000.0\",\"step\":\"1.0\",\"unit\":\"°C\"}},\"accessMode\":\"rw\"},{\"identifier\":\"humidity\",\"name\":\"从节点湿度\",\"dataType\":{\"type\":\"float\",\"spec\":{\"min\":\"-1000.0\",\"max\":\"1000.0\",\"step\":\"1.0\",\"unit\":\"pcs\"}},\"accessMode\":\"rw\"},{\"identifier\":\"channel\",\"name\":\"主节点信道\",\"dataType\":{\"type\":\"int32\",\"spec\":{\"min\":\"0\",\"max\":\"10000\",\"step\":\"1\",\"unit\":\"pcs\"}},\"accessMode\":\"rw\"},{\"identifier\":\"subNodeId\",\"name\":\"从节点ID\",\"dataType\":{\"type\":\"text\",\"spec\":{\"length\":10240}},\"accessMode\":\"rw\"},{\"identifier\":\"nodeId\",\"name\":\"主节点ID\",\"dataType\":{\"type\":\"text\",\"spec\":{\"length\":10240}},\"accessMode\":\"rw\"}],\"events\":[{\"identifier\":\"test3\",\"name\":\"测试事件3\",\"type\":\"warn\",\"outputData\":[]},{\"identifier\":\"test2\",\"name\":\"测试事件2\",\"type\":\"info\",\"outputData\":[]}],\"services\":[{\"identifier\":\"ledcontrol\",\"identifierOld\":\"ledcontrol\",\"name\":\"led控制\",\"callType\":\"sync\",\"inputData\":[{\"identifier\":\"nodeId\",\"identifierOld\":\"nodeId\",\"name\":\"主节点ID\",\"dataType\":{\"type\":\"text\",\"spec\":{\"length\":10240}}},{\"identifier\":\"subNodeId\",\"identifierOld\":\"subNodeId\",\"name\":\"子节点ID\",\"dataType\":{\"type\":\"text\",\"spec\":{\"length\":10240}}},{\"identifier\":\"command\",\"identifierOld\":\"command\",\"name\":\"命令字\",\"dataType\":{\"type\":\"int32\",\"spec\":{\"min\":\"0\",\"max\":\"10000\",\"step\":\"1\",\"unit\":\"pcs\"}}},{\"identifier\":\"joinStatus\",\"identifierOld\":\"joinStatus\",\"name\":\"入网状态\",\"dataType\":{\"type\":\"int32\",\"spec\":{\"min\":\"0\",\"max\":\"1\",\"step\":\"1\",\"unit\":\"pcs\"}}},{\"identifier\":\"ledStatus\",\"identifierOld\":\"ledStatus\",\"name\":\"led状态\",\"dataType\":{\"type\":\"int32\",\"spec\":{\"min\":\"0\",\"max\":\"1\",\"step\":\"1\",\"unit\":\"pcs\"}}}],\"outputData\":[]}]}"
}
推送应用管理
添加推送应用
接口名称: 添加推送应用
接口描述: 添加推送应用
请求地址: /api/senthink/aep/openApi/pushApp/v1/add
传参方式:POST
备注: 无
请求参数
Headers:
参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
---|---|---|---|---|
Content-Type | application/json | 是 |
Body:
名称 | 类型 | 是否必须 | 备注 | 其他信息 |
---|---|---|---|---|
appName | string | 必须 | 应用名称 | |
httpPushInfo | object | 非必须 | http推送详情(如果pushType=0则该字段必须) | **备注:** http推送详情 |
mqttPushInfo | object | 非必须 | mqtt 推送详情(如果pushType=1则该字段必须) | **备注:** mqtt 推送详情 |
rabbitMqPushInfo | object | 非必须 | rabbitmq推送详情(如果pushType=2则该字段必须) | **备注:** rabbitmq推送详情 |
pushType | integer | 必须 | 推送类型,0-http,1-mqtt,2-rabbitmq | |
subProductDocIds | string [] | 必须 | 关联产品的唯一id | |
status | string | 必须 | 是否启用 0 禁用 1 启用 |
httpPushInfo的结构:
名称 | 类型 | 是否必须 | 备注 | 其他信息 |
---|---|---|---|---|
httpConnectRemote | string | 必须 | 设备心跳消息推送URL | 必须http/https,长度不超过255 |
httpHeartBeatRemote | string | 必须 | 设备上线/掉线推送URL | 必须http/https,长度不超过255 |
httpNeedVerify | integer | 必须 | 是否校验 | **format:** int32 |
httpOtaResultRemote | string | 必须 | OTA升级结果推送URL | 必须http/https,长度不超过255 |
httpUplinkRemote | string | 必须 | 上行应用数据推送URL | 必须http/https,长度不超过255 |
mqttPushInfo结构:
名称 | 类型 | 是否必须 | 备注 | 其他信息 |
---|---|---|---|---|
mqttAdmin | string | 必须 | 用于推送的MQTT用户 | |
mqttBroker | string | 必须 | 目的MQTT服务器地址 | |
mqttPassword | string | 必须 | 用于推送的MQTT密码 | |
mqttPort | integer | 必须 | 目的MQTT服务器端口 |
rabbitmqPushInfo结构:
名称 | 类型 | 是否必须 | 备注 | 其他信息 |
---|---|---|---|---|
rabbitAdmin | string | 必须 | RabbitMq用户名 | |
rabbitExchangePrefix | string | 必须 | 上行应用数据推送Exchange | |
rabbitPassword | string | 必须 | 用于推送的RabbitMq密码 | |
rabbitBroker | string | 必须 | 目的RabbitMq服务器地址 | |
rabbitPort | integer | 必须 | 目的RabbitMq服务器端口 | |
rabbitVHost | string | 必须 | 用于推送的RabbitMq虚拟主机 |
返回数据
名称 | 类型 | 备注 | 其他信息 |
---|---|---|---|
code | string | 响应码 | |
data | object | 响应数据 | **备注:** 响应数据 |
msg | string | 响应描述 |
data 说明如下
名称 | 类型 | 备注 | 其他信息 |
---|---|---|---|
id | string | 应用唯一id | |
appSecret | string | 应用秘钥 | |
status | string | 状态0禁用 1启用 | |
appName | string | 应用名称 | |
createAt | string | 创建时间 | |
subProductDocIds | string | 订阅产品唯一id列表 | |
subProductNames | string | 订阅产品名称列表 | |
pushType | string | 推送类型 0-http, 1-mqtt, 2-rabbitmq | |
httpPushInfo | string | 如果是http应用则有该字段,结构参考上面httpPushInfo结构 | |
mqttPushInfo | string | 响应码 | 如果是mqtt应用则有该字段 |
rabbitMqPushInfo | string | 响应码 | 如果是rabbitMq应用则有该字段 |
添加mqtt应用和rabbitmq应用之后,系统会为其生成添加相关信息
mqttPushInfo结构:
名称 | 类型 | 备注 | 其他信息 |
---|---|---|---|
mqttAdmin | string | 用于推送的MQTT用户 | |
mqttBroker | string | 目的MQTT服务器地址 | |
mqttPassword | string | 用于推送的MQTT密码 | |
mqttPort | integer | 目的MQTT服务器端口 | |
mqttQos | integer | mqtt消息质量 | |
mqttUplinkTopic | string | mqtt上行数据Topic | |
mqttConnectTopic | string | mqtt连接类消息Topic | |
mqttHeartBeatTopic | string | mqtt心跳类消息Topic | |
mqttOtaResultTopic | string | mqttOta升级结果通知类消息Topic | |
pushDataFormat | 推送数据格式 | JSON |
rabbitmqPushInfo结构:
名称 | 类型 | 备注 | 其他信息 |
---|---|---|---|
rabbitAdmin | string | RabbitMq用户名 | |
rabbitExchangePrefix | string | 上行应用数据推送Exchange | |
rabbitPassword | string | 用于推送的RabbitMq密码 | |
rabbitBroker | string | 目的RabbitMq服务器地址 | |
rabbitPort | integer | 目的RabbitMq服务器端口 | |
rabbitVHost | string | 用于推送的RabbitMq虚拟主机 | |
rabbitUplinkExchange | string | rabbitmq上行消息交换机 | |
rabbitConnectExchange | string | rabbitmq连接类消息交换机 | |
rabbitHeartBeatExchange | string | rabbitmq心跳消息交换机 | |
rabbitOtaResultExchange | string | rabbitmqOta升级结果通知交换机 | |
pushDataFormat | string | JSON |
请求示例
备注: subProductDocIds 为产品的唯一id,可以通过获取产品列表或者详情,对应id字段
1 http类型推送
{
"appName": "智能钓鱼竿子推送应用",
"httpPushInfo": {
"httpConnectRemote": "localhost:8080/receive/conn",
"httpHeartBeatRemote": "localhost:8080/receive/heart",
"httpOtaResultRemote": "localhost:8080/receive/ota",
"httpUplinkRemote": "localhost:8080/receive/uplink",
"httpNeedVerify":0
},
"pushType": 0,
"status": 1,
"subProductDocIds": [
"5ff59e6350189b67bf49cc08"
]
}
响应
{
"code": "8001",
"msg": "操作成功",
"data": {
"id": "601f445c1cf43b639837cfe2",
"appSecret": "2B5248825C0470FA1B6CF9EAAF02F491",
"status": "启用",
"appName": "apiHttp智能钓鱼竿子推送应用3",
"createAt": "2021-02-07 09:37:32",
"subProductDocIds": [
"601ba0f9fc73a85454cdae20"
],
"subProductNames": [
"api添加产品测试"
],
"pushType": "HTTP",
"httpPushInfo": {
"httpUplinkRemote": "localhost:8080/receive/uplink",
"httpHeartBeatRemote": "localhost:8080/receive/heart",
"httpConnectRemote": "localhost:8080/receive/conn",
"httpOtaResultRemote": "localhost:8080/receive/ota",
"httpNeedVerify": 0
}
}
}
2 rabbitmq类型推送
{
"appName": "智能钓鱼竿子推送应用",
"rabbitMqPushInfo": {
"rabbitAdmin": "iotTest",
"rabbitBroker": "106.15.251.107",
"rabbitExchangePrefix": "any",
"rabbitPassword": "iotTest",
"rabbitPort": 5672,
"rabbitVHost": "xiot"
},
"pushType": 2,
"status": 1,
"subProductDocIds": [
"5ff59e6350189b67bf49cc08"
]
}
响应
{
"code": "8001",
"msg": "操作成功",
"data": {
"id": "601f44a41cf43b639837cfe3",
"appSecret": "6A02638ABFDC4EE57D15EBE5F1BD2BBC",
"status": "启用",
"appName": "apiRabbit智能钓鱼竿子推送应用",
"createAt": "2021-02-07 09:38:44",
"subProductDocIds": [
"601ba0f9fc73a85454cdae20"
],
"subProductNames": [
"api添加产品测试"
],
"pushType": "RABBITMQ",
"rabbitMqPushInfo": {
"rabbitBroker": "106.15.251.107",
"rabbitPort": 5672,
"rabbitAdmin": "iotTest",
"rabbitPassword": "iotTest",
"rabbitVHost": "xiot",
"rabbitUplinkExchange": "any-app-data",
"rabbitConnectExchange": "any-connect",
"rabbitHeartBeatExchange": "any-heartbeat",
"rabbitOtaResultExchange": "any-ota-result",
"rabbitExchangePrefix": "any",
"pushDataFormat": "JSON"
}
}
}
3 mqtt类型推送
{
"appName": "智能电动车mqtt推送",
"mqttPushInfo": {
"mqttAdmin": "admin",
"mqttBroker": "tcp://106.15.251.107:1883",
"mqttPassword": "chengw",
"mqttPort": 1883
},
"pushDataFormat": 1,
"pushType": 1,
"status": 1,
"subProductDocIds": [
"5ff59e6350189b67bf49cc08"
]
}
响应
{
"code": "8001",
"msg": "操作成功",
"data": {
"id": "601f44dd1cf43b639837cfe4",
"appSecret": "3FD1F8F6EB3423CA3F10BD9C359414B5",
"status": "启用",
"appName": "apiMqtt智能钓鱼竿子推送应dd用",
"createAt": "2021-02-07 09:39:41",
"subProductDocIds": [
"601ba0f9fc73a85454cdae20"
],
"subProductNames": [
"api添加产品测试"
],
"pushType": "MQTT",
"mqttPushInfo": {
"mqttBroker": "tcp://106.15.251.107:1883",
"mqttPort": 1883,
"mqttAdmin": "admin",
"mqttPassword": "chengw",
"mqttQos": 2,
"mqttUplinkTopic": "jTKgcDTFENwYHlYGtprM/app-data",
"mqttConnectTopic": "jTKgcDTFENwYHlYGtprM/connect",
"mqttHeartBeatTopic": "jTKgcDTFENwYHlYGtprM/heartbeat",
"mqttOtaResultTopic": "jTKgcDTFENwYHlYGtprM/ota-result",
"pushDataFormat": "JSON"
}
}
}
错误码
code | code中文描述 | 详细信息 | 处理建议 |
---|---|---|---|
4102 | 请求参数有误 | 无 | 请检查httpPushInfo/mqttPushInfo/rabbitMqPushInfo内属性是否全部填充,格式格式是否正确 |
4301 | 产品不存在 | 无 | 请检查subProductDocIds参数是否正确 |
4501 | 无法连接到您的推送地址 | 无 | 请检查mqttPushInfo/rabbitMqPushInfo地址,账号,密码是否正确,注:http不判断地址是否正确 |
删除推送应用
接口名称: 删除推送应用
接口描述: 删除推送应用
请求地址: /api/senthink/aep/openApi/pushApp/v1/delete
传参方式:POST
备注: 无
请求参数
Headers:
参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
---|---|---|---|---|
Content-Type | application/json | 是 |
Body:
名称 | 类型 | 是否必须 | 备注 | 其他信息 |
---|---|---|---|---|
id | string | 必须 | 应用id |
返回数据
名称 | 类型 | 备注 | 其他信息 |
---|---|---|---|
code | string | 响应码 | |
data | object | 响应数据 | **备注:** 响应数据 |
msg | string | 响应描述 |
请求示例
{
"id": "601bb356112352169e31a57c"
}
响应示例
{
"code": "8001",
"msg": "操作成功",
"data": "操作成功"
}
错误码
code | code中文描述 | 详细信息 | 处理建议 |
---|---|---|---|
4503 | 推送应用不存在 | 无 | 请检查参数是否正确 |
编辑推送应用
接口名称: 编辑推送应用
接口描述: 编辑推送应用
请求地址: /api/senthink/aep/openApi/pushApp/v1/edit
传参方式:POST
备注: 无
请求参数
Headers:
参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
---|---|---|---|---|
Content-Type | application/json | 是 |
Body:
名称 | 类型 | 是否必须 | 备注 | 其他信息 |
---|---|---|---|---|
id | string | 必须 | 应用id | |
appName | string | 非必须 | 应用名称 | |
httpPushInfo | object | 非必须 | http推送详情 | **备注:** http推送详情 |
mqttPushInfo | object | 非必须 | mqtt 推送详情 | **备注:** mqtt 推送详情 |
rabbitMqPushInfo | object | 非必须 | rabbitmq推送详情 | **备注:** rabbitmq推送详情 |
subProductDocIds | string [] | 非必须 | 关联产品的唯一id | **item 类型:** string |
httpPushInfo的结构:
名称 | 类型 | 是否必须 | 备注 | 其他信息 |
---|---|---|---|---|
httpConnectRemote | string | 必须 | 设备心跳消息推送URL | |
httpHeartBeatRemote | string | 必须 | 设备上线/掉线推送URL | |
httpNeedVerify | integer | 必须 | 是否校验0不校验1校验 | |
httpOtaResultRemote | string | 必须 | OTA升级结果推送URL | |
httpUplinkRemote | string | 必须 | 上行应用数据推送URL |
mqttPushInfo结构:
名称 | 类型 | 是否必须 | 备注 | 其他信息 |
---|---|---|---|---|
mqttAdmin | string | 必须 | 用于推送的MQTT用户 | |
mqttBroker | string | 必须 | 目的MQTT服务器地址 | |
mqttPassword | string | 必须 | 用于推送的MQTT密码 | |
mqttPort | integer | 必须 | 目的MQTT服务器端口 | |
mqttUplinkTopic | string | 必须 | mqtt上行数据Topic | |
mqttConnectTopic | string | 必须 | mqtt连接类消息Topic | |
mqttHeartBeatTopic | string | 必须 | mqtt心跳类消息Topic | |
mqttOtaResultTopic | string | 必须 | mqttOta升级结果通知类消息Topic |
rabbitmqPushInfo结构:
名称 | 类型 | 是否必须 | 备注 | 其他信息 |
---|---|---|---|---|
rabbitAdmin | string | 必须 | RabbitMq用户名 | |
rabbitExchangePrefix | string | 必须 | 上行应用数据推送Exchange | |
rabbitPassword | string | 必须 | 用于推送的RabbitMq密码 | |
rabbitBroker | string | 必须 | 目的RabbitMq服务器地址 | |
rabbitPort | integer | 必须 | 目的RabbitMq服务器端口 | |
rabbitVHost | string | 必须 | 用于推送的RabbitMq虚拟主机 | |
rabbitUplinkExchange | string | 必须 | rabbitmq上行消息交换机 | |
rabbitConnectExchange | string | 必须 | rabbitmq连接类消息交换机 | |
rabbitHeartBeatExchange | string | 必须 | rabbitmq心跳消息交换机 | |
rabbitOtaResultExchange | string | 必须 | rabbitmqOta升级结果通知交换机 |
返回数据
名称 | 类型 | 备注 | 其他信息 |
---|---|---|---|
code | string | 响应码 | |
data | object | 响应数据 | **备注:** 响应数据 |
msg | string | 响应描述 |
请求示例
编辑http推送应用
{
"id": "601bbdb339fa955d3accf378",
"appName": "智能电动自行车http推送",
"httpPushInfo": {
"httpConnectRemote": "localhost:8080/receive/conn",
"httpHeartBeatRemote": "localhost:8080/receive/heart",
"httpOtaResultRemote": "localhost:8080/receive/ota",
"httpUplinkRemote": "localhost:8080/receive/uplink",
"httpNeedVerify":0
},
"pushDataFormat": 0,
"pushType": 0,
"subProductDocIds": [
"601ba0f9fc73a85454cdae20"
]
}
编辑rabbitmq 推送
请求示例
{
"id": "601bbd7639fa955d3accf377",
"appName": "智能电动自行车rabbitmq推送",
"rabbitMqPushInfo": {
"rabbitAdmin": "xiotAdmin",
"rabbitBroker": "localhost",
"rabbitExchangePrefix": "push-exchange",
"rabbitPassword": "xiotPassword",
"rabbitPort": 5672,
"rabbitVHost": "xiot"
},
"pushDataFormat": 1,
"pushType": 2,
"status": 1,
"subProductDocIds": [
"601ba0f9fc73a85454cdae20"
]
}
编辑mqtt #### 请求示例
{
"id": "601bbd7639fa955d3accf377",
"appName": "智能电动自行车mqtt推送",
"rabbitMqPushInfo": {
"rabbitAdmin": "iotTest",
"rabbitBroker": "106.15.251.107",
"rabbitExchangePrefix": "any1",
"rabbitPassword": "iotTest",
"rabbitPort": 5672,
"rabbitVHost": "xiot",
"rabbitUplinkExchange": "any-app-data",
"rabbitConnectExchange": "any-connect",
"rabbitHeartBeatExchange": "any-heartbeat",
"rabbitOtaResultExchange": "any-ota-result"
},
"pushDataFormat": 1,
"pushType": 2,
"status": 1,
"subProductDocIds": [
"601ba0f9fc73a85454cdae20"
]
}
响应示例
{
"code": "8001",
"msg": "操作成功",
"data": "操作成功"
}
错误码
code | code中文描述 | 详细信息 | 处理建议 |
---|---|---|---|
4503 | 推送应用不存在 | 无 | 请检查参数id是否正确 |
4102 | 请求参数有误 | 无 | 请检查httpPushInfo/mqttPushInfo/rabbitMqPushInfo内属性是否全部填充,格式格式是否正确 |
4301 | 产品不存在 | 无 | 请检查subProductDocIds参数是否正确 |
4501 | 无法连接到您的推送地址 | 无 | 请检查mqttPushInfo/rabbitMqPushInfo地址,账号,密码是否正确,注:http不判断地址是否正确 |
查询推送应用
接口名称: 查询推送应用 接口描述: 查询推送应用
请求地址: /api/senthink/aep/openApi/pushApp/v1/query 传参方式:POST
备注: 无
请求参数
Headers:
参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
---|---|---|---|---|
Content-Type | application/json | 是 |
Body:
名称 | 类型 | 是否必须 | 备注 | 其他信息 |
---|---|---|---|---|
id | string | 必须 | 推送应用id |
返回数据
名称 | 类型 | 备注 | 其他信息 |
---|---|---|---|
code | string | 响应码 | |
data | object | ||
msg | string | 响应描述 |
data的数据结构如下:
名称 | 类型 | 备注 | 其他信息 |
---|---|---|---|
id | string | 应用id(兼数据库id) | |
appName | string | 应用名称 | |
appSecret | string | 应用secret | |
companyId | string | ||
createAt | string | 创建时间 | yyyy-MM-dd HH:mm:ss |
httpPushInfo | object | ||
mqttPushInfo | object | ||
pushDataFormat | integer | 推送消息格式,0-protoBuf,1-json | |
pushType | integer | 推送类型,0-http,1-mqtt,2-rabbitmq | |
rabbitMqPushInfo | object | ||
status | integer | 应用是否启用,0 禁用 1 启用 -1 删除 | |
subProductDocIds | string [] | 关联产品的唯一id | |
subProductNames | string [] | 关联产品的名称 |
httpPushInfo的结构:
名称 | 类型 | 备注 | 其他信息 |
---|---|---|---|
httpConnectRemote | string | 设备心跳消息推送URL | |
httpHeartBeatRemote | string | 设备上线/掉线推送URL | |
httpNeedVerify | integer | 是否校验 | |
httpOtaResultRemote | string | OTA升级结果推送URL | |
httpUplinkRemote | string | 上行应用数据推送URL |
mqttPushInfo结构:
名称 | 类型 | 备注 | 其他信息 |
---|---|---|---|
mqttAdmin | string | 用于推送的MQTT用户 | |
mqttBroker | string | 目的MQTT服务器地址 | |
mqttPassword | string | 用于推送的MQTT密码 | |
mqttPort | integer | 目的MQTT服务器端口 | |
mqttUplinkTopic | string | mqtt上行数据Topic | |
mqttConnectTopic | string | mqtt连接类消息Topic | |
mqttHeartBeatTopic | string | mqtt心跳类消息Topic | |
mqttOtaResultTopic | string | mqttOta升级结果通知类消息Topic |
rabbitmqPushInfo结构:
名称 | 类型 | 备注 | 其他信息 |
---|---|---|---|
rabbitAdmin | string | RabbitMq用户名 | |
rabbitExchangePrefix | string | 上行应用数据推送Exchange | |
rabbitPassword | string | 用于推送的RabbitMq密码 | |
rabbitBroker | string | 目的RabbitMq服务器地址 | |
rabbitPort | integer | 目的RabbitMq服务器端口 | |
rabbitVHost | string | 用于推送的RabbitMq虚拟主机 | |
rabbitUplinkExchange | string | rabbitmq上行消息交换机 | |
rabbitConnectExchange | string | rabbitmq连接类消息交换机 | |
rabbitHeartBeatExchange | string | rabbitmq心跳消息交换机 | |
rabbitOtaResultExchange | string | rabbitmqOta升级结果通知交换机 |
请求示例
{
"id": "601bbdba39fa955d3accf379"
}
响应示例
{
"code": "8001",
"msg": "操作成功",
"data": {
"id": "601bbdba39fa955d3accf379",
"appSecret": "04886D03DF99B7CFF9A70C48A0AFD943",
"companyId": "EEF63A10",
"status": 1,
"appName": "智能电动车mqtt推送",
"createAt": "2021-02-04 17:26:18",
"subProductDocIds": [
"601ba0f9fc73a85454cdae20"
],
"subProductNames": [
"智能电动车"
],
"pushType": 1,
"pushDataFormat": 1,
"httpPushInfo": null,
"mqttPushInfo": {
"mqttBroker": "tcp://localhost:1883",
"mqttPort": 1883,
"mqttAdmin": "admin",
"mqttPassword": "xxxx",
"mqttQos": 2,
"mqttUplinkTopic": "uplink",
"mqttConnectTopic": "connect",
"mqttHeartBeatTopic": "heartbeat",
"mqttOtaResultTopic": "otaResult"
},
"rabbitMqPushInfo": null
}
}
错误码
code | code中文描述 | 详细信息 | 处理建议 |
---|---|---|---|
4503 | 推送应用不存在 | 无 | 请检查参数id是否正确 |
推送应用分页查询
接口名称: 推送应用分页查询 接口描述: 推送应用分页查询 请求地址: /api/senthink/aep/openApi/pushApp/v1/getByPage 传参方式:POST
备注: 无
请求参数
Headers:
参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
---|---|---|---|---|
Content-Type | application/json | 是 |
Body:
名称 | 类型 | 是否必须 | 备注 | 其他信息 |
---|---|---|---|---|
page | integer | 非必须 | 页码,默认1 | |
pageSize | integer | 非必须 | 页大小,默认10 | |
search | string | 非必须 | appName 模糊查询 |
返回数据
名称 | 类型 | 备注 | 其他信息 |
---|---|---|---|
code | string | 响应码 | |
data | object | ||
msg | string | 响应描述 |
data:
名称 | 类型 | 备注 | 其他信息 |
---|---|---|---|
List<PushAppInfo> | string | 应用列表 | |
pages | integer | 总页数 | |
current | integer | 当前页 | |
size | integer | 页大小 | yyyy-MM-dd HH:mm:ss |
total | integer | 总条数 |
PushAppInfo 结构如下
名称 | 类型 | 备注 | 其他信息 |
---|---|---|---|
id | string | 应用id(兼数据库id) | |
appName | string | 应用名称 | |
appSecret | string | 应用secret | |
companyId | string | ||
createAt | string | 创建时间 | **format:** yyyy-MM-dd HH:mm:ss |
httpPushInfo | object | ||
mqttPushInfo | object | ||
pushDataFormat | integer | 推送消息格式,0-protoBuf,1-json | |
pushType | integer | 推送类型,0-http,1-mqtt,2-rabbitmq | |
rabbitMqPushInfo | object | ||
status | integer | 应用是否启用,0 禁用 1 启用 -1 删除 | |
subProductDocIds | string [] | 关联产品的唯一id | |
subProductNames | string [] | 关联产品的名称 |
httpPushInfo/mqttPushInfo/rabbitMqPushInfo 参考推送应用详情
设备管理
添加设备
接口名称: 添加设备 接口描述: 添加设备
请求地址: /api/senthink/aep/openApi/nodes/v1/add 传参方式:POST
备注: 无
请求参数
Headers:
参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
---|---|---|---|---|
Content-Type | application/json | 是 |
Body:
名称 | 类型 | 是否必须 | 备注 | 其他信息 |
---|---|---|---|---|
deviceName | string | 非必须 | 设备名称 | |
nodeEui | string | 必须 | 智能设备的设备号 | |
productDocId | string | 必须 | 产品唯一id |
返回数据
名称 | 类型 | 备注 | 其他信息 |
---|---|---|---|
code | string | 响应码 | |
data | object | ||
msg | string | 响应描述 |
data 的数据结构如下
名称 | 类型 | 备注 | 其他信息 |
---|---|---|---|
id | string | 设备唯一id | |
mqttAccount | object[] | mqtt开放协议设备的账户信息 | |
nodeEui | string | 设备编号,厂商自定义 | 小写字母,大写字母,数字,长度4-32 |
deviceSecret | string | 设备Secret | |
openID | string | 厂商id | |
productID | string | 产品标识id | |
productKey | string | 产品key |
请求示例
{
"deviceName": "智能电动车001",
"nodeEui": "123456456222010",
"productDocId": "601ba0f9fc73a85454cdae20"
}
响应示例
{
"code": "8001",
"msg": "操作成功",
"data": {
"id": "61542f256d6429794f3ec4b5",
"nodeEui": "123456456222012",
"deviceSecret": "D9A89F2591C52A94D55E685DA2195D90",
"openID": "3806E26C",
"productID": "66E6128D",
"productKey": "FC10402C55B1CA13A69B907128E4DFFD",
"mqttAccount": {
"transUsername": "3806E26C-66E6128D-123456456222012",
"transPassword": "D9A89F2591C52A94D55E685DA2195D90",
"authUsername": null,
"authPassword": null
}
}
}
错误码
code | code中文描述 | 详细信息 | 处理建议 |
---|---|---|---|
4405 | 设备数超上限,请联系管理员处理 | 无 | 请联系平台管理员处理 |
4409 | 设备号已存在 | 无 | 请更换设备号 |
4301 | 产品不存在 | 无 | 请检查productDocId参数 |
4421 | 电信云对接设备ID格式不正确 | 必须为15位数字且全球唯一 | 请检查设备ID的格式 |
删除设备
接口名称: 查询推送应用 接口描述: 查询推送应用
请求地址: /api/senthink/aep/openApi/nodes/v1/delete 传参方式:POST
备注: 无
请求参数
Headers:
参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
---|---|---|---|---|
Content-Type | application/json | 是 |
Body:
名称 | 类型 | 是否必须 | 备注 | 其他信息 |
---|---|---|---|---|
nodeEui | string | 必须 | 设备编号 | |
delCloud | boolean | 否 | 是否删除云云对接对应平台的设备 |
返回数据
名称 | 类型 | 备注 | 其他信息 |
---|---|---|---|
code | string | 响应码 | |
data | boolean | 响应数据 | |
msg | string | 响应描述 |
请求示例
{
"nodeEui": "00197"
}
响应示例
{
"code": "8001",
"msg": "操作成功",
"data": "操作成功"
}
错误码
code | code中文描述 | 详细信息 | 处理建议 |
---|---|---|---|
4410 | 设备不存在 | 无 | 请检查参数id是否正确 |
编辑设备
接口名称: 查询推送应用 接口描述: 查询推送应用
请求地址: /api/senthink/aep/openApi/nodes/v1/edit 传参方式:POST
备注: 无
请求参数
Headers:
参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
---|---|---|---|---|
Content-Type | application/json | 是 |
Body:
名称 | 类型 | 是否必须 | 备注 | 其他信息 |
---|---|---|---|---|
nodeEui | string | 必须 | 设备编号 | |
deviceName | string | 必须 | 设备名称 |
返回数据
名称 | 类型 | 备注 | 其他信息 |
---|---|---|---|
code | string | 响应码 | |
data | boolean | 响应数据 | |
msg | string | 响应描述 |
请求示例
{
"nodeEui": "00196",
"deviceName": "device_00196"
}
响应示例
{
"code": "8001",
"msg": "操作成功",
"data": "操作成功"
}
错误码
code | code中文描述 | 详细信息 | 处理建议 |
---|---|---|---|
4410 | 设备不存在 | 无 | 请检查参数id是否正确 |
4102 | 请求参数有误 | 无 | 请检查请求参数,设备名称不能为空 |
4001 | 操作失败 | 详细信息 | 请根据详细信息,修改请求参数 |
设备分页查询
接口名称: 查询推送应用 接口描述: 查询推送应用
请求地址: /api/senthink/aep/openApi/nodes/v1/getByPage 传参方式:POST
备注: 无
请求参数
Headers:
参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
---|---|---|---|---|
Content-Type | application/json | 是 |
Query:
参数名称 | 是否必须 | 示例 | 备注 |
---|---|---|---|
connectStatus | 否 | 连接状态,为空或者缺省为所有状态 | |
enableStatus | 否 | 启用状态,为空或者缺省为所有状态 | |
page | 是 | 当前页码 | |
pageSize | 是 | 每页数量 | |
productDocId | 否 | 产品唯一id,为空或者缺省为所有状态 | |
search | 否 | 模糊搜索词 |
Body:
名称 | 类型 | 是否必须 | 备注 | 其他信息 |
---|---|---|---|---|
connectStatus | number | 非必须 | 在线状态 0 离线 1 在线 -1 未激活 | |
enableStatus | number | 非必须 | 0 禁用 1启用 | |
page | number | 非必须 | 当前页 | |
pageSize | number | 非必须 | 页大小 | |
productDocId | string | 非必须 | 设备归属产品标识id | |
search | string | 非必须 | 模糊搜索,匹配字段nodeEui,deviceName |
返回数据
名称 | 类型 | 备注 | 其他信息 |
---|---|---|---|
code | string | 响应码 | |
data | object | 响应数据 | **备注:** 响应数据 |
msg | string | 响应描述 |
data的数据结构为:
名称 | 类型 | 备注 | 其他信息 |
---|---|---|---|
current | integer | 当前页数 | |
pages | integer | 总页数 | |
records | List<NodeInfo> | 查询到的结果集 | |
size | integer | 每页显示数量 | |
total | integer | 数据总数(所有页) |
NodeInfo结构为:
名称 | 类型 | 备注 | 其他信息 |
---|---|---|---|
id | string | 设备唯一id | |
productId | string | 产品标识id | |
productName | string | 产品名称 | |
nodeEui | string | 设备号 | |
deviceName | string | 设备名称 | |
deviceType | integer | 节点类型 0: 设备 1: 网关 | |
deviceSecret | string | 设备密钥 | |
connected | integer | 是否在线 1-在线;0-离线,-1未激活 | |
createAt | string | 创建时间 | yyyy-MM-dd HH:mm:ss |
activeAt | string | 智能设备激活时间 null表示未激活 | yyyy-MM-dd HH:mm:ss |
lastJoinAt | string | 最后一次入网时间 null表示未入网 | |
lastHeartBeatAt | integer | 最后一次心跳时间 null 表示还未上报过心跳 | |
status | string | 状态 0 禁用,1 启用 |
请求示例
无参示例
备注: 请求参数可以为空,则为不带条件查询,默认分页参数,page=1 , pageSize=10
{}
全参示例
{
"connectStatus": -1,
"enableStatus": 1,
"page": 1,
"pageSize": 10,
"productDocId": "601ba0f9fc73a85454cdae20",
"search": "123456456222010"
}
响应示例
{
"code": "8001",
"msg": "操作成功",
"data": {
"connectEnum": {
"0": "离线",
"-1": "未激活",
"1": "在线"
},
"statusEnum": {
"0": "禁用",
"1": "启用"
},
"data": {
"records": [
{
"id": "603716ef1fe38858926853d8",
"productId": "11765942",
"productName": "TCP产品",
"nodeEui": "1234564562",
"deviceName": "api添加设备2 ",
"deviceType": 0,
"deviceSecret": "0140321977C6E44130F59C6AE0EB9EE0",
"connected": -1,
"createAt": "2021-02-25 11:18:07",
"activeAt": null,
"lastJoinAt": null,
"lastHeartbeatAt": null,
"status": 1
},
{
"id": "603716e31fe38858926853d7",
"productId": "11765942",
"productName": "TCP产品",
"nodeEui": "123456456",
"deviceName": "api添加设备 ",
"deviceType": 0,
"deviceSecret": "29984CE9A60F33CEBED6623885AE4428",
"connected": -1,
"createAt": "2021-02-25 11:17:55",
"activeAt": null,
"lastJoinAt": null,
"lastHeartbeatAt": null,
"status": 1
}
],
"pages": 1,
"current": 1,
"size": 10,
"total": 2
},
"nodeTypeEnum": {
"0": "设备",
"1": "网关"
}
}
}
设备详情
接口名称: 查询设备详情 接口描述: 查询设备详情
请求地址: /api/senthink/aep/openApi/nodes/v1/query 传参方式:POST
备注: 无
请求参数
Headers:
参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
---|---|---|---|---|
Content-Type | application/json | 是 |
Body:
名称 | 类型 | 是否必须 | 备注 | 其他信息 |
---|---|---|---|---|
nodeEui | string | 必须 | 设备编号 |
返回数据
名称 | 类型 | 备注 | 其他信息 |
---|---|---|---|
code | string | 响应码 | |
data | object | ||
msg | string | 响应描述 |
data的格式如下:
名称 | 类型 | 备注 | 其他信息 |
---|---|---|---|
accessType | integer | 接入方式0 tcp 1 mqtt | |
activeAt | string | 智能设备激活时间 | yyyy-MM-dd HH:mm:ss |
authType | integer | 认证加密方式,0 AES128 | |
companyId | string | 所属公司id | |
connected | integer | 是否在线 1-在线;0-离线,-1未激活 | |
createAt | string | 创建时间 | yyyy-MM-dd HH:mm:ss |
ctwingProductId | string | 电信Ctwing平台产品Id | |
ctwingMasterKey | string | 电信Ctwing平台产品MasterKey | |
ctwingAppId | string | 电信Ctwing平台产品appId | |
ctwingAppKey | string | 电信Ctwing平台产品 appKey | |
deviceName | string | 设备名称 | |
deviceSecret | string | 设备密钥 | |
deviceType | integer | 节点类型 0: 设备 1: 网关 | |
encrypted | integer | 是否加密 0 不加密 1 加密 | |
hardVer | string | 硬件版本 | |
id | string | 设备数据库id | |
lastDisconnectAt | string | 智能设备最近一次离线时间 | yyyy-MM-dd HH:mm:ss |
lastHeartbeatAt | string | 智能设备最近一次心跳时间 | yyyy-MM-dd HH:mm:ss |
lastJoinAt | string | 智能设备最近一次入网时间 | yyyy-MM-dd HH:mm:ss |
localLogReport | integer | 本地日志上报使能 ,0禁用,1启用 | |
mqttAccount | object [] | 通信方式为MQTT开放协议的设备的登录 | |
modeId | string | 设备物模型id | |
netType | integer | 网络类型0-2G,1-3G,2-4G,3-5G,4-catOne,5-Nbiot | |
nodeEui | string | 智能设备的设备号 | |
otaType | integer | 设备升级方式 0: tcp 1: http | |
online | bool | 设备是否在线 true-在线;false-离线 | |
payloadFormat | integer | 数据格式, 0透传,1非透传 | |
productDocId | string | 智能设备所属产品的数据库id | |
productId | string | 智能设备所属产品的产品标识id | |
productKey | string | 智能设备所属产品的产品ProductKey | |
productName | string | 产品名称 | |
protocol | integer | 通信协议,0TCP,1mqtt,2mqtt开放协议,3云云对接 | |
securityType | integer | 安全类型 0 一型一密免注册 1 一型一密预注册 2 一机一密预注册 | |
sessionKey | string | 智能设备的sessionKey:用于对应用数据进行加密解密 | |
softVer | string | 软件版本 | |
status | integer | 设备使能,0禁用,1启用 | |
topic | object [] | 通信方式为MQTT的设备的Topic信息 | |
desc | string | 描述 | |
function | string | 功能 | |
permission | integer | 操作权限,0发布,1订阅 | |
topic | string | topic | |
uniqueId | string | 设备平台id(仅用于MQTT设备) | |
versionReportAt | string | 版本上报时间 | yyyy-MM-dd HH:mm:ss |
groupPoList | object [] | 设备分组信息 | |
gatewayProtocol | integer | 网关接入协议0 Zigbee 1 Lora 2 自定义 | |
gatewayInfo | object [] | 接入网关信息 | |
upNodeId | string | 子设备的网关设备id | |
sessionKey | string | 智能设备的session:用于对应用数据进行加密解密 | |
relationTime | date | 创建关联时间 | |
relationState | integer | 关联状态,0未关联,1已关联,2解除中 |
请求示例
{
"nodeEui": "0000005"
}
响应示例
{
"code": "8001",
"msg": "操作成功",
"data": {
"id": "601bd344ae7172378618130c",
"productDocId": "601ba0f9fc73a85454cdae20",
"productId": "0C9ACD5E",
"productKey": "F9D9F610E9AE28267CA265BA74EDF562",
"nodeEui": "123456456222010",
"deviceName": "智能电动车001",
"uniqueId": "9D56DE0D216A4AA38A550900302DEA35",
"deviceSecret": "EDE39469BFBD5D53B1DDF3A5A952DB9C",
"companyId": "EEF63A10",
"connected": -1,
"activeAt": null,
"lastJoinAt": null,
"lastHeartbeatAt": null,
"lastDisconnectAt": null,
"status": 1,
"localLogReport": null,
"createAt": "2021-02-04 18:58:12",
"sessionKey": null,
"productName": "智能电动车",
"accessType": 1,
"netType": 1,
"protocol": 1,
"deviceType": 0,
"securityType": 0,
"encrypted": 0,
"authType": 0,
"payloadFormat": 0,
"topic": [
{
"function": "认证",
"topic": "/sys/device/auth",
"permission": 0,
"desc": "用于设备认证"
},
{
"function": "入网",
"topic": "/sys/device/join",
"permission": 0,
"desc": "用于设备入网"
},
{
"function": "心跳",
"topic": "/sys/EEF63A10/0C9ACD5E/123456456222010/heartbeat",
"permission": 0,
"desc": "用于心跳上报"
},
{
"function": "上报",
"topic": "/sys/EEF63A10/0C9ACD5E/123456456222010/uplink",
"permission": 0,
"desc": "用于数据上报"
},
{
"function": "下行",
"topic": "/sys/EEF63A10/0C9ACD5E/123456456222010/downlink",
"permission": 1,
"desc": "接收下行指令"
}
],
"hardVer": null,
"softVer": null,
"versionReportAt": null,
"otaType": null,
"mqttAccount": {
"transUsername": "3806E26C-66E6128D-123456789",
"transPassword": "1F5E5812FC56076ADC135827E07CE503",
"authUsername": null,
"authPassword": null
},
"modeId": null,
"ctwingProductId": null,
"ctwingMasterKey": null,
"ctwingAppId": null,
"ctwingAppKey": null,
"ctwingAppSecret": null,
"online": false
}
}
错误码
code | code中文描述 | 详细信息 | 处理建议 |
---|---|---|---|
4410 | 设备不存在 | 无 | 请检查参数id是否正确 |
透传命令下发
接口名称: 透传命令下发
接口描述: 仅支持透传(包括普通的透传和自定义Topic透传命令下发),物模型的属性设置、属性查询、服务调用都不走该接口逻辑。
请求地址: /api/senthink/aep/openApi/nodes/v1/instruct
传参方式:POST
备注: 无
请求参数
Headers:
参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
---|---|---|---|---|
Content-Type | application/json | 是 |
Body:
名称 | 类型 | 是否必须 | 备注 | 其他信息 |
---|---|---|---|---|
nodeEui | string | 必须 | 设备号 | |
debugType | integer | 必须 | 调试类型:0-普通透传 1-自定义Topic下发 | |
instruction | string | 必须 | 下发命令内容 | |
instructionType | integer | 非必须 | 0:十六进制,1:字符串 | |
topic | string | 非必须 | 自定义Topic |
返回数据
名称 | 类型 | 备注 | 其他信息 |
---|---|---|---|
code | string | 响应码 | |
data | boolean | 响应数据 | |
msg | string | 响应描述 |
请求示例
{
"nodeEui": "1000001",
"instruction": "FFFF",
"instructionType": 0,
"debugType": 0
}
响应示例
{
"code": "8001",
"msg": "操作成功",
"data": "操作成功"
}
错误码
code | code中文描述 | 详细信息 | 处理建议 |
---|---|---|---|
4001 | 操作失败 | 详细信息 | 请根据错误信息检查输入参数 |
4410 | 设备不存在 | 请检查nodeEui参数 | |
4414 | 设备不在线 | 设备不在线 | |
4413 | 设备已经被禁用 | 设备已经被禁用 | |
4422 | 参数校验失败 | 建议检查参数并重试 |
属性设置
接口名称: 属性设置 接口描述: 当产品为物模型产品时,下发指令设置产品属性,调用前提,产品已定义物模型,且设置的属性为可写可读属性
请求地址: /api/senthink/aep/openApi/model/v1/propertySet 传参方式:POST
备注: 无
请求参数
Headers:
参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
---|---|---|---|---|
Content-Type | application/json | 是 |
Body:
名称 | 类型 | 是否必须 | 备注 | 其他信息 |
---|---|---|---|---|
nodeEui | string | 必须 | 设备编号 | |
identify | string | 必须 | 属性标识 | |
value | string | 必须 | 设置值 |
返回数据
名称 | 类型 | 备注 | 其他信息 |
---|---|---|---|
code | string | 响应码 | |
data | boolean | 响应数据 | |
msg | string | 响应描述 |
请求示例
{
"nodeEui": "00196",
"identify": "humidity",
"value": "44"
}
响应示例
{
"code": "8001",
"msg": "操作成功",
"data": true
}
错误码
code | code中文描述 | 详细信息 | 处理建议 |
---|---|---|---|
4001 | 操作失败 | 详细信息 | 请根据错误信息检查输入参数 |
4414 | 设备不在线 | 设备不在线 |
属性查询
接口名称: 属性设置 接口描述: 当产品为物模型产品时,下发指令查询产品属性,调用前提,产品已定义物模型,且查询的属性已定义
请求地址: /api/senthink/aep/openApi/model/v1/propertyAsk 传参方式:POST
备注: 设备收到平台下发属性查询指令后应该通过属性上报属性
请求参数
Headers:
参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
---|---|---|---|---|
Content-Type | application/json | 是 |
Body:
名称 | 类型 | 是否必须 | 备注 | 其他信息 |
---|---|---|---|---|
nodeEui | string | 必须 | 设备编号 | |
identify | string | 必须 | 属性标识 |
返回数据
名称 | 类型 | 备注 | 其他信息 |
---|---|---|---|
code | string | 响应码 | |
data | boolean | 响应数据 | |
msg | string | 响应描述 |
请求示例
{
"nodeEui": "00196",
"identify": "humidity"
}
响应示例
{
"code": "8001",
"msg": "操作成功",
"data": true
}
错误码
code | code中文描述 | 详细信息 | 处理建议 |
---|---|---|---|
4001 | 操作失败 | 详细信息 | 请根据错误信息检查输入参数 |
4414 | 设备不在线 | 设备不在线 |
服务调用
接口名称: 服务调用 接口描述: 当产品为物模型产品时,可以通过服务调用来进行指令下发,服务调用分为同步调用和异步条用,其返回结果相应不同,异步结果立即返回,同步调用其结果会在10s内返回,如果10s后才返回结果,则返回结果和异步调用结果一致,调用前提,产品已定义物模型,并且调用的服务标识和参数和定义的一致
请求地址: /api/senthink/aep/openApi/model/v1/serviceCall
传参方式:POST
备注: 无
请求参数
Headers:
参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
---|---|---|---|---|
Content-Type | application/json | 是 |
Body:
名称 | 类型 | 是否必须 | 备注 | 其他信息 |
---|---|---|---|---|
nodeEui | string | 必须 | 设备编号 | |
identify | string | 必须 | 属性标识 | |
value | string | 必须 | 服务输入参数,json格式字符串,和定义服务的输入参数一致 | 例:"{\"on\":1}" |
返回数据
名称 | 类型 | 备注 | 其他信息 |
---|---|---|---|
code | string | 响应码 | |
data | boolean | 响应数据 | |
msg | string | 响应描述 |
请求示例
{
"nodeEui": "00196",
"identify": "sum",
"value": "{"a":28,"b": 28}"
}
响应示例
同步结果:
{
"code": "8001",
"msg": "操作成功",
"data": true
}
异步结果:
{
"code": "8001",
"msg": "操作成功",
"data": {
"outputData": {
"Result": "Success"
},
"messageId": 1251017933
}
}
错误码
code | code中文描述 | 详细信息 | 处理建议 |
---|---|---|---|
4001 | 操作失败 | 详细信息 | 请根据错误信息检查输入参数 |
4414 | 设备不在线 | 设备不在线 |
自定义Topic下发(透传)
接口名称:自定义Topic下发指令
接口描述:也是透传下发,和普通透传下发的区别是该方式使用的是自定义的Topic进行透传
请求地址:/api/senthink/aep/openApi/nodes/v1/custom/instruct
传参方式:POST
备注:要提前定义好Topic才能使用
请求参数
Headers:
参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
---|---|---|---|---|
Content-Type | application/json | 是 |
Body:
名称 | 类型 | 是否必须 | 备注 | 其他信息 |
---|---|---|---|---|
nodeEui | string | 必须 | 设备编号 | |
topic | string | 必须 | 自定义Topic | |
instruction | string | 必须 | 指令内容 |
返回数据
名称 | 类型 | 备注 | 其他信息 |
---|---|---|---|
code | string | 响应码 | |
data | boolean | 响应数据 | |
msg | string | 响应描述 |
请求示例
{
"nodeEui": "00196",
"topic": "/sys/sub/520CFD08/B63131F8/00196/custom/lei_test",
"instruction": "123!"
}
响应示例
{
"code": "8001",
"msg": "操作成功",
"data": "操作成功"
}
批量注册设备
接口名称:批量注册设备
接口描述:无
请求地址:/api/senthink/aep/openApi/nodes/v1/batchAdd
传参方式:POST
备注:无
请求参数
Headers:
参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
---|---|---|---|---|
Content-Type | application/json | 是 |
Body:
名称 | 类型 | 是否必须 | 备注 | 其他信息 |
---|---|---|---|---|
productId | string | 必须 | 产品Id | |
nodes | object[] | 必须 | 设备信息 |
参数nodes结构如下:
参数名 | 类型 | 是否必须 | 备注 |
---|---|---|---|
deviceEui | string | 是 | 设备号 |
deviceName | string | 否 | 备注名称 |
返回数据
名称 | 类型 | 备注 | 其他信息 |
---|---|---|---|
code | string | 响应码 | |
data | boolean | 响应数据 | |
msg | string | 响应描述 |
请求示例
{
"productId": "4D163A46",
"nodes": [
{
"deviceEui": "M10000004",
"deviceName": ""
},
{
"deviceEui": "M12",
"deviceName": ""
},
{
"deviceEui": "",
"deviceName": ""
}
]
}
响应示例
{
"code": "8001",
"msg": "操作成功",
"data": {
"successNum": 0,
"failNum": 3,
"certificateKey": null,
"failExcelUrl": null,
"failReasons": [
{
"deviceEui": "",
"deviceName": "",
"failReason": "设备编号缺失",
"code": "4419"
},
{
"deviceEui": "M12",
"deviceName": "",
"failReason": "deviceEui格式非法",
"code": "4400"
},
{
"deviceEui": "M10000004",
"deviceName": "",
"failReason": "设备号已存在",
"code": "4409"
}
]
}
}
查询设备物模型属性列表
接口名称:查询设备物模型属性列表
接口描述:该接口用于查询物模型设备的物模型属性以及当前的属性值
请求地址:/api/senthink/aep/openApi/model/v1/getPropertyReportList
传参方式:POST
备注:暂无
请求参数
Headers:
参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
---|---|---|---|---|
Content-Type | application/json | 是 | application/json |
Body:
名称 | 类型 | 是否必须 | 备注 |
---|---|---|---|
nodeEui | string | 必须 | 设备号 |
返回数据
名称 | 类型 | 备注 | 其他信息 |
---|---|---|---|
code | string | 响应码 | |
data | object | 响应数据 | |
msg | string | 响应描述 |
请求示例
{
"nodeEui":"41086873905413635700"
}
响应示例
{
"code": "8001",
"msg": "操作成功",
"data": {
"records": [
{
"id": "c67cd258-57bd-45a2-a92c-3511aced3521",
"time": "2022-05-12T03:34:27.436Z",
"companyId": null,
"productId": "910AB0D4",
"nodeEui": null,
"identifier": "BatWorkModeCtl",
"accessMode": "rw",
"name": "电池工作模式切换",
"value": "0000"
}
],
"pages": 1,
"current": 1,
"size": 10,
"searchCount": true,
"total": 0,
"optimizeCount": true,
"offset": 0,
"limit": 2147483647,
"asc": true,
"orderByField": null
}
}
查询设备单个物模型属性
接口名称:查询设备单个物模型属性
接口描述:用于查询设备某个物模型属性的历史上报记录
请求地址:/api/senthink/aep/openApi/model/v1/getPropertyReportSingleList
传参方式:POST
备注:暂无
请求参数
Headers:
参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
---|---|---|---|---|
Content-Type | application/json | 是 | application/json |
Body:
名称 | 类型 | 是否必须 | 备注 |
---|---|---|---|
nodeEui | string | 必须 | 设备号 |
search | string | 必须 | 属性标识 |
返回数据
名称 | 类型 | 备注 | 其他信息 |
---|---|---|---|
code | string | 响应码 | |
data | object | 响应数据 | |
msg | string | 响应描述 |
请求示例
{
"nodeEui":"41086873905413635700",
"search":"socStandard"
}
响应示例
{
"code": "8001",
"msg": "操作成功",
"data": {
"records": [
{
"id": "d83bfc52-5ba1-49e9-810d-54048ca25002",
"time": "2022-05-12T03:34:27.436Z",
"companyId": "FFDEA01F",
"productId": "910AB0D4",
"nodeEui": "41086873905413635700",
"identifier": "socStandard",
"accessMode": "rw",
"name": "soc低电量阈值",
"value": "30"
},
{
"id": "cfc8a81b-ba5b-4c92-96ae-a3263bb05071",
"time": "2022-05-12T03:15:55.715Z",
"companyId": "FFDEA01F",
"productId": "910AB0D4",
"nodeEui": "41086873905413635700",
"identifier": "socStandard",
"accessMode": "rw",
"name": "soc低电量阈值",
"value": "30"
}
],
"pages": 1,
"current": 1,
"size": 10,
"searchCount": true,
"total": 4,
"optimizeCount": true,
"offset": 0,
"limit": 2147483647,
"asc": true,
"orderByField": null
}
}
分页查询服务
接口名称:分页查询服务
接口描述:该接口用于分页查询设备的物模型服务调用历史
请求地址:/api/senthink/aep/openApi/model/v1/getServiceCallList
传参方式:POST
备注:暂无
请求参数
Headers:
参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
---|---|---|---|---|
Content-Type | application/json | 是 | application/json |
Body:
名称 | 类型 | 是否必须 | 备注 |
---|---|---|---|
page | integer | 必须 | 当前页 |
pageSize | integer | 必须 | 每页数据量 |
nodeEui | string | 必须 | 设备号 |
search | string | 非必须 | 服务标识 |
messageIds | array | 非必须 | 服务调用的messageId集合 |
返回数据
名称 | 类型 | 备注 | 其他信息 |
---|---|---|---|
code | string | 响应码 | |
data | object | 响应数据 | |
msg | string | 响应描述 |
请求示例
{
"nodeEui": "009569BC3738",
"page": 1,
"pageSize": 1,
"search": "call_scene"
}
响应示例
{
"code": "8001",
"msg": "操作成功",
"data": {
"records": [
{
"id": "27c0f901-0eca-416a-9290-1f1b68ef5619",
"time": "2022-05-16T06:36:21.931Z",
"companyId": "F192AA50",
"productId": "ED9322C2",
"nodeEui": "009569BC3738",
"identifier": "call_scene",
"name": "场景调用",
"inputData": "{\"index\":\"20000000003\"}",
"ouputData": null
}
],
"pages": 4,
"current": 1,
"size": 10,
"searchCount": true,
"total": 32,
"optimizeCount": true,
"offset": 0,
"limit": 2147483647,
"asc": true,
"orderByField": null
}
}
分页查询事件
接口名称:分页查询事件
接口描述:该接口用于分页查询设备事件上报的历史
请求地址:/api/senthink/aep/openApi/model/v1/getEventReportList
传参方式:POST
备注:暂无
请求参数
Headers:
参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
---|---|---|---|---|
Content-Type | application/json | 是 | application/json |
Body:
名称 | 类型 | 是否必须 | 备注 |
---|---|---|---|
page | integer | 必须 | 当前页 |
pageSize | integer | 必须 | 每页数据量 |
nodeEui | string | 必须 | 设备号 |
search | string | 非必须 | 事件标识 |
返回数据
名称 | 类型 | 备注 | 其他信息 |
---|---|---|---|
code | string | 响应码 | |
data | object | 响应数据 | |
msg | string | 响应描述 |
请求示例
{
"nodeEui": "mqttModelHex2022",
"page": 1,
"pageSize": 1,
"search": "sum"
}
响应示例
{
"code": "8001",
"msg": "操作成功",
"data": {
"data": {
"records": [],
"pages": 1,
"current": 1,
"size": 10,
"searchCount": true,
"total": 0,
"optimizeCount": true,
"offset": 0,
"limit": 2147483647,
"asc": true,
"orderByField": null
},
"optEnum": {
"warn": "告警",
"erro": "紧急",
"info": "普通"
}
}
}
固件管理
添加小固件(表单格式)
接口名称: 添加小固件
接口描述: 添加小固件
请求地址: /api/senthink/aep/openApi/firmware/v1/add
传参方式:POST
备注:
- 添加固件接口,sign值计算方法与通用签名计算方法不同,请参考如何调用API中固件上传签名计算示例
- 该接口适合上传较小固件,大小限制在50MB以内
请求参数
Headers:
参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
---|---|---|---|---|
Content-Type | multipart/form-data; boundary=<calculated when request is sent> | 是 | ||
Content-Length | <calculated when request is sent> | 是 | ||
Host | <calculated when request is sent> | 是 |
form-data参数:
名称 | 类型 | 是否必须 | 备注 | 其他信息 |
---|---|---|---|---|
name | string | 必须 | 固件名称(长度4-30) | |
file | file | 必须 | 固件文件(不限制文件格式,可直接上传固件源文件,若上传.zip格式则需要设备端解压) | |
hardVer | string | 非必须 | 适配硬件版本 | |
softVer | string | 必须 | 固件版本(同一模块下,固件版本不能重复) | |
productId | string | 必须 | 产品标识Id,对应产品详情productId字段 | |
remark | string | 非必须 | 备注 (长度不超过100) | |
module | string | 必须 | 模块标识 | |
signMethod | string | 必须 | 签名算法,目前只支持md5 |
返回数据
名称 | 类型 | 备注 | 其他信息 |
---|---|---|---|
code | string | 响应码 | |
data | object | ||
msg | string | 响应描述 |
data 结构如下
名称 | 类型 | 备注 | 其他信息 |
---|---|---|---|
firmwareId | string | 固件id | |
createAt | string | 上传时间 |
请求示例
参数格式为form-data
参数名 | 参数值 | 是否必须 | 备注 | 其他信息 |
---|---|---|---|---|
name | api测试上传 | 必须 | 固件名称 | |
file | 文件 | 必须 | 固件文件,支持zip格式和.bin格式 | |
hardVer | V1.0.1 | 非必须 | 适配硬件版本 | |
softVer | V1.0.2 | 必须 | 固件版本(同一模块下,固件版本不能重复) | |
productId | 11965942 | 必须 | 产品标识Id,对应产品详情productId字段 | |
remark | 固件上传 | 非必须 | 备注 | |
moduleId | 6180e5a27571341cc90f7bb5 | 必须 | 模块Id(模块详情中返回的id) | |
signMethod | md5 | 必须 | 签名算法,目前只支持md5 |
响应示例
{
"code": "8001",
"msg": "操作成功",
"data": {
"firmwareId": "603735ebee27c95a9c9ed3dd",
"createAt": "2021-02-25 13:30:18"
}
}
错误码
code | code中文描述 | 详细信息 | 处理建议 |
---|---|---|---|
4610 | productId不能为空 | 请检查productId参数 | |
4611 | 固件名称不能为空 | 请检查name参数是否合法 | |
4612 | 固件版本不能为空 | 请检查softVer字段不能为空 | |
4613 | 同名固件已存在,请重新命名固件名称 | 请更换固件名称 | |
4301 | 产品不存在 | 请检查productId参数 | |
4601 | 文件不存在或者为空 | 请检查file参数和固件文件是否合法 | |
4603 | 文件格式不正确 | 请检查固件文件格式只能为.zip 或.bin | |
4620 | 固件名称不合法 | 请检查固件名称name字段格式是否合法 | |
4621 | 固件备注不合法 | 请检查固件备注是否合法 |
获取OSS文件上传STS凭证
接口名称: 获取OSS文件上传STS凭证
接口描述: 对于比较大的固件,考虑到其上传会消耗大量的时间,而造成的用户体验感降低,平台开放接口,授权STS凭证给用户,用户拿着STS凭证即可直接把文件上传到OSS服务器 ,而不经过平台的转发
请求地址: /api/senthink/aep/openApi/oss/v1/fileUpload/getStsCredit
传参方式:POST
备注: STS凭证具有有效期,用户应在有效期内使用STS凭证完成文件上传,否则需要重新获取
请求参数
Headers:
参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
---|---|---|---|---|
Content-Type | application/json | 是 | application/json |
Body:
名称 | 类型 | 是否必须 | 备注 | 其他信息 |
---|---|---|---|---|
type | integer | 必须 | 文件夹类型(1-设备证书存储的目录 2-固件存储的目录 3-设备本地日志存储的目录) |
返回数据
名称 | 类型 | 备注 | 其他信息 |
---|---|---|---|
code | string | 响应码 | |
data | object | 响应数据 | **备注:** 响应数据 |
msg | string | 响应描述 |
data数据结构如下:
类型 | 备注 | 其他信息 | |
---|---|---|---|
endPoint | string | OSS访问域名 | |
accessKeyId | string | OSS秘钥ID | |
accessKeySecret | string | OSS秘钥 | |
stsToken | string | STS凭证 | |
expiation | long | STS凭证有效期 | |
bucket | string | OSS桶 | |
deviceCertificateDir | string | 设备证书存放目录 | |
otaFirmwareDir | string | 固件存放目录 | |
deviceLocalLogDir | string | 设备本地日志存放目录 |
请求示例
{
"type": 3
}
响应示例
{
"code": "8001",
"msg": "操作成功",
"data": {
"endPoint": "oss-cn-zhangjiakou.aliyuncs.com",
"accessKeyId": "STS.NUFecVWgdmnFT2H2RJkQhphp7",
"accessKeySecret": "9kyzn7SxFfAUdEVtNA382GD7vYZJxsYGasoMeaDjiAT8",
"stsToken": "CAISqQJ1q6Ft5B2yfSjIr5bzLtniurhF2qytVhT51lIfZ95En63b1Tz2IHFMeXZuCOkXs/0znGxS7vgTlrxpQppyWFfJd/xr449M8ASnVIzIvsHtDBiObi7iSwapEBfe8JL4foeQFaHFGJqEb1TDiVU8o9/TfimjWFqIKICAjYUdAP0cQgi/a0ghZrJRPRAwkNIGEnHTOP2xSEiI5FDdF011oAFxpHpi4KCkuK2m5wHZkUfxx51fxcz4KYP2aNJ3btUtEYWp0fdqM7HM1jJQ6h5Jsbd3i7ADuxW/54DMUwMLukrabbGMqIAydzUUPPZqR/R2y9HnjuB9t+DpkID69g1AJ+k9UV6EFdj9n5WVQbL0b4phKeyjZSXXsMqGM57uqBMlZm4LhbfZmUbihBQagAFsIFuMU7JdhU7sbKPmLKJDCuE1bpdDmTCl7GaivGpglfNHYIyvYDhxTGUKbnxjRelA/5kKrqq8UbZH5WID03iZXOLSB3TaNDdb9xOrJQqh74bIN08Ym6Cc+AbspiLAVt8sHifbXXa7RoIMQ9s4j37GudtfVLnowTXsr5jdgothmw==",
"expiation": 1639366305000,
"bucket": "test-senthink-xiot",
"deviceCertificateDir": "",
"otaFirmwareDir": "",
"deviceLocalLogDir": "deviceLocalLog"
}
}
使用STS凭证上传大文件示例
- 后端服务接口:
/**
* @param 文件
*/
@PostMapping("/test")
public String testUpload(@RequestBody MultipartFile file) throws IOException {
//OSS域名
String endPoint = "oss-cn-zhangjiakou.aliyuncs.com";
//临时秘钥ID
String accessKeyId = "STS.NUiiET5QNWYg6SmFU8PH19tco";
//临时秘钥
String accessKeySecret = "A6itEMiLHZgMHaBKvbZJKnySTADYLFnj3fd3eu2MKMQ7";
//临时stsToken
String stsToken = "CAISvQJ1q6Ft5B2yfSjIr5bcIv/g2I5v4JuMNHXcolVtXMcd1rHIjTz2IHFMeXZuCOkXs/" +
"0znGxS7vgTlrxpQppyWFfJd/xr449M8ASnVIzIvsHtW2GqZyniSwapEBfe8JL4g4ybJYqvkJ7PBnnAkih" +
"su+qYERypQ12iN7CQlJdjda55dwKkbD1Adp40Qwx5s50iKGf2P/SgOQKI+m3LFxhQpxZbg2Fy4riW6enmvHi" +
"4tlDhzfIPrIncO4Wta9IWXK1ySNCoxud7BOCjmCdb8EpN77wkzv4GqyvKpc3YGFRX/xWHNemR4txoMEg7RNBjS" +
"v8U9qKlyqEm4bSJytms8XsXY7EJCRa4bZu73c7JFNmuMtsEbrvhMxzPqIvebsSq7VJ9MC9CaFsWIYJ/e2USExUpTS" +
"rBOq6g5EB71pRB12sruxqAAUiGNHBhvhUF7FgEBMwNVydwuJ9PHgojndyKlJFnyHkvTxEchEw8mYbVw8a0hf9Bh3HNmkCe" +
"16OIXXDQD0A0IL0bg6Syq0i9wW29/uwjpJEg1CoVfu5lmWE9f9DpzYqizC+/ZWds1NP6m8wKbMvM806LZioRJ2LeKXjKPvrSkmnm";
//OSS桶
String bucket = "test-senthink-xiot";
//文件存储目录
String fileDir = "otaFirmwareDir";
//验证文件不为空
if (file == null || file.isEmpty()) {
return "操作失败:文件为空";
}
//设置协议为https
ClientBuilderConfiguration configuration = new ClientBuilderConfiguration();
configuration.setProtocol(Protocol.HTTPS);
//初始化OSS客户端
OSS oss = new OSSClientBuilder().build(endPoint,
accessKeyId,
accessKeySecret,
stsToken,
configuration);
//文件标识
String fileKey = fileDir + "/" + System.currentTimeMillis() + file.getOriginalFilename();
//上传文件
oss.putObject(bucket,fileKey , new ByteArrayInputStream(file.getBytes()));
//设置文件的访问权限为公共读
oss.setObjectAcl(bucket,fileKey, CannedAccessControlList.PublicRead);
//设置过期时间100年(用户可以按照需求自行设置),
Date expiration = new Date(System.currentTimeMillis() + 60 * 1000L * 60 * 24);
//获取文件的访问地址
String url = oss.generatePresignedUrl(bucket, fileKey, expiration).toString();
return url;
}
- 前端测试:使用postman测试如下
添加大固件(JSON格式)
接口名称: 添加大固件 接口描述: 添加大固件
请求地址: /api/senthink/aep/openApi/firmware/v1/addLargeFirmware
传参方式:POST
备注:
调用该接口保存固件信息时,用户需按顺序完成以下操作:
- 已经调用平台开放的获取STS凭证的接口获取到了STS凭证
- 在凭证有效期内完成固件的上传(阿里云文档地址https://help.aliyun.com/document_detail/84778.html)
PS:流程可以参考平台开放的获取OSS文件上传STS凭证接口
该接口的固件大小限制在200MB以内,在请求该接口保存固件信息时会去OSS服务器上验证文件大小,超过200MB不允许保存,且平台会定时删除OSS上超过200MB的文件
请求参数
Headers:
参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
---|---|---|---|---|
Content-Type | application/json | 是 | ||
Content-Length | <calculated when request is sent> | 是 | ||
Host | <calculated when request is sent> | 是 |
Body:
名称 | 类型 | 是否必须 | 备注 | 其他信息 |
---|---|---|---|---|
name | string | 必须 | 固件名称(长度4-30) | |
module | string | 必须 | 模块标识 | |
hardVer | string | 非必须 | 适配硬件版本 | |
softVer | string | 必须 | 固件版本(同一模块下,固件版本不能重复) | |
productId | string | 必须 | 产品标识Id,对应产品详情productId字段 | |
remark | string | 非必须 | 备注 (长度不超过100) | |
signMethod | string | 必须 | 签名算法,目前只支持md5 | |
path | string | 必须 | 文件的OSS访问地址 | |
fileKey | string | 必须 | 文件的OSS标识 | |
originalFilename | string | 必须 | 文件名 | |
md5 | string | 必须 | 文件的md5值 |
计算文件md5
- 为了保证文件传输过程中的安全性,使用md5校验文件内容是否被篡改
- 文件内容相同的文件,md5值一定相同
- 计算md5方式和工具有很多,这里以Java为例 ,使用jdk自带的类来计算文件的md5值,用户可以自行选择其他计算文件的md5的方式和工具
public static void main(String[] args) throws FileNotFoundException {
File file = new File("文件路径");
FileInputStream inputStream = new FileInputStream(file);
byte[] digest = null;
try {
MessageDigest messageDigest = MessageDigest.getInstance("MD5");
int bufferLength = 8 * 1024;
byte[] buffer = new byte[bufferLength];
int read = inputStream.read(buffer, 0, bufferLength);
while (read > -1) {
messageDigest.update(buffer, 0, read);
read = inputStream.read(buffer, 0, bufferLength);
}
//关闭流
inputStream.close();
digest = messageDigest.digest();
} catch (Exception e) {
throw new RuntimeException(e);
}
String md5 = new BigInteger(1, digest).toString(16);
System.out.println(md5);
}
计算md5示例:
ee1fbecf7b1e8d90642e638a14cf111a
返回数据
名称 | 类型 | 备注 | 其他信息 |
---|---|---|---|
code | string | 响应码 | |
data | object | ||
msg | string | 响应描述 |
请求示例
{
"name": "2021/12/13测试固件",
"productId": "2D8DA198",
"module": "test_lei",
"softVer": "softVer1.0",
"signMethod": "md5",
"path": "https://test-senthink-xiot.oss-cn-zhangjiakou.aliyuncs.com/otaFirmware/test.bin",
"fileKey": "otaFirmware/test.bin",
"originalFilename": "test.bin",
"md5": "2677e2fad59ddbcf3268bb931b8a7b0e"
}
响应示例
{
"code": "8001",
"msg": "操作成功",
"data": {
"firmwareId": "61bd8c9cf369ec56debb8f24",
"createAt": "2021-12-18 15:24:12"
}
}
删除固件
接口名称: 删除固件 接口描述: 删除固件
请求地址: /api/senthink/aep/openApi/firmware/v1/delete 传参方式:POST
备注: 无
请求参数
Headers:
参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
---|---|---|---|---|
Content-Type | application/json | 是 |
Body:
名称 | 类型 | 是否必须 | 备注 | 其他信息 |
---|---|---|---|---|
id | string | 非必须 | 固件id |
返回数据
名称 | 类型 | 备注 | 其他信息 |
---|---|---|---|
code | string | 响应码 | |
data | boolean | 响应数据 | |
msg | string | 响应描述 |
请求示例
{
"id": "600543146c41da741aac23df"
}
响应示例
{
"code": "8001",
"msg": "操作成功",
"data": true
}
错误码
code | code中文描述 | 详细信息 | 处理建议 |
---|---|---|---|
4604 | 固件不存在 | 请检查id参数 |
编辑固件
接口名称: 编辑固件 接口描述: 编辑固件
请求地址: /api/senthink/aep/openApi/firmware/v1/edit 传参方式:POST
备注: 无
请求参数
Headers:
参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
---|---|---|---|---|
Content-Type | multipart/form-data | 是 |
form-data参数:
名称 | 类型 | 是否必须 | 备注 | 其他信息 |
---|---|---|---|---|
id | string | 必须 | 固件id | |
name | string | 非必须 | 固件名称 | |
remark | string | 非必须 | 备注 | |
productId | string | 非必须 | 产品productId | |
file | file | 非必须 | 固件 | |
softVer | string | 非必须 | 固件版本 | |
hardVer | string | 非必须 | 适配硬件版本 |
返回数据
名称 | 类型 | 备注 | 其他信息 |
---|---|---|---|
code | string | 响应码 | |
data | boolean | 响应数据 | |
msg | string | 响应描述 |
请求示例
{
"id": "5feaa128c8334e480490a2ec",
"name": "固件-SC-V1.0.1",
"remark": "智能电动车1.0.1版本固件,添加了电子围栏功能"
}
响应示例
{
"code": "8001",
"msg": "操作成功",
"data": true
}
错误码
code | code中文描述 | 详细信息 | 处理建议 |
---|---|---|---|
4604 | 固件不存在 | 请检查id参数是否正确 | |
4620 | 固件名称不合法 | 请检查固件名称格式是否合法 | |
4621 | 固件备注不合法 | 请检查固件备注是否合法 |
固件分页查询
接口名称: 固件分页查询 接口描述: 固件分页查询 请求地址: /api/senthink/aep/openApi/firmware/v1/getByPage 传参方式:POST
备注: 无
请求参数
Headers:
参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
---|---|---|---|---|
Content-Type | application/json | 是 |
Body:
名称 | 类型 | 是否必须 | 备注 | 其他信息 |
---|---|---|---|---|
productId | string | 非必须 | 产品标识id(3个参数不能同时为空) | |
page | string | 非必须 | 页码(3个参数不能同时为空) | |
pageSize | string | 非必须 | 每页大小(3个参数不能同时为空) |
返回数据
名称 | 类型 | 备注 | 其他信息 |
---|---|---|---|
code | string | 响应码 | |
data | object | 响应数据 | **备注:** 响应数据 |
msg | string | 响应描述 |
data的数据结构为:
名称 | 类型 | 备注 | 其他信息 |
---|---|---|---|
current | integer | 当前页数 | |
pages | integer | 总页数 | |
records | List<FirmwareInfo> | 查询到的结果集 | |
size | integer | 每页显示数量 | |
total | integer | 数据总数(所有页) |
FirmwareInfo 结构如下
名称 | 类型 | 备注 | 其他信息 |
---|---|---|---|
id | string | 固件id | |
name | string | 固件名称 | |
productId | string | 产品标识id | |
productName | string | 产品名称 | |
hardVer | string | 适配硬件版本 | |
softVer | string | 固件版本 | |
signMethod | null | 签名方法 | |
size | number | 大小 | |
remark | string | 说明 | |
md5 | string | md5 | |
path | null | ||
originalFilename | string | 原始固件文件名 | |
fileKey | string | 文件key | |
createAt | string | 创建时间 |
请求示例
{
"page": 1,
"pageSize": 10,
"productId": "11765942"
}
响应示例
{
"code": "8001",
"msg": "操作成功",
"data": {
"records": [
{
"id": "603735ebee27c95a9c9ed3dd",
"name": "api测试上传",
"productId": "11765942",
"productName": "TCP产品",
"hardVer": "V2.0.0",
"softVer": "V1.1.1",
"signMethod": "md5",
"size": 767,
"remark": "api修改固件备注333",
"md5": "61527576c5634030ab82af14baddddf8",
"originalFilename": "cat1_8910_qhq_fota_0129B (2).pack",
"fileKey": "otaFirmware/1614231019118_cat1_8910_qhq_fota_0129B (2).pack",
"createAt": "2021-02-25 13:30:18"
}
],
"pages": 1,
"current": 1,
"size": 3,
"total": 1
}
}
固件详情
接口名称: 固件详情 接口描述: 固件详情
请求地址: /api/senthink/aep/openApi/firmware/v1/query 传参方式:POST
备注: 无
请求参数
Headers:
参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
---|---|---|---|---|
Content-Type | application/json | 是 | application/json |
Body:
名称 | 类型 | 是否必须 | 备注 | 其他信息 |
---|---|---|---|---|
id | string | 必须 | id |
返回数据
名称 | 类型 | 备注 | 其他信息 |
---|---|---|---|
code | string | 响应码 | |
data | object | 响应数据 | **备注:** 响应数据 |
msg | string | 响应描述 |
data的数据结构为:
名称 | 类型 | 备注 | 其他信息 |
---|---|---|---|
id | string | 固件id | |
name | string | 固件名称 | |
productId | string | 产品标识id | |
productName | string | 产品名称 | |
hardVer | string | 适配硬件版本 | |
softVer | string | 固件版本 | |
signMethod | null | 签名方法 | |
size | number | 大小 | |
remark | string | 备注 | |
md5 | string | md5 | |
originalFilename | string | 固件原始文件名称 | |
fileKey | string | 文件key | |
createAt | string | 创建时间 |
请求示例
{
"id": "600543146c41da741aac23df"
}
响应示例
{
"code": "8001",
"msg": "操作成功",
"data": {
"id": "603735ebee27c95a9c9ed3dd",
"name": "api测试上传",
"productId": "11765942",
"productName": "TCP产品",
"hardVer": "V2.0.0",
"softVer": "V1.1.1",
"signMethod": "md5",
"size": 767,
"remark": "api修改固件备注333",
"md5": "61527576c5634030ab82af14baddddf8",
"originalFilename": "cat1_8910_qhq_fota_0129B (2).pack",
"fileKey": "otaFirmware/1614231019118_cat1_8910_qhq_fota_0129B (2).pack",
"createAt": "2021-02-25 13:30:18"
}
}
错误码
code | code中文描述 | 详细信息 | 处理建议 |
---|---|---|---|
4604 | 固件不存在 | 请检查id参数是否正确 |
设备升级管理
创建OtaPlan升级计划
接口名称: 建OtaPlan升级计划 接口描述: OtaPlan表示升级计划,OtaTask表示升级任务,一个OtaPlan下有多个OtaTask
请求地址: /api/senthink/aep/openApi/ota/v1/otaNotify/createOtaPlan/assign 传参方式:POST
备注: 指定设备创建ota升级计划
请求参数
Headers:
参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
---|---|---|---|---|
Content-Type | application/json | 是 | application/json |
Body:
名称 | 类型 | 是否必须 | 备注 | 其他信息 |
---|---|---|---|---|
firmwareId | string | 必须 | 固件文档ID | |
nodes | string [] | 必须 | 待升级的设备NodeEui集合 | |
notifyType | integer | 非必须 | 推送类型(默认立即推送)<br />0:立刻推送<br /> 1:定时推送 | |
startAt | string | 非必须 | 定时推送的开始时间 格式为yyyy-MM-dd HH:mm:ss | |
endAt | string | 非必须 | 定时推送的结束时间 格式为yyyy-MM-dd HH:mm:ss | |
retryInterval | integer | 非必须 | 升级重试间隔(默认不重试)<br /> 0:不重试 <br />1:立即重试<br />10:10分钟后重试<br />30:30分钟后重试<br />60:一小时后重试<br />1440: 1天后重试 | |
retryLimit | integer | 非必须 | 重试次数,retryInterval非0时不可为空<br /> 0:不重试 <br />1:重试1次<br />2:重试2次<br />5:重试5次 | |
overwrite | integer | 非必须 | 是否覆盖升级(默认覆盖) <br /> 0:不覆盖<br />1:覆盖 | |
triggerType | integer | 非必须 | 触发方式(默认设备端触发) <br /> 1:设备端触发 <br />2:云端触发 | |
remark | string | 非必须 | 备注 | |
expireTime | integer | 非必须 | 超时时间在1~1440分钟范围内,不填的话默认就是1440分钟 |
返回数据
名称 | 类型 | 备注 | 其他信息 |
---|---|---|---|
code | string | 响应码 | |
data | boolean | 响应数据 | |
msg | string | 响应描述 |
data结构:
名称 | 类型 | 备注 | 其他信息 |
---|---|---|---|
data | Object | OtaTask的信息,包括文档ID、设备nodeEui、downId和任务的创建结果状态 | |
batchUuid | string | 与OtaPlan唯一对应,后续操作OtaPlan就通过该参数唯一标识一个OtaPlan | |
flag | boolean | 操作结果 |
OtaTask创建结果状态码详情如下:
状态码 | 含义 | 备注 |
---|---|---|
0 | 待推送 | |
1 | 已推送 | |
2 | 升级中 | |
4 | 升级失败 | |
5 | 已取消 | |
-1 | 已删除 |
请求示例
{
"firmwareId": "6156cccbc6958b030881aeac",
"nodes": ["30008","30007","30005","30009"],
"notifyType": 0,
"startAt": "",
"endAt": "",
"retryInterval": 0,
"retryLimit": null,
"overwrite": 0,
"triggerType":1,
"remark": "",
"expireTime": null
}
响应示例
{
"code": "8001",
"msg": "操作成功",
"data": {
"data": [
{
"taskId": "61a0a765f93e045437bea437",
"nodeEui": "MY0000000999",
"downId": "980E8A0F",
"status": 0
},
{
"taskId": "61a0a765f93e045437bea438",
"nodeEui": "MQTT000000111",
"downId": "425EB93E",
"status": 0
}
],
"batchUuid": "dea96254-b778-48ec-bfe4-b853aa8c5632",
"flag": true
}
}
错误码
code | code中文描述 | 详细信息 | 处理建议 |
---|---|---|---|
4010 | 时间格式错误 | 检查时间格式为yyyy-MM-dd HH:mm:ss | |
4001 | 设备列表不能为空 | nodes不能为空 | |
4001 | 开始时间和结束时间不能小于当前时间 | 检查输入的升级开始时间和升级结束时间 | |
4001 | 重试次数不能为空 | 如果有重试,则重试次数不能为空 |
取消升级计划OtaPlan
接口名称: 取消升级计划OtaPlan 接口描述: 取消升级计划OtaPlan 请求地址: /api/senthink/aep/openApi/ota/v1/otaNotify/cancel 传参方式:POST 备注:该操作会取消一个OtaPlan下的所有待推送的OtaTask
请求参数
Headers:
参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
---|---|---|---|---|
Content-Type | application/json | 是 | application/json |
Body:
名称 | 类型 | 是否必须 | 备注 | 其他信息 |
---|---|---|---|---|
id | string | 必须 | 成功创建OtaPlan后返回的batchUuid |
返回数据
名称 | 类型 | 备注 | 其他信息 |
---|---|---|---|
code | string | 响应码 | |
msg | string | 响应消息 | |
data | boolean | 响应数据 |
请求示例
{
"id": "306134d4-050d-4800-a8ab-8bce88b1db43"
}
响应示例
{
"code": "8001",
"msg": "操作成功",
"data": null
}
错误码
code | code中文描述 | 详细信息 | 处理建议 |
---|---|---|---|
4625 | 升级计划不存在 | 请检查id参数是否正确 | |
4001 | 操作失败 | 详细信息 | 请根据详细信息检查输入 |
取消/重新升级OtaTask
接口名称:取消/重新升级
接口描述:只有待推送的OtaTask才可以被取消,只有已取消和升级失败的OtaTask才可以被重新升级
请求地址:/api/senthink/aep/openApi/ota/v1/otaNotify/cancelOrReCreate
传参方式:POST
备注:OtaTask状态有如下几种:
状态名称 | 状态值 | 说明 |
---|---|---|
待推送 | 0 | 可以被取消 |
已推送 | 1 | |
升级中 | 2 | |
升级成功 | 3 | |
升级失败 | 4 | 可被重新升级 |
已取消 | 5 | 可被重新升级 |
已删除 | -1 |
请求参数
Headers:
参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
---|---|---|---|---|
Content-Type | application/json | 是 | application/json |
Body:
名称 | 类型 | 是否必须 | 备注 | 其他信息 |
---|---|---|---|---|
id | string | 必须 | OtaTask的文档ID拼接起来的字符串 | 该数据是在成功创建OtaPlan后返回的taskId的集合 |
opt | integer | 必须 | 0-取消升级 1-重新升级 |
返回数据
名称 | 类型 | 备注 | 其他信息 |
---|---|---|---|
code | string | 响应码 | |
data | object | 响应数据 | **备注:** 响应数据 |
msg | string | 响应描述 |
请求示例
{
"id": "601bff8b5b3bb45bef53c230,601bff8b5b3bb45bef53c231",
"opt": 0
}
响应示例
{
"code": "8001",
"msg": "操作成功",
"data": true
}
分页查询升级计划OtaPlan
接口名称: 升级计划分页查询 接口描述: 升级计划分页查询
请求地址: /api/senthink/aep/openApi/ota/v1/otaNotify/getOtaPlanByPage 传参方式:POST
备注: 无
请求参数
Headers:
参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
---|---|---|---|---|
Content-Type | application/json | 是 | application/json |
Body:
名称 | 类型 | 是否必须 | 备注 | 其他信息 |
---|---|---|---|---|
page | number | 非必须 | 页码 | 默认1 |
pageSize | number | 非必须 | 每页大小 | 默认10 |
firmwareId | string | 必须 | 固件id |
返回数据
名称 | 类型 | 备注 | 其他信息 |
---|---|---|---|
code | string | 响应码 | |
data | object | 响应数据 | **备注:** 响应数据 |
msg | string | 响应描述 |
data的数据结构为:
名称 | 类型 | 备注 | 其他信息 |
---|---|---|---|
current | integer | 当前页数 | |
pages | integer | 总页数 | |
records | List<OtaPlan> | 查询到的结果集 | |
size | integer | 每页显示数量 | |
total | integer | 数据总数(所有页) | |
scopeEnum | enum | 升级范围枚举 | |
statusEnum | enum | 升级计划枚举 | |
strategyEnum | enum | 升级策略枚举 |
OtaTask结构如下:
名称 | 类型 | 备注 | 其他信息 |
---|---|---|---|
id | string | 升级计划id | |
companyId | string | 企业id | |
productId | string | 产品标识id | |
productName | string | 产品名称 | |
firmwareId | string | 固件id | |
strategy | integer | 升级策略 | |
scope | integer | 升级范围 | |
targetSoftVer | string | 升级目标版本 | |
notifyType | integer | 升级通知方式 | |
startAt | string | 升级开始时间 | |
endAt | string | 升级截止时间 | |
overwrite | string | 是否覆盖升级 | |
status | string | 升级计划状态 | |
remark | string | 备注 | |
createAt | string | 升级计划创建时间 | |
updateAt | string | 升级计划更新时间 |
请求示例
{
"firmwareId": "603735ebee27c95a9c9ed3dd",
"page": 1,
"pageSize": 10
}
响应示例
{
"code": "8001",
"msg": "操作成功",
"data": {
"data": {
"records": [
{
"id": "604f16444d79652be74210f1",
"companyId": "BDBF832D",
"productId": "11765942",
"productName": "TCP产品",
"firmwareId": "603735ebee27c95a9c9ed3dd",
"strategy": 0,
"scope": 0,
"softVerScope": [
"v1.0.0"
],
"notifyType": 0,
"startAt": "2021-03-14T16:00:00.000+0000",
"endAt": "2021-04-14T16:00:00.000+0000",
"retryInterval": 1,
"retryLimit": 2,
"expireTime": 30,
"overwrite": 1,
"status": 0,
"remark": "这是备注",
"createAt": "2021-03-15 16:09:40",
"updateAt": "2021-03-15 16:09:40"
}
],
"pages": 1,
"current": 1,
"size": 10,
"searchCount": true,
"total": 1,
"optimizeCount": true,
"offset": 0,
"limit": 2147483647,
"asc": true,
"orderByField": null
},
"statusEnum": {
"0": "升级中",
"1": "已完成",
"2": "已取消"
},
"strategyEnum": {
"0": "静态升级",
"1": "动态升级"
},
"scopeEnum": {
"0": "指定设备",
"1": "全部设备"
}
}
}
错误码
code | code中文描述 | 详细信息 | 处理建议 |
---|---|---|---|
4604 | 固件不存在 | 请检查firmwareId参数是否正确 | |
4001 | 操作失败 | 详细信息 | 请根据详细信息检查输入 |
分页查询升级计划下的升级任务
接口名称: 升级计划下升级任务分页查询 接口描述: 一个升级计划下升级任务分页查询(一个升级计划对应零到多个升级任务)
请求地址: /api/senthink/aep/openApi/ota/v1/otaNotify/otaPlanTaskByPage 传参方式:POST
备注: 无
请求参数
Headers:
参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
---|---|---|---|---|
Content-Type | application/json | 是 | application/json |
Body:
名称 | 类型 | 是否必须 | 备注 | 其他信息 |
---|---|---|---|---|
page | number | 非必须 | 页码 | 默认1 |
pageSize | number | 非必须 | 每页大小 | 默认10 |
planId | string | 必须 | 升级计划id | |
返回数据
名称 | 类型 | 备注 | 其他信息 |
---|---|---|---|
code | string | 响应码 | |
data | object | 响应数据 | **备注:** 响应数据 |
msg | string | 响应描述 |
data的数据结构为: | 名称 | 类型 | 备注 | 其他信息 | | :------------ | :------------ | :--------------------------------- | :------- | | data | object | 数据 | | | otaTypeEnum | enum | 升级方式枚举 | | | otaStatusEnum | enum | 升级状态枚举 | |
data.data 的数据结构为 | 名称 | 类型 | 备注 | 其他信息 | | :------------ | :------------ | :--------------------------------- | :-------
| | current | integer | 当前页数 | | | pages | integer | 总页数 | | | records | List
OtaTask结构如下:
名称 | 类型 | 备注 | 其他信息 |
---|---|---|---|
id | string | 升级任务id | |
planId | string | 升级计划id | |
companyId | string | 企业id | |
productId | string | 产品标识id | |
productName | string | 产品名称 | |
firmwareId | string | 固件id | |
nodeEui | string | 设备号 | |
downId | string | 下载id | |
softVer | string | 当前固件版本 | |
hardVer | string | 适配硬件版本 | |
targetSoftVer | string | 升级目标版本 | |
otaType | integer | 升级方式 1:TCP <br />2:HTTP | |
startAt | string | 升级开始时间 | |
endAt | string | 升级截止时间 | |
overwrite | integer | 是否覆盖升级 | |
retryInterval | integer | 升级重试间隔 | |
retryLimit | integer | 重试次数 | |
errorInfo | string | 升级失败的失败原因 | |
createAt | string | 升级计划创建时间 | |
updateAt | string | 升级计划更新时间 |
请求示例
{
"planId": "60e1a72d74a8941a40d42d42",
"page": 1,
"pageSize": 10
}
响应示例
{
"code": "8001",
"msg": "操作成功",
"data": {
"data": {
"records": [
{
"id": "60e1a72d74a8941a40d42d43",
"planId": "60e1a72d74a8941a40d42d42",
"companyId": "B5869C8F",
"firmwareId": "609bb7daf2a6f7261142bd22",
"productId": "92B54688",
"productName": "mqttOta测试",
"nodeEui": "100006",
"downId": "8B61D137",
"softVer": "v1.0.5",
"hardVer": "",
"targetSoftVer": "v1.0.1",
"otaType": 2,
"startAt": "2021-07-04T12:18:53.576+0000",
"endAt": null,
"expireAt": 1625487533707,
"status": 0,
"retryInterval": 0,
"retryLimit": null,
"retryCnt": 1,
"overwrite": 1,
"createdStrategy": 0,
"errorInfo": null,
"createAt": "2021-07-04 20:18:53",
"updateAt": "2021-07-04 20:18:53"
}
],
"pages": 1,
"current": 1,
"size": 10,
"searchCount": true,
"total": 1,
"optimizeCount": true,
"offset": 0,
"limit": 2147483647,
"asc": true,
"orderByField": null
},
"otaTypeEnum": {
"1": "TCP",
"2": "HTTP"
},
"otaStatusEnum": {
"0": "待推送",
"-1": "已删除",
"1": "已推送",
"2": "升级中",
"3": "升级成功",
"4": "升级失败",
"5": "已取消"
}
}
}
错误码
code | code中文描述 | 详细信息 | 处理建议 |
---|---|---|---|
4604 | 固件不存在 | 请检查firmwareId参数是否正确 | |
4001 | 操作失败 | 详细信息 | 请根据详细信息检查输入 |
查询OtaPlan详情
接口名称:查询OtaPlan详情
接口描述:无
接口地址:/api/senthink/aep/openApi/ota/v1/otaNotify/otaPlanInfo
传参方式:POST
备注:无
请求参数
Headers:
参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
---|---|---|---|---|
Content-Type | application/json | 是 | application/json |
Body:
名称 | 类型 | 是否必须 | 备注 | 其他信息 |
---|---|---|---|---|
id | string | 必须 | 成功添加otaPlan后返回的batchUuid |
返回数据
名称 | 类型 | 备注 | 其他信息 |
---|---|---|---|
code | string | 响应码 | |
data | object | 响应数据 | **备注:** 响应数据 |
msg | string | 响应描述 |
请求示例
{
"id": "306134d4-050d-4800-a8ab-8bce88b1db43"
}
响应示例
{
"code": "8001",
"msg": "操作成功",
"data": {
"otaNotifyTypeEnum": {
"0": "立即推送",
"1": "定时推送"
},
"data": {
"id": "61849cfdc175db014ea3b923",
"companyId": "60BF8DA4",
"productId": "E817A6C7",
"productName": "MQTT一型一密预注册",
"firmwareId": "6156cccbc6958b030881aeac",
"strategy": 0,
"scope": 0,
"softVerScope": null,
"notifyType": 0,
"startAt": "2021-11-05 10:54:53",
"endAt": null,
"retryInterval": 0,
"retryLimit": 0,
"expireTime": 1440,
"overwrite": 0,
"status": 0,
"remark": null,
"triggerType": 1,
"moduleName": "默认",
"targetSoftVer": "v1.1",
"createAt": "2021-11-05 10:54:53",
"updateAt": "2021-11-05 10:54:53"
},
"otaScopeEnum": {
"0": "指定设备",
"1": "该产品下全部设备"
},
"otaOverwriteEnum": {
"0": "不覆盖",
"1": "覆盖"
},
"otaRetryCntEnum": {
"1": "重试1次",
"2": "重试2次",
"5": "重试5次"
},
"otaStrategyEnum": {
"0": "静态升级",
"1": "动态升级"
},
"otaRetryIntervalEnum": {
"0": "不重试",
"1440": "24小时后重试",
"1": "立即重试",
"10": "10分钟后重试",
"60": "1小时后重试",
"30": "30分钟后重试"
}
}
}
设备版本分布
版本分布查询
接口名称: 版本分布查询 接口描述: 版本分布查询
请求地址: /api/senthink/aep/openApi/otaVersion/v1/getByPage 传参方式:POST
备注: 无
请求参数
Headers:
参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
---|---|---|---|---|
Content-Type | application/json | 是 | application/json |
Body:
名称 | 类型 | 是否必须 | 备注 | 其他信息 |
---|---|---|---|---|
page | integer | 必须 | 当前页码 | |
pageSize | integer | 必须 | 每页数量 | |
productId | string | 非必须 | 产品标识id,如果productId不为空则为查询某个产品的版本,如果为空,则查询所有产品下设备版本号 | |
moduleId | string | 非必须 | 模块ID | |
search | string | 非必须 | 模糊查询条件 |
返回数据
名称 | 类型 | 备注 | 其他信息 |
---|---|---|---|
code | string | 响应码 | |
data | object | 响应数据 | **备注:** 响应数据 |
msg | string | 响应描述 |
data的数据结构为:
名称 | 类型 | 备注 | 其他信息 |
---|---|---|---|
current | integer | 当前页数 | |
pages | integer | 总页数 | |
records | List<NodeVersion> | 查询到的结果集 | |
size | integer | 每页显示数量 | |
total | integer | 数据总数(所有页) |
NodeVersion数据结构为:
名称 | 类型 | 备注 | 其他信息 |
---|---|---|---|
nodeEui | string | 智能设备的设备号 | |
deviceName | string | 设备名称 | |
productName | string | 产品名称 | |
hardVer | string | 硬件版本 | |
softVer | string | 软件版本 | |
versionReportAt | string | 版本上报时间 | yyyy-MM-dd HH:mm:ss |
请求示例
{
"search": "200001",
"productId": "A330CD0E",
"moduleId": "616c1146ff83b70eee4a0d55",
"page": 1,
"pageSize": 10
}
响应示例
{
"code": "8001",
"msg": "操作成功",
"data": {
"records": [
{
"id": "616c1157ff83b70eee4a0d58",
"companyId": "60BF8DA4",
"productId": "A330CD0E",
"productName": "MQTT非透传不显示激活时间",
"nodeEui": "200001",
"module": "default",
"moduleName": "默认",
"otaType": 2,
"softVer": "v1.0.5",
"hardVer": "v1.0.0",
"remark": null,
"createAt": null,
"updateAt": "2021-10-17 20:08:05",
"delete": 0
}
],
"pages": 1,
"current": 1,
"size": 10,
"searchCount": true,
"total": 1,
"optimizeCount": true,
"offset": 0,
"limit": 2147483647,
"asc": true,
"orderByField": null
}
}
版本分布概览
接口名称:版本分布概览
接口描述:无
请求地址:/api/senthink/aep/openApi/otaVersion/v1/static
传参方式:POST
备注:无
请求参数
Headers:
参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
---|---|---|---|---|
Content-Type | application/json | 是 | application/json |
Body:
名称 | 类型 | 是否必须 | 备注 | 其他信息 |
---|---|---|---|---|
productId | string | 必须 | 产品ID | |
module | string | 必须 | 模块标识 |
返回数据
名称 | 类型 | 备注 | 其他信息 |
---|---|---|---|
code | string | 响应码 | |
data | object | 响应数据 | **备注:** 响应数据 |
msg | string | 响应描述 |
data结构:
名称 | 类型 | 备注 | 其他信息 |
---|---|---|---|
software | map | 固件版本 | |
hardware | map | 硬件版本 |
请求示例
{
"productId": "B9516949",
"module": "test"
}
响应示例
{
"code": "8001",
"msg": "操作成功",
"data": {
"software": {
"total": 11,
"data": [
{
"name": "v1.1",
"value": 5
},
{
"name": "v1.2",
"value": 5
},
{
"name": "v2.0",
"value": 1
}
]
},
"hardware": {
"total": 11,
"data": [
{
"name": "v1.4",
"value": 5
},
{
"name": "v1.9",
"value": 5
},
{
"name": "v2.0",
"value": 1
}
]
}
}
}
模块管理
添加模块
接口名称: 添加模块 接口描述: 添加模块
请求地址:/api/senthink/aep/openApi/otaModule/v1/addOtaModule 传参方式:POST
备注: 无
请求参数
Headers:
参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
---|---|---|---|---|
Content-Type | application/json | 是 | application/json |
Body:
名称 | 类型 | 是否必须 | 备注 | 其他信息 |
---|---|---|---|---|
productId | string | 必须 | 产品ID | |
productName | string | 必须 | 产品名称 | |
module | string | 必须 | 模块标识 | |
moduleName | string | 必须 | 模块名称 |
返回数据
名称 | 类型 | 备注 | 其他信息 |
---|---|---|---|
code | string | 响应码 | |
data | object | 响应数据 | **备注:** 响应数据 |
msg | string | 响应描述 |
请求示例
{
"module": "module002",
"productId": "75E1C543",
"moduleName": "moduleName002",
"productName": "product1"
}
响应示例
{
"code": "8001",
"msg": "操作成功",
"data": {
"code": "8001",
"msg": "操作成功",
"data": true
}
}
错误码
code | code中文描述 | 详细信息 | 处理建议 |
---|---|---|---|
4001 | 操作失败 | 详细信息 | 请根据详细信息检查输入 |
4301 | 产品不存在 | 请检查productId参数 | |
4642 | 模块标识已存在 | 请修改模块标识并重试 |
删除模块
接口名称:删除模块
接口描述:删除模块
请求地址:/api/senthink/aep/openApi/otaModule/v1/deleteOtaModule
传参方式:POST
备注:无
请求参数
Header:
参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
---|---|---|---|---|
Content-Type | application/json | 是 | application/json |
Body:
名称 | 类型 | 是否必须 | 备注 | 其他信息 |
---|---|---|---|---|
productId | string | 必须 | 产品ID | |
module | string | 必须 | 模块标识 |
返回数据
名称 | 类型 | 备注 | 其他信息 |
---|---|---|---|
code | string | 响应码 | |
data | object | 响应数据 | **备注:** 响应数据 |
msg | string | 响应描述 |
请求示例
{
"productId": "2D8DA198",
"module": "test_lei"
}
响应示例
{
"code": "8001",
"msg": "操作成功",
"data": null
}
编辑模块
接口名称:编辑模块
接口描述:无
请求地址:/api/senthink/aep/openApi/otaModule/v1/editOtaModule
传参方式:POST
备注:无
请求参数
Header:
参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
---|---|---|---|---|
Content-Type | application/json | 是 | application/json |
Body:
名称 | 类型 | 是否必须 | 备注 | 其他信息 |
---|---|---|---|---|
productId | string | 必须 | 产品ID | |
module | string | 必须 | 模块标识 | |
moduleName | string | 必须 | 模块名称 | |
moduleDesc | string | 非必须 | 模块描述 |
返回数据
名称 | 类型 | 备注 | 其他信息 |
---|---|---|---|
code | string | 响应码 | |
data | object | 响应数据 | **备注:** 响应数据 |
msg | string | 响应描述 |
请求示例
{
"module": "module003",
"productId": "2D8DA198",
"moduleName": "模块名称-改1"
}
响应示例
{
"code": "8001",
"msg": "操作成功",
"data": {
"code": "8001",
"msg": "操作成功",
"data": true
}
}
查询模块详情
接口名称:查询模块详情
接口描述:无
请求地址:/api/senthink/aep/openApi/otaModule/v1/queryOtaModuleDetail
传参方式:POST
备注:无
请求参数
Header:
参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
---|---|---|---|---|
Content-Type | application/json | 是 | application/json |
Body:
名称 | 类型 | 是否必须 | 备注 | 其他信息 |
---|---|---|---|---|
productId | string | 必须 | 产品ID | |
module | string | 必须 | 模块标识 |
返回数据
名称 | 类型 | 备注 | 其他信息 |
---|---|---|---|
code | string | 响应码 | |
data | object | 响应数据(模块详情) | **备注:** 响应数据 |
msg | string | 响应描述 |
请求示例
{
"productId": "2D8DA198",
"module": "module003"
}
响应示例
{
"code": "8001",
"msg": "操作成功",
"data": {
"id": "618207ff94a90b63fc2ac445",
"module": "module003",
"moduleName": "模块名称-改1",
"companyId": "520CFD08",
"productId": "2D8DA198",
"productName": "测试添加产品",
"moduleDesc": null,
"initialization": false,
"createAt": "2021-11-03 11:54:39",
"updateAt": "2021-11-03 14:42:52",
"delete": 0
}
}
设备分组管理
添加分组
接口名称:添加分组
接口描述:该接口用于添加设备分组
请求地址:/api/senthink/aep/openApi/deviceGroup/v1/add
传参方式:POST
备注:创建分组后,企业可以跨产品管理所有设备
请求参数
Headers:
参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
---|---|---|---|---|
Content-Type | application/json | 是 | application/json |
Body:
名称 | 类型 | 是否必须 | 备注 |
---|---|---|---|
name | string | 必须 | 分组名称 |
level | integer | 必须 | 层级,0:1级分组,1:2级分组,2:三级分组 |
description | string | 非必须 | 分组描述,非必填,如果填写了,则长度必须是100个字符以内 |
num | string | 非必须 | 分组编号 |
parentNum | string | 非必须 | 所属父分组的分组编号,再创建2级和3级分组时为必填 |
返回数据
名称 | 类型 | 备注 | 其他信息 |
---|---|---|---|
code | string | 响应码 | |
data | object | 响应数据(分组详情) | **备注:** 响应数据 |
msg | string | 响应描述 |
请求示例
{
"level": 1,
"name": "group14-1",
"description": "openapi首次添加设备2级分组测试",
"parentNum": "VkhBJ99u8qGG7yCg"
}
响应示例
{
"code": "8001",
"msg": "操作成功",
"data": {
"id": "61e7c8a0992cb92b5f3e5575",
"companyId": "520CFD08",
"name": "group14-1",
"num": "05qpm29NGrFycE0A",
"parentNum": "VkhBJ99u8qGG7yCg",
"level": 2,
"description": "openapi首次添加设备2级分组测试",
"nodeEuis": [],
"createAt": "2022-01-19 16:15:28",
"updateAt": null,
"joinAt": null,
"delete": 0,
"total": null,
"onlineNum": 0,
"activeNum": 0,
"children": []
}
}
删除分组
接口名称:删除分组
接口描述:该接口用于删除设备分组
请求地址:/api/senthink/aep/openApi/deviceGroup/v1/delete
传参方式:POST
备注:暂无
请求参数
Headers:
参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
---|---|---|---|---|
Content-Type | application/json | 是 | application/json |
Body:
名称 | 类型 | 是否必须 | 备注 | |
---|---|---|---|---|
name | string | 必须 | 分组名称 |
返回数据
名称 | 类型 | 备注 | 其他信息 |
---|---|---|---|
code | string | 响应码 | |
data | object | 响应数据 | **备注:** 响应数据 |
msg | string | 响应描述 |
请求示例
{
"name": "group15-1"
}
响应示例
{
"code": "8001",
"msg": "操作成功",
"data": true
}
编辑分组
接口名称:编辑分组
接口描述:用于编辑和修改分组信息
请求地址:/api/senthink/aep/openApi/deviceGroup/v1/edit
传参方式:POST
备注:暂无
请求参数
Headers:
参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
---|---|---|---|---|
Content-Type | application/json | 是 | application/json |
Body:
名称 | 类型 | 是否必须 | 备注 |
---|---|---|---|
id | string | 必须 | 分组文档ID |
name | string | 必须 | 分组名称,支持中文、英文字母、数字和下划线(_),长度限制4~30个字符,中文算2个字符,企业下唯一 |
description | string | 非必须 | 分组描述,限制0-100个字符内 |
返回数据
名称 | 类型 | 备注 | 其他信息 |
---|---|---|---|
code | string | 响应码 | |
data | object | 响应数据 | **备注:** 响应数据 |
msg | string | 响应描述 |
请求示例
{
"id": "61e8f9a501f61368266f0deb",
"name": "group14-2",
"description":"编辑分组的描述信息"
}
响应示例
{
"code": "8001",
"msg": "操作成功",
"data": true
}
查询分组
接口名称:查询分组
接口描述:该接口用于查询分组详情
请求地址:/api/senthink/aep/openApi/deviceGroup/v1/query
传参方式:POST
备注:暂无
请求参数
Headers:
参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
---|---|---|---|---|
Content-Type | application/json | 是 | application/json |
Body:
名称 | 类型 | 是否必须 | 备注 |
---|---|---|---|
name | string | 必须 | 分组名称 |
productId | string | 非必须 | 产品ID |
connect | string | 非必须 | 连接状态 |
search | string | 必须 | 模糊查询条件 |
page | string | 必须 | 当前页 |
pageSize | string | 必须 | 每页数据量 |
返回数据
名称 | 类型 | 备注 | 其他信息 |
---|---|---|---|
code | string | 响应码 | |
data | object | 响应数据(分组名称等基本信息、分组下设备列表等) | **备注:** 响应数据 |
msg | string | 响应描述 |
data的数据结构:
请求示例
{
"name": "group14-2",
"page": 1,
"pageSize": 10,
"search": "lei",
"connect": 1,
"productId": "0327CB6D"
}
响应示例
{
"code": "8001",
"msg": "操作成功",
"data": {
"statusEnum": {
"0": "禁用",
"1": "启用"
},
"connectStatus": {
"0": "离线",
"-1": "未激活",
"1": "在线"
},
"deviceList": {
"records": [
{
"id": "6180abdaa275801ea460f6df",
"productDocId": "6180a39f7571341cc90f7b52",
"productId": null,
"productKey": null,
"nodeEui": "0000005",
"deviceName": "lei_jun",
"uniqueId": "9EAA5390003F42A38660BC86AC8115E4",
"deviceSecret": "A51A1EA3BA97400D3AA062EE0E861F12",
"companyId": "520CFD08",
"connected": 1,
"activeAt": null,
"lastJoinAt": null,
"lastHeartbeatAt": null,
"lastDisconnectAt": null,
"status": 1,
"localLogReport": 1,
"createAt": "2021-11-02 11:09:14",
"sessionKey": null,
"productName": "MQTT开放协议产品-透传",
"accessType": null,
"netType": null,
"protocol": null,
"deviceType": 0,
"securityType": null,
"encrypted": null,
"authType": null,
"payloadFormat": null,
"topic": null,
"hardVer": null,
"softVer": null,
"versionReportAt": null,
"otaType": null,
"modeId": null,
"upNodeId": null,
"relationTime": null,
"relationState": null,
"dataFormat": null,
"ctwingProductId": null,
"ctwingMasterKey": null,
"ctwingAppId": null,
"ctwingAppKey": null,
"ctwingAppSecret": null,
"delete": 0,
"mqttAccount": null,
"groupPoList": [
{
"id": "61b83d649e6a6a2ed1e8f924",
"companyId": "520CFD08",
"name": "group1",
"num": "kM2Z26erBbhJb3uV",
"parentNum": null,
"level": 1,
"description": null,
"nodeEuis": [
"0000001",
"0000002",
"0000003",
"0000004",
"0000005"
],
"createAt": "2021-12-14 14:44:52",
"updateAt": null,
"joinAt": "2022-01-12 13:47:11",
"delete": 0
},
{
"id": "61de6c4e4263891c167df208",
"companyId": "520CFD08",
"name": "group9",
"num": "nmkzMdbP065Oo4X2",
"parentNum": null,
"level": 1,
"description": null,
"nodeEuis": [
"0000002",
"0000003",
"0000004",
"0000005"
],
"createAt": "2022-01-12 13:51:10",
"updateAt": null,
"joinAt": "2022-01-12 15:01:52",
"delete": 0
},
{
"id": "61b840079e6a6a2ed1e8f925",
"companyId": "520CFD08",
"name": "group2",
"num": "FAU7LTisZr9BqRk8",
"parentNum": null,
"level": 1,
"description": null,
"nodeEuis": [
"device-group-device1",
"0000001",
"0000002",
"0000003",
"0000004",
"0000005"
],
"createAt": "2021-12-14 14:56:07",
"updateAt": null,
"joinAt": "2022-01-12 15:10:10",
"delete": 0
},
{
"id": "61de6c554263891c167df209",
"companyId": "520CFD08",
"name": "group10",
"num": "nbERm2lhyxtm1PYu",
"parentNum": null,
"level": 1,
"description": null,
"nodeEuis": [
"0000001",
"0000002",
"0000003",
"0000004",
"0000005"
],
"createAt": "2022-01-12 13:51:17",
"updateAt": null,
"joinAt": "2022-01-13 15:45:29",
"delete": 0
},
{
"id": "61e7c821992cb92b5f3e5574",
"companyId": "520CFD08",
"name": "group14",
"num": "VkhBJ99u8qGG7yCg",
"parentNum": null,
"level": 1,
"description": "openapi首次添加设备分组测试2",
"nodeEuis": [
"0000005"
],
"createAt": "2022-01-19 16:13:21",
"updateAt": "2022-01-19 17:42:17",
"joinAt": "2022-01-19 17:42:02",
"delete": 0
},
{
"id": "61e8f9a501f61368266f0deb",
"companyId": "520CFD08",
"name": "group14-2",
"num": "8M8NCB2xaIE5EVNV",
"parentNum": "VkhBJ99u8qGG7yCg",
"level": 2,
"description": "编辑分组的描述信息",
"nodeEuis": [
"0000005"
],
"createAt": "2022-01-20 13:56:53",
"updateAt": "2022-01-20 14:10:11",
"joinAt": "2022-01-20 14:06:58",
"delete": 0
}
],
"gatewayProtocol": null,
"gatewayInfo": null,
"planData": null,
"nodeId": null,
"channelNum": null,
"online": true
}
],
"pages": 1,
"current": 1,
"size": 10,
"searchCount": true,
"total": 1,
"optimizeCount": true,
"offset": 0,
"limit": 2147483647,
"asc": true,
"orderByField": null
},
"deviceGroup": {
"id": "61e8f9a501f61368266f0deb",
"companyId": "520CFD08",
"name": "group14-2",
"num": "8M8NCB2xaIE5EVNV",
"parentNum": "VkhBJ99u8qGG7yCg",
"level": 2,
"description": "编辑分组的描述信息",
"nodeEuis": [
"0000005",
"1000000001"
],
"createAt": "2022-01-20 13:56:53",
"updateAt": "2022-01-20 14:10:11",
"joinAt": null,
"delete": 0,
"total": 2,
"onlineNum": 1,
"activeNum": 2,
"children": []
},
"nodeTypeEnum": {
"0": "设备",
"1": "网关"
},
"products": [
{
"id": "6142fba6dfc1b25f432c7dd4",
"productId": "75E1C543",
"name": "product1",
"companyId": "520CFD08",
"apiAppId": null,
"pushAppId": "614440465ee51309d098645b",
"productKey": "5EC993EE2CCE83069B32FBE8C7C69503",
"deviceType": 0,
"accessType": 1,
"netType": -1,
"protocol": 0,
"securityType": 0,
"encrypted": 1,
"authType": 0,
"payloadFormat": 0,
"dataFormat": null,
"productDesc": "TCP产品",
"status": 1,
"createAt": "2021-09-16 16:09:10",
"updateAt": "2021-09-16 16:09:10",
"ctwingProductId": null,
"ctwingMasterKey": null,
"ctwingAppId": null,
"ctwingAppKey": null,
"ctwingAppSecret": null,
"ctwingPayloadFormat": null,
"delete": 0,
"gatewayProtocol": null,
"cloudProduct": false,
"tcpProduct": true
}
]
}
}
查询分组列表
接口名称:查询分组列表
接口描述:该接口用于查询当前企业下的分组列表
请求地址:/api/senthink/aep/openApi/deviceGroup/v1/getList
传参方式:POST
备注:暂无
请求参数
Headers:
参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
---|---|---|---|---|
Content-Type | application/json | 是 | application/json |
Body:没有请求体
返回数据
名称 | 类型 | 备注 | 其他信息 |
---|---|---|---|
code | string | 响应码 | |
data | object | 响应数据(当前企业下所有的设备分组列表) | **备注:** 响应数据 |
msg | string | 响应描述 |
响应示例
{
"code": "8001",
"msg": "操作成功",
"data": [
{
"id": "61de6c484263891c167df207",
"companyId": "520CFD08",
"name": "group8",
"num": "3e3GY4w8afkI0rKO",
"parentNum": null,
"level": 1,
"description": null,
"nodeEuis": [
"0000001"
],
"createAt": "2022-01-12 13:51:04",
"updateAt": null,
"joinAt": null,
"delete": 0,
"total": null,
"onlineNum": 0,
"activeNum": 0,
"children": []
},
{
"id": "61e7c821992cb92b5f3e5574",
"companyId": "520CFD08",
"name": "group14",
"num": "VkhBJ99u8qGG7yCg",
"parentNum": null,
"level": 1,
"description": "openapi首次添加设备分组测试2",
"nodeEuis": [
"0000005"
],
"createAt": "2022-01-19 16:13:21",
"updateAt": "2022-01-19 17:42:17",
"joinAt": null,
"delete": 0,
"total": null,
"onlineNum": 0,
"activeNum": 0,
"children": [
{
"id": "61e8f9a501f61368266f0deb",
"companyId": "520CFD08",
"name": "group14-2",
"num": "8M8NCB2xaIE5EVNV",
"parentNum": "VkhBJ99u8qGG7yCg",
"level": 2,
"description": "编辑分组的描述信息",
"nodeEuis": [
"0000005"
],
"createAt": "2022-01-20 13:56:53",
"updateAt": "2022-01-20 14:10:11",
"joinAt": null,
"delete": 0,
"total": null,
"onlineNum": 0,
"activeNum": 0,
"children": []
}
]
}
]
}
批量添加设备到分组
接口名称:批量添加设备到分组
接口描述:该接口用于批量添加设备到分组
请求地址:/api/senthink/aep/openApi/deviceGroup/v1/batchAdd
传参方式:POST
备注:暂无
请求参数
Headers:
参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
---|---|---|---|---|
Content-Type | application/json | 是 | application/json |
Body:
名称 | 类型 | 是否必须 | 备注 |
---|---|---|---|
deviceIds | string | 必须 | 设备文档Id拼接的字符串 |
groupId | string | 必须 | 分组文档ID |
返回数据
名称 | 类型 | 备注 | 其他信息 |
---|---|---|---|
code | string | 响应码 | |
data | object | 响应数据 | **备注:** 响应数据 |
msg | string | 响应描述 |
请求示例
{
"deviceIds": "6180a3bf7571341cc90f7b55,6180aa63ea679609a7aa24e7",
"groupId": "61e8f9a501f61368266f0deb"
}
响应示例
{
"code": "8001",
"msg": "操作成功",
"data": "操作结果:{\"success\": 0,\"fail\": 1}"
}
移除分组下的设备/移除设备所属分组
接口名称:移除分组下的设备/移除设备所属分组
接口描述:该接口用于移除操作,可以移除分组下的设备或移除设备所属的分组
请求地址:/api/senthink/aep/openApi/deviceGroup/v1/remove
传参方式:POST
备注:暂无
请求参数
Headers:
参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
---|---|---|---|---|
Content-Type | application/json | 是 | application/json |
Body:
名称 | 类型 | 是否必须 | 备注 |
---|---|---|---|
nodeEui | string | 必须 | 设备编号 |
groupName | string | 必须 | 分组名称 |
返回数据
名称 | 类型 | 备注 | 其他信息 |
---|---|---|---|
code | string | 响应码 | |
data | object | 响应数据 | **备注:** 响应数据 |
msg | string | 响应描述 |
请求示例
{
"nodeEui": "0000001",
"groupName": "group14-2"
}
响应示例
{
"code": "8001",
"msg": "操作成功",
"data": "操作成功"
}
子设备管理
批量添加/解除网关子设备
接口名称:批量添加或解除子设备
接口描述:该接口用于给网关类型的设备添加子设备或解除其子设备
请求地址:/api/senthink/aep/openApi/subDevice/v1/batchAddOrRelieve
传参方式:POST
备注:暂无
请求参数
Headers:
参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
---|---|---|---|---|
Content-Type | application/json | 是 | application/json |
Body:
名称 | 类型 | 是否必须 | 备注 |
---|---|---|---|
gatewayNodeEui | string | 必须 | 网关设备号 |
subdeviceNodeEuiList | array | 必须 | 子设备号集合 |
type | boolean | 必须 | true表示批量添加 false表示批量解除 |
返回数据
名称 | 类型 | 备注 | 其他信息 |
---|---|---|---|
code | string | 响应码 | |
data | object | 响应数据 | |
msg | string | 响应描述 |
请求示例
{
"gatewayNodeEui": "gateway001",
"subdeviceNodeEuiList": ["device003", "device2022001"],
"type":false
}
响应示例
{
"code": "8001",
"msg": "操作成功",
"data": "操作成功"
}
分页查询网关子设备
接口名称:分页查询网关子设备
接口描述:该接口用于分页查询网关设备下的子设备列表
请求地址:/api/senthink/aep/openApi/subDevice/v1/getPage
传参方式:POST
备注:暂无
请求参数
Headers:
参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
---|---|---|---|---|
Content-Type | application/json | 是 | application/json |
Body:
名称 | 类型 | 是否必须 | 备注 |
---|---|---|---|
nodeEui | string | 必须 | 网关设备号 |
page | integer | 必须 | 当前页 |
pageSize | integer | 必须 | 每页数据量 |
search | string | 非必须 | 设备号或备注名称 |
返回数据
名称 | 类型 | 备注 | 其他信息 |
---|---|---|---|
code | string | 响应码 | |
data | object | 响应数据 | 包括状态枚举和子设备列表数据 |
msg | string | 响应描述 |
data数据结构如下:
名称 | 类型 | 备注 | 其他信息 |
---|---|---|---|
relationStateEnum | object | 关联状态枚举:0-未关联 1-已关联 2-解除中 | |
connectEnum | object | 连接状态枚举:0-离线 1-在线 -1-未激活 | |
bindStateEnum | object | 启用状态枚举:0-禁用 1-启用 | |
data | object | 子设备分页数据 |
请求示例
{
"nodeEui": "gateway001",
"page": 1,
"pageSize": 2,
"search":"004"
}
响应示例
{
"code": "8001",
"msg": "操作成功",
"data": {
"relationStateEnum": {
"0": "未关联",
"1": "已关联",
"2": "解除中"
},
"connectEnum": {
"0": "离线",
"-1": "未激活",
"1": "在线"
},
"bindStateEnum": {
"0": "禁用",
"1": "启用"
},
"data": {
"records": [
{
"id": "61ea593aab40077dc259c507",
"productDocId": "61ea5290ab40077dc259c4fb",
"nodeEui": "subDevice004",
"deviceName": "subDevice004",
"companyId": "520CFD08",
"connected": -1,
"lastJoinAt": null,
"lastDisconnectAt": null,
"status": 1,
"protocol": 1,
"productName": "网关子设备测试产品1",
"deviceType": 0,
"upNodeId": "520CFD08-8B709C96-gateway001",
"subDeviceCount": 0,
"accessType": 3,
"relationTime": "2022-01-21 14:57:35",
"relationState": 0,
"upNodeEui": null,
"gatewayStatus": null
}
],
"pages": 1,
"current": 1,
"size": 2,
"searchCount": true,
"total": 1,
"optimizeCount": true,
"offset": 0,
"limit": 2147483647,
"asc": true,
"orderByField": null
}
}
}