Showing
8 changed files
with
72 additions
and
64 deletions
@@ -224,6 +224,7 @@ public class RuleChainActorMessageProcessor extends ComponentMsgProcessor<RuleCh | @@ -224,6 +224,7 @@ public class RuleChainActorMessageProcessor extends ComponentMsgProcessor<RuleCh | ||
224 | if (targetCtx != null) { | 224 | if (targetCtx != null) { |
225 | log.trace("[{}][{}] Pushing message to target rule node", entityId, targetId); | 225 | log.trace("[{}][{}] Pushing message to target rule node", entityId, targetId); |
226 | pushMsgToNode(targetCtx, msg, ""); | 226 | pushMsgToNode(targetCtx, msg, ""); |
227 | + pushUpdatesToEdges(msg); | ||
227 | } else { | 228 | } else { |
228 | log.trace("[{}][{}] Rule node does not exist. Probably old message", entityId, targetId); | 229 | log.trace("[{}][{}] Rule node does not exist. Probably old message", entityId, targetId); |
229 | msg.getCallback().onSuccess(); | 230 | msg.getCallback().onSuccess(); |
@@ -346,7 +347,6 @@ public class RuleChainActorMessageProcessor extends ComponentMsgProcessor<RuleCh | @@ -346,7 +347,6 @@ public class RuleChainActorMessageProcessor extends ComponentMsgProcessor<RuleCh | ||
346 | 347 | ||
347 | private void pushMsgToNode(RuleNodeCtx nodeCtx, TbMsg msg, String fromRelationType) { | 348 | private void pushMsgToNode(RuleNodeCtx nodeCtx, TbMsg msg, String fromRelationType) { |
348 | if (nodeCtx != null) { | 349 | if (nodeCtx != null) { |
349 | - pushUpdatesToEdges(msg); | ||
350 | nodeCtx.getSelfActor().tell(new RuleChainToRuleNodeMsg(new DefaultTbContext(systemContext, nodeCtx), msg, fromRelationType), self); | 350 | nodeCtx.getSelfActor().tell(new RuleChainToRuleNodeMsg(new DefaultTbContext(systemContext, nodeCtx), msg, fromRelationType), self); |
351 | } else { | 351 | } else { |
352 | log.error("[{}][{}] RuleNodeCtx is empty", entityId, ruleChainName); | 352 | log.error("[{}][{}] RuleNodeCtx is empty", entityId, ruleChainName); |
@@ -274,7 +274,7 @@ public final class EdgeGrpcSession implements Closeable { | @@ -274,7 +274,7 @@ public final class EdgeGrpcSession implements Closeable { | ||
274 | , objectMapper.writeValueAsString(entityNode)); | 274 | , objectMapper.writeValueAsString(entityNode)); |
275 | log.debug("Sending donwlink entity data msg, entityName [{}], tbMsg [{}]", finalEntityName, tbMsg); | 275 | log.debug("Sending donwlink entity data msg, entityName [{}], tbMsg [{}]", finalEntityName, tbMsg); |
276 | outputStream.onNext(ResponseMsg.newBuilder() | 276 | outputStream.onNext(ResponseMsg.newBuilder() |
277 | - .setDownlinkMsg(constructDownlinkEntityDataMsg(finalEntityName, tbMsg)) | 277 | + .setDownlinkMsg(constructDownlinkEntityDataMsg(finalEntityName, finalEntityId, tbMsg)) |
278 | .build()); | 278 | .build()); |
279 | } catch (Exception e) { | 279 | } catch (Exception e) { |
280 | log.error("[{}] Failed to send attribute updates to the edge", edge.getName(), e); | 280 | log.error("[{}] Failed to send attribute updates to the edge", edge.getName(), e); |
@@ -291,25 +291,29 @@ public final class EdgeGrpcSession implements Closeable { | @@ -291,25 +291,29 @@ public final class EdgeGrpcSession implements Closeable { | ||
291 | log.trace("Executing processCustomDownlinkMessage, entry [{}]", entry); | 291 | log.trace("Executing processCustomDownlinkMessage, entry [{}]", entry); |
292 | TbMsg tbMsg = TbMsg.fromBytes(Base64.decodeBase64(entry.getData()), TbMsgCallback.EMPTY); | 292 | TbMsg tbMsg = TbMsg.fromBytes(Base64.decodeBase64(entry.getData()), TbMsgCallback.EMPTY); |
293 | String entityName = null; | 293 | String entityName = null; |
294 | + EntityId entityId = null; | ||
294 | switch (entry.getEntityType()) { | 295 | switch (entry.getEntityType()) { |
295 | case DEVICE: | 296 | case DEVICE: |
296 | Device device = ctx.getDeviceService().findDeviceById(edge.getTenantId(), new DeviceId(tbMsg.getOriginator().getId())); | 297 | Device device = ctx.getDeviceService().findDeviceById(edge.getTenantId(), new DeviceId(tbMsg.getOriginator().getId())); |
297 | entityName = device.getName(); | 298 | entityName = device.getName(); |
299 | + entityId = device.getId(); | ||
298 | break; | 300 | break; |
299 | case ASSET: | 301 | case ASSET: |
300 | Asset asset = ctx.getAssetService().findAssetById(edge.getTenantId(), new AssetId(tbMsg.getOriginator().getId())); | 302 | Asset asset = ctx.getAssetService().findAssetById(edge.getTenantId(), new AssetId(tbMsg.getOriginator().getId())); |
301 | entityName = asset.getName(); | 303 | entityName = asset.getName(); |
304 | + entityId = asset.getId(); | ||
302 | break; | 305 | break; |
303 | case ENTITY_VIEW: | 306 | case ENTITY_VIEW: |
304 | EntityView entityView = ctx.getEntityViewService().findEntityViewById(edge.getTenantId(), new EntityViewId(tbMsg.getOriginator().getId())); | 307 | EntityView entityView = ctx.getEntityViewService().findEntityViewById(edge.getTenantId(), new EntityViewId(tbMsg.getOriginator().getId())); |
305 | entityName = entityView.getName(); | 308 | entityName = entityView.getName(); |
309 | + entityId = entityView.getId(); | ||
306 | break; | 310 | break; |
307 | 311 | ||
308 | } | 312 | } |
309 | - if (entityName != null) { | ||
310 | - log.debug("Sending donwlink entity data msg, entityName [{}], tbMsg [{}]", entityName, tbMsg); | 313 | + if (entityName != null && entityId != null) { |
314 | + log.debug("Sending downlink entity data msg, entityName [{}], tbMsg [{}]", entityName, tbMsg); | ||
311 | outputStream.onNext(ResponseMsg.newBuilder() | 315 | outputStream.onNext(ResponseMsg.newBuilder() |
312 | - .setDownlinkMsg(constructDownlinkEntityDataMsg(entityName, tbMsg)) | 316 | + .setDownlinkMsg(constructDownlinkEntityDataMsg(entityName, entityId, tbMsg)) |
313 | .build()); | 317 | .build()); |
314 | } | 318 | } |
315 | } | 319 | } |
@@ -482,10 +486,13 @@ public final class EdgeGrpcSession implements Closeable { | @@ -482,10 +486,13 @@ public final class EdgeGrpcSession implements Closeable { | ||
482 | } | 486 | } |
483 | } | 487 | } |
484 | 488 | ||
485 | - private DownlinkMsg constructDownlinkEntityDataMsg(String entityName, TbMsg tbMsg) { | 489 | + private DownlinkMsg constructDownlinkEntityDataMsg(String entityName, EntityId entityId, TbMsg tbMsg) { |
486 | EntityDataProto entityData = EntityDataProto.newBuilder() | 490 | EntityDataProto entityData = EntityDataProto.newBuilder() |
487 | .setEntityName(entityName) | 491 | .setEntityName(entityName) |
488 | - .setTbMsg(ByteString.copyFrom(TbMsg.toByteArray(tbMsg))).build(); | 492 | + .setTbMsg(ByteString.copyFrom(TbMsg.toByteArray(tbMsg))) |
493 | + .setEntityIdMSB(entityId.getId().getMostSignificantBits()) | ||
494 | + .setEntityIdLSB(entityId.getId().getLeastSignificantBits()) | ||
495 | + .build(); | ||
489 | 496 | ||
490 | DownlinkMsg.Builder builder = DownlinkMsg.newBuilder() | 497 | DownlinkMsg.Builder builder = DownlinkMsg.newBuilder() |
491 | .addAllEntityData(Collections.singletonList(entityData)); | 498 | .addAllEntityData(Collections.singletonList(entityData)); |
@@ -28,6 +28,8 @@ public class AssetUpdateMsgConstructor { | @@ -28,6 +28,8 @@ public class AssetUpdateMsgConstructor { | ||
28 | public AssetUpdateMsg constructAssetUpdatedMsg(UpdateMsgType msgType, Asset asset) { | 28 | public AssetUpdateMsg constructAssetUpdatedMsg(UpdateMsgType msgType, Asset asset) { |
29 | AssetUpdateMsg.Builder builder = AssetUpdateMsg.newBuilder() | 29 | AssetUpdateMsg.Builder builder = AssetUpdateMsg.newBuilder() |
30 | .setMsgType(msgType) | 30 | .setMsgType(msgType) |
31 | + .setIdMSB(asset.getId().getId().getMostSignificantBits()) | ||
32 | + .setIdLSB(asset.getId().getId().getLeastSignificantBits()) | ||
31 | .setName(asset.getName()) | 33 | .setName(asset.getName()) |
32 | .setType(asset.getType()); | 34 | .setType(asset.getType()); |
33 | if (asset.getLabel() != null) { | 35 | if (asset.getLabel() != null) { |
@@ -34,6 +34,8 @@ public class DeviceUpdateMsgConstructor { | @@ -34,6 +34,8 @@ public class DeviceUpdateMsgConstructor { | ||
34 | public DeviceUpdateMsg constructDeviceUpdatedMsg(UpdateMsgType msgType, Device device) { | 34 | public DeviceUpdateMsg constructDeviceUpdatedMsg(UpdateMsgType msgType, Device device) { |
35 | DeviceUpdateMsg.Builder builder = DeviceUpdateMsg.newBuilder() | 35 | DeviceUpdateMsg.Builder builder = DeviceUpdateMsg.newBuilder() |
36 | .setMsgType(msgType) | 36 | .setMsgType(msgType) |
37 | + .setIdMSB(device.getId().getId().getMostSignificantBits()) | ||
38 | + .setIdLSB(device.getId().getId().getLeastSignificantBits()) | ||
37 | .setName(device.getName()) | 39 | .setName(device.getName()) |
38 | .setType(device.getType()); | 40 | .setType(device.getType()); |
39 | if (device.getLabel() != null) { | 41 | if (device.getLabel() != null) { |
@@ -16,16 +16,8 @@ | @@ -16,16 +16,8 @@ | ||
16 | package org.thingsboard.server.service.edge.rpc.constructor; | 16 | package org.thingsboard.server.service.edge.rpc.constructor; |
17 | 17 | ||
18 | import lombok.extern.slf4j.Slf4j; | 18 | import lombok.extern.slf4j.Slf4j; |
19 | -import org.springframework.beans.factory.annotation.Autowired; | ||
20 | import org.springframework.stereotype.Component; | 19 | import org.springframework.stereotype.Component; |
21 | -import org.thingsboard.server.common.data.Device; | ||
22 | -import org.thingsboard.server.common.data.EntityType; | ||
23 | import org.thingsboard.server.common.data.EntityView; | 20 | import org.thingsboard.server.common.data.EntityView; |
24 | -import org.thingsboard.server.common.data.asset.Asset; | ||
25 | -import org.thingsboard.server.common.data.id.AssetId; | ||
26 | -import org.thingsboard.server.common.data.id.DeviceId; | ||
27 | -import org.thingsboard.server.dao.asset.AssetService; | ||
28 | -import org.thingsboard.server.dao.device.DeviceService; | ||
29 | import org.thingsboard.server.gen.edge.EdgeEntityType; | 21 | import org.thingsboard.server.gen.edge.EdgeEntityType; |
30 | import org.thingsboard.server.gen.edge.EntityViewUpdateMsg; | 22 | import org.thingsboard.server.gen.edge.EntityViewUpdateMsg; |
31 | import org.thingsboard.server.gen.edge.UpdateMsgType; | 23 | import org.thingsboard.server.gen.edge.UpdateMsgType; |
@@ -34,34 +26,27 @@ import org.thingsboard.server.gen.edge.UpdateMsgType; | @@ -34,34 +26,27 @@ import org.thingsboard.server.gen.edge.UpdateMsgType; | ||
34 | @Slf4j | 26 | @Slf4j |
35 | public class EntityViewUpdateMsgConstructor { | 27 | public class EntityViewUpdateMsgConstructor { |
36 | 28 | ||
37 | - @Autowired | ||
38 | - private DeviceService deviceService; | ||
39 | - | ||
40 | - @Autowired | ||
41 | - private AssetService assetService; | ||
42 | - | ||
43 | public EntityViewUpdateMsg constructEntityViewUpdatedMsg(UpdateMsgType msgType, EntityView entityView) { | 29 | public EntityViewUpdateMsg constructEntityViewUpdatedMsg(UpdateMsgType msgType, EntityView entityView) { |
44 | - String relatedName; | ||
45 | - String relatedType; | ||
46 | - EdgeEntityType relatedEntityType; | ||
47 | - if (entityView.getEntityId().getEntityType().equals(EntityType.DEVICE)) { | ||
48 | - Device device = deviceService.findDeviceById(entityView.getTenantId(), new DeviceId(entityView.getEntityId().getId())); | ||
49 | - relatedName = device.getName(); | ||
50 | - relatedType = device.getType(); | ||
51 | - relatedEntityType = EdgeEntityType.DEVICE; | ||
52 | - } else { | ||
53 | - Asset asset = assetService.findAssetById(entityView.getTenantId(), new AssetId(entityView.getEntityId().getId())); | ||
54 | - relatedName = asset.getName(); | ||
55 | - relatedType = asset.getType(); | ||
56 | - relatedEntityType = EdgeEntityType.ASSET; | 30 | + EdgeEntityType entityType; |
31 | + switch (entityView.getEntityId().getEntityType()) { | ||
32 | + case DEVICE: | ||
33 | + entityType = EdgeEntityType.DEVICE; | ||
34 | + break; | ||
35 | + case ASSET: | ||
36 | + entityType = EdgeEntityType.ASSET; | ||
37 | + break; | ||
38 | + default: | ||
39 | + throw new RuntimeException("Unsupported entity type [" + entityView.getEntityId().getEntityType() + "]"); | ||
57 | } | 40 | } |
58 | EntityViewUpdateMsg.Builder builder = EntityViewUpdateMsg.newBuilder() | 41 | EntityViewUpdateMsg.Builder builder = EntityViewUpdateMsg.newBuilder() |
59 | .setMsgType(msgType) | 42 | .setMsgType(msgType) |
43 | + .setIdMSB(entityView.getId().getId().getMostSignificantBits()) | ||
44 | + .setIdLSB(entityView.getId().getId().getLeastSignificantBits()) | ||
60 | .setName(entityView.getName()) | 45 | .setName(entityView.getName()) |
61 | .setType(entityView.getType()) | 46 | .setType(entityView.getType()) |
62 | - .setRelatedName(relatedName) | ||
63 | - .setRelatedType(relatedType) | ||
64 | - .setRelatedEntityType(relatedEntityType); | 47 | + .setIdMSB(entityView.getEntityId().getId().getMostSignificantBits()) |
48 | + .setIdLSB(entityView.getEntityId().getId().getLeastSignificantBits()) | ||
49 | + .setEntityType(entityType); | ||
65 | return builder.build(); | 50 | return builder.build(); |
66 | } | 51 | } |
67 | 52 |
@@ -35,6 +35,8 @@ public class UserUpdateMsgConstructor { | @@ -35,6 +35,8 @@ public class UserUpdateMsgConstructor { | ||
35 | public UserUpdateMsg constructUserUpdatedMsg(UpdateMsgType msgType, User user) { | 35 | public UserUpdateMsg constructUserUpdatedMsg(UpdateMsgType msgType, User user) { |
36 | UserUpdateMsg.Builder builder = UserUpdateMsg.newBuilder() | 36 | UserUpdateMsg.Builder builder = UserUpdateMsg.newBuilder() |
37 | .setMsgType(msgType) | 37 | .setMsgType(msgType) |
38 | + .setIdMSB(user.getId().getId().getMostSignificantBits()) | ||
39 | + .setIdLSB(user.getId().getId().getLeastSignificantBits()) | ||
38 | .setEmail(user.getEmail()) | 40 | .setEmail(user.getEmail()) |
39 | .setAuthority(user.getAuthority().name()) | 41 | .setAuthority(user.getAuthority().name()) |
40 | .setEnabled(false); | 42 | .setEnabled(false); |
@@ -141,7 +141,7 @@ public class EdgeGrpcClient implements EdgeRpcClient { | @@ -141,7 +141,7 @@ public class EdgeGrpcClient implements EdgeRpcClient { | ||
141 | log.debug("[{}] Entity update message received {}", edgeKey, responseMsg.getEntityUpdateMsg()); | 141 | log.debug("[{}] Entity update message received {}", edgeKey, responseMsg.getEntityUpdateMsg()); |
142 | onEntityUpdate.accept(responseMsg.getEntityUpdateMsg()); | 142 | onEntityUpdate.accept(responseMsg.getEntityUpdateMsg()); |
143 | } else if (responseMsg.hasDownlinkMsg()) { | 143 | } else if (responseMsg.hasDownlinkMsg()) { |
144 | - log.debug("[{}] Downlink message received for rule chain {}", edgeKey, responseMsg.getDownlinkMsg()); | 144 | + log.debug("[{}] Downlink message received {}", edgeKey, responseMsg.getDownlinkMsg()); |
145 | onDownlink.accept(responseMsg.getDownlinkMsg()); | 145 | onDownlink.accept(responseMsg.getDownlinkMsg()); |
146 | } | 146 | } |
147 | } | 147 | } |
@@ -99,7 +99,9 @@ enum UpdateMsgType { | @@ -99,7 +99,9 @@ enum UpdateMsgType { | ||
99 | message EntityDataProto { | 99 | message EntityDataProto { |
100 | string entityName = 1; | 100 | string entityName = 1; |
101 | string entityType = 2; | 101 | string entityType = 2; |
102 | - bytes tbMsg = 3; | 102 | + int64 entityIdMSB = 3; |
103 | + int64 entityIdLSB = 4; | ||
104 | + bytes tbMsg = 5; | ||
103 | } | 105 | } |
104 | 106 | ||
105 | message RuleChainUpdateMsg { | 107 | message RuleChainUpdateMsg { |
@@ -159,31 +161,37 @@ message DashboardUpdateMsg { | @@ -159,31 +161,37 @@ message DashboardUpdateMsg { | ||
159 | 161 | ||
160 | message DeviceUpdateMsg { | 162 | message DeviceUpdateMsg { |
161 | UpdateMsgType msgType = 1; | 163 | UpdateMsgType msgType = 1; |
162 | - string name = 2; | ||
163 | - string type = 3; | ||
164 | - string label = 4; | ||
165 | - string credentialsType = 5; | ||
166 | - string credentialsId = 6; | ||
167 | - string credentialsValue = 7; | ||
168 | - string groupName = 8; | 164 | + int64 idMSB = 2; |
165 | + int64 idLSB = 3; | ||
166 | + string name = 4; | ||
167 | + string type = 5; | ||
168 | + string label = 6; | ||
169 | + string credentialsType = 7; | ||
170 | + string credentialsId = 8; | ||
171 | + string credentialsValue = 9; | ||
172 | + string groupName = 10; | ||
169 | } | 173 | } |
170 | 174 | ||
171 | message AssetUpdateMsg { | 175 | message AssetUpdateMsg { |
172 | UpdateMsgType msgType = 1; | 176 | UpdateMsgType msgType = 1; |
173 | - string name = 2; | ||
174 | - string type = 3; | ||
175 | - string label = 4; | ||
176 | - string groupName = 5; | 177 | + int64 idMSB = 2; |
178 | + int64 idLSB = 3; | ||
179 | + string name = 4; | ||
180 | + string type = 5; | ||
181 | + string label = 6; | ||
182 | + string groupName = 7; | ||
177 | } | 183 | } |
178 | 184 | ||
179 | message EntityViewUpdateMsg { | 185 | message EntityViewUpdateMsg { |
180 | UpdateMsgType msgType = 1; | 186 | UpdateMsgType msgType = 1; |
181 | - string name = 2; | ||
182 | - string type = 3; | ||
183 | - string relatedName = 4; | ||
184 | - string relatedType = 5; | ||
185 | - EdgeEntityType relatedEntityType = 6; | ||
186 | - string groupName = 7; | 187 | + int64 idMSB = 2; |
188 | + int64 idLSB = 3; | ||
189 | + string name = 4; | ||
190 | + string type = 5; | ||
191 | + int64 entityIdMSB = 6; | ||
192 | + int64 entityIdLSB = 7; | ||
193 | + EdgeEntityType entityType = 8; | ||
194 | + string groupName = 9; | ||
187 | } | 195 | } |
188 | 196 | ||
189 | message AlarmUpdateMsg { | 197 | message AlarmUpdateMsg { |
@@ -220,14 +228,16 @@ message CustomerUpdateMsg { | @@ -220,14 +228,16 @@ message CustomerUpdateMsg { | ||
220 | 228 | ||
221 | message UserUpdateMsg { | 229 | message UserUpdateMsg { |
222 | UpdateMsgType msgType = 1; | 230 | UpdateMsgType msgType = 1; |
223 | - string email = 2; | ||
224 | - string authority = 3; | ||
225 | - string firstName = 4; | ||
226 | - string lastName = 5; | ||
227 | - string additionalInfo = 6; | ||
228 | - bool enabled = 7; | ||
229 | - string password = 8; | ||
230 | - string groupName = 9; | 231 | + int64 idMSB = 2; |
232 | + int64 idLSB = 3; | ||
233 | + string email = 4; | ||
234 | + string authority = 5; | ||
235 | + string firstName = 6; | ||
236 | + string lastName = 7; | ||
237 | + string additionalInfo = 8; | ||
238 | + bool enabled = 9; | ||
239 | + string password = 10; | ||
240 | + string groupName = 11; | ||
231 | } | 241 | } |
232 | 242 | ||
233 | message RuleChainMetadataRequestMsg { | 243 | message RuleChainMetadataRequestMsg { |