# OPC UA Client Endpoint Properties

## `nodeId` (string)

Specifies the address of the OPC UA node within the server. You must define either `nodeId` or `browsePath`. A `nodeId` value is encoded as an xs:string with the following syntax:\
\
`ns=<namespaceIndex>;<type>=<value>`\
\
The fields have the following meanings:\
\
`<namespaceIndex>` is an integer number such as 0 or 10, denoting the namespace.\
`<type>` is a flag that specifies the identifier type and can be: `i` for numeric (integer), `s` for string, `g` for guid, or `b` for opaque (byte string).\
`<value>` is the identifier itself, encoded as a string and in the format according to the identifierType.\
\
See also <https://reference.opcfoundation.org/v104/Core/docs/Part6/5.3.1>, section 5.3.1.10.

Examples: `"i=2258"`, `"ns=2;s=TemperatureSensor/Output"`, `"ns=10;i=-1012"`

## `browsePath` (string)

Specifies the relative path to the endpoint. You must provide either `nodeId` or `browsePath`.

Examples: `"0:CurrentTime"`, `"2:Devices/PLC1/Temperature"`

## `nodeType` (string, enum)

Specifies the OPC UA node type. This is **mandatory** when the node represents a method call.\
\
**Example**:\
\- **Variable**: Represents a value, such as temperature or pressure.\
\- **Object**: Represents a logical entity such as a device or subsystem.\
\- **Method**: Represents an executable action (e.g., start, reset).

This element must be one of the following enum values:

* `Object`
* `Variable`
* `Method`

## `fields` (array)

An array of browse names representing variables defined in an event type. Each array element must be a `string`.

The object is an array with all elements of the type `string`.

Additional restrictions:

* Unique items: `true`

## `eventTypes` (array)

Lists the node IDs of OPC UA-defined event types in the server namespace, each as a `nodeId` string.

The object is an array with all elements of the type `string`.

Examples: `"ns=0;i=2041"`, `"ns=0;i=2130"`, `"ns=2;s=CustomAlarmType"`

Additional restrictions:

* Unique items: `true`

## `browsePathPrefix` (string)

Optional prefix added to the beginning of a `browsePath`. If both `browsePathPrefix` and `browsePath` are provided, they are combined with a `/` in between. If only one is provided, that value is used as the full path.\
\
**Example**: If `browsePathPrefix` is `2:Devices/Device1` and `browsePath` is `Temperature`, the full path becomes `2:Devices/Device1/Temperature`.

## `publishInterval` (integer)

Specifies how often (in milliseconds) the server should publish values within a subscription. Typically, updates are sent only when values change.\
\
**Example**: A `publishInterval` of `500` means the server checks every 500 milliseconds for changes to send to the client. If no values change, no data is sent, reducing network traffic.

Default: `1000`

## `samplingInterval` (integer)

Sets the sampling interval (in milliseconds) in which values published by the server should be sampled for a particular node subscription. All nodes (i.e., monitored items) with the same `samplingInterval` will be combined into one monitored item group.\
\
**Example**: A `samplingInterval` of `500` means the server samples every 500 milliseconds.

Default: `1000`

## `maxNotificationsPerPublish` (integer)

Specifies the maximum number of monitored item notifications per publish message. Setting this to a lower value will lead to more network traffic.\
\
**Example**: A value of `50` means that if more than 50 monitored items change between publish intervals, multiple publish messages will be sent to the client to deliver all updates.

Default: `100`

## `priority` (integer)

Sets the priority of the subscription on the server. Higher values mean higher priority for publishing data changes.

Default: `10`

## `requestedLifetimeCount` (integer)

Specifies the number of publish intervals that the server should wait for a publish request before considering the subscription inactive and deleting it. A higher value allows for longer interruptions in communication without losing the subscription, but may consume more server resources.\
\
**Example**: A value of `30` means that if no publish requests are received within 30 times the `publishInterval`, the server will delete the subscription.

Default: `30`

## `requestedMaxKeepAliveCount` (integer)

Specifies the maximum number of publish intervals that can pass without the server sending a publish response. If this count is reached, the server sends a keep-alive message to the client, even if no monitored items have changed. This helps ensure the client knows the connection is still active.\
\
**Example**: A value of `10` means that if no monitored items change within 10 times the `publishInterval`, the server will send a keep-alive message.

Default: `10`

## `retryMonitorTimeout` (integer)

Specifies the time (in milliseconds) to wait before retrying to monitor a node if the initial monitoring attempt fails. This helps handle temporary issues when setting up monitoring for a node.\
\
**Example**: A value of `300000` means that if monitoring a node fails, the system will wait 300 seconds (5 minutes) before trying again.

Default: `300000`

Additional restrictions:

* Minimum: `10000`

## `trigger` (string, enum)

Specifies when a client should be notified about data changes on a monitored item. Determines the condition under which the server sends notifications to the client.\
\
Options:\
\- **Status**: Notify only if the status code of the value changes.\
\- **StatusValue** (default): Notify if either the status code or the value changes.\
\- **StatusValueTimestamp**: Notify if the status, value, or timestamp changes. A timestamp change means the value stayed the same, but the data source refreshed or reprocessed it, resulting in a new timestamp.

This element must be one of the following enum values:

* `Status`
* `StatusValue`
* `StatusValueTimestamp`

Default: `"StatusValue"`

## `deadbandType` (string, enum)

An optional filter that suppresses small changes in numeric values to reduce traffic. If set, only significant value changes (as defined by `deadbandValue`) will trigger notifications. Only applicable to variables with numeric data types.\
\
Options:\
\- **None** (default): Not using any deadband filter.\
\- **Absolute**: A notification is sent only if the absolute difference between the new and previous value is greater than or equal to `deadbandValue`.\
\- **Percent**: A notification is sent only if the relative difference between the new and previous value exceeds the defined percentage threshold in `deadbandValue`.

This element must be one of the following enum values:

* `None`
* `Absolute`
* `Percent`

Default: `"None"`

## `deadbandValue` (number)

Specifies the threshold value that is used by the selected `deadbandType`. It will be ignored when `deadbandType` is `None`.\
\
For **Absolute**, it defines the minimum difference (in engineering units) that must be exceeded. For **Percent**, it defines the percentage of the EURange that must be exceeded.
