Browse Source

lwm2m: if client reboot or new connect and sharedAttribute not change: log "warn" ...Value is not changed or bad

pull/5171/head
nickAS21 5 years ago
parent
commit
0c5d07e3a7
  1. 35
      common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/attributes/DefaultLwM2MAttributesService.java

35
common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/attributes/DefaultLwM2MAttributesService.java

@ -58,6 +58,7 @@ import static org.eclipse.leshan.core.model.ResourceModel.Type.OPAQUE;
import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportServerHelper.getValueFromKvProto;
import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportUtil.LOG_LWM2M_ERROR;
import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportUtil.LOG_LWM2M_INFO;
import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportUtil.LOG_LWM2M_WARN;
import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportUtil.convertMultiResourceValuesFromJson;
import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportUtil.fromVersionedIdToObjectId;
@ -241,32 +242,30 @@ public class DefaultLwM2MAttributesService implements LwM2MAttributesService {
private void pushUpdateMultiToClientIfNeeded(LwM2mClient client, ResourceModel resourceModel, JsonElement newValProto,
Map<Integer, LwM2mResourceInstance> valueOld, String versionedId) {
Map newValues = convertMultiResourceValuesFromJson((JsonObject)newValProto, resourceModel.type, versionedId);
if (newValues.size() > 0) {
if (valueOld != null && valueOld.size() > 0) {
valueOld.values().stream().forEach((v) -> {
if (newValues.containsKey(v.getId())) {
boolean isValueEquals;
if (OPAQUE.equals(v.getType())) {
isValueEquals = Arrays.equals((byte [])newValues.get(v.getId()), (byte[]) v.getValue());
} else {
isValueEquals = newValues.get(v.getId()).toString().equals(v.getValue().toString());
}
if (isValueEquals) {
newValues.remove(v.getId());
}
Map newValues = convertMultiResourceValuesFromJson((JsonObject) newValProto, resourceModel.type, versionedId);
if (newValues.size() > 0 && valueOld != null && valueOld.size() > 0) {
valueOld.values().stream().forEach((v) -> {
if (newValues.containsKey(v.getId())) {
boolean isValueEquals;
if (OPAQUE.equals(v.getType())) {
isValueEquals = Arrays.equals((byte[]) newValues.get(v.getId()), (byte[]) v.getValue());
} else {
isValueEquals = newValues.get(v.getId()).toString().equals(v.getValue().toString());
}
});
}
if (isValueEquals) {
newValues.remove(v.getId());
}
}
});
}
if (newValues.size() > 0) {
TbLwM2MWriteReplaceRequest request = TbLwM2MWriteReplaceRequest.builder().versionedId(versionedId).value(newValues).timeout(this.config.getTimeout()).build();
downlinkHandler.sendWriteReplaceRequest(client, request, new TbLwM2MWriteResponseCallback(uplinkHandler, logService, client, versionedId));
} else {
log.error("Failed update resource [{}] [{}]", versionedId, newValProto);
log.warn("Failed update resource [{}] [{}]", versionedId, newValProto);
String logMsg = String.format("%s: Failed update resource versionedId - %s value - %s. Value is not changed or bad",
LOG_LWM2M_ERROR, versionedId, newValProto);
LOG_LWM2M_WARN, versionedId, newValProto);
logService.log(client, logMsg);
}
}

Loading…
Cancel
Save