Fix for notification to the devices when shared attribute is saved via rule engine
This commit is contained in:
		
							parent
							
								
									9586569386
								
							
						
					
					
						commit
						291634c10f
					
				@ -24,12 +24,15 @@ import org.springframework.beans.factory.annotation.Autowired;
 | 
				
			|||||||
import org.springframework.context.annotation.Lazy;
 | 
					import org.springframework.context.annotation.Lazy;
 | 
				
			||||||
import org.springframework.stereotype.Service;
 | 
					import org.springframework.stereotype.Service;
 | 
				
			||||||
import org.springframework.util.StringUtils;
 | 
					import org.springframework.util.StringUtils;
 | 
				
			||||||
 | 
					import org.thingsboard.rule.engine.api.msg.DeviceAttributesEventNotificationMsg;
 | 
				
			||||||
import org.thingsboard.rule.engine.api.util.DonAsynchron;
 | 
					import org.thingsboard.rule.engine.api.util.DonAsynchron;
 | 
				
			||||||
 | 
					import org.thingsboard.server.actors.service.ActorService;
 | 
				
			||||||
import org.thingsboard.server.common.data.DataConstants;
 | 
					import org.thingsboard.server.common.data.DataConstants;
 | 
				
			||||||
import org.thingsboard.server.common.data.EntityType;
 | 
					import org.thingsboard.server.common.data.EntityType;
 | 
				
			||||||
import org.thingsboard.server.common.data.id.DeviceId;
 | 
					import org.thingsboard.server.common.data.id.DeviceId;
 | 
				
			||||||
import org.thingsboard.server.common.data.id.EntityId;
 | 
					import org.thingsboard.server.common.data.id.EntityId;
 | 
				
			||||||
import org.thingsboard.server.common.data.id.EntityIdFactory;
 | 
					import org.thingsboard.server.common.data.id.EntityIdFactory;
 | 
				
			||||||
 | 
					import org.thingsboard.server.common.data.id.TenantId;
 | 
				
			||||||
import org.thingsboard.server.common.data.kv.AttributeKvEntry;
 | 
					import org.thingsboard.server.common.data.kv.AttributeKvEntry;
 | 
				
			||||||
import org.thingsboard.server.common.data.kv.BaseAttributeKvEntry;
 | 
					import org.thingsboard.server.common.data.kv.BaseAttributeKvEntry;
 | 
				
			||||||
import org.thingsboard.server.common.data.kv.BaseTsKvQuery;
 | 
					import org.thingsboard.server.common.data.kv.BaseTsKvQuery;
 | 
				
			||||||
@ -42,6 +45,7 @@ import org.thingsboard.server.common.data.kv.LongDataEntry;
 | 
				
			|||||||
import org.thingsboard.server.common.data.kv.StringDataEntry;
 | 
					import org.thingsboard.server.common.data.kv.StringDataEntry;
 | 
				
			||||||
import org.thingsboard.server.common.data.kv.TsKvEntry;
 | 
					import org.thingsboard.server.common.data.kv.TsKvEntry;
 | 
				
			||||||
import org.thingsboard.server.common.data.kv.TsKvQuery;
 | 
					import org.thingsboard.server.common.data.kv.TsKvQuery;
 | 
				
			||||||
 | 
					import org.thingsboard.server.common.msg.cluster.SendToClusterMsg;
 | 
				
			||||||
import org.thingsboard.server.common.msg.cluster.ServerAddress;
 | 
					import org.thingsboard.server.common.msg.cluster.ServerAddress;
 | 
				
			||||||
import org.thingsboard.server.dao.attributes.AttributesService;
 | 
					import org.thingsboard.server.dao.attributes.AttributesService;
 | 
				
			||||||
import org.thingsboard.server.dao.timeseries.TimeseriesService;
 | 
					import org.thingsboard.server.dao.timeseries.TimeseriesService;
 | 
				
			||||||
