IEC 60870-5-104 Nodes
Use substation RTUs, protection relays and gateways that speak IEC 60870-5-104 in pipelines. Each function authored on an IEC 104 connection is available as a matching node in the Pipeline Designer.
For connection setup, the connect sequence, TLS and the point payload, see the IEC 60870-5-104 connection guide.
For the event-driven trigger, see the IEC 104 Trigger node. It starts a pipeline whenever the outstation reports a point (the Monitor Points function, trigger.iec104); its result is one point, read as $trigger.result.value, $trigger.result.quality and so on.
Configuration Quick Reference
| Field | What you choose | Details |
|---|---|---|
| Parameters | Connection, Function, Function Parameters, Timeout Override | Select the IEC 104 connection, pick a function, bind parameters with expression support, and optionally override the timeout. |
| Settings | Description, Timeout (seconds), Retry on Timeout, Retry on Fail, On Error | Node description, maximum execution time, retry behaviour and error strategy. All execution settings default to pipeline-level values. |
IEC 104 Read Points Node
Supported Function Types:
| Node | Function | Purpose | Common Use Cases |
|---|---|---|---|
IEC 104 Read Points (connected.iec104.read) | iec104.read | The latest value of each listed point, from the connection's live process image | Feeder measurements on a schedule, breaker positions before a switching order |
IEC 104 outstations push their data, so this node does not ask the device: it returns what the connection has received, with each point's quality and age. A point the outstation has not reported since the connection came up is returned as "no value yet", never as 0.
Node Configuration
| Parameter | Type | Required | Description |
|---|---|---|---|
| Connection | Selection | Yes | IEC 104 connection profile to use |
| Function | Selection | Yes | An iec104.read function from the selected connection |
| Function Parameters | Dynamic | Varies | Auto-populated from the function schema. See the IEC 104 connection functions for field-level details. |
| Timeout Override | Number (seconds) | No | Override the default function timeout |
All function parameters support expression syntax ({{ expression }}) for dynamic values from the pipeline context.
Input
The node receives the output of the previous node as input. Input data can be referenced in function parameter expressions using $input.
Output Structure
{
"result": {
"points": [
{
"commonAddress": 1,
"ioa": 2001,
"type": "M_ME_NC_1",
"value": 231.5,
"detail": {},
"quality": "good",
"flags": { "invalid": false, "notTopical": false, "substituted": false, "blocked": false, "overflow": false, "timeInvalid": false },
"cause": "interrogated by station",
"sourceTimestamp": null,
"serverTimestamp": "2026-09-30T10:14:03Z",
"status": "ok",
"ageMs": 850
},
{ "ioa": 2002, "status": "noValueYet" }
],
"count": 2,
"missing": 1
}
}
| Key | Meaning |
|---|---|
result.points | One entry per address asked for, in the order asked. A known point has status: "ok" and ageMs; an unreported one is {ioa, status: "noValueYet"} |
result.count | How many addresses were asked for |
result.missing | How many of them have no value yet |
Read a value with $node["Read Feeder"].result.points[0].value. Check $node["Read Feeder"].result.missing before relying on every point being present.
IEC 104 Interrogate Node
Supported Function Types:
| Node | Function | Purpose | Common Use Cases |
|---|---|---|---|
IEC 104 Interrogate (connected.iec104.interrogate) | iec104.interrogate | Ask the outstation for a fresh snapshot and return every point it sends | Resynchronise after maintenance, read energy counters on a schedule |
The node sends a station, group or counter interrogation and waits until the outstation reports it finished. The same points also update the process image and fire any Monitor Points trigger.
Node Configuration
| Parameter | Type | Required | Description |
|---|---|---|---|
| Connection | Selection | Yes | IEC 104 connection profile to use |
| Function | Selection | Yes | An iec104.interrogate function from the selected connection |
| Function Parameters | Dynamic | Varies | Auto-populated from the function schema (kind, group, timeout). See the IEC 104 connection functions for field-level details. |
| Timeout Override | Number (seconds) | No | Override the default function timeout |
All function parameters support expression syntax ({{ expression }}) for dynamic values from the pipeline context.
Input
The node receives the output of the previous node as input.
Output Structure
{
"result": {
"kind": "station",
"group": 0,
"points": [
{
"commonAddress": 1,
"ioa": 2001,
"type": "M_ME_NC_1",
"value": 231.5,
"detail": {},
"quality": "good",
"flags": { "invalid": false, "notTopical": false, "substituted": false, "blocked": false, "overflow": false, "timeInvalid": false },
"cause": "interrogated by station",
"sourceTimestamp": null,
"serverTimestamp": "2026-09-30T10:14:03Z"
}
],
"count": 1
}
}
| Key | Meaning |
|---|---|
result.kind | station (process values) or counter (integrated totals) |
result.group | The group interrogated; 0 = all |
result.points | Every point the outstation sent in answer |
result.count | How many points arrived |
IEC 104 Send Command Node
Supported Function Types:
| Node | Function | Purpose | Common Use Cases |
|---|---|---|---|
IEC 104 Send Command (connected.iec104.command) | iec104.command | Operate a breaker, switch, tap changer or set-point | Supervised switching, tap-changer steps, power-limit set-points |
The node selects the object, executes it once the outstation confirms the selection (select-before-operate, on by default), and succeeds when the execute is confirmed.
Node Configuration
| Parameter | Type | Required | Description |
|---|---|---|---|
| Connection | Selection | Yes | IEC 104 connection profile to use |
| Function | Selection | Yes | An iec104.command function from the selected connection |
| Function Parameters | Dynamic | Varies | Auto-populated from the function schema. See the IEC 104 connection functions for field-level details. |
| Timeout Override | Number (seconds) | No | Override the default function timeout |
All function parameters support expression syntax ({{ expression }}) for dynamic values from the pipeline context.
Input
The node receives the output of the previous node as input.
If it fails after it may have reached the outstation (no confirmation within t1, a timeout), the node fails with command outcome unknown and is not retried, even with Retry on Fail or a ForEach retry configured: sending a tap-changer step or a pulse again would act again. Check the device before running it again. A command the outstation refused fails with the device refused and is not retried either.
A command is also refused in a run started by a late (replayed) value, unless the node allows late input.
Output Structure
{
"result": {
"commandType": "double",
"typeId": "C_DC_NA_1",
"ioa": 3001,
"value": "off",
"selected": true,
"confirmed": true,
"terminated": false
}
}
| Key | Meaning |
|---|---|
result.commandType | The command type sent |
result.typeId | The IEC type used (C_xx_TA_1 when time-tagged) |
result.ioa | The object operated |
result.value | The value as given |
result.selected | Whether the object was selected first |
result.confirmed | The outstation confirmed the execute |
result.terminated | The outstation also reported the command finished (only when Wait for Termination is on) |
Always validate values in a Condition node before operating equipment. A command can open a breaker or move a tap changer immediately.
IEC 104 Synchronise Clock Node
Supported Function Types:
| Node | Function | Purpose | Common Use Cases |
|---|---|---|---|
IEC 104 Synchronise Clock (connected.iec104.clockSync) | iec104.clockSync | Set the outstation's clock to MaestroHub's current time | Nightly resynchronisation of an RTU without GPS |
Node Configuration
| Parameter | Type | Required | Description |
|---|---|---|---|
| Connection | Selection | Yes | IEC 104 connection profile to use |
| Function | Selection | Yes | An iec104.clockSync function from the selected connection |
| Timeout Override | Number (seconds) | No | Override the default function timeout |
The function takes no parameters: it sends the current time, written in the connection's device time zone. See Synchronise Clock.
Input
The node receives the output of the previous node as input.
Output Structure
{
"result": { "sent": "2026-09-30T02:00:00.123Z", "deviceTimeZone": "Europe/Istanbul", "confirmed": true }
}
| Key | Meaning |
|---|---|
result.sent | The instant sent, in UTC |
result.deviceTimeZone | The zone it was written in on the wire |
result.confirmed | The outstation confirmed it |
Errors
| Error | Meaning | Retried by the node settings? |
|---|---|---|
the outstation refused … / the device refused … | The outstation rejected the request (unknown common address, type, cause or address, or a negative confirmation) | No: the result is permanent |
… command outcome unknown … | A command failed after it may have reached the outstation | Never, whatever the retry settings: check the device |
no activation confirmation within t1 | The request was sent but not confirmed in time | Yes |
… was confirmed but not finished before the timeout (N points received) | The interrogation started but did not finish within the node's timeout | Yes |
not connected | The connection is down | Yes |
Settings Tab
All IEC 104 node types share the same Settings tab:
| Setting | Type | Default | Description |
|---|---|---|---|
| Description | Text | — | Optional description displayed on the node |
| Timeout (seconds) | Number | Pipeline default | Maximum time the node may run before timing out |
| Retry on Timeout | Toggle | Pipeline default | Automatically retry the node if it times out |
| Retry on Fail | Toggle | Pipeline default | Automatically retry the node if it fails |
| On Error | Selection | Pipeline default | Error strategy: Pipeline Default (the pipeline's Error Handling setting), Stop Pipeline or Continue Execution |
When left at their defaults, these settings inherit from the pipeline-level execution configuration. The retry settings never re-send a Send Command whose outcome is unknown, and do not retry a request the outstation refused (see Errors).
Use the Test button in the function form (on the connection page) to run every IEC 104 function against the live outstation before wiring it into a pipeline. It is the fastest way to catch a wrong common address, an address the outstation does not know, or a refused command type.