can anyone help me out regarding event filtering on client side and give me an example? I followed the instructions in the client tutorial, but so far without success. On server side, I produce every second a new event from type 'MessageEventType'. In the UaExpert, I can find them under SimpleEvents, just beside SystemEventType, BaseModelChangeEventType and so on. What should I fill in the filter argument:
Code: Select all
...
UaEventFilter eventFilter;
UaSimpleAttributeOperand selectElement;
UaContentFilter* pContentFilter = NULL;
UaContentFilterElement* pContentFilterElement = NULL;
UaFilterOperand* pOperand = NULL;
requests[0].ItemToMonitor.AttributeId = OpcUa_Attributes_EventNotifier;
requests[0].ItemToMonitor.NodeId.Identifier.Numeric = OpcUaId_Server;
requests[0].RequestedParameters.ClientHandle = 0;
requests[0].RequestedParameters.SamplingInterval = 0;
requests[0].RequestedParameters.QueueSize = 0;
requests[0].MonitoringMode = OpcUa_MonitoringMode_Reporting;
requests[0].RequestedParameters.DiscardOldest = OpcUa_True;
// Define which eventfields to send with each event
selectElement.setBrowsePathElement(0, UaQualifiedName("Message", 0), 1);
eventFilter.setSelectClauseElement(0, selectElement, 3);
selectElement.setBrowsePathElement(0, UaQualifiedName("SourceName", 0), 1);
eventFilter.setSelectClauseElement(1, selectElement, 3);
selectElement.setBrowsePathElement(0, UaQualifiedName("Severity", 0), 1);
eventFilter.setSelectClauseElement(2, selectElement, 3);
pContentFilter = new UaContentFilter;
pContentFilterElement = new UaContentFilterElement;
// Operator OfType
pContentFilterElement->setFilterOperator(OpcUa_FilterOperator_OfType);
// Operand 1 (Literal)
pOperand = new UaLiteralOperand;
UaVariant vent_type_filter;
QtUaConverter().convertQtValue(vent_type_name, vent_type_filter);
((UaLiteralOperand*)pOperand)->setLiteralValue(vent_type_filter);
pContentFilterElement->setFilterOperand(0, pOperand, 1);
pContentFilter->setContentFilterElement(0, pContentFilterElement, 1);
eventFilter.setWhereClause(pContentFilter);
// set filter for monitored items
eventFilter.detachFilter(requests[0].RequestedParameters.Filter);
...