I want to add some data to my event on a opcua server using open62541
What worked so far:
I added a new Event to BaseEventType.
I can send severity and time from my server to OpcUaExpert
My Issue :
I want to add a property for example “TemperatureEvent” to my event type “CustomEvent”.
OpcUaExpert shows this property in the address space Root – Types – EventTypes but I cannot see the value of the temperature in the eventView.
Pictures OpcUA Expert:
enter image description here
MyServerCode:
addObjectTypeNode and addVariableNode to my Event “CustomEvent”
UA_ObjectTypeAttributes attr = UA_ObjectTypeAttributes_default;
attr.displayName = UA_LOCALIZEDTEXT("en-US", "CustomEvent");
attr.description = UA_LOCALIZEDTEXT("en-US", "Event for ...");
UA_Server_addObjectTypeNode(server, UA_NODEID_NULL, UA_NODEID_NUMERIC(0, UA_NS0ID_BASEEVENTTYPE),
UA_NODEID_NUMERIC(0, UA_NS0ID_HASSUBTYPE),
UA_QUALIFIEDNAME(NamespaceIndex, "CustomEvent"), attr, NULL, &eventType);
// Add Temperature field to the event type
UA_VariableAttributes temperatureAttr = UA_VariableAttributes_default;
temperatureAttr.displayName = UA_LOCALIZEDTEXT("en-US", "TemperatureEvent");
temperatureAttr.dataType = UA_TYPES[UA_TYPES_DOUBLE].typeId;
UA_NodeId temperatureAttrId;
UA_Server_addVariableNode(server, UA_NODEID_NULL, eventType, UA_NODEID_NUMERIC(0, UA_NS0ID_HASPROPERTY),
UA_QUALIFIEDNAME(NamespaceIndex, "TemperatureEvent"),
UA_NODEID_NUMERIC(0, UA_NS0ID_PROPERTYTYPE), temperatureAttr, NULL, NULL);
std::thread threadObjTriggerEvent(threadTriggerEvent, server);
Trigger the event in a thread (executed every x seconds)
UA_NodeId eventNodeId;
UA_StatusCode retval = UA_Server_createEvent(server, eventType, &eventNodeId);
// informations for ua expert
UA_DateTime eventTime = UA_DateTime_now();
UA_Server_writeObjectProperty_scalar(server, eventNodeId, UA_QUALIFIEDNAME(0, "Time"), &eventTime,
&UA_TYPES[UA_TYPES_DATETIME]);
UA_UInt16 eventSeverity = 100;
UA_Server_writeObjectProperty_scalar(server, eventNodeId, UA_QUALIFIEDNAME(0, "Severity"), &eventSeverity,
&UA_TYPES[UA_TYPES_UINT16]);
UA_LocalizedText eventMessage = UA_LOCALIZEDTEXT("en-US", "An event has been generated.");
UA_Server_writeObjectProperty_scalar(server, eventNodeId, UA_QUALIFIEDNAME(0, "Message"), &eventMessage,
&UA_TYPES[UA_TYPES_LOCALIZEDTEXT]);
// Event data: Temperature
UA_Double temperature = 23.5;// Example temperature value
UA_Server_writeObjectProperty_scalar(server, eventNodeId, UA_QUALIFIEDNAME(2, "TemperatureEvent"), &temperature,
&UA_TYPES[UA_TYPES_DOUBLE]);
// trigger this event
retval = UA_Server_triggerEvent(server, eventNodeId, UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER), NULL, UA_TRUE);
Maybe someone knows what I am doing wrong, thanks !