本文说明如何使用Sensecap Java SDK
概述部分
获取证书
1.登录SenseCAP云平台:
Note: LoRaWAN设备必须使用国际站
2.前往“安全/API访问密钥”。
3.点击“Create access key”会产生一条密钥ID,点击密钥ID并输入账号密码后,可获取对应的API访问密钥(Password)。
Maven坐标
<dependency>
<groupId>cc.seeed.sensecap-sdk</groupId>
<artifactId>sensecap-java-sdk</artifactId>
<version>1.0-RELEASE</version>
</dependency>
配置SenseCAPClient
//配置client参数
{
String accessId = " ";
String accessKey = "";
int region = RegionType.SENSECAP_CC.getRegion();
//SenseCAPClient senseCAPClient = new SenseCAPClientBuilder().buildConfig(accessId, accessKey, region);
OpenApiConfig openApiConfig = new OpenApiConfig(accessId, accessKey, region);
SenseCAPClient senseCAPClient = new SenseCAPClientBuilder().buildConfig(openApiConfig);
}
组织
获取组织ID
public long getOrganizationId() throws BaseException;
请求参数
无
返回值
请求示例
public static void getOrganizationId() throws BaseException{
long organizationId = senseCAPClient.getOrganizationManager()
.getOrganizationId();
System.out.println(organizationId);
}
分组
创建分组
public GroupInfo create(String groupName) throws BaseException;
请求参数
参数名 |
参数类型 |
描述 |
groupName |
String |
分组名称 |
返回值
请求示例
public static void createGroup() throws BaseException {
GroupInfo result = senseCAPClient.getGroupManager().create("SDk-TEST");
System.out.println(result);
}
更新分组
public void rename(String groupUUID, String groupName) throws BaseException;
请求参数
参数名 |
参数类型 |
描述 |
groupUUID |
String |
分组UUID |
groupName |
String |
分组名称 |
返回值
无
请求示例
public static void renameGroup() throws BaseException {
senseCAPClient.getGroupManager().rename("groupUUID", "SDk-TEST");
}
删除分组
public void remove(String groupUUID) throws BaseException;
请求参数
参数名 |
参数类型 |
描述 |
groupUUID |
String |
分组UUID |
返回值
无
请求示例
public static void renameGroup() throws BaseException {
senseCAPClient.getGroupManager().remove("GroupUUID");
}
获取分组列表
public List<GroupInfo> getGroupList() throws BaseException;
请求参数
参数名 |
参数类型 |
描述 |
groupUUID |
String |
分组UUID |
返回值
请求示例
public static void getGroupList() throws BaseException {
GroupResult groupResult = senseCAPClient.getGroupManager().createGroupQuery()
.build()
.execute();
List<GroupInfo> groupInfos = groupResult.toList();
System.out.println(groupInfos.toString());
}
设备
移动设备
public void moveDevices(String groupUUID, List<String> deviceEuis) throws BaseException;
请求参数
参数名 |
参数类型 |
描述 |
groupUUID |
String |
分组UUID |
deviceEuis |
array |
设备eui集合 |
返回值
无
请求示例
public static void moveDeivces() throws BaseException {
List<String> deviceEuis = Lists.newArrayList();
deviceEuis.add(deviceEui);
senseCAPClient.getDeviceManager().moveDevices("groupUUID", deviceEuis);
}
获取分组设备列表
public List<DeviceBaseInfo> getDeviceList(int deviceType, String groupUUID) throws BaseException;
请求参数
参数名 |
参数类型 |
描述 |
groupUUID |
String |
分组UUID |
deviceType |
int |
设备类型 1:gateway ,2:node(默认) |
返回值
请求示例
public static void getDeviceList() throws BaseException {
DeviceResult deviceResult = senseCAPClient.getDeviceManager().createDeviceQuery()
.deviceType(2)
.groupUUID("")
.build()
.execute();
List list = deviceResult.deviceList();
System.out.println(list.toString());
}
获取设备详情列表
public List<DeviceInfo> getDeviceInfo(List<String> deviceEuis, int deviceType) throws BaseException;
请求参数
参数名 |
参数类型 |
描述 |
deviceEuis |
String |
设备eui集合 |
deviceType |
int |
设备类型 1:gateway ,2:node(默认) |
返回值
请求示例
public static void getDeviceInfoList() throws BaseException {
List<String> deviceEuis = Lists.newArrayList();
deviceEuis.add(deviceEui);
DeviceResult deviceResult = senseCAPClient.getDeviceManager().createDeviceQuery()
.deviceEuis(deviceEuis)
.deviceType(2)
.build()
.execute();
List<DeviceInfo> deviceInfos = deviceResult.deviceInfos();
System.out.println(deviceInfos.toString());
}
获取设备通道列表
public List<DeviceChannelInfo> getDeviceChannelList(List<String> deviceEuis) throws BaseException;
请求参数
参数名 |
参数类型 |
描述 |
deviceEuis |
String |
设备eui集合 |
返回值
请求示例
public static void getDeviceChannelList() throws BaseException {
List<String> deviceEuis = Lists.newArrayList();
deviceEuis.add(deviceEui);
DeviceResult deviceResult = senseCAPClient.getDeviceManager().createDeviceQuery()
.deviceEuis(deviceEuis)
.build()
.execute();
List<DeviceChannelInfo> deviceChannelInfos = deviceResult.channelList();
System.out.println(deviceChannelInfos.toString());
}
获取设备运行状态信息列表
public List<DeviceStatusInfo> getDeviceRunningStatusList(List<String> deviceEuis) throws BaseException;
请求参数
参数名 |
参数类型 |
描述 |
deviceEuis |
String |
设备eui集合 |
返回值
请求示例
public static void getDeviceRunningStatusList() throws BaseException {
List<String> deviceEuis = Lists.newArrayList();
deviceEuis.add(deviceEui);
DeviceResult deviceResult = senseCAPClient.getDeviceManager().createDeviceQuery()
.deviceEuis(deviceEuis)
.build()
.execute();
List<DeviceStatusInfo> deviceStatusInfos = deviceResult.runningStatusList();
System.out.println(deviceStatusInfos);
}
绑定设备
public boolean bindDevice(String eui, String code, String deviceName, String groupUUID, String longitude, String latitude) throws BaseException;
请求参数
参数名 |
参数类型 |
描述 |
eui |
String |
设备eui |
code |
String |
设备code |
deviceName |
String |
设备名 |
groupUUID |
String |
分组UUID |
longitude |
String |
纬度 |
latitude |
String |
经度 |
返回值
无
请求示例
public static void bindDevice() throws BaseException {
senseCAPClient.getDeviceManager().createBinder()
.eui("")
.code("")
.deviceName("")
.groupUUID("")
.longitude("")
.latitude("")
.build()
.bind();
}
删除设备
public boolean deleteDevices(List<String> deviceEuis) throws BaseException;
请求参数
参数名 |
参数类型 |
描述 |
deviceEuis |
String |
设备eui集合 |
返回值
请求示例
public static void deleteDevices() throws BaseException {
List<String> deviceEuis = Lists.newArrayList();
deviceEuis.add(deviceEui);
boolean b = senseCAPClient.getDeviceManager().deleteDevices(deviceEuis);
}
遥测数据
获取设备最近遥测数据
List<LatestTelemetryDataInfo> getLatestTelemetryData(String deviceEui, int channelIndex, int measurementId) throws BaseException;
请求参数
参数名 |
参数类型 |
描述 |
deviceEui |
String |
设备eui |
channelIndex |
int |
通道 |
measurementId |
int |
测量值id |
返回值
请求示例
public static void getLatestTelemetryData() throws BaseException {
DataResult dataResult = senseCAPClient.getDataManager().createDataQuery()
.deviceEui(deviceEui)
.channelIndex(1)
.measurementId(4099)
.build()
.execute();
List<LatestTelemetryDataInfo> latestTelemetryDataInfos = dataResult.latestData();
System.out.println(latestTelemetryDataInfos.toString());
}
获取设备历史遥测数据列表
List<TelemetryDataInfo> getTelemetryDataListCallback(String deviceEui, int channelIndex, int measurementId, int limit, long startTime, long endTime, TelemetryDataCallback var) throws BaseException;
请求参数
参数名 |
参数类型 |
描述 |
deviceEui |
String |
设备eui |
channelIndex |
int |
通道 |
measurementId |
int |
测量值id |
limit |
int |
查询条数 |
startTime |
long |
开始时间 |
endTime |
long |
结束时间 |
var |
TelemetryDataCallback |
回调函数 |
参数说明
- [startTime>0,endTime>0] 获取指定时间范围历史数据 最长[-30d,now]
- (startTime=0,endTime>0] 获取默认一天前到endTime历史数据 [-1d,endTime]
- [startTime>0,endTime=0) 获取开始时间的历史数据并订阅最新消息 [startTime,–]
- (startTime=0,endTime=0) 只订阅最新消息 [now,–]
- 服务重启需要用户自行处理重连订阅
返回值
请求示例
public static void getTelemetryDataListCallBack() throws BaseException {
DataResult dataResult = senseCAPClient.getDataManager().createDataQuery()
.deviceEui(deviceEui)
.channelIndex(1)
//.measurementId(4100)
.startTime(1605385871000L)
//.endTime(1605496271000L)
.limit(100)
.callback(new TelemetryDataCallback() {
@Override
public void messageArrived(TelemetryDataResult var) throws BaseException {
System.out.println("Test获取消息: " + var.toString());
}
})
.build()
.execute();
List<TelemetryDataInfo> list = dataResult.dataList();
System.out.println(JSON.toJSONString(list));
}
获取设备折线图数据(openAPI版本)
List<ChartPointDataInfo> getChartPointData(String deviceEui, int channelIndex, int measurementId, int interval, long startTime, long endTime) throws BaseException;
说明
- 将庞大的数据段分成小数据段,然后输出每个小段的平均值,最长返回一年的数据,
- 每个测量量最多返回250个点,超过250个点将自动重新划分时间段返回250个点
请求参数
参数名 |
参数类型 |
描述 |
deviceEui |
String |
设备eui |
channelIndex |
int |
通道 |
measurementId |
int |
测量值id |
interval |
int |
间隔分钟 |
startTime |
long |
开始时间 时间戳 毫秒 |
endTime |
long |
结束时间 时间戳 毫秒 |
返回值
请求示例
public static void getLatestTelemetryData() throws BaseException {
DataResult dataResult = senseCAPClient.getDataManager().createDataQuery()
.startTime(1605600000000L)
.deviceEui(deviceEui)
.build()
.execute();
List<ChartPointDataInfo> chartPointDataInfos = dataResult.chartPointData();
System.out.println(JSON.toJSONString(chartPointDataInfos));
}
获取设备折线图数据
List<ChartDataListInfo> getChartDataList(String deviceEui, int channelIndex, int measurementId, int interval, long startTime, long endTime) throws BaseException;
说明
- 一天内(含),返回所有数据点
- 时间大于一天,返回interval范围数据点平均值
- interval勿小于数据上报最小间隔
请求参数
参数名 |
参数类型 |
描述 |
deviceEui |
String |
设备eui |
channelIndex |
int |
通道 |
measurementId |
int |
测量值id |
interval |
int |
间隔分钟 |
startTime |
long |
开始时间 时间戳 毫秒 |
endTime |
long |
结束时间 时间戳 毫秒 |
返回值
请求示例
public static void getLatestTelemetryData() throws BaseException {
DataResult dataResult1 = senseCAPClient.getDataManager().createDataQuery()
.startTime(1605600000000L)
.deviceEui(deviceEui)
.interval(30)
.build()
.execute();
List<ChartDataListInfo> listInfoList = dataResult1.chartData();
System.out.println(JSON.toJSONString(listInfoList));
}