Fixed serialization of DeviceData, SnmpMapping. Added deviceDataBytes into edge.proto DeviceUpdateMsg
This commit is contained in:
		
							parent
							
								
									dea933d906
								
							
						
					
					
						commit
						9b47ed4633
					
				@ -16,7 +16,8 @@
 | 
			
		||||
package org.thingsboard.server.service.edge.rpc.constructor;
 | 
			
		||||
 | 
			
		||||
import com.fasterxml.jackson.databind.JsonNode;
 | 
			
		||||
import com.fasterxml.jackson.databind.ObjectMapper;
 | 
			
		||||
import com.google.protobuf.ByteString;
 | 
			
		||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
			
		||||
import org.springframework.stereotype.Component;
 | 
			
		||||
import org.thingsboard.common.util.JacksonUtil;
 | 
			
		||||
import org.thingsboard.server.common.data.Device;
 | 
			
		||||
@ -28,6 +29,7 @@ import org.thingsboard.server.gen.edge.v1.DeviceRpcCallMsg;
 | 
			
		||||
import org.thingsboard.server.gen.edge.v1.DeviceUpdateMsg;
 | 
			
		||||
import org.thingsboard.server.gen.edge.v1.RpcRequestMsg;
 | 
			
		||||
import org.thingsboard.server.gen.edge.v1.UpdateMsgType;
 | 
			
		||||
import org.thingsboard.server.queue.util.DataDecodingEncodingService;
 | 
			
		||||
import org.thingsboard.server.queue.util.TbCoreComponent;
 | 
			
		||||
 | 
			
		||||
import java.util.UUID;
 | 
			
		||||
@ -36,7 +38,8 @@ import java.util.UUID;
 | 
			
		||||
@TbCoreComponent
 | 
			
		||||
public class DeviceMsgConstructor {
 | 
			
		||||
 | 
			
		||||
    protected static final ObjectMapper mapper = new ObjectMapper();
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private DataDecodingEncodingService dataDecodingEncodingService;
 | 
			
		||||
 | 
			
