本文说明如何使用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));
}