应用设备管理服务API
1. 概述
提供应用下设备列表、设备属性及状态获取,设备属性设置及设备服务调用。
2. 接口定义
2.1设备查询
2.1.1 批量获取应用的产品所有设备属性状态
路径 | /app/thing/properties/batch/get |
版本号 | 1.0.1 |
协议 | HTTPS |
请求方法 | POST |
授权类型 | app签名 |
超时时间 | 10000 |
请求参数
名称 | 类型 | 是否必选 | 描述 |
productKey | String | 是 | 产品pk |
pageNo | Integer | 是 | 当前页 |
pageSize | Integer | 是 | 页面大小 |
lpInstanceId | String | 否 | LP实例ID |
返回数据
名称 | 类型 | 描述 |
code | Int | 接口返回码。200表示成功。 |
message | String | 调用失败时,返回的出错信息。 |
localizedMsg | String | 本地语言的错误消息。 |
data | JSON | 响应结果 |
data:
名称 | 类型 | 描述 |
total | Integer | 总页数 |
pageNo | Integer | 当前页 |
pageSize | Integer | 每页大小 |
data | SimpleDeviceInfoAndPropert | 分页数据对象列表 |
分页数据对象 SimpleDeviceInfoAndPropert:
名称 | 类型 | 描述 |
productName | String | 产品名称 |
productKey | String | 产品pk |
deviceName | String | 设备名称 |
nodeType | Integer | 设备节点 |
status | String | 设备状态 |
activeTime | String | 设备激活时间 |
lastOnlineTime | String | 设备最好一次上线时间 |
createTime | String | 设备创建时间 |
childDeviceCount | Long | 自设备连接数 |
iotId | String | 设备iotId |
rangeQueryDTO | DeviceStatusDTO | 设备属性快照列表 |
设备属性快照列表 DeviceStatusDTO:
名称 | 类型 | 描述 |
iotId | String | 设备iotId |
batchId | String | 设备上报的标示。 可以批量上报,同一个批次上报的这个batchid一样 |
attribute | String | 设备属性 |
group | Integer | 设备分组 |
value | String | 属性值 |
gmtModified | String | 修改时间 |
示例
请求示例:
// https://github.com/aliyun/iotx-api-gateway-client
IoTApiClientBuilderParams ioTApiClientBuilderParams = new IoTApiClientBuilderParams();
ioTApiClientBuilderParams.setAppKey("你的<AppKey>");
ioTApiClientBuilderParams.setAppSecret("你的<AppSecret>");
SyncApiClient syncApiClient = new SyncApiClient(ioTApiClientBuilderParams);
IoTApiRequest request = new IoTApiRequest();
// 设置请求ID
String uuid = UUID.randomUUID().toString();
String id = uuid.replace("-", "");
request.setId(id);
// 设置API版本号
request.setApiVer("1.0.1");
// 设置参数
request.putParam("productKey","value1");
request.putParam("pageNo","value2");
request.putParam("pageSize","value3");
request.putParam("lpInstanceId","value4");
// 如果需要,设置headers
Map<String, String> headers = new HashMap<String, String>(8);
// headers.put("你的<header", "你的<value>");
// 设置请求参数域名、path、request , isHttps, headers
ApiResponse response = syncApiClient.postBody("api.link.aliyun.com", "/app/thing/properties/batch/get", request, true, headers);
System.out.println(
"response code = " + response.getCode()
+ " response = " + new String(response.getBody(), "UTF-8")
+ " headers = " + response.getHeaders().toString()
);
正常返回示例:
{
"code":200,
"data":{
"total":1,
"data":[
{
"activeTime":"2019-12-12 20:13:35",
"nodeType":0,
"productKey":"a17nEF9qLYJ",
"deviceName":"mIwfRzXY9wLpRFz5RfJJ",
"utcCreateTime":"2019-12-04T09:00:27.000Z",
"productName":"studio体验产品",
"utcActiveTime":"2019-12-12T12:13:35.164Z",
"utcLastOnlineTime":"2019-12-12T12:13:35.164Z",
"iotId":"mIwfRzXY9wLpRFz5RfJJ000101",
"createTime":"2019-12-04 17:00:27",
"lastOnlineTime":"2019-12-12 20:13:35",
"rangeQueryDTO":[
{
"identifier":"LightStatus",
"unit":"",
"dataType":"bool",
"name":"工作状态"
},
{
"identifier":"LightAdjustLevel",
"unit":"%",
"dataType":"int",
"name":"调光等级"
},
{
"identifier":"LightVolt",
"unit":"V",
"dataType":"float",
"name":"工作电压"
},
{
"identifier":"LightCurrent",
"unit":"A",
"dataType":"float",
"name":"工作电流"
},
{
"identifier":"ActivePower",
"unit":"W",
"dataType":"float",
"name":"有功功率值"
},
{
"identifier":"PowerRatio",
"unit":"pF",
"dataType":"float",
"name":"功率因数"
},
{
"identifier":"PowerConsumption",
"unit":"kW·h",
"dataType":"float",
"name":"用电量"
},
{
"identifier":"DrainVoltage",
"unit":"V",
"dataType":"float",
"name":"漏电压"
},
{
"identifier":"TiltValue",
"unit":"°",
"dataType":"int",
"name":"倾斜角度值"
},
{
"identifier":"ErrorPowerThreshold",
"unit":"W",
"dataType":"int",
"name":"故障功率门限"
},
{
"identifier":"ErrorCurrentThreshold",
"unit":"A",
"dataType":"float",
"name":"故障电流门限"
},
{
"identifier":"TiltThreshold",
"unit":"°",
"dataType":"int",
"name":"倾斜阈值"
},
{
"identifier":"UnderVoltThreshold",
"unit":"V",
"dataType":"int",
"name":"欠压阈值"
},
{
"identifier":"OverCurrentThreshold",
"unit":"A",
"dataType":"int",
"name":"过流阈值"
},
{
"identifier":"OverVoltThreshold",
"unit":"V",
"dataType":"int",
"name":"过压阈值"
},
{
"identifier":"LightErrorEnable",
"unit":"",
"dataType":"bool",
"name":"灯具故障使能"
},
{
"identifier":"OverCurrentEnable",
"unit":"",
"dataType":"bool",
"name":"过流告警使能"
},
{
"identifier":"OverVoltEnable",
"unit":"",
"dataType":"bool",
"name":"过压告警使能"
},
{
"identifier":"UnderVoltEnable",
"unit":"",
"dataType":"bool",
"name":"欠压告警使能"
},
{
"identifier":"LeakageEnable",
"unit":"",
"dataType":"bool",
"name":"漏电告警使能"
},
{
"identifier":"OverTiltEnable",
"unit":"",
"dataType":"bool",
"name":"倾斜告警使能"
},
{
"identifier":"LampError",
"unit":"",
"dataType":"bool",
"name":"灯具故障告警"
},
{
"identifier":"OverCurrentError",
"unit":"",
"dataType":"bool",
"name":"过流告警"
},
{
"identifier":"OverVoltError",
"unit":"",
"dataType":"bool",
"name":"过压告警"
},
{
"identifier":"UnderVoltError",
"unit":"",
"dataType":"bool",
"name":"欠压告警"
},
{
"identifier":"OverTiltError",
"unit":"",
"dataType":"bool",
"name":"倾斜告警"
},
{
"identifier":"LeakageError",
"unit":"",
"dataType":"bool",
"name":"漏电告警"
},
{
"identifier":"GeoLocation",
"unit":"",
"dataType":"struct",
"name":"地理位置"
}
],
"status":"OFFLINE"
}
],
"pageNo":1,
"pageSize":20
},
"message":"success"
}
异常返回示例:
{
"id": "37f7e5fa-d6a5-4efe-8abf-5bf23dca6284",
"code": 403,
"message": "request forbidden.",
"localizedMsg": "请求被禁止",
"data": null
}
2.1.2 获取物的属性timeline数据
路径 | /app/thing/property/timeline/get |
版本号 | 1.0.4 |
协议 | HTTP/HTTPS |
请求方法 | POST |
授权类型 | app签名 |
超时时间 | 3000 |
请求参数
名称 | 类型 | 是否必选 | 描述 |
iotId | String | 否 | 物的唯一标识 |
productKey | String | 否 | 物的产品标识 |
deviceName | String | 否 | 物的名称 |
identifier | String | 是 | 设备属性标识符 |
start | Long | 是 | 开始时间 |
end | Long | 是 | 结束时间 |
pageSize | Integer | 是 | 单次查询最大条数 |
ordered | Boolean | 是 | 查询顺序,true-顺序查询,false-倒序查询 |
lpInstanceId | 字符串 | 否 | LP实例ID |
返回数据
名称 | 类型 | 描述 |
code | Int | 接口返回码。200表示成功。 |
message | String | 调用失败时,返回的出错信息。 |
localizedMsg | String | 本地语言的错误消息。 |
data | JSON | 响应结果 |
响应结果 data:
名称 | 类型 | 描述 |
timestamp | Long | 时间戳 |
items | ThingEventDTO | 设备的事件数据列表 |
设备的事件数据列表 ThingEventDTO:
名称 | 类型 | 描述 |
iotId | String | 物的ID |
eventCode | String | 事件 code |
eventName | String | 事件名称 |
eventType | String | 事件类型 |
timestamp | Long | 时间戳 |
eventBody | Object | 事件 body |
batchId | String | 批次ID |
示例
请求示例:
// https://github.com/aliyun/iotx-api-gateway-client
IoTApiClientBuilderParams ioTApiClientBuilderParams = new IoTApiClientBuilderParams();
ioTApiClientBuilderParams.setAppKey("你的<AppKey>");
ioTApiClientBuilderParams.setAppSecret("你的<AppSecret>");
SyncApiClient syncApiClient = new SyncApiClient(ioTApiClientBuilderParams);
IoTApiRequest request = new IoTApiRequest();
// 设置请求ID
String uuid = UUID.randomUUID().toString();
String id = uuid.replace("-", "");
request.setId(id);
// 设置API版本号
request.setApiVer("1.0.4");
// 设置参数
request.putParam("iotId","value1");
request.putParam("productKey","value2");
request.putParam("deviceName","value3");
request.putParam("identifier","value4");
request.putParam("start","value5");
request.putParam("end","value6");
request.putParam("pageSize","value7");
request.putParam("ordered","value8");
request.putParam("lpInstanceId","value9");
// 如果需要,设置headers
Map<String, String> headers = new HashMap<String, String>(8);
// headers.put("你的<header", "你的<value>");
// 设置请求参数域名、path、request , isHttps, headers
ApiResponse response = syncApiClient.postBody("api.link.aliyun.com", "/app/thing/property/timeline/get", request, true, headers);
System.out.println(
"response code = " + response.getCode()
+ " response = " + new String(response.getBody(), "UTF-8")
+ " headers = " + response.getHeaders().toString()
);
正常返回示例:
{
"code": 200,
"data": {
"items": [
{
"batchId": "364f191a24c54f4ebf8254ee6945cca4",
"data": 48.2,
"property": "Humidity",
"timestamp": 1604801094028
},
{
"batchId": "8e70129623a04bc18bc152e6f95a50cb",
"data": 48.2,
"property": "Humidity",
"timestamp": 1604808221032
}
],
"timestamp": 1604808221032
},
"message": "success"
}
异常返回示例:
{
"id": "37f7e5fa-d6a5-4efe-8abf-5bf23dca6284",
"code": 403,
"message": "request forbidden.",
"localizedMsg": "请求被禁止",
"data": null
}
2.1.3 批量获取应用的设备信息
路径 | /app/thing/info/list/get |
版本号 | 1.4.1 |
协议 | HTTPS |
请求方法 | POST |
授权类型 | app签名 |
超时时间 | 3000 |
请求参数
名称 | 类型 | 是否必选 | 描述 |
iotIds | List<String> | 否 | 设备ID列表 |
productKey | String | 否 | 设备的产品pk,需要与设备名称列表组合使用 |
deviceName | List<String> | 否 | 设备名称列表,需要与设备的产品pk组合使用 |
appId | 字符串 | 否 | 应用ID。传入应用ID时,设备ID、设备的产品pk、设备名称无需传递 |
lpInstanceId | 字符串 | 否 | LP实例ID |
返回数据
名称 | 类型 | 描述 |
code | Int | 接口返回码。200表示成功。 |
message | String | 调用失败时,返回的出错信息。 |
localizedMsg | String | 本地语言的错误消息。 |
data | List<DeviceDTO> | 响应结果:设备属性列表 |
设备属性列表 DeviceDTO:
名称 | 类型 | 描述 |
gmtCreate | Date | 设备创建时间 |
gmtModified | Date | 设备修改时间 |
iotId | String | 设备ID |
name | String | 设备名称 |
deviceSecret | String | 设备sk |
productKey | String | 产品pk |
mac | String | 设备物理地址 |
region | String | 设备区域 |
status | int | 设备状态 |
activeTime | Date | 设备激活时间 |
netAddress | String | 设备网络地址 |
示例
请求示例:
// https://github.com/aliyun/iotx-api-gateway-client
IoTApiClientBuilderParams ioTApiClientBuilderParams = new IoTApiClientBuilderParams();
ioTApiClientBuilderParams.setAppKey("你的<AppKey>");
ioTApiClientBuilderParams.setAppSecret("你的<AppSecret>");
SyncApiClient syncApiClient = new SyncApiClient(ioTApiClientBuilderParams);
IoTApiRequest request = new IoTApiRequest();
// 设置请求ID
String uuid = UUID.randomUUID().toString();
String id = uuid.replace("-", "");
request.setId(id);
// 设置API版本号
request.setApiVer("1.4.1");
// 设置参数
request.putParam("iotIds","value1");
request.putParam("productKey","value2");
request.putParam("deviceName","value3");
request.putParam("appId","value4");
request.putParam("lpInstanceId","value5");
// 如果需要,设置headers
Map<String, String> headers = new HashMap<String, String>(8);
// headers.put("你的<header", "你的<value>");
// 设置请求参数域名、path、request , isHttps, headers
ApiResponse response = syncApiClient.postBody("api.link.aliyun.com", "/app/thing/info/list/get", request, true, headers);
System.out.println(
"response code = " + response.getCode()
+ " response = " + new String(response.getBody(), "UTF-8")
+ " headers = " + response.getHeaders().toString()
);
正常返回示例:
{
"code": 200,
"data": [{
"gmtModified": 1564971320000,
"activeTime": 1576214088740,
"deviceKey": "ErMmUJAE6nRduVjQ7wi9",
"productKey": "a1QcurjTB1h",
"statusLast": 3,
"gmtCreate": 1564971320000,
"deviceSecret": "7pRFl0XfRmFldKk4NzfGng3y3B3t1mF5",
"iotId": "ErMmUJAE6nRduVjQ7wi9000101",
"name": "wjgT_0034",
"thingType": "DEVICE",
"region": "cn-hangzhou",
"rbacTenantId": "87F2BEFA5D9B45B9AE2CD8C41AC40613",
"status": 1
}],
"id": "4f3196f64a1d480bafa45e9c8006f543"
}
异常返回示例:
{
"id": "37f7e5fa-d6a5-4efe-8abf-5bf23dca6284",
"code": 403,
"message": "request forbidden.",
"localizedMsg": "请求被禁止",
"data": null
}
2.1.4 获取物的基本信息
路径 | /app/thing/info/get |
版本号 | 1.0.3 |
协议 | HTTP/HTTPS |
请求方法 | POST |
授权类型 | app签名 |
超时时间 | 3000 |
请求参数
名称 | 类型 | 是否必选 | 描述 |
iotId | 字符串 | 否 | 物的唯一标识 |
productKey | 字符串 | 否 | 物的产品标识 |
deviceName | 字符串 | 否 | 物的名称 |
lpInstanceId | 字符串 | 否 | LP实例ID |
返回数据
名称 | 类型 | 描述 |
code | Int | 接口返回码。200表示成功。 |
message | String | 调用失败时,返回的出错信息。 |
localizedMsg | String | 本地语言的错误消息。 |
data | JSON | 响应结果: 设备属性 DeviceDTO |
设备属性 DeviceDTO:
名称 | 类型 | 描述 |
gmtCreate | Date | 设备创建时间 |
gmtModified | Date | 设备修改时间 |
iotId | String | 设备ID |
name | String | 设备名称 |
deviceSecret | String | 设备sk |
productKey | String | 产品pk |
mac | String | 设备物理地址 |
region | String | 设备区域 |
status | int | 设备状态 |
activeTime | Date | 设备激活时间 |
netAddress | String | 设备网络地址 |
示例
请求示例:
// https://github.com/aliyun/iotx-api-gateway-client
IoTApiClientBuilderParams ioTApiClientBuilderParams = new IoTApiClientBuilderParams();
ioTApiClientBuilderParams.setAppKey("你的<AppKey>");
ioTApiClientBuilderParams.setAppSecret("你的<AppSecret>");
SyncApiClient syncApiClient = new SyncApiClient(ioTApiClientBuilderParams);
IoTApiRequest request = new IoTApiRequest();
// 设置请求ID
String uuid = UUID.randomUUID().toString();
String id = uuid.replace("-", "");
request.setId(id);
// 设置API版本号
request.setApiVer("1.0.3");
// 设置参数
request.putParam("iotId","value1");
request.putParam("productKey","value2");
request.putParam("deviceName","value3");
request.putParam("lpInstanceId","value4");
// 如果需要,设置headers
Map<String, String> headers = new HashMap<String, String>(8);
// headers.put("你的<header", "你的<value>");
// 设置请求参数域名、path、request , isHttps, headers
ApiResponse response = syncApiClient.postBody("api.link.aliyun.com", "/app/thing/info/get", request, true, headers);
System.out.println(
"response code = " + response.getCode()
+ " response = " + new String(response.getBody(), "UTF-8")
+ " headers = " + response.getHeaders().toString()
);
正常返回示例:
{
"code":200,
"data":{
"gmtModified":1607334316000,
"deviceKey":"1g84blz9FRQOrlqB0OT1",
"productKey":"a1jemBywtIo",
"statusLast":0,
"gmtCreate":1607334316000,
"productName":"apigatewaytest",
"iotId":"1g84blz9FRQOrlqB0OT1000101",
"deviceSecret":"683c84dc5eb88705bd5cf4fbf65f6802",
"name":"apigatewaydevice",
"nickname":"apigatewaydevice",
"thingType":"DEVICE",
"region":"cn-hangzhou",
"rbacTenantId":"87F2BEFA5D9B45B9AE2CD8C41AC40613",
"status":0
},
"id":"244bc36c-5fd0-4fec-bd1a-b57f38db3769"
}
异常返回示例:
{
"id": "37f7e5fa-d6a5-4efe-8abf-5bf23dca6284",
"code": 403,
"message": "request forbidden.",
"localizedMsg": "请求被禁止"
}
错误码
错误码 | 错误信息 | 错误描述 |
40062 | not authorization query device | 没有权限查询设备 |
2.1.5 根据设备证书(ProductKey、DeviceName、DeviceSecret)获取物的模板
路径 | /app/thing/dsl/get |
版本号 | 1.0.1 |
协议 | HTTPS |
请求方法 | POST |
授权类型 | app签名 |
超时时间 | 3000 |
请求参数
名称 | 类型 | 是否必选 | 描述 |
iotId | String | 否 | 物的唯一标识 |
productKey | String | 否 | 物的产品标识 |
deviceName | String | 否 | 物的名称 |
lpInstanceId | String | 否 | LP实例ID |
返回数据
名称 | 类型 | 描述 |
code | Int | 接口返回码。200表示成功。 |
message | String | 调用失败时,返回的出错信息。 |
localizedMsg | String | 本地语言的错误消息。 |
data | JSON | json格式物模版信息TSL |
示例
请求示例:
// https://github.com/aliyun/iotx-api-gateway-client
IoTApiClientBuilderParams ioTApiClientBuilderParams = new IoTApiClientBuilderParams();
ioTApiClientBuilderParams.setAppKey("你的<AppKey>");
ioTApiClientBuilderParams.setAppSecret("你的<AppSecret>");
SyncApiClient syncApiClient = new SyncApiClient(ioTApiClientBuilderParams);
IoTApiRequest request = new IoTApiRequest();
// 设置请求ID
String uuid = UUID.randomUUID().toString();
String id = uuid.replace("-", "");
request.setId(id);
// 设置API版本号
request.setApiVer("1.0.1");
// 设置参数
request.putParam("iotId","value1");
request.putParam("productKey","value2");
request.putParam("deviceName","value3");
request.putParam("lpInstanceId","value4");
// 如果需要,设置headers
Map<String, String> headers = new HashMap<String, String>(8);
// headers.put("你的<header", "你的<value>");
// 设置请求参数域名、path、request , isHttps, headers
ApiResponse response = syncApiClient.postBody("api.link.aliyun.com", "/app/thing/dsl/get", request, true, headers);
System.out.println(
"response code = " + response.getCode()
+ " response = " + new String(response.getBody(), "UTF-8")
+ " headers = " + response.getHeaders().toString()
);
正常返回示例:
{
"code": 200,
"data": "{\"schema\":\"https://iotx-tsl.oss-ap-southeast-1.aliyuncs.com/schema.json\",\"profile\":{\"productKey\":\"a1PHv5Xn2xX\",\"deviceName\":\"xixi\"},\"link\":\"/sys/a1PHv5Xn2xX/xixi/thing/\",\"services\":[{\"outputData\":[],\"identifier\":\"set\",\"inputData\":[{\"identifier\":\"CurtainOperation\",\"dataType\":{\"specs\":{\"0\":\"关窗帘\",\"1\":\"开\",\"2\":\"暂停\"},\"type\":\"enum\"},\"name\":\"模式\"},{\"identifier\":\"PowerSwitch\",\"dataType\":{\"specs\":{\"0\":\"关\",\"1\":\"开\"},\"type\":\"bool\"},\"name\":\"电源开关\"},{\"identifier\":\"CurtainPosition\",\"dataType\":{\"specs\":{\"unit\":\"%\",\"min\":\"0\",\"unitName\":\"百分比\",\"max\":\"100\",\"step\":\"1\"},\"type\":\"int\"},\"name\":\"位置\"},{\"identifier\":\"LocalTimer\",\"dataType\":{\"specs\":{\"item\":{\"specs\":[{\"identifier\":\"Timer\",\"dataType\":{\"specs\":{\"length\":\"255\"},\"type\":\"text\"},\"name\":\"定时时间\"},{\"identifier\":\"Enable\",\"dataType\":{\"specs\":{\"0\":\"关\",\"1\":\"开\"},\"type\":\"bool\"},\"name\":\"启用\"},{\"identifier\":\"IsValid\",\"dataType\":{\"specs\":{\"0\":\"无效\",\"1\":\"有效\"},\"type\":\"bool\"},\"name\":\"可执行\"},{\"identifier\":\"Targets\",\"dataType\":{\"specs\":{\"length\":\"2048\"},\"type\":\"text\"},\"name\":\"定时动作\"}],\"type\":\"struct\"},\"size\":\"109\"},\"type\":\"array\"},\"name\":\"本地定时\"}],\"method\":\"thing.service.property.set\",\"name\":\"set\",\"required\":true,\"callType\":\"async\",\"desc\":\"属性设置\"},{\"outputData\":[{\"identifier\":\"CurtainOperation\",\"dataType\":{\"specs\":{\"0\":\"关窗帘\",\"1\":\"开\",\"2\":\"暂停\"},\"type\":\"enum\"},\"name\":\"模式\"},{\"identifier\":\"PowerSwitch\",\"dataType\":{\"specs\":{\"0\":\"关\",\"1\":\"开\"},\"type\":\"bool\"},\"name\":\"电源开关\"},{\"identifier\":\"CurtainPosition\",\"dataType\":{\"specs\":{\"unit\":\"%\",\"min\":\"0\",\"unitName\":\"百分比\",\"max\":\"100\",\"step\":\"1\"},\"type\":\"int\"},\"name\":\"位置\"},{\"identifier\":\"LocalTimer\",\"dataType\":{\"specs\":{\"item\":{\"specs\":[{\"identifier\":\"Timer\",\"dataType\":{\"specs\":{\"length\":\"255\"},\"type\":\"text\"},\"name\":\"定时时间\"},{\"identifier\":\"Enable\",\"dataType\":{\"specs\":{\"0\":\"关\",\"1\":\"开\"},\"type\":\"bool\"},\"name\":\"启用\"},{\"identifier\":\"IsValid\",\"dataType\":{\"specs\":{\"0\":\"无效\",\"1\":\"有效\"},\"type\":\"bool\"},\"name\":\"可执行\"},{\"identifier\":\"Targets\",\"dataType\":{\"specs\":{\"length\":\"2048\"},\"type\":\"text\"},\"name\":\"定时动作\"}],\"type\":\"struct\"},\"size\":\"109\"},\"type\":\"array\"},\"name\":\"本地定时\"}],\"identifier\":\"get\",\"inputData\":[\"CurtainOperation\",\"PowerSwitch\",\"CurtainPosition\",\"LocalTimer\"],\"method\":\"thing.service.property.get\",\"name\":\"get\",\"required\":true,\"callType\":\"async\",\"desc\":\"属性获取\"}],\"properties\":[{\"identifier\":\"CurtainOperation\",\"dataType\":{\"specs\":{\"0\":\"关窗帘\",\"1\":\"开\",\"2\":\"暂停\"},\"type\":\"enum\"},\"name\":\"模式\",\"accessMode\":\"rw\",\"required\":false},{\"identifier\":\"PowerSwitch\",\"dataType\":{\"specs\":{\"0\":\"关\",\"1\":\"开\"},\"type\":\"bool\"},\"name\":\"电源开关\",\"accessMode\":\"rw\",\"required\":false},{\"identifier\":\"CurtainPosition\",\"dataType\":{\"specs\":{\"unit\":\"%\",\"min\":\"0\",\"unitName\":\"百分比\",\"max\":\"100\",\"step\":\"1\"},\"type\":\"int\"},\"name\":\"位置\",\"accessMode\":\"rw\",\"required\":false},{\"identifier\":\"LocalTimer\",\"dataType\":{\"specs\":{\"item\":{\"specs\":[{\"identifier\":\"Timer\",\"dataType\":{\"specs\":{\"length\":\"255\"},\"type\":\"text\"},\"name\":\"定时时间\"},{\"identifier\":\"Enable\",\"dataType\":{\"specs\":{\"0\":\"关\",\"1\":\"开\"},\"type\":\"bool\"},\"name\":\"启用\"},{\"identifier\":\"IsValid\",\"dataType\":{\"specs\":{\"0\":\"无效\",\"1\":\"有效\"},\"type\":\"bool\"},\"name\":\"可执行\"},{\"identifier\":\"Targets\",\"dataType\":{\"specs\":{\"length\":\"2048\"},\"type\":\"text\"},\"name\":\"定时动作\"}],\"type\":\"struct\"},\"size\":\"109\"},\"type\":\"array\"},\"name\":\"本地定时\",\"accessMode\":\"rw\",\"required\":true,\"desc\":\"用于为设备配置本地控制,其中前三个参数必选,其它参数自主填写,用于表示该产品哪些功能作为“可被本地控制的功能”,这些参数请和设备的标准功能保持一致。\"}],\"events\":[{\"outputData\":[{\"identifier\":\"CurtainOperation\",\"dataType\":{\"specs\":{\"0\":\"关窗帘\",\"1\":\"开\",\"2\":\"暂停\"},\"type\":\"enum\"},\"name\":\"模式\"},{\"identifier\":\"PowerSwitch\",\"dataType\":{\"specs\":{\"0\":\"关\",\"1\":\"开\"},\"type\":\"bool\"},\"name\":\"电源开关\"},{\"identifier\":\"CurtainPosition\",\"dataType\":{\"specs\":{\"unit\":\"%\",\"min\":\"0\",\"unitName\":\"百分比\",\"max\":\"100\",\"step\":\"1\"},\"type\":\"int\"},\"name\":\"位置\"},{\"identifier\":\"LocalTimer\",\"dataType\":{\"specs\":{\"item\":{\"specs\":[{\"identifier\":\"Timer\",\"dataType\":{\"specs\":{\"length\":\"255\"},\"type\":\"text\"},\"name\":\"定时时间\"},{\"identifier\":\"Enable\",\"dataType\":{\"specs\":{\"0\":\"关\",\"1\":\"开\"},\"type\":\"bool\"},\"name\":\"启用\"},{\"identifier\":\"IsValid\",\"dataType\":{\"specs\":{\"0\":\"无效\",\"1\":\"有效\"},\"type\":\"bool\"},\"name\":\"可执行\"},{\"identifier\":\"Targets\",\"dataType\":{\"specs\":{\"length\":\"2048\"},\"type\":\"text\"},\"name\":\"定时动作\"}],\"type\":\"struct\"},\"size\":\"109\"},\"type\":\"array\"},\"name\":\"本地定时\"}],\"identifier\":\"post\",\"method\":\"thing.event.property.post\",\"name\":\"post\",\"type\":\"info\",\"required\":true,\"desc\":\"属性上报\"}]}",
"message": "success"
}
2.1.6 获取物的服务记录
路径 | /app/thing/service/data/get |
版本号 | 1.0.3 |
协议 | HTTP/HTTPS |
请求方法 | POST |
授权类型 | app签名 |
超时时间 | 3000 |
请求参数
名称 | 类型 | 是否必选 | 描述 |
iotId | String | 否 | 物的唯一标识 |
productKey | String | 否 | 物的产品标识 |
deviceName | String | 否 | 物的名称 |
identifier | String | 是 | 服务标识符 |
start | String | 是 | 开始时间 |
end | String | 是 | 结束时间 |
pageSize | Integer | 是 | 单次查询最大条数 |
ordered | String | 是 | 查询顺序,true-顺序查询,false-倒序查询 |
lpInstanceId | 字符串 | 否 | LP实例ID |
返回数据
名称 | 类型 | 描述 |
code | Int | 接口返回码。200表示成功。 |
message | String | 调用失败时,返回的出错信息。 |
localizedMsg | String | 本地语言的错误消息。 |
data | JSON | 响应结果 |
响应结果 data:
名称 | 类型 | 描述 |
nextTime | Long | 最近调用时间戳 |
data | List<ServiceInfoDTO> | 服务数据列表 |
服务数据列表 ServiceInfoDTO:
名称 | 类型 | 描述 |
identifier | String | 服务标识 |
name | String | 服务名称 |
time | Long | 服务时间 |
inputData | String | 输入参数 |
outputData | String | 输出参数 |
示例
请求示例:
// https://github.com/aliyun/iotx-api-gateway-client
IoTApiClientBuilderParams ioTApiClientBuilderParams = new IoTApiClientBuilderParams();
ioTApiClientBuilderParams.setAppKey("你的<AppKey>");
ioTApiClientBuilderParams.setAppSecret("你的<AppSecret>");
SyncApiClient syncApiClient = new SyncApiClient(ioTApiClientBuilderParams);
IoTApiRequest request = new IoTApiRequest();
// 设置请求ID
String uuid = UUID.randomUUID().toString();
String id = uuid.replace("-", "");
request.setId(id);
// 设置API版本号
request.setApiVer("1.0.3");
// 设置参数
request.putParam("iotId","value1");
request.putParam("productKey","value2");
request.putParam("deviceName","value3");
request.putParam("identifier","value4");
request.putParam("start","value5");
request.putParam("end","value6");
request.putParam("pageSize","value7");
request.putParam("ordered","value8");
request.putParam("lpInstanceId","value9");
// 如果需要,设置headers
Map<String, String> headers = new HashMap<String, String>(8);
// headers.put("你的<header", "你的<value>");
// 设置请求参数域名、path、request , isHttps, headers
ApiResponse response = syncApiClient.postBody("api.link.aliyun.com", "/app/thing/service/data/get", request, true, headers);
System.out.println(
"response code = " + response.getCode()
+ " response = " + new String(response.getBody(), "UTF-8")
+ " headers = " + response.getHeaders().toString()
);
正常返回示例:
{
"code": 200,
"data": {
"list": [
{
"identifier": "testServiceSync",
"inputData": "{\"structArgs\":{\"structchildINT62005ae\":50,\"structchildDOUBLE6d967d2\":50.22,\"structchildDATEaec2a80\":\"1605786342845\",\"structchildBOOLa05d374\":0,\"structchildFLOAT76c6d83\":50.11,\"structchildTEXT710c059\":\"xiaoyuershi\",\"structchildENUMe811671\":1},\"enumArgs\":1,\"boolArgs\":0,\"floatArgs\":50.11,\"intArgs\":10,\"dateArgs\":\"1605786342845\",\"doubleArgs\":50.22,\"arrayArgs\":[1,2,3],\"textArgs\":\"你好helloworld\"}",
"name": "testServiceSyncName",
"outputData": "{\"code\":200,\"data\":{\"structArgs\":{\"structchildINT62005ae\":50,\"structchildDOUBLE6d967d2\":50.22,\"structchildDATEaec2a80\":\"1605786342845\",\"structchildBOOLa05d374\":0,\"structchildFLOAT76c6d83\":50.11,\"structchildTEXT710c059\":\"xiaoyuershi\",\"structchildENUMe811671\":1},\"enumArgs\":1,\"boolArgs\":0,\"floatArgs\":50.11,\"intArgs\":10,\"dateArgs\":\"1605786342845\",\"doubleArgs\":50.22,\"arrayArgs\":[1,2,3],\"textArgs\":\"你好helloworld\"},\"id\":\"Akeg8vmMdQ\",\"message\":\"success\",\"version\":\"1.0\"}",
"time": 1605786348669
}
],
"nextTime": 1605786348670,
"nextValid": false
},
"message": "success"
}
异常返回示例:
{
"id": "37f7e5fa-d6a5-4efe-8abf-5bf23dca6284",
"code": 403,
"message": "request forbidden.",
"localizedMsg": "请求被禁止",
"data": null
}
错误码:
错误码 | 错误信息 | 错误描述 |
400 | request error. | 系统繁忙 |
2.1.7 获取物的连接状态
路径 | /app/thing/status/get |
版本号 | 1.0.3 |
协议 | HTTP/HTTPS |
请求方法 | POST |
授权类型 | app签名 |
超时时间 | 3000 |
请求参数
名称 | 类型 | 是否必选 | 描述 |
iotId | String | 否 | 物的唯一标识 |
productKey | String | 否 | 物的产品标识 |
deviceName | String | 否 | 物的名称 |
lpInstanceId | 字符串 | 否 | LP实例ID |
返回数据
名称 | 类型 | 描述 |
code | Int | 接口返回码。200表示成功。 |
message | String | 调用失败时,返回的出错信息。 |
localizedMsg | String | 本地语言的错误消息。 |
data | JSON | 响应结果 |
返回结果 data:
名称 | 类型 | 描述 |
deviceName | String | 设备名称 |
status | Integer | 设备状态 0 - 未激活, 1 - 在线, 3 - 离线, 8 - 禁用 |
示例
请求示例:
// https://github.com/aliyun/iotx-api-gateway-client
IoTApiClientBuilderParams ioTApiClientBuilderParams = new IoTApiClientBuilderParams();
ioTApiClientBuilderParams.setAppKey("你的<AppKey>");
ioTApiClientBuilderParams.setAppSecret("你的<AppSecret>");
SyncApiClient syncApiClient = new SyncApiClient(ioTApiClientBuilderParams);
IoTApiRequest request = new IoTApiRequest();
// 设置请求ID
String uuid = UUID.randomUUID().toString();
String id = uuid.replace("-", "");
request.setId(id);
// 设置API版本号
request.setApiVer("1.0.3");
// 设置参数
request.putParam("iotId","value1");
request.putParam("productKey","value2");
request.putParam("deviceName","value3");
request.putParam("lpInstanceId","value4");
// 如果需要,设置headers
Map<String, String> headers = new HashMap<String, String>(8);
// headers.put("你的<header", "你的<value>");
// 设置请求参数域名、path、request , isHttps, headers
ApiResponse response = syncApiClient.postBody("api.link.aliyun.com", "/app/thing/status/get", request, true, headers);
System.out.println(
"response code = " + response.getCode()
+ " response = " + new String(response.getBody(), "UTF-8")
+ " headers = " + response.getHeaders().toString()
);
正常返回示例:
{
"code":200,
"data":{
"deviceName":"apigatewaydevice",
"status":1
},
"id":"be4cb9d0-5d71-4e44-bc10-866eb718731c"
}
异常返回示例:
{
"id": "37f7e5fa-d6a5-4efe-8abf-5bf23dca6284",
"code": 403,
"message": "request forbidden.",
"localizedMsg": "请求被禁止",
"data": null
}
错误码:
错误码 | 错误信息 | 错误描述 |
400 | request error. | 系统繁忙 |
2.1.8 获取物的拓扑关系
路径 | /app/thing/topo/get |
版本号 | 1.0.0 |
协议 | HTTP/HTTPS |
请求方法 | POST |
授权类型 | app签名 |
超时时间 | 3000 |
请求参数
名称 | 类型 | 是否必选 | 描述 |
iotId | String | 否 | 物的唯一标识 |
productKey | String | 否 | 物的产品标识 |
deviceName | String | 否 | 物的名称 |
pageNo | Integer | 是 | 页面ID |
pageSize | Integer | 是 | 分页大小 |
返回数据
名称 | 类型 | 描述 |
code | Int | 接口返回码。200表示成功。 |
message | String | 调用失败时,返回的出错信息。 |
localizedMsg | String | 本地语言的错误消息。 |
data | JSON | 响应结果 |
响应结果 data:
名称 | 类型 | 描述 |
total | 整型 | 总页数 |
pageNo | 整型 | 当前页 |
pageSize | 整型 | 每页大小 |
data | SimpleDeviceDTO | 简单的设备信息对象,只包含设备ID和设备证书(ProductKey、DeviceName、DeviceSecret)信息 |
SimpleDeviceDTO:
名称 | 类型 | 描述 |
iotId | String | 设备ID |
deviceSecret | String | 设备名称 |
deviceSecret | String | 设备sk |
productKey | String | 产品pk |
2.1.9 获取物的标签列表
路径 | /app/thing/prop/get |
版本号 | 1.0.1 |
协议 | HTTP/HTTPS |
请求方法 | POST |
授权类型 | app签名 |
超时时间 | 3000 |
请求参数
名称 | 类型 | 是否必选 | 描述 |
iotId | String | 否 | 物的唯一标识 |
productKey | String | 否 | 物的产品标识 |
deviceName | String | 否 | 物的名称 |
lpInstanceId | 字符串 | 否 | LP实例ID |
返回数据
名称 | 类型 | 描述 |
code | Int | 接口返回码。200表示成功。 |
message | String | 调用失败时,返回的出错信息。 |
localizedMsg | String | 本地语言的错误消息。 |
props | String | 设备标签属性,json String结构 |
示例
请求示例:
// https://github.com/aliyun/iotx-api-gateway-client
IoTApiClientBuilderParams ioTApiClientBuilderParams = new IoTApiClientBuilderParams();
ioTApiClientBuilderParams.setAppKey("你的<AppKey>");
ioTApiClientBuilderParams.setAppSecret("你的<AppSecret>");
SyncApiClient syncApiClient = new SyncApiClient(ioTApiClientBuilderParams);
IoTApiRequest request = new IoTApiRequest();
// 设置请求ID
String uuid = UUID.randomUUID().toString();
String id = uuid.replace("-", "");
request.setId(id);
// 设置API版本号
request.setApiVer("1.0.1");
// 设置参数
request.putParam("iotId","value1");
request.putParam("productKey","value2");
request.putParam("deviceName","value3");
request.putParam("lpInstanceId","value4");
// 如果需要,设置headers
Map<String, String> headers = new HashMap<String, String>(8);
// headers.put("你的<header", "你的<value>");
// 设置请求参数域名、path、request , isHttps, headers
ApiResponse response = syncApiClient.postBody("api.link.aliyun.com", "/app/thing/prop/get", request, true, headers);
System.out.println(
"response code = " + response.getCode()
+ " response = " + new String(response.getBody(), "UTF-8")
+ " headers = " + response.getHeaders().toString()
);
2.1.10 获取物的事件timeline数据
路径 | /app/thing/event/timeline/get |
版本号 | 1.0.3 |
协议 | HTTP/HTTPS |
请求方法 | POST |
授权类型 | app签名 |
超时时间 | 3000 |
请求参数
名称 | 类型 | 是否必选 | 描述 |
iotId | String | 否 | 物的唯一标识 |
productKey | String | 否 | 物的产品标识 |
deviceName | String | 否 | 物的名称 |
identifier | String | 是 | 事件标识符 |
eventType | String | 是 | 事件类型 |
start | Long | 是 | timeline起始时间 |
end | Long | 是 | timeline结束时间 |
pageSize | Integer | 是 | 分页大小 |
ordered | Boolean | 是 | 顺序(true);逆序(false)查询 |
lpInstanceId | 字符串 | 否 | LP实例ID |
返回数据
名称 | 类型 | 描述 |
code | Int | 接口返回码。200表示成功。 |
message | String | 调用失败时,返回的出错信息。 |
localizedMsg | String | 本地语言的错误消息。 |
data | JSON | 响应结果 |
响应结果 data:
名称 | 类型 | 描述 |
timestamp | Long | |
items | ThingEventDTO | 事件数据 |
事件数据 ThingEventDTO:
名称 | 类型 | 描述 |
iotId | String | 物的ID |
eventCode | String | 事件 code |
eventName | String | 事件名称 |
eventType | String | 事件类型 |
timestamp | Long | 事件发生时间 |
eventBody | Object | 事件Body |
batchId | String | 批次ID |
示例
请求示例:
// https://github.com/aliyun/iotx-api-gateway-client
IoTApiClientBuilderParams ioTApiClientBuilderParams = new IoTApiClientBuilderParams();
ioTApiClientBuilderParams.setAppKey("你的<AppKey>");
ioTApiClientBuilderParams.setAppSecret("你的<AppSecret>");
SyncApiClient syncApiClient = new SyncApiClient(ioTApiClientBuilderParams);
IoTApiRequest request = new IoTApiRequest();
// 设置请求ID
String uuid = UUID.randomUUID().toString();
String id = uuid.replace("-", "");
request.setId(id);
// 设置API版本号
request.setApiVer("1.0.3");
// 设置参数
request.putParam("iotId","value1");
request.putParam("productKey","value2");
request.putParam("deviceName","value3");
request.putParam("identifier","value4");
request.putParam("eventType","value5");
request.putParam("start","value6");
request.putParam("end","value7");
request.putParam("pageSize","value8");
request.putParam("ordered","value9");
request.putParam("lpInstanceId","value10");
// 如果需要,设置headers
Map<String, String> headers = new HashMap<String, String>(8);
// headers.put("你的<header", "你的<value>");
// 设置请求参数域名、path、request , isHttps, headers
ApiResponse response = syncApiClient.postBody("api.link.aliyun.com", "/app/thing/event/timeline/get", request, true, headers);
System.out.println(
"response code = " + response.getCode()
+ " response = " + new String(response.getBody(), "UTF-8")
+ " headers = " + response.getHeaders().toString()
);
正常返回示例:
{
"code":200,
"data":{
"items":[{
"batchId":"c0c0eab124bc4231b25aee934dfa234c",
"eventBody":{
"boolArgs":0,
"floatArgs":1.23,
"intArgs":4
},
"eventCode":"testAlertEvent",
"eventName":"testAlertEventName",
"eventType":"alert",
"iotId":"1gHTxTa1NdKXl6wGE3jx000000",
"timestamp":1605775253666
}],
"timestamp":1605775253666
},
"message":"success"
}
异常返回示例:
{
"id": "37f7e5fa-d6a5-4efe-8abf-5bf23dca6284",
"code": 403,
"message": "request forbidden.",
"localizedMsg": "请求被禁止",
"data": null
}
错误码:
错误码 | 错误信息 | 错误描述 |
400 | request error. | 系统繁忙 |
2.1.11 批量获取物的状态
路径 | /app/thing/status/batch/get |
版本号 | 1.0.3 |
协议 | HTTP/HTTPS |
请求方法 | POST |
授权类型 | app签名 |
超时时间 | 3000 |
请求参数
名称 | 类型 | 是否必选 | 描述 |
productKey | String | 是 | 物的产品标识 |
deviceNames | List<String> | 是 | 物的名称列表,一次最多支持查询10个 |
lpInstanceId | 字符串 | 否 | LP实例ID |
返回数据
名称 | 类型 | 描述 |
code | Integer | 接口返回码。200表示成功。 |
message | String | 调用失败时,返回的出错信息。 |
localizedMsg | String | 本地语言的错误消息。 |
data | List<ThingStatusInfoDTO> | 设备状态信息列表 |
设备状态信息列表 ThingStatusInfoDTO:
名称 | 类型 | 描述 |
deviceName | String | 设备名称 |
status | Integer | 设备状态 0 - 未激活, 1 - 在线, 3 - 离线, 8 - 禁用 |
示例
请求示例:
// https://github.com/aliyun/iotx-api-gateway-client
IoTApiClientBuilderParams ioTApiClientBuilderParams = new IoTApiClientBuilderParams();
ioTApiClientBuilderParams.setAppKey("你的<AppKey>");
ioTApiClientBuilderParams.setAppSecret("你的<AppSecret>");
SyncApiClient syncApiClient = new SyncApiClient(ioTApiClientBuilderParams);
IoTApiRequest request = new IoTApiRequest();
// 设置请求ID
String uuid = UUID.randomUUID().toString();
String id = uuid.replace("-", "");
request.setId(id);
// 设置API版本号
request.setApiVer("1.0.3");
// 设置参数
request.putParam("productKey","value1");
request.putParam("deviceNames","value2");
request.putParam("lpInstanceId","value3");
// 如果需要,设置headers
Map<String, String> headers = new HashMap<String, String>(8);
// headers.put("你的<header", "你的<value>");
// 设置请求参数域名、path、request , isHttps, headers
ApiResponse response = syncApiClient.postBody("api.link.aliyun.com", "/app/thing/status/batch/get", request, true, headers);
System.out.println(
"response code = " + response.getCode()
+ " response = " + new String(response.getBody(), "UTF-8")
+ " headers = " + response.getHeaders().toString()
);
正常返回示例:
{
"code": 200,
"data": [{
"deviceName": "apigatewaydevice",
"status": 0
}],
"id": "ed663083-c963-49e4-aa36-f0a6d62a6a23"
}
异常返回示例:
{
"id": "37f7e5fa-d6a5-4efe-8abf-5bf23dca6284",
"code": 403,
"message": "request forbidden.",
"localizedMsg": "请求被禁止",
"data": null
}
错误码:
错误码 | 错误信息 | 错误描述 |
400 | request error. | 系统繁忙 |
2.1.12 查询应用物的列表
路径 | /app/thing/list |
版本号 | 1.0.4 |
协议 | HTTP/HTTPS |
请求方法 | POST |
授权类型 | app签名 |
超时时间 | 3000 |
请求参数
名称 | 类型 | 是否必选 | 描述 |
tagList | JSONAarry | 否 | 标签列表 |
pageNo | Integer | 否 | 当前页,从1开始 |
pageSize | Integer | 否 | 每页大小,最大200 |
productKeyList | JSONAarry | 否 | productkeylist |
categoryKeyList | JSONAarry | 否 | 品类列表 |
appId | 字符串 | 否 | 应用ID |
lpInstanceId | 字符串 | 否 | LP实例ID |
返回数据
名称 | 类型 | 描述 |
code | Int | 接口返回码。200表示成功。 |
message | String | 调用失败时,返回的出错信息。 |
localizedMsg | String | 本地语言的错误消息。 |
data | JSON | 响应结果 |
响应结果 data:
名称 | 类型 | 描述 |
total | Integer | 总页数 |
pageNo | Integer | 当前页 |
pageSize | Integer | 每页大小 |
data | List<SimpleDeviceInfo> |
SimpleDeviceInfo:
名称 | 类型 | 描述 |
productName | String | 产品名称 |
productKey | String | 产品pk |
deviceName | String | 设备名称 |
nodeType | Integer | 设备网络类型 |
status | String | 设备专题 |
activeTime | String | 设备激活时间 |
lastOnlineTime | String | 设备最近上线时间 |
createTime | String | 设备创建时间 |
childDeviceCount | Long | 子设备数量 |
iotId | String | 设备ID |
示例
请求示例:
// https://github.com/aliyun/iotx-api-gateway-client
IoTApiClientBuilderParams ioTApiClientBuilderParams = new IoTApiClientBuilderParams();
ioTApiClientBuilderParams.setAppKey("你的<AppKey>");
ioTApiClientBuilderParams.setAppSecret("你的<AppSecret>");
SyncApiClient syncApiClient = new SyncApiClient(ioTApiClientBuilderParams);
IoTApiRequest request = new IoTApiRequest();
// 设置请求ID
String uuid = UUID.randomUUID().toString();
String id = uuid.replace("-", "");
request.setId(id);
// 设置API版本号
request.setApiVer("1.0.4");
// 设置参数
request.putParam("tagList","value1");
request.putParam("pageNo","value2");
request.putParam("pageSize","value3");
request.putParam("productKeyList","value4");
request.putParam("categoryKeyList","value5");
request.putParam("appId","value6");
request.putParam("lpInstanceId","value7");
// 如果需要,设置headers
Map<String, String> headers = new HashMap<String, String>(8);
// headers.put("你的<header", "你的<value>");
// 设置请求参数域名、path、request , isHttps, headers
ApiResponse response = syncApiClient.postBody("api.link.aliyun.com", "/app/thing/list", request, true, headers);
System.out.println(
"response code = " + response.getCode()
+ " response = " + new String(response.getBody(), "UTF-8")
+ " headers = " + response.getHeaders().toString()
);
正常返回示例:
{
"code": 200,
"data": {
"total": 1,
"data": [{
"activeTime": "2019-12-13 13:14:48",
"productKey": "a1QcurjTB1h",
"nodeType": 0,
"deviceName": "wjgT_0034",
"utcCreateTime": "2019-08-05T02:15:20.000Z",
"productName": "授权设备",
"utcActiveTime": "2019-12-13T05:14:48.740Z",
"utcLastOnlineTime": "2019-12-13T05:17:54.315Z",
"iotId": "ErMmUJAE6nRduVjQ7wi9000101",
"createTime": "2019-08-05 10:15:20",
"lastOnlineTime": "2019-12-13 13:17:54",
"status": "ONLINE"
}],
"pageNo": 1,
"pageSize": 20
},
"id": "107595bf12f9465e9530850b0baf60f3"
}
异常返回示例:
{
"id": "37f7e5fa-d6a5-4efe-8abf-5bf23dca6284",
"code": 403,
"message": "request forbidden.",
"localizedMsg": "请求被禁止",
"data": null
}
错误码:
错误码 | 错误信息 | 错误描述 |
40063 | app not exist | 应用不存在 |
40106 | saas tenant not exist | saas租户不存在 |
400 | request error. | 系统繁忙 |
40061 | query device error | 查询设备错误 |
2.1.13 获取物的属性
路径 | /app/thing/properties/get |
版本号 | 1.0.4 |
协议 | HTTP/HTTPS |
请求方法 | POST |
授权类型 | app签名 |
超时时间 | 3000 |
请求参数
名称 | 类型 | 是否必选 | 描述 |
iotId | String | 否 | 物的唯一标识 |
productKey | String | 否 | 物的产品标识 |
deviceName | String | 否 | 物的名称 |
lpInstanceId | 字符串 | 否 | LP实例ID |
返回数据
名称 | 类型 | 描述 |
code | Int | 接口返回码。200表示成功。 |
message | String | 调用失败时,返回的出错信息。 |
localizedMsg | String | 本地语言的错误消息。 |
data | List<DeviceStatusDTO> | 设备属性列表 |
DeviceStatusDTO:
名称 | 类型 | 描述 |
iotId | String | 设备iotId |
batchId | String | 设备上报的标示。 可以批量上报,同一个批次上报的这个batchid一样 |
attribute | String | 设备属性 |
group | Integer | 设备分组 |
value | String | 属性值 |
gmtModified | String | 修改时间 |
示例
请求示例:
// https://github.com/aliyun/iotx-api-gateway-client
IoTApiClientBuilderParams ioTApiClientBuilderParams = new IoTApiClientBuilderParams();
ioTApiClientBuilderParams.setAppKey("你的<AppKey>");
ioTApiClientBuilderParams.setAppSecret("你的<AppSecret>");
SyncApiClient syncApiClient = new SyncApiClient(ioTApiClientBuilderParams);
IoTApiRequest request = new IoTApiRequest();
// 设置请求ID
String uuid = UUID.randomUUID().toString();
String id = uuid.replace("-", "");
request.setId(id);
// 设置API版本号
request.setApiVer("1.0.4");
// 设置参数
request.putParam("iotId","value1");
request.putParam("productKey","value2");
request.putParam("deviceName","value3");
request.putParam("lpInstanceId","value4");
// 如果需要,设置headers
Map<String, String> headers = new HashMap<String, String>(8);
// headers.put("你的<header", "你的<value>");
// 设置请求参数域名、path、request , isHttps, headers
ApiResponse response = syncApiClient.postBody("api.link.aliyun.com", "/app/thing/properties/get", request, true, headers);
System.out.println(
"response code = " + response.getCode()
+ " response = " + new String(response.getBody(), "UTF-8")
+ " headers = " + response.getHeaders().toString()
);
正常返回示例:
{
"code": 200,
"data": [
{
"iotId": "1g84blz9FRQOrlqB0OT1000101",
"gmtModified": 1607338094175,
"attribute": "Humidity",
"batchId": "c9bdb91fb7c948d2a0af68f0af96105b",
"value": 8
},
{
"iotId": "1g84blz9FRQOrlqB0OT1000101",
"gmtModified": 1607338053955,
"attribute": "Speed",
"batchId": "3cc1e8c95ca3426c95f148636a189f87",
"value": 70
}
],
"message": "success"
}
异常返回示例:
{
"id": "37f7e5fa-d6a5-4efe-8abf-5bf23dca6284",
"code": 403,
"message": "request forbidden.",
"localizedMsg": "请求被禁止",
"data": null
}
错误码:
错误码 | 错误信息 | 错误描述 |
400 | request error. | 系统繁忙 |
2.2设备控制
2.2.1 设置物的属性
路径 | /app/thing/properties/set |
版本号 | 1.0.3 |
协议 | HTTP/HTTPS |
请求方法 | POST |
授权类型 | app签名 |
超时时间 | 3000 |
请求参数
名称 | 类型 | 是否必选 | 描述 |
iotId | String | 否 | 物的唯一标识 |
productKey | String | 否 | 物的产品标识 |
deviceName | String | 否 | 物的名称 |
items | JSONObject | 是 | 设备属性map,包含属性key及value |
lpInstanceId | 字符串 | 否 | LP实例ID |
返回数据
名称 | 类型 | 描述 |
code | Int | 接口返回码。200表示成功。 |
message | String | 调用失败时,返回的出错信息。 |
localizedMsg | String | 本地语言的错误消息。 |
示例
请求示例:
// https://github.com/aliyun/iotx-api-gateway-client
IoTApiClientBuilderParams ioTApiClientBuilderParams = new IoTApiClientBuilderParams();
ioTApiClientBuilderParams.setAppKey("你的<AppKey>");
ioTApiClientBuilderParams.setAppSecret("你的<AppSecret>");
SyncApiClient syncApiClient = new SyncApiClient(ioTApiClientBuilderParams);
IoTApiRequest request = new IoTApiRequest();
// 设置请求ID
String uuid = UUID.randomUUID().toString();
String id = uuid.replace("-", "");
request.setId(id);
// 设置API版本号
request.setApiVer("1.0.3");
// 设置参数
request.putParam("iotId","value1");
request.putParam("productKey","value2");
request.putParam("deviceName","value3");
request.putParam("items","value4");
request.putParam("lpInstanceId","value5");
// 如果需要,设置headers
Map<String, String> headers = new HashMap<String, String>(8);
// headers.put("你的<header", "你的<value>");
// 设置请求参数域名、path、request , isHttps, headers
ApiResponse response = syncApiClient.postBody("api.link.aliyun.com", "/app/thing/properties/set", request, true, headers);
System.out.println(
"response code = " + response.getCode()
+ " response = " + new String(response.getBody(), "UTF-8")
+ " headers = " + response.getHeaders().toString()
);
正常返回示例:
{
"code":200,
"message":"success"
}
异常返回示例:
{
"id": "37f7e5fa-d6a5-4efe-8abf-5bf23dca6284",
"code": 403,
"message": "request forbidden.",
"localizedMsg": "请求被禁止",
"data": null
}
错误码:
错误码 | 错误信息 | 错误描述 |
400 | request error. | 系统繁忙 |
2.2.2 触发物的服务
路径 | /app/thing/service/invoke |
版本号 | 1.0.3 |
协议 | HTTP/HTTPS |
请求方法 | POST |
授权类型 | app签名 |
超时时间 | 3000 |
请求参数
名称 | 类型 | 是否必选 | 描述 |
iotId | String | 否 | 物的唯一标识 |
productKey | String | 否 | 物的产品标识 |
deviceName | String | 否 | 物的名称 |
args | JSONObject | 是 | 服务参数 |
identifier | String | 是 | 服务标识符 |
lpInstanceId | 字符串 | 否 | LP实例ID |
返回数据
名称 | 类型 | 描述 |
code | Int | 接口返回码。200表示成功。 |
message | String | 调用失败时,返回的出错信息。 |
localizedMsg | String | 本地语言的错误消息。 |
示例
请求示例:
// https://github.com/aliyun/iotx-api-gateway-client
IoTApiClientBuilderParams ioTApiClientBuilderParams = new IoTApiClientBuilderParams();
ioTApiClientBuilderParams.setAppKey("你的<AppKey>");
ioTApiClientBuilderParams.setAppSecret("你的<AppSecret>");
SyncApiClient syncApiClient = new SyncApiClient(ioTApiClientBuilderParams);
IoTApiRequest request = new IoTApiRequest();
// 设置请求ID
String uuid = UUID.randomUUID().toString();
String id = uuid.replace("-", "");
request.setId(id);
// 设置API版本号
request.setApiVer("1.0.3");
// 设置参数
request.putParam("iotId","value1");
request.putParam("productKey","value2");
request.putParam("deviceName","value3");
request.putParam("args","value4");
request.putParam("identifier","value5");
request.putParam("lpInstanceId","value6");
// 如果需要,设置headers
Map<String, String> headers = new HashMap<String, String>(8);
// headers.put("你的<header", "你的<value>");
// 设置请求参数域名、path、request , isHttps, headers
ApiResponse response = syncApiClient.postBody("api.link.aliyun.com", "/app/thing/service/invoke", request, true, headers);
System.out.println(
"response code = " + response.getCode()
+ " response = " + new String(response.getBody(), "UTF-8")
+ " headers = " + response.getHeaders().toString()
);
正常返回示例:
{
"code": 200,
"data": {
"data": {
"SyncFileStatus": 0
},
"messageId": "854287045"
},
"message": "success"
}
异常返回示例:
{
"id": "37f7e5fa-d6a5-4efe-8abf-5bf23dca6284",
"code": 403,
"message": "request forbidden.",
"localizedMsg": "请求被禁止",
"data": null
}
错误码:
错误码 | 错误信息 | 错误描述 |
400 | request error. | 系统繁忙 |