IEC 60870-5-104 (server)
Exposes SCADA measurements to IEC 104 clients — the server-side counterpart to the client agent.
This is the protocol reference for the IEC 104 server agent — it writes SCADA measurements out to connected IEC 104 clients; incoming commands from those clients are rejected. For reading a field device in instead, see the client agent. For everything else in the config format, see Agent configuration.
Same three-part key as the client agent — {common_address}:{type_id}:{ioa} — but registered as a point clients can read, timestamped on the wire. Points are registered and unregistered to match the config on every reload; each address maps to one type_id only — a collision is logged and the last one wins.
SP,DP,ST,BO,IT— discrete, with a timestamped IEC type on the wire.MEf— analogical.MEnandMEscarry either kind, depending on the measurement they're serving.
{
"name": "pos",
"equipment": "bay1.brk52",
"type": "discrete",
"driver": {
"type": "discrete",
"common_address": 100,
"type_id": "DP",
"ioa": 2001
}
}Image: khorde/iec104-server-agent:latest, publishing port 2404 — same compose shape as every agent (see Agent configuration). Save the agent's service account key next to it, renamed to service-user.json. Its own config.yaml:
iec104:
# 0.0.0.0, not localhost — clients connect from outside the container.
address: 0.0.0.0
port: 2404
# tls:
# server_certificate: "<path to server cert>"
# server_key: "<path to server key>"
agent:
broker:
ip: host.docker.internal
port: "4222"
tls: false
credentials:
url: http://auth.localhost:9310
service_account_path: service-user.json
command_timeout: 10sAgent configuration
The full schema shared by every protocol. Agent configuration.
The client counterpart
Reading a field device's points into SCADA instead of exposing them out. IEC 60870-5-104 (client).