# pyiec61850-ng
Next Generation Python bindings for libiec61850, packaged as a Python wheel.
[](https://github.com/f0rw4rd/pyiec61850-ng/actions/workflows/build-wheel.yml)
[](https://badge.fury.io/py/pyiec61850-ng)
[](https://pypi.org/project/pyiec61850-ng/)
This repository provides Python bindings for the [libiec61850](https://github.com/mz-automation/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)
```bash
pip install pyiec61850-ng
```
### Install from GitHub Release
```bash
pip install pyiec61850-ng --find-links https://github.com/f0rw4rd/pyiec61850-ng/releases/latest/download/
```
### Install directly from GitHub
```bash
pip install git+https://github.com/f0rw4rd/pyiec61850-ng.git
```
### Install from local wheel
```bash
pip install pyiec61850-ng-*.whl
```
## Usage
### Quick Start
```python
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](https://github.com/f0rw4rd/pyiec61850-ng/tree/main/examples):
- [**Basic Connection**](https://github.com/f0rw4rd/pyiec61850-ng/blob/main/examples/01_basic_connection.py) - Connect to an IEC 61850 server
- [**Device Discovery**](https://github.com/f0rw4rd/pyiec61850-ng/blob/main/examples/02_device_discovery.py) - Discover logical devices, nodes, and data objects
- [**Reading Data**](https://github.com/f0rw4rd/pyiec61850-ng/blob/main/examples/03_read_data_values.py) - Read values from data objects
- [**File Transfer**](https://github.com/f0rw4rd/pyiec61850-ng/blob/main/examples/04_file_transfer.py) - Download files using MMS file services
Run examples:
```bash
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:
```bash
docker build -t pyiec61850-builder --build-arg LIBIEC61850_VERSION=v1.6 .
```
To extract the wheel file:
```bash
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:
```bash
python version.py # Package version: 1.6.0.1
python version.py --libiec61850 # libiec61850 version: v1.6.0
```
Raw data
{
"_id": null,
"home_page": "https://github.com/f0rw4rd/pyiec61850-ng",
"name": "pyiec61850-ng",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.8",
"maintainer_email": null,
"keywords": "iec61850 mms goose iec-61850 power-systems substation-automation smart-grid scada",
"author": "f0rw4rd",
"author_email": "pyiec61850@example.com",
"download_url": null,
"platform": null,
"description": "# pyiec61850-ng\n\nNext Generation Python bindings for libiec61850, packaged as a Python wheel.\n\n[](https://github.com/f0rw4rd/pyiec61850-ng/actions/workflows/build-wheel.yml)\n[](https://badge.fury.io/py/pyiec61850-ng)\n[](https://pypi.org/project/pyiec61850-ng/)\n\nThis repository provides Python bindings for the [libiec61850](https://github.com/mz-automation/libiec61850) library, which is an open-source implementation of the IEC 61850 standard for communication networks and systems in substations.\n\n## Installation\n\n### Install from PyPI (Recommended)\n\n```bash\npip install pyiec61850-ng\n```\n\n### Install from GitHub Release\n\n```bash\npip install pyiec61850-ng --find-links https://github.com/f0rw4rd/pyiec61850-ng/releases/latest/download/\n```\n\n### Install directly from GitHub\n\n```bash\npip install git+https://github.com/f0rw4rd/pyiec61850-ng.git\n```\n\n### Install from local wheel\n\n```bash\npip install pyiec61850-ng-*.whl\n```\n\n## Usage\n\n### Quick Start\n\n```python\nimport pyiec61850.pyiec61850 as pyiec61850\n\n# Create and connect to an IEC 61850 server\nconnection = pyiec61850.IedConnection_create()\nerror = pyiec61850.IedConnection_connect(connection, \"192.168.1.100\", 102)\n\nif error == pyiec61850.IED_ERROR_OK:\n print(\"Connected successfully!\")\n # Perform operations...\n pyiec61850.IedConnection_close(connection)\n\npyiec61850.IedConnection_destroy(connection)\n```\n\n### Examples\n\nFor comprehensive examples, see the [examples directory](https://github.com/f0rw4rd/pyiec61850-ng/tree/main/examples):\n\n- [**Basic Connection**](https://github.com/f0rw4rd/pyiec61850-ng/blob/main/examples/01_basic_connection.py) - Connect to an IEC 61850 server\n- [**Device Discovery**](https://github.com/f0rw4rd/pyiec61850-ng/blob/main/examples/02_device_discovery.py) - Discover logical devices, nodes, and data objects\n- [**Reading Data**](https://github.com/f0rw4rd/pyiec61850-ng/blob/main/examples/03_read_data_values.py) - Read values from data objects\n- [**File Transfer**](https://github.com/f0rw4rd/pyiec61850-ng/blob/main/examples/04_file_transfer.py) - Download files using MMS file services\n\nRun examples:\n```bash\npython examples/01_basic_connection.py 192.168.1.100\npython examples/02_device_discovery.py 192.168.1.100\n```\n\n## Building from Source\n\nThe wheel package is built using Docker:\n\n```bash\ndocker build -t pyiec61850-builder --build-arg LIBIEC61850_VERSION=v1.6 .\n```\n\nTo extract the wheel file:\n\n```bash\nmkdir -p ./dist\ndocker create --name wheel-container pyiec61850-builder\ndocker cp wheel-container:/wheels/. ./dist/\ndocker rm wheel-container\n```\n\n## Versioning\n\nThis package uses the format: `LIBIEC61850_VERSION.REVISION`\n- **Example**: `1.6.0.1` = libiec61850 v1.6.0, first package revision\n- **1.6.0**: The exact libiec61850 version included (static)\n- **.1**: Package revision for bug fixes, rebuilds, binding improvements\n\nThis clearly shows which libiec61850 version you're getting and our package iteration.\n\nCheck current version:\n```bash\npython version.py # Package version: 1.6.0.1\npython version.py --libiec61850 # libiec61850 version: v1.6.0\n```\n\n",
"bugtrack_url": null,
"license": "GPLv3",
"summary": "Python bindings for libiec61850 - IEC 61850 protocol implementation",
"version": "1.6.0.5",
"project_urls": {
"Bug Reports": "https://github.com/f0rw4rd/pyiec61850-ng/issues",
"Documentation": "https://github.com/f0rw4rd/pyiec61850-ng#readme",
"Homepage": "https://github.com/f0rw4rd/pyiec61850-ng",
"Source": "https://github.com/f0rw4rd/pyiec61850-ng"
},
"split_keywords": [
"iec61850",
"mms",
"goose",
"iec-61850",
"power-systems",
"substation-automation",
"smart-grid",
"scada"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "6dca5eb8400e5958358b7e9060eddb59e2da4db4a6ece29e01c9a7cee1cf778e",
"md5": "94247e499a6c8529db02c4938ea1e217",
"sha256": "0beda65b3b49f504af5a56003722d06bcf15081ab23a68be9f75e3310d8b49e7"
},
"downloads": -1,
"filename": "pyiec61850_ng-1.6.0.5-cp310-cp310-manylinux1_x86_64.whl",
"has_sig": false,
"md5_digest": "94247e499a6c8529db02c4938ea1e217",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.8",
"size": 1865460,
"upload_time": "2025-07-30T18:04:16",
"upload_time_iso_8601": "2025-07-30T18:04:16.319831Z",
"url": "https://files.pythonhosted.org/packages/6d/ca/5eb8400e5958358b7e9060eddb59e2da4db4a6ece29e01c9a7cee1cf778e/pyiec61850_ng-1.6.0.5-cp310-cp310-manylinux1_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "3eff00959f9dbada07671edf45d8f3af0ae77dd3f66e5694eb8fa8b52a3717d4",
"md5": "35b5f29ed4def754c07072feb1a4d735",
"sha256": "8993ae77531c497477f60af2ce72974cf3c77644c19e8ce6f0bd79de6378e38c"
},
"downloads": -1,
"filename": "pyiec61850_ng-1.6.0.5-cp311-cp311-manylinux1_x86_64.whl",
"has_sig": false,
"md5_digest": "35b5f29ed4def754c07072feb1a4d735",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.8",
"size": 1865640,
"upload_time": "2025-07-30T18:04:18",
"upload_time_iso_8601": "2025-07-30T18:04:18.265618Z",
"url": "https://files.pythonhosted.org/packages/3e/ff/00959f9dbada07671edf45d8f3af0ae77dd3f66e5694eb8fa8b52a3717d4/pyiec61850_ng-1.6.0.5-cp311-cp311-manylinux1_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "00e74d31c2dae14b301f9e6a697a6300fc0aa1adb89bb63be511c9e3ea92daae",
"md5": "2b5befc19277cec5b997220622f34787",
"sha256": "1065258defd7683a4877baf4fd8455b30628ddba0790368b812b433bd7781646"
},
"downloads": -1,
"filename": "pyiec61850_ng-1.6.0.5-cp312-cp312-manylinux1_x86_64.whl",
"has_sig": false,
"md5_digest": "2b5befc19277cec5b997220622f34787",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.8",
"size": 1866340,
"upload_time": "2025-07-30T18:04:19",
"upload_time_iso_8601": "2025-07-30T18:04:19.331345Z",
"url": "https://files.pythonhosted.org/packages/00/e7/4d31c2dae14b301f9e6a697a6300fc0aa1adb89bb63be511c9e3ea92daae/pyiec61850_ng-1.6.0.5-cp312-cp312-manylinux1_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "fc4d866536c4d734b595709c4a7cace2f61353cc7569d52f229df7e9fda303fa",
"md5": "e89f1ef0e4efa33ed4c3e1a2b1a4e909",
"sha256": "79a733001bf6b388fa43065c73cd89c4f74a06d908b2452499e7b3652ae3c6cc"
},
"downloads": -1,
"filename": "pyiec61850_ng-1.6.0.5-cp313-cp313-manylinux1_x86_64.whl",
"has_sig": false,
"md5_digest": "e89f1ef0e4efa33ed4c3e1a2b1a4e909",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.8",
"size": 1866400,
"upload_time": "2025-07-30T18:04:20",
"upload_time_iso_8601": "2025-07-30T18:04:20.736518Z",
"url": "https://files.pythonhosted.org/packages/fc/4d/866536c4d734b595709c4a7cace2f61353cc7569d52f229df7e9fda303fa/pyiec61850_ng-1.6.0.5-cp313-cp313-manylinux1_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "9d9da905626de7ab4edabf6cb468a5c394bd7e8294db36cff765db5ce891f5c8",
"md5": "391eefb3bdfa9507f4bfbed713b3e029",
"sha256": "00396127994c82916d9b46f772ad42158d4e6cb8a7bb020bfcfabca8cd5e7b47"
},
"downloads": -1,
"filename": "pyiec61850_ng-1.6.0.5-cp38-cp38-manylinux1_x86_64.whl",
"has_sig": false,
"md5_digest": "391eefb3bdfa9507f4bfbed713b3e029",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.8",
"size": 1859123,
"upload_time": "2025-07-30T18:04:22",
"upload_time_iso_8601": "2025-07-30T18:04:22.187309Z",
"url": "https://files.pythonhosted.org/packages/9d/9d/a905626de7ab4edabf6cb468a5c394bd7e8294db36cff765db5ce891f5c8/pyiec61850_ng-1.6.0.5-cp38-cp38-manylinux1_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "85b0f84109cca98d8cfd8791359efbcd2f98f5056fe1e215edc017ce719527ff",
"md5": "939624216a15fe2132a5e666eb45ca14",
"sha256": "2ff97f2b05b81d9906cbe8efb882b57418bdb2e7cca68d94109892d722ec303a"
},
"downloads": -1,
"filename": "pyiec61850_ng-1.6.0.5-cp39-cp39-manylinux1_x86_64.whl",
"has_sig": false,
"md5_digest": "939624216a15fe2132a5e666eb45ca14",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.8",
"size": 1859123,
"upload_time": "2025-07-30T18:04:23",
"upload_time_iso_8601": "2025-07-30T18:04:23.240133Z",
"url": "https://files.pythonhosted.org/packages/85/b0/f84109cca98d8cfd8791359efbcd2f98f5056fe1e215edc017ce719527ff/pyiec61850_ng-1.6.0.5-cp39-cp39-manylinux1_x86_64.whl",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-07-30 18:04:16",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "f0rw4rd",
"github_project": "pyiec61850-ng",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "pyiec61850-ng"
}