ied-inspector 0.6.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- ied_inspector-0.6.0/LICENSE +21 -0
- ied_inspector-0.6.0/PKG-INFO +126 -0
- ied_inspector-0.6.0/README.md +104 -0
- ied_inspector-0.6.0/ied_inspector/__init__.py +2 -0
- ied_inspector-0.6.0/ied_inspector/__main__.py +3 -0
- ied_inspector-0.6.0/ied_inspector/analysis.py +445 -0
- ied_inspector-0.6.0/ied_inspector/app.py +508 -0
- ied_inspector-0.6.0/ied_inspector/backend_libiec61850.py +279 -0
- ied_inspector-0.6.0/ied_inspector/ber.py +210 -0
- ied_inspector-0.6.0/ied_inspector/capture.py +382 -0
- ied_inspector-0.6.0/ied_inspector/examples/demo_substation.scd +188 -0
- ied_inspector-0.6.0/ied_inspector/frames.py +136 -0
- ied_inspector-0.6.0/ied_inspector/inspect_device.py +244 -0
- ied_inspector-0.6.0/ied_inspector/iso.py +95 -0
- ied_inspector-0.6.0/ied_inspector/mms_client.py +169 -0
- ied_inspector-0.6.0/ied_inspector/mms_server.py +239 -0
- ied_inspector-0.6.0/ied_inspector/reports.py +294 -0
- ied_inspector-0.6.0/ied_inspector/scl.py +528 -0
- ied_inspector-0.6.0/ied_inspector/sim_model.py +325 -0
- ied_inspector-0.6.0/ied_inspector/simulator.py +456 -0
- ied_inspector-0.6.0/ied_inspector/streams.py +172 -0
- ied_inspector-0.6.0/ied_inspector/vendor_supervision.py +136 -0
- ied_inspector-0.6.0/ied_inspector/web/index.html +675 -0
- ied_inspector-0.6.0/ied_inspector.egg-info/PKG-INFO +126 -0
- ied_inspector-0.6.0/ied_inspector.egg-info/SOURCES.txt +28 -0
- ied_inspector-0.6.0/ied_inspector.egg-info/dependency_links.txt +1 -0
- ied_inspector-0.6.0/ied_inspector.egg-info/entry_points.txt +2 -0
- ied_inspector-0.6.0/ied_inspector.egg-info/top_level.txt +1 -0
- ied_inspector-0.6.0/pyproject.toml +46 -0
- ied_inspector-0.6.0/setup.cfg +4 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Pavel Dvořák
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: ied-inspector
|
|
3
|
+
Version: 0.6.0
|
|
4
|
+
Summary: Read-only IEC 61850 MMS / GOOSE / SV inspection tool with SCD validation, VLAN checks, reports and an IED simulator
|
|
5
|
+
Author: Pavel Dvořák
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Keywords: IEC 61850,MMS,GOOSE,sampled values,SCD,substation automation,VLAN
|
|
8
|
+
Classifier: Development Status :: 4 - Beta
|
|
9
|
+
Classifier: Programming Language :: Python :: 3
|
|
10
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
11
|
+
Classifier: Operating System :: Microsoft :: Windows
|
|
12
|
+
Classifier: Operating System :: POSIX :: Linux
|
|
13
|
+
Classifier: Environment :: Web Environment
|
|
14
|
+
Classifier: Intended Audience :: Developers
|
|
15
|
+
Classifier: Intended Audience :: Science/Research
|
|
16
|
+
Classifier: Topic :: Scientific/Engineering
|
|
17
|
+
Classifier: Topic :: System :: Networking :: Monitoring
|
|
18
|
+
Requires-Python: >=3.9
|
|
19
|
+
Description-Content-Type: text/markdown
|
|
20
|
+
License-File: LICENSE
|
|
21
|
+
Dynamic: license-file
|
|
22
|
+
|
|
23
|
+
# IED Inspector 0.5.2
|
|
24
|
+
|
|
25
|
+
Read-only IEC 61850 inspection tool: MMS, GOOSE, Sampled Values, SCD validation, comparison, reports and an IED simulator. Runs in the browser and is served by a small local Python program. Nothing to install apart from Python.
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
[](https://pypi.org/project/ied-inspector/)  
|
|
29
|
+
|
|
30
|
+
Install and start:
|
|
31
|
+
|
|
32
|
+
pip install ied-inspector
|
|
33
|
+
ied-inspector
|
|
34
|
+
|
|
35
|
+
## Start
|
|
36
|
+
|
|
37
|
+
| | |
|
|
38
|
+
|---|---|
|
|
39
|
+
| Windows | double-click `start_windows.bat`, or `py run.py` |
|
|
40
|
+
| Linux | `./start_linux.sh` (uses sudo for raw sockets), or `sudo python3 run.py` |
|
|
41
|
+
|
|
42
|
+
The browser opens at http://127.0.0.1:8061. Options: `--port 8061`, `--scd file.scd` (load at start), `--no-browser`, `--host 0.0.0.0` (expose the UI on the network; there is no login).
|
|
43
|
+
|
|
44
|
+
Requirements: Python 3.9 or newer, standard library only. A portable Python (for example the Windows "embeddable" zip) also works, so the tool can live on a USB stick.
|
|
45
|
+
|
|
46
|
+
| Feature | Windows | Linux |
|
|
47
|
+
|---|---|---|
|
|
48
|
+
| MMS client, SCD, pcap files, reports | works out of the box | works out of the box |
|
|
49
|
+
| Live GOOSE/SV capture, simulator publishing | needs [Npcap](https://npcap.com) | root or `sudo setcap cap_net_raw+ep $(readlink -f $(which python3))` |
|
|
50
|
+
| Simulator MMS server on port 102 | works | root, or use another port |
|
|
51
|
+
|
|
52
|
+
## What it does
|
|
53
|
+
|
|
54
|
+
- **Connect (MMS)**: reads identity, every GOOSE and SV control block (VLAN ID, priority, APPID, destination MAC, ConfRev, GoID, DataSet, GoEna) and the dataset values. You can choose the source interface, and read all IEDs of the SCD in one click.
|
|
55
|
+
- **Network**: live capture on a selected interface, or analysis of a .pcap/.pcapng file. It detects GOOSE timeouts against TAL, the TEST flag, the simulation bit, NdsCom, stNum/sqNum errors and VLAN changes. For SV it reports frames per second and smpCnt gaps. If all frames arrive untagged, it warns about switch port mode or NIC VLAN offload. A live capture can be saved as .pcap.
|
|
56
|
+
- **SCD file**: loads .scd/.cid/.icd/.iid files and validates them. Checks cover the VLAN-ID range and 3-digit hex format, APPID and MAC ranges, duplicate APPID/MAC/IP/GoID, missing GSE/SMV addresses, missing or empty datasets, FCDAs that don't exist in the data model, and subscriptions to unknown IEDs or control blocks. A green or red LED shows MMS reachability for each IED.
|
|
57
|
+
- **Compare**: shows SCD vs device (MMS) vs network for every field. The view can be organized by device, VLAN, IP or signal. A VLAN matrix shows, per device, which VLANs it publishes and subscribes to (the switch-port VLAN list). Subscribers are marked when the publisher's real VLAN differs from the SCD. If the SCD is loaded after reading or capturing, everything is re-validated automatically.
|
|
58
|
+
- **Subscriber reception (VLAN path check over MMS)**: the tool reads every **LGOS** (GOOSE) and **LSVS** (SV) subscription-supervision node it finds on a connected IED (IEC 61850-7-4 Ed2). It reports St (receiving yes/no), SimSt, LastStNum and expected/received ConfRev, and links each one to the publisher's control block. If a subscriber does not receive a stream that is published on VLAN X, the subscriber is marked red with "check that VLAN X is allowed on the subscriber's switch port and on all trunks". This proves the VLAN path end to end without a laptop on every switch. IEDs without LGOS/LSVS (Ed1 or vendor-specific supervision) are listed as "cannot be confirmed over MMS".
|
|
59
|
+
- **ABB vendor supervision**: for devices without LGOS/LSVS the app reads ABB's own receive diagnostics.
|
|
60
|
+
- *615 / 620 series* (REF615, RED620, RET620 …): `LD0.GSEGGIO1`. `Alm` is the receiver alarm, and IntIn1…IntIn10 are counters for received messages, time-outs, ConfRev mismatches, test frames, Needs Commissioning and dataset errors. This covers all subscriptions of the IED together, so the app shows which subscribed streams and VLANs to check.
|
|
61
|
+
- *670 series* (RED670 …): the GOOSE receive function blocks (GOOSEBINRCV, GOOSEDPRCV, GOOSESPRCV …) and their DATAVALID / COMMVALID / TEST outputs. These are found by name because the MMS mapping depends on the configuration.
|
|
62
|
+
- Other LNs that look GOOSE-related are listed as "candidates".
|
|
63
|
+
- **ABB CI868 (AC 800M)**: recognised from the SCD (type, name or description containing CI868 / AC 800M) or from the MMS identity.
|
|
64
|
+
- It is read over MMS like any IED: GOOSE control blocks, datasets, LGOS if configured, and the data-model export.
|
|
65
|
+
- If its MMS server does not answer, the tool checks whether the host is up (TCP 102 refused, ping, or its GOOSE alive on the network). In that case it shows an amber LED with a hint about the MMS server / CID download, instead of the red "not reachable".
|
|
66
|
+
- SCD check of the module load against the CI868A data sheet: at most 120 IEDs via GOOSE, 40 IEDs as MMS report client (from ReportControl ClientLN), and 40 IEDs when both are combined.
|
|
67
|
+
- The demo SCD contains a CI868 (PMS_CI868) that publishes a load-shedding GOOSE, subscribes to PROT_Q01 and CTRL_Q01, and receives reports from PROT_Q01.
|
|
68
|
+
- **Reachability for all devices**: the LED is green when MMS answers, amber when the host is up but MMS does not answer, and red when there is no answer at all.
|
|
69
|
+
- **Data model export** (Connect → Data model): every MMS variable name of the IED as a text file. Useful for finding vendor-specific diagnostics.
|
|
70
|
+
- **Simulator**: any IED of the SCD can be simulated with a read-only MMS server, GOOSE publishing (with retransmission) and 9-2 sampled values (sine waves). You can change signal values, which triggers GOOSE, and toggle the TEST and simulation bits. A simulated IED that has LGOS/LSVS nodes really listens on the interface and updates them. Its "VLANs allowed on this IED's switch port" field emulates a port that is missing a VLAN. For testing the checks you can stop a stream to provoke a timeout, or override its VLAN to provoke a mismatch. Use one IP per simulated IED: 127.0.0.x works locally, or add secondary IPs to the network adapter.
|
|
71
|
+
- **Reports**: comparison report (HTML, CSV for control blocks, signals and findings, JSON), a per-connection report (HTML, text, JSON), and a session summary of everything done since the program started.
|
|
72
|
+
|
|
73
|
+
## Read-only by design
|
|
74
|
+
|
|
75
|
+
The built-in MMS client contains only Initiate, Identify, GetNameList, GetVariableAccessAttributes, Read, GetNamedVariableListAttributes and Conclude. No write service is implemented. The simulator's MMS server answers every write request with "access denied".
|
|
76
|
+
|
|
77
|
+
## MMS stacks
|
|
78
|
+
|
|
79
|
+
The built-in stack is our own implementation and contains no third-party code. As an alternative, you can use libiec61850 by MZ Automation (GPLv3 or commercial licence). It is **not shipped** with this tool. To use it:
|
|
80
|
+
|
|
81
|
+
1. Download or build it from https://github.com/mz-automation/libiec61850. To build the shared library: `mkdir build && cd build && cmake .. && cmake --build . --config Release`.
|
|
82
|
+
2. Settings → MMS stack → enter the path of `iec61850.dll` / `libiec61850.so` → Test library.
|
|
83
|
+
3. Choose the stack per connection on the Connect tab, or set it as the default.
|
|
84
|
+
|
|
85
|
+
## Try it without hardware
|
|
86
|
+
|
|
87
|
+
1. SCD file tab → load `ied_inspector/examples/demo_substation.scd (or the "Load demo SCD" button)`. It contains 4 IEDs and deliberately includes a few SCD errors.
|
|
88
|
+
2. Simulator tab → start PROT_Q01 on 127.0.0.11, CTRL_Q01 on 127.0.0.21 and MU_Q01 on 127.0.0.31, each publishing on the loopback interface (Linux: `lo`; Windows: "Adapter for loopback traffic capture" from Npcap).
|
|
89
|
+
3. Network tab → capture on the same interface.
|
|
90
|
+
4. Connect tab → read 127.0.0.11, .21 and .31.
|
|
91
|
+
5. Simulator → set an override VLAN on GCB_POS. On the Compare tab, the publisher and its subscriber CTRL_Q01 turn red.
|
|
92
|
+
6. Simulator → CTRL_Q01 → enter `10` in "VLANs allowed on this IED's switch port". Then read 127.0.0.21 again on the Connect tab. LGOS2 now reports that GCB_POS (VLAN 20) is not received, and CTRL_Q01 turns red.
|
|
93
|
+
|
|
94
|
+
## Notes and limits
|
|
95
|
+
|
|
96
|
+
- Settings are stored in `~/.ied_inspector.json`.
|
|
97
|
+
- The simulator does not simulate report control blocks or controls. SV timing is best effort; Windows timer resolution makes it bursty.
|
|
98
|
+
- On Windows the simulator uses a fixed source MAC (00-1A-2B-3C-4D-5E).
|
|
99
|
+
- Single-file Windows exe: see "Build IEDInspector.exe" below.
|
|
100
|
+
- Tested against libiec61850 1.6.2 (server and client) and the built-in simulator. Not yet tested against vendor IEDs; please report any device that behaves differently.
|
|
101
|
+
|
|
102
|
+
## Build IEDInspector.exe (runs on Windows PCs without Python)
|
|
103
|
+
|
|
104
|
+
1. On **one** Windows PC with Python 3.9+ (python.org installer, "Add python.exe to PATH" ticked) and internet access, double-click `build_windows_exe.bat`.
|
|
105
|
+
2. The exe gets the icon from `assets\IEDInspector.ico` (sizes 16–256 px; source drawings `icon.svg` and `icon_small.svg` in the same folder). It creates a private build environment (`.build-venv`), installs PyInstaller and builds `dist\IEDInspector.exe` (about 10 MB). The web interface and the demo SCD are inside the exe.
|
|
106
|
+
3. Copy `IEDInspector.exe` to any Windows 10/11 PC and double-click it. The browser opens http://127.0.0.1:8061. Keep the console window open while you work, and close it to quit. Run `IEDInspector.exe --help` for options.
|
|
107
|
+
|
|
108
|
+
Notes for the target PC:
|
|
109
|
+
- MMS, SCD, pcap analysis, reports and the simulator's MMS server need nothing extra.
|
|
110
|
+
- Live capture and GOOSE/SV publishing need the Npcap driver (https://npcap.com). If Npcap was installed with "Restrict Npcap driver's access to Administrators only", start the exe with "Run as administrator".
|
|
111
|
+
- Windows Firewall may ask about network access the first time the simulator's MMS server listens. Allow it on private networks only if other PCs should reach the simulator.
|
|
112
|
+
- One-file executables unpack to a temporary folder at start, so the first start takes a few seconds. Some antivirus products flag unsigned PyInstaller executables; if that happens, sign the exe with a code-signing certificate or ask your IT department to whitelist it.
|
|
113
|
+
|
|
114
|
+
## Disclaimer
|
|
115
|
+
|
|
116
|
+
IED Inspector is an independent open-source project. It is not affiliated with, endorsed by or supported by ABB, OMICRON, MZ Automation or any other vendor. Product names such as ABB, Relion, REF615, RED670, CI868, AC 800M, IEDScout and libiec61850 are trademarks of their respective owners and are used here only to describe compatibility.
|
|
117
|
+
|
|
118
|
+
Vendor-specific behaviour (ABB GSEGGIO1 counters, 670-series receive blocks, CI868 module limits) is based on public manuals and data sheets and has not been verified on every firmware version. The software is provided "as is" (see LICENSE). Use it on substation networks at your own responsibility. It is read-only by design, but capture and the simulator send and receive real network traffic.
|
|
119
|
+
|
|
120
|
+
## Security
|
|
121
|
+
|
|
122
|
+
The web interface listens on 127.0.0.1 only, unless you start it with `--host`. It has no login, so do not expose it to untrusted networks. Report security problems privately to the author instead of in a public issue.
|
|
123
|
+
|
|
124
|
+
## License
|
|
125
|
+
|
|
126
|
+
MIT © 2026 Pavel Dvořák
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
# IED Inspector 0.5.2
|
|
2
|
+
|
|
3
|
+
Read-only IEC 61850 inspection tool: MMS, GOOSE, Sampled Values, SCD validation, comparison, reports and an IED simulator. Runs in the browser and is served by a small local Python program. Nothing to install apart from Python.
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
[](https://pypi.org/project/ied-inspector/)  
|
|
7
|
+
|
|
8
|
+
Install and start:
|
|
9
|
+
|
|
10
|
+
pip install ied-inspector
|
|
11
|
+
ied-inspector
|
|
12
|
+
|
|
13
|
+
## Start
|
|
14
|
+
|
|
15
|
+
| | |
|
|
16
|
+
|---|---|
|
|
17
|
+
| Windows | double-click `start_windows.bat`, or `py run.py` |
|
|
18
|
+
| Linux | `./start_linux.sh` (uses sudo for raw sockets), or `sudo python3 run.py` |
|
|
19
|
+
|
|
20
|
+
The browser opens at http://127.0.0.1:8061. Options: `--port 8061`, `--scd file.scd` (load at start), `--no-browser`, `--host 0.0.0.0` (expose the UI on the network; there is no login).
|
|
21
|
+
|
|
22
|
+
Requirements: Python 3.9 or newer, standard library only. A portable Python (for example the Windows "embeddable" zip) also works, so the tool can live on a USB stick.
|
|
23
|
+
|
|
24
|
+
| Feature | Windows | Linux |
|
|
25
|
+
|---|---|---|
|
|
26
|
+
| MMS client, SCD, pcap files, reports | works out of the box | works out of the box |
|
|
27
|
+
| Live GOOSE/SV capture, simulator publishing | needs [Npcap](https://npcap.com) | root or `sudo setcap cap_net_raw+ep $(readlink -f $(which python3))` |
|
|
28
|
+
| Simulator MMS server on port 102 | works | root, or use another port |
|
|
29
|
+
|
|
30
|
+
## What it does
|
|
31
|
+
|
|
32
|
+
- **Connect (MMS)**: reads identity, every GOOSE and SV control block (VLAN ID, priority, APPID, destination MAC, ConfRev, GoID, DataSet, GoEna) and the dataset values. You can choose the source interface, and read all IEDs of the SCD in one click.
|
|
33
|
+
- **Network**: live capture on a selected interface, or analysis of a .pcap/.pcapng file. It detects GOOSE timeouts against TAL, the TEST flag, the simulation bit, NdsCom, stNum/sqNum errors and VLAN changes. For SV it reports frames per second and smpCnt gaps. If all frames arrive untagged, it warns about switch port mode or NIC VLAN offload. A live capture can be saved as .pcap.
|
|
34
|
+
- **SCD file**: loads .scd/.cid/.icd/.iid files and validates them. Checks cover the VLAN-ID range and 3-digit hex format, APPID and MAC ranges, duplicate APPID/MAC/IP/GoID, missing GSE/SMV addresses, missing or empty datasets, FCDAs that don't exist in the data model, and subscriptions to unknown IEDs or control blocks. A green or red LED shows MMS reachability for each IED.
|
|
35
|
+
- **Compare**: shows SCD vs device (MMS) vs network for every field. The view can be organized by device, VLAN, IP or signal. A VLAN matrix shows, per device, which VLANs it publishes and subscribes to (the switch-port VLAN list). Subscribers are marked when the publisher's real VLAN differs from the SCD. If the SCD is loaded after reading or capturing, everything is re-validated automatically.
|
|
36
|
+
- **Subscriber reception (VLAN path check over MMS)**: the tool reads every **LGOS** (GOOSE) and **LSVS** (SV) subscription-supervision node it finds on a connected IED (IEC 61850-7-4 Ed2). It reports St (receiving yes/no), SimSt, LastStNum and expected/received ConfRev, and links each one to the publisher's control block. If a subscriber does not receive a stream that is published on VLAN X, the subscriber is marked red with "check that VLAN X is allowed on the subscriber's switch port and on all trunks". This proves the VLAN path end to end without a laptop on every switch. IEDs without LGOS/LSVS (Ed1 or vendor-specific supervision) are listed as "cannot be confirmed over MMS".
|
|
37
|
+
- **ABB vendor supervision**: for devices without LGOS/LSVS the app reads ABB's own receive diagnostics.
|
|
38
|
+
- *615 / 620 series* (REF615, RED620, RET620 …): `LD0.GSEGGIO1`. `Alm` is the receiver alarm, and IntIn1…IntIn10 are counters for received messages, time-outs, ConfRev mismatches, test frames, Needs Commissioning and dataset errors. This covers all subscriptions of the IED together, so the app shows which subscribed streams and VLANs to check.
|
|
39
|
+
- *670 series* (RED670 …): the GOOSE receive function blocks (GOOSEBINRCV, GOOSEDPRCV, GOOSESPRCV …) and their DATAVALID / COMMVALID / TEST outputs. These are found by name because the MMS mapping depends on the configuration.
|
|
40
|
+
- Other LNs that look GOOSE-related are listed as "candidates".
|
|
41
|
+
- **ABB CI868 (AC 800M)**: recognised from the SCD (type, name or description containing CI868 / AC 800M) or from the MMS identity.
|
|
42
|
+
- It is read over MMS like any IED: GOOSE control blocks, datasets, LGOS if configured, and the data-model export.
|
|
43
|
+
- If its MMS server does not answer, the tool checks whether the host is up (TCP 102 refused, ping, or its GOOSE alive on the network). In that case it shows an amber LED with a hint about the MMS server / CID download, instead of the red "not reachable".
|
|
44
|
+
- SCD check of the module load against the CI868A data sheet: at most 120 IEDs via GOOSE, 40 IEDs as MMS report client (from ReportControl ClientLN), and 40 IEDs when both are combined.
|
|
45
|
+
- The demo SCD contains a CI868 (PMS_CI868) that publishes a load-shedding GOOSE, subscribes to PROT_Q01 and CTRL_Q01, and receives reports from PROT_Q01.
|
|
46
|
+
- **Reachability for all devices**: the LED is green when MMS answers, amber when the host is up but MMS does not answer, and red when there is no answer at all.
|
|
47
|
+
- **Data model export** (Connect → Data model): every MMS variable name of the IED as a text file. Useful for finding vendor-specific diagnostics.
|
|
48
|
+
- **Simulator**: any IED of the SCD can be simulated with a read-only MMS server, GOOSE publishing (with retransmission) and 9-2 sampled values (sine waves). You can change signal values, which triggers GOOSE, and toggle the TEST and simulation bits. A simulated IED that has LGOS/LSVS nodes really listens on the interface and updates them. Its "VLANs allowed on this IED's switch port" field emulates a port that is missing a VLAN. For testing the checks you can stop a stream to provoke a timeout, or override its VLAN to provoke a mismatch. Use one IP per simulated IED: 127.0.0.x works locally, or add secondary IPs to the network adapter.
|
|
49
|
+
- **Reports**: comparison report (HTML, CSV for control blocks, signals and findings, JSON), a per-connection report (HTML, text, JSON), and a session summary of everything done since the program started.
|
|
50
|
+
|
|
51
|
+
## Read-only by design
|
|
52
|
+
|
|
53
|
+
The built-in MMS client contains only Initiate, Identify, GetNameList, GetVariableAccessAttributes, Read, GetNamedVariableListAttributes and Conclude. No write service is implemented. The simulator's MMS server answers every write request with "access denied".
|
|
54
|
+
|
|
55
|
+
## MMS stacks
|
|
56
|
+
|
|
57
|
+
The built-in stack is our own implementation and contains no third-party code. As an alternative, you can use libiec61850 by MZ Automation (GPLv3 or commercial licence). It is **not shipped** with this tool. To use it:
|
|
58
|
+
|
|
59
|
+
1. Download or build it from https://github.com/mz-automation/libiec61850. To build the shared library: `mkdir build && cd build && cmake .. && cmake --build . --config Release`.
|
|
60
|
+
2. Settings → MMS stack → enter the path of `iec61850.dll` / `libiec61850.so` → Test library.
|
|
61
|
+
3. Choose the stack per connection on the Connect tab, or set it as the default.
|
|
62
|
+
|
|
63
|
+
## Try it without hardware
|
|
64
|
+
|
|
65
|
+
1. SCD file tab → load `ied_inspector/examples/demo_substation.scd (or the "Load demo SCD" button)`. It contains 4 IEDs and deliberately includes a few SCD errors.
|
|
66
|
+
2. Simulator tab → start PROT_Q01 on 127.0.0.11, CTRL_Q01 on 127.0.0.21 and MU_Q01 on 127.0.0.31, each publishing on the loopback interface (Linux: `lo`; Windows: "Adapter for loopback traffic capture" from Npcap).
|
|
67
|
+
3. Network tab → capture on the same interface.
|
|
68
|
+
4. Connect tab → read 127.0.0.11, .21 and .31.
|
|
69
|
+
5. Simulator → set an override VLAN on GCB_POS. On the Compare tab, the publisher and its subscriber CTRL_Q01 turn red.
|
|
70
|
+
6. Simulator → CTRL_Q01 → enter `10` in "VLANs allowed on this IED's switch port". Then read 127.0.0.21 again on the Connect tab. LGOS2 now reports that GCB_POS (VLAN 20) is not received, and CTRL_Q01 turns red.
|
|
71
|
+
|
|
72
|
+
## Notes and limits
|
|
73
|
+
|
|
74
|
+
- Settings are stored in `~/.ied_inspector.json`.
|
|
75
|
+
- The simulator does not simulate report control blocks or controls. SV timing is best effort; Windows timer resolution makes it bursty.
|
|
76
|
+
- On Windows the simulator uses a fixed source MAC (00-1A-2B-3C-4D-5E).
|
|
77
|
+
- Single-file Windows exe: see "Build IEDInspector.exe" below.
|
|
78
|
+
- Tested against libiec61850 1.6.2 (server and client) and the built-in simulator. Not yet tested against vendor IEDs; please report any device that behaves differently.
|
|
79
|
+
|
|
80
|
+
## Build IEDInspector.exe (runs on Windows PCs without Python)
|
|
81
|
+
|
|
82
|
+
1. On **one** Windows PC with Python 3.9+ (python.org installer, "Add python.exe to PATH" ticked) and internet access, double-click `build_windows_exe.bat`.
|
|
83
|
+
2. The exe gets the icon from `assets\IEDInspector.ico` (sizes 16–256 px; source drawings `icon.svg` and `icon_small.svg` in the same folder). It creates a private build environment (`.build-venv`), installs PyInstaller and builds `dist\IEDInspector.exe` (about 10 MB). The web interface and the demo SCD are inside the exe.
|
|
84
|
+
3. Copy `IEDInspector.exe` to any Windows 10/11 PC and double-click it. The browser opens http://127.0.0.1:8061. Keep the console window open while you work, and close it to quit. Run `IEDInspector.exe --help` for options.
|
|
85
|
+
|
|
86
|
+
Notes for the target PC:
|
|
87
|
+
- MMS, SCD, pcap analysis, reports and the simulator's MMS server need nothing extra.
|
|
88
|
+
- Live capture and GOOSE/SV publishing need the Npcap driver (https://npcap.com). If Npcap was installed with "Restrict Npcap driver's access to Administrators only", start the exe with "Run as administrator".
|
|
89
|
+
- Windows Firewall may ask about network access the first time the simulator's MMS server listens. Allow it on private networks only if other PCs should reach the simulator.
|
|
90
|
+
- One-file executables unpack to a temporary folder at start, so the first start takes a few seconds. Some antivirus products flag unsigned PyInstaller executables; if that happens, sign the exe with a code-signing certificate or ask your IT department to whitelist it.
|
|
91
|
+
|
|
92
|
+
## Disclaimer
|
|
93
|
+
|
|
94
|
+
IED Inspector is an independent open-source project. It is not affiliated with, endorsed by or supported by ABB, OMICRON, MZ Automation or any other vendor. Product names such as ABB, Relion, REF615, RED670, CI868, AC 800M, IEDScout and libiec61850 are trademarks of their respective owners and are used here only to describe compatibility.
|
|
95
|
+
|
|
96
|
+
Vendor-specific behaviour (ABB GSEGGIO1 counters, 670-series receive blocks, CI868 module limits) is based on public manuals and data sheets and has not been verified on every firmware version. The software is provided "as is" (see LICENSE). Use it on substation networks at your own responsibility. It is read-only by design, but capture and the simulator send and receive real network traffic.
|
|
97
|
+
|
|
98
|
+
## Security
|
|
99
|
+
|
|
100
|
+
The web interface listens on 127.0.0.1 only, unless you start it with `--host`. It has no login, so do not expose it to untrusted networks. Report security problems privately to the author instead of in a public issue.
|
|
101
|
+
|
|
102
|
+
## License
|
|
103
|
+
|
|
104
|
+
MIT © 2026 Pavel Dvořák
|