Commit cf2a7762d0e1979b1d04ac0474a3580010d53678

Authored by Andrii Shvaika
1 parent 6f67e72a

eDRXcycle support

... ... @@ -27,6 +27,7 @@ public class OtherConfiguration {
27 27 private Integer swUpdateStrategy;
28 28 private Integer clientOnlyObserveAfterConnect;
29 29 private PowerMode powerMode;
  30 + private Long eDRXCycle;
30 31 private String fwUpdateResource;
31 32 private String swUpdateResource;
32 33 private boolean compositeOperationsSupport;
... ...
... ... @@ -191,7 +191,7 @@ public class DefaultLwM2MAttributesService implements LwM2MAttributesService {
191 191
192 192 private void pushUpdateToClientIfNeeded(LwM2mClient lwM2MClient, Object valueOld, Object newValue, String versionedId) {
193 193 if (newValue != null && (valueOld == null || !newValue.toString().equals(valueOld.toString()))) {
194   - TbLwM2MWriteReplaceRequest request = TbLwM2MWriteReplaceRequest.builder().versionedId(versionedId).value(newValue).timeout(this.config.getTimeout()).build();
  194 + TbLwM2MWriteReplaceRequest request = TbLwM2MWriteReplaceRequest.builder().versionedId(versionedId).value(newValue).timeout(clientContext.getRequestTimeout(lwM2MClient)).build();
195 195 downlinkHandler.sendWriteReplaceRequest(lwM2MClient, request, new TbLwM2MWriteResponseCallback(uplinkHandler, logService, lwM2MClient, versionedId));
196 196 } else {
197 197 log.error("Failed update resource [{}] [{}]", versionedId, newValue);
... ...
... ... @@ -62,4 +62,6 @@ public interface LwM2mClientContext {
62 62 void sendMsgsAfterSleeping(LwM2mClient lwM2MClient);
63 63
64 64 boolean isComposite(LwM2mClient client);
  65 +
  66 + Long getRequestTimeout(LwM2mClient client);
65 67 }
... ...
... ... @@ -26,6 +26,7 @@ import org.springframework.context.annotation.Lazy;
26 26 import org.springframework.stereotype.Service;
27 27 import org.thingsboard.server.common.data.DeviceProfile;
28 28 import org.thingsboard.server.common.data.device.data.PowerMode;
  29 +import org.thingsboard.server.common.data.device.data.lwm2m.OtherConfiguration;
29 30 import org.thingsboard.server.common.data.device.profile.Lwm2mDeviceProfileTransportConfiguration;
30 31 import org.thingsboard.server.common.data.id.DeviceProfileId;
31 32 import org.thingsboard.server.common.transport.TransportDeviceProfileCache;
... ... @@ -346,6 +347,20 @@ public class LwM2mClientContextImpl implements LwM2mClientContext {
346 347 getProfile(client.getProfileId()).getClientLwM2mSettings().isCompositeOperationsSupport();
347 348 }
348 349
  350 + @Override
  351 + public Long getRequestTimeout(LwM2mClient client) {
  352 + var clientProfile = getProfile(client.getProfileId());
  353 + OtherConfiguration clientLwM2mSettings = clientProfile.getClientLwM2mSettings();
  354 + Long timeout = null;
  355 + if (PowerMode.E_DRX.equals(clientLwM2mSettings.getPowerMode())) {
  356 + timeout = clientLwM2mSettings.getEDRXCycle();
  357 + }
  358 + if (timeout == null || timeout == 0L) {
  359 + timeout = this.config.getTimeout();
  360 + }
  361 + return timeout;
  362 + }
  363 +
349 364 private boolean validateResourceInModel(LwM2mClient lwM2mClient, String pathIdVer, boolean isWritableNotOptional) {
350 365 ResourceModel resourceModel = lwM2mClient.getResourceModel(pathIdVer, this.config
351 366 .getModelProvider());
... ...
... ... @@ -131,7 +131,7 @@ public class DefaultLwM2mDownlinkMsgHandler extends LwM2MExecutorAwareService im
131 131 ContentFormat responseContentFormat = ContentFormat.SENML_JSON;
132 132
133 133 ReadCompositeRequest downlink = new ReadCompositeRequest(requestContentFormat, responseContentFormat, request.getObjectIds());
134   - sendCompositeRequest(client, downlink, this.config.getTimeout(), callback);
  134 + sendCompositeRequest(client, downlink, request.getTimeout(), callback);
135 135 }
136 136
137 137 @Override
... ... @@ -248,7 +248,8 @@ public class DefaultLwM2mDownlinkMsgHandler extends LwM2MExecutorAwareService im
248 248 ContentFormat contentFormat = ContentFormat.SENML_JSON;
249 249 try {
250 250 WriteCompositeRequest downlink = new WriteCompositeRequest(contentFormat, rpcWriteCompositeRequest.getNodes());
251   - sendWriteCompositeRequest(client, downlink, this.config.getTimeout(), callback);
  251 + //TODO: replace config.getTimeout();
  252 + sendWriteCompositeRequest(client, downlink, config.getTimeout(), callback);
252 253 } catch (Exception e) {
253 254 callback.onError(JacksonUtil.toString(rpcWriteCompositeRequest), e);
254 255 }
... ...
... ... @@ -417,7 +417,7 @@ public class DefaultLwM2MOtaUpdateService extends LwM2MExecutorAwareService impl
417 417
418 418 private void startUpdateUsingUrl(LwM2mClient client, String id, String url) {
419 419 String targetIdVer = convertObjectIdToVersionedId(id, client.getRegistration());
420   - TbLwM2MWriteReplaceRequest request = TbLwM2MWriteReplaceRequest.builder().versionedId(targetIdVer).value(url).timeout(config.getTimeout()).build();
  420 + TbLwM2MWriteReplaceRequest request = TbLwM2MWriteReplaceRequest.builder().versionedId(targetIdVer).value(url).timeout(clientContext.getRequestTimeout(client)).build();
421 421 downlinkHandler.sendWriteReplaceRequest(client, request, new TbLwM2MWriteResponseCallback(uplinkHandler, logService, client, targetIdVer));
422 422 }
423 423
... ... @@ -486,7 +486,7 @@ public class DefaultLwM2MOtaUpdateService extends LwM2MExecutorAwareService impl
486 486 byte[] firmwareChunk = otaPackageDataCache.get(otaPackageId.toString(), 0, 0);
487 487 TbLwM2MWriteReplaceRequest writeRequest = TbLwM2MWriteReplaceRequest.builder().versionedId(versionedId)
488 488 .value(firmwareChunk).contentFormat(ContentFormat.OPAQUE)
489   - .timeout(config.getTimeout()).build();
  489 + .timeout(clientContext.getRequestTimeout(client)).build();
490 490 downlinkHandler.sendWriteReplaceRequest(client, writeRequest, new TbLwM2MWriteResponseCallback(uplinkHandler, logService, client, versionedId));
491 491 }
492 492
... ... @@ -501,17 +501,17 @@ public class DefaultLwM2MOtaUpdateService extends LwM2MExecutorAwareService impl
501 501 }
502 502
503 503 private void executeFwUpdate(LwM2mClient client) {
504   - TbLwM2MExecuteRequest request = TbLwM2MExecuteRequest.builder().versionedId(FW_EXECUTE_ID).timeout(config.getTimeout()).build();
  504 + TbLwM2MExecuteRequest request = TbLwM2MExecuteRequest.builder().versionedId(FW_EXECUTE_ID).timeout(clientContext.getRequestTimeout(client)).build();
505 505 downlinkHandler.sendExecuteRequest(client, request, new TbLwM2MExecuteCallback(logService, client, FW_EXECUTE_ID));
506 506 }
507 507
508 508 private void executeSwInstall(LwM2mClient client) {
509   - TbLwM2MExecuteRequest request = TbLwM2MExecuteRequest.builder().versionedId(SW_INSTALL_ID).timeout(config.getTimeout()).build();
  509 + TbLwM2MExecuteRequest request = TbLwM2MExecuteRequest.builder().versionedId(SW_INSTALL_ID).timeout(clientContext.getRequestTimeout(client)).build();
510 510 downlinkHandler.sendExecuteRequest(client, request, new TbLwM2MExecuteCallback(logService, client, SW_INSTALL_ID));
511 511 }
512 512
513 513 private void executeSwUninstallForUpdate(LwM2mClient client) {
514   - TbLwM2MExecuteRequest request = TbLwM2MExecuteRequest.builder().versionedId(SW_UN_INSTALL_ID).params("1").timeout(config.getTimeout()).build();
  514 + TbLwM2MExecuteRequest request = TbLwM2MExecuteRequest.builder().versionedId(SW_UN_INSTALL_ID).params("1").timeout(clientContext.getRequestTimeout(client)).build();
515 515 downlinkHandler.sendExecuteRequest(client, request, new TbLwM2MExecuteCallback(logService, client, SW_INSTALL_ID));
516 516 }
517 517
... ...
... ... @@ -171,7 +171,7 @@ public class DefaultLwM2MRpcRequestHandler implements LwM2MRpcRequestHandler {
171 171 }
172 172
173 173 private void sendReadRequest(LwM2mClient client, TransportProtos.ToDeviceRpcRequestMsg requestMsg, String versionedId) {
174   - TbLwM2MReadRequest request = TbLwM2MReadRequest.builder().versionedId(versionedId).timeout(this.config.getTimeout()).build();
  174 + TbLwM2MReadRequest request = TbLwM2MReadRequest.builder().versionedId(versionedId).timeout(clientContext.getRequestTimeout(client)).build();
175 175 var mainCallback = new TbLwM2MReadCallback(uplinkHandler, logService, client, versionedId);
176 176 var rpcCallback = new RpcReadResponseCallback<>(transportService, client, requestMsg, mainCallback);
177 177 downlinkHandler.sendReadRequest(client, request, rpcCallback);
... ... @@ -179,38 +179,38 @@ public class DefaultLwM2MRpcRequestHandler implements LwM2MRpcRequestHandler {
179 179
180 180 private void sendReadCompositeRequest(LwM2mClient client, TransportProtos.ToDeviceRpcRequestMsg requestMsg) {
181 181 String[] versionedIds = getIdsFromParameters(client, requestMsg);
182   - TbLwM2MReadCompositeRequest request = TbLwM2MReadCompositeRequest.builder().versionedIds(versionedIds).timeout(this.config.getTimeout()).build();
  182 + TbLwM2MReadCompositeRequest request = TbLwM2MReadCompositeRequest.builder().versionedIds(versionedIds).timeout(clientContext.getRequestTimeout(client)).build();
183 183 var mainCallback = new TbLwM2MReadCompositeCallback(uplinkHandler, logService, client, versionedIds);
184 184 var rpcCallback = new RpcReadResponseCompositeCallback(transportService, client, requestMsg, mainCallback);
185 185 downlinkHandler.sendReadCompositeRequest(client, request, rpcCallback);
186 186 }
187 187
188 188 private void sendObserveRequest(LwM2mClient client, TransportProtos.ToDeviceRpcRequestMsg requestMsg, String versionedId) {
189   - TbLwM2MObserveRequest request = TbLwM2MObserveRequest.builder().versionedId(versionedId).timeout(this.config.getTimeout()).build();
  189 + TbLwM2MObserveRequest request = TbLwM2MObserveRequest.builder().versionedId(versionedId).timeout(clientContext.getRequestTimeout(client)).build();
190 190 var mainCallback = new TbLwM2MObserveCallback(uplinkHandler, logService, client, versionedId);
191 191 var rpcCallback = new RpcReadResponseCallback<>(transportService, client, requestMsg, mainCallback);
192 192 downlinkHandler.sendObserveRequest(client, request, rpcCallback);
193 193 }
194 194
195 195 private void sendObserveAllRequest(LwM2mClient client, TransportProtos.ToDeviceRpcRequestMsg requestMsg) {
196   - TbLwM2MObserveAllRequest request = TbLwM2MObserveAllRequest.builder().timeout(this.config.getTimeout()).build();
  196 + TbLwM2MObserveAllRequest request = TbLwM2MObserveAllRequest.builder().timeout(clientContext.getRequestTimeout(client)).build();
197 197 downlinkHandler.sendObserveAllRequest(client, request, new RpcLinkSetCallback<>(transportService, client, requestMsg, null));
198 198 }
199 199
200 200 private void sendDiscoverAllRequest(LwM2mClient client, TransportProtos.ToDeviceRpcRequestMsg requestMsg) {
201   - TbLwM2MDiscoverAllRequest request = TbLwM2MDiscoverAllRequest.builder().timeout(this.config.getTimeout()).build();
  201 + TbLwM2MDiscoverAllRequest request = TbLwM2MDiscoverAllRequest.builder().timeout(clientContext.getRequestTimeout(client)).build();
202 202 downlinkHandler.sendDiscoverAllRequest(client, request, new RpcLinkSetCallback<>(transportService, client, requestMsg, null));
203 203 }
204 204
205 205 private void sendDiscoverRequest(LwM2mClient client, TransportProtos.ToDeviceRpcRequestMsg requestMsg, String versionedId) {
206   - TbLwM2MDiscoverRequest request = TbLwM2MDiscoverRequest.builder().versionedId(versionedId).timeout(this.config.getTimeout()).build();
  206 + TbLwM2MDiscoverRequest request = TbLwM2MDiscoverRequest.builder().versionedId(versionedId).timeout(clientContext.getRequestTimeout(client)).build();
207 207 var mainCallback = new TbLwM2MDiscoverCallback(logService, client, versionedId);
208 208 var rpcCallback = new RpcDiscoverCallback(transportService, client, requestMsg, mainCallback);
209 209 downlinkHandler.sendDiscoverRequest(client, request, rpcCallback);
210 210 }
211 211
212 212 private void sendExecuteRequest(LwM2mClient client, TransportProtos.ToDeviceRpcRequestMsg requestMsg, String versionedId) {
213   - TbLwM2MExecuteRequest downlink = TbLwM2MExecuteRequest.builder().versionedId(versionedId).timeout(this.config.getTimeout()).build();
  213 + TbLwM2MExecuteRequest downlink = TbLwM2MExecuteRequest.builder().versionedId(versionedId).timeout(clientContext.getRequestTimeout(client)).build();
214 214 var mainCallback = new TbLwM2MExecuteCallback(logService, client, versionedId);
215 215 var rpcCallback = new RpcEmptyResponseCallback<>(transportService, client, requestMsg, mainCallback);
216 216 downlinkHandler.sendExecuteRequest(client, downlink, rpcCallback);
... ... @@ -220,7 +220,7 @@ public class DefaultLwM2MRpcRequestHandler implements LwM2MRpcRequestHandler {
220 220 RpcWriteAttributesRequest requestBody = JacksonUtil.fromString(requestMsg.getParams(), RpcWriteAttributesRequest.class);
221 221 TbLwM2MWriteAttributesRequest request = TbLwM2MWriteAttributesRequest.builder().versionedId(versionedId)
222 222 .attributes(requestBody.getAttributes())
223   - .timeout(this.config.getTimeout()).build();
  223 + .timeout(clientContext.getRequestTimeout(client)).build();
224 224 var mainCallback = new TbLwM2MWriteAttributesCallback(logService, client, versionedId);
225 225 var rpcCallback = new RpcEmptyResponseCallback<>(transportService, client, requestMsg, mainCallback);
226 226 downlinkHandler.sendWriteAttributesRequest(client, request, rpcCallback);
... ... @@ -229,7 +229,7 @@ public class DefaultLwM2MRpcRequestHandler implements LwM2MRpcRequestHandler {
229 229 private void sendWriteUpdateRequest(LwM2mClient client, TransportProtos.ToDeviceRpcRequestMsg requestMsg, String versionedId) {
230 230 RpcWriteUpdateRequest requestBody = JacksonUtil.fromString(requestMsg.getParams(), RpcWriteUpdateRequest.class);
231 231 TbLwM2MWriteUpdateRequest.TbLwM2MWriteUpdateRequestBuilder builder = TbLwM2MWriteUpdateRequest.builder().versionedId(versionedId);
232   - builder.value(requestBody.getValue()).timeout(this.config.getTimeout());
  232 + builder.value(requestBody.getValue()).timeout(clientContext.getRequestTimeout(client));
233 233 var mainCallback = new TbLwM2MWriteResponseCallback(uplinkHandler, logService, client, versionedId);
234 234 var rpcCallback = new RpcEmptyResponseCallback<>(transportService, client, requestMsg, mainCallback);
235 235 downlinkHandler.sendWriteUpdateRequest(client, builder.build(), rpcCallback);
... ... @@ -239,7 +239,7 @@ public class DefaultLwM2MRpcRequestHandler implements LwM2MRpcRequestHandler {
239 239 RpcWriteReplaceRequest requestBody = JacksonUtil.fromString(requestMsg.getParams(), RpcWriteReplaceRequest.class);
240 240 TbLwM2MWriteReplaceRequest request = TbLwM2MWriteReplaceRequest.builder().versionedId(versionedId)
241 241 .value(requestBody.getValue())
242   - .timeout(this.config.getTimeout()).build();
  242 + .timeout(clientContext.getRequestTimeout(client)).build();
243 243 var mainCallback = new TbLwM2MWriteResponseCallback(uplinkHandler, logService, client, versionedId);
244 244 var rpcCallback = new RpcEmptyResponseCallback<>(transportService, client, requestMsg, mainCallback);
245 245 downlinkHandler.sendWriteReplaceRequest(client, request, rpcCallback);
... ... @@ -261,21 +261,21 @@ public class DefaultLwM2MRpcRequestHandler implements LwM2MRpcRequestHandler {
261 261 }
262 262
263 263 private void sendCancelObserveRequest(LwM2mClient client, TransportProtos.ToDeviceRpcRequestMsg requestMsg, String versionedId) {
264   - TbLwM2MCancelObserveRequest downlink = TbLwM2MCancelObserveRequest.builder().versionedId(versionedId).timeout(this.config.getTimeout()).build();
  264 + TbLwM2MCancelObserveRequest downlink = TbLwM2MCancelObserveRequest.builder().versionedId(versionedId).timeout(clientContext.getRequestTimeout(client)).build();
265 265 var mainCallback = new TbLwM2MCancelObserveCallback(logService, client, versionedId);
266 266 var rpcCallback = new RpcCancelObserveCallback(transportService, client, requestMsg, mainCallback);
267 267 downlinkHandler.sendCancelObserveRequest(client, downlink, rpcCallback);
268 268 }
269 269
270 270 private void sendDeleteRequest(LwM2mClient client, TransportProtos.ToDeviceRpcRequestMsg requestMsg, String versionedId) {
271   - TbLwM2MDeleteRequest downlink = TbLwM2MDeleteRequest.builder().versionedId(versionedId).timeout(this.config.getTimeout()).build();
  271 + TbLwM2MDeleteRequest downlink = TbLwM2MDeleteRequest.builder().versionedId(versionedId).timeout(clientContext.getRequestTimeout(client)).build();
272 272 var mainCallback = new TbLwM2MDeleteCallback(logService, client, versionedId);
273 273 var rpcCallback = new RpcEmptyResponseCallback<>(transportService, client, requestMsg, mainCallback);
274 274 downlinkHandler.sendDeleteRequest(client, downlink, rpcCallback);
275 275 }
276 276
277 277 private void sendCancelAllObserveRequest(LwM2mClient client, TransportProtos.ToDeviceRpcRequestMsg requestMsg) {
278   - TbLwM2MCancelAllRequest downlink = TbLwM2MCancelAllRequest.builder().timeout(this.config.getTimeout()).build();
  278 + TbLwM2MCancelAllRequest downlink = TbLwM2MCancelAllRequest.builder().timeout(clientContext.getRequestTimeout(client)).build();
279 279 var mainCallback = new TbLwM2MCancelAllObserveCallback(logService, client);
280 280 var rpcCallback = new RpcCancelAllObserveCallback(transportService, client, requestMsg, mainCallback);
281 281 downlinkHandler.sendCancelAllRequest(client, downlink, rpcCallback);
... ...
... ... @@ -457,7 +457,7 @@ public class DefaultLwM2MUplinkMsgHandler extends LwM2MExecutorAwareService impl
457 457 }
458 458
459 459 private void sendDiscoverRequest(LwM2mClient lwM2MClient, String targetId) {
460   - TbLwM2MDiscoverRequest request = TbLwM2MDiscoverRequest.builder().versionedId(targetId).timeout(this.config.getTimeout()).build();
  460 + TbLwM2MDiscoverRequest request = TbLwM2MDiscoverRequest.builder().versionedId(targetId).timeout(clientContext.getRequestTimeout(lwM2MClient)).build();
461 461 defaultLwM2MDownlinkMsgHandler.sendDiscoverRequest(lwM2MClient, request, new TbLwM2MDiscoverCallback(logService, lwM2MClient, targetId));
462 462 }
463 463
... ... @@ -466,7 +466,7 @@ public class DefaultLwM2MUplinkMsgHandler extends LwM2MExecutorAwareService impl
466 466 }
467 467
468 468 private void sendReadRequest(LwM2mClient lwM2MClient, String versionedId, DownlinkRequestCallback<ReadRequest, ReadResponse> callback) {
469   - TbLwM2MReadRequest request = TbLwM2MReadRequest.builder().versionedId(versionedId).timeout(this.config.getTimeout()).build();
  469 + TbLwM2MReadRequest request = TbLwM2MReadRequest.builder().versionedId(versionedId).timeout(clientContext.getRequestTimeout(lwM2MClient)).build();
470 470 defaultLwM2MDownlinkMsgHandler.sendReadRequest(lwM2MClient, request, callback);
471 471 }
472 472
... ... @@ -475,17 +475,17 @@ public class DefaultLwM2MUplinkMsgHandler extends LwM2MExecutorAwareService impl
475 475 }
476 476
477 477 private void sendObserveRequest(LwM2mClient lwM2MClient, String versionedId, DownlinkRequestCallback<ObserveRequest, ObserveResponse> callback) {
478   - TbLwM2MObserveRequest request = TbLwM2MObserveRequest.builder().versionedId(versionedId).timeout(this.config.getTimeout()).build();
  478 + TbLwM2MObserveRequest request = TbLwM2MObserveRequest.builder().versionedId(versionedId).timeout(clientContext.getRequestTimeout(lwM2MClient)).build();
479 479 defaultLwM2MDownlinkMsgHandler.sendObserveRequest(lwM2MClient, request, callback);
480 480 }
481 481
482 482 private void sendWriteAttributesRequest(LwM2mClient lwM2MClient, String targetId, ObjectAttributes params) {
483   - TbLwM2MWriteAttributesRequest request = TbLwM2MWriteAttributesRequest.builder().versionedId(targetId).attributes(params).timeout(this.config.getTimeout()).build();
  483 + TbLwM2MWriteAttributesRequest request = TbLwM2MWriteAttributesRequest.builder().versionedId(targetId).attributes(params).timeout(clientContext.getRequestTimeout(lwM2MClient)).build();
484 484 defaultLwM2MDownlinkMsgHandler.sendWriteAttributesRequest(lwM2MClient, request, new TbLwM2MWriteAttributesCallback(logService, lwM2MClient, targetId));
485 485 }
486 486
487 487 private void sendCancelObserveRequest(String versionedId, LwM2mClient client) {
488   - TbLwM2MCancelObserveRequest request = TbLwM2MCancelObserveRequest.builder().versionedId(versionedId).timeout(this.config.getTimeout()).build();
  488 + TbLwM2MCancelObserveRequest request = TbLwM2MCancelObserveRequest.builder().versionedId(versionedId).timeout(clientContext.getRequestTimeout(client)).build();
489 489 defaultLwM2MDownlinkMsgHandler.sendCancelObserveRequest(client, request, new TbLwM2MCancelObserveCallback(logService, client, versionedId));
490 490 }
491 491
... ...