		||||
    public DeviceUpdateMsg constructDeviceUpdatedMsg(UpdateMsgType msgType, Device device, CustomerId customerId, String conflictName) {
 | 
			
		||||
        DeviceUpdateMsg.Builder builder = DeviceUpdateMsg.newBuilder()
 | 
			
		||||
@ -66,6 +69,9 @@ public class DeviceMsgConstructor {
 | 
			
		||||
        if (conflictName != null) {
 | 
			
		||||
            builder.setConflictName(conflictName);
 | 
			
		||||
        }
 | 
			
		||||
        if (device.getDeviceData() != null) {
 | 
			
		||||
            builder.setDeviceDataBytes(ByteString.copyFrom(dataDecodingEncodingService.encode(device.getDeviceData())));
 | 
			
		||||
        }
 | 
			
		||||
        return builder.build();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -22,6 +22,7 @@ import com.google.common.util.concurrent.Futures;
 | 
			
		||||
import com.google.common.util.concurrent.ListenableFuture;
 | 
			
		||||
import com.google.common.util.concurrent.SettableFuture;
 | 
			
		||||
import lombok.extern.slf4j.Slf4j;
 | 
			
		||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
			
		||||
import org.springframework.stereotype.Component;
 | 
			
		||||
import org.thingsboard.common.util.JacksonUtil;
 | 
			
		||||
import org.thingsboard.server.common.data.Customer;
 | 
			
		||||
@ -29,6 +30,7 @@ import org.thingsboard.server.common.data.DataConstants;
 | 
			
		||||
import org.thingsboard.server.common.data.Device;
 | 
			
		||||
import org.thingsboard.server.common.data.EdgeUtils;
 | 
			
		||||
import org.thingsboard.server.common.data.StringUtils;
 | 
			
		||||
import org.thingsboard.server.common.data.device.data.DeviceData;
 | 
			
		||||
import org.thingsboard.server.common.data.edge.Edge;
 | 
			
		||||
import org.thingsboard.server.common.data.edge.EdgeEvent;
 | 
			
		||||
import org.thingsboard.server.common.data.edge.EdgeEventActionType;
 | 
			
		||||
@ -59,9 +61,11 @@ import org.thingsboard.server.gen.edge.v1.DownlinkMsg;
 | 
			
		||||
import org.thingsboard.server.gen.edge.v1.UpdateMsgType;
 | 
			
		||||
import org.thingsboard.server.queue.TbQueueCallback;
 | 
			
		||||
import org.thingsboard.server.queue.TbQueueMsgMetadata;
 | 
			
		||||
import org.thingsboard.server.queue.util.DataDecodingEncodingService;
 | 
			
		||||
import org.thingsboard.server.queue.util.TbCoreComponent;
 | 
			
		||||
import org.thingsboard.server.service.rpc.FromDeviceRpcResponseActorMsg;
 | 
			
		||||
 | 
			
		||||
import java.util.Optional;
 | 
			
		||||
import java.util.UUID;
 | 
			
		||||
import java.util.concurrent.locks.ReentrantLock;
 | 
			
		||||
 | 
			
		||||
@ -70,6 +74,9 @@ import java.util.concurrent.locks.ReentrantLock;
 | 
			
		||||
@TbCoreComponent
 | 
			
		||||
public class DeviceEdgeProcessor extends BaseEdgeProcessor {
 | 
			
		||||
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private DataDecodingEncodingService dataDecodingEncodingService;
 | 
			
		||||
 | 
			
		||||
    private static final ReentrantLock deviceCreationLock = new ReentrantLock();
 | 
			
		||||
 | 
			
		||||
    public ListenableFuture<Void> processDeviceFromEdge(TenantId tenantId, Edge edge, DeviceUpdateMsg deviceUpdateMsg) {
 | 
			
		||||
@ -191,6 +198,11 @@ public class DeviceEdgeProcessor extends BaseEdgeProcessor {
 | 
			
		||||
                                deviceUpdateMsg.getDeviceProfileIdLSB()));
 | 
			
		||||
                device.setDeviceProfileId(deviceProfileId);
 | 
			
		||||
            }
 | 
			
		||||
            Optional<DeviceData> deviceDataOpt =
 | 
			
		||||
                    dataDecodingEncodingService.decode(deviceUpdateMsg.getDeviceDataBytes().toByteArray());
 | 
			
		||||
            if (deviceDataOpt.isPresent()) {
 | 
			
		||||
                device.setDeviceData(deviceDataOpt.get());
 | 
			
		||||
            }
 | 
			
		||||
            Device savedDevice = deviceService.saveDevice(device);
 | 
			
		||||
            tbClusterService.onDeviceUpdated(savedDevice, device);
 | 
			
		||||
            return saveEdgeEvent(tenantId, edge.getId(), EdgeEventType.DEVICE, EdgeEventActionType.CREDENTIALS_REQUEST, deviceId, null);
 | 
			
		||||
@ -231,6 +243,11 @@ public class DeviceEdgeProcessor extends BaseEdgeProcessor {
 | 
			
		||||
                                deviceUpdateMsg.getDeviceProfileIdLSB()));
 | 
			
		||||
                device.setDeviceProfileId(deviceProfileId);
 | 
			
		||||
            }
 | 
			
		||||
            Optional<DeviceData> deviceDataOpt =
 | 
			
		||||
                    dataDecodingEncodingService.decode(deviceUpdateMsg.getDeviceDataBytes().toByteArray());
 | 
			
		||||
            if (deviceDataOpt.isPresent()) {
 | 
			
		||||
                device.setDeviceData(deviceDataOpt.get());
 | 
			
		||||
            }
 | 
			
