Commit 4a6e0c7aae3c305c5332c520d0447ebd697c805c
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
Showing
3 changed files
with
26 additions
and
26 deletions
@@ -362,14 +362,6 @@ public class LwM2mTransportHandler { | @@ -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 | public static String validateObjectVerFromKey(String key) { | 365 | public static String validateObjectVerFromKey(String key) { |
374 | try { | 366 | try { |
375 | return (key.split(LWM2M_SEPARATOR_PATH)[1].split(LWM2M_SEPARATOR_KEY)[1]); | 367 | return (key.split(LWM2M_SEPARATOR_PATH)[1].split(LWM2M_SEPARATOR_KEY)[1]); |
@@ -120,7 +120,7 @@ public class LwM2mTransportRequest { | @@ -120,7 +120,7 @@ public class LwM2mTransportRequest { | ||
120 | DownlinkRequest request = null; | 120 | DownlinkRequest request = null; |
121 | ContentFormat contentFormat = contentFormatParam != null ? ContentFormat.fromName(contentFormatParam.toUpperCase()) : null; | 121 | ContentFormat contentFormat = contentFormatParam != null ? ContentFormat.fromName(contentFormatParam.toUpperCase()) : null; |
122 | LwM2mClient lwM2MClient = lwM2mClientContext.getLwM2mClientWithReg(registration, null); | 122 | LwM2mClient lwM2MClient = lwM2mClientContext.getLwM2mClientWithReg(registration, null); |
123 | - ResourceModel resource = lwM2MClient.getResourceModel(targetIdVer); | 123 | + ResourceModel resource = null; |
124 | timeoutInMs = timeoutInMs > 0 ? timeoutInMs : DEFAULT_TIMEOUT; | 124 | timeoutInMs = timeoutInMs > 0 ? timeoutInMs : DEFAULT_TIMEOUT; |
125 | switch (typeOper) { | 125 | switch (typeOper) { |
126 | case GET_TYPE_OPER_READ: | 126 | case GET_TYPE_OPER_READ: |
@@ -142,6 +142,7 @@ public class LwM2mTransportRequest { | @@ -142,6 +142,7 @@ public class LwM2mTransportRequest { | ||
142 | request = new CancelObservationRequest(observation); | 142 | request = new CancelObservationRequest(observation); |
143 | break; | 143 | break; |
144 | case POST_TYPE_OPER_EXECUTE: | 144 | case POST_TYPE_OPER_EXECUTE: |
145 | + resource = lwM2MClient.getResourceModel(targetIdVer); | ||
145 | if (params != null && resource != null && !resource.multiple) { | 146 | if (params != null && resource != null && !resource.multiple) { |
146 | request = new ExecuteRequest(target, (String) this.converter.convertValue(params, resource.type, ResourceModel.Type.STRING, resultIds)); | 147 | request = new ExecuteRequest(target, (String) this.converter.convertValue(params, resource.type, ResourceModel.Type.STRING, resultIds)); |
147 | } else { | 148 | } else { |
@@ -150,6 +151,7 @@ public class LwM2mTransportRequest { | @@ -150,6 +151,7 @@ public class LwM2mTransportRequest { | ||
150 | break; | 151 | break; |
151 | case POST_TYPE_OPER_WRITE_REPLACE: | 152 | case POST_TYPE_OPER_WRITE_REPLACE: |
152 | // Request to write a <b>String Single-Instance Resource</b> using the TLV content format. | 153 | // Request to write a <b>String Single-Instance Resource</b> using the TLV content format. |
154 | + resource = lwM2MClient.getResourceModel(targetIdVer); | ||
153 | if (resource != null && contentFormat != null) { | 155 | if (resource != null && contentFormat != null) { |
154 | // if (contentFormat.equals(ContentFormat.TLV) && !resource.multiple) { | 156 | // if (contentFormat.equals(ContentFormat.TLV) && !resource.multiple) { |
155 | if (contentFormat.equals(ContentFormat.TLV)) { | 157 | if (contentFormat.equals(ContentFormat.TLV)) { |
@@ -171,7 +173,7 @@ public class LwM2mTransportRequest { | @@ -171,7 +173,7 @@ public class LwM2mTransportRequest { | ||
171 | } | 173 | } |
172 | break; | 174 | break; |
173 | case PUT_TYPE_OPER_WRITE_ATTRIBUTES: | 175 | case PUT_TYPE_OPER_WRITE_ATTRIBUTES: |
174 | - request = createWriteAttributeRequest (target, params); | 176 | + request = createWriteAttributeRequest(target, params); |
175 | break; | 177 | break; |
176 | } | 178 | } |
177 | 179 | ||
@@ -207,12 +209,16 @@ public class LwM2mTransportRequest { | @@ -207,12 +209,16 @@ public class LwM2mTransportRequest { | ||
207 | if (CoAP.ResponseCode.isSuccess(((Response) response.getCoapResponse()).getCode())) { | 209 | if (CoAP.ResponseCode.isSuccess(((Response) response.getCoapResponse()).getCode())) { |
208 | this.handleResponse(registration, request.getPath().toString(), response, request); | 210 | this.handleResponse(registration, request.getPath().toString(), response, request); |
209 | if (request instanceof WriteRequest && ((WriteRequest) request).isReplaceRequest()) { | 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 | String msg = String.format("%s: sendRequest Replace: CoapCde - %s Lwm2m code - %d name - %s Resource path - %s value - %s SendRequest to Client", | 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 | serviceImpl.sendLogsToThingsboard(msg, registration); | 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 | } else { | 223 | } else { |
218 | String msg = String.format("%s: sendRequest: CoapCode - %s Lwm2m code - %d name - %s Resource path - %s SendRequest to Client", LOG_LW2M_ERROR, | 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,7 +95,6 @@ import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandle | ||
95 | import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandler.convertToIdVerFromObjectId; | 95 | import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandler.convertToIdVerFromObjectId; |
96 | import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandler.convertToObjectIdFromIdVer; | 96 | import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandler.convertToObjectIdFromIdVer; |
97 | import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandler.getAckCallback; | 97 | import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandler.getAckCallback; |
98 | -import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandler.validateObjectIdFromKey; | ||
99 | import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandler.validateObjectVerFromKey; | 98 | import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandler.validateObjectVerFromKey; |
100 | 99 | ||
101 | @Slf4j | 100 | @Slf4j |
@@ -515,9 +514,10 @@ public class LwM2mTransportServiceImpl implements LwM2mTransportService { | @@ -515,9 +514,10 @@ public class LwM2mTransportServiceImpl implements LwM2mTransportService { | ||
515 | null, null, this.lwM2mTransportContextServer.getLwM2MTransportConfigServer().getTimeout())); | 514 | null, null, this.lwM2mTransportContextServer.getLwM2MTransportConfigServer().getTimeout())); |
516 | } | 515 | } |
517 | // #1 | 516 | // #1 |
517 | + this.initReadAttrTelemetryObserveToClient(registration, lwM2MClient, GET_TYPE_OPER_READ, clientObjects); | ||
518 | this.initReadAttrTelemetryObserveToClient(registration, lwM2MClient, GET_TYPE_OPER_OBSERVE, clientObjects); | 518 | this.initReadAttrTelemetryObserveToClient(registration, lwM2MClient, GET_TYPE_OPER_OBSERVE, clientObjects); |
519 | this.initReadAttrTelemetryObserveToClient(registration, lwM2MClient, PUT_TYPE_OPER_WRITE_ATTRIBUTES, clientObjects); | 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,9 +748,7 @@ public class LwM2mTransportServiceImpl implements LwM2mTransportService { | ||
748 | if (resName != null && !resName.isEmpty()) { | 748 | if (resName != null && !resName.isEmpty()) { |
749 | try { | 749 | try { |
750 | String resValue = this.getResourceValueToString(lwM2MClient, path); | 750 | String resValue = this.getResourceValueToString(lwM2MClient, path); |
751 | - if (resValue != null) { | ||
752 | - parameters.addProperty(resName, resValue); | ||
753 | - } | 751 | + parameters.addProperty(resName, resValue); |
754 | } catch (Exception e) { | 752 | } catch (Exception e) { |
755 | log.error("Failed to add parameters.", e); | 753 | log.error("Failed to add parameters.", e); |
756 | } | 754 | } |
@@ -907,10 +905,14 @@ public class LwM2mTransportServiceImpl implements LwM2mTransportService { | @@ -907,10 +905,14 @@ public class LwM2mTransportServiceImpl implements LwM2mTransportService { | ||
907 | // send Request observe to Client | 905 | // send Request observe to Client |
908 | registrationIds.forEach(registrationId -> { | 906 | registrationIds.forEach(registrationId -> { |
909 | Registration registration = lwM2mClientContext.getRegistration(registrationId); | 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 | // 5.3 del | 911 | // 5.3 del |
912 | // send Request cancel observe to Client | 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,11 +1255,11 @@ public class LwM2mTransportServiceImpl implements LwM2mTransportService { | ||
1253 | return new ArrayList<>(namesIsWritable); | 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 | objectId != null && objectVer != null && objectVer.equals(lwM2mClient.getRegistration().getSupportedVersion(objectId)) && resourceModel.operations.isWritable() : | 1263 | objectId != null && objectVer != null && objectVer.equals(lwM2mClient.getRegistration().getSupportedVersion(objectId)) && resourceModel.operations.isWritable() : |
1262 | objectId != null && objectVer != null && objectVer.equals(lwM2mClient.getRegistration().getSupportedVersion(objectId))); | 1264 | objectId != null && objectVer != null && objectVer.equals(lwM2mClient.getRegistration().getSupportedVersion(objectId))); |
1263 | } | 1265 | } |