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