Python bindings for libiec61850 - IEC 61850 protocol implementation
Project description
pyiec61850-ng
Next Generation Python bindings for libiec61850, packaged as a Python wheel.
This repository provides Python bindings for the libiec61850 library, which is an open-source implementation of the IEC 61850 standard for communication networks and systems in substations.
Installation
Install from PyPI (Recommended)
pip install pyiec61850-ng
Install from GitHub Release
pip install pyiec61850-ng --find-links https://github.com/f0rw4rd/pyiec61850-ng/releases/latest/download/
Install directly from GitHub
pip install git+https://github.com/f0rw4rd/pyiec61850-ng.git
Install from local wheel
pip install pyiec61850-ng-*.whl
Usage
Quick Start (Recommended - Safe API)
from pyiec61850.mms import MMSClient
# Use context manager for automatic cleanup
with MMSClient() as client:
client.connect("192.168.1.100", 102)
print("Connected successfully!")
# Get server identity
identity = client.get_server_identity()
print(f"Server: {identity.vendor} {identity.model}")
# Discover logical devices
devices = client.get_logical_devices()
for device in devices:
print(f"Device: {device}")
# Get logical nodes
nodes = client.get_logical_nodes(device)
for node in nodes:
print(f" Node: {node}")
# Connection automatically closed
Low-Level API
For advanced use cases, you can use the raw bindings directly:
import pyiec61850.pyiec61850 as pyiec61850
# Create and connect to an IEC 61850 server
connection = pyiec61850.IedConnection_create()
error = pyiec61850.IedConnection_connect(connection, "192.168.1.100", 102)
if error == pyiec61850.IED_ERROR_OK:
print("Connected successfully!")
# Perform operations...
pyiec61850.IedConnection_close(connection)
pyiec61850.IedConnection_destroy(connection)
Examples
For comprehensive examples, see the examples directory:
- Basic Connection - Connect to an IEC 61850 server
- Device Discovery - Discover logical devices, nodes, and data objects
- Reading Data - Read values from data objects
- File Transfer - Download files using MMS file services
Run examples:
python examples/01_basic_connection.py 192.168.1.100
python examples/02_device_discovery.py 192.168.1.100
Building from Source
The wheel package is built using Docker:
docker build -t pyiec61850-builder --build-arg LIBIEC61850_VERSION=v1.6 .
To extract the wheel file:
mkdir -p ./dist
docker create --name wheel-container pyiec61850-builder
docker cp wheel-container:/wheels/. ./dist/
docker rm wheel-container
Versioning
This package uses the format: LIBIEC61850_VERSION.REVISION
- Example:
1.6.0.1= libiec61850 v1.6.0, first package revision - 1.6.0: The exact libiec61850 version included (static)
- .1: Package revision for bug fixes, rebuilds, binding improvements
This clearly shows which libiec61850 version you're getting and our package iteration.
Check current version:
python version.py # Package version: 1.6.0.1
python version.py --libiec61850 # libiec61850 version: v1.6.0
TASE.2/ICCP Support (Highly Experimental)
Warning: TASE.2 support is highly experimental and may change significantly.
pyiec61850-ng includes support for TASE.2 (IEC 60870-6), also known as ICCP (Inter-Control Center Communications Protocol), used for real-time data exchange between control centers in the electric utility industry.
TASE.2 Quick Start
from pyiec61850.tase2 import TASE2Client
client = TASE2Client(
local_ap_title="1.1.1.999",
remote_ap_title="1.1.1.998"
)
client.connect("192.168.1.100", port=102)
# Discover domains (VCC/ICC)
domains = client.get_domains()
for domain in domains:
print(f"Domain: {domain.name} ({domain.domain_type})")
# Read a data point
value = client.read_point("ICC1", "Voltage")
print(f"Value: {value.value}, Quality: {value.quality}")
# Security analysis
security = client.analyze_security()
print(f"Readable points: {security['readable_points']}")
print(f"Concerns: {security['concerns']}")
client.disconnect()
TASE.2 Features
- Domain Discovery: VCC (Virtual Control Center) and ICC (Indication Control Center)
- Variable Enumeration: List and read data points with quality information
- Data Point Access: Read/write individual points or bulk enumeration
- Transfer Sets (Block 2): RBE (Report-by-Exception) management
- Device Control (Block 5): Select-Before-Operate, commands, setpoints
- Bilateral Tables: Access control configuration queries
- Security Analysis: Automated security assessment and recommendations
TASE.2 Data Types
from pyiec61850.tase2 import (
Domain, # VCC/ICC domain
PointValue, # Data point with value and quality
TransferSet, # Block 2 transfer set
BilateralTable, # Access control table
ServerInfo, # Server information
)
MMS Module (Safe Wrappers)
The pyiec61850.mms module provides safe Python wrappers around the raw SWIG bindings,
preventing common crashes from NULL pointer dereferences and memory leaks.
Why Use the Safe Wrappers?
The raw pyiec61850 bindings require careful memory management:
LinkedList_destroy()must be called after iterationMmsValue_delete()must be called after reading valuestoCharP()crashes on NULL pointers
The MMS module handles all of this automatically.
MMS Client Example
from pyiec61850.mms import MMSClient, ConnectionFailedError
with MMSClient() as client:
try:
client.connect("192.168.1.100", 102)
# All memory management is automatic
for device in client.get_logical_devices():
for node in client.get_logical_nodes(device):
print(f"{device}/{node}")
except ConnectionFailedError as e:
print(f"Connection failed: {e}")
Safe Utilities for Raw Bindings
If you need to use raw bindings, use the safe utilities:
from pyiec61850.mms.utils import (
safe_to_char_p, # NULL-safe string conversion
LinkedListGuard, # Auto-cleanup context manager
MmsValueGuard, # Auto-cleanup for MmsValue
)
import pyiec61850.pyiec61850 as iec61850
# Safe iteration with automatic cleanup
result = iec61850.IedConnection_getLogicalDeviceList(connection)
device_list, error = result
with LinkedListGuard(device_list) as guard:
for device_name in guard: # NULL pointers automatically skipped
print(device_name)
# LinkedList automatically destroyed
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pyiec61850_ng-1.6.0.7-cp313-cp313-manylinux1_x86_64.whl.
File metadata
- Download URL: pyiec61850_ng-1.6.0.7-cp313-cp313-manylinux1_x86_64.whl
- Upload date:
- Size: 1.9 MB
- Tags: CPython 3.13
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6f6238d45182972d31d7b3b9ab1d90a662b6ed23ac61f2a69b8c0feef67c4e2d
|
|
| MD5 |
765f06b81b3a6daab4378f8c4d2c4bc6
|
|
| BLAKE2b-256 |
566e4d6883c2b3a04502095f559910eb58b750719f1daf30fc82eb418d327988
|
File details
Details for the file pyiec61850_ng-1.6.0.7-cp312-cp312-manylinux1_x86_64.whl.
File metadata
- Download URL: pyiec61850_ng-1.6.0.7-cp312-cp312-manylinux1_x86_64.whl
- Upload date:
- Size: 1.9 MB
- Tags: CPython 3.12
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e1e80924987210f07dff1585ae8962ad7881da5781388fca52a1120f2bc62f3c
|
|
| MD5 |
aebc55d3e4be5cf706f2094b037861b5
|
|
| BLAKE2b-256 |
6bdfa91174a6faf5e5a2649704256497d822b0eb366c2d24f6a57edf36ec252e
|
File details
Details for the file pyiec61850_ng-1.6.0.7-cp311-cp311-manylinux1_x86_64.whl.
File metadata
- Download URL: pyiec61850_ng-1.6.0.7-cp311-cp311-manylinux1_x86_64.whl
- Upload date:
- Size: 1.9 MB
- Tags: CPython 3.11
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
90ab8c6878e9a8db488424b95fc09a05d5b41d1df79060253410656222f8fc1c
|
|
| MD5 |
6de82b96971cb83aa41379db05181148
|
|
| BLAKE2b-256 |
51da0cb0bbb8ca05019cf89a9660e311e8c4a0829cde75cdb64247fd71ed3f57
|
File details
Details for the file pyiec61850_ng-1.6.0.7-cp310-cp310-manylinux1_x86_64.whl.
File metadata
- Download URL: pyiec61850_ng-1.6.0.7-cp310-cp310-manylinux1_x86_64.whl
- Upload date:
- Size: 1.9 MB
- Tags: CPython 3.10
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f9d889d354fc56fe2592daf22cd4f93cb15a3378ef67d690eaa8ac69ac3bded2
|
|
| MD5 |
c55bd4967c87b3c5e0bd758d07072eaa
|
|
| BLAKE2b-256 |
6efde7479031e80481dc6cfa1d68ee53e2b07d220b20e2a2fa6a11f94bf14afa
|
File details
Details for the file pyiec61850_ng-1.6.0.7-cp39-cp39-manylinux1_x86_64.whl.
File metadata
- Download URL: pyiec61850_ng-1.6.0.7-cp39-cp39-manylinux1_x86_64.whl
- Upload date:
- Size: 1.9 MB
- Tags: CPython 3.9
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cb581be4295c595358b113645aa7ace9fffede7afc83d2c1598f1d54cc793f81
|
|
| MD5 |
598767fa1090b30662eb9ee3e9edb3d5
|
|
| BLAKE2b-256 |
a13ab9129ce0067d323b97947b56823a025e6f7e68e606c3b2923deb190590a9
|
File details
Details for the file pyiec61850_ng-1.6.0.7-cp38-cp38-manylinux1_x86_64.whl.
File metadata
- Download URL: pyiec61850_ng-1.6.0.7-cp38-cp38-manylinux1_x86_64.whl
- Upload date:
- Size: 1.9 MB
- Tags: CPython 3.8
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c9c932fa277e8c3b07653ce0f6983286a5d60f02e43fb649727645015abb0eee
|
|
| MD5 |
14c5423a1f44e166a75937e4b14728fe
|
|
| BLAKE2b-256 |
8e597a46686ae5d92167cf23148b36dc3c45ed207282d47df971e5a54fd76570
|