API列表
address: https://api-aep.xiot.senthink.com
path: 参考各接口说明中的请求地址
接口调用必须携带公共请求头,公共请求头如下。
| 参数名称 | 参数值 | 是否必须 | 备注 | 
|---|
| appId | 添加api应用生成的appId | 是 |  | 
| sign | 计算的签名值,参考签名计算示例 | 是 |  | 
| nonce | 随机数,可以使用随机数或者uuid | 是 |  | 
| authorization | 鉴权令牌,通过获取token接口获取 | 否 | 除token相关接口外必须 | 
| Content-Type | application/json或multipart/form-data | 是 | 未特殊说明接口均为application/json | 
公共错误码
| code | 描述 | 处理建议 | 
|---|
| 40001 | 账号权限不足 | 检查账号权限 | 
| 60001 | 操作失败,稍后重试 | 检查请求参数格式,或稍后再试 | 
| 60003 | 参数错误 | 检查请求参数是否缺失,数据格式是否正确 | 
| 60006 | sign值校验错误 | 检查sign值加密方式 | 
| 60007 | token校验错误 | 检查token或重新获取鉴权参数 | 
| 60009 | 数据不存在 | 检查请求参数对应数据是否存在 | 
鉴权
获取鉴权参数
请求地址: /oauth/login
传参方式: POST
备注: 无
请求参数
Body:
| 参数名称 | 类型 | 是否必须 | 名称 | 备注 | 参数值 | 
|---|
| refresh_token | string | 否 | 刷新token | 刷新认证时必须 | 
| client_id | string | 是 | appId |  |  | 
| client_secret | string | 是 | appSecret |  |  | 
| grant_type | string | 是 | 认证类型 |  | password: 默认认证, refresh_token: 刷新认证 | 
响应参数
| 名称 | 类型 | 说明 | 
|---|
| code | string | 响应码 | 
| msg | string | 响应码说明 | 
| data | object | 响应内容 | 
data 说明
| 参数名称 | 类型 | 名称 | 参数 | 
|---|
| access_token | string | token |  | 
| token_type | string | token类型 | bearer | 
| refresh_token | string | 刷新token |  | 
| expires_in | integer | 过期时间(秒) |  | 
| scope | string | 权限范围 |  | 
| user_id | string | 用户id |  | 
| user_name | string | 用户名 |  | 
| company_id | string | 用户所属企业 |  | 
| role_type | integer | 用户角色 | 1:员工,2.企业 | 
| jti | string | jti |  | 
请求示例
1、获取鉴权参数
{
    "client_id":"yourAppId",
    "client_secret":"yourAppSecret",
    "grant_type":"password"
}
2、刷新鉴权参数
{
    "refresh_token":"yourRefreshToken",
    "client_id":"yourAppId",
    "client_secret":"yourAppSecret",
    "grant_type":"refresh_token"
}
响应示例
{
    "code": "8001",
    "msg": "操作成功",
    "data": {
        "access_token": "theAccessToken",
        "token_type": "bearer",
        "refresh_token": "theRefreshToken",
        "expires_in": 259200,
        "scope": "all",
        "user_id": "yourUserId",
        "user_name": "yourUsername",
        "company_id": "yourCompanyId",
        "role_type": 1,
        "jti": "4b02c4d4-e5d3-42b6-ab67-0062fad87324"
    }
}
错误码
| code | 描述 | 处理建议 | 
|---|
| 30001 | 客户端认证失败 | 检查请求参数内容是否正确 | 
| 30003 | 不支持的认证模式 | 修改认证类型 | 
| 30006 | 无效的refresh_token | 确认refresh_token或使用密码认证方式 | 
| 40001 | 无权限访问! | 检查账号权限 | 
| 60001 | 操作失败,稍后重试 | 检查请求参数格式,或稍后再试 | 
| 60003 | 参数错误 | 检查请求参数格式 | 
产品模块
添加产品
请求地址: /openApi/v2/product/add
传参方式: POST
备注: 无
请求参数
Body:
1.公共参数
| 参数名称 | 类型 | 是否必须 | 名称 | 备注 | 参数值 | 
|---|
| name | string | 是 | 产品名称 | 长度4~30个字符,中文算2个字符 |  | 
| deviceType | integer | 是 | 节点类型 |  | 0:设备, 1:网关 | 
| accessType | integer | 是 | 接入类型 | 节点类型为网关时只能选1 | 1:设备直连, 2:云云对接, 3:网关接入 | 
| payloadFormat | integer | 是 | 数据格式 | 云云对接产品、网关接入产品只能选1 | 0:透传, 1:非透传 | 
| dataFormat | integer | 否 | 消息格式 | payloadFormat为0时非必须,为1时必须;, protocol为2或3时只能选2 | 0:十六进制, 1:Json, 2:自定义 | 
| productDesc | string | 否 | 产品说明 | 长度限制100个字符以内 |  | 
2.其他参数
2.1 产品为设备:deviceType = 0
2.1.1 设备直连:accessType = 1
| 参数名称 | 类型 | 是否必须 | 名称 | 备注 | 参数值 | 
|---|
| netType | integer | 是 | 网络类型 |  | 0:WI-FI, 1:移动蜂窝数据, 2:以太网, 4:NB-IOT, -1:其他 | 
| protocol | integer | 是 | 通信协议 |  | 0:TCP, 1:MQTT, 2:MQTT开放协议 | 
| securityType | integer | 是 | 安全类型 | 设备直连时必须;, 通信协议为MQTT开放协议时只能选2 | 0:一型一密免注册, 1:一型一密预注册, 2:一机一密预注册 | 
| authType | integer | 否 | 认证加密方式 | 通信协议为MQTT开放协议时非必须,其余必须 | 0:AES128 | 
| encrypted | integer | 否 | 数据是否加密 | 通信协议为MQTT开放协议时非必须,其余必须 | 0:不加密, 1:加密 | 
2.1.2 云云对接:accessType = 2
| 参数名称 | 类型 | 是否必须 | 名称 | 参数值 | 
|---|
| netType | integer | 是 | 网络类型 | 0:WI-FI, 1:移动蜂窝数据, 2:以太网, 4:NB-IOT, -1:其他 | 
| protocol | integer | 是 | 通信协议 | 3:电信CTWING | 
| ctwingAppId | string | 是 | 电信应用ID |  | 
| ctwingAppKey | string | 是 | 电信应用key |  | 
| ctwingAppSecret | string | 是 | 电信应用密钥 |  | 
| ctwingMasterKey | string | 是 | 电信Masterkey |  | 
| ctwingProductId | string | 是 | 电信产品productId |  | 
| ctwingPayloadFormat | integer | 是 | 电信产品数据格式 | 0:电信非透传, 1:电信透传 | 
2.1.3 网关接入:accessType = 3
| 参数名称 | 类型 | 是否必须 | 名称 | 参数值 | 
|---|
| securityType | integer | 是 | 安全类型 | 0:一型一密免注册, 1:一型一密预注册, 2:一机一密预注册 | 
| gatewayProtocol | integer | 是 | 通信协议 | 0:Zigbee, 1:Lora, 2:自定义 | 
2.2 产品为网关:deviceType = 1
| 参数名称 | 类型 | 是否必须 | 名称 | 参数值 | 
|---|
| netType | integer | 是 | 网络类型 | 0:WI-FI, 1:移动蜂窝数据, 2:以太网, 4:NB-IOT, -1:其他 | 
| protocol | integer | 是 | 通信协议 | 1:MQTT | 
| securityType | integer | 是 | 安全类型 | 0:一型一密免注册, 1:一型一密预注册, 2:一机一密预注册 | 
| authType | integer | 是 | 认证加密方式 | 0:AES128 | 
| encrypted | integer | 是 | 数据是否加密 | 0:不加密, 1:加密 | 
响应参数
| 名称 | 类型 | 说明 | 
|---|
| code | string | 响应码 | 
| msg | string | 响应码说明 | 
| data | object | 响应内容 | 
data 说明
| 参数名称 | 类型 | 名称 | 参数 | 
|---|
| productId | string | 产品productId |  | 
| productKey | string | 产品密钥 |  | 
| name | string | 产品名称 |  | 
| accessType | integer | 接入类型 | 1:设备直连, 2:云云对接, 3:网关接入 | 
| netType | integer | 网络类型 | 0:WI-FI, 1:移动蜂窝数据, 2:以太网, 4:NB-IOT, -1:其他 | 
| protocol | integer | 协议类型 | 0:TCP, 1:MQTT, 2:MQTT开放协议, 3:电信CTWING | 
| deviceType | integer | 设备类型 | 0:设备, 1:网关 | 
| securityType | integer | 安全类型 | 0:一型一密免注册, 1:一型一密预注册, 2:一机一密预注册 | 
| authType | integer | 认证类型 | 0:AES128 | 
| encrypted | integer | 是否加密 | 0:不加密, 1:加密 | 
| payloadFormat | integer | 数据格式 | 0:透传, 1:非透传 | 
| dataFormat | integer | 消息格式 | 0:十六进制, 1:Json, 2:自定义 | 
| productDesc | string | 产品描述 |  | 
| createAt | string | 创建时间 |  | 
| deviceNum | integer | 产品设备数 |  | 
示例
1、产品为设备:设备直连
请求示例
{
    "name":"OpenAPIV2产品MQTT测试001",
    "deviceType":0,
    "accessType":1,
    "payloadFormat":1,
    "dataFormat":0,
    "authType":0,
    "encrypted":0,
    "netType":0,
    "protocol":1,
    "securityType":1
}
响应示例
{
    "code": "8001",
    "msg": "操作成功",
    "data": {
        "productId": "98FF3568",
        "productKey": "FD2BC404DDA7840C6126B84259689BA3",
        "name": "OpenAPIV2产品MQTT测试001",
        "accessType": 1,
        "netType": 0,
        "protocol": 1,
        "deviceType": 0,
        "securityType": 1,
        "authType": 0,
        "encrypted": 0,
        "payloadFormat": 1,
        "dataFormat": 0,
        "productDesc": null,
        "createAt": "2022-12-14 11:08:09",
        "deviceNum": 0
    }
}
2、产品为设备:云云对接
请求示例
{
    "name":"OpenAPIV2产品Ctwing测试001",
    "deviceType":0,
    "accessType":2,
    "payloadFormat":1,
    "dataFormat":2,
    "authType":0,
    "encrypted":0,
    "netType":0,
    "protocol":3,
    "ctwingAppId":"67844",
    "ctwingAppKey":"WTazSGDqTuh",
    "ctwingAppSecret":"Cx6E1ccFn3",
    "ctwingMasterKey":"2d2b8c70eadc4e56b35de494b85319f4",
    "ctwingProductId":"15495260",
    "ctwingPayloadFormat":0
}
响应示例
{
    "code": "8001",
    "msg": "操作成功",
    "data": {
        "productId": "78D5BFFA",
        "productKey": "514D12A9F605634EBD19E0B573B54D41",
        "name": "OpenAPIV2产品Ctwing测试001",
        "accessType": 2,
        "netType": 0,
        "protocol": 3,
        "deviceType": 0,
        "securityType": null,
        "authType": null,
        "encrypted": null,
        "payloadFormat": 1,
        "dataFormat": 2,
        "productDesc": null,
        "createAt": "2022-12-14 11:27:54",
        "deviceNum": 0
    }
}
3、产品为设备:网关接入
请求示例
{
    "name":"OpenAPIV2产品网关接入测试001",
    "deviceType":0,
    "accessType":3,
    "payloadFormat":1,
    "dataFormat":1,
    "securityType":1,
    "gatewayProtocol":1
}
响应示例
{
    "code": "8001",
    "msg": "操作成功",
    "data": {
        "productId": "11E1E03F",
        "productKey": "64A4A764F37EFBEFAC05B1DF9EC9091B",
        "name": "OpenAPIV2产品网关接入测试001",
        "accessType": 3,
        "netType": null,
        "protocol": 1,
        "deviceType": 0,
        "securityType": 1,
        "authType": null,
        "encrypted": null,
        "payloadFormat": 1,
        "dataFormat": 1,
        "productDesc": null,
        "createAt": "2022-12-14 11:33:56",
        "deviceNum": 0
    }
}
4、产品为网关
请求示例
{
    "name":"OpenAPIV2产品节点网关测试001",
    "deviceType":1,
    "accessType":1,
    "payloadFormat":1,
    "dataFormat":0,
    "netType":0,
    "protocol":1,
    "securityType":1,
    "authType":0,
    "encrypted":0
}
响应示例
{
    "code": "8001",
    "msg": "操作成功",
    "data": {
        "productId": "59D3C6A3",
        "productKey": "675F55777B069113F7D3FFA6F9129E0A",
        "name": "OpenAPIV2产品节点网关测试001",
        "accessType": 1,
        "netType": 0,
        "protocol": 1,
        "deviceType": 1,
        "securityType": 1,
        "authType": 0,
        "encrypted": 0,
        "payloadFormat": 1,
        "dataFormat": 0,
        "productDesc": null,
        "createAt": "2022-12-14 11:39:22",
        "deviceNum": 0
    }
}
错误码
| code | 描述 | 
|---|
| 66001 | 添加产品失败 | 
| 66003 | 产品名称不符合格式 | 
| 66004 | 产品描述超出限制 | 
| 66005 | 接入方式错误 | 
编辑产品
请求地址: /openApi/v2/product/edit
传参方式: POST
备注: 无
请求参数
Body:
| 参数名称 | 类型 | 是否必须 | 名称 | 备注 | 
|---|
| productId | string | 是 | 产品productId |  | 
| name | string | 是 | 产品名称 |  | 
| productDesc | string | 否 | 产品说明 | 长度限制100个字符以内 | 
响应参数
| 名称 | 类型 | 说明 | 
|---|
| code | string | 响应码 | 
| msg | string | 响应码说明 | 
| data | object | 响应内容 | 
请求示例
{
  "productId": "98FF3568",
  "name":"OpenAPIV2产品MQTT测试0011",
  "productDesc": "api编辑产品"
}
响应示例
{
    "code": "8001",
    "msg": "操作成功",
    "data": true
}
错误码
| code | 描述 | 
|---|
| 60004 | 产品不存在 | 
| 66003 | 产品名称不符合格式 | 
| 66004 | 产品描述超出限制 | 
删除产品
请求地址: /openApi/v2/product/delete
传参方式: POST
备注: 无
请求参数
Body:
| 参数名称 | 类型 | 是否必须 | 名称 | 备注 | 
|---|
| productId | string | 是 | 产品productId |  | 
响应参数
| 名称 | 类型 | 说明 | 
|---|
| code | string | 响应码 | 
| msg | string | 响应码说明 | 
| data | object | 响应内容 | 
请求示例
{
  "productId": "8A0F0491"
}
响应示例
{
  "code": "8001",
  "msg": "操作成功",
  "data": true
}
错误码
| code | 描述 | 
|---|
| 60004 | 产品不存在 | 
| 66002 | 删除产品失败 | 
查询产品详情
请求地址: /openApi/v2/product/query
传参方式: POST
备注: 无
请求参数
Body:
| 参数名称 | 类型 | 是否必须 | 名称 | 备注 | 
|---|
| productId | string | 是 | 产品productId |  | 
响应参数
| 名称 | 类型 | 说明 | 
|---|
| code | string | 响应码 | 
| msg | string | 响应码说明 | 
| data | object | 响应内容 | 
data 说明
| 参数名称 | 类型 | 名称 | 参数 | 
|---|
| productId | string | 产品productId |  | 
| productKey | string | 产品密钥 |  | 
| name | string | 产品名称 |  | 
| accessType | integer | 接入类型 | 1:设备直连, 2:云云对接, 3:网关接入 | 
| netType | integer | 网络类型 | 0:WI-FI, 1:移动蜂窝数据, 2:以太网, 4:NB-IOT, -1:其他 | 
| protocol | integer | 协议类型 | 0:TCP, 1:MQTT, 2:MQTT开放协议, 3:电信CTWING | 
| deviceType | integer | 设备类型 | 0:设备, 1:网关 | 
| securityType | integer | 安全类型 | 0:一型一密免注册, 1:一型一密预注册, 2:一机一密预注册 | 
| authType | integer | 认证类型 | 0:AES128 | 
| encrypted | integer | 是否加密 | 0:不加密, 1:加密 | 
| payloadFormat | integer | 数据格式 | 0:透传, 1:非透传 | 
| dataFormat | integer | 消息格式 | 0:十六进制, 1:Json, 2:自定义 | 
| productDesc | string | 产品描述 |  | 
| createAt | string | 创建时间 |  | 
| deviceNum | integer | 产品设备数 |  | 
请求示例
{
    "productId":"98FF3568"
}
响应示例
{
    "code": "8001",
    "msg": "操作成功",
    "data": {
        "productId": "98FF3568",
        "productKey": "FD2BC404DDA7840C6126B84259689BA3",
        "name": "OpenAPIV2产品MQTT测试001",
        "accessType": 1,
        "netType": 0,
        "protocol": 1,
        "deviceType": 0,
        "securityType": 1,
        "authType": 0,
        "encrypted": 0,
        "payloadFormat": 1,
        "dataFormat": 0,
        "productDesc": null,
        "createAt": "2022-12-14 11:08:09",
        "deviceNum": 0
    }
}
错误码
获取产品列表
请求地址: /openApi/v2/product/list
传参方式: POST
备注: 无
请求参数
Body:
| 参数名称 | 类型 | 是否必须 | 名称 | 备注 | 
|---|
| page | integer | 否 | 页数 | 最小值为1,默认值为1 | 
| pageSize | integer | 否 | 分页数 | 最小值为1,最大值为100,默认值为10 | 
响应参数
| 名称 | 类型 | 说明 | 
|---|
| code | string | 响应码 | 
| msg | string | 响应码说明 | 
| data | object | 响应内容 | 
data 说明
| 参数名称 | 类型 | 名称 | 备注 | 
|---|
| records | object[] | 分页列表 |  | 
| current | integer | 当前页 |  | 
| size | integer | 分页数 |  | 
| total | integer | 总页数 |  | 
records 说明
| 参数名称 | 类型 | 名称 | 参数 | 
|---|
| productId | string | 产品productId | 
| productKey | string | 产品密钥 | 
| name | string | 产品名称 | 
| accessType | integer | 接入类型 | 1:设备直连, 2:云云对接, 3:网关接入 | 
| netType | integer | 网络类型 | 0:WI-FI, 1:移动蜂窝数据, 2:以太网, 4:NB-IOT, -1:其他 | 
| protocol | integer | 协议类型 | 0:TCP, 1:MQTT, 2:MQTT开放协议, 3:电信CTWING | 
| deviceType | integer | 设备类型 | 0:设备, 1:网关 | 
| securityType | integer | 安全类型 | 0:一型一密免注册, 1:一型一密预注册, 2:一机一密预注册 | 
| authType | integer | 认证类型 | 0:AES128 | 
| encrypted | integer | 是否加密 | 0:不加密, 1:加密 | 
| payloadFormat | integer | 数据格式 | 0:透传, 1:非透传 | 
| dataFormat | integer | 消息格式 | 0:十六进制, 1:Json, 2:自定义 | 
| productDesc | string | 产品描述 | 
| createAt | string | 创建时间 | 
| deviceNum | integer | 产品设备数 | 
请求示例
{
  "page": 1,
  "pageSize": 100
}
响应示例
{
    "code": "8001",
    "msg": "操作成功",
    "data": {
        "records": [
            {
                "productId": "A66AF6D8",
                "productKey": "6D63E72964F24B076D44689949242FB5",
                "name": "OpenAPIV2产品MQTT测试002",
                "accessType": 1,
                "netType": 0,
                "protocol": 1,
                "deviceType": 0,
                "securityType": 1,
                "authType": 0,
                "encrypted": 0,
                "payloadFormat": 1,
                "dataFormat": 0,
                "productDesc": null,
                "createAt": "2022-12-14 15:17:26",
                "deviceNum": 0
            }
        ],
        "current": 1,
        "size": 1,
        "total": 30
    }
}
获取产品物模型tsl
请求地址: /openApi/v2/product/getTsl
传参方式: POST
备注: 无
请求参数
Body:
| 参数名称 | 类型 | 是否必须 | 名称 | 备注 | 
|---|
| productId | string | 是 | 产品productId |  | 
响应参数
| 名称 | 类型 | 说明 | 
|---|
| code | string | 响应码 | 
| msg | string | 响应码说明 | 
| data | object | 响应内容 | 
data 说明
| 参数名称 | 类型 | 名称 | 备注 | 
|---|
| modelId | string | 物模型id | 
| productId | string | 产品productId | 
| productName | string | 产品名称 | 
| draftModelMetaData | string | 物模型草稿 | 
| modelMetaData | string | 已发布的物模型 | 
| draftAnalyzeScript | string | 解析脚本草稿 | 
| analyzeScript | string | 已发布的解析脚本 | 
请求示例
{
  "productId": "1286A6CA"
}
响应示例
{
    "code": "8001",
    "msg": "操作成功",
    "data": {
        "modelId": "636b1cd6b55f7227a27e5861",
        "productId": "1286A6CA",
        "productName": "测试物模型非透传json格式",
        "draftModelMetaData": "{\"profile\":{\"version\":\"1.0\",\"productKey\":\"40CE563F93E598FEF3A78E636D54B340\",\"productModelId\":\"636b1cd6b55f7227a27e5861\"},\"properties\":[{\"identifier\":\"test_int11\",\"name\":\"test_int11\",\"dataType\":{\"type\":\"int32\",\"spec\":{}},\"accessMode\":\"r\"},{\"identifier\":\"test_int\",\"identifierOld\":\"test_int1\",\"name\":\"test_int\",\"dataType\":{\"type\":\"int32\",\"spec\":{\"min\":\"1\",\"max\":\"100\",\"step\":\"1\",\"unit\":\"\"}},\"accessMode\":\"rw\"},{\"identifier\":\"ttttest_bool\",\"identifierOld\":\"tttest_bool\",\"name\":\"ttttest_bool\",\"dataType\":{\"type\":\"bool\",\"spec\":{\"0\":\"关2\",\"1\":\"开2\"}},\"accessMode\":\"rw\"}],\"events\":[{\"identifier\":\"q\",\"identifierOld\":\"q\",\"name\":\"q\",\"type\":\"info\",\"outputData\":[{\"identifier\":\"q\",\"identifierOld\":\"q\",\"name\":\"qq\",\"dataType\":{\"type\":\"int32\",\"spec\":{}}},{\"identifier\":\"q1\",\"name\":\"11\",\"dataType\":{\"type\":\"int32\",\"spec\":{}}}]}],\"services\":[{\"identifier\":\"qqqp\",\"identifierOld\":\"qqqp\",\"name\":\"qq\",\"callType\":\"async\",\"inputData\":[{\"identifier\":\"11\",\"identifierOld\":\"11\",\"name\":\"11\",\"dataType\":{\"type\":\"int32\",\"spec\":{}}},{\"identifier\":\"2\",\"name\":\"22\",\"dataType\":{\"type\":\"int32\",\"spec\":{}}}],\"outputData\":[{\"identifier\":\"3\",\"identifierOld\":\"3\",\"name\":\"33\",\"dataType\":{\"type\":\"float\",\"spec\":{}}}]}]}",
        "modelMetaData": "{\"profile\":{\"version\":\"1.0\",\"productKey\":\"40CE563F93E598FEF3A78E636D54B340\",\"productModelId\":\"636b1cd6b55f7227a27e5861\"},\"properties\":[{\"identifier\":\"test_int11\",\"name\":\"test_int11\",\"dataType\":{\"type\":\"int32\",\"spec\":{}},\"accessMode\":\"r\"},{\"identifier\":\"test_int\",\"identifierOld\":\"test_int1\",\"name\":\"test_int\",\"dataType\":{\"type\":\"int32\",\"spec\":{\"min\":\"1\",\"max\":\"100\",\"step\":\"1\",\"unit\":\"\"}},\"accessMode\":\"rw\"},{\"identifier\":\"ttttest_bool\",\"identifierOld\":\"tttest_bool\",\"name\":\"ttttest_bool\",\"dataType\":{\"type\":\"bool\",\"spec\":{\"0\":\"关2\",\"1\":\"开2\"}},\"accessMode\":\"rw\"}],\"events\":[{\"identifier\":\"q\",\"identifierOld\":\"q\",\"name\":\"q\",\"type\":\"info\",\"outputData\":[{\"identifier\":\"q\",\"identifierOld\":\"q\",\"name\":\"qq\",\"dataType\":{\"type\":\"int32\",\"spec\":{}}},{\"identifier\":\"q1\",\"name\":\"11\",\"dataType\":{\"type\":\"int32\",\"spec\":{}}}]}],\"services\":[{\"identifier\":\"qqqp\",\"identifierOld\":\"qqqp\",\"name\":\"qq\",\"callType\":\"async\",\"inputData\":[{\"identifier\":\"11\",\"identifierOld\":\"11\",\"name\":\"11\",\"dataType\":{\"type\":\"int32\",\"spec\":{}}},{\"identifier\":\"22\",\"identifierOld\":\"22\",\"name\":\"22\",\"dataType\":{\"type\":\"int32\",\"spec\":{}}}],\"outputData\":[{\"identifier\":\"3\",\"name\":\"33\",\"dataType\":{\"type\":\"float\",\"spec\":{}}}]}]}",
        "draftAnalyzeScript": "/**\n * 上行16进制字符串转物模型JSON入口\n * \n*/\nfunction rawDataToProtocol(strString) {\n// todo hex to jsonString    var jsonMap = new Object();\n    return jsonMap;\n}\n\n/**\n * 下行json格式数据转十六进制字符串入口\n * \n*/\nfunction protocolToRawData(json) {\n// todo json to hexStringvar hexString = \"\"    return hexString;\n}\n",
        "analyzeScript": null
    }
}
错误码
获取产品下相关的Topic
请求地址: /openApi/v2/product/getTopic
传参方式: POST
备注: 无
请求参数
Body:
| 参数名称 | 类型 | 是否必须 | 名称 | 备注 | 
|---|
| productId | string | 是 | 产品productId |  | 
| nodeEui | string | 否 | 设备号 | 传nodeEui就具体到设备,不传就加通配符 | 
响应参数
| 名称 | 类型 | 说明 | 
|---|
| code | string | 响应码 | 
| msg | string | 响应码说明 | 
| data | object | 响应内容 | 
data 说明
| 参数名称 | 类型 | 名称 | 备注 | 
|---|
| nodeTopic | MqttTopic[] | 设备topic |  | 
| baseTopic | MqttTopic[] | 基础通信topic |  | 
| throughTopic | MqttTopic[] | 透传调试topic |  | 
| modelTopic | MqttTopic[] | 物模型jsonTopic |  | 
| modelHexTopic | MqttTopic[] | 物模型hexTopic |  | 
| customTopic | MqttTopic[] | 自定义topic |  | 
| childTopic | MqttTopic[] | 子设备topic |  | 
MqttTopic 说明
| 参数名称 | 类型 | 名称 | 参数 | 
|---|
| function | string | 功能 |  | 
| topic | string | topic |  | 
| permission | integer | 操作权限 | 1:订阅, 2:发布, | 
| desc | string | 描述 |  | 
| subStatus | integer | 订阅状态 | 1:已订阅, 2:未订阅, 3:发布 | 
示例
1、只传入产品productId
请求示例
{
  "productId": "A66AF6D8"
}
响应示例
{
    "code": "8001",
    "msg": "操作成功",
    "data": {
        "nodeTopic": null,
        "baseTopic": [
            {
                "function": "认证",
                "topic": "/sys/device/auth",
                "permission": 2,
                "desc": "用于设备认证",
                "subStatus": null
            },
            {
                "function": "入网",
                "topic": "/sys/device/join",
                "permission": 2,
                "desc": "用于设备入网",
                "subStatus": null
            },
            {
                "function": "数据下行",
                "topic": "/sys/8C3E488A/A66AF6D8/${deviceId}/downlink",
                "permission": 1,
                "desc": "平台下行topic(用于认证,心跳,入网的回复)",
                "subStatus": null
            },
            {
                "function": "心跳",
                "topic": "/sys/8C3E488A/A66AF6D8/${deviceId}/heartbeat",
                "permission": 2,
                "desc": "用于心跳上报",
                "subStatus": null
            },
            {
                "function": "固件上报",
                "topic": "/sys/8C3E488A/A66AF6D8/${deviceId}/firmware_report",
                "permission": 2,
                "desc": "用于固件上报",
                "subStatus": null
            },
            {
                "function": "固件上报应答",
                "topic": "/sys/8C3E488A/A66AF6D8/${deviceId}/firmware_report_ack",
                "permission": 1,
                "desc": "固件上报服务端应答",
                "subStatus": null
            },
            {
                "function": "固件查询",
                "topic": "/sys/8C3E488A/A66AF6D8/${deviceId}/ask_firmware",
                "permission": 1,
                "desc": "平台查询设备固件信息",
                "subStatus": null
            },
            {
                "function": "升级通知",
                "topic": "/sys/8C3E488A/A66AF6D8/${deviceId}/ota_notify",
                "permission": 1,
                "desc": "平台通知设备升级",
                "subStatus": null
            },
            {
                "function": "升级通知回复",
                "topic": "/sys/8C3E488A/A66AF6D8/${deviceId}/ota_notify_ack",
                "permission": 2,
                "desc": "设备收到ota通知之后回复平台",
                "subStatus": null
            },
            {
                "function": "查询配置",
                "topic": "/sys/8C3E488A/A66AF6D8/${deviceId}/ask_config",
                "permission": 1,
                "desc": "平台查询设备配置信息",
                "subStatus": null
            },
            {
                "function": "配置上报",
                "topic": "/sys/8C3E488A/A66AF6D8/${deviceId}/config_report",
                "permission": 2,
                "desc": "设备上报配置以及平台下发配置的回复均使用该topic",
                "subStatus": null
            },
            {
                "function": "下发配置",
                "topic": "/sys/8C3E488A/A66AF6D8/${deviceId}/down_config",
                "permission": 1,
                "desc": "平台给设备下发配置",
                "subStatus": null
            },
            {
                "function": "下发订阅通配",
                "topic": "/sys/8C3E488A/A66AF6D8/${deviceId}/#",
                "permission": 1,
                "desc": "下发订阅通配",
                "subStatus": null
            }
        ],
        "throughTopic": null,
        "modelTopic": null,
        "modelHexTopic": [
            {
                "function": "设备属性、事件上报",
                "topic": "/sys/8C3E488A/A66AF6D8/${deviceId}/model/hex/report",
                "permission": 2,
                "desc": "设备物模型数据上报",
                "subStatus": null
            },
            {
                "function": "平台应答",
                "topic": "/sys/8C3E488A/A66AF6D8/${deviceId}/model/hex/report_ack",
                "permission": 1,
                "desc": "平台响应设备数据上报",
                "subStatus": null
            },
            {
                "function": "平台下发属性查询、属性设置、服务调用",
                "topic": "/sys/8C3E488A/A66AF6D8/${deviceId}/model/hex/downlink",
                "permission": 1,
                "desc": "平台下发数据",
                "subStatus": null
            },
            {
                "function": "设备应答",
                "topic": "/sys/8C3E488A/A66AF6D8/${deviceId}/model/hex/downlink_ack",
                "permission": 2,
                "desc": "设备响应平台下发数据",
                "subStatus": null
            }
        ],
        "customTopic": [
            {
                "function": null,
                "topic": "/sys/sub/8C3E488A/A66AF6D8/${deviceId}/custom/pubTest",
                "permission": 1,
                "desc": "test",
                "subStatus": null
            },
            {
                "function": null,
                "topic": "/sys/pub/8C3E488A/A66AF6D8/${deviceId}/custom/testPub",
                "permission": 2,
                "desc": "test1",
                "subStatus": null
            }
        ],
        "childTopic": null
    }
}
2、传入产品productId和设备号
请求示例
{
  "productId": "620cafcb",
  "nodeEui":"0001"
}
响应示例
{
    "code": "8001",
    "msg": "操作成功",
    "data": {
        "nodeTopic": [
            {
                "function": "认证",
                "topic": "/sys/device/auth",
                "permission": 2,
                "desc": "用于设备认证",
                "subStatus": 3
            },
            {
                "function": "入网",
                "topic": "/sys/device/join",
                "permission": 2,
                "desc": "用于设备入网",
                "subStatus": 3
            },
            {
                "function": "数据下行",
                "topic": "/sys/8C3E488A/A66AF6D8/0001/downlink",
                "permission": 1,
                "desc": "平台下行topic(用于认证,心跳,入网的回复)",
                "subStatus": 2
            },
            {
                "function": "心跳",
                "topic": "/sys/8C3E488A/A66AF6D8/0001/heartbeat",
                "permission": 2,
                "desc": "用于心跳上报",
                "subStatus": 3
            },
            {
                "function": "固件上报",
                "topic": "/sys/8C3E488A/A66AF6D8/0001/firmware_report",
                "permission": 2,
                "desc": "用于固件上报",
                "subStatus": 3
            },
            {
                "function": "固件上报应答",
                "topic": "/sys/8C3E488A/A66AF6D8/0001/firmware_report_ack",
                "permission": 1,
                "desc": "固件上报服务端应答",
                "subStatus": 2
            },
            {
                "function": "固件查询",
                "topic": "/sys/8C3E488A/A66AF6D8/0001/ask_firmware",
                "permission": 1,
                "desc": "平台查询设备固件信息",
                "subStatus": 2
            },
            {
                "function": "升级通知",
                "topic": "/sys/8C3E488A/A66AF6D8/0001/ota_notify",
                "permission": 1,
                "desc": "平台通知设备升级",
                "subStatus": 2
            },
            {
                "function": "升级通知回复",
                "topic": "/sys/8C3E488A/A66AF6D8/0001/ota_notify_ack",
                "permission": 2,
                "desc": "设备收到ota通知之后回复平台",
                "subStatus": 3
            },
            {
                "function": "查询配置",
                "topic": "/sys/8C3E488A/A66AF6D8/0001/ask_config",
                "permission": 1,
                "desc": "平台查询设备配置信息",
                "subStatus": 2
            },
            {
                "function": "配置上报",
                "topic": "/sys/8C3E488A/A66AF6D8/0001/config_report",
                "permission": 2,
                "desc": "设备上报配置以及平台下发配置的回复均使用该topic",
                "subStatus": 3
            },
            {
                "function": "下发配置",
                "topic": "/sys/8C3E488A/A66AF6D8/0001/down_config",
                "permission": 1,
                "desc": "平台给设备下发配置",
                "subStatus": 2
            },
            {
                "function": "下发订阅通配",
                "topic": "/sys/8C3E488A/A66AF6D8/0001/#",
                "permission": 1,
                "desc": "下发订阅通配",
                "subStatus": 2
            },
            {
                "function": "设备属性、事件上报",
                "topic": "/sys/8C3E488A/A66AF6D8/0001/model/hex/report",
                "permission": 2,
                "desc": "设备物模型数据上报",
                "subStatus": 3
            },
            {
                "function": "平台应答",
                "topic": "/sys/8C3E488A/A66AF6D8/0001/model/hex/report_ack",
                "permission": 1,
                "desc": "平台响应设备数据上报",
                "subStatus": 2
            },
            {
                "function": "平台下发属性查询、属性设置、服务调用",
                "topic": "/sys/8C3E488A/A66AF6D8/0001/model/hex/downlink",
                "permission": 1,
                "desc": "平台下发数据",
                "subStatus": 2
            },
            {
                "function": "设备应答",
                "topic": "/sys/8C3E488A/A66AF6D8/0001/model/hex/downlink_ack",
                "permission": 2,
                "desc": "设备响应平台下发数据",
                "subStatus": 3
            },
            {
                "function": null,
                "topic": "/sys/pub/8C3E488A/A66AF6D8/0001/custom/testPub",
                "permission": 2,
                "desc": "test1",
                "subStatus": 3
            },
            {
                "function": null,
                "topic": "/sys/sub/8C3E488A/A66AF6D8/0001/custom/pubTest",
                "permission": 1,
                "desc": "test",
                "subStatus": 2
            }
        ],
        "baseTopic": null,
        "throughTopic": null,
        "modelTopic": null,
        "modelHexTopic": null,
        "customTopic": null,
        "childTopic": null
    }
}
错误码
| code | 描述 | 
|---|
| 60004 | 产品不存在 | 
| 60005 | 设备不存在 | 
设备管理
添加设备
请求地址: /openApi/v2/node/add
传参方式: POST
备注: 无
请求参数
Body:
| 参数名称 | 类型 | 是否必须 | 名称 | 备注 | 
|---|
| productId | string | 是 | 产品productId |  | 
| nodeEui | string | 是 | 设备号 | - 设备号在系统内具有产品下唯一性,支持英文字母、数字,长度限制4-32个字符; - 电信CTWING设备ID必须为15位数字。 | 
| deviceName | string | 是 | 设备名称 | 长度4-30个字符,中文算2个字符 | 
响应参数
| 名称 | 类型 | 说明 | 
|---|
| code | string | 响应码 | 
| msg | string | 响应码说明 | 
| data | object | 响应内容 | 
data 说明
| 参数名称 | 类型 | 名称 | 备注 | 
|---|
| nodeId | string | 设备id | 
| nodeEui | string | 设备号 | 
| deviceSecret | string | 设备Secret | 
| productId | string | 产品productId | 
| productKey | string | 产品密钥 | 
请求示例
{
    "productId":"5207C002",
    "nodeEui":"mqttDevice002",
    "deviceName":"qqqq"
}
响应示例
{
    "code": "8001",
    "msg": "操作成功",
    "data": {
        "nodeId": "639ac12f8ceff74a36d5b66f",
        "nodeEui": "mqttDevice002",
        "deviceSecret": "DA1BA501D81C5C7777ED3C4B1456F704",
        "productId": "5207C002",
        "productKey": "82E9AD63B2C7D26A4B24355BE631E847"
    }
}
错误码
| code | 描述 | 
|---|
| 60004 | 产品不存在 | 
| 61003 | 设备已存在 | 
| 61004 | 设备号不符合规范 | 
| 61005 | 设备备注名称不符合规范 | 
编辑设备
请求地址: /openApi/v2/node/edit
传参方式: POST
备注: 无
请求参数
Body:
| 参数名称 | 类型 | 是否必须 | 名称 | 备注 | 
|---|
| nodeId | string | 是 | 设备id |  | 
| deviceName | string | 是 | 设备名称 | 长度4-30个字符,中文算2个字符 | 
响应参数
| 名称 | 类型 | 说明 | 
|---|
| code | string | 响应码 | 
| msg | string | 响应码说明 | 
| data | object | 响应内容 | 
请求示例
{
    "nodeId":"639abdbdc7df4956b4ec4aa9",
    "deviceName":"修改设备名称测试"
}
响应示例
{
    "code": "8001",
    "msg": "操作成功",
    "data": true
}
错误码
| code | 描述 | 
|---|
| 60005 | 设备不存在 | 
| 61005 | 设备备注名称不符合规范 | 
删除设备
请求地址: /openApi/v2/node/delete
传参方式: POST
备注: 无
请求参数
Body:
| 参数名称 | 类型 | 是否必须 | 名称 | 备注 | 
|---|
| nodeId | string | 是 | 设备id |  | 
响应参数
| 名称 | 类型 | 说明 | 
|---|
| code | string | 响应码 | 
| msg | string | 响应码说明 | 
| data | object | 响应内容 | 
请求示例
{
    "nodeId":"639abdbdc7df4956b4ec4aa9"
}
响应示例
{
  "code": "8001",
  "msg": "操作成功",
  "data": true
}
错误码
分页查询设备
请求地址: /openApi/v2/node/list
传参方式: POST
备注: 无
请求参数
Body:
| 参数名称 | 类型 | 是否必须 | 名称 | 备注 | 
|---|
| page | integer | 否 | 页数 | 最小值为1,默认值为1 | 
| pageSize | integer | 否 | 分页数 | 最小值为1,最大值为100,默认值为10 | 
| connected | integer | 否 | 在线状态 | 0:离线, 1:在线, -1:未激活 | 
| enableStatus | integer | 否 | 启用状态 | 0:禁用, 1:启用 | 
| productId | string | 否 | 产品productId | 
| nodeEui | string | 否 | 设备号 | 
响应参数
| 名称 | 类型 | 说明 | 
|---|
| code | string | 响应码 | 
| msg | string | 响应码说明 | 
| data | object | 响应内容 | 
data 说明
| 参数名称 | 类型 | 名称 | 备注 | 
|---|
| records | object[] | 分页列表 |  | 
| current | integer | 当前页 |  | 
| size | integer | 分页数 |  | 
| total | integer | 总页数 |  | 
records 说明
| 参数名称 | 类型 | 名称 | 参数 | 
|---|
| nodeId | string | 设备id | 
| nodeEui | string | 设备号 | 
| deviceName | string | 设备名称 | 
| deviceSecret | string | 设备密钥 | 
| status | integer | 设备启用状态 | 0:禁用, 1:启用 | 
| connected | integer | 在线状态 | -1:未激活, 0:离线, 1:在线 | 
| productId | string | 所属产品productId | 
| productKey | string | 所属产品productKey | 
| productName | string | 所属产品名称 | 
| deviceType | integer | 节点类型 | 0:设备, 1:网关 | 
| encrypted | integer | 是否加密 | 0:不加密, 1:加密 | 
| upNodeId | string | 子设备对应的网关设备的设备号 | 
| subDeviceCount | integer | 网关子设备数量 | 
| relationState | integer | 网关与子设备的关系 | 0:未关联, 1:已关联, 2:解除中 | 
| gatewayStatus | integer | 子设备所属网关设备的状态 | -1:未激活, 0:离线, 1:在线 | 
| localLogReport | integer | 本地日志上报使能 | 0:禁用, 1:启用 | 
| otaType | integer | 设备升级方式 | 0:tcp, 1:http | 
| hardVer | string | 硬件版本 | 
| softVer | string | 软件版本 | 
| versionReportAt | string | 版本上报时间 | 
| createAt | string | 创建时间 | 
| activeAt | string | 智能设备激活时间 | 
| lastJoinAt | string | 智能设备最近一次入网时间 | 
| lastDisconnectAt | string | 智能设备最近一次离线时间 | 
| lastHeartbeatAt | string | 智能设备最近一次心跳时间 | 
请求示例
{
    "page":1,
    "pageSize":1
}
响应示例
{
    "code": "8001",
    "msg": "操作成功",
    "data": {
        "records": [
            {
                "nodeId": "639ac1e78ceff74a36d5b671",
                "nodeEui": "mqttDevice00",
                "deviceName": "mqttDevice00",
                "deviceSecret": "E2947CCCEBA91B04E85CF4A9359F7DE5",
                "status": 1,
                "connected": -1,
                "productId": "5207C002",
                "productKey": "82E9AD63B2C7D26A4B24355BE631E847",
                "productName": "OpenAPI产品MQTT测试001",
                "deviceType": 0,
                "encrypted": 0,
                "upNodeId": null,
                "subDeviceCount": 0,
                "relationState": 0,
                "gatewayStatus": null,
                "localLogReport": 1,
                "otaType": null,
                "hardVer": null,
                "softVer": null,
                "versionReportAt": null,
                "createAt": "2022-12-15 14:42:47",
                "activeAt": null,
                "lastJoinAt": null,
                "lastDisconnectAt": null,
                "lastHeartbeatAt": null
            }
        ],
        "current": 1,
        "size": 1,
        "total": 38
    }
}
设备详情
请求地址: /openApi/v2/node/query
传参方式: POST
备注:
- 无设备id时,设备号和产品productId必填
- 当设备id、设备号、产品productId都有值的情况下,以设备id为准
请求参数
Body:
| 参数名称 | 类型 | 是否必须 | 名称 | 备注 | 
|---|
| nodeId | string | 否 | 设备id |  | 
| nodeEui | string | 否 | 设备号 |  | 
| productId | string | 否 | 产品productId |  | 
响应参数
| 名称 | 类型 | 说明 | 
|---|
| code | string | 响应码 | 
| msg | string | 响应码说明 | 
| data | object | 响应内容 | 
data 说明
| 参数名称 | 类型 | 名称 | 参数 | 
|---|
| nodeId | string | 设备id | 
| nodeEui | string | 设备号 | 
| deviceName | string | 设备名称 | 
| deviceSecret | string | 设备密钥 | 
| status | integer | 设备启用状态 | 0:禁用, 1:启用 | 
| connected | integer | 在线状态 | -1:未激活, 0:离线, 1:在线 | 
| productId | string | 所属产品productId | 
| productKey | string | 所属产品productKey | 
| productName | string | 所属产品名称 | 
| deviceType | integer | 节点类型 | 0:设备, 1:网关 | 
| encrypted | integer | 是否加密 | 0:不加密, 1:加密 | 
| upNodeId | string | 子设备对应的网关设备的设备号 | 
| subDeviceCount | integer | 网关子设备数量 | 
| relationState | integer | 网关与子设备的关系 | 0:未关联, 1:已关联, 2:解除中 | 
| gatewayStatus | integer | 子设备所属网关设备的状态 | -1:未激活, 0:离线, 1:在线 | 
| localLogReport | integer | 本地日志上报使能 | 0:禁用, 1:启用 | 
| otaType | integer | 设备升级方式 | 0:tcp, 1:http | 
| hardVer | string | 硬件版本 | 
| softVer | string | 软件版本 | 
| versionReportAt | string | 版本上报时间 | 
| createAt | string | 创建时间 | 
| activeAt | string | 智能设备激活时间 | 
| lastJoinAt | string | 智能设备最近一次入网时间 | 
| lastDisconnectAt | string | 智能设备最近一次离线时间 | 
| lastHeartbeatAt | string | 智能设备最近一次心跳时间 | 
请求示例
{
    "nodeId":"639ac12f8ceff74a36d5b66f"
}
响应示例
{
    "code": "8001",
    "msg": "操作成功",
    "data": {
        "nodeId": "639ac12f8ceff74a36d5b66f",
        "nodeEui": "mqttDevice002",
        "deviceName": "qqqq",
        "deviceSecret": "DA1BA501D81C5C7777ED3C4B1456F704",
        "status": 1,
        "connected": -1,
        "productId": "5207C002",
        "productKey": "82E9AD63B2C7D26A4B24355BE631E847",
        "productName": "OpenAPI产品MQTT测试001",
        "deviceType": 0,
        "encrypted": 0,
        "localLogReport": 1,
        "otaType": null,
        "hardVer": null,
        "softVer": null,
        "versionReportAt": null,
        "createAt": "2022-12-15 14:39:43",
        "activeAt": null,
        "lastJoinAt": null,
        "lastDisconnectAt": null,
        "lastHeartbeatAt": null
    }
}
错误码
自定义topic在线调试
请求地址: /openApi/v2/node/customInstruct
传参方式: POST
备注: 无
请求参数
Body:
| 参数名称 | 类型 | 是否必须 | 名称 | 备注 | 
|---|
| nodeId | string | 是 | 设备id |  | 
| instruction | string | 是 | 命令 |  | 
| topic | string | 是 | 自定义topic |  | 
响应参数
| 名称 | 类型 | 说明 | 
|---|
| code | string | 响应码 | 
| msg | string | 响应码说明 | 
| data | object | 响应内容 | 
请求示例
{
  "nodeId": "639ac12f8ceff74a36d5b66f",
  "instruction": "FFFF",
  "topic": "/sys/sub/8C3E488A/A98F5743/lnmqtt0007/custom/test"
}
响应示例
{
  "code": "8001",
  "msg": "操作成功",
  "data": true
}
错误码
| code | 描述 | 
|---|
| 60005 | 设备不存在 | 
| 62001 | 设备不在线 | 
| 62002 | 设备已禁用 | 
普通透传在线调试
请求地址: /openApi/v2/node/instruct
传参方式: POST
备注: 无
请求参数
Body:
| 参数名称 | 类型 | 是否必须 | 名称 | 参数值 | 
|---|
| nodeId | string | 是 | 设备id |  | 
| instruction | string | 是 | 命令 |  | 
| instructionType | string | 是 | 命令类型 | 0:十六进制, 1:字符串 | 
响应参数
| 名称 | 类型 | 说明 | 
|---|
| code | string | 响应码 | 
| msg | string | 响应码说明 | 
| data | object | 响应内容 | 
请求示例
{
  "nodeId": "639ac12f8ceff74a36d5b66f",
  "instruction": "FFFF",
  "instructionType": 0
}
响应示例
{
  "code": "8001",
  "msg": "操作成功",
  "data":  true
}
错误码
| code | 描述 | 
|---|
| 60005 | 设备不存在 | 
| 62001 | 设备不在线 | 
| 62002 | 设备已禁用 | 
下发配置
请求地址: /openApi/v2/node/config
传参方式: POST
备注: 无
请求参数
Body:
| 参数名称 | 类型 | 是否必须 | 名称 | 备注 | 参数值 | 
|---|
| nodeId | string | 是 | 设备id |  |  | 
| configData | string | 是 | 配置数据 |  |  | 
响应参数
| 名称 | 类型 | 说明 | 
|---|
| code | string | 响应码 | 
| msg | string | 响应码说明 | 
| data | object | 响应内容 | 
请求示例
{
  "nodeId": "620cafcb40539518e647cb39",
  "configData": "{data:\"1231\"}"  
}
响应示例
{
  "code": "8001",
  "msg": "操作成功",
  "data":  true
}
错误码
| code | 描述 | 
|---|
| 60005 | 设备不存在 | 
| 62001 | 设备不在线 | 
| 62002 | 设备已禁用 | 
| 62003 | 不支持的命令类型 | 
获取配置
请求地址: /openApi/v2/node/getConfig
传参方式: POST
备注: 无
请求参数
Body:
| 参数名称 | 类型 | 是否必须 | 名称 | 备注 | 
|---|
| nodeId | string | 是 | 设备id |  | 
响应参数
| 名称 | 类型 | 说明 | 
|---|
| code | string | 响应码 | 
| msg | string | 响应码说明 | 
| data | object | 响应内容 | 
请求示例
{
  "nodeId": "620cafcb40539518e647cb39"
}
响应示例
{
  "code": "8001",
  "msg": "操作成功",
  "data":  true
}
错误码
| code | 描述 | 
|---|
| 60005 | 设备不存在 | 
| 62001 | 设备不在线 | 
| 62002 | 设备已禁用 | 
批量导入设备
请求地址: /openApi/v2/node/batchAdd
传参方式: POST
备注: 同一个appId上次任务未结束,不能创建新任务
请求参数
Body:
| 参数名称 | 类型 | 是否必须 | 名称 | 备注 | 
|---|
| productId | string | 是 | 产品productId |  | 
| nodes | nodeDetail[] | 是 | 设备列表 |  | 
nodeDetail 说明
| 参数名称 | 类型 | 是否必须 | 名称 | 备注 | 
|---|
| nodeEui | string | 是 | 设备号 |  | 
| deviceName | string | 是 | 设备名称 |  | 
响应参数
| 名称 | 类型 | 说明 | 
|---|
| code | string | 响应码 | 
| msg | string | 响应码说明 | 
| data | object | 响应内容 | 
data 说明
| 参数名称 | 类型 | 名称 | 备注 | 
|---|
| applyId | string | 批次号 |  | 
请求示例
{
    "productId": "5207C002",
    "nodes": [{
            "nodeEui": "mqttDevice004",
            "deviceName": "004"
        },
        {
            "nodeEui": "mqttDevice005",
            "deviceName": "005"
        },
        {
            "nodeEui": "mqttDevice006",
            "deviceName": "006"
        },
        {
            "nodeEui": "mqttDevice008",
            "deviceName": "008"
        }
    ]
}
响应示例
{
    "code": "8001",
    "msg": "操作成功",
    "data": {
        "applyId": "af14f07d-8961-4a81-bd82-af29d7ca6432"
    }
}
错误码
| code | 描述 | 
|---|
| 61001 | 设备导入失败 | 
| 61002 | 导入超过上限 | 
| 61003 | 设备已存在 | 
| 61004 | 设备号不符合规范 | 
| 61005 | 设备备注名称不符合规范 | 
批量导入设备批次号查询接口
请求地址: /openApi/v2/node/queryBatchAddInfo
传参方式: POST
备注: 无
请求参数
Body:
| 参数名称 | 类型 | 是否必须 | 名称 | 备注 | 
|---|
| page | integer | 否 | 页数 | 最小值为1,默认值为1 | 
| pageSize | integer | 否 | 分页数 | 最小值为1,最大值为100,默认值为10 | 
| applyId | string | 是 | 批量插入批次号 |  | 
响应参数
| 名称 | 类型 | 说明 | 
|---|
| code | string | 响应码 | 
| msg | string | 响应码说明 | 
| data | object | 响应内容 | 
data 说明
| 参数名称 | 类型 | 名称 | 参数 | 
|---|
| successList | successList[] | 成功列表(分页) | 
| failList | failList[] | 失败列表(不分页) | 
| importStatus | integer | 导入状态 | -1:导入失败, 0:导入中, 1:导入完成 | 
successList 说明
| 参数名称 | 类型 | 名称 | 备注 | 
|---|
| records | object[] | 分页列表 |  | 
| current | integer | 当前页 |  | 
| size | integer | 分页数 |  | 
| total | integer | 总页数 |  | 
records 说明
| 参数名称 | 类型 | 名称 | 备注 | 
|---|
| nodeId | string | 设备id | 
| nodeEui | string | 设备号 | 
| deviceSecret | string | 设备Secret | 
| productId | string | 产品productId | 
| productKey | string | 产品密钥 | 
failList 说明
| 参数名称 | 类型 | 名称 | 备注 | 
|---|
| nodeEui | string | 设备号 | 
| deviceName | string | 设备名称 | 
| failReason | string | 失败原因 | 
请求示例
{
   "applyId":"7a6c09b5-b565-49fa-99b5-5d3c5facfbdf"
}
响应示例
{
    "code": "8001",
    "msg": "操作成功",
    "data": {
        "importStatus": 1,
        "successList": {
            "records": [
                {
                    "nodeId": "63a16d278e5f354034bd69a3",
                    "nodeEui": "mqttDevice008",
                    "deviceSecret": "B3DB80BB4DE5302E3C6739715E0C1B8D",
                    "productId": "5207C002",
                    "productKey": "82E9AD63B2C7D26A4B24355BE631E847"
                }
            ],
            "current": 1,
            "size": 10,
            "total": 1
        },
        "failList": [
            {
                "nodeEui": "mqttDevice009",
                "deviceName": "009",
                "failReason": "deviceName格式非法"
            }
        ]
    }
}
子设备管理
批量添加或解除子设备
请求地址: /openApi/v2/subDevice/batchAddOrRelieve
传参方式: POST
备注: 无
请求参数
Body:
| 参数名称 | 类型 | 是否必须 | 名称 | 参数值 | 
|---|
| gatewayNodeId | string | 是 | 网关设备id |  | 
| subdeviceNodeIds | string[] | 是 | 子设备id集合 |  | 
| type | boolean | 是 | 操作类型 | true:批量添加子设备, false:批量解除子设备 | 
响应参数
| 名称 | 类型 | 说明 | 
|---|
| code | string | 响应码 | 
| msg | string | 响应码说明 | 
| data | object | 响应内容 | 
请求示例
{
    "gatewayNodeId": "63a18ad6d2c8a94fe4cd337b",
    "subdeviceNodeIds": ["63a18b1ad2c8a94fe4cd3382", "63a18b25d2c8a94fe4cd3385"],
    "type": true
}
响应示例
{
    "code": "8001",
    "msg": "操作成功",
    "data": true
}
错误码
| code | 描述 | 
|---|
| 60005 | 设备不存在 | 
| 61014 | 子设备已存在关联网关 | 
分页查询子设备列表
请求地址: /openApi/v2/subDevice/list
传参方式: POST
备注: 无
请求参数
Body:
| 参数名称 | 类型 | 是否必须 | 名称 | 备注 | 
|---|
| page | integer | 否 | 页数 | 最小值为1,默认值为1 | 
| pageSize | integer | 否 | 分页数 | 最小值为1,最大值为100,默认值为10 | 
| nodeId | string | 是 | 网关设备id | 
响应参数
| 名称 | 类型 | 说明 | 
|---|
| code | string | 响应码 | 
| msg | string | 响应码说明 | 
| data | object | 响应内容 | 
data 说明
| 参数名称 | 类型 | 名称 | 备注 | 
|---|
| records | object[] | 分页列表 |  | 
| current | integer | 当前页 |  | 
| size | integer | 分页数 |  | 
| total | integer | 总页数 |  | 
records 说明
| 参数名称 | 类型 | 名称 | 备注 | 
|---|
| nodeId | string | 设备id | 
| nodeEui | string | 设备号 | 
| deviceName | string | 设备名称 | 
| deviceSecret | string | 设备密钥 | 
| status | integer | 设备启用状态 | 0:禁用, 1:启用 | 
| connected | integer | 在线状态 | -1:未激活, 0:离线, 1:在线 | 
| productId | string | 所属产品productId | 
| productKey | string | 所属产品productKey | 
| productName | string | 所属产品名称 | 
| deviceType | integer | 节点类型 | 0:设备, 1:网关 | 
| encrypted | integer | 是否加密 | 0:不加密, 1:加密 | 
| upNodeId | string | 子设备对应的网关设备的设备号 | 
| subDeviceCount | integer | 网关子设备数量 | 
| relationState | integer | 网关与子设备的关系 | 0:未关联, 1:已关联, 2:解除中 | 
| gatewayStatus | integer | 子设备所属网关设备的状态 | -1:未激活, 0:离线, 1:在线 | 
| localLogReport | integer | 本地日志上报使能 | 0:禁用, 1:启用 | 
| otaType | integer | 设备升级方式 | 0:tcp, 1:http | 
| hardVer | string | 硬件版本 | 
| softVer | string | 软件版本 | 
| versionReportAt | string | 版本上报时间 | 
| createAt | string | 创建时间 | 
| activeAt | string | 智能设备激活时间 | 
| lastJoinAt | string | 智能设备最近一次入网时间 | 
| lastDisconnectAt | string | 智能设备最近一次离线时间 | 
| lastHeartbeatAt | string | 智能设备最近一次心跳时间 | 
请求示例
{
    "nodeId": "63a18ad6d2c8a94fe4cd337b",
    "page":1,
    "pageSize": 10
}
响应示例
{
    "code": "8001",
    "msg": "操作成功",
    "data": {
        "records": [
            {
                "nodeId": "63a18b1ad2c8a94fe4cd3382",
                "nodeEui": "test0001",
                "deviceName": "test0001",
                "deviceSecret": "4BE6AC005A6586EBD805FEF56DB39902",
                "status": 1,
                "connected": -1,
                "productId": "2141E406",
                "productKey": "34A3B1D8C42C698F0469DCEF0BB51C5F",
                "productName": "网关子设备产品",
                "deviceType": 0,
                "encrypted": null,
                "upNodeId": "8C3E488A-CFFC2801-testGateWay",
                "subDeviceCount": 0,
                "relationState": 0,
                "gatewayStatus": null,
                "localLogReport": 1,
                "otaType": null,
                "hardVer": null,
                "softVer": null,
                "versionReportAt": null,
                "createAt": "2022-12-20 18:14:50",
                "activeAt": null,
                "lastJoinAt": null,
                "lastDisconnectAt": null,
                "lastHeartbeatAt": null
            }
        ],
        "current": 1,
        "size": 10,
        "total": 1
    }
}
设备分组管理
添加分组
请求地址: /openApi/v2/deviceGroup/add
传参方式: POST
备注: 无
请求参数
Body:
| 参数名称 | 类型 | 是否必须 | 名称 | 备注 | 参数值 | 
|---|
| name | string | 是 | 分组名称 | 支持中文、英文字母、数字和下划线(_),长度限制4~30个字符,中文算2个字符,企业下唯一 |  | 
| level | integer | 是 | 层级 |  | 0:1级分组, 1:2级分组, 2:三级分组 | 
| num | string | 否 | 分组编号 |  |  | 
| parentNum | string | 否 | 所属父分组的分组编号 | 在创建2级和3级分组时为必填 |  | 
| description | string | 否 | 分组描述 | 长度限制100个字符以内 |  | 
响应参数
| 名称 | 类型 | 说明 | 
|---|
| code | string | 响应码 | 
| msg | string | 响应码说明 | 
| data | object | 响应内容 | 
data 说明
| 参数名称 | 类型 | 名称 | 参数 | 
|---|
| groupId | string | 分组id |  | 
| name | string | 分组名称 |  | 
| num | string | 分组编号 |  | 
| parentNum | string | 所属父分组的分组编号 |  | 
| level | integer | 层级 | 0:1级分组, 1:2级分组, 2:三级分组 | 
| description | string | 分组描述 |  | 
| createAt | string | 创建时间 |  | 
请求示例
{
  "name": "2222",
  "level": "0"
}
响应示例
{
    "code": "8001",
    "msg": "操作成功",
    "data": {
        "groupId": "63a171660191fd310a0b12fb",
        "name": "2222",
        "num": "YmUce1VAKFziSANQ",
        "parentNum": null,
        "level": 1,
        "description": null,
        "createAt": "2022-12-20 16:25:10"
    }
}
错误码
| code | 描述 | 
|---|
| 61006 | 添加设备分组失败 | 
| 61008 | 设备分组名称不合法 | 
| 61009 | 分组描述不合法 | 
| 61010 | 分组所属父级不存在 | 
编辑分组
请求地址: /openApi/v2/deviceGroup/edit
传参方式: POST
备注: 无
请求参数
Body:
| 参数名称 | 类型 | 是否必须 | 名称 | 备注 | 
|---|
| groupId | string | 是 | 分组id |  | 
| name | string | 是 | 分组名称 | 支持中文、英文字母、数字和下划线(_),长度限制4~30个字符,中文算2个字符,企业下唯一 | 
| description | string | 否 | 分组描述 | 长度限制100个字符以内 | 
响应参数
| 名称 | 类型 | 说明 | 
|---|
| code | string | 响应码 | 
| msg | string | 响应码说明 | 
| data | object | 响应内容 | 
请求示例
{
   "groupId": "63a1753a257ea9623fc1744e",
   "name":"3333",
   "description":"修改名称"
}
响应示例
{
    "code": "8001",
    "msg": "操作成功",
    "data": true
}
错误码
| code | 描述 | 
|---|
| 61008 | 设备分组名称不合法 | 
| 61009 | 分组描述不合法 | 
| 61010 | 分组所属父级不存在 | 
删除分组
请求地址: /openApi/v2/deviceGroup/delete
传参方式: POST
备注: 无
请求参数
Body:
| 参数名称 | 类型 | 是否必须 | 名称 | 备注 | 
|---|
| groupId | string | 是 | 分组id |  | 
响应参数
| 名称 | 类型 | 说明 | 
|---|
| code | string | 响应码 | 
| msg | string | 响应码说明 | 
| data | object | 响应内容 | 
请求示例
{
   "groupId": "63a1753a257ea9623fc1744e"
}
响应示例
{
    "code": "8001",
    "msg": "操作成功",
    "data": true
}
错误码
查询分组列表
请求地址: /openApi/v2/deviceGroup/list
传参方式: POST
备注: 无
响应参数
| 名称 | 类型 | 说明 | 
|---|
| code | string | 响应码 | 
| msg | string | 响应码说明 | 
| data | object | 响应内容 | 
data 说明
| 参数名称 | 类型 | 名称 | 参数 | 
|---|
| groupId | string | 分组id |  | 
| name | string | 分组名称 |  | 
| num | string | 分组编号 |  | 
| parentNum | string | 父级编号 |  | 
| level | integer | 层级 | 0:1级分组, 1:2级分组, 2:三级分组 | 
| description | string | 分组描述 |  | 
| createAt | string | 创建时间 |  | 
响应示例
{
    "code": "8001",
    "msg": "操作成功",
    "data": [
        {
            "groupId": "63637542f2c16c3e2ec2bb3a",
            "name": "测试分组",
            "num": "0rekF4H0cZ8IM5nK",
            "parentNum": null,
            "level": 1,
            "description": null,
            "createAt": "2022-11-03 16:01:06"
        },
        {
            "groupId": "63637551f2c16c3e2ec2bb3b",
            "name": "二级分组",
            "num": "Z4LSklduJ8LJ3gPC",
            "parentNum": "0rekF4H0cZ8IM5nK",
            "level": 2,
            "description": null,
            "createAt": "2022-11-03 16:01:21"
        },
        {
            "groupId": "6363755cf2c16c3e2ec2bb3c",
            "name": "三级分组",
            "num": "s60B3vEOiLEbvpQO",
            "parentNum": "Z4LSklduJ8LJ3gPC",
            "level": 3,
            "description": null,
            "createAt": "2022-11-03 16:01:32"
        }
       ]
}
查询分组下设备
请求地址: /openApi/v2/deviceGroup/listDeviceUderGroup
传参方式: POST
备注: 无
请求参数
Body:
| 参数名称 | 类型 | 是否必须 | 名称 | 备注 | 
|---|
| page | integer | 否 | 页数 | 最小值为1,默认值为1 | 
| pageSize | integer | 否 | 分页数 | 最小值为1,最大值为100,默认值为10 | 
| groupId | string | 是 | 分组id |  | 
| productId | string | 否 | 产品productId |  | 
| connect | string | 否 | 连接状态 | -1:未激活, 0:离线, 1:在线 | 
响应参数
| 名称 | 类型 | 说明 | 
|---|
| code | string | 响应码 | 
| msg | string | 响应码说明 | 
| data | object | 响应内容 | 
data 说明
| 参数名称 | 类型 | 名称 | 备注 | 
|---|
| records | object[] | 分页列表 |  | 
| current | integer | 当前页 |  | 
| size | integer | 分页数 |  | 
| total | integer | 总页数 |  | 
records 说明
| 参数名称 | 类型 | 名称 | 参数 | 
|---|
| nodeId | string | 设备id |  | 
| nodeEui | string | 设备号 |  | 
| deviceName | string | 设备名称 |  | 
| deviceSecret | string | 设备密钥 |  | 
| status | integer | 设备启用状态 | 0:禁用, 1:启用 | 
| connected | integer | 在线状态 | -1:未激活, 0:离线, 1:在线 | 
| productId | string | 所属产品productId |  | 
| productKey | string | 所属产品productKey |  | 
| productName | string | 所属产品名称 |  | 
| deviceType | integer | 节点类型 | 0:设备, 1:网关 | 
| encrypted | integer | 是否加密 | 0:不加密, 1:加密 | 
| upNodeId | string | 子设备对应的网关设备的设备号 |  | 
| subDeviceCount | integer | 网关子设备数量 |  | 
| relationState | integer | 网关与子设备的关系 | 0:未关联, 1:已关联br>2:解除中 | 
| gatewayStatus | integer | 子设备所属网关设备的状态 | -1:未激活, 0:离线, 1:在线 | 
| localLogReport | integer | 本地日志上报使能 | 0:禁用, 1:启用 | 
| otaType | integer | 设备升级方式 | 0:tcp, 1:http | 
| hardVer | string | 硬件版本 |  | 
| softVer | string | 软件版本 |  | 
| versionReportAt | string | 版本上报时间 |  | 
| createAt | string | 创建时间 |  | 
| activeAt | string | 智能设备激活时间 |  | 
| lastJoinAt | string | 智能设备最近一次入网时间 |  | 
| lastDisconnectAt | string | 智能设备最近一次离线时间 |  | 
| lastHeartbeatAt | string | 智能设备最近一次心跳时间 |  | 
请求示例
{
   "groupId": "63a1753a257ea9623fc1744e"
}
响应示例
{
    "code": "8001",
    "msg": "操作成功",
    "data": {
        "records": [
            {
                "nodeId": "63a12afd209856044ba0962d",
                "nodeEui": "mqttDevice003",
                "deviceName": "qqqq",
                "deviceSecret": "0A79EC7E6D5C3AAD0140F6B92039D42F",
                "status": 1,
                "connected": -1,
                "productId": "5207C002",
                "productKey": "82E9AD63B2C7D26A4B24355BE631E847",
                "productName": "OpenAPI产品MQTT测试001",
                "deviceType": 0,
                "encrypted": 0,
                "upNodeId": null,
                "subDeviceCount": 0,
                "relationState": 0,
                "gatewayStatus": null,
                "localLogReport": 1,
                "otaType": null,
                "hardVer": null,
                "softVer": null,
                "versionReportAt": null,
                "createAt": "2022-12-20 11:24:45",
                "activeAt": null,
                "lastJoinAt": null,
                "lastDisconnectAt": null,
                "lastHeartbeatAt": null
            }
        ],
        "current": 1,
        "size": 10,
        "total": 1
    }
}
批量添加设备到分组
请求地址: /openApi/v2/deviceGroup/batchAddDevice
传参方式: POST
备注: 无
请求参数
Body:
| 参数名称 | 类型 | 是否必须 | 名称 | 备注 | 
|---|
| nodeIds | string | 是 | 设备id组 | 设备id用逗号(,)连接的字符串 | 
| groupId | string | 是 | 分组id |  | 
响应参数
| 名称 | 类型 | 说明 | 
|---|
| code | string | 响应码 | 
| msg | string | 响应码说明 | 
| data | string | 响应内容,返回成功和失败数量 | 
请求示例
{
    "nodeIds": "6180a3bf7571341cc90f7b55,6180aa63ea679609a7aa24e7",
    "groupId": "61e8f9a501f61368266f0deb"
}
响应示例
{
    "code": "8001",
    "msg": "操作成功",
    "data": "操作结果:{success: 2,fail: 0}"
}
错误码
| code | 描述 | 
|---|
| 61011 | 设备所属分组超过上限 | 
| 61012 | 分组添加设备超过上限 | 
| 61013 | 设备已添加至分组,不可重复添加 | 
移除分组下面的设备
请求地址: /openApi/v2/deviceGroup/removeDevice
传参方式: POST
备注: 无
请求参数
Body:
| 参数名称 | 类型 | 是否必须 | 名称 | 备注 | 
|---|
| nodeId | string | 是 | 设备id |  | 
| groupId | string | 是 | 分组id |  | 
响应参数
| 名称 | 类型 | 说明 | 
|---|
| code | string | 响应码 | 
| msg | string | 响应码说明 | 
| data | object | 响应内容 | 
请求示例
{
   "groupId": "63a1753a257ea9623fc1744e",
   "nodeId":"63a16d278e5f354034bd69a3"
}
响应示例
{
    "code": "8001",
    "msg": "操作成功",
    "data": true
}
错误码
| code | 描述 | 
|---|
| 60005 | 设备不存在 | 
| 60009 | 数据不存在 | 
查询设备分组
请求地址: /openApi/v2/deviceGroup/listGroupUnderDevice
传参方式: POST
备注: 无
请求参数
Body:
| 参数名称 | 类型 | 是否必须 | 名称 | 备注 | 
|---|
| nodeId | string | 是 | 设备id |  | 
响应参数
| 名称 | 类型 | 说明 | 
|---|
| code | string | 响应码 | 
| msg | string | 响应码说明 | 
| data | object | 响应内容 | 
data 说明
| 参数名称 | 类型 | 名称 | 参数 | 
|---|
| groupId | string | 分组id |  | 
| name | string | 分组名称 |  | 
| num | string | 分组编号 |  | 
| parentNum | string | 父级编号 |  | 
| level | integer | 层级 | 0:1级分组, 1:2级分组, 2:三级分组 | 
| description | string | 分组描述 | 
| createAt | string | 创建时间 | 
请求示例
{
   "nodeId": "63a12afd209856044ba0962d"
}
响应示例
{
    "code": "8001",
    "msg": "操作成功",
    "data": [
        {
            "groupId": "63a1753a257ea9623fc1744e",
            "name": "3333",
            "num": "R6YzRTXaynS4Xjep",
            "parentNum": null,
            "level": 1,
            "description": "修改名称",
            "createAt": "2022-12-20 16:41:30"
        }
    ]
}
错误码
物模型
属性设置
请求地址: /openApi/v2/model/propertySet
传参方式: POST
备注:
- 当产品为物模型产品时,下发指令设置产品属性
- 调用前提,产品已定义物模型,且设置的属性为可写可读属性
请求参数
Body:
| 参数名称 | 类型 | 是否必须 | 名称 | 备注 | 
|---|
| nodeId | string | 是 | 设备id |  | 
| identifier | string | 是 | 属性标识 |  | 
| value | string | 是 | 属性值 |  | 
响应参数
| 名称 | 类型 | 说明 | 
|---|
| code | string | 响应码 | 
| msg | string | 响应码说明 | 
| data | object | 响应内容 | 
请求示例
{
    "nodeId": "63a264fba4e4394a03996af1",
    "identifier": "prop_int",
    "value": "10"
}
响应示例
{
    "code": "8001",
    "msg": "操作成功",
    "data": true
}
错误码
| code | 描述 | 
|---|
| 60005 | 设备不存在 | 
| 68001 | 产品未定义物模型 | 
| 62001 | 设备不在线 | 
| 60003 | 参数错误 | 
| 68005 | 属性设置错误 | 
属性查询
请求地址: /openApi/v2/model/propertyAsk
传参方式: POST
备注:
- 当产品为物模型产品时,下发指令查询产品属性
- 调用前提,产品已定义物模型,且查询的属性已定义
- 设备收到平台下发属性查询指令后应该通过属性上报方式上报属性
请求参数
Body:
| 参数名称 | 类型 | 是否必须 | 名称 | 备注 | 
|---|
| nodeId | string | 是 | 设备id |  | 
| identifier | string | 是 | 属性标识 |  | 
响应参数
| 名称 | 类型 | 说明 | 
|---|
| code | string | 响应码 | 
| msg | string | 响应码说明 | 
| data | object | 响应内容 | 
请求示例
{
    "nodeId":"63a264fba4e4394a03996af1",
    "identifier":"prop_int"
}
响应示例
{
    "code": "8001",
    "msg": "操作成功",
    "data": true
}
错误码
| code | 描述 | 
|---|
| 60005 | 设备不存在 | 
| 68001 | 产品未定义物模型 | 
| 62001 | 设备不在线 | 
| 60003 | 参数错误 | 
服务调用
请求地址: /openApi/v2/model/serviceCall
传参方式: POST
备注:
- 当产品为物模型产品时,可以通过服务调用来进行指令下发;
- 服务调用分为同步调用和异步调用,异步调用立即返回结果,同步调用其结果会在10s内返回,如果10s后才返回结果,则返回结果和异步调用结果一致
- 调用前提,产品已定义物模型,并且调用的服务标识和参数和定义的一致
请求参数
Body:
| 参数名称 | 类型 | 是否必须 | 名称 | 备注 | 
|---|
| nodeId | string | 是 | 设备id |  | 
| identifier | string | 是 | 服务标识 |  | 
| value | string | 是 | 输入参数 | json格式,和定义服务的输入参数一致 | 
响应参数
| 名称 | 类型 | 说明 | 
|---|
| code | string | 响应码 | 
| msg | string | 响应码说明 | 
| data | object | 响应内容 | 
请求示例
{
    "nodeId":"63a264fba4e4394a03996af1",
    "identifier":"switch",
    "value":"{\"on\":15}"
}
响应示例
{
    "code": "8001",
    "msg": "操作成功",
    "data": true
}
错误码
| code | 描述 | 
|---|
| 60005 | 设备不存在 | 
| 68001 | 产品未定义物模型 | 
| 62001 | 设备不在线 | 
| 60003 | 参数错误 | 
| 68005 | 属性设置错误 | 
设备物模型属性列表查询
请求地址: /openApi/v2/model/getPropertyReportList
传参方式: POST
备注:
- 无设备id时,设备号和产品productId必填
- 当设备id、设备号、产品productId都有值的情况下,以设备id为准
请求参数
Body:
| 参数名称 | 类型 | 是否必须 | 名称 | 备注 | 
|---|
| nodeId | string | 否 | 设备id |  | 
| nodeEui | string | 否 | 设备号 |  | 
| productId | string | 否 | 产品productId | 
响应参数
| 名称 | 类型 | 说明 | 
|---|
| code | string | 响应码 | 
| msg | string | 响应码说明 | 
| data | object[] | 物模型属性列表 | 
data 说明
| 参数名称 | 类型 | 名称 | 备注 | 
|---|
| propertyId | string | 属性唯一id | 
| time | string | 属性上报时间 | 
| productId | string | 产品productId | 
| nodeEui | string | 设备号 | 
| identifier | string | 属性标识 | 
| accessMode | string | 读写模式 | 
| name | string | 属性名称 | 
| value | string | 属性值 | 
| label | string | 属性内容 | 属性为枚举、布尔格式时为value对应的内容,其他参数如有带单位的则为带单位的数据 | 
请求示例
{
    "nodeId":"63a2b7d3a4e4394a03996b26"
}
响应示例
{
    "code": "8001",
    "msg": "操作成功",
    "data": [
        {
            "propertyId": "681f47d7-ff8e-47a0-a69d-3c8062c95d1b",
            "time": "2022-12-21 15:38:00",
            "productId": "65451EFB",
            "nodeEui": "10MQTTH0005435",
            "identifier": "prop_bool",
            "accessMode": "rw",
            "name": "prop_bool",
            "value": "1"
            "label": "开"
        },
        {
            "propertyId": "67d343b1-eaf2-4a65-9e6a-e8130b246911",
            "time": "2022-12-21 15:38:00",
            "productId": "65451EFB",
            "nodeEui": "10MQTTH0005435",
            "identifier": "prop_float",
            "accessMode": "rw",
            "name": "prop_float",
            "value": "1.25",
            "label": "1.25"
        },
        {
            "propertyId": "e75158db-4554-458d-a46f-96717462d673",
            "time": "2022-12-21 15:38:00",
            "productId": "65451EFB",
            "nodeEui": "10MQTTH0005435",
            "identifier": "prop_int",
            "accessMode": "rw",
            "name": "prop_int",
            "value": "-16",
            "label": "-16"
        },
        {
            "propertyId": "0068db3a-c99c-490a-b208-f47dcea02410",
            "time": "2022-12-21 15:38:00",
            "productId": "65451EFB",
            "nodeEui": "10MQTTH0005435",
            "identifier": "uint8_prop",
            "accessMode": "rw",
            "name": "uint8_prop",
            "value": "255",
            "label": "255"
        }
    ]
}
错误码
查询同一属性历史列表
请求地址: /openApi/v2/model/getPropertyReportSingleList
传参方式: POST
备注:
- 无设备id时,设备号和产品productId必填
- 当设备id、设备号、产品productId都有值的情况下,以设备id为准
- 请求参数
Body:
| 参数名称 | 类型 | 是否必须 | 名称 | 备注 | 
|---|
| page | integer | 否 | 页数 | 最小值为1,默认值为1 | 
| pageSize | integer | 否 | 分页数 | 最小值为1,最大值为100,默认值为10 | 
| nodeId | string | 否 | 设备id |  | 
| nodeEui | string | 否 | 设备号 |  | 
| productId | string | 否 | 产品productId |  | 
| identifier | string | 是 | 属性标识 | 
| beginTime | string | 否 | 查询开始时间 | 默认当前时间前7天,最早为当前时间前30天 | 
| endTime | string | 否 | 查询结束时间 | 默认当前时间,开始时间有值时必填 | 
响应参数
| 名称 | 类型 | 说明 | 
|---|
| code | string | 响应码 | 
| msg | string | 响应码说明 | 
| data | object | 响应内容 | 
data 说明
| 参数名称 | 类型 | 名称 | 备注 | 
|---|
| records | object[] | 分页列表 |  | 
| current | integer | 当前页 |  | 
| size | integer | 分页数 |  | 
| total | integer | 总页数 |  | 
records 说明
| 参数名称 | 类型 | 名称 | 备注 | 
|---|
| propertyId | string | 属性唯一id | 
| time | string | 属性上报时间 | 
| productId | string | 产品productId | 
| nodeEui | string | 设备号 | 
| identifier | string | 属性标识 | 
| accessMode | string | 读写模式 | 
| name | string | 属性名称 | 
| value | string | 属性值 | 
请求示例
{
    "nodeId": "63e0c7bd5bb10716fadd1cd7",
    "identifier": "prop_bool",
    "page": 1,
    "pageSize": 10
}
响应示例
{
    "code": "8001",
    "msg": "操作成功",
    "data": {
        "records": [
            {
                "propertyId": "f3e51d76-cf68-4f11-b673-864bd987b196",
                "time": "2023-02-06 17:26:22",
                "productId": "AA30C505",
                "nodeEui": "20MQTT000507",
                "identifier": "prop_bool",
                "accessMode": "rw",
                "name": "prop_bool",
                "value": "0",
                "label": null
            }
        ],
        "current": 1,
        "size": 10,
        "total": 1
    }
}
错误码
分页查询服务调用
请求地址: /openApi/v2/model/getServiceCallList
传参方式: POST
备注:
- 无设备id时,设备号和产品productId必填
- 当设备id、设备号、产品productId都有值的情况下,以设备id为准
请求参数
Body:
| 参数名称 | 类型 | 是否必须 | 名称 | 备注 | 
|---|
| page | integer | 否 | 页数 | 最小值为1,默认值为1 | 
| pageSize | integer | 否 | 分页数 | 最小值为1,最大值为100,默认值为10 | 
| nodeId | string | 否 | 设备id |  | 
| nodeEui | string | 否 | 设备号 |  | 
| productId | string | 否 | 产品productId |  | 
| identifier | string | 是 | 服务标识 |  | 
| beginTime | string | 否 | 查询开始时间 | 默认当前时间前7天,最早为当前时间前30天 | 
| endTime | string | 否 | 查询结束时间 | 默认当前时间,开始时间有值时必填 | 
响应参数
| 名称 | 类型 | 说明 | 
|---|
| code | string | 响应码 | 
| msg | string | 响应码说明 | 
| data | object | 响应内容 | 
data 说明
| 参数名称 | 类型 | 名称 | 备注 | 
|---|
| records | object[] | 分页列表 |  | 
| current | integer | 当前页 |  | 
| size | integer | 分页数 |  | 
| total | integer | 总页数 |  | 
records 说明
| 参数名称 | 类型 | 名称 | 备注 | 
|---|
| serviceCallId | string | 服务调用唯一id | 
| time | string | 服务调用时间 | 
| productId | string | 产品productId | 
| nodeEui | string | 设备号 | 
| identifier | string | 服务标识 | 
| name | string | 服务名称 | 
| inputData | string | 服务调用输入 | 
| outputData | string | 服务调用输出 | 
请求示例
{
    "nodeId": "63e0c7bd5bb10716fadd1cd7",
    "identifier": "switch",
    "page": 1,
    "pageSize": 10
}
响应示例
{
    "code": "8001",
    "msg": "操作成功",
    "data": {
        "records": [
            {
                "serviceCallId": "562443c3-c109-40c1-940d-58f6127f2d37",
                "time": "2023-02-06 17:27:02",
                "productId": "AA30C505",
                "nodeEui": "20MQTT000507",
                "identifier": "switch",
                "name": "测试",
                "inputData": "{\"on\":\"100L/s\"}",
                "ouputData": null
            }
        ],
        "current": 1,
        "size": 10,
        "total": 1
    }
}
错误码
分页查询事件上报
请求地址: /openApi/v2/model/getEventReportList
传参方式: POST
备注:
- 无设备id时,设备号和产品productId必填
- 当设备id、设备号、产品productId都有值的情况下,以设备id为准
请求参数
Body:
| 参数名称 | 类型 | 是否必须 | 名称 | 备注 | 
|---|
| page | integer | 否 | 页数 | 最小值为1,默认值为1 | 
| pageSize | integer | 否 | 分页数 | 最小值为1,最大值为100,默认值为10 | 
| nodeId | string | 否 | 设备id |  | 
| nodeEui | string | 否 | 设备号 |  | 
| productId | string | 否 | 产品productId |  | 
| identifier | string | 是 | 事件标识 | 
| beginTime | string | 否 | 查询开始时间 | 默认当前时间前7天,最早为当前时间前30天 | 
| endTime | string | 否 | 查询结束时间 | 默认当前时间,开始时间有值时必填 | 
响应参数
| 名称 | 类型 | 说明 | 
|---|
| code | string | 响应码 | 
| msg | string | 响应码说明 | 
| data | object | 响应内容 | 
data 说明
| 参数名称 | 类型 | 名称 | 备注 | 
|---|
| records | object[] | 分页列表 |  | 
| current | integer | 当前页 |  | 
| size | integer | 分页数 |  | 
| total | integer | 总页数 |  | 
records 说明
| 参数名称 | 类型 | 名称 | 参数 | 
|---|
| eventId | string | 事件id | 
| time | string | 事件上报时间 | 
| productId | string | 产品productId | 
| nodeEui | string | 设备号 | 
| identifier | string | 事件标识 | 
| name | string | 名称 | 
| type | string | 类型 | warn:告警, erro:紧急, info:普通 | 
| outputData | string | 输出数据 | 
请求示例
{
    "nodeId": "63e0c7bd5bb10716fadd1cd7",
    "identifier": "TEST_EVENT",
    "page": 1,
    "pageSize": 10
}
响应示例
{
    "code": "8001",
    "msg": "操作成功",
    "data": {
        "records": [
            {
                "eventId": "1c030182-1091-4b18-859f-ace28c1711e1",
                "time": "2023-02-06 17:26:26",
                "productId": "AA30C505",
                "nodeEui": "20MQTT000507",
                "identifier": "TEST_EVENT",
                "name": "测试事件",
                "type": "warn",
                "ouputData": "{\"prop_int\":\"-70km/h\"}"
            }
        ],
        "current": 1,
        "size": 10,
        "total": 1
    }
}
错误码
OTA模块管理
添加OTA模块
请求地址: /openApi/v2/otaModule/add
传参方式: POST
备注: 无
请求参数
Body:
| 参数名称 | 类型 | 是否必须 | 名称 | 备注 | 
|---|
| productId | string | 是 | 产品productId |  | 
| module | string | 是 | 模块标识 | 支持英文字母、数字、点、中划线和下划线,长度限制64个字符以内 | 
| moduleName | string | 是 | 模块名称 | 支持中文、英文字母、数字、点、中划线和下划线,长度限制64个字符以内,中文算两个字符 | 
| moduleDesc | string | 否 | 模块描述 | 长度限制100个字符以内 | 
响应参数
| 名称 | 类型 | 说明 | 
|---|
| code | string | 响应码 | 
| msg | string | 响应码说明 | 
| data | object | 响应内容 | 
data 说明
| 参数名称 | 类型 | 名称 | 备注 | 
|---|
| module | string | 模块标识 | 
| moduleName | string | 模块名称 | 
| moduleDesc | string | 模块描述 | 
| productId | string | 产品productId | 
| productName | string | 产品名称 | 
| createAt | string | 创建时间 | 
请求示例
{
    "productId": "65451EFB",
    "module": "module001",
    "moduleName": "OPENAPI2测试",
    "moduleDesc": ""
}
响应示例
{
    "code": "8001",
    "msg": "操作成功",
    "data": {
        "module": "module001",
        "moduleName": "OPENAPI2测试",
        "productId": "65451EFB",
        "productName": "网关接入子设备HEX",
        "moduleDesc": "",
        "createAt": "2022-12-30 16:39:22"
    }
}
错误码
| code | 描述 | 
|---|
| 60004 | 产品不存在 | 
| 63030 | 模块已存在 | 
编辑OTA模块
请求地址: /openApi/v2/otaModule/edit
传参方式: POST
备注: 无
请求参数
Body:
| 参数名称 | 类型 | 是否必须 | 名称 | 备注 | 
|---|
| productId | string | 是 | 产品productId |  | 
| module | string | 是 | 模块标识 |  | 
| moduleName | string | 是 | 模块名称 | 支持中文、英文字母、数字、点号(.)、中划线(-)和下划线(_),长度限制64个字符以内,中文算两个字符 | 
| moduleDesc | string | 否 | 模块描述 | 长度限制100个字符以内 | 
响应参数
| 名称 | 类型 | 说明 | 
|---|
| code | string | 响应码 | 
| msg | string | 响应码说明 | 
| data | object | 响应内容 | 
请求示例
{
    "productId": "65451EFB",
    "module": "module001",
    "moduleName": "OPENAPI2测试1",
    "moduleDesc": "备注描述"
}
响应示例
{
    "code": "8001",
    "msg": "操作成功",
    "data": true
}
错误码
| code | 描述 | 
|---|
| 60004 | 产品不存在 | 
| 60020 | 模块不存在 | 
删除OTA模块
请求地址: /openApi/v2/otaModule/delete
传参方式: POST
备注: 无
请求参数
Body:
| 参数名称 | 类型 | 是否必须 | 名称 | 备注 | 
|---|
| productId | string | 是 | 产品productId |  | 
| module | string | 是 | 模块标识 |  | 
响应参数
| 名称 | 类型 | 说明 | 
|---|
| code | string | 响应码 | 
| msg | string | 响应码说明 | 
| data | object | 响应内容 | 
请求示例
{
    "productId": "65451EFB",
    "module": "module001"
}
响应示例
{
    "code": "8001",
    "msg": "操作成功",
    "data": true
}
错误码
查询OTA模块详情
请求地址: /openApi/v2/otaModule/query
传参方式: POST
备注: 无
请求参数
Body:
| 参数名称 | 类型 | 是否必须 | 名称 | 备注 | 
|---|
| productId | string | 是 | 产品productId |  | 
| module | string | 是 | 模块标识 |  | 
响应参数
| 名称 | 类型 | 说明 | 
|---|
| code | string | 响应码 | 
| msg | string | 响应码说明 | 
| data | object | 响应内容 | 
data 说明
| 参数名称 | 类型 | 名称 | 备注 | 
|---|
| module | string | 模块标识 | 
| moduleName | string | 模块名称 | 
| moduleDesc | string | 模块描述 | 
| productId | string | 产品productId | 
| productName | string | 产品名称 | 
| createAt | string | 创建时间 | 
请求示例
{
    "productId": "65451EFB",
    "module": "module001"
}
响应示例
{
    "code": "8001",
    "msg": "操作成功",
    "data": {
        "module": "module001",
        "moduleName": "OPENAPI2测试",
        "productId": "65451EFB",
        "productName": "网关接入子设备HEX",
        "moduleDesc": "",
        "createAt": "2022-12-30 16:39:22"
    }
}
错误码
模块分页查询
请求地址: /openApi/v2/otaModule/list
传参方式: POST
备注: 无
请求参数
Body:
| 参数名称 | 类型 | 是否必须 | 名称 | 备注 | 
|---|
| page | integer | 否 | 页数 | 最小值为1,默认值为1 | 
| pageSize | integer | 否 | 分页数 | 最小值为1,最大值为100,默认值为10 | 
| productId | string | 否 | 产品productId |  | 
| module | string | 否 | 模块标识 |  | 
响应参数
| 名称 | 类型 | 说明 | 
|---|
| code | string | 响应码 | 
| msg | string | 响应码说明 | 
| data | object | 响应内容 | 
data 说明
| 参数名称 | 类型 | 名称 | 备注 | 
|---|
| records | object[] | 分页列表 |  | 
| current | integer | 当前页 |  | 
| size | integer | 分页数 |  | 
| total | integer | 总页数 |  | 
records 说明
| 参数名称 | 类型 | 名称 | 备注 | 
|---|
| module | string | 模块标识 | 
| moduleName | string | 模块名称 | 
| moduleDesc | string | 模块描述 | 
| productId | string | 产品productId | 
| productName | string | 产品名称 | 
| createAt | string | 创建时间 | 
请求示例
{
    "module": "default",
    "productId": "7E0204D0",
    "page": 1,
    "pageSize": 10
}
响应示例
{
    "code": "8001",
    "msg": "操作成功",
    "data": {
        "records": [
            {
                "module": "default",
                "moduleName": "默认",
                "productId": "7E0204D0",
                "productName": "openapiMQTT非透传产品1",
                "moduleDesc": "默认模块不可删除",
                "createAt": "2022-12-28 08:45:12"
            }
        ],
        "current": 1,
        "size": 10,
        "total": 1
    }
}
OTA固件管理
添加小固件(表单格式)
请求地址: /openApi/v2/firmware/add
传参方式: POST
备注:
- 添加固件接口,sign值计算方法与通用签名计算方法不同,请参考如何调用API中form-data签名计算示例
- 该接口适合上传较小固件,大小限制在50MB以内
请求参数
| 参数名称 | 参数值 | 是否必须 | 备注 | 
|---|
| appId | 添加api应用生成的appId | 是 |  | 
| sign | 计算的签名值,参考签名计算示例 | 是 |  | 
| nonce | 随机数,可以使用随机数或者uuid | 是 |  | 
| authorization | 鉴权令牌,通过获取token接口获取 | 是 |  | 
| Content-Type | multipart/form-data | 是 |  | 
| 参数名称 | 类型 | 是否必须 | 名称 | 备注 | 参数值 | 
|---|
| name | string | 是 | 固件名称 | 支持中文、英文字母、数字、特殊字符(_-@()),中文算两个字符,长度限制为4-200个字符 | 
| productId | string | 是 | 产品productId |  | 
| softVer | string | 是 | 固件版本 | 支持英文字母、数字、点号(.)、中划线(-)和下划线(_),长度限制为64个字符以内 | 
| hardVer | string | 否 | 适配硬件版本 | 支持英文字母、数字、点号(.)、中划线(-)和下划线(_),长度限制为64个字符以内 | 
| module | string | 是 | 模块标识 |  | 
| remark | string | 否 | 固件描述 | 长度限制100个字符以内 | 
| firmwareType | integer | 是 | 固件包类型 |  | 1:整包, 2:差分包 | 
| sourceVersion | string | 否 | 源版本 | 固件包为差分包时必填,支持英文字母、数字、点号(.)、中划线(-)和下划线(_),长度限制为64个字符以内 | 
| file | file | 是 | 固件文件 |  | 
响应参数
| 名称 | 类型 | 说明 | 
|---|
| code | string | 响应码 | 
| msg | string | 响应码说明 | 
| data | object | 响应内容 | 
data 说明
| 参数名称 | 类型 | 名称 | 备注 | 
|---|
| firmwareId | string | 固件id |  | 
| createAt | string | 创建时间 |  | 
请求示例
name:测试固件
productId:8DC561D5
softVer:V1.0
hardVer:V2.0
module:default
remark:测试固件描述
firmwareType:1
sourceVersion:2345
file:[文件]
响应示例
{
    "code": "8001",
    "msg": "操作成功",
    "data": {
        "firmwareId": "602f4beb4e8bf61a7d516c23",
        "createAt": "2021-02-19 13:26:02"
    }
}
错误码
| code | 描述 | 
|---|
| 60004 | 产品不存在 | 
| 60010 | 文件不存在 | 
| 60020 | 模块不存在 | 
| 63004 | 固件大小超出限制 | 
| 63021 | 当前企业、产品、模块下,固件名称已存在 | 
| 63022 | 当前企业、产品、模块下,固件版本已存在 | 
| 63024 | 固件上传失败 | 
修改小固件(表单格式)
请求地址: /openApi/v2/firmware/edit
传参方式: POST
备注:
- 当固件管理下存在升级计划时,只能编辑固件名称和固件描述
- 不存在升级计划时,file可为空,此时不更新文件
请求参数
| 参数名称 | 参数值 | 是否必须 | 备注 | 
|---|
| appId | 添加api应用生成的appId | 是 |  | 
| sign | 计算的签名值,参考签名计算示例 | 是 |  | 
| nonce | 随机数,可以使用随机数或者uuid | 是 |  | 
| authorization | 鉴权令牌,通过获取token接口获取 | 是 |  | 
| Content-Type | multipart/form-data | 是 |  | 
| 参数名称 | 类型 | 是否必须 | 名称 | 备注 | 参数值 | 
|---|
| firmwareId | string | 是 | 固件id |  | 
| name | string | 是 | 固件名称 | 支持中文、英文字母、数字、特殊字符(_-@()),中文算两个字符,长度限制为4-200个字符 | 
| productId | string | 否 | 产品productId | 不存在升级计划时必填 | 
| softVer | string | 否 | 固件版本 | 不存在升级计划时必填,支持英文字母、数字、点号(.)、中划线(-)和下划线(_),长度限制为64个字符以内 | 
| hardVer | string | 否 | 适配硬件版本 | 支持英文字母、数字、点号(.)、中划线(-)和下划线(_),长度限制为64个字符以内 | 
| module | string | 否 | 模块标识 | 不存在升级计划时必填 | 
| remark | string | 否 | 固件描述 | 长度限制100个字符以内 | 
| firmwareType | integer | 否 | 固件包类型 | 不存在升级计划时必填 | 1:整包, 2:差分包 | 
| sourceVersion | string | 否 | 源版本 | 不存在升级计划、固件包为差分包时必填,支持英文字母、数字、点号(.)、中划线(-)和下划线(_),长度限制为64个字符以内 | 
| file | file | 否 | 固件文件 | 不传则不更新文件 | 
响应参数
| 名称 | 类型 | 说明 | 
|---|
| code | string | 响应码 | 
| msg | string | 响应码说明 | 
| data | object | 响应内容 | 
请求示例
1、存在升级计划时
firmwareId:602f4beb4e8bf61a7d516c23
name:测试固件
remark:测试固件描述
2、无升级计划时
firmwareId:602f4beb4e8bf61a7d516c23
name:测试固件
productId:8DC561D5
softVer:V1.0
hardVer:V2.0
module:default
remark:测试固件描述
firmwareType:1
sourceVersion:2345
file:[文件]
响应示例
{
    "code": "8001",
    "msg": "操作成功",
    "data": true
}
错误码
| code | 描述 | 
|---|
| 60004 | 产品不存在 | 
| 60010 | 文件不存在 | 
| 60020 | 模块不存在 | 
| 63004 | 固件大小超出限制 | 
| 63021 | 当前企业、产品、模块下,固件名称已存在 | 
| 63022 | 当前企业、产品、模块下,固件版本已存在 | 
| 63024 | 固件上传失败 | 
添加大固件(Json格式)
请求地址: /openApi/v2/firmware/addBig
传参方式: POST
备注:
请求参数
Body:
| 参数名称 | 类型 | 是否必须 | 名称 | 备注 | 参数值 | 
|---|
| name | string | 是 | 固件名称 | 支持中文、英文字母、数字、特殊字符(_-@()),中文算两个字符,长度限制为4-200个字符 | 
| productId | string | 否 | 产品productId | 不存在升级计划时必填 | 
| softVer | string | 是 | 固件版本 | 支持英文字母、数字、点号(.)、中划线(-)和下划线(_),长度限制为64个字符以内 | 
| hardVer | string | 否 | 适配硬件版本 | 支持英文字母、数字、点号(.)、中划线(-)和下划线(_),长度限制为64个字符以内 | 
| path | string | 是 | 文件OSS地址 |  | 
| md5 | string | 是 | 文件md5值 |  | 
| originalFilename | string | 是 | 文件名称 |  | 
| fileKey | string | 是 | 文件OSS标识 |  | 
| module | string | 是 | 模块标识 |  | 
| remark | string | 否 | 固件描述 | 长度限制100个字符以内 | 
| signMethod | string | 是 | 签名方法 | 仅支持md5 | md5 | 
| firmwareType | integer | 是 | 固件包类型 |  | 1:整包, 2:差分包 | 
| sourceVersion | string | 否 | 源版本 | 固件包为差分包时必填,支持英文字母、数字、点号(.)、中划线(-)和下划线(_),长度限制为64个字符以内 | 
响应参数
| 名称 | 类型 | 说明 | 
|---|
| code | string | 响应码 | 
| msg | string | 响应码说明 | 
| data | object | 响应内容 | 
data 说明
| 参数名称 | 类型 | 名称 | 备注 | 
|---|
| firmwareId | string | 固件id |  | 
| createAt | string | 创建时间 |  | 
请求示例
{
    "name": "测试固件",
    "productId": "8DC561D5",
    "softVer": "V1.0",
    "hardVer": "V2.0",
    "md5": "5340c78b52045b3f03718d105a820ac7",
    "path": "https://xxxxxxx",
    "originalFilename": "2.jpg",
    "fileKey": "otaFirmware/1670378256275_2.jpg",
    "module": "default",
    "remark": "测试固件描述",
    "signMethod": "md5",
    "firmwareType": 1,
    "sourceVersion": "2345"
}
响应示例
{
    "code": "8001",
    "msg": "操作成功",
    "data": {
        "firmwareId": "602f4beb4e8bf61a7d516c23",
        "createAt": "2021-02-19 13:26:02"
    }
}
错误码
| code | 描述 | 
|---|
| 60004 | 产品不存在 | 
| 60010 | 文件不存在 | 
| 60020 | 模块不存在 | 
| 63004 | 固件大小超出限制 | 
| 63021 | 当前企业、产品、模块下,固件名称已存在 | 
| 63022 | 当前企业、产品、模块下,固件版本已存在 | 
| 60023 | 固件不存在 | 
| 63024 | 固件上传失败 | 
修改大固件(Json格式)
请求地址: /openApi/v2/firmware/editBig
传参方式: POST
备注:
- 当固件管理下存在升级计划时,只能编辑固件名称和固件描述
- 不存在升级计划时,path可为空,此时不校验文件相关字段,不更新文件
请求参数
Body:
| 参数名称 | 类型 | 是否必须 | 名称 | 备注 | 参数值 | 
|---|
| firmwareId | string | 是 | 固件id |  | 
| name | string | 是 | 固件名称 | 支持中文、英文字母、数字、特殊字符(_-@()),中文算两个字符,长度限制为4-200个字符 | 
| productId | string | 否 | 产品productId | 不存在升级计划时必填 | 
| softVer | string | 否 | 固件版本 | 不存在升级计划时必填,支持英文字母、数字、点号(.)、中划线(-)和下划线(_),长度限制为64个字符以内 | 
| hardVer | string | 否 | 适配硬件版本 | 支持英文字母、数字、点号(.)、中划线(-)和下划线(_),长度限制为64个字符以内 | 
| path | string | 否 | 文件OSS地址 | 不传则不更新文件 | 
| md5 | string | 是 | 文件md5值 | path不为空时必填 | 
| originalFilename | string | 否 | 文件名称 | path不为空时必填 | 
| fileKey | string | 否 | 文件OSS标识 | path不为空时必填 | 
| signMethod | string | 否 | 签名方法 | path不为空时必填,仅支持md5 | md5 | 
| module | string | 否 | 模块标识 | 不存在升级计划时必填 | 
| remark | string | 否 | 固件描述 | 长度限制100个字符以内 | 
| firmwareType | integer | 否 | 固件包类型 | 不存在升级计划时必填 | 1:整包, 2:差分包 | 
| sourceVersion | string | 否 | 源版本 | 不存在升级计划、固件包为差分包时必填,支持英文字母、数字、点号(.)、中划线(-)和下划线(_),长度限制为64个字符以内 | 
响应参数
| 名称 | 类型 | 说明 | 
|---|
| code | string | 响应码 | 
| msg | string | 响应码说明 | 
| data | object | 响应内容 | 
请求示例
1、存在升级计划时
{
    "firmwareId": "602f4beb4e8bf61a7d516c23",
    "name": "测试固件",
    "remark": "测试固件描述"
}
2、无升级计划时
{
    "firmwareId": "602f4beb4e8bf61a7d516c23",
    "name": "测试固件",
    "productId": "8DC561D5",
    "softVer": "V1.0",
    "hardVer": "V2.0",
    "md5": "5340c78b52045b3f03718d105a820ac7",
    "path": "https://xxxxxxx",
    "originalFilename": "2.jpg",
    "fileKey": "otaFirmware/1670378256275_2.jpg",
    "module": "default",
    "remark": "测试固件描述",
    "signMethod": "md5",
    "firmwareType": 1,
    "sourceVersion": "2345"
}
响应示例
{
    "code": "8001",
    "msg": "操作成功",
    "data": true
}
错误码
| code | 描述 | 
|---|
| 60004 | 产品不存在 | 
| 60010 | 文件不存在 | 
| 60020 | 模块不存在 | 
| 63004 | 固件大小超出限制 | 
| 63021 | 当前企业、产品、模块下,固件名称已存在 | 
| 63022 | 当前企业、产品、模块下,固件版本已存在 | 
| 60023 | 固件不存在 | 
| 63024 | 固件上传失败 | 
固件详情
请求地址: /openApi/v2/firmware/query
传参方式: POST
备注: 无
请求参数
Body:
| 参数名称 | 类型 | 是否必须 | 名称 | 备注 | 
|---|
| firmwareId | string | 是 | 固件id |  | 
响应参数
| 名称 | 类型 | 说明 | 
|---|
| code | string | 响应码 | 
| msg | string | 响应码说明 | 
| data | object | 响应内容 | 
data 说明
| 参数名称 | 类型 | 名称 | 参数 | 
|---|
| firmwareId | string | 固件id |  | 
| name | string | 固件名称 |  | 
| productId | string | 产品productId |  | 
| productName | string | 产品名称 |  | 
| softVer | string | 固件版本 |  | 
| hardVer | string | 适配硬件版本 |  | 
| signMethod | string | 签名方法 |  | 
| size | integer | 文件大小 |  | 
| md5 | string | 文件md5值 |  | 
| originalFilename | string | 原始固件文件名称 |  | 
| fileKey | string | 文件OSS标识 |  | 
| module | string | 模块标识 |  | 
| moduleName | string | 模块名称 |  | 
| remark | string | 固件描述 |  | 
| firmwareType | integer | 固件包类型 | 1:整包, 2:差分包 | 
| sourceVersion | string | 源版本 |  | 
| createAt | string | 创建时间 |  | 
| updateAt | string | 更新时间 |  | 
请求示例
{ 
  "firmwareId": "63b3e8e140a321450c7d166f"
}
响应示例
{
    "code": "8001",
    "msg": "操作成功",
    "data": {
        "firmwareId": "63b3e8e140a321450c7d166f",
        "createAt": "2023-01-03 16:35:44",
        "name": "测试固件",
        "productId": "FB511D31",
        "productName": "MQTT非透传免注册json950",
        "hardVer": "V2.0",
        "softVer": "V1.1",
        "signMethod": "md5",
        "size": 4616,
        "remark": "测试固件描述",
        "md5": "bcb95b23ede941e5483a316c096dd2e0",
        "originalFilename": "1.jpg",
        "fileKey": "otaFirmware/1672734942385_1.jpg",
        "firmwareType": 1,
        "sourceVersion": "",
        "updateAt": "2023-01-03 16:42:31",
        "module": "default",
        "moduleName": "默认"
    }
}
错误码
固件分页查询
请求地址: /openApi/v2/firmware/list
传参方式: POST
备注: 无
请求参数
Body:
| 参数名称 | 类型 | 是否必须 | 名称 | 备注 | 
|---|
| page | integer | 否 | 页数 | 最小值为1,默认值为1 | 
| pageSize | integer | 否 | 分页数 | 最小值为1,最大值为100,默认值为10 | 
| productId | string | 否 | 产品productId | 
响应参数
| 名称 | 类型 | 说明 | 
|---|
| code | string | 响应码 | 
| msg | string | 响应码说明 | 
| data | object | 响应内容 | 
data 说明
| 参数名称 | 类型 | 名称 | 备注 | 
|---|
| records | object[] | 分页列表 |  | 
| current | integer | 当前页 |  | 
| size | integer | 分页数 |  | 
| total | integer | 总页数 |  | 
records 说明
| 参数名称 | 类型 | 名称 | 参数 | 
|---|
| firmwareId | string | 固件id | 
| name | string | 固件名称 | 
| productId | string | 产品productId | 
| productName | string | 产品名称 | 
| softVer | string | 固件版本 | 
| hardVer | string | 适配硬件版本 | 
| signMethod | string | 签名方法 | 
| size | integer | 文件大小 | 
| md5 | string | 文件md5值 | 
| originalFilename | string | 原始固件文件名称 | 
| fileKey | string | 文件OSS标识 | 
| module | string | 模块标识 | 
| moduleName | string | 模块名称 | 
| remark | string | 固件描述 | 
| firmwareType | integer | 固件包类型 | 1:整包, 2:差分包 | 
| sourceVersion | string | 源版本 | 
| createAt | string | 创建时间 | 
| updateAt | string | 更新时间 | 
请求示例
{
    "productId": "E11822F6",
    "page": 1,
    "pageSize": 10
}
响应示例
{
    "code": "8001",
    "msg": "操作成功",
    "data": {
        "records": [
            {
                "firmwareId": "63c0f59744e95b7f8c811300",
                "createAt": "2023-01-13 14:09:27",
                "name": "TCP版本",
                "productId": "E11822F6",
                "productName": "TCP认证验证",
                "hardVer": "v1.0",
                "softVer": "v3.0.0",
                "signMethod": "md5",
                "remark": "",
                "md5": "69f9321429ff3572e81bc4f107a5a346",
                "size": 1856544,
                "originalFilename": "DDC_firmwareL4.0.0.1.bin",
                "fileKey": "otaFirmware/DDC_firmwareL4.0.0.1.bin",
                "firmwareType": 1,
                "sourceVersion": "",
                "updateAt": "2023-01-13 14:09:27",
                "module": "default",
                "moduleName": "默认"
            }
        ],
        "current": 1,
        "size": 10,
        "total": 1
    }
}
OTA升级
创建OTA升级计划
请求地址: /openApi/v2/otaPlan/add
传参方式: POST
备注: 返回数据中,batchUuid必存在,升级计划planId,不一定返回,如没有需要通过详情接口利用batchUuid获取
请求参数
Body:
| 参数名称 | 类型 | 是否必须 | 名称 | 备注 | 参数值 | 
|---|
| firmwareId | string | 是 | 固件id |  |  | 
| notifyType | integer | 是 | 推送类型 |  | 0.立即推送, 1.定时推送 | 
| strategy | integer | 是 | 升级策略 |  | 0.静态升级, 1.动态升级 | 
| scope | integer | 是 | 升级范围 |  | 0.指定设备, 1.全部设备 | 
| softVerScope | string [] | 否 | 待升级的版本号 | 如果全部升级或者动态升级,则不能为空 |  | 
| startAt | string | 否 | 开始时间 | 如果定时升级,则不能为空 |  | 
| endAt | string | 否 | 结束时间 | 如果定时升级,则不能为空 |  | 
| retryInterval | integer | 是 | 重试间隔 | 0,1,10,30,60,1440 | 0.不重试, 1.立即重试, 其余为X分钟后重试 | 
| retryLimit | integer | 否 | 重试次数 | 如果选择重试间隔不为0则此项不能为空 | 1,2,5 | 
| expireTime | integer | 是 | 超时时间(分钟) | 不填默认1440(24小时),范围1-1440 |  | 
| overwrite | integer | 是 | 是否覆盖升级 |  | 0.否, 1.是 | 
| triggerType | integer | 是 | 升级触发机制 |  | 1.设备端触发, 2.云端触发 | 
| nodeIds | String[] | 否 | 升级的设备id数组 | 指定设备升级时不能为空 |  | 
| remark | string | 否 | 任务描述 |  |  | 
响应参数
| 名称 | 类型 | 说明 | 
|---|
| code | string | 响应码 | 
| msg | string | 响应码说明 | 
| data | object | 响应内容 | 
data 说明
| 参数名称 | 类型 | 名称 | 备注 | 
|---|
| planId | string | 升级计划id |  | 
| batchUuid | string | 批次号 |  | 
请求示例
1、静态升级-所有设备-定时升级-重试2次
{
    "firmwareId": "63b3e8e140a321450c7d166f",
    "notifyType": 1,
    "strategy": 0,
    "scope": 0,
    "softVerScope": [
        "v1.0.0"
    ],
    "startAt": "2023-01-06 17:00:00",
    "endAt": "2023-01-10 18:00:00",
    "retryInterval": 30,
    "retryLimit": 2,
    "expireTime": 30,
    "overwrite": 1,
    "triggerType": 1,
    "remark": "备注"
}
2、动态升级
{
    "firmwareId": "63b3e8e140a321450c7d166f",
    "notifyType": 0,
    "strategy": 1,
    "scope": 1,
    "softVerScope": [
        "v1.0.0"
    ],
    "retryInterval": 0,
    "overwrite": 0,
    "triggerType": 1,
    "remark": "动态升级"
}
3、静态升级-指定设备-立即推送-云端触发-不重试-不覆盖
{
    "firmwareId": "63b3e8e140a321450c7d166f",
    "notifyType": 0,
    "strategy": 0,
    "scope": 0,
    "retryInterval": 0,
    "overwrite": 0,
    "triggerType": 2,
    "nodeIds":["632ab50ea3e8582b78b38fee"],
    "remark": "指定设备升级"
}
响应示例
{
    "code": "8001",
    "msg": "操作成功",
    "data": {
        "batchUuid": "a5d15326-5c64-4c71-b8ca-d047f2c27ba1",
        "planId": "63b79188a5cdd8367db36bf0"
    }
}
取消OTA升级计划
请求地址: /openApi/v2/otaPlan/cancel
传参方式: POST
备注: 无
请求参数
Body:
| 参数名称 | 类型 | 是否必须 | 名称 | 备注 | 
|---|
| planId | string | 是 | 升级计划id |  | 
响应参数
| 名称 | 类型 | 说明 | 
|---|
| code | string | 响应码 | 
| msg | string | 响应码说明 | 
| data | object | 响应内容 | 
请求示例
{
    "planId": "306134d4050d4800a8ab8bce88b1db43"
}
响应示例
{
    "code": "8001",
    "msg": "操作成功",
    "data": true
}
OTA升级计划分页查询
请求地址: /openApi/v2/otaPlan/list
传参方式: POST
备注: 无
请求参数
Body:
| 参数名称 | 类型 | 是否必须 | 名称 | 参数 | 备注 | 
|---|
| page | integer | 否 | 页数 |  | 最小值为1,默认值为1 | 
| pageSize | integer | 否 | 分页数 |  | 最小值为1,最大值为100,默认值为10 | 
| firmwareId | string | 是 | 固件id |  | 
| status | integer | 否 | 状态 | 0:升级中, 1:已完成, 2:已取消 | 
| strategy | integer | 否 | 升级策略 | 0:静态升级, 1:动态升级 | 
响应参数
| 名称 | 类型 | 说明 | 
|---|
| code | string | 响应码 | 
| msg | string | 响应码说明 | 
| data | object | 响应内容 | 
data 说明
| 参数名称 | 类型 | 名称 | 备注 | 
|---|
| records | object[] | 分页列表 |  | 
| current | integer | 当前页 |  | 
| size | integer | 分页数 |  | 
| total | integer | 总页数 |  | 
records 说明
| 参数名称 | 类型 | 名称 | 参数 | 
|---|
| planId | string | 固件id |  | 
| productId | string | 产品productId |  | 
| productname | string | 产品名称 |  | 
| module | string | 模块标识 | 
| firmwareId | string | 固件id |  | 
| strategy | integer | 升级策略 | 0.静态升级, 1.动态升级 | 
| scope | integer | 升级范围 | 0.指定设备, 1.全部设备 | 
| softVerScope | string[] | 待升级的版本号 | 
| targetSoftVer | string | 目标固件版本 | 
| notifyType | integer | 推送类型 | 0.立即推送, 1.定时推送 | 
| triggerType | integer | 升级触发机制 | 1.设备端触发, 2.云端触发 | 
| startAt | string | 开始时间 |  | 
| endAt | string | 结束时间 |  | 
| retryInterval | integer | 重试间隔 | 0.不重试, 1.立即重试, 其余为X分钟后重试 | 
| retryLimit | integer | 重试次数 |  | 
| expireTime | integer | 超时时间(分钟) |  | 
| overwrite | integer | 是否覆盖升级 | 0.否, 1.是 | 
| remark | string | 任务描述 |  | 
| status | integer | 升级计划状态 | 0.升级中, 1.已完成, 2:已取消 | 
| createAt | string | 创建时间 |  | 
| updateAt | string | 更新时间 |  | 
| isCancel | boolean | 是否可取消 |  | 
请求示例
{
    "firmwareId": "63b3e8e140a321450c7d166f",
    "page": 1,
    "pageSize": 10,
    "status": 0,
    "strategy": 1
}
响应示例
{
    "code": "8001",
    "msg": "操作成功",
    "data": {
        "records": [
            {
                "planId": "63bb7962d68a1239d503160e",
                "productId": "FB511D31",
                "productName": "MQTT非透传免注册json950",
                "firmwareId": "63b3e8e140a321450c7d166f",
                "strategy": 1,
                "scope": 1,
                "softVerScope": [
                    "v1.0.0"
                ],
                "targetSoftVer": "V1.01",
                "notifyType": 0,
                "triggerType": 1,
                "startAt": "2023-01-09 10:18:10",
                "endAt": null,
                "retryInterval": 0,
                "retryLimit": 0,
                "expireTime": 1440,
                "overwrite": 0,
                "status": 0,
                "remark": "动态升级",
                "createAt": "2023-01-09 10:18:10",
                "updateAt": "2023-01-09 10:18:10",
                "module": "default",
                "isCancel": false
            }
        ],
        "current": 1,
        "size": 10,
        "total": 1
    }
}
升级计划详情
请求地址: /openApi/v2/otaPlan/query
传参方式: POST
备注: 无
请求参数
Body:
| 参数名称 | 类型 | 是否必须 | 名称 | 备注 | 
|---|
| planId | string | 否 | 升级计划id,两个参数必填一项 |  | 
| batchUuid | string | 否 | batchUuid,两个参数都有以planId为准 |  | 
响应参数
| 名称 | 类型 | 说明 | 
|---|
| code | string | 响应码 | 
| msg | string | 响应码说明 | 
| data | object | 响应内容 | 
data 说明
| 参数名称 | 类型 | 名称 | 参数 | 
|---|
| planId | string | 固件id |  | 
| productId | string | 产品productId |  | 
| productname | string | 产品名称 |  | 
| module | string | 模块标识 |  | 
| firmwareId | string | 固件id |  | 
| strategy | integer | 升级策略 | 0.静态升级, 1.动态升级 | 
| scope | integer | 升级范围 | 0.指定设备, 1.全部设备 | 
| softVerScope | string[] | 待升级的版本号 |  | 
| targetSoftVer | string | 目标固件版本 |  | 
| notifyType | integer | 推送类型 | 0.立即推送, 1.定时推送 | 
| triggerType | integer | 升级触发机制 | 1.设备端触发, 2.云端触发 | 
| startAt | string | 开始时间 |  |  | 
| endAt | string | 结束时间 |  |  | 
| retryInterval | integer | 重试间隔 | 0.不重试, 1.立即重试, 其余为X分钟后重试 | 
| retryLimit | integer | 重试次数 |  | 
| expireTime | integer | 超时时间(分钟) |  | 
| overwrite | integer | 是否覆盖升级 | 0.否, 1.是 | 
| remark | string | 任务描述 |  | 
| status | integer | 升级计划状态 | 0.升级中, 1.已完成, 2:已取消 | 
| createAt | string | 创建时间 |  | 
| updateAt | string | 更新时间 |  | 
| isCancel | boolean | 是否可取消 |  | 
请求示例
{
    "planId": "63bb7962d68a1239d503160e"
}
响应示例
{
    "code": "8001",
    "msg": "操作成功",
    "data": {
        "planId": "63bb7962d68a1239d503160e",
        "productId": "FB511D31",
        "productName": "MQTT非透传免注册json950",
        "firmwareId": "63b3e8e140a321450c7d166f",
        "strategy": 1,
        "scope": 1,
        "softVerScope": [
            "v1.0.0"
        ],
        "targetSoftVer": "V1.01",
        "notifyType": 0,
        "triggerType": 1,
        "startAt": "2023-01-09 10:18:10",
        "endAt": null,
        "retryInterval": 0,
        "retryLimit": 0,
        "expireTime": 1440,
        "overwrite": 0,
        "status": 0,
        "remark": "动态升级",
        "createAt": "2023-01-09 10:18:10",
        "updateAt": "2023-01-09 10:18:10",
        "module": "default",
        "isCancel": false
    }
}
升级计划详情-设备升级任务列表
请求地址: /openApi/v2/otaPlan/tasks
传参方式: POST
备注: 无
请求参数
Body:
| 参数名称 | 类型 | 是否必须 | 名称 | 备注 | 参数 | 
|---|
| page | integer | 否 | 页数 | 最小值为1,默认值为1 | 
| pageSize | integer | 否 | 分页数 | 最小值为1,最大值为100,默认值为10 | 
| planId | string | 是 | 升级计划id |  |  | 
| nodeEui | string | 否 | 设备号 |  |  | 
| status | string | 否 | 设备升级状态 |  | 0:待推送, 1:已推送, 2:升级中, 3:升级成功, 4:升级失败, 5:已取消, 6:已删除 | 
响应参数
| 名称 | 类型 | 说明 | 
|---|
| code | string | 响应码 | 
| msg | string | 响应码说明 | 
| data | object | 响应内容 | 
data 说明
| 参数名称 | 类型 | 名称 | 备注 | 
|---|
| records | object[] | 分页列表 |  | 
| current | integer | 当前页 |  | 
| size | integer | 分页数 |  | 
| total | integer | 总页数 |  | 
records 说明
| 参数名称 | 类型 | 名称 | 参数 | 
|---|
| taskId | string | 升级任务Id |  | 
| planId | string | 升级计划id |  | 
| firmwareId | string | 固件id |  | 
| productId | string | 产品productId |  | 
| productName | string | 产品名称 |  | 
| module | string | 模块标识 |  | 
| nodeEui | string | 设备号 |  | 
| downId | string | downId |  | 
| softVer | string | 固件版本 |  | 
| hardVer | string | 硬件版本 |  | 
| targetSoftVer | string | 目标固件版本 |  | 
| otaType | integer | 智能设备下载固件的方式 | 1:TCP, 2:HTTP | 
| startAt | string | 升级开始时间 |  | 
| endAt | string | 升级结束时间 |  | 
| retryInterval | integer | 重试时间间隔 |  | 
| retryLimit | integer | 重试次数 |  | 
| retryCnt | integer | 当前升级的次数,重试+1 |  | 
| overwrite | integer | 是否覆盖升级 | 0:否 , 1:是 | 
| createdStrategy | integer | 创建的升级策略 | 0:静态升级, 1:动态升级 | 
| errorInfo | string | 升级失败的错误信息 |  | 
| createAt | string | 创建时间 |  | 
| updateAt | string | 更新时间 |  | 
| status | integer | 升级计划的状态 | 0:升级中, 1:已完成, 2:已取消 | 
| triggerType | integer | 触发方式 | 1:设备端触发, 2:云端触发 | 
| delayTaskId | string | 延时任务的id |  | 
| expireAtStamp | integer | 升级超时时间戳 |  | 
| expirationTime | integer | 升级超时时间 |  | 
请求示例
{
    "planId": "63c0eda074ef5e16c5b66468",
    "page":1,
    "pageSize":10
}
响应示例
{
    "code": "8001",
    "msg": "操作成功",
    "data": {
        "records": [
            {
                "taskId": "63c0eda274ef5e16c5b66469",
                "planId": "63c0eda074ef5e16c5b66468",
                "firmwareId": "63c0ed758fea9e716ae06f70",
                "productId": "A50F56D0",
                "productName": "MQTT20网关设备",
                "nodeEui": "20MQTTWJ00001",
                "downId": "77AF1957",
                "softVer": "v2.1.3",
                "hardVer": "v1.0.1",
                "targetSoftVer": "v3.0.0",
                "otaType": 2,
                "startAt": "2023-01-13 13:35:28",
                "endAt": null,
                "retryInterval": 0,
                "retryLimit": 0,
                "retryCnt": 0,
                "overwrite": 0,
                "createdStrategy": 1,
                "errorInfo": null,
                "createAt": "2023-01-13 13:35:29",
                "updateAt": "2023-01-13 13:35:29",
                "status": 0,
                "triggerType": 2,
                "delayTaskId": null,
                "module": "default",
                "expireAtStamp": null,
                "expirationTime": 1673674528166
            }
        ],
        "current": 1,
        "size": 10,
        "total": 1
    }
}
设备升级任务取消/重新升级
请求地址: /openApi/v2/otaPlan/taskCancelOrReCreate
传参方式: POST
备注: 无
请求参数
Body:
| 参数名称 | 类型 | 是否必须 | 名称 | 备注 | 参数值 | 
|---|
| taskId | string | 是 | 升级任务id | 多个升级任务可用逗号(,)分隔 |  | 
| opt | integer | 是 | 操作类型 |  | 0:取消升级, 1:重新升级 | 
响应参数
| 名称 | 类型 | 说明 | 
|---|
| code | string | 响应码 | 
| msg | string | 响应码说明 | 
| data | object | 响应内容 | 
请求示例
1、取消升级
{
  "taskId": "601bff8b5b3bb45bef53c230,601bff8b5b3bb45bef53c231",
  "opt": 0
}
2、重新升级
{
    "taskId": "617109258ca4fb051b307ad5",
    "opt": 1
}
响应示例
{
    "code": "8001",
    "msg": "操作成功",
    "data": true
}
错误码
应用推送
添加推送应用
请求地址: /openApi/v2/pushApp/add
传参方式: POST
备注: 无
请求参数
Body:
| 参数名称 | 类型 | 是否必须 | 名称 | 参数值 | 
|---|
| appName | string | 是 | 应用名称 | 
| pushType | integer | 是 | 推送类型 | 0:http, 1:mqtt, 2:rabbitmq | 
| productIds[] | string[] | 是 | 订阅产品productId组 | 
| httpPushInfo | object | 否 | http推送信息 | 
| mqttPushInfo | object | 否 | mqtt 推送信息 | 
| rabbitMqPushInfo | object | 否 | rabbitmq推送信息 | 
| pushDataFormat | integer | 是 | 推送数据格式 | 1:json | 
| status | integer | 是 | 是否启用 | 0:禁用, 1:启用 | 
httpPushInfo 说明
| 参数名称 | 类型 | 是否必须 | 名称 | 参数值 | 
|---|
| httpUplinkRemote | string | 否 | 上行应用数据推送地址 | 
| httpHeartBeatRemote | string | 否 | 设备心跳消息推送地址 | 
| httpConnectRemote | string | 否 | 设备上线/掉线消息推送地址 | 
| httpOtaResultRemote | string | 否 | 设备OTA升级结果推送地址 | 
| httpLifeCycleRemote | string | 否 | 设备生命周期变更推送地址 | 
| httpSubDeviceRemote | string | 否 | 子设备拓扑关系变更推送地址 | 
| httpNeedVerify | integer | 是 | 是否加密 | 0:不加密, 1:加密 | 
mqttPushInfo 说明
| 参数名称 | 类型 | 是否必须 | 名称 | 参数值 | 
|---|
| mqttBroker | string | 是 | 目的MQTT服务器地址 | 
| mqttPort | integer | 是 | 目的MQTT服务器端口 | 
| mqttAdmin | string | 是 | 用于推送的MQTT用户 | 
| mqttPassword | string | 是 | 用于推送的MQTT密码 | 
rabbitMqPushInfo 说明
| 参数名称 | 类型 | 是否必须 | 名称 | 参数值 | 
|---|
| rabbitBroker | string | 是 | 目的RabbitMq服务器地址 | 
| rabbitPort | integer | 是 | 目的RabbitMq服务器端口 | 
| rabbitAdmin | string | 是 | RabbitMq用户名 | 
| rabbitPassword | string | 是 | 用于推送的RabbitMq密码 | 
| rabbitVHost | string | 是 | 用于推送的RabbitMq虚拟主机 | 
| rabbitExchangePrefix | string | 是 | 上行应用数据推送Exchange前缀 | 
响应参数
| 名称 | 类型 | 说明 | 
|---|
| code | string | 响应码 | 
| msg | string | 响应码说明 | 
| data | object | 响应内容 | 
data 说明
| 参数名称 | 类型 | 名称 | 参数 | 
|---|
| appId | string | 推送应用id |  | 
| appSecret | string | 推送应用密钥 |  | 
| status | integer | 状态 | 0:禁用, 1:启用 | 
| appName | string | 应用名称 |  | 
| createAt | string | 创建时间 |  | 
| productIds | string [] | 订阅的产品productId列表 |  | 
| productNames | string [] | 订阅的产品名称列表 |  | 
| pushType | string | 推送类型 | 0:http, 1:mqtt, 2:rabbitmq | 
| httpPushInfo | object | http推送信息 |  | 
| mqttPushInfo | object | mqtt推送信息 |  | 
| rabbitMqPushInfo | object | rabbitmq推送信息 |  | 
示例
1、http
请求示例
{
    "appName": "http推送应用",
    "httpPushInfo": {
        "httpConnectRemote": "http://localhost:8080/receive/conn",
        "httpHeartBeatRemote": "http://localhost:8080/receive/heart",
        "httpOtaResultRemote": "http://localhost:8080/receive/ota",
        "httpUplinkRemote": "http://localhost:8080/receive/uplink",
        "httpLifeCycleRemote": "http://localhost:8080/receive/lifeCycle",
        "httpSubDeviceRemote": "http://localhost:8080/receive/subDevice",
        "httpNeedVerify": 0
    },
    "pushDataFormat": 1,
    "pushType": 0,
    "status": 1,
    "productIds": [
        "B7C71C40"
    ]
}
响应示例
{
    "code": "8001",
    "msg": "操作成功",
    "data": {
        "appId": "xxxx",
        "appSecret": "xxx",
        "status": 1,
        "appName": "http推送应用",
        "createAt": "2023-01-15 15:56:00",
        "productIds": [
            "B7C71C40"
        ],
        "productNames": [
            "推送测试产品"
        ],
        "pushType": 0,
        "pushDataFormat": 1,
        "httpPushInfo": {
            "httpUplinkRemote": "http://localhost:8080/receive/uplink",
            "httpHeartBeatRemote": "http://localhost:8080/receive/heart",
            "httpConnectRemote": "http://localhost:8080/receive/conn",
            "httpOtaResultRemote": "http://localhost:8080/receive/ota",
            "httpLifeCycleRemote": "http://localhost:8080/receive/lifeCycle",
            "httpSubDeviceRemote": "http://localhost:8080/receive/subDevice",
            "httpNeedVerify": 0
        },
        "mqttPushInfo": null,
        "rabbitMqPushInfo": null
    }
}
2、mqtt
请求示例
{
    "appName": "mqtt推送应用",
    "mqttPushInfo": {
        "mqttBroker": "xxxx.com",
        "mqttPort": 1883,
        "mqttAdmin": "xxxx",
        "mqttPassword": "xxxx"
    },
    "pushDataFormat": 1,
    "pushType": 1,
    "status": 1,
    "productIds": [
        "B7C71C40"
    ]
}
响应示例
{
    "code": "8001",
    "msg": "操作成功",
    "data": {
        "appId": "xxxx",
        "appSecret": "xxxx",
        "status": 1,
        "appName": "mqtt推送应用",
        "createAt": "2023-01-15 15:56:50",
        "productIds": [
            "B7C71C40"
        ],
        "productNames": [
            "推送测试产品"
        ],
        "pushType": 1,
        "pushDataFormat": 1,
        "httpPushInfo": null,
        "mqttPushInfo": {
            "mqttBroker": "xxxx.com",
            "mqttPort": 1883,
            "mqttAdmin": "xxxx",
            "mqttPassword": "xxxx",
            "mqttQos": 2,
            "mqttUplinkTopic": "xxxx/app-data",
            "mqttConnectTopic": "xxxx/connect",
            "mqttHeartBeatTopic": "xxxx/heartbeat",
            "mqttOtaResultTopic": "xxxx/ota-result",
            "mqttLifeCycleTopic": "xxxx/life-cycle",
            "mqttSubDeviceTopic": "xxxx/sub-device"
        },
        "rabbitMqPushInfo": null
    }
}
3、rabbitmq
请求示例
{
    "appName": "rabbitmq推送应用",
    "rabbitMqPushInfo": {
        "rabbitBroker": "rabbitmq.xxxx.com",
        "rabbitPort": 5672,
        "rabbitAdmin": "xxxx",
        "rabbitPassword": "xxxx",
        "rabbitVHost": "qa",
        "rabbitExchangePrefix": "xxx"
    },
    "pushDataFormat":1,
    "pushType": 2,
    "status": 1,
    "productIds": [
        "B7C71C40"
    ]
}
响应示例
{
    "code": "8001",
    "msg": "操作成功",
    "data": {
        "appId": "xxxxx",
        "appSecret": "xxxxx",
        "status": 1,
        "appName": "rabbitmq推送应用",
        "createAt": "2023-01-15 15:59:37",
        "productIds": [
            "B7C71C40"
        ],
        "productNames": [
            "推送测试产品"
        ],
        "pushType": 2,
        "pushDataFormat": 1,
        "httpPushInfo": null,
        "mqttPushInfo": null,
        "rabbitMqPushInfo": {
            "rabbitBroker": "rabbitmq.xxxx.com",
            "rabbitPort": 5672,
            "rabbitAdmin": "xxxx",
            "rabbitPassword": "xxxx",
            "rabbitVHost": "qa",
            "rabbitUplinkExchange": "xxx-app-data",
            "rabbitConnectExchange": "xxx-connect",
            "rabbitHeartBeatExchange": "xxx-heartbeat",
            "rabbitOtaResultExchange": "xxx-ota-result",
            "rabbitExchangePrefix": "xxx",
            "rabbitLifeCycleExchange": "xxx-life-cycle",
            "rabbitSubDeviceExchange": "xxx-sub-device"
        }
    }
}
错误码
| code | 描述 | 
|---|
| 67001 | 消息推送配置信息有误 | 
| 67002 | 产品已存在推送应用 | 
编辑推送应用
请求地址: /openApi/v2/pushApp/edit
传参方式: POST
备注:
- 只能编辑对应推送类型的参数
- 如果编辑信息包含 httpPushInfo/rabbitMqPushInfo/mqttPushInfo层级下字段需要全部包含,如果字段未包含的情况下,对应推送则将设置为空
请求参数
Body:
| 参数名称 | 类型 | 是否必须 | 名称 | 参数值 | 备注 | 
|---|
| appId | string | 是 | 推送应用id | 
| appName | string | 是 | 推送应用名称 | 
| productIds[] | string[] | 是 | 订阅产品productId组 | 
| httpPushInfo | object | 否 | http推送信息 |  | 与新增接口数据相同 | 
| mqttPushInfo | object | 否 | mqtt 推送信息 | 
| rabbitMqPushInfo | object | 否 | rabbitmq推送信息 | 
| status | integer | 是 | 启用状态 | 0:禁用, 1:启用 | 
mqttPushInfo 说明
| 参数名称 | 类型 | 是否必须 | 名称 | 参数值 | 
|---|
| mqttBroker | string | 是 | 目的MQTT服务器地址 | 
| mqttPort | integer | 是 | 目的MQTT服务器端口 | 
| mqttAdmin | string | 是 | 用于推送的MQTT用户 | 
| mqttPassword | string | 是 | 用于推送的MQTT密码 | 
| mqttQos | integer | 否 | 消息质量 | 
| mqttUplinkTopic | string | 否 | 上行数据topic | 
| mqttConnectTopic | string | 否 | 连接消息topic | 
| mqttHeartBeatTopic | string | 否 | 心跳消息topic | 
| mqttOtaResultTopic | string | 否 | 升级结果Topic | 
| mqttLifeCycleTopic | string | 否 | 设备生命周期推送Topic | 
| mqttSubDeviceTopic | string | 否 | 子设备拓扑关系推送Topic | 
rabbitMqPushInfo 说明
| 参数名称 | 类型 | 是否必须 | 名称 | 参数值 | 
|---|
| rabbitBroker | string | 是 | 目的RabbitMq服务器地址 | 
| rabbitPort | integer | 是 | 目的RabbitMq服务器端口 | 
| rabbitAdmin | string | 是 | RabbitMq用户名 | 
| rabbitPassword | string | 是 | 用于推送的RabbitMq密码 | 
| rabbitVHost | string | 是 | 用于推送的RabbitMq虚拟主机 | 
| rabbitExchangePrefix | string | 是 | 上行应用数据推送Exchange前缀 | 
| rabbitUplinkExchange | string | 否 | 上行交换机 | 
| rabbitConnectExchange | string | 否 | 上下线交换机 | 
| rabbitHeartBeatExchange | string | 否 | 心跳消息交换机 | 
| rabbitOtaResultExchange | string | 否 | ota结果交换机 | 
| rabbitLifeCycleExchange | string | 否 | 生命周期交换机 | 
| rabbitSubDeviceExchange | string | 否 | 子设备拓扑关系交换机 | 
响应参数
| 名称 | 类型 | 说明 | 
|---|
| code | string | 响应码 | 
| msg | string | 响应码说明 | 
| data | object | 响应内容 | 
请求示例
{
    "appId": "63bbda6a9139652aab3e7d54",
    "mqttPushInfo": {
        "mqttBroker": "xxxx.com",
        "mqttPort": 1883,
        "mqttAdmin": "xxxx",
        "mqttPassword": "xxxx",
        "mqttQos": 2,
        "mqttUplinkTopic": "xxxx/app-data",
        "mqttConnectTopic": "xxxx/connect",
        "mqttHeartBeatTopic": "xxxx/heartbeat",
        "mqttOtaResultTopic": "xxxx/ota-result",
        "mqttLifeCycleTopic": "xxxx/life-cycle",
        "mqttSubDeviceTopic": "xxxx/sub-device"
    },
    "pushDataFormat": 1,
    "pushType": 1,
    "status": 1,
    "productIds": [
        "D1784C95","8C09C149"
    ]
}
响应示例
{
    "code": "8001",
    "msg": "操作成功",
    "data": true
}
错误码
| code | 描述 | 
|---|
| 67001 | 消息推送配置信息有误 | 
| 67002 | 产品已存在推送应用 | 
删除推送应用
请求地址: /openApi/v2/pushApp/delete
传参方式: POST
备注: 无
请求参数
Body:
| 参数名称 | 类型 | 是否必须 | 名称 | 备注 | 参数值 | 
|---|
| appId | string | 是 | 推送应用id |  |  | 
响应参数
| 名称 | 类型 | 说明 | 
|---|
| code | string | 响应码 | 
| msg | string | 响应码说明 | 
| data | object | 响应内容 | 
请求示例
{
  "appId": "601bb356112352169e31a57c"
}
响应示例
{
  "code": "8001",
  "msg": "操作成功",
  "data": true
}
分页查询消息推送应用
请求地址: /openApi/v2/pushApp/list
传参方式: POST
备注: 无
请求参数
Body:
| 参数名称 | 类型 | 是否必须 | 名称 | 备注 | 
|---|
| page | integer | 否 | 页数 | 最小值为1,默认值为1 | 
| pageSize | integer | 否 | 分页数 | 最小值为1,最大值为100,默认值为10 | 
| appName | string | 否 | 推送应用名称 | 
| productId | string | 否 | 产品productId | 
响应参数
| 名称 | 类型 | 说明 | 
|---|
| code | string | 响应码 | 
| msg | string | 响应码说明 | 
| data | object | 响应内容 | 
data 说明
| 参数名称 | 类型 | 名称 | 备注 | 
|---|
| records | object[] | 分页列表 |  | 
| current | integer | 当前页 |  | 
| size | integer | 分页数 |  | 
| total | integer | 总页数 |  | 
records 说明
| 参数名称 | 类型 | 名称 | 参数 | 
|---|
| appId | string | appSecret | 
| appSecret | string | 推送应用密钥 | 
| status | integer | 状态 | 0:禁用, 1:启用 | 
| appName | string | 应用名称 | 
| createAt | string | 创建时间 | 
| productIds | string [] | 订阅的产品productId列表 | 
| productNames | string [] | 订阅的产品名称列表 | 
| pushType | string | 推送类型 | 0:http, 1:mqtt, 2:rabbitmq | 
| httpPushInfo | object | http推送信息 | 
| mqttPushInfo | object | mqtt推送信息 | 
| rabbitMqPushInfo | object | rabbitmq推送信息 | 
请求示例
{
  "page": 1,
  "pageSize": 10
}
响应示例
{
    "code": "8001",
    "msg": "操作成功",
    "data": {
        "records": [
            {
                "appId": "63c4c54ae6b8cb748bf0f51b",
                "appSecret": "3ED1CEC8FCCEDAA9926D6E5B8F5D21A0",
                "status": 1,
                "appName": "rabbitmq推送应用",
                "createAt": "2023-01-16 11:32:26",
                "productIds": [
                    "B7C71C40"
                ],
                "productNames": [
                    "推送测试产品"
                ],
                "pushType": 2,
                "pushDataFormat": 1,
                "httpPushInfo": null,
                "mqttPushInfo": null,
                "rabbitMqPushInfo": {
                    "rabbitBroker": "rabbitmq.xxxx.com",
                    "rabbitPort": 5672,
                    "rabbitAdmin": "xiot",
                    "rabbitPassword": "xxxx",
                    "rabbitVHost": "qa",
                    "rabbitExchangePrefix": "xxx",
                    "rabbitUplinkExchange": "xxx-app-data",
                    "rabbitConnectExchange": "xxx-connect",
                    "rabbitHeartBeatExchange": "xxx-heartbeat",
                    "rabbitOtaResultExchange": "xxx-ota-result",
                    "rabbitLifeCycleExchange": "xxx-life-cycle",
                    "rabbitSubDeviceExchange": "xxx-sub-device"
                }
            },
            {
                "appId": "63c3b1c28f2844756aceb493",
                "appSecret": "3F846F3F8A28C1D92F0C6CD82EB69859",
                "status": 1,
                "appName": "mqtt推送应用",
                "createAt": "2023-01-15 15:56:50",
                "productIds": [
                    "B7C71C40"
                ],
                "productNames": [
                    "推送测试产品"
                ],
                "pushType": 1,
                "pushDataFormat": 1,
                "httpPushInfo": null,
                "mqttPushInfo": {
                    "mqttBroker": "emqx4.xxxx.com",
                    "mqttPort": 1883,
                    "mqttAdmin": "xiot",
                    "mqttPassword": "xxxx",
                    "mqttQos": 2,
                    "mqttUplinkTopic": "iSUch4vzG0NqAAqPsQyK/app-data",
                    "mqttConnectTopic": "iSUch4vzG0NqAAqPsQyK/connect",
                    "mqttHeartBeatTopic": "iSUch4vzG0NqAAqPsQyK/heartbeat",
                    "mqttOtaResultTopic": "iSUch4vzG0NqAAqPsQyK/ota-result",
                    "mqttLifeCycleTopic": "iSUch4vzG0NqAAqPsQyK/life-cycle",
                    "mqttSubDeviceTopic": "iSUch4vzG0NqAAqPsQyK/sub-device"
                },
                "rabbitMqPushInfo": null
            },
            {
                "appId": "63c3b1908f2844756aceb492",
                "appSecret": "8C53615333039252FEAC42194863736A",
                "status": 1,
                "appName": "http推送应用",
                "createAt": "2023-01-15 15:56:00",
                "productIds": [
                    "B7C71C40"
                ],
                "productNames": [
                    "推送测试产品"
                ],
                "pushType": 0,
                "pushDataFormat": 1,
                "httpPushInfo": {
                    "httpUplinkRemote": "http://localhost:8080/receive/uplink",
                    "httpHeartBeatRemote": "http://localhost:8080/receive/heart",
                    "httpConnectRemote": "http://localhost:8080/receive/conn",
                    "httpOtaResultRemote": "http://localhost:8080/receive/ota",
                    "httpLifeCycleRemote": "http://localhost:8080/receive/lifeCycle",
                    "httpSubDeviceRemote": "http://localhost:8080/receive/subDevice",
                    "httpNeedVerify": 0
                },
                "mqttPushInfo": null,
                "rabbitMqPushInfo": null
            }
        ],
        "current": 1,
        "size": 10,
        "total": 3
    }
}
查询消息推送应用详情
请求地址: /openApi/v2/pushApp/query
传参方式: POST
备注: 无
请求参数
Body:
| 参数名称 | 类型 | 是否必须 | 名称 | 备注 | 
|---|
| appId | string | 是 | 推送应用id | 
响应参数
| 名称 | 类型 | 说明 | 
|---|
| code | string | 响应码 | 
| msg | string | 响应码说明 | 
| data | object | 响应内容 | 
data 说明
| 参数名称 | 类型 | 名称 | 参数 | 备注 | 
|---|
| appId | string | 推送应用id |  |  | 
| appSecret | string | 推送应用密钥 |  |  | 
| status | integer | 状态 | 0:禁用, 1:启用 |  | 
| appName | string | 应用名称 |  |  | 
| createAt | string | 创建时间 |  |  | 
| productIds | string [] | 订阅的产品productId列表 |  |  | 
| productNames | string [] | 订阅的产品名称列表 |  |  | 
| pushType | string | 推送类型 | 0:http, 1:mqtt, 2:rabbitmq | 
| httpPushInfo | object | http推送信息 |  | 内容同分页查询接口 | 
| mqttPushInfo | object | mqtt推送信息 |  | 内容同分页查询接口 | 
| rabbitMqPushInfo | object | rabbitmq推送信息 |  | 内容同分页查询接口 | 
请求示例
{
    "appId": "63c4c54ae6b8cb748bf0f51b"
}
响应示例
{
    "code": "8001",
    "msg": "操作成功",
    "data": {
        "appId": "63c4c54ae6b8cb748bf0f51b",
        "appSecret": "3ED1CEC8FCCEDAA9926D6E5B8F5D21A0",
        "status": 1,
        "appName": "rabbitmq推送应用",
        "createAt": "2023-01-16 11:32:26",
        "productIds": [
            "B7C71C40"
        ],
        "productNames": [
            "推送测试产品"
        ],
        "pushType": 2,
        "pushDataFormat": 1,
        "httpPushInfo": null,
        "mqttPushInfo": null,
        "rabbitMqPushInfo": {
            "rabbitBroker": "rabbitmq.xxxx.com",
            "rabbitPort": 5672,
            "rabbitAdmin": "xiot",
            "rabbitPassword": "xxxx",
            "rabbitVHost": "qa",
            "rabbitExchangePrefix": "xxx",
            "rabbitUplinkExchange": "xxx-app-data",
            "rabbitConnectExchange": "xxx-connect",
            "rabbitHeartBeatExchange": "xxx-heartbeat",
            "rabbitOtaResultExchange": "xxx-ota-result",
            "rabbitLifeCycleExchange": "xxx-life-cycle",
            "rabbitSubDeviceExchange": "xxx-sub-device"
        }
    }
}
规则引擎
新增规则
请求地址: /openApi/v2/ruleEngine/add
传参方式: POST
备注: 无
请求参数
Body:
| 参数名称 | 类型 | 是否必须 | 名称 | 备注 | 参数值 | 
|---|
| name | string | 是 | 规则名称 |  |  | 
| description | string | 否 | 规则描述 |  |  | 
| start | string | 是 | 开启状态 |  | 0:禁用, 1:开启 | 
| effectAllTime | string | 是 | 生效时间 |  | 0:指定时间, 1:一直生效 | 
| effectTime | string[] | 否 | 规则生效的时间段 | effectAllTime=0时必填, 例如3.30-4.30生效,值为["03:30","04:30"] |  | 
| effectWeek | string[] | 否 | 规则生效周 | effectAllTime=0时必填, 例如周一-周五[2,3,4,5,6] | 1:周日,2:周一, 3:周二,4:周三, 5:周四,6:周五,7:周六 | 
| conditionRelation | string | 是 | 条件触发关系 |  | or:或, and:与 | 
| triggerPo | object[] | 否 | 触发条件 | 最大50条 |  | 
| ruleActionPo | object[] | 是 | 执行动作 | 最大50条 |  | 
triggerPo 说明
| 参数名称 | 类型 | 是否必须 | 名称 | 备注 | 参数值 | 
|---|
| triggerType | string | 是 | 触发条件 | 同规则下,定时触发器只能有一条 | 0:定时触发, 1:设备触发 | 
| cron | string | 否 | 触发器cron表达式 | triggerType=0必填, 例如每天定时15点21分:"21 15 * * ?" , 每周日、二8点20分:"20 08 ? * 1,3", 4月3号15点59分:"59 15 3 4 ?" |  | 
| triggerStrategy | string | 否 | 触发机制 | triggerType=1必填 | 0:仅首次, 1:每一次 | 
| nodeId | string | 否 | 设备id | triggerType=1必填 |  | 
| deviceTriggerType | string | 否 | 设备触发方式 | triggerType=1必填 | 0:属性上报, 1:事件上报, 2:设备状态 | 
| prop | string | 否 | 属性标识 | deviceTriggerType=0/1必填 | 
| operator | string | 否 | 逻辑运算符 | deviceTriggerType=0/1必填 | >,>=,<,<=,==,!=,in,between | 
| value | string | 否 | 属性值 | deviceTriggerType=0/1必填 |  | 
| event | st | ring | 否 | 事件标识 | deviceTriggerType=1必填 |  | 
| status | string | 否 | 设备状态 | deviceTriggerType=2必填 | 0:设备下线, 1:设备上线 | 
ruleActionPo 说明
| 参数名称 | 类型 | 是否必须 | 名称 | 备注 | 参数值 | 
|---|
| ruleActionType | string | 是 | 触发方式 |  | 0:下发命令, 1:上报告警, 2:规则联动, 3:发送通知 | 
| nodeId | string | 否 | 设备Id | ruleActionType=0必填 |  | 
| deviceActionType | string | 否 | 执行方式 | ruleActionType=0必填 | 0:设置属性, 1:调用服务 | 
| propSetParams | object | 否 | 设置属性参数 | deviceActionType=0必填 |  | 
| serviceCallParams | object | 否 | 调用服务参数 | deviceActionType=1必填 |  | 
| delayTime | string | 否 | 延时执行(秒) | ruleActionType=0必填 |  | 
| level | string | 否 | 级别 | ruleActionType=1必填 | 1,2,3,4,5 | 
| alarmName | string | 否 | 告警名称 | ruleActionType=1必填 |  | 
| ruleId | string | 否 | 规则id | ruleActionType=2必填 |  | 
| operation | string | 否 | 执行操作 | ruleActionType=2必填 | 0:触发规则, 1:启用规则, 2:停用规则 | 
| noticeTypes | Array<Int> | 否 | 通知方式 | ruleActionType=3必填 | 1:短信, 2:邮件 | 
| smsDetail | object | 否 | 短信详情 | noticeTypes包含1必填 |  | 
| emailDetail | object | 否 | 邮件详情 | noticeTypes包含2必填 |  | 
| contacts | Array<string> | 否 | 联系人id | ruleActionType=3必填 |  | 
propSetParams 说明
| 参数名称 | 类型 | 是否必须 | 名称 | 备注 | 参数值 | 
|---|
| identify | string | 是 | 属性标识 |  | 
| value | string | 是 | 属性值 |  | 
serviceCallParams 说明
| 参数名称 | 类型 | 是否必须 | 名称 | 备注 | 参数值 | 
|---|
| identify | string | 是 | 属性标识 |  | 
| propSetParamsList | object[] | 是 | 属性列表参数 |  |  | 
propSetParamsList 说明
| 参数名称 | 类型 | 是否必须 | 名称 | 备注 | 参数值 | 
|---|
| identify | string | 是 | 属性标识 |  | 
| value | string | 是 | 属性值 |  | 
smsDetail 说明
| 参数名称 | 类型 | 是否必须 | 名称 | 备注 | 参数值 | 
|---|
| ruleNoticeType | integer | 是 | 模板类型 |  | 1:系统默认, 2:自定义 | 
| configId | string | 是 | 配置id |  |  | 
| templateId | string | 是 | 模板id |  | 
| variable | array[object] | 否 | 模板变量 |  |  | 
短信variable 说明
| 参数名称 | 类型 | 是否必须 | 名称 | 备注 | 参数值 | 
|---|
| key | string | 是 | 模板变量key |  | 
| value | string | 是 | 模板变量value |  |  | 
emailDetail 说明
| 参数名称 | 类型 | 是否必须 | 名称 | 备注 | 参数值 | 
|---|
| ruleNoticeType | integer | 是 | 模板类型 |  | 1:系统默认, 2:自定义 | 
| configId | string | 是 | 配置id |  |  | 
| templateId | string | 是 | 模板id |  | 
| variable | array[object] | 否 | 模板变量 |  |  | 
邮件variable 说明
| 参数名称 | 类型 | 是否必须 | 名称 | 备注 | 参数值 | 
|---|
| key | string | 是 | 模板变量key |  | 
| value | string | 是 | 模板变量value |  |  | 
响应参数
| 名称 | 类型 | 说明 | 
|---|
| code | string | 响应码 | 
| msg | string | 响应码说明 | 
| data | object | 响应内容 | 
data 说明
| 参数名称 | 类型 | 名称 | 参数 | 备注 | 
|---|
| ruleId | string | 规则id |  |  | 
请求示例
1、
{
    "name": "规则测试添加1",
    "start": 0,
    "effectAllTime":1,
    "conditionRelation": "or",
    "triggerPo":[
        {
            "triggerType":0,
            "cron":"51 09 * * ?"
        }
    ],
    "ruleActionPo":[
        {
            "ruleActionType":1,
            "level":4,
            "alarmName":"4级报警"
        }
    ]
}
2、
{
    "name": "规则测试添加2",
    "description": "测试规则引擎添加",
    "start": 0,
    "effectAllTime": 1,
    "conditionRelation": "and",
    "triggerPo": [
        {
            "triggerType": 1,
            "triggerStrategy": 0,
            "nodeId": "61518485cfb170780841f377",
            "deviceTriggerType": "0",
            "prop": "temp",
            "operator": ">",
            "value": 10
        }
    ],
    "ruleActionPo": [
        {
            "ruleActionType": 0,
            "nodeId": "61518485cfb170780841f377",
            "deviceActionType": 1,
            "serviceCallParams": {
                "identify": "ontemp",
                "propSetParamsList": [
                    {
                        "identify": "temp",
                        "value": 10
                    },
                    {
                        "identify": "on",
                        "value": 10
                    }
                ]
            },
            "delayTime": 5
        }
    ]
}
3、
{
    "name":"添加规则-发送通知",
    "description":"发送通知",
    "effectAllTime":"1",
    "effectWeek":[
    ],
    "effectTime":[
    ],
    "start":"1",
    "conditionRelation":"and",
    "triggerPo":[
        {
            "triggerType":"1",
            "triggerStrategy":"1",
            "productId":"0D797D34",
            "nodeEui":"LNTEST001",
            "deviceName":"设备测试001",
            "nodeId":"60d97c009a7f6138b0f2e21b",
            "type":"int32",
            "deviceTriggerType":"0",
            "operator":">",
            "prop":"test_property_001",
            "value":"10"
        }
    ],
    "ruleActionPo":[
        {
            "ruleActionType":"3",
            "noticeTypes":[
                1,
                2
            ],
            "smsDetail":{
                "ruleNoticeType":2,
                "configId":"64424e3a509e83502e4832c1",
                "templateId":"6444f5a5c7078f5ba357e813",
                "variable":[
                    {
                        "key":"name",
                        "value":"productName"
                    },
                    {
                        "key":"nodeEui",
                        "value":"nodeEui"
                    },
                    {
                        "key":"ruleName",
                        "value":"ruleName"
                    }
                ]
            },
            "emailDetail":{
                "ruleNoticeType":2,
                "configId":"6445e32b7cfcfd58c02c13d1",
                "templateId":"644617bb78d12f475ee08d4f",
                "variable":[
                    {
                        "key":"nodeEui",
                        "value":"nodeEui"
                    }
                ]
            },
            "contacts":[
                "6444934039daf707aa3eab7b",
                "64448cd06b099e4adc25a373"
            ]
        }
    ]
}
响应示例
{
    "code": "8001",
    "msg": "操作成功",
    "data": {
        "ruleId": "63c38a990c40c20e50b8bfe3"
    }
}
错误码
| code | 描述 | 
|---|
| 60005 | 设备不存在 | 
| 64020 | 定时触发器只能有一个 | 
| 64005 | 触发条件超出上限 | 
| 64008 | 执行动作超出上限 | 
| 64006 | 告警名称不规范 | 
| 64014 | 规则联动选择规则不存在或不符合要求 | 
| 68001 | 产品未定义物模型 | 
| 64022 | 执行动作,发送通知,参数错误 | 
| 64023 | 执行动作,上报告警,参数错误 | 
编辑规则
请求地址: /openApi/v2/ruleEngine/edit
传参方式: POST
备注: 无
请求参数
Body:
| 参数名称 | 类型 | 是否必须 | 名称 | 备注 | 参数值 | 
|---|
| ruleId | string | 是 | 规则id |  |  | 
| name | string | 是 | 规则名称 |  |  | 
| description | string | 否 | 规则描述 |  |  | 
| start | string | 是 | 开启状态 |  | 0:禁用, 1:开启 | 
| effectAllTime | string | 是 | 生效时间 |  | 0:指定时间, 1:一直生效 | 
| effectTime | string[] | 否 | 规则生效的时间段 | effectAllTime=0时必填, 例如3.30-4.30生效,值为["03:30","04:30"] |  | 
| effectWeek | string[] | 否 | 规则生效周 | effectAllTime=0时必填, 例如周一-周五[2,3,4,5,6] | 1:周日,2:周一, 3:周二,4:周三, 5:周四,6:周五,7:周六 | 
| conditionRelation | string | 是 | 条件触发关系 | or:或, and:与 |  | 
| triggerPo | object[] | 否 | 触发条件 | 最大50条 |  | 
| ruleActionPo | object[] | 是 | 执行动作 | 最大50条 |  | 
triggerPo 说明
| 参数名称 | 类型 | 是否必须 | 名称 | 备注 | 参数值 | 
|---|
| **timingUuid** | string | 否 | 触发条件id | 详情中返回的数据,修改原触发条件时必填 |  | 
| triggerType | string | 是 | 触发条件 |  | 0:定时触发, 1:设备触发 | 
| cron | string | 否 | 触发器cron表达式 | triggerType=0必填, 例如每天定时15点21分:"21 15 * * ?" , 每周日、二8点20分:"20 08 ? * 1,3", 4月3号15点59分:"59 15 3 4 ?" |  | 
| triggerStrategy | string | 否 | 触发机制 | triggerType=1必填 | 0:仅首次, 1:每一次 | 
| nodeId | string | 否 | 设备id | triggerType=1必填 |  |  | 
| deviceTriggerType | string | 否 | 设备触发方式 | triggerType=1必填 | 0:属性上报, 1:事件上报, 2:设备状态 | 
| prop | string | 否 | 属性标识 | deviceTriggerType=0/1必填 |  | 
| operator | string | 否 | 逻辑运算符 | deviceTriggerType=0/1必填 | >,>=,<,<=,==,!=,in,between | 
| value | string | 否 | 属性值 | deviceTriggerType=0/1必填 |  |  | 
| event | string | 否 | 事件标识 | deviceTriggerType=1必填 |  |  | 
| status | string | 否 | 设备状态 | deviceTriggerType=2必填 | 0:设备下线, 1:设备上线 | 
ruleActionPo 说明
| 参数名称 | 类型 | 是否必须 | 名称 | 备注 | 参数值 | 
|---|
| **actionId** | string | 否 | 指定动作id | 详情中返回的数据,修改原执行动作时必填 |  | 
| ruleActionType | string | 是 | 触发方式 |  | 0:下发命令, 1:上报告警, 2:规则联动, 3:发送通知 | 
| nodeId | string | 否 | 设备Id | ruleActionType=0必填 |  |  | 
| deviceActionType | string | 否 | 执行方式 | ruleActionType=0必填 | 0:设置属性, 1:调用服务 | 
| propSetParams | object | 否 | 设置属性参数 | deviceActionType=0必填,结构和新增中相同 |  |  | 
| serviceCallParams | object | 否 | 调用服务参数 | deviceActionType=1必填,结构和新增中相同 |  |  | 
| delayTime | string | 否 | 延时执行(秒) | ruleActionType=0必填 |  |  | 
| level | string | 否 | 级别 | ruleActionType=1必填 | 1,2,3,4,5 | 
| alarmName | string | 否 | 告警名称 | ruleActionType=1必填 |  |  | 
| ruleId | string | 否 | 规则id | ruleActionType=2必填 |  |  | 
| operation | string | 否 | 执行操作 | ruleActionType=2必填 | 0:触发规则, 1:启用规则, 2:停用规则 | 
| noticeTypes | Array<Int> | 否 | 通知方式 | ruleActionType=3必填 | 1:短信, 2:邮件 | 
| smsDetail | object | 否 | 短信详情 | noticeTypes包含1必填 |  | 
| emailDetail | object | 否 | 邮件详情 | noticeTypes包含2必填 |  | 
| contacts | Array<string> | 否 | 联系人id | ruleActionType=3必填 |  | 
smsDetail 说明
| 参数名称 | 类型 | 是否必须 | 名称 | 备注 | 参数值 | 
|---|
| ruleNoticeType | integer | 是 | 模板类型 |  | 1:系统默认, 2:自定义 | 
| configId | string | 是 | 配置id |  |  | 
| templateId | string | 是 | 模板id |  | 
| variable | array[object] | 否 | 模板变量 |  |  | 
短信variable 说明
| 参数名称 | 类型 | 是否必须 | 名称 | 备注 | 参数值 | 
|---|
| key | string | 是 | 模板变量key |  | 
| value | string | 是 | 模板变量value |  |  | 
emailDetail 说明
| 参数名称 | 类型 | 是否必须 | 名称 | 备注 | 参数值 | 
|---|
| ruleNoticeType | integer | 是 | 模板类型 |  | 1:系统默认, 2:自定义 | 
| configId | string | 是 | 配置id |  |  | 
| templateId | string | 是 | 模板id |  | 
| variable | array[object] | 否 | 模板变量 |  |  | 
邮件variable 说明
| 参数名称 | 类型 | 是否必须 | 名称 | 备注 | 参数值 | 
|---|
| key | string | 是 | 模板变量key |  | 
| value | string | 是 | 模板变量value |  |  | 
响应参数
| 名称 | 类型 | 说明 | 
|---|
| code | string | 响应码 | 
| msg | string | 响应码说明 | 
| data | object | 响应内容 | 
data 说明
| 参数名称 | 类型 | 名称 | 参数 | 备注 | 
|---|
| productId | string | 产品productId |  |  | 
请求示例
{
    "ruleId": "63c38a990c40c20e50b8bfe3",
    "name": "rule-nodeId",
    "description": "",
    "start": "1",
    "effectAllTime": "1",
    "conditionRelation": "and",
    "ruleActionPo": [
        {
            "nodeId": "61518485cfb170780841f377",
            "deviceActionType": "1",
            "serviceCallParams": {
                "identify": "s1_sync",
                "propSetParamsList": [
                    {
                        "value": "1",
                        "identify": "s_int",
                        "type": "int32"
                    },
                    {
                        "value": "1",
                        "identify": "s_float",
                        "type": "float"
                    },
                    {
                        "value": "1",
                        "identify": "s_double",
                        "type": "double"
                    },
                    {
                        "value": "1",
                        "identify": "s_bool",
                        "type": "bool"
                    },
                    {
                        "value": "111111",
                        "identify": "s_text",
                        "type": "text"
                    },
                    {
                        "value": "1",
                        "identify": "s_enum",
                        "type": "enum"
                    }
                ]
            },
            "ruleActionType": "0",
            "actionId": "3f4e05f9-dff2-4b37-86d9-a28d11f6a9911",
            "delayTime": "0",
            "deviceName": "MY00000056"
        }
    ],
    "triggerPo": [
        {
            "cron": "00 06 * * ?",
            "dateType": "2",
            "timingUuid": null,
            "triggerType": "0"
        },
        {
            "nodeId": "61518485cfb170780841f377",
            "triggerStrategy": "0",
            "productId": "9105BDA6",
            "timingUuid": "0ebaaaa9-b73c-4311-853a-c84c191062a4",
            "triggerType": "1",
            "deviceTriggerType": "2",
            "type": null,
            "deviceName": "接口添加单一设备",
            "status": "1"
        }
    ]
}
响应示例
{
    "code": "8001",
    "msg": "操作成功",
    "data": true
}
错误码
| code | 描述 | 
|---|
| 60005 | 设备不存在 | 
| 64020 | 定时触发器只能有一个 | 
| 64005 | 触发条件超出上限 | 
| 64008 | 执行动作超出上限 | 
| 64006 | 告警名称不规范 | 
| 64014 | 规则联动选择规则不存在或不符合要求 | 
| 68001 | 产品未定义物模型 | 
| 64022 | 执行动作,发送通知,参数错误 | 
| 64023 | 执行动作,上报告警,参数错误 | 
删除规则
请求地址: /openApi/v2/ruleEngine/delete
传参方式: POST
备注: 无
请求参数
Body:
| 参数名称 | 类型 | 是否必须 | 名称 | 备注 | 参数值 | 
|---|
| ruleId | string | 是 | 规则id |  |  | 
响应参数
| 名称 | 类型 | 说明 | 
|---|
| code | string | 响应码 | 
| msg | string | 响应码说明 | 
| data | object | 响应内容 | 
请求示例
{
    "ruleId":"62ce31b8d9ba552efd7e4405"
}
响应示例
{
    "code": "8001",
    "msg": "操作成功",
    "data": true
}
查询规则详情
请求地址: /openApi/v2/ruleEngine/query
传参方式: POST
备注: 无
请求参数
Body:
| 参数名称 | 类型 | 是否必须 | 名称 | 备注 | 参数值 | 
|---|
| ruleId | string | 是 | 规则id |  |  | 
响应参数
| 名称 | 类型 | 说明 | 
|---|
| code | string | 响应码 | 
| msg | string | 响应码说明 | 
| data | object | 响应内容 | 
data 说明
| 参数名称 | 类型 | 名称 | 参数 | 
|---|
| ruleId | string | 规则id |  | 
| name | string | 规则名称 |  | 
| description | string | 规则描述 |  | 
| createAt | string | 创建时间 |  | 
| updateAt | string | 更新时间 |  | 
| start | string | 开启状态 | 0:禁用, 1:开启 | 
| effectAllTime | string | 生效时间 | 0:指定时间, 1:一直生效 | 
| effectTime | string[] | 规则生效的时间段 |  |  | 
| effectWeek | string[] | 规则生效周 | 1:周日,2:周一, 3:周二,4:周三, 5:周四,6:周五,7:周六 | 
| conditionRelation | string | 条件触发关系 | or:或, and:与 | 
| triggerPo | object[] | 触发条件 |  | 
| ruleActionPo | object[] | 执行动作 |  | 
triggerPo 说明
| 参数名称 | 类型 | 名称 | 参数 | 
|---|
| timingUuid | string | 触发条件id |  | 
| triggerType | string | 触发条件 | 0:定时触发, 1:设备触发 | 
| cron | string | 触发器cron表达式 |  | 
| triggerStrategy | string | 触发机制 | 0:仅首次, 1:每一次 | 
| nodeId | string | 设备id |  |  | 
| productId | string | 产品productId |  |  | 
| nodeEui | string | 设备号 |  |  | 
| deviceName | string | 设备名称 |  |  | 
| deviceTriggerType | string | 设备触发方式 | 0:属性上报, 1:事件上报, 2:设备状态 | 
| prop | string | 属性标识 |  | 
| type | string | 属性数据类型 |  | 
| operator | string | 逻辑运算符 | >,>=,<,<=,==,!=,in,between | 
| value | string | 属性值 |  |  | 
| event | string | 事件标识 |  |  | 
| status | string | 设备状态 | 0:设备下线, 1:设备上线 | 
ruleActionPo 说明
| 参数名称 | 类型 | 名称 | 参数 | 
|---|
| actionId | string | 指定动作id |  | 
| ruleActionType | string | 触发方式 | 0:下发命令, 1:上报告警, 2:规则联动 | 
| nodeId | string | 设备Id |  |  | 
| productId | string | 产品productId |  |  | 
| nodeEui | string | 设备号 |  |  | 
| deviceName | string | 设备名称 |  |  | 
| deviceActionType | string | 执行方式 | 0:设置属性, 1:调用服务 | 
| propSetParams | object | 设置属性参数 |  |  | 
| serviceCallParams | object | 调用服务参数 |  |  | 
| delayTime | string | 延时执行(秒) |  |  | 
| level | string | 级别 | 1,2,3,4,5 | 
| alarmName | string | 告警名称 |  |  | 
| ruleId | string | 关联规则id |  |  | 
| ruleName | string | 关联规则名称 |  |  | 
| operation | string | 执行操作 | 0:触发规则, 1:启用规则, 2:停用规则 | 
propSetParams 说明
| 参数名称 | 类型 | 名称 | 参数 | 备注 | 
|---|
| identify | string | 属性标识 |  | 
| value | string | 属性值 |  | 
| type | string | 属性数据类型 |  | 
serviceCallParams 说明
| 参数名称 | 类型 | 名称 | 参数 | 备注 | 
|---|
| identify | string | 属性标识 |  | 
| propSetParamsList | object[] | 属性列表参数 |  |  | 
propSetParamsList 说明
| 参数名称 | 类型 | 名称 | 参数 | 备注 | 
|---|
| identify | string | 属性标识 |  | 
| value | string | 属性值 |  | 
| type | string | 属性数据类型 |  | 
请求示例
{
    "ruleId": "63c38a990c40c20e50b8bfe3"
}
响应示例
{
    "code": "8001",
    "msg": "操作成功",
    "data": {
        "ruleId": "63c38a990c40c20e50b8bfe3",
        "name": "rule-nodeId",
        "description": "",
        "createAt": "2023-01-15 13:09:45",
        "start": "1",
        "effectAllTime": "1",
        "effectTime": [],
        "effectWeek": [],
        "conditionRelation": "and",
        "ruleActionPo": [
            {
                "nodeEui": "MY00000056",
                "deviceActionType": "1",
                "productId": "B81550DD",
                "serviceCallParams": {
                    "identify": "s1_sync",
                    "propSetParamsList": [
                        {
                            "value": "1",
                            "identify": "s_int",
                            "type": "int32"
                        },
                        {
                            "value": "1",
                            "identify": "s_float",
                            "type": "float"
                        }
                    ]
                },
                "ruleActionType": "0",
                "actionId": "3f4e05f9-dff2-4b37-86d9-a28d11f6a991",
                "delayTime": "0",
                "deviceName": "MY00000056"
            }
        ],
        "triggerPo": [
            {
                "cron": "00 06 * * ?",
                "dateType": "2",
                "timingUuid": "af0fdf7d-106d-4fb1-aeb0-8a858b8db4c5",
                "triggerType": "0"
            },
            {
                "nodeEui": "MQTT00000000066",
                "triggerStrategy": "0",
                "productId": "9105BDA6",
                "timingUuid": "0ebaaaa9-b73c-4311-853a-c84c191062a4",
                "triggerType": "1",
                "deviceTriggerType": "2",
                "deviceName": "接口添加单一设备",
                "status": "1"
            }
        ],
        "updateAt": "2023-01-16 15:48:52"
    }
}
规则禁启用
请求地址: /openApi/v2/ruleEngine/opt
传参方式: POST
备注: 无
请求参数
Body:
| 参数名称 | 类型 | 是否必须 | 名称 | 备注 | 参数值 | 
|---|
| ruleId | string | 是 | 规则id |  |  | 
| start | integer | 是 | 状态 |  | 0:停用, 1:启用 | 
响应参数
| 名称 | 类型 | 说明 | 
|---|
| code | string | 响应码 | 
| msg | string | 响应码说明 | 
| data | object | 响应内容 | 
请求示例
{
    "ruleId":"62d65f983bcc2c394166eb95",
    "start":"0"
}
响应示例
{
    "code": "8001",
    "msg": "操作成功",
    "data": true
}
分页查询规则
请求地址: /openApi/v2/ruleEngine/list
传参方式: POST
备注: 无
请求参数
Body:
| 参数名称 | 类型 | 是否必须 | 名称 | 备注 | 参数 | 
|---|
| page | integer | 否 | 页数 | 最小值为1,默认值为1 |  | 
| pageSize | integer | 否 | 分页数 | 最小值为1,最大值为100,默认值为10 |  | 
| name | string | 是 | 规则名称 | 模糊查询 |  | 
| start | integer | 是 | 状态 |  | 0:停用, 1:启用 | 
响应参数
| 名称 | 类型 | 说明 | 
|---|
| code | string | 响应码 | 
| msg | string | 响应码说明 | 
| data | object | 响应内容 | 
data 说明
| 参数名称 | 类型 | 名称 | 备注 | 
|---|
| records | object[] | 分页列表 |  | 
| current | integer | 当前页 |  | 
| size | integer | 分页数 |  | 
| total | integer | 总页数 |  | 
records 说明
| 参数名称 | 类型 | 名称 | 备注 | 
|---|
| ruleId | string | 规则id |  | 
| name | string | 规则名称 |  | 
| description | string | 规则描述 |  | 
| createAt | string | 创建时间 |  | 
| start | string | 开启状态 | 0:禁用, 1:开启 | 
| timingUuid | string | 触发条件id |  | 
请求示例
{
    "page": 1,
    "pageSize": 5,
    "name": "测试",
    "start": 1
}
响应示例
{
    "code": "8001",
    "msg": "操作成功",
    "data": {
        "records": [
            {
                "ruleId": "63c26d043865b9307d7a6092",
                "name": "测试规则0113060",
                "description": "@&1232",
                "createAt": "2023-01-14 16:51:16",
                "start": "1",
                "timingUuid": null
            },
            {
                "ruleId": "63c2613c3865b9307d7a6091",
                "name": "触发条件0101",
                "description": "test",
                "createAt": "2023-01-14 16:01:00",
                "start": "1",
                "timingUuid": "5ab15430-4b64-4377-8dbe-339bb448b076"
            },
            {
                "ruleId": "63c25da23865b9307d7a6090",
                "name": "触发条件自定义01",
                "description": "test",
                "createAt": "2023-01-14 15:45:38",
                "start": "1",
                "timingUuid": "e61f055f-52ea-44c9-9d93-01d4da15e15c"
            },
            {
                "ruleId": "63c25d8e3865b9307d7a608f",
                "name": "触发条件每周01",
                "description": "test",
                "createAt": "2023-01-14 15:45:18",
                "start": "1",
                "timingUuid": "9f0639e7-6442-4153-aa32-55f3c0eef669"
            },
            {
                "ruleId": "63c25d7b3865b9307d7a608e",
                "name": "触发条件每天01",
                "description": "test",
                "createAt": "2023-01-14 15:44:59",
                "start": "1",
                "timingUuid": "662f77dc-f9d2-4af5-94fd-149b196efa1f"
            }
        ],
        "current": 1,
        "size": 5,
        "total": 62
    }
}
获取规则列表
请求地址: /openApi/v2/ruleEngine/getRuleList
传参方式: POST
备注: 添加、编辑规则时可用该接口筛选前置条件,用于规则联动
请求参数
Body:
| 参数名称 | 类型 | 是否必须 | 名称 | 备注 | 参数值 | 
|---|
| ruleId | string | 否 | 规则id | 添加时为空,编辑时需填写 |  | 
响应参数
| 名称 | 类型 | 说明 | 
|---|
| code | string | 响应码 | 
| msg | string | 响应码说明 | 
| data | object | 响应内容 | 
data 说明
| 参数名称 | 类型 | 名称 | 参数 | 备注 | 
|---|
| ruleId | string | 规则id |  |  | 
| name | string | 规则名称 |  |  | 
请求示例
{
    "ruleId": "63a0012ef79f704c8b4b5bc7"
}
响应示例
{
    "code": "8001",
    "msg": "操作成功",
    "data": [
        {
            "ruleId": "63c394982f029d4685a0dbb9",
            "name": "编辑规则"
        },
        {
            "ruleId": "63c38a990c40c20e50b8bfe3",
            "name": "rule-nodeId"
        }
     ]
}
获取规则变量
请求地址: /openApi/v2/ruleEngine/ruleVariable/list
传参方式: GET
备注: 添加、编辑规则时可用该接口筛选前置条件,用于发送通知,当前接口无请求参数
响应参数
| 名称 | 类型 | 说明 | 
|---|
| code | string | 响应码 | 
| msg | string | 响应码说明 | 
| data | object | 响应内容 | 
data 说明
| 参数名称 | 类型 | 名称 | 参数 | 备注 | 
|---|
| code | string | 变量code |  |  | 
| name | string | 变量名称 |  |  | 
响应示例
{
    "code": "8001",
    "msg": "操作成功",
    "data": [
        {
            "code": "ruleName",
            "name": "规则名称"
        },
        {
            "code": "nodeEui",
            "name": "设备Id"
        },
        {
            "code": "productName",
            "name": "产品名称"
        },
        {
            "code": "nodeName",
            "name": "设备名称"
        },
        {
            "code": "alarmName",
            "name": "告警名称"
        }
    ]
}
联系人列表
请求地址: /openApi/v2/ruleEngine/contact/list
传参方式: GET
备注: 添加、编辑规则时可用该接口筛选前置条件,用于发送通知
请求参数
Params:
| 参数名称 | 类型 | 是否必须 | 名称 | 备注 | 参数值 | 
|---|
| search | string | 否 | 联系人名称或电话或邮箱 |  |  | 
响应参数
| 名称 | 类型 | 说明 | 
|---|
| code | string | 响应码 | 
| msg | string | 响应码说明 | 
| data | object | 响应内容 | 
data 说明
| 参数名称 | 类型 | 名称 | 参数 | 备注 | 
|---|
| id | string | 数据库id |  |  | 
| name | string | 名称 |  |  | 
| mobile | string | 手机号 |  |  | 
| email | string | 邮箱 |  |  | 
| createAt | string | 创建时间 |  |  | 
请求示例
/openApi/v2/ruleEngine/contact/list?search=8
响应示例
{
    "code": "8001",
    "msg": "操作成功",
    "data": [
        {
            "mobile": "15657993164",
            "name": "l8",
            "id": "6444d1cdd56b65373bf84643",
            "createAt": "2023-04-23 14:35:57",
            "email": "21111@qq.com"
        }
    ]
}
短信配置列表
请求地址: /openApi/v2/ruleEngine/smsConfig/list
传参方式: POST
备注: 添加、编辑规则时可用该接口筛选前置条件,用于发送通知
请求参数
Body:
| 参数名称 | 类型 | 是否必须 | 名称 | 备注 | 参数 | 
|---|
| ruleNoticeType | integer | 是 | 模板获取方式 |  | 1:系统默认 2:自定义 | 
响应参数
| 名称 | 类型 | 说明 | 
|---|
| code | string | 响应码 | 
| msg | string | 响应码说明 | 
| data | object | 响应内容 | 
data 说明
| 参数名称 | 类型 | 名称 | 备注 | 
|---|
| id | string | 数据库id |  | 
| name | string | 名称 |  | 
请求示例
{"ruleNoticeType":1}
响应示例
{
    "code": "8001",
    "msg": "操作成功",
    "data": [
        {
            "name": "短信配置测试",
            "id": "64424d2bc4cee663bd97a3fd"
        },
        {
            "name": "短信配置测试1",
            "id": "64424e3a509e83502e4832c1"
        },
        {
            "name": "短信配置测试3",
            "id": "6446184178d12f475ee08d50"
        }
    ]
}
短信模板列表
请求地址: /openApi/v2/ruleEngine/smsTemplate/list
传参方式: POST
备注: 添加、编辑规则时可用该接口筛选前置条件,用于发送通知
请求参数
Body:
| 参数名称 | 类型 | 是否必须 | 名称 | 备注 | 参数 | 
|---|
| ruleNoticeType | integer | 是 | 模板获取方式 |  | 1:系统默认 2:自定义 | 
响应参数
| 名称 | 类型 | 说明 | 
|---|
| code | string | 响应码 | 
| msg | string | 响应码说明 | 
| data | object | 响应内容 | 
data 说明
| 参数名称 | 类型 | 名称 | 备注 | 
|---|
| configId | string | 配置id |  | 
| template | array[object] | 模板内容 |  | 
template 说明
| 参数名称 | 类型 | 名称 | 备注 | 
|---|
| id | string | 模板数据库id |  | 
| configId | string | 配置id |  | 
| name | string | 模板名称 |  | 
| variable | array[string] | 模板变量 |  | 
请求示例
{"ruleNoticeType":1}
响应示例
{
    "code": "8001",
    "msg": "操作成功",
    "data": [
        {
            "template": [
                {
                    "configId": "64424e3a509e83502e4832c1",
                    "variable": [
                        "name",
                        "nodeEui",
                        "ruleName"
                    ],
                    "name": "短信模板测试",
                    "id": "6444f5a5c7078f5ba357e813"
                },
                {
                    "configId": "64424e3a509e83502e4832c1",
                    "variable": [
                        "name",
                        "nodeEui",
                        "ruleName"
                    ],
                    "name": "短信模板测试1",
                    "id": "64466cff9afb794cd87aeb91"
                }
            ],
            "configId": "64424e3a509e83502e4832c1"
        }
    ]
}
邮件配置列表
请求地址: /openApi/v2/ruleEngine/emailConfig/list
传参方式: POST
备注: 添加、编辑规则时可用该接口筛选前置条件,用于发送通知
请求参数
Body:
| 参数名称 | 类型 | 是否必须 | 名称 | 备注 | 参数 | 
|---|
| ruleNoticeType | integer | 是 | 模板获取方式 |  | 1:系统默认 2:自定义 | 
响应参数
| 名称 | 类型 | 说明 | 
|---|
| code | string | 响应码 | 
| msg | string | 响应码说明 | 
| data | object | 响应内容 | 
data 说明
| 参数名称 | 类型 | 名称 | 备注 | 
|---|
| id | string | 数据库id |  | 
| name | string | 配置名称 |  | 
请求示例
{"ruleNoticeType":1}
响应示例
{
    "code": "8001",
    "msg": "操作成功",
    "data": [
        {
            "name": "邮件配置",
            "id": "6445e32b7cfcfd58c02c13d1"
        }
    ]
}
邮件模板列表
请求地址: /openApi/v2/ruleEngine/emailTemplate/list
传参方式: POST
备注: 添加、编辑规则时可用该接口筛选前置条件,用于发送通知
请求参数
Body:
| 参数名称 | 类型 | 是否必须 | 名称 | 备注 | 参数 | 
|---|
| ruleNoticeType | integer | 是 | 模板获取方式 |  | 1:系统默认 2:自定义 | 
响应参数
| 名称 | 类型 | 说明 | 
|---|
| code | string | 响应码 | 
| msg | string | 响应码说明 | 
| data | object | 响应内容 | 
data 说明
| 参数名称 | 类型 | 名称 | 备注 | 
|---|
| configId | string | 配置id |  | 
| template | array[object] | 模板内容 |  | 
template 说明
| 参数名称 | 类型 | 名称 | 备注 | 
|---|
| id | string | 模板数据库id |  | 
| configId | string | 配置id |  | 
| name | string | 模板名称 |  | 
| variable | array[string] | 模板变量 |  | 
请求示例
{"ruleNoticeType":1}
响应示例
{
    "code": "8001",
    "msg": "操作成功",
    "data": [
        {
            "template": [
                {
                    "configId": "6445e32b7cfcfd58c02c13d1",
                    "variable": [
                        "nodeEui1",
                        "k1",
                        "f1",
                        "h1"
                    ],
                    "name": "邮件模板2223",
                    "id": "64461f8481dc6e4d636b49bc"
                }
            ],
            "configId": "6445e32b7cfcfd58c02c13d1"
        }
    ]
}
告警日志
查询告警日志
请求地址: /openApi/v2/alarmCenter/list
传参方式: POST
备注: 无
请求参数
Body:
| 参数名称 | 类型 | 是否必须 | 名称 | 备注 | 
|---|
| page | integer | 否 | 页数 | 最小值为1,默认值为1 | 
| pageSize | integer | 否 | 分页数 | 最小值为1,最大值为100,默认值为10 | 
| beginTime | string | 否 | 查询开始时间 | 默认当前时间前7天,最早为当前时间前30天 | 
| endTime | string | 否 | 查询结束时间 | 默认当前时间,开始时间有值时必填 | 
| name | string | 否 | 告警名称 | 模糊查询 | 
| level | string | 否 | 告警级别 | 1,2,3,4,5 | 
| status | string | 否 | 处理状态 | 0:未处理, 1:已处理 | 
响应参数
| 名称 | 类型 | 说明 | 
|---|
| code | string | 响应码 | 
| msg | string | 响应码说明 | 
| data | object | 响应内容 | 
data 说明
| 参数名称 | 类型 | 名称 | 备注 | 
|---|
| records | object[] | 分页列表 |  | 
| current | integer | 当前页 |  | 
| size | integer | 分页数 |  | 
| total | integer | 总页数 |  | 
records 说明
| 参数名称 | 类型 | 名称 | 参数 | 
|---|
| alarmId | string | 告警id |  | 
| name | string | 告警名称 |  | 
| level | string | 告警级别 | 1,2,3,4,5 | 
| alarmInfo | string | 告警信息 |  | 
| status | string | 处理状态 | 0:未处理, 1:已处理 | 
| date | string | 告警时间 |  | 
请求示例
{
    "page": 1,
    "pageSize": 10,
    "name": "告警",
    "level": 1,
    "beginTime":"2023-01-29 00:00:00",
    "endTime":"2023-01-30 00:00:00"
}
响应示例
{
    "code": "8001",
    "msg": "操作成功",
    "data": {
        "records": [
            {
                "alarmId": "63d570b1fe2cc74768dd92be",
                "name": "告警11",
                "level": "1",
                "alarmInfo": "规则:wwww,联动触发告警",
                "status": "0",
                "date": "2023-01-29 03:00:00"
            },
            {
                "alarmId": "63d570b1fe2cc74768dd92bc",
                "name": "告警11",
                "level": "1",
                "alarmInfo": "规则:3r22fawfaw,联动触发告警",
                "status": "0",
                "date": "2023-01-29 03:00:00"
            }
        ],
        "current": 1,
        "size": 10,
        "total": 2
    }
}
告警处理
请求地址: /openApi/v2/alarmCenter/handle
传参方式: POST
备注: 无
请求参数
Body:
| 参数名称 | 类型 | 是否必须 | 名称 | 备注 | 参数值 | 
|---|
| alarmId | string | 否 | 告警id | all=0单条处理时必填 |  | 
| all | string | 是 | 处理方式 |  | 0:单条处理, 1:一键处理 | 
响应参数
| 名称 | 类型 | 说明 | 
|---|
| code | string | 响应码 | 
| msg | string | 响应码说明 | 
| data | object | 响应内容 | 
请求示例
{
    "alarmId":"62bc053980182f25d46e1aa3",
    "all":"0"
}
响应示例
{
    "code": "8001",
    "msg": "操作成功",
    "data": true
}
场景日志
分页查询场景日志
请求地址: /openApi/v2/sceneLog/list
传参方式: POST
备注: 无
请求参数
Body:
| 参数名称 | 类型 | 是否必须 | 名称 | 备注 | 
|---|
| page | integer | 否 | 页数 | 最小值为1,默认值为1 | 
| pageSize | integer | 否 | 分页数 | 最小值为1,最大值为100,默认值为10 | 
| beginTime | string | 否 | 查询开始时间 | 默认当前时间前7天,最早为当前时间前30天 | 
| endTime | string | 否 | 查询结束时间 | 默认当前时间,开始时间有值时必填 | 
| status | string | 否 | 处理状态 | 0:未处理, 1:已处理 | 
响应参数
| 名称 | 类型 | 说明 | 
|---|
| code | string | 响应码 | 
| msg | string | 响应码说明 | 
| data | object | 响应内容 | 
data 说明
| 参数名称 | 类型 | 名称 | 备注 | 
|---|
| records | object[] | 分页列表 |  | 
| current | integer | 当前页 |  | 
| size | integer | 分页数 |  | 
| total | integer | 总页数 |  | 
records 说明
| 参数名称 | 类型 | 名称 | 参数 | 
|---|
| sceneLogId | string | 场景日志id |  | 
| ruleId | string | 规则id |  | 
| time | integer | 日志时间 |  | 
| status | string | 执行状态 | 0:失败, 1:成功 | 
请求示例
{
    "ruleId": "63a0012ef79f704c8b4b5bc7",
    "page": 1,
    "pageSize": 10,
    "beginTime":"2023-01-01 00:00:00",
    "endTime":"2023-01-30 00:00:00"
}
响应示例
{
    "code": "8001",
    "msg": "操作成功",
    "data": {
        "records": [
            {
                "sceneLogId": "e1dec9b1-c5ea-4328-a15a-fe7525ce2fb7",
                "ruleId": "63a0012ef79f704c8b4b5bc7",
                "time": "2023-01-06 09:05:17",
                "status": "0"
            }
        ],
        "current": 1,
        "size": 10,
        "total": 1
    }
}
分页查询场景日志详情
请求地址: /openApi/v2/sceneLogInfo/list
传参方式: POST
备注: 无
请求参数
Body:
| 参数名称 | 类型 | 是否必须 | 名称 | 备注 | 
|---|
| page | integer | 否 | 页数 | 最小值为1,默认值为1 | 
| pageSize | integer | 否 | 分页数 | 最小值为1,最大值为100,默认值为10 | 
| sceneLogId | string | 是 | 场景日志id | 
响应参数
| 名称 | 类型 | 说明 | 
|---|
| code | string | 响应码 | 
| msg | string | 响应码说明 | 
| data | object | 响应内容 | 
data 说明
| 参数名称 | 类型 | 名称 | 备注 | 
|---|
| records | object[] | 分页列表 |  | 
| current | integer | 当前页 |  | 
| size | integer | 分页数 |  | 
| total | integer | 总页数 |  | 
records 说明
| 参数名称 | 类型 | 名称 | 备注 | 
|---|
| sceneInfoLogId | string | 场景详情日志id |  | 
| sceneLogId | string | 场景日志id |  | 
| performObject | string | 执行对象 | 
| status | string | 执行状态 | 0:失败, 1:成功 | 
| failInfo | string | 失败原因 |  | 
| time | integer | 日志时间 |  | 
请求示例
{
    "sceneLogId": "e1dec9b1-c5ea-4328-a15a-fe7525ce2fb7",
    "page": 1,
    "pageSize": 10
}
响应示例
{
    "code": "8001",
    "msg": "操作成功",
    "data": {
        "records": [
            {
                "sceneLogId": "e1dec9b1-c5ea-4328-a15a-fe7525ce2fb7",
                "sceneInfoLogId": "c554c8f5-5bd0-4418-bdf0-c28d11323cdd",
                "performObject": "规则测试2",
                "failInfo": "-",
                "time": "2023-01-06 09:05:17",
                "status": "1"
            },
            {
                "sceneLogId": "e1dec9b1-c5ea-4328-a15a-fe7525ce2fb7",
                "sceneInfoLogId": "421b6065-f264-4f2b-9bff-3912c9210daf",
                "performObject": "20MQTTWJ00001",
                "failInfo": "服务不存在",
                "time": "2023-01-06 09:05:17",
                "status": "0"
            },
            {
                "sceneLogId": "e1dec9b1-c5ea-4328-a15a-fe7525ce2fb7",
                "sceneInfoLogId": "eb57c3f5-1035-4ead-9814-68765d881237",
                "performObject": "20MQTTWJ00001",
                "failInfo": "属性不存在",
                "time": "2023-01-06 09:05:17",
                "status": "0"
            }
        ],
        "current": 1,
        "size": 10,
        "total": 3
    }
}
设备本地日志
设备本地日志上传
请求地址: /openApi/v2/localLog/upload
传参方式: POST
备注: 无
请求参数
| 参数名称 | 参数值 | 是否必须 | 备注 | 
|---|
| appId | 添加api应用生成的appId | 是 |  | 
| sign | 计算的签名值,参考签名计算示例 | 是 |  | 
| nonce | 随机数,可以使用随机数或者uuid | 是 |  | 
| authorization | 鉴权令牌,通过获取token接口获取 | 是 |  | 
| Content-Type | multipart/form-data | 是 |  | 
| 参数名称 | 类型 | 是否必须 | 名称 | 备注 | 参数值 | 
|---|
| level | string | 是 | 紧急程度 |  | 1:低, 2:中等, 3:紧急 | 
| simpleAt | string | 是 | 时间 | 格式yyyy-MM-dd HH:mm:ss |  | 
| nodeId | string | 是 | 设备id |  |  | 
| file | file | 是 | 日志文件 |  | 
响应参数
| 名称 | 类型 | 说明 | 
|---|
| code | string | 响应码 | 
| msg | string | 响应码说明 | 
| data | object | 响应内容 | 
请求示例
level:1
simpleAt:2023-01-11 09:30:08
nodeId:637592778fe5ca5d246db354
file:[文件]
响应示例
{
    "code": "8001",
    "msg": "操作成功",
    "data": true
}
分页查询设备本地日志
请求地址: /openApi/v2/localLog/list
传参方式: POST
备注: 无
请求参数
Body:
| 参数名称 | 类型 | 是否必须 | 名称 | 备注 | 参数 | 
|---|
| page | integer | 否 | 页数 | 最小值为1,默认值为1 | 
| pageSize | integer | 否 | 分页数 | 最小值为1,最大值为100,默认值为10 | 
| beginTime | string | 否 | 查询开始时间 | 默认当前时间前7天,最早为当前时间前30天 | 
| endTime | string | 否 | 查询结束时间 | 默认当前时间,开始时间有值时必填 | 
| level | string | 否 | 日志级别 |  | 0:低, 1:中等, 2:紧急 | 
| timeType | string | 否 | 时间类型 |  | 0:采集时间, 1:上传时间 | 
| productId | string | 否 | 产品productId |  |  | 
| nodeEui | string | 否 | 设备号 |  |  | 
| nodeId | string | 否 | 设备id | 当设备id、设备号或产品productId都有值的情况下,以nodeId为准 |  | 
响应参数
| 名称 | 类型 | 说明 | 
|---|
| code | string | 响应码 | 
| msg | string | 响应码说明 | 
| data | object | 响应内容 | 
data 说明
| 参数名称 | 类型 | 名称 | 备注 | 
|---|
| records | object[] | 分页列表 |  | 
| current | integer | 当前页 |  | 
| size | integer | 分页数 |  | 
| total | integer | 总页数 |  | 
records 说明
| 参数名称 | 类型 | 名称 | 备注 | 
|---|
| deviceLocalLogId | string | 设备本地日志id | 
| productId | string | 产品productId | 
| productName | string | 产品名称 | 
| nodeEui | string | 设备号 | 
| nodeId | string | 设备id | 
| level | string | 日志级别 | 0:低, 1:中等, 2:紧急 | 
| originalFilename | string | 上传文件的名称 | 
| fileKey | string | oss上的文件的key | 
| path | string | oss下载地址 | 
| simpleAt | string | 采集时间 | 
| createAt | string | 创建时间 | 
请求示例
{
    "productId":"",
    "nodeEui":"",
    "nodeId":"637592778fe5ca5d246db354",
    "level":"1",
    "timeType":"1",
    "beginTime":"2023-01-01 00:00:00",
    "endTime":"2023-01-30 00:00:00",
    "page": 1,
    "pageSize": 10
}
响应示例
{
    "code": "8001",
    "msg": "操作成功",
    "data": {
        "records": [
            {
                "deviceLocalLogId": "63c377cdf7a2292c2eb97f53",
                "productId": "2916C822",
                "productName": "MQTT非透传json371",
                "nodeEui": "MQTT000000000253",
                "nodeId": "637592778fe5ca5d246db354",
                "level": "1",
                "originalFilename": "1.jpg",
                "fileKey": "deviceLocalLog/xxxx_1.jpg",
                "path": "https://xxxx",
                "simpleAt": "2023-01-11 09:30:08",
                "createAt": "2023-01-15 11:49:32"
            },
            {
                "deviceLocalLogId": "63c377333b17973539aff0ec",
                "productId": "2916C822",
                "productName": "MQTT非透传json371",
                "nodeEui": "MQTT000000000253",
                "nodeId": "637592778fe5ca5d246db354",
                "level": "1",
                "originalFilename": "1.jpg",
                "fileKey": "deviceLocalLog/xxxx_1.jpg",
                "path": "https://xxxx",
                "simpleAt": "2023-01-11 09:30:08",
                "createAt": "2023-01-15 11:46:59"
            }
        ],
        "current": 1,
        "size": 10,
        "total": 2
    }
设备运行日志
分页查询设备运行日志
请求地址: /openApi/v2/runtimeLog/list
传参方式: POST
备注: 无
请求参数
Body:
| 参数名称 | 类型 | 是否必须 | 名称 | 备注 | 
|---|
| page | integer | 否 | 页数 | 最小值为1,默认值为1 | 
| pageSize | integer | 否 | 分页数 | 最小值为1,最大值为100,默认值为10 | 
| beginTime | string | 否 | 查询开始时间 | 默认当前时间前1天,最早为当前时间前7天 | 
| endTime | string | 否 | 查询结束时间 | 默认当前时间,开始时间有值时必填 | 
| productId | string | 否 | 产品productId | 
| nodeEui | string | 否 | 设备号 | 
| nodeId | string | 否 | 设备id | 当设备id、设备号、产品productId都有值的情况下,以nodeId为准 | 
| module | string | 否 | 模块 | DEVICE_STATUS:设备状态, DEVICE_ACTION:设备行为, MESSAGE_DEVICE_TO_CLOUD:设备到云消息, MESSAGE_CLOUD_TO_DEVICE:云到设备消息, OTA:OTA, REMOTE_CONFIG:远程配置, DEVICE_ANALYZE:数据解析, MODEL_DATA_REPORT:物模型消息, MODEL_DATA_VERIFY:物模型数据校验, SERVER_PUSH:服务端推送, API_CALL:API调用, DEVICE_SHADOW:设备影子, RULE_ENGINE:规则引擎, CLOUD_GATEWAY:云网关, SUB_RELATION:拓扑关系 | 
| status | string | 否 | 状态 | 200:成功, 400:失败 | 
| messageId | string | 否 | 消息id | 
| messageContent | string | 否 | 消息内容 | 
响应参数
| 名称 | 类型 | 说明 | 
|---|
| code | string | 响应码 | 
| msg | string | 响应码说明 | 
| data | object | 响应内容 | 
data 说明
| 参数名称 | 类型 | 名称 | 备注 | 
|---|
| records | object[] | 分页列表 |  | 
| current | integer | 当前页 |  | 
| size | integer | 分页数 |  | 
| total | integer | 总页数 |  | 
records 说明
| 参数名称 | 类型 | 名称 | 备注 | 
|---|
| runTimeLogId | string | 运行日志id | 
| productId | string | 产品productId | 
| nodeEui | string | 设备号 | 
| time | string | 时间 | 
| messageContent | string | 消息内容 | 
| content | string | 返回内容 | 
| module | string | 模块 | 参数内容同请求参数 | 
| opt | string | 操作 | 
| src | string | 来源 | 
| traceId | string | 来源id | 
| messageId | integer | messageId | 
| status | string | 状态 | 
请求示例
{
    "productId": "AE06B207",
    "nodeEui": "FFFF301B977E2342"
    "beginTime":"2023-01-29 00:00:00",
    "endTime":"2023-01-30 00:00:00",
    "page": 1,
    "pageSize": 10
}
响应示例
{
    "code": "8001",
    "msg": "操作成功",
    "data": {
        "records": [
            {
                "runTimeLogId": "UpNPWYYB70wcY5WdRQnv",
                "productId": "AE06B207",
                "nodeEui": "FFFF301B977E2342",
                "time": "2023-01-29 16:20:11",
                "messageContent": "{\"payload\":\"{\\\"openId\\\":\\\"845F86E6\\\",\\\"productId\\\":\\\"AE06B207\\\",\\\"nodeEui\\\":\\\"FFFF301B977E2342\\\",\\\"command\\\":1,\\\"timestamp\\\":1676535611853,\\\"encrypted\\\":false,\\\"messageId\\\":1676535611,\\\"requestId\\\":\\\"a952e7f0-2551-4393-9574-5acdb6dea8ef\\\",\\\"payload\\\":{\\\"NAM\\\":\\\"智能单色灯5\\\"},\\\"topic\\\":\\\"/sys/845F86E6/08903667/301B974DB651/subdevice/model/property/report\\\",\\\"reportType\\\":2}\",\"timestamp\":1676535611853,\"topic\":\"/sys/845F86E6/08903667/301B974DB651/subdevice/model/property/report\"}",
                "content": "{\"code\":\"70016\",\"reason\":\"连接失败\"}",
                "module": "SERVER_PUSH",
                "opt": "http",
                "src": null,
                "traceId": null,
                "messageId": 1676535611,
                "status": "400"
            },
            {
                "runTimeLogId": "TZNPWYYB70wcY5WdRQnv",
                "productId": "AE06B207",
                "nodeEui": "FFFF301B977E2342",
                "time": "2023-01-29 16:20:11",
                "messageContent": "{\"payload\":\"{\\\"params\\\":[{\\\"identify\\\":\\\"MAC\\\",\\\"value\\\":\\\"FFFF301B977E2342\\\"},{\\\"identify\\\":\\\"CEN\\\",\\\"value\\\":\\\"0\\\"},{\\\"identify\\\":\\\"CAP\\\",\\\"value\\\":\\\"7E\\\"},{\\\"identify\\\":\\\"ADD\\\",\\\"value\\\":\\\"2444\\\"},{\\\"identify\\\":\\\"NAM\\\",\\\"value\\\":\\\"智能单色灯5\\\"},{\\\"identify\\\":\\\"LIVE\\\",\\\"value\\\":\\\"ON\\\"},{\\\"identify\\\":\\\"data\\\",\\\"value\\\":\\\"\\\"},{\\\"identify\\\":\\\"RSSI\\\",\\\"value\\\":\\\"-76\\\"},{\\\"identify\\\":\\\"FWV\\\",\\\"value\\\":\\\"V6.7_LT52.0\\\"},{\\\"identify\\\":\\\"TYP\\\",\\\"value\\\":\\\"LT-LEV\\\"}]}\",\"timestamp\":1676535611853,\"topic\":\"/sys/845F86E6/08903667/301B974DB651/subdevice/model/property/report\"}",
                "content": "-",
                "module": "MODEL_DATA_REPORT",
                "opt": "属性上报",
                "src": null,
                "traceId": null,
                "messageId": 1676535611,
                "status": "200"
            }
        ],
        "current": 1,
        "size": 10,
        "total": 2
    }
}
OSS文件
获取OSS文件上传STS凭证
请求地址: /openApi/v2/
传参方式: POST
备注:
- 对于比较大的固件,考虑到其上传会消耗大量的时间,而造成的用户体验感降低,平台开放接口,授权STS凭证给用户,用户拿着STS凭证即可直接把文件上传到OSS服务器 ,而不经过平台的转发 
- STS凭证具有有效期,用户应在有效期内使用STS凭证完成文件上传,否则需要重新获取
请求参数
Body:
| 参数名称 | 类型 | 是否必须 | 名称 | 参数值 | 
|---|
| type | integer | 是 | 文件类型 | 1:设备证书存储的目录, 2:固件存储的目录, 3:设备本地日志存储的目录 | 
响应参数
| 名称 | 类型 | 说明 | 
|---|
| code | string | 响应码 | 
| msg | string | 响应码说明 | 
| data | object | 响应内容 | 
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": 1
}
响应示例
{
    "code": "8001",
    "msg": "操作成功",
    "data": {
        "endPoint": "oss-cn-zhangjiakou.aliyuncs.com",
        "accessKeyId": "yourAccessKeyId",
        "accessKeySecret": "yourAccessKeySecret",
        "stsToken": "yourStsToken",
        "expiation": 1675069200000,
        "bucket": "test-senthink-xiot",
        "deviceCertificateDir": "deviceCertificate/xxxxxx",
        "otaFirmwareDir": "",
        "deviceLocalLogDir": ""
    }
}
通知服务
短信配置-查询详情
请求地址: /senthink/openApi/v1/sms/config/query
传参方式: POST
备注: 无
请求参数
Body:
| 参数名称 | 类型 | 是否必须 | 名称 | 备注 | 
|---|
| id | string | 是 | 短信配置id |  | 
响应参数
| 名称 | 类型 | 说明 | 
|---|
| code | string | 响应码 | 
| msg | string | 响应码说明 | 
| data | object | 响应内容 | 
data 说明
| 参数名称 | 类型 | 名称 | 备注 | 
|---|
| id | string | 数据库id | 
| name | string | 配置名称 | 
| provider | string | 服务商 | 
| accessKey | string | AccessKey | 
| accessSecret | string | AccessSecret | 
| remark | string | 备注 | 
| createAt | string | 创建时间 | 
请求示例
{
  "id": "644910f4ecdc64dds6be021"
}
响应示例
{
    "code": "8001",
    "msg": "操作成功",
    "data": {
        "id": "644910f4ecdc64dds6be021",
        "name": "d正式配置",
        "provider": "aliyun",
        "accessKey": "LI5t8ZErqpEy6mSXKPboJZ",
        "accessSecret": "9s9vPKQFRddjdTDqYBl3daBJVquKT",
        "remark": null,
        "createAt": "2023-04-26 19:54:28"
    }
}
错误码
短信配置-查询列表
请求地址: /senthink/openApi/v1/sms/config/getPage
传参方式: POST
备注: 无
请求参数
Body:
| 参数名称 | 类型 | 是否必须 | 名称 | 备注 | 
|---|
| search | string | 否 | 配置名称 |  | 
| page | integer | 是 | 页数 | 最小值为1,默认值为1 | 
| pageSize | integer | 是 | 分页数 | 最小值为1,最大值为100,默认值为10 | 
| searchBgnTime | string | 否 | 时间开始区间 |  | 
| searchEndTime | string | 否 | 时间结束区间 |  | 
响应参数
| 名称 | 类型 | 说明 | 
|---|
| code | string | 响应码 | 
| msg | string | 响应码说明 | 
| data | object | 响应内容 | 
data 说明
| 参数名称 | 类型 | 名称 | 备注 | 
|---|
| asc | bool | 是否做了升序排列 | 
| current | integer | 当前页数 | 
| limit | integer | 限制 | 
| offset | integer | 偏移量 | 
| optimizeCount | bool | 是否优化了数据总数的查询 | 
| orderByField | string | 排序字段 | 
| pages | integer | 总页数 | 
| records | array[object] | 查询的结果集 | 
| searchCount | bool | 是否查询了数据总数 | 
| size | integer | 每页显示数量 | 
| total | integer | 数据总数 | 
records 说明
| 参数名称 | 类型 | 名称 | 备注 | 
|---|
| id | string | 数据库id | 
| name | string | 配置名称 | 
| provider | string | 服务商 | 
| accessKey | string | AccessKey | 
| accessSecret | string | AccessSecret | 
| remark | string | 备注 | 
| createAt | string | 创建时间 | 
请求示例
{
  "page": 1,
  "pageSize": 10,
  "search":"短信配置测试1",
  "searchBgnTime":"2023-04-20 11:05:28",
  "searchEndTime":"2023-04-22 11:05:29"
}
响应示例
{
    "code": "8001",
    "msg": "操作成功",
    "data": {
        "records": [
            {
                "id": "64424e3a509e83502e4832c1",
                "name": "短信配置测试1",
                "provider": "aliyun",
                "accessKey": "11111@qq.com",
                "accessSecret": "哒哒哒哒哒哒",
                "remark": "",
                "createAt": "2023-04-21 16:50:02"
            }
        ],
        "pages": 1,
        "current": 1,
        "size": 10,
        "searchCount": true,
        "total": 1,
        "optimizeCount": true,
        "offset": 0,
        "limit": 2147483647,
        "asc": true,
        "orderByField": null
    }
}
错误码
短信模板-查询详情
请求地址: /senthink/openApi/v1/sms/template/query
传参方式: POST
备注: 无
请求参数
Body:
| 参数名称 | 类型 | 是否必须 | 名称 | 备注 | 
|---|
| id | string | 是 | 短信模板id |  | 
响应参数
| 名称 | 类型 | 说明 | 
|---|
| code | string | 响应码 | 
| msg | string | 响应码说明 | 
| data | object | 响应内容 | 
data 说明
| 参数名称 | 类型 | 名称 | 备注 | 
|---|
| id | string | 数据库id | 
| configId | string | 配置数据库Id | 
| name | string | 模板名称 | 
| signName | string | 签名名称 | 
| code | string | 模板code | 
| variable | array[string] | 模板变量 | 
| createAt | string | 创建时间 | 
请求示例
{
  "id": "6444f5a5c7078f5ba357e813"
}
响应示例
{
    "code": "8001",
    "msg": "操作成功",
    "data": {
        "id": "6444f5a5c7078f5ba357e813",
        "name": "短信模板测试",
        "configId": "64424e3a509e83502e4832c1",
        "signName": "短信签名名称",
        "code": "codeTest1",
        "createAt": "2023-04-23 17:08:51",
        "variable": [
            "name",
            "nodeEui",
            "ruleName"
        ]
    }
}
错误码
短信模板-查询列表
请求地址: /senthink/openApi/v1/sms/template/getPage
传参方式: POST
备注: 无
请求参数
Body:
| 参数名称 | 类型 | 是否必须 | 名称 | 备注 | 
|---|
| search | string | 否 | 短信模板名称 |  | 
| configId | string | 是 | 短信配置id |  | 
| page | integer | 是 | 页数 | 最小值为1,默认值为1 | 
| pageSize | integer | 是 | 分页数 | 最小值为1,最大值为100,默认值为10 | 
| searchBgnTime | string | 否 | 时间开始区间 |  | 
| searchEndTime | string | 否 | 时间结束区间 |  | 
响应参数
| 名称 | 类型 | 说明 | 
|---|
| code | string | 响应码 | 
| msg | string | 响应码说明 | 
| data | object | 响应内容 | 
data 说明
| 参数名称 | 类型 | 名称 | 备注 | 
|---|
| asc | bool | 是否做了升序排列 | 
| current | integer | 当前页数 | 
| limit | integer | 限制 | 
| offset | integer | 偏移量 | 
| optimizeCount | bool | 是否优化了数据总数的查询 | 
| orderByField | string | 排序字段 | 
| pages | integer | 总页数 | 
| records | array[object] | 查询的结果集 | 
| searchCount | bool | 是否查询了数据总数 | 
| size | integer | 每页显示数量 | 
| total | integer | 数据总数 | 
records 说明
| 参数名称 | 类型 | 名称 | 备注 | 
|---|
| id | string | 数据库id | 
| configId | string | 配置数据库Id | 
| name | string | 模板名称 | 
| signName | string | 签名名称 | 
| code | string | 模板code | 
| variable | array[string] | 模板变量 | 
| createAt | string | 创建时间 | 
请求示例
{
  "page": 1,
  "pageSize": 10,
  "search": "模板",
  "configId":"64424e3a509e83502e4832c1",
  "searchBgnTime":"2023-04-23 16:57:28",
  "searchEndTime":"2023-04-26 17:05:29"
}
响应示例
{
    "code": "8001",
    "msg": "操作成功",
    "data": {
        "records": [
            {
                "id": "6444f5a5c7078f5ba357e813",
                "name": "短信模板",
                "configId": "64424e3a509e83502e4832c1",
                "signName": "短信签名名称",
                "code": "codeTest1",
                "createAt": "2023-04-23 17:08:51",
                "variable": [
                    "name",
                    "nodeEui",
                    "ruleName"
                ]
            }
        ],
        "pages": 1,
        "current": 1,
        "size": 10,
        "searchCount": true,
        "total": 2,
        "optimizeCount": true,
        "offset": 0,
        "limit": 2147483647,
        "asc": true,
        "orderByField": null
    }
}
错误码
短信模板-发送短信
请求地址: /senthink/openApi/v1/sms/template/send
传参方式: POST
备注: 无
请求参数
Body:
| 参数名称 | 类型 | 是否必须 | 名称 | 备注 | 
|---|
| templateId | string | 是 | 短信模板id |  | 
| mobiles | string | 是 | 手机号 | 多个手机号以","分隔 | 
| variable | array[object] | 否 | 模板变量 |  | 
variable 说明
| 参数名称 | 类型 | 是否必须 | 名称 | 备注 | 
|---|
| key | string | 是 | 模板变量key |  | 
| value | string | 是 | 模板变量value |  | 
响应参数
| 名称 | 类型 | 说明 | 
|---|
| code | string | 响应码 | 
| msg | string | 响应码说明 | 
| data | object | 响应内容 | 
请求示例
{
    "templateId":"64466cff9afb794cd87aeb91",
    "mobiles":"15667667887",
    "variable":[
        {
            "key":"name",
            "value":"testNode11"
        },
        {
            "key":"nodeEui",
            "value":"hhhhh"
        },
        {
            "key":"ruleName",
            "value":"dddf"
        }
    ]
}
响应示例
{
    "code": "8001",
    "msg": "操作成功",
    "data": true
}
错误码
| code | 描述 | 
|---|
| 4001 | 请求参数有误 | 
| 20008 | 变量名与变量值个数不匹配 | 
邮件配置-查询详情
请求地址: /senthink/openApi/v1/email/config/query
传参方式: POST
备注: 无
请求参数
Body:
| 参数名称 | 类型 | 是否必须 | 名称 | 备注 | 
|---|
| id | string | 是 | 邮件配置id |  | 
响应参数
| 名称 | 类型 | 说明 | 
|---|
| code | string | 响应码 | 
| msg | string | 响应码说明 | 
| data | object | 响应内容 | 
data 说明
| 参数名称 | 类型 | 名称 | 备注 | 
|---|
| id | string | 数据库id | 
| name | string | 配置名称 | 
| provider | string | 服务商 | 
| address | string | 服务器地址 | 
| port | integer | 端口 | 
| sender | string | 发件人 | 
| userName | string | 用户名 | 
| password | string | 密码 | 
| remark | string | 备注 | 
| createAt | string | 创建时间 | 
请求示例
{
    "id": "6445e32b7cfcfd58c02c13d1"
}
响应示例
{
    "code": "8001",
    "msg": "操作成功",
    "data": {
        "id": "6445e32b7cfcfd58c02c13d1",
        "name": "邮件配置",
        "provider": "default",
        "address": "11111@qq.com",
        "port": 5678,
        "sender": "11111ddd1@qq.com",
        "userName": "aliyun",
        "password": "11111@qq.com",
        "remark": "哒哒哒哒哒哒1",
        "createAt": "2023-04-24 10:02:19"
    }
}
错误码
邮件配置-查询列表
请求地址: /senthink/openApi/v1/email/config/getPage
传参方式: POST
备注: 无
请求参数
Body:
| 参数名称 | 类型 | 是否必须 | 名称 | 备注 | 
|---|
| search | string | 否 | 配置名称 |  | 
| page | integer | 是 | 页数 | 最小值为1,默认值为1 | 
| pageSize | integer | 是 | 分页数 | 最小值为1,最大值为100,默认值为10 | 
| searchBgnTime | string | 否 | 时间开始区间 |  | 
| searchEndTime | string | 否 | 时间结束区间 |  | 
响应参数
| 名称 | 类型 | 说明 | 
|---|
| code | string | 响应码 | 
| msg | string | 响应码说明 | 
| data | object | 响应内容 | 
data 说明
| 参数名称 | 类型 | 名称 | 备注 | 
|---|
| asc | bool | 是否做了升序排列 | 
| current | integer | 当前页数 | 
| limit | integer | 限制 | 
| offset | integer | 偏移量 | 
| optimizeCount | bool | 是否优化了数据总数的查询 | 
| orderByField | string | 排序字段 | 
| pages | integer | 总页数 | 
| records | array[object] | 查询的结果集 | 
| searchCount | bool | 是否查询了数据总数 | 
| size | integer | 每页显示数量 | 
| total | integer | 数据总数 | 
records 说明
| 参数名称 | 类型 | 名称 | 备注 | 
|---|
| id | string | 数据库id | 
| name | string | 配置名称 | 
| provider | string | 服务商 | 
| address | string | 服务器地址 | 
| port | integer | 端口 | 
| sender | string | 发件人 | 
| userName | string | 用户名 | 
| password | string | 密码 | 
| remark | string | 备注 | 
| createAt | string | 创建时间 | 
请求示例
{
  "page": 1,
  "pageSize": 10,
  "search":"配置",
  "searchBgnTime":"2023-04-24 09:05:28",
  "searchEndTime":"2023-04-24 11:05:29"
}
响应示例
{
    "code": "8001",
    "msg": "操作成功",
    "data": {
        "records": [
            {
                "id": "6445e32b7cfcfd58c02c13d1",
                "name": "邮件配置",
                "provider": "default",
                "address": "11111@qq.com",
                "port": 5678,
                "sender": "11111ddd1@qq.com",
                "userName": "aliyun",
                "password": "11111@qq.com",
                "remark": "哒哒哒哒哒哒1",
                "createAt": "2023-04-24 10:02:19"
            }
        ],
        "pages": 1,
        "current": 1,
        "size": 10,
        "searchCount": true,
        "total": 1,
        "optimizeCount": true,
        "offset": 0,
        "limit": 2147483647,
        "asc": true,
        "orderByField": null
    }
}
错误码
邮件模板-查询详情
请求地址: /senthink/openApi/v1/email/template/query
传参方式: POST
备注: 无
请求参数
Body:
| 参数名称 | 类型 | 是否必须 | 名称 | 备注 | 
|---|
| id | string | 是 | 邮件模板id |  | 
响应参数
| 名称 | 类型 | 说明 | 
|---|
| code | string | 响应码 | 
| msg | string | 响应码说明 | 
| data | object | 响应内容 | 
data 说明
| 参数名称 | 类型 | 名称 | 备注 | 
|---|
| id | string | 数据库id | 
| configId | string | 配置数据库Id | 
| name | string | 模板名称 | 
| title | string | 邮件标题 | 
| variable | array[string] | 模板变量 | 不重复的标题和内容变量集合 | 
| titleVariable | array[string] | 标题变量 | 
| contentVariable | array[string] | 内容变量 | 
| createAt | string | 创建时间 | 
请求示例
{
  "id": "6448c82a1600c705f01f4288"
}
响应示例
{
    "code": "8001",
    "msg": "操作成功",
    "data": {
        "id": "6448c82a1600c705f01f4288",
        "name": "邮件模板2223",
        "configId": "6445e32b7cfcfd58c02c13d1",
        "title": "测试测试${nodeEui1}${nodeEss1}",
        "content": "邮件模板内容测试${nodeEui1},邮件模板内容测试${k1},邮件模板内容测试${f1},邮件模板内容测试${h1}",
        "createAt": "2023-04-26 14:43:51",
        "titleVariable": [
            "nodeEui1",
            "nodeEss1"
        ],
        "contentVariable": [
            "nodeEui1",
            "k1",
            "f1",
            "h1"
        ],
        "variable": [
            "nodeEui1",
            "nodeEss1",
            "k1",
            "f1",
            "h1"
        ]
    }
}
错误码
邮件模板-查询列表
请求地址: /senthink/openApi/v1/email/template/getPage
传参方式: POST
备注: 无
请求参数
Body:
| 参数名称 | 类型 | 是否必须 | 名称 | 备注 | 
|---|
| search | string | 否 | 邮件模板名称 |  | 
| configId | string | 是 | 邮件配置id |  | 
| page | integer | 是 | 页数 | 最小值为1,默认值为1 | 
| pageSize | integer | 是 | 分页数 | 最小值为1,最大值为100,默认值为10 | 
| searchBgnTime | string | 否 | 时间开始区间 |  | 
| searchEndTime | string | 否 | 时间结束区间 |  | 
响应参数
| 名称 | 类型 | 说明 | 
|---|
| code | string | 响应码 | 
| msg | string | 响应码说明 | 
| data | object | 响应内容 | 
data 说明
| 参数名称 | 类型 | 名称 | 备注 | 
|---|
| asc | bool | 是否做了升序排列 | 
| current | integer | 当前页数 | 
| limit | integer | 限制 | 
| offset | integer | 偏移量 | 
| optimizeCount | bool | 是否优化了数据总数的查询 | 
| orderByField | string | 排序字段 | 
| pages | integer | 总页数 | 
| records | array[object] | 查询的结果集 | 
| searchCount | bool | 是否查询了数据总数 | 
| size | integer | 每页显示数量 | 
| total | integer | 数据总数 | 
records 说明
| 参数名称 | 类型 | 名称 | 备注 | 
|---|
| id | string | 数据库id | 
| configId | string | 配置数据库Id | 
| name | string | 模板名称 | 
| title | string | 邮件标题 | 
| variable | array[string] | 模板变量 | 不重复的标题和内容变量集合 | 
| titleVariable | array[string] | 标题变量 | 
| contentVariable | array[string] | 内容变量 | 
| createAt | string | 创建时间 | 
请求示例
{
  "page": 1,
  "pageSize": 10,
  "search":"334",
  "configId":"6445e32b7cfcfd58c02c13d1",
  "searchBgnTime":"2023-04-26 11:05:28",
  "searchEndTime":"2023-04-26 15:05:29"
}
响应示例
{
    "code": "8001",
    "msg": "操作成功",
    "data": {
        "records": [
            {
                "id": "6448c67859925d0d7eaf011f",
                "name": "邮件模板334",
                "configId": "6445e32b7cfcfd58c02c13d1",
                "title": "设备${nodeEui}${nodeEss}",
                "content": "邮件模板内容测试${nodeEui},邮件模板内容测试${k},邮件模板内容测试${f},邮件模板内容测试${h}",
                "createAt": "2023-04-26 14:36:24",
                "titleVariable": [
                    "nodeEui",
                    "nodeEss"
                ],
                "contentVariable": [
                    "nodeEui",
                    "k",
                    "f",
                    "h"
                ],
                "variable": [
                    "nodeEui",
                    "nodeEss",
                    "k",
                    "f",
                    "h"
                ]
            }
        ],
        "pages": 1,
        "current": 1,
        "size": 10,
        "searchCount": true,
        "total": 1,
        "optimizeCount": true,
        "offset": 0,
        "limit": 2147483647,
        "asc": true,
        "orderByField": null
    }
}
错误码
邮件模板-发送邮件
请求地址: /senthink/openApi/v1/email/template/send
传参方式: POST
备注: 无
请求参数
Body:
| 参数名称 | 类型 | 是否必须 | 名称 | 备注 | 
|---|
| templateId | string | 是 | 短信模板id |  | 
| emails | string | 是 | 邮箱 | 多个邮箱地址以","分隔 | 
| variable | array[object] | 否 | 模板变量 |  | 
variable 说明
| 参数名称 | 类型 | 是否必须 | 名称 | 备注 | 
|---|
| key | string | 是 | 模板变量key |  | 
| value | string | 是 | 模板变量value |  | 
响应参数
| 名称 | 类型 | 说明 | 
|---|
| code | string | 响应码 | 
| msg | string | 响应码说明 | 
| data | object | 响应内容 | 
请求示例
{
    "templateId":"64461f8481dc6e4d636b49bc",
    "emails":"1111@qq.com,111ddd1@qq.com",
    "variable":[
        {
            "key":"nodeEui1",
            "value":"testNode11"
        },
        {
            "key":"k1",
            "value":"ddd"
        },
        {
            "key":"f1",
            "value":"dddf"
        },
        {
            "key":"h1",
            "value":"ddddvddf"
        }
    ]
}
响应示例
{
    "code": "8001",
    "msg": "操作成功",
    "data": true
}
错误码
| code | 描述 | 
|---|
| 4001 | 请求参数有误 | 
| 20008 | 变量名与变量值个数不匹配 |