# Java API使用说明

罗万智联平台提供的Java SDK,可帮助开发人员通过Java程序更便捷地操作罗万智联平台。开发人员只需添加LowanIot提供相关SDK依赖Jar包安装到本地即可。

使用罗万智联平台实现设备完整的通信链接,lowaniot提供一套关于应用、设备、操作管理等OpenAPI。帮助快速开发应用,满足场景业务需求,并且可以通过动态下发指令至设备端,实现对设备的远程控制。

# 验签流程

注意

平台需要对API调用方进行资源权限校验,使用API时,http body需要统一使用SignatureRequest请求类。

所有SignatureRequest所携带数据封装类需实现Serializable接口。

SignatureRequest认证请求,参数对比:

字段名称 字段说明 备注
appId 应用唯一标识 ${appId}
secretKey 对应appId核心密钥 ${secretKey}
nonce 随机数 例:447459660
timestamp 请求时间戳 例:1640400530274
signature 密文签名 例:k92hiUU7B2D3TzxKyej66Jh9sPLIdY5lU8jnEl0AVG0=
data 业务数据 例:标准的JSON格式,封装类需实现Serializable接口

# 使用说明:

# 1.安装SDK

  • 安装LowanIot 提供Jar包,添加到项目本地依赖。

    api-sign-core

    api-sign-client

# 2.业务数据封装

  • 业务数据封装类需实现Serializable接口

业务数据封装类样例:

/**
 * @title: DefaultSignatureData.java
 * <p>
 * 业务数据封装类
 */
@Getter
@Setter
public class DefaultSignatureData implements Serializable {

    private String name;

    private Integer age;

    private Byte sex;

}

# 3.创建客户端请求

  • SignatureClient提供静态方法create(),入参AppId,SecretKey可获得SignatureClient实例
  • SignatureClient实例调用signatureRequest()方法,入参业务数据(标准JSON格式),得到SignatureRequest请求实例

创建客户端请求样例:

注意

此示例引用okhttp提供SDK依赖

<dependency>
    <groupId>com.squareup.okhttp3</groupId>
    <artifactId>okhttp</artifactId>
    <version>3.9.0</version>
</dependency>
/**
 * @title: CreateClient.java
 * <p>
 * 创建客户端示例代码
 */
@Slf4j
public class CreateClient {

    public static final OkHttpClient okHttpClient = new OkHttpClient.Builder()
            .connectTimeout(8000, TimeUnit.MILLISECONDS)
            .readTimeout(8000, TimeUnit.MILLISECONDS)
            .build();

    public static final MediaType mediaType = MediaType.parse("application/json; charset=utf-8");

