Glossary · Subscriptions

DataChangeTrigger

DataChangeTrigger is the field of a DataChangeFilter that defines what counts as a change: Status reports only StatusCode changes, StatusValue - the default - reports status or value changes, and StatusValueTimestamp additionally reports when only the SourceTimestamp has moved. It decides whether an unchanged value still produces traffic.

The three settings and what they cost

Status is the cheapest and reports almost nothing: use it for items you watch purely for quality, such as a device-health tag. StatusValue is the sensible default and is what every client uses unless told otherwise. StatusValueTimestamp reports on every new sample even when the number is identical, so its traffic equals the sampling rate - it is the setting that turns a subscription into a fixed-cadence stream.

When StatusValueTimestamp is the right answer

When you need proof of liveness at the sample level, or a regular cadence for downstream time-series maths, and you would otherwise build a client-side heartbeat to fake it. It only works if the server actually updates SourceTimestamp on every sample, which not all do - some only touch the timestamp when the value changes, in which case this setting behaves identically to StatusValue.

It interacts with the deadband, not replaces it

Trigger and DeadbandType are independent fields of the same filter. A deadband decides whether a value change is big enough to count; the trigger decides which kinds of change are considered at all. Combining StatusValueTimestamp with a deadband is contradictory in practice - the timestamp condition fires every sample regardless of the deadband - so pick one intent per item.

Example

The same sample series under the three triggers

samples (value, status, sourceTs):
  t1 (20.0, Good, 10:00:00)  t2 (20.0, Good, 10:00:01)  t3 (20.5, Good, 10:00:02)
  t4 (20.5, Bad_NoCommunication, 10:00:03)              t5 (20.5, Good, 10:00:04)

  Status                -> t4, t5                       2 notifications
  StatusValue           -> t3, t4, t5                   3 notifications
  StatusValueTimestamp  -> t1, t2, t3, t4, t5           5 notifications (every sample)
The mistake people make: Leaving the default StatusValue and then wondering why a steady tag has produced nothing for six hours. That is correct behaviour - nothing changed - but it is indistinguishable from a dead link at the item level. Either add a heartbeat, or switch that item to StatusValueTimestamp and accept the traffic.

Defined in: Part 4 - Services, DataChangeFilter and the DataChangeTrigger enumeration.

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.

Free download
OPC UA Server Acceptance Test Pack
A 40-check acceptance test you run against a vendor's server before commissioning sign-off. Weighted scoring, three hard gates, and a one-page verdict for the supplier meeting.
Get the free test pack →
Free, no course, no login