@ -101,6 +105,10 @@ public class DefaultTelemetrySubscriptionService implements TelemetrySubscriptio
 | 
				
			|||||||
    @Lazy
 | 
					    @Lazy
 | 
				
			||||||
    private DeviceStateService stateService;
 | 
					    private DeviceStateService stateService;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Autowired
 | 
				
			||||||
 | 
					    @Lazy
 | 
				
			||||||
 | 
					    private ActorService actorService;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private ExecutorService tsCallBackExecutor;
 | 
					    private ExecutorService tsCallBackExecutor;
 | 
				
			||||||
    private ExecutorService wsCallBackExecutor;
 | 
					    private ExecutorService wsCallBackExecutor;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -203,6 +211,13 @@ public class DefaultTelemetrySubscriptionService implements TelemetrySubscriptio
 | 
				
			|||||||
                , System.currentTimeMillis())), callback);
 | 
					                , System.currentTimeMillis())), callback);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public void onSharedAttributesUpdate(TenantId tenantId, DeviceId deviceId, Set<AttributeKvEntry> attributes) {
 | 
				
			||||||
 | 
					        DeviceAttributesEventNotificationMsg notificationMsg = DeviceAttributesEventNotificationMsg.onUpdate(tenantId,
 | 
				
			||||||
 | 
					                deviceId, DataConstants.SHARED_SCOPE, new ArrayList<>(attributes));
 | 
				
			||||||
 | 
					        actorService.onMsg(new SendToClusterMsg(deviceId, notificationMsg));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    public void onNewRemoteSubscription(ServerAddress serverAddress, byte[] data) {
 | 
					    public void onNewRemoteSubscription(ServerAddress serverAddress, byte[] data) {
 | 
				
			||||||
        ClusterAPIProtos.SubscriptionProto proto;
 | 
					        ClusterAPIProtos.SubscriptionProto proto;
 | 
				
			||||||
 | 
				
			|||||||
@ -16,11 +16,14 @@
 | 
				
			|||||||
package org.thingsboard.rule.engine.api;
 | 
					package org.thingsboard.rule.engine.api;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import com.google.common.util.concurrent.FutureCallback;
 | 
					import com.google.common.util.concurrent.FutureCallback;
 | 
				
			||||||
 | 
					import org.thingsboard.server.common.data.id.DeviceId;
 | 
				
			||||||
import org.thingsboard.server.common.data.id.EntityId;
 | 
					import org.thingsboard.server.common.data.id.EntityId;
 | 
				
			||||||
 | 
					import org.thingsboard.server.common.data.id.TenantId;
 | 
				
			||||||
import org.thingsboard.server.common.data.kv.AttributeKvEntry;
 | 
					import org.thingsboard.server.common.data.kv.AttributeKvEntry;
 | 
				
			||||||
import org.thingsboard.server.common.data.kv.TsKvEntry;
 | 
					import org.thingsboard.server.common.data.kv.TsKvEntry;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import java.util.List;
 | 
					import java.util.List;
 | 
				
			||||||
 | 
					import java.util.Set;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Created by ashvayka on 02.04.18.
 | 
					 * Created by ashvayka on 02.04.18.
 | 
				
			||||||
@ -41,4 +44,6 @@ public interface RuleEngineTelemetryService {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    void saveAttrAndNotify(EntityId entityId, String scope, String key, boolean value, FutureCallback<Void> callback);
 | 
					    void saveAttrAndNotify(EntityId entityId, String scope, String key, boolean value, FutureCallback<Void> callback);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    void onSharedAttributesUpdate(TenantId tenantId, DeviceId deviceId, Set<AttributeKvEntry> attributes);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -17,12 +17,15 @@ package org.thingsboard.rule.engine.telemetry;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import com.google.gson.JsonParser;
 | 
					import com.google.gson.JsonParser;
 | 
				
			||||||
import lombok.extern.slf4j.Slf4j;
 | 
					import lombok.extern.slf4j.Slf4j;
 | 
				
			||||||
import org.thingsboard.rule.engine.api.util.TbNodeUtils;
 | 
					 | 
				
			||||||
import org.thingsboard.rule.engine.api.RuleNode;
 | 
					import org.thingsboard.rule.engine.api.RuleNode;
 | 
				
			||||||
import org.thingsboard.rule.engine.api.TbContext;
 | 
					import org.thingsboard.rule.engine.api.TbContext;
 | 
				
			||||||
import org.thingsboard.rule.engine.api.TbNode;
 | 
					import org.thingsboard.rule.engine.api.TbNode;
 | 
				
			||||||
import org.thingsboard.rule.engine.api.TbNodeConfiguration;
 | 
					import org.thingsboard.rule.engine.api.TbNodeConfiguration;
 | 
				
			||||||
import org.thingsboard.rule.engine.api.TbNodeException;
 | 
					import org.thingsboard.rule.engine.api.TbNodeException;
 | 
				
			||||||
 | 
					import org.thingsboard.rule.engine.api.util.TbNodeUtils;
 | 
				
			||||||
 | 
					import org.thingsboard.server.common.data.DataConstants;
 | 
				
			||||||
 | 
					import org.thingsboard.server.common.data.EntityType;
 | 
				
			||||||
 | 
					import org.thingsboard.server.common.data.id.DeviceId;
 | 
				
			||||||
import org.thingsboard.server.common.data.kv.AttributeKvEntry;
 | 
					import org.thingsboard.server.common.data.kv.AttributeKvEntry;
 | 
				
			||||||
import org.thingsboard.server.common.data.plugin.ComponentType;
 | 
					import org.thingsboard.server.common.data.plugin.ComponentType;
 | 
				
			||||||
import org.thingsboard.server.common.msg.TbMsg;
 | 
					import org.thingsboard.server.common.msg.TbMsg;
 | 
				
			||||||
@ -62,6 +65,9 @@ public class TbMsgAttributesNode implements TbNode {
 | 
				
			|||||||
        String src = msg.getData();
 | 
					        String src = msg.getData();
 | 
				
			||||||
        Set<AttributeKvEntry> attributes = JsonConverter.convertToAttributes(new JsonParser().parse(src)).getAttributes();
 | 
					        Set<AttributeKvEntry> attributes = JsonConverter.convertToAttributes(new JsonParser().parse(src)).getAttributes();
 | 
				
			||||||
        ctx.getTelemetryService().saveAndNotify(msg.getOriginator(), config.getScope(), new ArrayList<>(attributes), new TelemetryNodeCallback(ctx, msg));
 | 
					        ctx.getTelemetryService().saveAndNotify(msg.getOriginator(), config.getScope(), new ArrayList<>(attributes), new TelemetryNodeCallback(ctx, msg));
 | 
				
			||||||
 | 
					        if (msg.getOriginator().getEntityType() == EntityType.DEVICE && DataConstants.SHARED_SCOPE.equals(config.getScope())) {
 | 
				
			||||||
 | 
					            ctx.getTelemetryService().onSharedAttributesUpdate(ctx.getTenantId(), new DeviceId(msg.getOriginator().getId()), attributes);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user