This adapter reads and sends IEC 60870-5-103 FT1.2 telegrams. It can be used with a direct serial interface or through a TCP RS485-to-Ethernet converter such as a Waveshare RS485-to-ETH adapter.
The adapter can run in three modes:
- Sniffer: listen only, parse frames and create objects dynamically.
- Master: controlling station, can send class requests, reset link, general interrogation and raw frames.
- Slave: controlled station, can expose configured points and answer general interrogation.
| Transport | Use case |
|---|---|
| TCP client | Adapter connects to an RS485-to-Ethernet converter. |
| TCP server | Adapter waits for an external TCP client. |
| Serial | Adapter uses a local serial device such as /dev/ttyUSB0. |
Received ASDUs are stored below:
iec103.0.monitor.link_<linkAddress>.<typeName>.fun_<FUN>.inf_<INF>
Each detected object contains:
valuetypecotcotNamerawAsduHexlastUpdatesub.*values if subvalues are enabled
Unknown or vendor-specific payloads are still stored as raw hex and generic byte/word/float interpretations.
| Field | Meaning |
|---|---|
| Link address | Address on the IEC103 link layer / RS485 line. |
| CA | Common Address, usually the station or device address inside the ASDU. |
| FUN | Function type, often used to group protection functions. |
| INF | Information number, the concrete point inside a function. |
For simple test setups with one protection device, CA = 1 is often correct.
In the Slave points tab you can configure values that the adapter should provide as an IEC103 slave.
Each row can define:
- active/inactive
- name
- IEC103 type
- FUN
- INF
- CA
- value type
- default value
- optional ioBroker source state
- include in General Interrogation
- send on change
For every configured point the adapter creates:
iec103.0.slave.points.<id>.value
iec103.0.slave.points.<id>.lastSent
iec103.0.slave.points.<id>.lastAsduHex
If a source state is configured, the adapter reads this state and sends its value. If no source state is configured, you can write directly to slave.points.<id>.value.
| Setting | Value |
|---|---|
| Type | 1 - Time tagged message |
| FUN | 160 |
| INF | 1 |
| CA | 1 |
| Value type | boolean |
| Source state | 0_userdata.0.trip_alarm |
| GI | enabled |
| Send on change | enabled |
The adapter sends the point during General Interrogation and also when 0_userdata.0.trip_alarm changes.
| Setting | Value |
|---|---|
| Type | 3 - Measurands I |
| FUN | 161 |
| INF | 10 |
| CA | 1 |
| Value type | number |
| Source state | modbus.0.current_l1 |
| GI | enabled |
| Send on change | optional |
The adapter provides these control states:
iec103.0.control.sendGeneralInterrogation
iec103.0.control.sendResetLink
iec103.0.control.requestClass1
iec103.0.control.requestClass2
iec103.0.control.rawFrameHex
iec103.0.control.sendRawFrame
iec103.0.control.rawAsduHex
iec103.0.control.sendRawAsdu
iec103.0.control.sendAllSlavePoints
IEC 60870-5-103 is often implemented with device-specific private payloads. This adapter is intentionally generic and can be extended with relay-specific decoding when real telegram examples are available.
A German version of this documentation is available in docs/README_DE.md.
- Decode normalized 13-bit ASDU 3/9 measurands, expose raw/status sub-values and add optional nominal-value and maximum-MVAL scaling.
- Correct npm package metadata so ioBroker recognizes the installed adapter version.
- Fixed jsonConfig metadata for repository checks and moved the German documentation to
docs/README_DE.md.
- Prepared the adapter for ioBroker repository checks, npm publishing and GitHub release automation.
- Added bilingual README with diagrams and examples for sniffer, master and slave point configuration.
- Added configurable slave point table with source states, GI response and send-on-change support.
- Initial IEC 60870-5-103 adapter with serial/TCP transport, sniffer/master/slave modes and dynamic object creation.
Older entries are stored in CHANGELOG_OLD.md.
MIT License
Copyright (c) 2026 TheBam1990