    // client
    public static void main(String[] args) {

        DefaultSignatureData defaultSignatureData = new DefaultSignatureData();
        defaultSignatureData.setName("张三");
        defaultSignatureData.setAge(18);
        defaultSignatureData.setSex((byte) 0);
        SignatureClient signatureClient = SignatureClient.create("${AppId}", "${SecretKey}");
        SignatureRequest<DefaultSignatureData> signatureRequest =
                signatureClient.signatureRequest(defaultSignatureData);

        // 请求对象 signatureRequest
        String body = JSONObject.toJSONString(signatureRequest);

        try {
            RequestBody requestBody = RequestBody.create(mediaType, body);
            // 发送请求
            Request.Builder builder =
                    new Request.Builder().url("https://api.lowaniot.com/openapi/test").post(requestBody);

            Response response = okHttpClient.newCall(builder.build()).execute();
            // 响应结果
            String result = response.body().string();
            log.info("result: {}", result);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

# 4.http body样例:

{
    "appId": "${appId}",
    "nonce": -1854528745,
    "timestamp": 1640669970000,
    "signature": "QKct7fIv7qUjTHlAVEsLIN47BakVxffTzhVjPaSgRPw=",
    "data": {
        "name": "张三",
        "age": 18,
        "sex": 0
    }
}

# 5.响应数据样例:

{
    "code": 200,
    "msg": "成功",
    "data": {
        "name": "张三",
        "age": 18,
        "sex": "男",
        "address": "浙江省杭州市"
    }
}

以上阅读完毕可对接平台提供API。

注:以下API中的请求业务数据均为验签http body中的Data内容


# 设备管理相关API

# 新增、更新设备

# 请求方式:POST

# URL:https://api.lowaniot.com/openapi/devinfo/save/update

# 请求业务数据

参数名称 参数类型 是否必须 说明
appid String 应用编码
tenantCode String 租户编码
productCode String 产品编码
devAddr String 设备编号
deviceName String 设备名称
devGroupType Byte 设备类型分类
1=采集通讯模块
2=采集通讯模块子设备
3=直连设备
communAddr String 通讯地址,当devGroupType=2时必填
location JSON 设备位置{“longitude”:“纬度”,"latitude":“经度”}
extendInfo JSON 设备扩展信息
# extendInfo描述:
# Lora设备
参数名称 参数类型 是否必须 说明
mode String LORA设备:A, B, C
appKey String appKey
nwkKey String nwkKey
macVersion String L2版本1.0.0
rfRegion String 等同于4.0 "BAND" 字段
regParamVersion String RP版本
fPort Number LoraWAN 端口号
timezone Number 设备所在时区偏移量 单位分钟 例:东八区为480
deviceNo String 设备号;通信组帧所需要的设备号参数信息
# 直连设备
参数名称 参数类型 是否必须 说明
mode String 直连设备:client/server
ip String mode=server时的IP地址
port String mode=server时的端口号

电信NB设备

参数名称 参数类型 是否必须 说明
deviceNo String 设备号;通信组帧所需要的设备号参数信息
operator String 操作者,默认值为hzlaison
deviceId String 创建成功后,同步电信平台的deviceId,方便设备更新,删除时传参
autoObserver Number 是否开启自动订阅;0-订阅;1-不订阅;默认0

# 响应内容

参数名称 参数类型 是否必须 说明
code Number 响应编码
msg String 响应信息
data JSON 响应数据

# 请求业务数据示例:

{
    "location": {
        "longitude": 1,
        "latitude": 1 
    },
    "communAddr": "", 
    "deviceName": "",
    "tenantCode": "",
    "appid": "",
    "productCode": "",
    "remark": "",
    "devAddr": "",
    "devGroupType": 0,
    "extendInfo": {
        "mode": "client",
        "ip": "203.195.***.***",
        "port": 18080
    },
    "extendInfo": {
        "mode": "A",
        "nwkKey": "",
        "appKey": "",
        "macVersion": "",
        "rfRegion": "",
        "regParamVersion": ""
    }
}

# 响应示例

{
  "code": 200,
  "msg": "成功",
  "data": {
    "deviceId": ""
  }
}

# 查询设备信息列表(分页)

# 请求方式:POST

# URL:https://api.lowaniot.com/openapi/devinfo/page

# 请求业务数据

参数名称 参数类型 是否必须 说明
curPage Number 当前页,值为0时表示不分页
pageSize Number 页码容量
appid String 应用编码
tenantCode String 租户编码
productCode String 产品编码
devAddr String 设备编号;电信NB设备为IMEI号
deviceName String 设备名称
devGroupType Byte 设备类型分类
1=采集通讯模块
2=采集通讯模块子设备
3=直连设备
communAddr String 通讯地址, 当devGroupType=2时必填

# 响应内容

参数名称 参数类型 是否必须 说明
code Number 响应编码
msg String 响应信息
data JSON 响应数据
# data描述
参数名称 参数类型 是否必须 说明
curPage Number 当前页码
pageSize Number 页容量
total Number 总数量
rows JSON 行数据记录
# rows描述
参数名称 参数类型 是否必须 说明
appid String 应用编码
productCode String 产品编码
productName String 应用名称
tenantCode String 租户编码
deviceId String 平台生成的设备编号
deviceName String 设备名称
devAddr String 设备地址
devGroupType Byte 设备类型分类
1=采集通讯模块
2=采集通讯模块子设备
3=直连设备
communAddr String 通讯地址, 当devGroupType=2时必填
extendInfo JSON 设备扩展信息
location JSON 设备位置{“longitude”:“纬度”,"latitude":“经度”}
devStatus Number 设备状态: 0=未激活 1=离线 2=在线

extendInfo描述

Lora设备

参数名称 参数类型 是否必须 说明
mode String LORA设备class模式:A, B, C
appKey String appKey
nwkKey String OTAA 入网时,nwkKey与appKey相同
macVersion String L2版本 如 1.0.0
rfRegion String 频段:如EU868、AU915、CN470
regParamVersion String RP版本;如1.0.1
deviceNo String 设备号;通信组帧所需要的设备号参数信息
timezone Number 设备所在时区偏移量 单位分钟 例:东八区为480
fPort Number LoraWAN 端口号

直连设备

参数名称 参数类型 是否必须 说明
mode String 直连设备:client/server
ip String mode=server时的IP地址
port String mode=server时的端口号

电信NB设备

参数名称 参数类型 是否必须 说明
deviceNo String 设备号
operator String 操作者,默认值为hzlaison
deviceId String 创建成功后,同步电信平台的deviceId,方便设备更新,删除时传参
autoObserver Number 是否开启自动订阅;0-订阅;1-不订阅;默认0

# 请求示例:

{
    "curPage": 0,
    "pageSize": 1,
    "communAddr": "",
    "deviceName": "",
    "tenantCode": "",
    "appid": "",
    "productCode": "",
    "remark": "",
    "devAddr": "",
    "devGroupType": null
}

# 响应示例:

{
  "code": 200,
  "msg": "成功",
  "data": {
    "curPage": 1,
    "pageSize": 50,
    "total": 1,
    "rows": [
      {
        "deviceId": "b5jrlm4k4jk0",
        "deviceName": "00000056840963",
        "tenantCode": "uhc4epeayo",
        "appid": "181n98joqo",
        "productCode": "4l3edjve2o",
        "devAddr": "00000056840963",
        "devGroupType": 2,
        "communAddr": "c00d65013e00a1a1",
        "extendInfo": {
          "mode": "client",
          "port": 18080,
          "ip": "203.195.***.***"
        },
        "location": {
          "latitude": 1,
          "longitude": 1
        },
        "devStatus": 0,
        "remark": "新增测试",
        "createBy": null,
        "updateBy": null,
        "createTime": "15:55:38",
        "updateTime": "15:59:26",
        "productName": ""
      }
    ]
  }
}

# 删除设备

# 请求方式:POST

# URL:https://api.lowaniot.com/openapi/devinfo/delete

# 请求业务数据

参数名称 参数类型 是否必须 说明
deviceId String 设备编码

# 响应内容

参数名称 参数类型 是否必须 说明
code Number 响应编码
msg String 响应消息

# 请求示例:

{
  "deviceId": "testDeviceId"
}

# 响应示例:

{
  "code": 200,
  "msg": "成功"
}

# 设备分组管理相关API

# 查询设备分组(包含子分组)

# 请求方式:POST

# URL:https://api.lowaniot.com/openapi/groupinfo/query/tree

# 请求业务数据

参数名称 参数类型 是否必须 说明
appid String 应用ID
tenantCode String 租户编码
parentGroupCode String 父分组编码,如果为顶级分组,填写0

# 响应内容

参数名称 参数类型 是否必须 说明
code Number 响应编码
msg String 响应消息
data Array 响应数据
# data描述
参数名称 参数类型 是否必须 说明
id Number pk
appid String 应用ID
tenantCode String 租户编码
groupCode String 分组编码
groupName String 分组名称
parentGroupCode String 父分组编码
location JSON 设备位置{“longitude”:“纬度”,"latitude":“经度”}
createTime String yyyy-MM-dd HH:mm:ss
children Array data子分组

# 请求示例:

{
  "appid": "${appid}",
  "parentGroupCode": ""
}

# 响应示例:

{
  "code": 200,
  "msg": "成功",
  "data": [
    {
      "id": 21,
      "appid": "tz89uf25mo",
      "tenantCode": "0",
      "groupCode": "bc06238138084cf4844b",
      "groupName": "浙江省",
      "parentGroupCode": "0",
      "location": null,
      "children": [
        {
          "id": 22,
          "appid": "tz89uf25mo",
          "tenantCode": "0",
          "groupCode": "3f3d70a7cc114b2bbd38",
          "groupName": "杭州市",
          "parentGroupCode": "bc06238138084cf4844b",
          "location": {
            "latitude": "10000.12",
            "longitude": "5555.23"
          },
          "children": [
            {
              "id": 24,
              "appid": "tz89uf25mo",
              "tenantCode": "0",
              "groupCode": "3aaaf694ca2b427bb9a6",
              "groupName": "西湖区",
              "parentGroupCode": "3f3d70a7cc114b2bbd38",
              "location": null,
              "children": null,
              "createTime": "2021-12-20 15:50:09"
            }
          ],
          "createTime": "2021-12-20 14:45:39"
        }
      ],
      "createTime": "2021-12-20 14:45:26"
    }
  ]
}

# 查询设备分组(不包含子分组)(分页)

# 请求方式:POST

# URL:https://api.lowaniot.com/openapi/groupinfo/query/page

# 请求业务数据

参数名称 参数类型 是否必须 说明
curPage Number 当前页
pageSize Number 页容量
tenantCode String 租户编码
parentGroupCode String 父分组编码,如果为顶级分组,填写0
appid String 应用ID
groupName String 分组编码

# 响应内容

参数名称 参数类型 是否必须 说明
code Number 响应编码
msg String 响应消息
data Array 响应数据
# data描述
参数名称 参数类型 是否必须 说明
id Number pk
appid String 应用ID
tenantCode String 租户编码
groupCode String 分组编码
groupName String 分组名称
parentGroupCode String 父分组编码,如果为顶级分组,填写0
location JSON 位置信息{“longitude”:“纬度”,"latitude":“经度”}

# 请求示例:

{
  "curPage": 1,
  "pageSize": 1,
  "appid": "",
  "groupName": "",
  "parentGroupCode": ""
}

# 响应示例:

{
  "code": 200,
  "msg": "成功",
  "data": {
    "rows": [
      {
        "id": 16,
        "appid": "mziluxhc00",
        "tenantCode": "0",
        "groupCode": "f38a747cde894e0ba973",
        "groupName": "测试一级分组2",
        "parentGroupCode": "0",
        "location": null,
        "createBy": "admin",
        "updateBy": "admin",
        "createTime": "2021-12-13 13:49:22",
        "updateTime": "2021-12-13 13:49:22"
      },
      {
        "id": 17,
        "appid": "nkk61x1jwg",
        "tenantCode": "0",
        "groupCode": "6fd1734888bf47f0a3ae",
        "groupName": "测试一级分组",
        "parentGroupCode": "0",
        "location": null,
        "createBy": "admin",
        "updateBy": "admin",
        "createTime": "2021-12-13 13:48:35",
        "updateTime": "2021-12-13 13:48:35"
      }
    ],
    "total": 10,
    "": ""
  }
}

# 创建设备分组

# 请求方式:POST

# URL:https://api.lowaniot.com/openapi/groupinfo/create

# 请求业务数据

参数名称 参数类型 是否必须 说明
appid String 应用ID
groupName String 分组名称
tenantCode String 租户编码
parentGroupCode String 父分组编码,如果为顶级分组,填写0
locationConvert String 分组中心点经纬度信息{“longitude”:“纬度”,"latitude":“经度”}

# 响应内容

参数名称 参数类型 是否必须 说明
code Number 响应编码
msg String 响应信息
data JSON 响应数据

# 请求示例:

{
  "appid": "",
  "groupName": "",
  "parentGroupCode": "",
  "tenantCode":""
  "locationConvert": ""
}

# 响应示例:

{
  "code": 200,
  "msg": "成功",
  "data": null
}

# 查看分组详情

# 请求方式:POST

# URL:https://api.lowaniot.com/openapi/groupinfo/query/detail

# 请求业务数据

参数名称 参数类型 是否必须 说明
groupCode String 分组编码
tenantCode String 租户编码

# 响应内容

参数名称 参数类型 是否必须 说明
code Number 响应编码
msg String 响应消息
data JSON 响应数据
# data描述
参数名称 参数类型 是否必须 说明
id Number pk
appid String 应用ID
tenantCode String 租户编码
groupCode String 分组编码
groupName String 分组名称
parentGroupCode String 父分组编码,如果为顶级分组,默认为0
location JSON 位置信息{“longitude”:“纬度”,"latitude":“经度”}
createTime String 创建时间
deviceTotal Number 设备总数
deviceActivate Number 已激活状态设备数
currentOnline Number 当前在线设备数

# 请求业务数据样例:

{
  "groupCode": "${groupCode}"
}

# 响应样例:

{
  "code": 200,
  "msg": "成功",
  "data": {
    "id": 2,
    "appid": "16eel9m1vk",
    "tenantCode": "0",
    "groupCode": "111",
    "groupName": "test二级分组",
    "parentGroupCode": "0",
    "location": null,
    "createTime": null,
    "deviceTotal": 1,
    "deviceActivate": 0,
    "currentOnline": 0
  }
}

# 删除分组(包含子分组)

# 请求方式:POST

# URL:https://api.lowaniot.com/openapi/groupinfo/remove

# 请求业务数据

参数名称 参数类型 是否必须 说明
groupCode String 分组编码
tenantCode String 租户编码

# 响应内容

参数名称 参数类型 是否必须 说明
code Number 响应编码
msg String 响应信息

# 请求业务数据样例:

{
  "groupCode": "${groupCode}"
}

# 响应样例:

{
  "code": 200,
  "msg": "成功"
}

# 设备与分组绑定

# 请求方式:POST

# URL:https://api.lowaniot.com/openapi/devgroup/bind/batch

# 请求业务数据

参数名称 参数类型 是否必须 说明
appid String 应用ID
groupCode String 分组编码
deviceIds Array 设备ID集合
tenantCode String 租户编码

# 响应内容

参数名称 参数类型 是否必须 说明
code Number 响应编码
msg String 响应消息
data JSON 响应数据

# 请求业务数据样例:

{
  "appid": 001,
  "groupCode": 101,
  "deviceIds": [
    1,
    2,
    3
  ]
}

# 响应样例:

{
  "code": 200,
  "msg": "成功",
  "data": null
}

# 查看分组下绑定全部设备

# 请求方式:POST

# URL:https://api.lowaniot.com/openapi/devgroup/query/binddev/list

# 请求业务数据

参数名称 参数类型 是否必须 说明
appid String 应用ID
groupCode String 分组编码
tenantCode String 租户编码
devGroupType Byte 设备类型分类
1=采集通讯模块
2=采集通讯模块子设备
3=直连设备
deviceId String 设备编码
deviceName String 设备名称

# 响应内容

参数名称 参数类型 是否必须 说明
code Number 响应编码
msg String 响应消息
data Array 响应数据
# data描述
参数名称 参数类型 是否必须 说明
appid String 应用ID
tenantCode String 租户编码
groupCode String 分组编码
deviceId String 设备ID
deviceName String 设备名称
devGroupType Byte 设备类型分类
1=采集通讯模块
2=采集通讯模块子设备
3=直连设备
devStatus Byte 设备状态:0=未激活1=离线2=在线
productName String 产品名称
location JSON 位置信息{“longitude”:“纬度”,"latitude":“经度”}
lastOnlineTime String 最后在线时间

# 请求业务数据样例:

{
  "appid": "",
  "groupCode": "",
  "devGroupType": 1,
  "deviceId": "",
  "deviceName": ""
}

# 响应样例:

{
  "code": 200,
  "msg": "成功",
  "data": [
    {
      "curPage": 1,
      "pageSize": 15,
      "appid": "10000",
      "tenantCode": "0",
      "groupCode": "999",
      "deviceId": "1001",
      "deviceName": "测试1",
      "devGroupType": 1,
      "devStatus": 1,
      "productName": "LoRaWAN通讯模块1",
      "location": {
        "address": "浙江省杭州市上城区四季青街道景昙路8-26号银泰百货",
        "latitude": 30.260386,
        "longitude": 120.205663
      },
      "lastOnlineTime": null,
      "needPage": true
    }
  ],
  "success": true
}

# 解绑分组下绑定设备

# 请求方式:POST

# URL:https://api.lowaniot.com/openapi/devgroup/remove/binddev

# 请求业务数据

参数名称 参数类型 是否必须 说明
groupCode String 分组编码
deviceIds Array 设备编码数据
tenantCode String 租户编码

# 响应内容:

参数名称 参数类型 是否必须 说明
code Number 响应编码
msg String 响应消息

# 请求业务数据样例:

{
  "groupCode": "",
  "deviceIds": [
      1,
      2,
      3
  ]
}

# 响应样例:

{
  "code": 200,
  "msg": "成功"
}

# 计划管理相关API

# 创建计划

# 请求方式:POST

# URL:https://api.lowaniot.com/openapi/plan/createplan

# 请求业务数据

参数名称 参数类型 是否必须 说明
appid String 应用ID
tenantCode String 租户编码
productCode String 产品编码
planName String 计划名称,最长字符长度varchar(30)
awaitExecuteTask Number 是否缓存任务;-1 不缓存;0 缓存至ns(LoraWAN);1 缓存至协议层(LoraWAN);2 设备上线后下发
pri Number 优先级1-5 5=最高优先级 1=最低优先级
timeout Number 计划下发到任务模块的超时时间
devs JSON 设备范围
crontab JSON 计划执行时间规则设定
orders JSON 执行计划内容
# devs描述
参数名称 参数类型 是否必须 说明
itemType Number 指定dev_array的内容含义类型,0=设备编号1=设备组号2=拓展参数
devList String itemType=0时,为设备deviceId itemType=1时,为设备devGroup
devParams JSON itemType=2时有值
# devParams描述
参数名称 参数类型 是否必须 说明
groupCodes String 设备分组
# crontab描述
参数名称 参数类型 是否必须 说明
starttime Number 为0时为实时计划 其他为计划首次执行的时间 单位s
freq Number 频率 Int 非0
count Number 执行次数, Int 0:为无限循环
unit Number 单位 Int 0:分 1:时 2:日 3:月 5:秒 6:周
repairConf JSON 补操作,补抄配置
# repairConf描述
参数名称 参数类型 是否必须 说明
repairCount Number 补抄次数,repairCount=0时,不需补抄
repairIntervalTime Number 补操作时间间隔
repairTimeUnit Number 补操作时间间隔的单位,0=分 1=时 2=日
# orders描述
参数名称 参数类型 是否必须 说明
type String readProperty-读取属性、 writeProperty-写属性、 functionInvoke-方法调用
dataKey String 属性
invokeId Number 当awaitExecuteTask 为0 时,必填,范围1-7
params String 业务扩展参数,格式json方式 eg. {
"data":"abcdefghijklmn",
"mode":"xxxx",
"from":"2019-05-05 00:00:00",
"to":"2019-05-06 00:00:00",
"cType":"TCP/Bridge",
"载波通道(4G)" : "TCP",
"载波通道(2.4G)": "Bridge",
"LoRa通道 ": "LoRa",
"pn":"1,2,3" //当抄读设备为集中器时,pn值为集中器下需要抄读的电表的pn值编号 }

# 响应内容

参数名称 参数类型 是否必须 说明
code Number 响应编码
msg String 响应消息
data JSON 响应数据

# data描述

参数名称 参数类型 是否必须 说明
planid String 计划ID
mqTopic String /${appid}/plan/${planid}

# 请求业务数据样例:

{
    "appid": "5c59j03g1s",
    "tenantCode": "0",
    "productCode": "5ba9upyrcw",
    "planName": "设备调试",
    "pri": 1,
    "timeout": 60,
    "awaitExecuteTask":1,
    "devs": {
        "devList": [
            "00956906000129e7"
        ],
        "itemType": 0
    },
    "crontab": {
        "starttime": 0,
        "freq": 1,
        "count": 1,
        "unit": 0,
        "repairConf": {
            "repairCount": 0,
            "repairIntervalTime": 0,
            "repairTimeUnit": 0
        }
    },
    "orders": [
        {
            "type": "readProperty",
            "dataKey": "dateTime"
        }
    ]
}

# 响应样例:

{
  "code": 200,
  "msg": "",
  "data": {
    "planid": "计划id唯一标识",
    "mqTopic": "/P002/plan/45a7919581764a18ba3e40a25ff26c12"
  }
}

# 修改计划

# 请求方式:POST

# URL:https://api.lowaniot.com/openapi/plan/modifyplan

# 请求业务数据

参数名称 参数类型 是否必须 说明
planid String 计划ID
appid String 应用ID
tenantCode String 租户编码
productCode String 产品编码
planName String 计划名称
pri Number 优先级1-5 5=最高优先级 1=最低优先级
timeout Number 计划下发到任务模块的超时时间 单位s
devs JSON 设备范围
crontab JSON 计划执行时间规则设定
orders JSON 执行计划内容
# devs描述
参数名称 参数类型 是否必须 说明
itemType Number 指定dev_array的内容含义类型,0=设备编号1=设备组号2=拓展参数
devList String itemType=0时,为设备deviceId itemType=1时,为设备devGroup
devParams JSON itemType=2时有值
# devParams描述
参数名称 参数类型 是否必须 说明
groupCodes String 设备分组
# crontab描述
参数名称 参数类型 是否必须 说明
starttime Number 为0时为实时计划 其他为计划首次执行的时间 单位s
freq Number 频率 Int 非0
count Number 执行次数, Int 0:为无限循环
unit Number 单位 Int 0:分 1:时 2:日 3:月 5:秒 6:周
repairConf JSON 补操作,补抄配置
# repairConf描述
参数名称 参数类型 是否必须 说明
repairCount Number 补抄次数,repairCount=0时,不需补抄
repairIntervalTime Number 补操作时间间隔
repairTimeUnit Number 补操作时间间隔的单位,0=分 1=时 2=日
# orders描述
参数名称 参数类型 是否必须 说明
type String readProperty-读取属性、 writeProperty-写属性、 functionInvoke-方法调用
dataKey String 属性
params String 业务扩展参数,格式json方式 eg. {
"data":"abcdefghijklmn",
"mode":"xxxx",
"from":"2019-05-05 00:00:00",
"to":"2019-05-06 00:00:00",
"cType":"TCP/Bridge",
"载波通道(4G)" : "TCP",
"载波通道(2.4G)": "Bridge",
"LoRa通道 ": "LoRa",
"pn":"1,2,3" //当抄读设备为集中器时,pn值为集中器下需要抄读的电表的pn值编号 }

# 响应内容

参数名称 参数类型 是否必须 说明
code Number 响应编码
msg String 响应消息

# 请求业务数据样例:

{
  "pri": 3,
  "crontab": {
    "starttime": 150000000,
    "freq": 1,
    "unit": 1,
    "count": 10,
    "repairConf": {
      "repairIntervalTime": 5,
      "repairTimeUnit": 0,
      "repairCount": 5
    }
  },
  "appid": "P002",
  "planName": "计划名称",
  "orders": [
    {
      "params": "操作参数",
      "type": "",
      "dataKey": 0
    }
  ],
  "tenantCode": "",
  "productCode": "",
  "timeout": 30,
  "devs": {
    "itemType": 2,
    "devList": [
      "1804448F0020",
      "vcaddr003",
      "999999999989"
    ],
    "devParams": {
      "groupCodes": ""
    }
  },
  "planid": ""
}

# 响应样例:

{
  "code": 200,
  "msg": ""
}

# 删除计划

# 请求方式:POST

# URL:https://api.lowaniot.com/openapi/plan/deleteplan

# 请求业务数据

参数名称 参数类型 是否必须 说明
appid String 应用ID
planid String 计划ID

# 响应内容

参数名称 参数类型 是否必须 说明
code Number 响应编码
msg String 响应消息

# 请求业务数据样例:

{
  "appid": "P001",
  "planid": "P001_2019121218000000****"
}

# 响应样例:

{
  "code": "200",
  "msg": "计划删除成功"
}

# 修改计划状态

# 请求方式:POST

# URL:https://api.lowaniot.com/openapi/plan/modifyplanstatus

# 请求业务数据

参数名称 参数类型 是否必须 说明
appid String 应用ID
planid String 计划ID
status Number 任务状态 0=暂停 1=激活

# 响应内容

参数名称 参数类型 是否必须 说明
code Number 响应编码
msg String 响应消息

# 请求业务数据样例:

{
  "planid": "154280159****",
  "status": 0,
  "appid": "P001"
}

# 响应样例:

{
  "code": "200",
  "msg": "停止计划成功"
}

# 查询计划列表(分页)

# 请求方式:POST

# URL:https://api.lowaniot.com/openapi/plan/listplaninfo

# 请求业务数据

参数名称 参数类型 是否必须 说明
curPage Number 当前页
pageSize Number 页码容量
tenantCode String 租户编码
appid String 应用ID
productCode String 产品编码
planid String 计划ID
planName String 计划名称
planStatus Number 0=暂停 1=激活 3=执行完成

# 响应内容

参数名称 参数类型 是否必须 说明
code Number 响应编码
msg String 响应消息
data JSON 响应数据
# data描述
参数名称 参数类型 是否必须 说明
curPage Number 当前页
pageSize Number 页码容量
total Number 总记录数
rows Array 页内容
# rows描述
参数名称 参数类型 是否必须 说明
tenantCode String 租户编码
productCode String 产品编码
planid String 计划ID
appid String 应用ID
planName String 计划名称
itemType Number 指定dev_array的内容含义类型,0=设备编号1=设备组号2=拓展参数
devArray String itemType=0时,为设备deviceId itemType=1时,为设备devGroup 多个元素通过逗号隔开
devParams JSON itemType=2时有值
starttime Number 为0时为实时计划 其他为计划首次执行的时间 单位s
freq Number 频率 Int 非0
unit Number 单位 Int 0:分 1:时 2:日 3:月 5:秒 6:周
count Number 执行次数, Int 0:为无限循环
pri Number 优先级
alreadyTimes Number 已执行次数
lastExecuteTime String 上次执行时间
planStatus Number 任务状态0=停止,1=激活
orders Array 计划执行内容
repairIntervalTime String 补操作时间间隔
repairTimeUnit Number 补操作时间间隔的单位,0=分 1=时 2=日
repairCount Number 补抄次数,repairCount=0时,不需补抄
timeout Number 超时时间
createBy String 创建者
updateBy String 更新者
createTime String 创建时间
updateTime String 更新时间

devParams描述

参数名称 参数类型 是否必须 说明
groupCodes String 设备分组

orders描述

参数名称 参数类型 是否必须 说明
dataKey String 数据项
type String 数据项类型 readProperty-读取属性、 writeProperty-写属性、 functionInvoke-方法调用
params String 数据项参数

# 请求业务数据样例:

{
  "appid": "",
  "planName": "",
  "planid": "",
  "curPage": 1,
  "pageSize": 15,
  "tenantCode": "",
  "productCode": "4l3edjve2o",
  "planStatus": 1
}

# 响应样例:

{
  "code": 200,
  "msg": "成功",
  "data": {
    "curPage": 1,
    "pageSize": 1,
    "total": 22,
    "rows": [
      {
        "planid": "P034_2021121619001139000031",
        "appid": "P034",
        "tenantCode": "uhc4epeayo",
        "productCode": "4l3edjve2o",
        "planName": "校时",
        "itemType": 0,
        "devArray": "b5qom9qaw4cg",
        "devParams": {
          "groupCodes": ""
        },
        "starttime": 1639652414,
        "freq": 1,
        "unit": 0,
        "count": 1,
        "pri": 1,
        "alreadyTimes": 1,
        "lastExecuteTime": "2021-12-16T19:00:14",
        "planStatus": 3,
        "orders": [
          {
            "dataKey": "3132",
            "type": "readProperty",
            "params": {}
          }
        ],
        "repairTimeUnit": 0,
        "repairCount": 0,
        "timeout": 180,
        "createBy": "system",
        "updateBy": "system",
        "createTime": "2021-12-16T19:02:17",
        "updateTime": "2021-12-16T19:02:17",
        "repairIntervalTime": ""
      }
    ]
  }
}

# 查询计划的基本信息配置

# 请求方式:POST

# URL:https://api.lowaniot.com/openapi/plan/getplaninfo

# 请求业务数据

参数名称 参数类型 是否必须 说明
planid String 计划ID

# 响应内容

参数名称 参数类型 是否必须 说明
code Number 响应编码
msg String 响应消息
data JSON 响应数据
# data描述
参数名称 参数类型 是否必须 说明
planid String 计划ID
appid String 应用ID
tenantCode String 租户编码
productCode String 产品编码
planName String 计划名称
itemType Number 指定dev_array的内容含义类型,0=设备编号1=设备组号2=拓展参数
devArray String itemType=0时,为设备deviceId itemType=1时,为设备devGroup 多个元素通过逗号隔开
devParams JSON itemType=2时有值
starttime Number 为0时为实时计划 其他为计划首次执行的时间 单位s
freq Number 频率 Int 非0
unit Number 单位 Int 0:分 1:时 2:日 3:月 5:秒 6:周
count Number 执行次数, Int 0:为无限循环
pri Number 优先级
alreadyTimes Number 已执行次数
lastExecuteTime String 上次执行时间
planStatus Number 任务状态0=停止,1=激活
orders Array 计划执行内容
repairIntervalTime String 补操作时间间隔
repairTimeUnit Number 补操作时间间隔的单位,0=分 1=时 2=日
repairCount Number 补抄次数,repairCount=0时,不需补抄
timeout Number 超时时间
createBy String 创建者
updateBy String 更新者
createTime String 创建时间
updateTime String 更新时间
# devParams描述
参数名称 参数类型 是否必须 说明
groupCodes String 设备分组
# orders描述
参数名称 参数类型 是否必须 说明
dataKey String 数据项
type String 数据项类型 readProperty-读取属性、 writeProperty-写属性、 functionInvoke-方法调用
params String 数据项参数

# 请求业务数据样例:

{
  "planid": "",
  "appid": ""
}

# 响应样例:

{
  "code": 200,
  "msg": "成功",
  "data": {
    "planid": "P034_2021121619001139000031",
    "appid": "P034",
    "tenantCode": "uhc4epeayo",
    "productCode": "4l3edjve2o",
    "planName": "校时",
    "itemType": 0,
    "devArray": "b5qom9qaw4cg",
    "devParams": {
      "groupCodes": ""
    },
    "starttime": 1639652414,
    "freq": 1,
    "unit": 0,
    "count": 1,
    "pri": 1,
    "alreadyTimes": 1,
    "lastExecuteTime": "2021-12-16T19:00:14",
    "planStatus": 3,
    "orders": [
      {
        "dataKey": "3132",
        "type": "readProperty",
        "params": {}
      }
    ],
    "repairTimeUnit": 0,
    "repairCount": 0,
    "timeout": 180,
    "createBy": "system",
    "updateBy": "system",
    "createTime": "2021-12-16T19:02:17",
    "updateTime": "2021-12-16T19:02:17",
    "repairIntervalTime": ""
  }
}

# 查询计划批次列表(分页)

# 请求方式:POST

# URL:https://api.lowaniot.com/openapi/plan/listplanbatch

# 请求业务数据

参数名称 参数类型 是否必须 说明
curPage Number 当前页
pageSize Number 每页大小,如果传0表示不分页
appid String 应用ID
planid String 计划ID
planName String 计划名称
startTime String 起始时间
endTime String 终止时间

# 响应内容

参数名称 参数类型 是否必须 说明
code Number 响应编码
msg String 响应消息
data JSON 响应数据
# data描述
参数名称 参数类型 是否必须 说明
curPage Number 当前页
pageSize Number 页码容量
total Number 总记录数
rows Array 页内容
# rows描述
参数名称 参数类型 是否必须 说明
planid String 计划ID
batchId Number 批次ID
planName String 计划名称
successRate String 成功率
taskitemTotal Number 计划抄表数
alreadyTotal Number 已抄表数量
successTotal Number 成功抄表数
failTotal Number 失败抄表数
startTime String 计划开始时间
compTime String 计划完成时间 为空时,代表计划批次还未执行完成
createTime String 单位 Int 0:分 1:时 2:日 3:月 5:秒 6:周

# 请求业务数据样例:

{
  "planid": "P002_2019060517222477119",
  "planName": "计划一",
  "startTime": "",
  "endTime": "",
  "curPage": 1,
  "pageSize": 10,
  "appid": "P001"
}

# 响应样例:

{
  "code": 200,
  "msg": "成功",
  "data": {
    "total": 2,
    "curPage": 1,
    "pageSize": 15,
    "rows": [
      {
        "planid": "P002_2019060517522900292",
        "batchId": 2,
        "taskitemTotal": 2011,
        "successTotal": 2011,
        "failTotal": 0,
        "createTime": "2021-12-16T19:00:14",
        "compTime": "2021-12-16T19:00:14",
        "successRate": "100.00%",
        "alreadyTotal": 1,
        "startTime": "2021-12-16T19:00:14",
        "planName": ""
      }
    ]
  }
}

# 查询某批次下所有任务执行详情(分页)

# 请求方式:POST

# URL:https://api.lowaniot.com/openapi/plan/listtasklog

# 请求业务数据

参数名称 参数类型 是否必须 说明
curPage Number 当前页
pageSize Number 页元素大小
appid String 应用ID
planid String 计划ID
batchId Number 批次ID
taskid String 任务号
devAddr String 设备地址
startTime String 计划开始时间 yyyy-MM-dd HH:mm:ss
endTime String 计划的结束时间 yyyy-MM-dd HH:mm:ss
codes String code码

# 响应内容

参数名称 参数类型 是否必须 说明
code Number 响应编码
msg String 响应消息
data JSON 响应数据
# data描述
参数名称 参数类型 是否必须 说明
curPage Number 当前页
pageSize Number 页码容量
total Number 总记录数
rows Array 页内容
# rows描述
参数名称 参数类型 是否必须 说明
devAddr String 设备地址
taskid String 任务号
status Number 状态0=初始化1=抄表成功2=抄表失败
createTime String 创建时间
startTime Number 开始时间
endTime Number 结束时间
codes Number code码

# 请求业务数据样例:

{
  "startTime": "2020-04-02 10:00:00",
  "endTime": "2020-04-02 11:02:00",
  "codes": "00,01",
  "planid": "P002_2019060517222477119",
  "batchId": 1,
  "taskid": "2019061123411091899",
  "devAddr": "000014064890",
  "curPage": 1,
  "pageSize": 10,
  "appid": "P001"
}

# 响应样例:

{
  "code": 200,
  "msg": "成功",
  "data": {
    "total": 1,
    "pageSize": 10,
    "pageNum": 1,
    "rows": [
      {
        "startTime": "2019-08-26 03:00:33",
        "endTime": "2019-08-26 03:00:33",
        "devAddr": "125435346",
        "taskid": "547567345235423",
        "status": 2,
        "createTime": "2019-08-26 03:00:33",
        "code": ""
      }
    ]
  }
}

code参照表:

code码 描述
00 成功
01 部分成功
02 失败
03 影子设备已存在
04 影子设备参数错误
90 offline
91
92 抄表命令格式错误
93 影子设备类型不支持
94 影子设备无需控制
95 影子设备不存在
96 连接拒绝
99 超时
50 计划模块触发超时机制 多个code通过逗号隔开

# 查询任务执行结果集返回明细

# 请求方式:POST

# URL:https://api.lowaniot.com/openapi/plan/gettasklog

# 请求业务数据

参数名称 参数类型 是否必须 说明
planid String 计划ID
batchId Number 批次ID
devAddr String 设备地址
taskid Number 任务号 大于210000000000000000L
appid String 应用ID

# 响应内容

参数名称 参数类型 是否必须 说明
code Number 响应编码
msg String 响应信息
data JSON 响应数据
# data描述
参数名称 参数类型 是否必须 说明
devAddr String 设备地址
taskid String 任务号
status Number 任务执行状态1=成功,2=失败
readData JSON 任务执行结果集返回
createTime String 执行结果返回时间

# 请求业务数据样例:

{
  "taskid": "taskid",
  "planid": "计划id",
  "batchId": "批次号",
  "devAddr": "设备地址"
}

# 响应样例:

{
  "code": "200",
  "msg": "",
  "data": {
    "devAddr": "DZG10000000001",
    "taskid": "2020011408060588089",
    "status": "状态",
    "readData": [
      {
        "cmd": "00010000",
        "cgcode": "1015",
        "response": {
          "unit": "kWh",
          "value": "70505.06",
          "initdata": "06050507"
        }
      }
    ],
    "createTime": ""
  }
}

# 获取产品物模型

# 请求方式:POST

# URL:https://api.lowaniot.com/openapi/plan/getobjectmodel

# 请求业务数据

参数名称 参数类型 是否必须 说明
productCode String 产品编码

# 响应内容

参数名称 参数类型 是否必须 说明
code Number 响应编码
msg String 响应信息
data JSON 响应数据
# data描述
参数名称 参数类型 是否必须 说明
properties JSON 属性
events JSON 事件
functions JSON 功能
# properties描述
参数名称 参数类型 是否必须 说明
dataKey String 数据项
dataName String 数据项名称
dataType String 数据项类型
accessType Number 读写 1=读写 2=只读
# events描述
参数名称 参数类型 是否必须 说明
dataKey String 数据项
dataName String 数据项名称
dataType String 数据项类型
accessType Number 读写 1=读写 2=只读
eventType Number event_type=1 信息 event_type=2 告警 event_type=3 故障

# 请求业务数据样例:

{
  "productCode": ""
}

# 响应样例:

{
  "code": 200,
  "msg": "成功",
  "data": {
    "properties": {
      "dataKey": "Ua",
      "dataName": "A相电压",
      "dataType": "float",
      "accessType": 2
    },
    "events": {
      "dataKey": "",
      "dataName": "",
      "dataType": "",
      "accessType": "",
      "eventType": 1
    },
    "functions": {}
  }
}

# 查询ns缓存队列

# 请求方式:POST

# URL:https://api.lowaniot.com/openapi/lora/queue/list

# 请求业务数据

参数名称 参数类型 是否必须 说明
dev_eui String 设备地址

# 响应内容

参数名称 参数类型 是否必须 说明
code Number 响应编码
msg String 响应信息
data JSON 响应数据
# data描述
参数名称 参数类型 是否必须 说明
dev_eui String 设备地址
status Number 是否正在上下行
items JSON 缓存任务
# item描述
参数名称 参数类型 是否必须 说明
task_id String 设备地址
plan_id String 计划id
dev_eui Number 设备地址
f_port JSON 端口
confirmed bool 是否需要回复
data String base64格式数据帧

# 请求业务数据样例:

{
    "dev_eui":"00956906000129e7"
}

# 响应样例:

{
    "dev_eui": "00956906000129e7",  //dev_eui id
    "status": 0, // 未在上下行可发送任务  1 正在上下行
    "items": [
        {
            "task_id": "45132erere234", // taskId
            "plan_id": "xxxxxxxxx",
            "dev_eui": "00956906000129e7",  //dev_eui id
            "f_port": 10, // 下发  固定格式 客户的水表固定
            "confirmed": true,  // 是否需要回复
            "data": "AAD+/miqqqqqqqpoCgAAAQIIAAACq/uJFg==" // base64  格式数
        },
        {
            "task_id": "45132erere231",
            "plan_id": "xxxxxxxxx",
            "dev_eui": "00956906000129e7",
            "f_port": 10,
            "confirmed": true,
            "data": "AAD+/miqqqqqqqpoCgAAARAAAAAEysF2Fg=="
        },
        {
            "task_id": "45132erere235",
            "plan_id": "xxxxxxxxx",
            "dev_eui": "00956906000129e7",
            "f_port": 10, 
            "confirmed": true,
            "data": "AAD+/miqqqqqqqpoCgAAAQAHAAAHfEGiFg=="
        },
        {
            "task_id": "45132erere230",
            "plan_id": "xxxxxxxxx",
            "dev_eui": "00956906000129e7",
            "f_port": 10,
            "confirmed": true,
            "data": "AAD+/miqqqqqqqpoCgAAAQsFAAAGxSTWFg=="
        }
    ]
}

# 删除ns缓存队列

# 请求方式:POST

# URL:https://api.lowaniot.com/openapi/lora/queue/delete

# 请求业务数据

参数名称 参数类型 是否必须 说明
dev_eui String dev_eui不为空时,删除指定设备缓存
dev_eui为空时,删除计划下所有设备的缓存
task_id String 任务id
plan_id String 计划id

# 响应内容

参数名称 参数类型 是否必须 说明
code Number 响应编码
msg String 响应信息
data JSONArray 响应数据
# data描述
参数名称 参数类型 是否必须 说明
dev_eui String 设备地址
task_id Number 是否正在上下行
plan_id String 计划id
flag bool 是否删除成功 true成功 false 失败

# 请求业务数据样例:

// 请求body  
{
    "dev_eui":"00956906000129e7", // 指定devEUI
    "task_id":"45132erere234", // taskId
    "plan_id":"xxxxxxxxxx"
}

# 响应样例:

{
    "dev_eui": "00956906000129e7", // 设备 dev_eui
    "task_id": "45132erere230", // 删除的任务id
    "plan_id":"xxxxxxxxxx",
    "flag": true // 是否删除成功 true成功  false 失败
}

# Java SDK Demo

Java SDK提供Demo,供您参考使用。单击查看Java SDK Demo (opens new window)