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
This commit is contained in:
parent
2df1177ed9
commit
4a6e0c7aae
@ -362,14 +362,6 @@ public class LwM2mTransportHandler {
|
||||
}
|
||||
}
|
||||
|
||||
public static Integer validateObjectIdFromKey(String key) {
|
||||
try {
|
||||
return Integer.parseInt(key.split(LWM2M_SEPARATOR_PATH)[1].split(LWM2M_SEPARATOR_KEY)[0]);
|
||||
} catch (Exception e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public static String validateObjectVerFromKey(String key) {
|
||||
try {
|
||||
return (key.split(LWM2M_SEPARATOR_PATH)[1].split(LWM2M_SEPARATOR_KEY)[1]);
|
||||
|
||||
@ -120,7 +120,7 @@ public class LwM2mTransportRequest {
|
||||
DownlinkRequest request = null;
|
||||
ContentFormat contentFormat = contentFormatParam != null ? ContentFormat.fromName(contentFormatParam.toUpperCase()) : null;
|
||||
LwM2mClient lwM2MClient = lwM2mClientContext.getLwM2mClientWithReg(registration, null);
|
||||
ResourceModel resource = lwM2MClient.getResourceModel(targetIdVer);
|
||||
ResourceModel resource = null;
|
||||
timeoutInMs = timeoutInMs > 0 ? timeoutInMs : DEFAULT_TIMEOUT;
|
||||
switch (typeOper) {
|
||||
case GET_TYPE_OPER_READ:
|
||||
@ -142,6 +142,7 @@ public class LwM2mTransportRequest {
|
||||
request = new CancelObservationRequest(observation);
|
||||
break;
|
||||
case POST_TYPE_OPER_EXECUTE:
|
||||
resource = lwM2MClient.getResourceModel(targetIdVer);
|
||||
if (params != null && resource != null && !resource.multiple) {
|
||||
request = new ExecuteRequest(target, (String) this.converter.convertValue(params, resource.type, ResourceModel.Type.STRING, resultIds));
|
||||
} else {
|
||||
@ -150,6 +151,7 @@ public class LwM2mTransportRequest {
|
||||
break;
|
||||
case POST_TYPE_OPER_WRITE_REPLACE:
|
||||
// Request to write a <b>String Single-Instance Resource</b> using the TLV content format.
|
||||
resource = lwM2MClient.getResourceModel(targetIdVer);
|
||||
if (resource != null && contentFormat != null) {
|
||||
// if (contentFormat.equals(ContentFormat.TLV) && !resource.multiple) {
|
||||
if (contentFormat.equals(ContentFormat.TLV)) {
|
||||
@ -171,7 +173,7 @@ public class LwM2mTransportRequest {
|
||||
}
|
||||
break;
|
||||
case PUT_TYPE_OPER_WRITE_ATTRIBUTES:
|
||||
request = createWriteAttributeRequest (target, params);
|
||||
request = createWriteAttributeRequest(target, params);
|
||||
break;
|
||||
}
|
||||
|
||||
@ -207,12 +209,16 @@ public class LwM2mTransportRequest {
|
||||
if (CoAP.ResponseCode.isSuccess(((Response) response.getCoapResponse()).getCode())) {
|
||||
this.handleResponse(registration, request.getPath().toString(), response, request);
|
||||
if (request instanceof WriteRequest && ((WriteRequest) request).isReplaceRequest()) {
|
||||
LwM2mNode node = ((WriteRequest) request).getNode();
|
||||
Object value = this.converter.convertValue(((LwM2mSingleResource) node).getValue(),
|
||||
((LwM2mSingleResource) node).getType(), ResourceModel.Type.STRING, request.getPath());
|
||||
String msg = String.format("%s: sendRequest Replace: CoapCde - %s Lwm2m code - %d name - %s Resource path - %s value - %s SendRequest to Client",
|
||||
LOG_LW2M_INFO, ((Response) response.getCoapResponse()).getCode(), response.getCode().getCode(), response.getCode().getName(), request.getPath().toString(),
|
||||
((LwM2mSingleResource) ((WriteRequest) request).getNode()).getValue().toString());
|
||||
LOG_LW2M_INFO, ((Response) response.getCoapResponse()).getCode(), response.getCode().getCode(),
|
||||
response.getCode().getName(), request.getPath().toString(), value);
|
||||
serviceImpl.sendLogsToThingsboard(msg, registration);
|
||||
log.info("[{}] [{}] - [{}] [{}] Update SendRequest[{}]", registration.getEndpoint(), ((Response) response.getCoapResponse()).getCode(), response.getCode(), request.getPath().toString(),
|
||||
((LwM2mSingleResource) ((WriteRequest) request).getNode()).getValue());
|
||||
log.debug("[{}] [{}] - [{}] [{}] Update SendRequest[{}]", registration.getEndpoint(),
|
||||
((Response) response.getCoapResponse()).getCode(), response.getCode(),
|
||||
request.getPath().toString(), value);
|
||||
}
|
||||
} else {
|
||||
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
|
||||
import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandler.convertToIdVerFromObjectId;
|
||||
import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandler.convertToObjectIdFromIdVer;
|
||||
import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandler.getAckCallback;
|
||||
import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandler.validateObjectIdFromKey;
|
||||
import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandler.validateObjectVerFromKey;
|
||||
|
||||
@Slf4j
|
||||
@ -515,9 +514,10 @@ public class LwM2mTransportServiceImpl implements LwM2mTransportService {
|
||||
null, null, this.lwM2mTransportContextServer.getLwM2MTransportConfigServer().getTimeout()));
|
||||
}
|
||||
// #1
|
||||
this.initReadAttrTelemetryObserveToClient(registration, lwM2MClient, GET_TYPE_OPER_READ, clientObjects);
|
||||
this.initReadAttrTelemetryObserveToClient(registration, lwM2MClient, GET_TYPE_OPER_OBSERVE, clientObjects);
|
||||
this.initReadAttrTelemetryObserveToClient(registration, lwM2MClient, PUT_TYPE_OPER_WRITE_ATTRIBUTES, clientObjects);
|
||||
this.initReadAttrTelemetryObserveToClient(registration, lwM2MClient, GET_TYPE_OPER_DISCOVER, clientObjects);
|
||||
// this.initReadAttrTelemetryObserveToClient(registration, lwM2MClient, GET_TYPE_OPER_DISCOVER, clientObjects);
|
||||
}
|
||||
}
|
||||
|
||||
@ -748,9 +748,7 @@ public class LwM2mTransportServiceImpl implements LwM2mTransportService {
|
||||
if (resName != null && !resName.isEmpty()) {
|
||||
try {
|
||||
String resValue = this.getResourceValueToString(lwM2MClient, path);
|
||||
if (resValue != null) {
|
||||
parameters.addProperty(resName, resValue);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error("Failed to add parameters.", e);
|
||||
}
|
||||
@ -907,10 +905,14 @@ public class LwM2mTransportServiceImpl implements LwM2mTransportService {
|
||||
// send Request observe to Client
|
||||
registrationIds.forEach(registrationId -> {
|
||||
Registration registration = lwM2mClientContext.getRegistration(registrationId);
|
||||
if (postObserveAnalyzer.getPathPostParametersAdd().size() > 0) {
|
||||
this.readResourceValueObserve(registration, postObserveAnalyzer.getPathPostParametersAdd(), GET_TYPE_OPER_OBSERVE);
|
||||
}
|
||||
// 5.3 del
|
||||
// send Request cancel observe to Client
|
||||
if (postObserveAnalyzer.getPathPostParametersDel().size() > 0) {
|
||||
this.cancelObserveIsValue(registration, postObserveAnalyzer.getPathPostParametersDel());
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
@ -1253,11 +1255,11 @@ public class LwM2mTransportServiceImpl implements LwM2mTransportService {
|
||||
return new ArrayList<>(namesIsWritable);
|
||||
}
|
||||
|
||||
private boolean validateResourceInModel(LwM2mClient lwM2mClient, String pathKey, boolean isWritable) {
|
||||
ResourceModel resourceModel = lwM2mClient.getResourceModel(pathKey);
|
||||
Integer objectId = validateObjectIdFromKey(pathKey);
|
||||
String objectVer = validateObjectVerFromKey(pathKey);
|
||||
return resourceModel != null && (isWritable ?
|
||||
private boolean validateResourceInModel(LwM2mClient lwM2mClient, String pathIdVer, boolean isWritableNotOptional) {
|
||||
ResourceModel resourceModel = lwM2mClient.getResourceModel(pathIdVer);
|
||||
Integer objectId = new LwM2mPath(convertToObjectIdFromIdVer(pathIdVer)).getObjectId();
|
||||
String objectVer = validateObjectVerFromKey(pathIdVer);
|
||||
return resourceModel != null && (isWritableNotOptional ?
|
||||
objectId != null && objectVer != null && objectVer.equals(lwM2mClient.getRegistration().getSupportedVersion(objectId)) && resourceModel.operations.isWritable() :
|
||||
objectId != null && objectVer != null && objectVer.equals(lwM2mClient.getRegistration().getSupportedVersion(objectId)));
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user