use of org.eclipse.milo.opcua.stack.core.types.builtin.ExtensionObject in project milo by eclipse.
the class OpcUaBinaryStreamEncoder method writeValue.
// endregion
private void writeValue(Object value, int typeId, boolean structure, boolean enumeration) {
if (structure) {
UaStructure struct = (UaStructure) value;
ExtensionObject extensionObject = ExtensionObject.encode(context, struct);
writeBuiltinType(typeId, extensionObject);
} else if (enumeration) {
writeBuiltinType(typeId, ((UaEnumeration) value).getValue());
} else {
writeBuiltinType(typeId, value);
}
}
use of org.eclipse.milo.opcua.stack.core.types.builtin.ExtensionObject in project tech-pdai-spring-demos by realpdai.
the class ExampleNamespace method addCustomUnionTypeVariable.
private void addCustomUnionTypeVariable(UaFolderNode rootFolder) throws Exception {
NodeId dataTypeId = CustomUnionType.TYPE_ID.toNodeIdOrThrow(getServer().getNamespaceTable());
NodeId binaryEncodingId = CustomUnionType.BINARY_ENCODING_ID.toNodeIdOrThrow(getServer().getNamespaceTable());
UaVariableNode customUnionTypeVariable = UaVariableNode.builder(getNodeContext()).setNodeId(newNodeId("HelloWorld/CustomUnionTypeVariable")).setAccessLevel(AccessLevel.READ_WRITE).setUserAccessLevel(AccessLevel.READ_WRITE).setBrowseName(newQualifiedName("CustomUnionTypeVariable")).setDisplayName(LocalizedText.english("CustomUnionTypeVariable")).setDataType(dataTypeId).setTypeDefinition(Identifiers.BaseDataVariableType).build();
CustomUnionType value = CustomUnionType.ofBar("hello");
ExtensionObject xo = ExtensionObject.encodeDefaultBinary(getServer().getSerializationContext(), value, binaryEncodingId);
customUnionTypeVariable.setValue(new DataValue(new Variant(xo)));
getNodeManager().addNode(customUnionTypeVariable);
customUnionTypeVariable.addReference(new Reference(customUnionTypeVariable.getNodeId(), Identifiers.Organizes, rootFolder.getNodeId().expanded(), false));
}
use of org.eclipse.milo.opcua.stack.core.types.builtin.ExtensionObject in project tech-pdai-spring-demos by realpdai.
the class ExampleNamespace method addCustomStructTypeVariable.
private void addCustomStructTypeVariable(UaFolderNode rootFolder) throws Exception {
NodeId dataTypeId = CustomStructType.TYPE_ID.toNodeIdOrThrow(getServer().getNamespaceTable());
NodeId binaryEncodingId = CustomStructType.BINARY_ENCODING_ID.toNodeIdOrThrow(getServer().getNamespaceTable());
UaVariableNode customStructTypeVariable = UaVariableNode.builder(getNodeContext()).setNodeId(newNodeId("HelloWorld/CustomStructTypeVariable")).setAccessLevel(AccessLevel.READ_WRITE).setUserAccessLevel(AccessLevel.READ_WRITE).setBrowseName(newQualifiedName("CustomStructTypeVariable")).setDisplayName(LocalizedText.english("CustomStructTypeVariable")).setDataType(dataTypeId).setTypeDefinition(Identifiers.BaseDataVariableType).build();
CustomStructType value = new CustomStructType("foo", uint(42), true);
ExtensionObject xo = ExtensionObject.encodeDefaultBinary(getServer().getSerializationContext(), value, binaryEncodingId);
customStructTypeVariable.setValue(new DataValue(new Variant(xo)));
getNodeManager().addNode(customStructTypeVariable);
customStructTypeVariable.addReference(new Reference(customStructTypeVariable.getNodeId(), Identifiers.Organizes, rootFolder.getNodeId().expanded(), false));
}
use of org.eclipse.milo.opcua.stack.core.types.builtin.ExtensionObject in project tech-pdai-spring-demos by realpdai.
the class OpcUaClientServiceImpl method retrieveCustomHistoryData.
/**
* retrieve custom type history data.
*
* @param historyReadValueId node id
* @return data
* @throws java.security.UnrecoverableKeyException UnrecoverableKey Exception
* @throws org.eclipse.milo.opcua.stack.core.UaException Ua Exception
* @throws java.security.cert.CertificateException Certificate Exception
* @throws java.io.IOException IO Exception
* @throws java.security.KeyStoreException KeyStore Exception
* @throws java.security.NoSuchAlgorithmException NoSuchAlgorithm Exception
* @throws java.util.concurrent.ExecutionException Execution Exception
* @throws InterruptedException Interrupted Exception
*/
@Override
public List<CustomStructType> retrieveCustomHistoryData(HistoryReadValueId historyReadValueId) throws UnrecoverableKeyException, UaException, CertificateException, IOException, KeyStoreException, NoSuchAlgorithmException, ExecutionException, InterruptedException {
log.info("trying to get custom data from node {}", historyReadValueId);
OpcUaClient opcClient = getOpcUaClient();
try {
// connect
log.info("connect to opc server");
opcClient.addSessionInitializer(new DataTypeDictionarySessionInitializer(new GenericBsdParser()));
opcClient.connect().get();
// read history
HistoryReadResponse historyReadResponse = opcClient.historyRead(new ReadRawModifiedDetails(false, DateTime.MIN_VALUE, DateTime.now(), uint(0), true), TimestampsToReturn.Both, false, Collections.singletonList(historyReadValueId)).get();
// register custom codec
log.info("register custom codec");
registerCustomCodec(opcClient);
// parse result
log.info("parse history data result");
HistoryReadResult[] historyReadResults = historyReadResponse.getResults();
if (historyReadResults != null) {
HistoryReadResult historyReadResult = historyReadResults[0];
StatusCode statusCode = historyReadResult.getStatusCode();
// check if status code is good
if (statusCode.isGood()) {
HistoryData historyData = (HistoryData) historyReadResult.getHistoryData().decode(opcClient.getStaticSerializationContext());
// parse node value to custom type
return l(historyData.getDataValues()).stream().map(value -> {
log.info("Value={}", value);
Variant variant = value.getValue();
ExtensionObject xo = (ExtensionObject) variant.getValue();
// decode value
CustomStructType decoded = (CustomStructType) xo.decode(opcClient.getStaticSerializationContext());
log.info("Decoded={}", decoded);
return decoded;
}).collect(Collectors.toList());
} else {
log.error("History read failed: {}", statusCode);
}
}
return new ArrayList<>();
} finally {
opcClient.disconnect();
}
}
use of org.eclipse.milo.opcua.stack.core.types.builtin.ExtensionObject in project tech-pdai-spring-demos by realpdai.
the class OpcUaClientServiceImpl method retrieveCustomData.
/**
* retrieve custom type data.
*
* @param nodeId node id
* @return data
* @throws java.security.UnrecoverableKeyException UnrecoverableKey Exception
* @throws UaException Ua Exception
* @throws java.security.cert.CertificateException Certificate Exception
* @throws java.io.IOException IO Exception
* @throws java.security.KeyStoreException KeyStore Exception
* @throws java.security.NoSuchAlgorithmException NoSuchAlgorithm Exception
* @throws java.util.concurrent.ExecutionException Execution Exception
* @throws InterruptedException Interrupted Exception
*/
@Override
public CustomStructType retrieveCustomData(NodeId nodeId) throws UnrecoverableKeyException, UaException, CertificateException, IOException, KeyStoreException, NoSuchAlgorithmException, ExecutionException, InterruptedException {
log.info("trying to get custom data from node {}", nodeId);
OpcUaClient opcClient = getOpcUaClient();
try {
// connect
log.info("connect to opc server");
opcClient.addSessionInitializer(new DataTypeDictionarySessionInitializer(new GenericBsdParser()));
opcClient.connect().get();
// register custom codec
log.info("register custom codec");
registerCustomCodec(opcClient);
// synchronous read request via VariableNode
UaVariableNode node = opcClient.getAddressSpace().getVariableNode(nodeId);
log.info("DataType={}", node.getDataType());
// Read the current value
log.info("trying to read value form NodeId");
DataValue value = node.readValue();
log.info("Value={}", value);
Variant variant = value.getValue();
ExtensionObject xo = (ExtensionObject) variant.getValue();
// decode value
CustomStructType decoded = (CustomStructType) xo.decode(opcClient.getStaticSerializationContext());
log.info("Decoded={}", decoded);
return decoded;
} finally {
opcClient.disconnect();
}
}
Aggregations