本文介绍SDK除物模型外的其他功能、用户可以根据需要自行选择实现与否

设备调用云方法

1.同步调用云服务

  1. Request request = new Request();
  2. Map<String, Object> params = new HashMap<>();
  3. params.put("taskType", "lemo-demo@lemo.prog");
  4. params.put("version", "2.0");
  5. request.setParams(params);
  6. try {
  7. Response response = device.syncInvokeService("lemoStart", request, 10000);
  8. } catch (DeviceException e) {
  9. // TODO 异常处理
  10. }

2.异步调用

  1. Request request = new Request();
  2. request.setSessionId("sessionId-12345");
  3. Map<String, Object> params = new HashMap<>();
  4. params.put("taskType", "lemo-demo@lemo.prog");
  5. request.setParams(params);
  6. device.asyncInvokeService("lemoStart", request, (response) -> {
  7. System.out.println(response);
  8. });

设备日志上报

  1. device.logInfo("test","test log 1");
  2. device.logWarn("test","test log 1");
  3. device.logError("test","test log 1");

远程配置

远程配置功能暂未开放,有需要请联系@亦乐(u1960046)
远程配置可以用于更新设备的配置信息,包括设备的系统参数、网络参数或者本地策略等等。

  1. device.deviceCOTA(new IConnectRrpcListener() {
  2. @Override
  3. public void onSubscribeSuccess(ARequest aRequest) {
  4. }
  5. @Override
  6. public void onSubscribeFailed(ARequest aRequest, AError aError) {
  7. }
  8. @Override
  9. public void onReceived(ARequest aRequest, IConnectRrpcHandle iConnectRrpcHandle) {
  10. if (aRequest instanceof MqttRrpcRequest) {
  11. String cotaData = new String((byte[]) ((MqttRrpcRequest) aRequest).payloadObj);
  12. // 返回数据示例
  13. /*{
  14. "id": "123",
  15. "version": "1.0",
  16. "code": 200,
  17. "data": {
  18. "configId": "123dagdah",
  19. "configSize": 1234565,
  20. "sign": "123214adfadgadg",
  21. "signMethod": "Sha256",
  22. "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",
  23. "getType": "file"
  24. }
  25. }*/
  26. }
  27. }
  28. @Override
  29. public void onResponseSuccess(ARequest aRequest) {
  30. }
  31. @Override
  32. public void onResponseFailed(ARequest aRequest, AError aError) {
  33. }
  34. });

期望属性

期望属性功能属于设备影子的功能之一,详情见阿里云设备影子
1.设备主动拉取期望属性

  1. device.getExpectedProperty(new IConnectSendListener() {
  2. @Override
  3. public void onResponse(ARequest aRequest, AResponse aResponse) {
  4. try {
  5. if (aRequest instanceof MqttPublishRequest && aResponse != null) {
  6. String dataStr = null;
  7. if (aResponse.data instanceof byte[]) {
  8. dataStr = new String((byte[]) aResponse.data, "UTF-8");
  9. } else if (aResponse.data instanceof String) {
  10. dataStr = (String) aResponse.data;
  11. } else {
  12. dataStr = String.valueOf(aResponse.data);
  13. }
  14. // 返回数据示例
  15. // {"method":"reply","payload":{"status":"success","state":{"reported":{}},"metadata":{"reported":{}}},"timestamp":1547641855,"version":7,"clientToken":"null"}
  16. ShadowResponse<String> response = JSONObject.parseObject(dataStr, new TypeReference<ShadowResponse<String>>() {
  17. }.getType());
  18. //属性设置操作,设置完成后上报属性
  19. Map<String, ValueWrapper> propertyValueMap = new HashMap<>();
  20. propertyValueMap.put("testp5", new ValueWrapper.StringValueWrapper("test"));
  21. device.postProperty(propertyValueMap,null);
  22. }
  23. } catch (Exception e) {
  24. //ALog.e(TAG, "update response parse exception.");
  25. }
  26. }
  27. @Override
  28. public void onFailure(ARequest aRequest, AError aError) {
  29. }
  30. });

2.监听期望属性变化

  1. device.listenExpectedPropertyChange(new IShadowRRPC() {
  2. @Override
  3. public void onSubscribeSuccess(ARequest aRequest) {
  4. System.out.println("onSubscribeSuccess");
  5. }
  6. @Override
  7. public void onSubscribeFailed(ARequest aRequest, AError aError) {
  8. System.out.println("onSubscribeFailed");
  9. }
  10. @Override
  11. public void onReceived(ARequest aRequest, AResponse aResponse, IConnectRrpcHandle iConnectRrpcHandle) {
  12. try {
  13. if(aRequest != null) {
  14. String dataStr = null;
  15. if (aResponse.data instanceof byte[]) {
  16. dataStr = new String((byte[]) aResponse.data, "UTF-8");
  17. } else if (aResponse.data instanceof String) {
  18. dataStr = (String) aResponse.data;
  19. } else {
  20. dataStr = String.valueOf(aResponse.data);
  21. }
  22. ShadowResponse<String> shadowResponse = JSONObject.parseObject(dataStr, new TypeReference<ShadowResponse<String>>() {
  23. }.getType());
  24. Integer version = 1;
  25. if (shadowResponse != null && shadowResponse.version != null) {
  26. version = Integer.valueOf(shadowResponse.version);
  27. }
  28. String shadowUpdate = "{" + "\"method\": \"update\"," + "\"state\": {" + "\"reported\": {" +
  29. "\"color\": \"red\"" + ",\"mode\": \"1\"" + "}" + "}," + "\"version\": {ver}" + "}";
  30. String data = shadowResponse.payload;
  31. //{"metadata":{"desired":{"language":{"timestamp":1641536981}},"reported":{}},"state":{"desired":{"language":"cn-us"},"reported":{}}}
  32. //属性设置操作,设置完成后上报属性
  33. Map<String, ValueWrapper> propertyValueMap = new HashMap<>();
  34. propertyValueMap.put("testp5", new ValueWrapper.StringValueWrapper("test"));
  35. device.postProperty(propertyValueMap,null);
  36. }
  37. } catch (Exception e) {
  38. }
  39. }
  40. @Override
  41. public void onResponseSuccess(ARequest aRequest) {
  42. }
  43. @Override
  44. public void onResponseFailed(ARequest aRequest, AError aError) {
  45. }
  46. });