		||||
            if (created) {
 | 
			
		||||
                deviceValidator.validate(device, Device::getTenantId);
 | 
			
		||||
                device.setId(deviceId);
 | 
			
		||||
 | 
			
		||||
@ -22,6 +22,8 @@ import com.fasterxml.jackson.annotation.JsonTypeInfo;
 | 
			
		||||
import io.swagger.annotations.ApiModel;
 | 
			
		||||
import org.thingsboard.server.common.data.DeviceProfileType;
 | 
			
		||||
 | 
			
		||||
import java.io.Serializable;
 | 
			
		||||
 | 
			
		||||
@ApiModel
 | 
			
		||||
@JsonIgnoreProperties(ignoreUnknown = true)
 | 
			
		||||
@JsonTypeInfo(
 | 
			
		||||
@ -30,7 +32,7 @@ import org.thingsboard.server.common.data.DeviceProfileType;
 | 
			
		||||
        property = "type")
 | 
			
		||||
@JsonSubTypes({
 | 
			
		||||
        @JsonSubTypes.Type(value = DefaultDeviceConfiguration.class, name = "DEFAULT")})
 | 
			
		||||
public interface DeviceConfiguration {
 | 
			
		||||
public interface DeviceConfiguration extends Serializable {
 | 
			
		||||
 | 
			
		||||
    @JsonIgnore
 | 
			
		||||
    DeviceProfileType getType();
 | 
			
		||||
 | 
			
		||||
@ -19,9 +19,11 @@ import io.swagger.annotations.ApiModel;
 | 
			
		||||
import io.swagger.annotations.ApiModelProperty;
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
 | 
			
		||||
import java.io.Serializable;
 | 
			
		||||
 | 
			
		||||
@ApiModel
 | 
			
		||||
@Data
 | 
			
		||||
public class DeviceData {
 | 
			
		||||
public class DeviceData implements Serializable {
 | 
			
		||||
 | 
			
		||||
    @ApiModelProperty(position = 1, value = "Device configuration for device profile type. DEFAULT is only supported value for now")
 | 
			
		||||
    private DeviceConfiguration configuration;
 | 
			
		||||
 | 
			
		||||
@ -22,12 +22,13 @@ import lombok.NoArgsConstructor;
 | 
			
		||||
import org.thingsboard.server.common.data.StringUtils;
 | 
			
		||||
import org.thingsboard.server.common.data.kv.DataType;
 | 
			
		||||
 | 
			
		||||
import java.io.Serializable;
 | 
			
		||||
import java.util.regex.Pattern;
 | 
			
		||||
 | 
			
		||||
@Data
 | 
			
		||||
@AllArgsConstructor
 | 
			
		||||
@NoArgsConstructor
 | 
			
		||||
public class SnmpMapping {
 | 
			
		||||
public class SnmpMapping implements Serializable {
 | 
			
		||||
    private String oid;
 | 
			
		||||
    private String key;
 | 
			
		||||
    private DataType dataType;
 | 
			
		||||
 | 
			
		||||
@ -28,6 +28,7 @@ import org.thingsboard.server.common.data.transport.snmp.config.impl.SharedAttri
 | 
			
		||||
import org.thingsboard.server.common.data.transport.snmp.config.impl.TelemetryQueryingSnmpCommunicationConfig;
 | 
			
		||||
import org.thingsboard.server.common.data.transport.snmp.config.impl.ToDeviceRpcRequestSnmpCommunicationConfig;
 | 
			
		||||
 | 
			
		||||
import java.io.Serializable;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
@JsonIgnoreProperties(ignoreUnknown = true)
 | 
			
		||||
@ -38,7 +39,7 @@ import java.util.List;
 | 
			
		||||
        @Type(value = SharedAttributesSettingSnmpCommunicationConfig.class, name = "SHARED_ATTRIBUTES_SETTING"),
 | 
			
		||||
        @Type(value = ToDeviceRpcRequestSnmpCommunicationConfig.class, name = "TO_DEVICE_RPC_REQUEST")
 | 
			
		||||
})
 | 
			
		||||
public interface SnmpCommunicationConfig {
 | 
			
		||||
public interface SnmpCommunicationConfig extends Serializable {
 | 
			
		||||
 | 
			
		||||
    SnmpCommunicationSpec getSpec();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -200,6 +200,7 @@ message DeviceUpdateMsg {
 | 
			
		||||
  optional string conflictName = 12;
 | 
			
		||||
  optional int64 firmwareIdMSB = 13;
 | 
			
		||||
  optional int64 firmwareIdLSB = 14;
 | 
			
		||||
  optional bytes deviceDataBytes = 15;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
message DeviceProfileUpdateMsg {
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user