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