介绍
提供接入菜鸟IoT平台体系的java版本的设备sdk,设备sdk具备如下能力:
- 支持菜鸟IoT平台注册软件自动注册能力;
- 支持根据不同接入点配置构建设备实例,支持自行指定接入点;
- 根据设备实例,可进行设备方法注册、设备事件上报、调用云端方法、获取设备影子属性等操作;
依赖引入
<dependency>
<groupId>com.cainiao.iot</groupId>
<artifactId>loginx-device-sdk</artifactId>
<version>3.0.2</version>
</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();