本文介绍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() {@Overridepublic void onSubscribeSuccess(ARequest aRequest) {}@Overridepublic void onSubscribeFailed(ARequest aRequest, AError aError) {}@Overridepublic 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"}}*/}}@Overridepublic void onResponseSuccess(ARequest aRequest) {}@Overridepublic void onResponseFailed(ARequest aRequest, AError aError) {}});
期望属性
期望属性功能属于设备影子的功能之一,详情见阿里云设备影子
1.设备主动拉取期望属性
device.getExpectedProperty(new IConnectSendListener() {@Overridepublic 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.");}}@Overridepublic void onFailure(ARequest aRequest, AError aError) {}});
2.监听期望属性变化
device.listenExpectedPropertyChange(new IShadowRRPC() {@Overridepublic void onSubscribeSuccess(ARequest aRequest) {System.out.println("onSubscribeSuccess");}@Overridepublic void onSubscribeFailed(ARequest aRequest, AError aError) {System.out.println("onSubscribeFailed");}@Overridepublic 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) {}}@Overridepublic void onResponseSuccess(ARequest aRequest) {}@Overridepublic void onResponseFailed(ARequest aRequest, AError aError) {}});
