use of org.eclipse.milo.opcua.stack.core.types.structured.HistoryReadDetails in project milo by eclipse.
the class HistoryReadExampleProsys method run.
@Override
public void run(OpcUaClient client, CompletableFuture<OpcUaClient> future) throws Exception {
client.connect().get();
HistoryReadDetails historyReadDetails = new ReadRawModifiedDetails(false, DateTime.MIN_VALUE, DateTime.now(), uint(0), true);
HistoryReadValueId historyReadValueId = new HistoryReadValueId(new NodeId(3, "Counter"), null, QualifiedName.NULL_VALUE, ByteString.NULL_VALUE);
List<HistoryReadValueId> nodesToRead = new ArrayList<>();
nodesToRead.add(historyReadValueId);
HistoryReadResponse historyReadResponse = client.historyRead(historyReadDetails, TimestampsToReturn.Both, false, nodesToRead).get();
HistoryReadResult[] historyReadResults = historyReadResponse.getResults();
if (historyReadResults != null) {
HistoryReadResult historyReadResult = historyReadResults[0];
StatusCode statusCode = historyReadResult.getStatusCode();
if (statusCode.isGood()) {
HistoryData historyData = (HistoryData) historyReadResult.getHistoryData().decode(client.getStaticSerializationContext());
List<DataValue> dataValues = l(historyData.getDataValues());
dataValues.forEach(v -> System.out.println("value=" + v));
} else {
System.out.println("History read failed: " + statusCode);
}
}
future.complete(client);
}
use of org.eclipse.milo.opcua.stack.core.types.structured.HistoryReadDetails in project milo by eclipse.
the class DefaultAttributeHistoryServiceSet method onHistoryRead.
@Override
public void onHistoryRead(ServiceRequest service) {
historyReadMetric.record(service);
HistoryReadRequest request = (HistoryReadRequest) service.getRequest();
OpcUaServer server = service.attr(ServiceAttributes.SERVER_KEY).get();
Session session = service.attr(ServiceAttributes.SESSION_KEY).get();
List<HistoryReadValueId> nodesToRead = l(request.getNodesToRead());
if (nodesToRead.isEmpty()) {
service.setServiceFault(StatusCodes.Bad_NothingToDo);
return;
}
if (nodesToRead.size() > server.getConfig().getLimits().getMaxNodesPerRead().longValue()) {
service.setServiceFault(StatusCodes.Bad_TooManyOperations);
return;
}
if (request.getTimestampsToReturn() == null) {
service.setServiceFault(StatusCodes.Bad_TimestampsToReturnInvalid);
return;
}
DiagnosticsContext<HistoryReadValueId> diagnosticsContext = new DiagnosticsContext<>();
HistoryReadContext context = new HistoryReadContext(server, session, diagnosticsContext);
HistoryReadDetails details = (HistoryReadDetails) request.getHistoryReadDetails().decode(server.getSerializationContext());
server.getAddressSpaceManager().historyRead(context, details, request.getTimestampsToReturn(), nodesToRead);
context.getFuture().thenAccept(values -> {
ResponseHeader header = service.createResponseHeader();
DiagnosticInfo[] diagnosticInfos = diagnosticsContext.getDiagnosticInfos(nodesToRead);
HistoryReadResponse response = new HistoryReadResponse(header, a(values, HistoryReadResult.class), diagnosticInfos);
service.setResponse(response);
});
}
Aggregations