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);
 | 
			
		||||
                    }
 | 
			
		||||
                    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);
 | 
			
		||||
                    this.readResourceValueObserve(registration, postObserveAnalyzer.getPathPostParametersAdd(), GET_TYPE_OPER_OBSERVE);
 | 
			
		||||
                    if (postObserveAnalyzer.getPathPostParametersAdd().size() > 0) {
 | 
			
		||||
                        this.readResourceValueObserve(registration, postObserveAnalyzer.getPathPostParametersAdd(), GET_TYPE_OPER_OBSERVE);
 | 
			
		||||
                    }
 | 
			
		||||
                    // 5.3 del
 | 
			
		||||
                    //  send Request cancel observe to Client
 | 
			
		||||
                    this.cancelObserveIsValue(registration, postObserveAnalyzer.getPathPostParametersDel());
 | 
			
		||||
                    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