Use shared attributes for sparkplug devices
This commit is contained in:
parent
64908e8d66
commit
a405999a88
@ -148,6 +148,7 @@ message PostTelemetryMsg {
|
||||
|
||||
message PostAttributeMsg {
|
||||
repeated KeyValueProto kv = 1;
|
||||
bool shared = 2;
|
||||
}
|
||||
|
||||
message GetAttributeRequestMsg {
|
||||
|
||||
@ -535,7 +535,7 @@ public abstract class AbstractGatewaySessionHandler<T extends AbstractGatewayDev
|
||||
throw new IllegalArgumentException("Attributes List for device: " + deviceName + " is empty!");
|
||||
}
|
||||
try {
|
||||
TransportProtos.PostAttributeMsg postAttributeMsg = ProtoConverter.validatePostAttributeMsg(kvListProto.toByteArray());
|
||||
TransportProtos.PostAttributeMsg postAttributeMsg = ProtoConverter.validatePostAttributeMsg(kvListProto);
|
||||
processPostAttributesMsg(deviceCtx, postAttributeMsg, deviceName, msgId);
|
||||
} catch (Throwable e) {
|
||||
log.warn("[{}][{}] Failed to process device attributes command: {}", gateway.getDeviceId(), deviceName, kvListProto, e);
|
||||
|
||||
@ -173,7 +173,7 @@ public class SparkplugNodeSessionHandler extends AbstractGatewaySessionHandler<S
|
||||
public void onSuccess(@Nullable MqttDeviceAwareSessionContext deviceCtx) {
|
||||
TransportProtos.PostAttributeMsg kvListProto = attributesMsg.getMsg();
|
||||
try {
|
||||
TransportProtos.PostAttributeMsg postAttributeMsg = ProtoConverter.validatePostAttributeMsg(kvListProto.toByteArray());
|
||||
TransportProtos.PostAttributeMsg postAttributeMsg = ProtoConverter.validatePostAttributeMsg(kvListProto);
|
||||
processPostAttributesMsg(deviceCtx, postAttributeMsg, deviceName, msgId);
|
||||
} catch (Throwable e) {
|
||||
log.warn("[{}][{}] Failed to process device attributes command: {}", gateway.getDeviceId(), deviceName, kvListProto, e);
|
||||
@ -286,6 +286,7 @@ public class SparkplugNodeSessionHandler extends AbstractGatewaySessionHandler<S
|
||||
if (keyValueProtoOpt.isPresent()) {
|
||||
TransportProtos.PostAttributeMsg.Builder builder = TransportProtos.PostAttributeMsg.newBuilder();
|
||||
builder.addKv(keyValueProtoOpt.get());
|
||||
builder.setShared(true);
|
||||
return Optional.of(builder.build());
|
||||
}
|
||||
return Optional.empty();
|
||||
|
||||
@ -67,13 +67,15 @@ public class ProtoConverter {
|
||||
}
|
||||
}
|
||||
|
||||
public static TransportProtos.PostAttributeMsg validatePostAttributeMsg(byte[] bytes) throws IllegalArgumentException, InvalidProtocolBufferException {
|
||||
public static TransportProtos.PostAttributeMsg validatePostAttributeMsg(TransportProtos.PostAttributeMsg msg) throws IllegalArgumentException, InvalidProtocolBufferException {
|
||||
if (!CollectionUtils.isEmpty(msg.getKvList())) {
|
||||
byte[] bytes = msg.toByteArray();
|
||||
TransportProtos.PostAttributeMsg proto = TransportProtos.PostAttributeMsg.parseFrom(bytes);
|
||||
List<TransportProtos.KeyValueProto> kvList = proto.getKvList();
|
||||
if (!CollectionUtils.isEmpty(kvList)) {
|
||||
List<TransportProtos.KeyValueProto> keyValueProtos = validateKeyValueProtos(kvList);
|
||||
TransportProtos.PostAttributeMsg.Builder result = TransportProtos.PostAttributeMsg.newBuilder();
|
||||
result.addAllKv(keyValueProtos);
|
||||
result.setShared(msg.getShared());
|
||||
return result.build();
|
||||
} else {
|
||||
throw new IllegalArgumentException("KeyValue list is empty!");
|
||||
|
||||
@ -593,6 +593,9 @@ public class DefaultTransportService implements TransportService {
|
||||
TbMsgMetaData metaData = new TbMsgMetaData();
|
||||
metaData.putValue("deviceName", sessionInfo.getDeviceName());
|
||||
metaData.putValue("deviceType", sessionInfo.getDeviceType());
|
||||
if (msg.getShared()) {
|
||||
metaData.putValue(DataConstants.SCOPE, DataConstants.SHARED_SCOPE);
|
||||
}
|
||||
metaData.putValue(DataConstants.NOTIFY_DEVICE_METADATA_KEY, "false");
|
||||
CustomerId customerId = getCustomerId(sessionInfo);
|
||||
sendToRuleEngine(tenantId, deviceId, customerId, sessionInfo, json, metaData, SessionMsgType.POST_ATTRIBUTES_REQUEST,
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user