ConditionClassId
ConditionClassId is a Property on every OPC UA Condition holding the NodeId of a ConditionClassType that says what kind of problem this is, independently of vendor wording. MachineTool defines classes such as ToolBreakage, ToolChange, ProcessIrregularity, PartMissing, Clamping and Operator, giving you standardised, machine-readable downtime reason codes.
The field that makes downtime reasons portable
Message is free text in the machine's configured locale and differs between two machines from the same vendor. ConditionClassId is a NodeId pointing at a type, so it is stable, language-independent and comparable across vendors. Every condition has one; if the server does not classify, it points at BaseConditionClassType. ConditionClassName carries the human-readable name of the same class, and ConditionSubClassId, where present, refines it.
The MachineTool classes are a reason-code taxonomy
MachineTool defines ToolBreakageConditionClassType, ToolChangeConditionClassType, ProcessIrregularityConditionClassType, PartMissingConditionClassType, ClampingConditionClassType, MeasurementConditionClassType, ManualProcessStepConditionClassType, OperatorConditionClassType and UtilityConditionClassType. Map those to your own downtime categories once and the mapping works on the next machine tool from a different vendor. AMB adds asset-health classes such as ConnectionFailureConditionClassType for root-cause attribution.
How to consume it
Put ConditionClassId in your EventFilter select clause alongside SourceNode, Time, Severity, Message and ActiveState, then key your downtime attribution on the class NodeId and keep Message only for the operator display. You can also filter server-side: a where clause on ConditionClassId lets one subscription deliver only tool-related stoppages to a tooling dashboard.
The limits of it
Classification is only as good as the vendor's modelling. Many servers classify everything as BaseConditionClassType, and some invent their own subtypes in a private namespace. Resolve the class NodeId to its BrowseName and namespace URI before you trust it, and never hardcode the numeric identifier: a class defined in a companion namespace has an index that can change between server restarts.
Example
Select clause fields for downtime attribution, and a class-based where clause
SelectClauses (SimpleAttributeOperand, typeDefinitionId = BaseEventType):
/EventId
/Time
/SourceNode
/Severity
/Message
/ConditionClassId <- the reason code
/ConditionClassName
Additionally with typeDefinitionId = AlarmConditionType:
/ActiveState/Id
/AckedState/Id
WhereClause: deliver only tooling stoppages
OfType(ConditionType)
AND ConditionClassId IN { ToolBreakageConditionClassType,
ToolChangeConditionClassType }
Defined in: Part 9 - Alarms and Conditions. Concrete condition classes come from companion specifications such as MachineTool.
Last verified 7 September 2026 against OPC UA 1.05.07. OPC UA Connect is an educational resource and is not affiliated with the OPC Foundation.