Commit 4a6e0c7aae3c305c5332c520d0447ebd697c805c

Authored by nickAS21
Committed by GitHub
1 parent 2df1177e

Lwm2m fix bug 19 (#4422)

* lwm2m: back: Write Attributes - start

* lwm2m: front: fis bug disable instances

* lwm2m: transport: attr/discavery start

* lwm2m: transport: attributeLwm2m after update profile

* lwm2m: transport: attributeLwm2m after update profile (no delete attribute)

* Lwm2m: back: test

* Lwm2m: back: test2

* Lwm2m: back: test3

* Lwm2m: transport fix bug Write attribute through the shared attribute does not work for Object 19
... ... @@ -362,14 +362,6 @@ public class LwM2mTransportHandler {
362 362 }
363 363 }
364 364
365   - public static Integer validateObjectIdFromKey(String key) {
366   - try {
367   - return Integer.parseInt(key.split(LWM2M_SEPARATOR_PATH)[1].split(LWM2M_SEPARATOR_KEY)[0]);
368   - } catch (Exception e) {
369   - return null;
370   - }
371   - }
372   -
373 365 public static String validateObjectVerFromKey(String key) {
374 366 try {
375 367 return (key.split(LWM2M_SEPARATOR_PATH)[1].split(LWM2M_SEPARATOR_KEY)[1]);
... ...
... ... @@ -120,7 +120,7 @@ public class LwM2mTransportRequest {
120 120 DownlinkRequest request = null;
121 121 ContentFormat contentFormat = contentFormatParam != null ? ContentFormat.fromName(contentFormatParam.toUpperCase()) : null;
122 122 LwM2mClient lwM2MClient = lwM2mClientContext.getLwM2mClientWithReg(registration, null);
123   - ResourceModel resource = lwM2MClient.getResourceModel(targetIdVer);
  123 + ResourceModel resource = null;
124 124 timeoutInMs = timeoutInMs > 0 ? timeoutInMs : DEFAULT_TIMEOUT;
125 125 switch (typeOper) {
126 126 case GET_TYPE_OPER_READ:
... ... @@ -142,6 +142,7 @@ public class LwM2mTransportRequest {
142 142 request = new CancelObservationRequest(observation);
143 143 break;
144 144 case POST_TYPE_OPER_EXECUTE:
  145 + resource = lwM2MClient.getResourceModel(targetIdVer);
145 146 if (params != null && resource != null && !resource.multiple) {
146 147 request = new ExecuteRequest(target, (String) this.converter.convertValue(params, resource.type, ResourceModel.Type.STRING, resultIds));
147 148 } else {
... ... @@ -150,6 +151,7 @@ public class LwM2mTransportRequest {
150 151 break;
151 152 case POST_TYPE_OPER_WRITE_REPLACE:
152 153 // Request to write a <b>String Single-Instance Resource</b> using the TLV content format.
  154 + resource = lwM2MClient.getResourceModel(targetIdVer);
153 155 if (resource != null && contentFormat != null) {
154 156 // if (contentFormat.equals(ContentFormat.TLV) && !resource.multiple) {
155 157 if (contentFormat.equals(ContentFormat.TLV)) {
... ... @@ -171,7 +173,7 @@ public class LwM2mTransportRequest {
171 173 }
172 174 break;
173 175 case PUT_TYPE_OPER_WRITE_ATTRIBUTES:
174   - request = createWriteAttributeRequest (target, params);
  176 + request = createWriteAttributeRequest(target, params);
175 177 break;
176 178 }
177 179
... ... @@ -207,12 +209,16 @@ public class LwM2mTransportRequest {
207 209 if (CoAP.ResponseCode.isSuccess(((Response) response.getCoapResponse()).getCode())) {
208 210 this.handleResponse(registration, request.getPath().toString(), response, request);
209 211 if (request instanceof WriteRequest && ((WriteRequest) request).isReplaceRequest()) {
  212 + LwM2mNode node = ((WriteRequest) request).getNode();
  213 + Object value = this.converter.convertValue(((LwM2mSingleResource) node).getValue(),
  214 + ((LwM2mSingleResource) node).getType(), ResourceModel.Type.STRING, request.getPath());
210 215 String msg = String.format("%s: sendRequest Replace: CoapCde - %s Lwm2m code - %d name - %s Resource path - %s value - %s SendRequest to Client",
211   - LOG_LW2M_INFO, ((Response) response.getCoapResponse()).getCode(), response.getCode().getCode(), response.getCode().getName(), request.getPath().toString(),
212   - ((LwM2mSingleResource) ((WriteRequest) request).getNode()).getValue().toString());
  216 + LOG_LW2M_INFO, ((Response) response.getCoapResponse()).getCode(), response.getCode().getCode(),
  217 + response.getCode().getName(), request.getPath().toString(), value);
213 218 serviceImpl.sendLogsToThingsboard(msg, registration);
214   - log.info("[{}] [{}] - [{}] [{}] Update SendRequest[{}]", registration.getEndpoint(), ((Response) response.getCoapResponse()).getCode(), response.getCode(), request.getPath().toString(),
215   - ((LwM2mSingleResource) ((WriteRequest) request).getNode()).getValue());
  219 + log.debug("[{}] [{}] - [{}] [{}] Update SendRequest[{}]", registration.getEndpoint(),
  220 + ((Response) response.getCoapResponse()).getCode(), response.getCode(),
  221 + request.getPath().toString(), value);
216 222 }
217 223 } else {
218 224 String msg = String.format("%s: sendRequest: CoapCode - %s Lwm2m code - %d name - %s Resource path - %s SendRequest to Client", LOG_LW2M_ERROR,
... ...
... ... @@ -95,7 +95,6 @@ import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandle
95 95 import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandler.convertToIdVerFromObjectId;
96 96 import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandler.convertToObjectIdFromIdVer;
97 97 import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandler.getAckCallback;
98   -import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandler.validateObjectIdFromKey;
99 98 import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandler.validateObjectVerFromKey;
100 99
101 100 @Slf4j
... ... @@ -515,9 +514,10 @@ public class LwM2mTransportServiceImpl implements LwM2mTransportService {
515 514 null, null, this.lwM2mTransportContextServer.getLwM2MTransportConfigServer().getTimeout()));
516 515 }
517 516 // #1
  517 + this.initReadAttrTelemetryObserveToClient(registration, lwM2MClient, GET_TYPE_OPER_READ, clientObjects);
518 518 this.initReadAttrTelemetryObserveToClient(registration, lwM2MClient, GET_TYPE_OPER_OBSERVE, clientObjects);
519 519 this.initReadAttrTelemetryObserveToClient(registration, lwM2MClient, PUT_TYPE_OPER_WRITE_ATTRIBUTES, clientObjects);
520   - this.initReadAttrTelemetryObserveToClient(registration, lwM2MClient, GET_TYPE_OPER_DISCOVER, clientObjects);
  520 +// this.initReadAttrTelemetryObserveToClient(registration, lwM2MClient, GET_TYPE_OPER_DISCOVER, clientObjects);
521 521 }
522 522 }
523 523
... ... @@ -748,9 +748,7 @@ public class LwM2mTransportServiceImpl implements LwM2mTransportService {
748 748 if (resName != null && !resName.isEmpty()) {
749 749 try {
750 750 String resValue = this.getResourceValueToString(lwM2MClient, path);
751   - if (resValue != null) {
752   - parameters.addProperty(resName, resValue);
753   - }
  751 + parameters.addProperty(resName, resValue);
754 752 } catch (Exception e) {
755 753 log.error("Failed to add parameters.", e);
756 754 }
... ... @@ -907,10 +905,14 @@ public class LwM2mTransportServiceImpl implements LwM2mTransportService {
907 905 // send Request observe to Client
908 906 registrationIds.forEach(registrationId -> {
909 907 Registration registration = lwM2mClientContext.getRegistration(registrationId);
910   - this.readResourceValueObserve(registration, postObserveAnalyzer.getPathPostParametersAdd(), GET_TYPE_OPER_OBSERVE);
  908 + if (postObserveAnalyzer.getPathPostParametersAdd().size() > 0) {
  909 + this.readResourceValueObserve(registration, postObserveAnalyzer.getPathPostParametersAdd(), GET_TYPE_OPER_OBSERVE);
  910 + }
911 911 // 5.3 del
912 912 // send Request cancel observe to Client
913   - this.cancelObserveIsValue(registration, postObserveAnalyzer.getPathPostParametersDel());
  913 + if (postObserveAnalyzer.getPathPostParametersDel().size() > 0) {
  914 + this.cancelObserveIsValue(registration, postObserveAnalyzer.getPathPostParametersDel());
  915 + }
914 916 });
915 917 }
916 918 }
... ... @@ -1253,11 +1255,11 @@ public class LwM2mTransportServiceImpl implements LwM2mTransportService {
1253 1255 return new ArrayList<>(namesIsWritable);
1254 1256 }
1255 1257
1256   - private boolean validateResourceInModel(LwM2mClient lwM2mClient, String pathKey, boolean isWritable) {
1257   - ResourceModel resourceModel = lwM2mClient.getResourceModel(pathKey);
1258   - Integer objectId = validateObjectIdFromKey(pathKey);
1259   - String objectVer = validateObjectVerFromKey(pathKey);
1260   - return resourceModel != null && (isWritable ?
  1258 + private boolean validateResourceInModel(LwM2mClient lwM2mClient, String pathIdVer, boolean isWritableNotOptional) {
  1259 + ResourceModel resourceModel = lwM2mClient.getResourceModel(pathIdVer);
  1260 + Integer objectId = new LwM2mPath(convertToObjectIdFromIdVer(pathIdVer)).getObjectId();
  1261 + String objectVer = validateObjectVerFromKey(pathIdVer);
  1262 + return resourceModel != null && (isWritableNotOptional ?
1261 1263 objectId != null && objectVer != null && objectVer.equals(lwM2mClient.getRegistration().getSupportedVersion(objectId)) && resourceModel.operations.isWritable() :
1262 1264 objectId != null && objectVer != null && objectVer.equals(lwM2mClient.getRegistration().getSupportedVersion(objectId)));
1263 1265 }
... ...