本文介绍SDK除物模型外的其他功能、用户可以根据需要自行选择实现与否
设备调用云方法
1.同步调用云服务
Request request = new Request();
Map<String, Object> params = new HashMap<>();
params.put("taskType", "lemo-demo@lemo.prog");
params.put("version", "2.0");
request.setParams(params);
try {
Response response = device.syncInvokeService("lemoStart", request, 10000);
} catch (DeviceException e) {
// TODO 异常处理
}
2.异步调用
Request request = new Request();
request.setSessionId("sessionId-12345");
Map<String, Object> params = new HashMap<>();
params.put("taskType", "lemo-demo@lemo.prog");
request.setParams(params);
device.asyncInvokeService("lemoStart", request, (response) -> {
System.out.println(response);
});
设备日志上报
device.logInfo("test","test log 1");
device.logWarn("test","test log 1");
device.logError("test","test log 1");
远程配置
远程配置功能暂未开放,有需要请联系@亦乐(u1960046)
远程配置可以用于更新设备的配置信息,包括设备的系统参数、网络参数或者本地策略等等。
device.deviceCOTA(new IConnectRrpcListener() {
@Override
public void onSubscribeSuccess(ARequest aRequest) {
}
@Override
public void onSubscribeFailed(ARequest aRequest, AError aError) {
}
@Override
public void onReceived(ARequest aRequest, IConnectRrpcHandle iConnectRrpcHandle) {
if (aRequest instanceof MqttRrpcRequest) {
String cotaData = new String((byte[]) ((MqttRrpcRequest) aRequest).payloadObj);
// 返回数据示例
/*{
"id": "123",
"version": "1.0",
"code": 200,
"data": {
"configId": "123dagdah",
"configSize": 1234565,
"sign": "123214adfadgadg",
"signMethod": "Sha256",
"url": "https://iotx-config.oss-cn-shanghai.aliyuncs.com/nopoll_0.4.4.tar.gz?Expires=1502955804&OSSAccessKeyId=XXXXXXXXXXXXXXXXXXXX&Signature=XfgJu7P6DWWejstKJgXJEH0qAKU%3D&security-token=CAISuQJ1q6Ft5B2yfSjIpK6MGsyN1Jx5jo6mVnfBglIPTvlvt5D50Tz2IHtIf3NpAusdsv03nWxT7v4flqFyTINVAEvYZJOPKGrGR0DzDbDasumZsJbo4f%2FMQBqEaXPS2MvVfJ%2BzLrf0ceusbFbpjzJ6xaCAGxypQ12iN%2B%2Fr6%2F5gdc9FcQSkL0B8ZrFsKxBltdUROFbIKP%2BpKWSKuGfLC1dysQcO1wEP4K%2BkkMqH8Uic3h%2Boy%2BgJt8H2PpHhd9NhXuV2WMzn2%2FdtJOiTknxR7ARasaBqhelc4zqA%2FPPlWgAKvkXba7aIoo01fV4jN5JXQfAU8KLO8tRjofHWmojNzBJAAPpYSSy3Rvr7m5efQrrybY1lLO6iZy%2BVio2VSZDxshI5Z3McKARWct06MWV9ABA2TTXXOi40BOxuq%2B3JGoABXC54TOlo7%2F1wTLTsCUqzzeIiXVOK8CfNOkfTucMGHkeYeCdFkm%2FkADhXAnrnGf5a4FbmKMQph2cKsr8y8UfWLC6IzvJsClXTnbJBMeuWIqo5zIynS1pm7gf%2F9N3hVc6%2BEeIk0xfl2tycsUpbL2FoaGk6BAF8hWSWYUXsv59d5Uk%3D",
"getType": "file"
}
}*/
}
}
@Override
public void onResponseSuccess(ARequest aRequest) {
}
@Override
public void onResponseFailed(ARequest aRequest, AError aError) {
}
});
期望属性
期望属性功能属于设备影子的功能之一,详情见阿里云设备影子
1.设备主动拉取期望属性
device.getExpectedProperty(new IConnectSendListener() {
@Override
public void onResponse(ARequest aRequest, AResponse aResponse) {
try {
if (aRequest instanceof MqttPublishRequest && aResponse != null) {
String dataStr = null;
if (aResponse.data instanceof byte[]) {
dataStr = new String((byte[]) aResponse.data, "UTF-8");
} else if (aResponse.data instanceof String) {
dataStr = (String) aResponse.data;
} else {
dataStr = String.valueOf(aResponse.data);
}
// 返回数据示例
// {"method":"reply","payload":{"status":"success","state":{"reported":{}},"metadata":{"reported":{}}},"timestamp":1547641855,"version":7,"clientToken":"null"}
ShadowResponse<String> response = JSONObject.parseObject(dataStr, new TypeReference<ShadowResponse<String>>() {
}.getType());
//属性设置操作,设置完成后上报属性
Map<String, ValueWrapper> propertyValueMap = new HashMap<>();
propertyValueMap.put("testp5", new ValueWrapper.StringValueWrapper("test"));
device.postProperty(propertyValueMap,null);
}
} catch (Exception e) {
//ALog.e(TAG, "update response parse exception.");
}
}
@Override
public void onFailure(ARequest aRequest, AError aError) {
}
});
2.监听期望属性变化
device.listenExpectedPropertyChange(new IShadowRRPC() {
@Override
public void onSubscribeSuccess(ARequest aRequest) {
System.out.println("onSubscribeSuccess");
}
@Override
public void onSubscribeFailed(ARequest aRequest, AError aError) {
System.out.println("onSubscribeFailed");
}
@Override
public void onReceived(ARequest aRequest, AResponse aResponse, IConnectRrpcHandle iConnectRrpcHandle) {
try {
if(aRequest != null) {
String dataStr = null;
if (aResponse.data instanceof byte[]) {
dataStr = new String((byte[]) aResponse.data, "UTF-8");
} else if (aResponse.data instanceof String) {
dataStr = (String) aResponse.data;
} else {
dataStr = String.valueOf(aResponse.data);
}
ShadowResponse<String> shadowResponse = JSONObject.parseObject(dataStr, new TypeReference<ShadowResponse<String>>() {
}.getType());
Integer version = 1;
if (shadowResponse != null && shadowResponse.version != null) {
version = Integer.valueOf(shadowResponse.version);
}
String shadowUpdate = "{" + "\"method\": \"update\"," + "\"state\": {" + "\"reported\": {" +
"\"color\": \"red\"" + ",\"mode\": \"1\"" + "}" + "}," + "\"version\": {ver}" + "}";
String data = shadowResponse.payload;
//{"metadata":{"desired":{"language":{"timestamp":1641536981}},"reported":{}},"state":{"desired":{"language":"cn-us"},"reported":{}}}
//属性设置操作,设置完成后上报属性
Map<String, ValueWrapper> propertyValueMap = new HashMap<>();
propertyValueMap.put("testp5", new ValueWrapper.StringValueWrapper("test"));
device.postProperty(propertyValueMap,null);
}
} catch (Exception e) {
}
}
@Override
public void onResponseSuccess(ARequest aRequest) {
}
@Override
public void onResponseFailed(ARequest aRequest, AError aError) {
}
});