介绍

提供接入菜鸟IoT平台体系的java版本的设备sdk,设备sdk具备如下能力:

  1. 支持菜鸟IoT平台注册软件自动注册能力;
  2. 支持根据不同接入点配置构建设备实例,支持自行指定接入点;
  3. 根据设备实例,可进行设备方法注册、设备事件上报、调用云端方法、获取设备影子属性等操作;

    依赖引入

    1. <dependency>
    2. <groupId>com.cainiao.iot</groupId>
    3. <artifactId>loginx-device-sdk</artifactId>
    4. <version>3.0.2</version>
    5. </dependency>

    NOTE: 如果是提供jar包的方式需要手动引入。

使用样例

设备注册

通过注册链接注册设备并获取设备接入信息

DeviceRegister.Registration registration = new DeviceRegister.Registration();
registration.setDeviceType("LEMO");
registration.setDeviceName("b0:f8:93:8f:7f:58");
DeviceRegister register = new DeviceRegister();
DevicePolicy policy = register.registerByUrl("https://pre-zb-devops.loginx.cainiao.com/p/xxxx?expire=1632584734984", registration);

通过自发现注册并获取设备接入信息

DeviceRegister.Registration registration = new DeviceRegister.Registration();
registration.setDeviceType("LEMO");
registration.setDeviceName("b0:f8:93:8f:7f:58");
DeviceRegister register = new DeviceRegister();
DevicePolicy policy = register.registerByMdns(registration, 3000);

NOTE: 在节点不变以及接入点不变的时候,设备注册信息可持久化到设备,无需每次重新注册;

根据产品秘钥进行批量注册

DeviceRegister register = new DeviceRegister();
DeviceRegister.Registration registration = new DeviceRegister.Registration();
registration.setDeviceName(deviceName);
registration.setDeviceType(deviceType);
registration.setProductSecret(productSecret);
//endpoint为devops接入地址
String endpoint = "xxxxxx";
DevicePolicy devicePolicy = register.registerByProduct(endpoint, registration);

基于设备政策构建设备代理

DevicePolicy policy = new DevicePolicy();

// 基于设备政策获取设备对象
Device device = new Device(policy);

// 设备初始化 与总线建立连接
device.init();

// 利用设备对象做相关设备操作

// 关闭设备对象
device.destroy();

NOTE: 一个设备政策与总线同一时刻只能建立一个链接,需要使用者自行保证。如果存在冲突,会导致设备互踢。

设备调用云服务

同步调用云服务

Request request = new Request();
request.setRequestId("requestId-12345");
request.setSessionId("sessionId-12345");
Map<String, Object> params = new HashMap<>();
params.put("taskType", "welcome");
params.put("version", "2.0");
request.setParams(params);
try {
    Response response = device.syncInvokeService("lemoStart", request);
} catch (DeviceException e) {
    // TODO 异常处理
}

异步调用云服务

Request request = new Request();
request.setRequestId("requestId-12345");
request.setSessionId("sessionId-12345");
Map<String, Object> params = new HashMap<>();
params.put("taskType", "welcome");
params.put("version", "2.0");
request.setParams(params);
System.out.println("=======lemo start==========");

try {
  // 异步回调
  // 注意:最长支持24小时的回调等待
  device.asyncInvokeService("lemoStart", request, (response) -> {
    System.out.println(response);
  });
} catch (DeviceException e) {
    // TODO 异常处理
}

注册设备方法

try {
    device.registerMethod("pushMessage", (request) -> {
        System.out.println("Receive params:" + request);

        Response response = new Response();
        response.setCode(200);
        response.setRequestId(request.getRequestId());
        Map<String, Object> data = new HashMap<>();
        data.put("success", true);
        response.setData(data);
        return response;
    });
} catch (DeviceException e) {
    // TODO 异常处理
}

设备属性变更上报

PropertyChanged propertyChanged = new PropertyChanged();
Map<String, PropertyChanged.PropertyValue> propertyValueMap = new HashMap<>();
propertyValueMap.put("key1", new PropertyChanged.PropertyValue("this is a value", System.currentTimeMillis()));

propertyChanged.setPropertyValues(propertyValueMap);
try {
        device.postProperty(propertyChanged);
} catch (DeviceException e) {
    // TODO 异常处理
}

设备事件上报

Event event = new Event();
event.setName("printerStatus");
event.setRequestId("request1234");
Map<String, Object> payload = new HashMap<>();
payload.put("key1", "hello world");
event.setPayload(params);
try {
    device.postEvent(event);
} catch (DeviceException e) {
    // TODO 异常处理
}

获取设备属性

 Map<String, Object> properties = device.getProperties();