Skip to main content
Version: 3.0 (next)

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​

FieldWhat you chooseDetails
ParametersConnection, Function, Function Parameters, Timeout OverrideSelect the IEC 104 connection, pick a function, bind parameters with expression support, and optionally override the timeout.
SettingsDescription, Timeout (seconds), Retry on Timeout, Retry on Fail, On ErrorNode 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:

NodeFunctionPurposeCommon Use Cases
IEC 104 Read Points (connected.iec104.read)iec104.readThe latest value of each listed point, from the connection's live process imageFeeder 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​

ParameterTypeRequiredDescription
ConnectionSelectionYesIEC 104 connection profile to use
FunctionSelectionYesAn iec104.read function from the selected connection
Function ParametersDynamicVariesAuto-populated from the function schema. See the IEC 104 connection functions for field-level details.
Timeout OverrideNumber (seconds)NoOverride 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
}
}
KeyMeaning
result.pointsOne 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.countHow many addresses were asked for
result.missingHow 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:

NodeFunctionPurposeCommon Use Cases
IEC 104 Interrogate (connected.iec104.interrogate)iec104.interrogateAsk the outstation for a fresh snapshot and return every point it sendsResynchronise 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​

ParameterTypeRequiredDescription
ConnectionSelectionYesIEC 104 connection profile to use
FunctionSelectionYesAn iec104.interrogate function from the selected connection
Function ParametersDynamicVariesAuto-populated from the function schema (kind, group, timeout). See the IEC 104 connection functions for field-level details.
Timeout OverrideNumber (seconds)NoOverride 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
}
}
KeyMeaning
result.kindstation (process values) or counter (integrated totals)
result.groupThe group interrogated; 0 = all
result.pointsEvery point the outstation sent in answer
result.countHow many points arrived

IEC 104 Send Command Node​

Supported Function Types:

NodeFunctionPurposeCommon Use Cases
IEC 104 Send Command (connected.iec104.command)iec104.commandOperate a breaker, switch, tap changer or set-pointSupervised 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​

ParameterTypeRequiredDescription
ConnectionSelectionYesIEC 104 connection profile to use
FunctionSelectionYesAn iec104.command function from the selected connection
Function ParametersDynamicVariesAuto-populated from the function schema. See the IEC 104 connection functions for field-level details.
Timeout OverrideNumber (seconds)NoOverride 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.

A command is never sent twice automatically

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
}
}
KeyMeaning
result.commandTypeThe command type sent
result.typeIdThe IEC type used (C_xx_TA_1 when time-tagged)
result.ioaThe object operated
result.valueThe value as given
result.selectedWhether the object was selected first
result.confirmedThe outstation confirmed the execute
result.terminatedThe outstation also reported the command finished (only when Wait for Termination is on)
Safety First

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:

NodeFunctionPurposeCommon Use Cases
IEC 104 Synchronise Clock (connected.iec104.clockSync)iec104.clockSyncSet the outstation's clock to MaestroHub's current timeNightly resynchronisation of an RTU without GPS

Node Configuration​

ParameterTypeRequiredDescription
ConnectionSelectionYesIEC 104 connection profile to use
FunctionSelectionYesAn iec104.clockSync function from the selected connection
Timeout OverrideNumber (seconds)NoOverride 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 }
}
KeyMeaning
result.sentThe instant sent, in UTC
result.deviceTimeZoneThe zone it was written in on the wire
result.confirmedThe outstation confirmed it

Errors​

ErrorMeaningRetried 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 outstationNever, whatever the retry settings: check the device
no activation confirmation within t1The request was sent but not confirmed in timeYes
… was confirmed but not finished before the timeout (N points received)The interrogation started but did not finish within the node's timeoutYes
not connectedThe connection is downYes

Settings Tab​

All IEC 104 node types share the same Settings tab:

SettingTypeDefaultDescription
DescriptionText—Optional description displayed on the node
Timeout (seconds)NumberPipeline defaultMaximum time the node may run before timing out
Retry on TimeoutTogglePipeline defaultAutomatically retry the node if it times out
Retry on FailTogglePipeline defaultAutomatically retry the node if it fails
On ErrorSelectionPipeline defaultError 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).

Test before wiring

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.