diff --git a/application/src/main/java/org/thingsboard/server/service/edge/rpc/constructor/EntityDataMsgConstructor.java b/application/src/main/java/org/thingsboard/server/service/edge/rpc/constructor/EntityDataMsgConstructor.java index d9a06655c5..e83c197690 100644 --- a/application/src/main/java/org/thingsboard/server/service/edge/rpc/constructor/EntityDataMsgConstructor.java +++ b/application/src/main/java/org/thingsboard/server/service/edge/rpc/constructor/EntityDataMsgConstructor.java @@ -16,6 +16,7 @@ package org.thingsboard.server.service.edge.rpc.constructor; import com.google.gson.JsonElement; +import com.google.gson.JsonObject; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import org.thingsboard.server.common.data.audit.ActionType; @@ -42,7 +43,13 @@ public class EntityDataMsgConstructor { break; case ATTRIBUTES_UPDATED: try { - builder.setPostAttributesMsg(JsonConverter.convertToAttributesProto(entityData)); + JsonObject data = entityData.getAsJsonObject(); + if (data.has("scope") && data.has("kv")) { + builder.setPostAttributesMsg(JsonConverter.convertToAttributesProto(data.getAsJsonObject("kv"))); + builder.setPostAttributeScope(data.getAsJsonPrimitive("scope").getAsString()); + } else { + builder.setPostAttributesMsg(JsonConverter.convertToAttributesProto(data)); + } } catch (Exception e) { log.warn("Can't convert to attributes proto, entityData [{}]", entityData, e); } diff --git a/common/edge-api/src/main/proto/edge.proto b/common/edge-api/src/main/proto/edge.proto index 2cdbd241d1..9713cd754f 100644 --- a/common/edge-api/src/main/proto/edge.proto +++ b/common/edge-api/src/main/proto/edge.proto @@ -109,6 +109,7 @@ message EntityDataProto { string entityType = 3; transport.PostTelemetryMsg postTelemetryMsg = 4; transport.PostAttributeMsg postAttributesMsg = 5; + string postAttributeScope = 6; // transport.ToDeviceRpcRequestMsg ??? } diff --git a/common/queue/src/main/proto/queue.proto b/common/queue/src/main/proto/queue.proto index c302a30b8c..921a096df0 100644 --- a/common/queue/src/main/proto/queue.proto +++ b/common/queue/src/main/proto/queue.proto @@ -115,7 +115,6 @@ message PostTelemetryMsg { message PostAttributeMsg { repeated KeyValueProto kv = 1; - string scope = 2; } message GetAttributeRequestMsg { diff --git a/common/transport/transport-api/src/main/java/org/thingsboard/server/common/transport/adaptor/JsonConverter.java b/common/transport/transport-api/src/main/java/org/thingsboard/server/common/transport/adaptor/JsonConverter.java index 42b4b2a77c..8375b84ffa 100644 --- a/common/transport/transport-api/src/main/java/org/thingsboard/server/common/transport/adaptor/JsonConverter.java +++ b/common/transport/transport-api/src/main/java/org/thingsboard/server/common/transport/adaptor/JsonConverter.java @@ -133,21 +133,14 @@ public class JsonConverter { .build(); } - public static PostAttributeMsg convertToAttributesProto(JsonElement jsonElement) throws JsonSyntaxException { - if (jsonElement.isJsonObject()) { + public static PostAttributeMsg convertToAttributesProto(JsonElement jsonObject) throws JsonSyntaxException { + if (jsonObject.isJsonObject()) { PostAttributeMsg.Builder result = PostAttributeMsg.newBuilder(); - List keyValueList = null; - JsonObject jsonObject = jsonElement.getAsJsonObject(); - if (jsonObject.has("kv") && jsonObject.has("scope")) { - keyValueList = parseProtoValues(jsonObject.getAsJsonObject("kv")); - result.setScope(jsonObject.getAsJsonPrimitive("scope").getAsString()); - } else { - keyValueList = parseProtoValues(jsonObject); - } + List keyValueList = parseProtoValues(jsonObject.getAsJsonObject()); result.addAllKv(keyValueList); return result.build(); } else { - throw new JsonSyntaxException(CAN_T_PARSE_VALUE + jsonElement); + throw new JsonSyntaxException(CAN_T_PARSE_VALUE + jsonObject); } }