阿里云物联网平台客户端
阿里云物联网平台提供了一站式的设备接入、设备管理、监控运维、数据流转、数据存储、数据备份等服务,数据按照实例维度隔离,可根据业务规模灵活提升规格,具备高并发、高可用、低成本、易运维的特性,是企业设备上云的首选,请参考企业物联网平台_设备接入_设备管理_监控运维_数据服务-阿里云 (aliyun.com)
Java包
tijos.framework.networkcenter.alibaba
阿里云客户端 - AliYunIoT类
AliYunIoT类中包含了阿里云客户端相关的操作,支持阿里云提供的各种设备能力, 包括物模型、子设备管理、引导服务、动态注册等等。 阿里云通过使用属性、事件、服务构成的物模型描述设备,在设备接入前需要先在阿里云物联网平台中建立相应的产品、物模型,以及对应的设备等等信息, 并获得产品和设备的名称及认证信息, 具体请参考相关的帮助文档。
基础方法
方法 | 说明 |
---|---|
static AliYunIoT getInstance() | 获得AliYunIot实例 |
void start(String serverUrl, String productKey, String deviceName, String deviceSecret,IDataModelEventListener listener) | 启动并连接阿里云物联网平台 |
void stop() | 断开连接并释放 |
static String dynamicRegister(String productKey, String productSecret, String deviceName) | 一型一密设备注册 |
static String getUrlFromBootstrap(String productKey, String deviceName) | 设备分发 |
物模型相关方法
方法 | 说明 |
---|---|
int propertyPost(String params) | 设备属性上报, params为属性和值的JSON格式数据 |
int eventPost(String eventId, String params) | 设备事件上报 eventId-事件ID params对应的JSON格式属性值 |
void propertySetReply(long msgId, int code, byte[] data) | 对于云端属性控制onPropertySetArrived指令回复,code=200 成功 |
void asynServiceReply(long msgId, String serviceId, int code, byte[] data) | 对于云端异步服务调用onAsyncServiceInvokeArrived指令回复,code=200 成功 |
void syncServiceReply(long msgId, String serviceId, String rrpcId, int code, byte[] data) | 对于云端同步服务调用onSyncServiceInvokeArrived指令回复,code=200 成功 |
IDataModelEventListener 物模型事件监听
IDataModelEventListener 提供了物模型相关事件处理接口, 不应在事件中进行长时间的处理从而阻塞其它事件 | 方法 | 说明 | | ---------------------------------------- | ---------- | | void onGenericReplyArrived(String product, String deviceName, long msgId, int code, String message, byte [] data) | 云端回复,如属性、事件上报等, code=200为成功 | | void onPropertySetArrived(String product, String deviceName, long msgId, String params) | 收到云端控制指令 | | void onAsyncServiceInvokeArrived(String product, String deviceName, long msgId, String serviceId, String params) | 收到云端异步服务调用事件 | | void onSyncServiceInvokeArrived(String product, String deviceName, long msgId, String rrpdId, String serviceId, String params) | 收到云端同步服务调用事件 |
子设备管理相关方法
方法 | 说明 |
---|---|
void getSubDevices() | 获取子设备列表, 云端通过onTopoGetReply事件返回 |
void addSubDevices(AliLinkSubDevice[] devices) | 添加子设备,云端通过onTopoAddReply事件返回 |
void deleteSubDevices(AliLinkSubDevice[] devices) | 删除子设备,云端通过onTopoDeleteReply事件返回 |
void loginSubDevices(AliLinkSubDevice[] devices) | 子设备上线,云端通过onTopoDeleteReply事件返回 |
logoffSubDevices(AliLinkSubDevice[] devices) | 子设备离线,云端通过onTopoDeleteReply事件返回 |
void registerSubDevices(AliLinkSubDevice[] devices) | 子设备注册,云端通过onRegisterReply事件返回 |
使用说明
在开发之间请先在阿里云物联网平台上建立相应的产品及物模型
调用流程如下
...
// 设备密钥 由平台生成
String ProductKey = "a1QJjmusiPI";
String DeviceName = "gwdemo1";
String DeviceSecret = "71fab7d64714233e8757181ab6c9e28b";
// 启动并连接云平台
aliiot.start(serverUrl, ProductKey, DeviceName, DeviceSecret, new AliListener());
// 物模型中的属性上报
JSONObject properties = new JSONObject();
properties.put("LightStatus", 0);
int mid = aliiot.propertyPost(properties.toString());
System.out.println("mid " + mid);
// 物模型中的事件上报
JSONObject errorEvent = new JSONObject();
errorEvent.put("ErrorCode", 0);
String serviceId = "Error";
mid = aliiot.eventPost(serviceId, errorEvent.toString());
System.out.println("mid " + mid);
...
事件回调,物模型相关事件通过IDataModelEventListener事件监听器回调进行处理
class AliListener implements IDataModelEventListener {
@Override
public void onGenericReplyArrived(String product, String deviceName, long msgId, int code, String message,
byte[] data) {
System.out.println("onGenericReplyArrived " + product + " " + deviceName + " mid " + msgId + " code " + code
+ " message " + message);
}
//收到云端属性控制命令
@Override
public void onPropertySetArrived(String product, String deviceName, long msgId, String params) {
System.out.println("onPropertySetArrived ");
// 控制指令解析
JSONObject commands = new JSONObject(params);
// 命令执行
//
// 控制指令回复
JSONObject reply = new JSONObject();
try {
AliYunIoT.getInstance().propertySetReply(msgId, 200, reply.toString());
} catch (IOException e) {
e.printStackTrace();
}
}
//收到云端异步服务调用命令
@Override
public void onAsyncServiceInvokeArrived(String product, String deviceName, long msgId, String serviceId,
String params) {
System.out.println("onAsyncServiceInvokeArrived ");
// 解析服务参数
JSONObject parameters = new JSONObject(params);
// 执行服务
// 返回结果
int code = 200; // 200 - 成功
JSONObject reply = new JSONObject();
try {
AliYunIoT.getInstance().asynServiceReply(msgId, serviceId, code, reply.toString());
} catch (IOException e) {
e.printStackTrace();
}
}
//收到云端同步服务调用命令
@Override
public void onSyncServiceInvokeArrived(String product, String deviceName, long msgId, String rrpcId,
String serviceId, String params) {
System.out.println("onSyncServiceInvokeArrived ");
// 解析服务参数
JSONObject parameters = new JSONObject(params);
// 执行服务
// 返回结果
int code = 200; // 200 - 成功
JSONObject reply = new JSONObject();
try {
AliYunIoT.getInstance().syncServiceReply(msgId, serviceId, rrpcId, code, reply.toString());
} catch (IOException e) {
e.printStackTrace();
}
}
}