# iec104-python
__Table of contents__
1. [Introduction](#introduction)
2. [Licensing](#licensing)
3. [System requirements](#system-requirements)
4. [Installation](#installation)
5. [Documentation](#documentation)
6. [Contribution](#contribution)
---
## Introduction
This software provides an object-oriented high-level python module to simulate scada systems and remote terminal units communicating via 60870-5-104 protocol.
The python module c104 combines the use of lib60870-C with state structures and python callback handlers.
**Example remote terminal unit**
```python
import c104
# server and station preparation
server = c104.Server(ip="0.0.0.0", port=2404)
# add local station and points
station = server.add_station(common_address=47)
measurement_point = station.add_point(io_address=11, type=c104.Type.M_ME_NC_1, report_ms=5000)
command_point = station.add_point(io_address=12, type=c104.Type.C_RC_TA_1)
server.start()
```
**Example scada unit**
```python
import c104
client = c104.Client()
# add RTU with station and points
connection = client.add_connection(ip="127.0.0.1", port=2404, init=c104.Init.INTERROGATION)
station = connection.add_station(common_address=47)
measurement_point = station.add_point(io_address=11, type=c104.Type.M_ME_NC_1)
command_point = station.add_point(io_address=12, type=c104.Type.C_RC_TA_1)
client.start()
```
See [examples](https://github.com/Fraunhofer-FIT-DIEN/iec104-python/tree/main/examples) folder for more detailed examples.
## Licensing
This software is licensed under the GPLv3 (https://www.gnu.org/licenses/gpl-3.0.en.html).
See [LICENSE](https://github.com/Fraunhofer-FIT-DIEN/iec104-python/blob/main/LICENSE) file for the complete license text.
### Dependencies
#### lib60870-C
This project is build on top of lib60870-C v2 from MZ Automation GmbH, which is licensed under [GPLv3](https://www.gnu.org/licenses/gpl-3.0.en.html).
The library is used for 60870-5-104 protocol based communication.
[» Source code](https://github.com/mz-automation/lib60870)
[» Documentation](https://support.mz-automation.de/doc/lib60870/latest/index.html)
#### mbedtls
This project is build on top of mbedtls from the Mbed TLS Contributors, which is licensed under [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0).
The library is used to add transport layer security to the 60870-5-104 protocol based communication.
[» Source code](https://github.com/Mbed-TLS/mbedtls)
[» Documentation](https://www.trustedfirmware.org/projects/mbed-tls/)
#### pybind11
This project is build on top of pybind11 from Wenzel Jakob, which is licensed under a [BSD-style license](https://github.com/pybind/pybind11/blob/master/LICENSE).
The library is used to wrap c++ code into a python module and allow seamless operability between python and c++.
[» Source code](https://github.com/pybind/pybind11)
[» Documentation](https://pybind11.readthedocs.io/en/stable/)
#### catch2
This project is build on top of catch2 from the Catch2 Authors, which is licensed under [BSL-1.0](https://www.boost.org/users/license.html).
The library is used as testing framework for test-automation.
[» Source code](https://github.com/catchorg/Catch2)
[» Documentation](https://github.com/catchorg/Catch2/blob/devel/docs/Readme.md)
## System requirements
### Operating systems
* Manylinux (x86_64): YES
* Manylinux (aarch64): YES
* Raspbian (armv7l): YES
* Windows (x64): YES
### Python versions
* python >= 3.7, < 3.13
## Installation
Please adjust the version number to the latest version or use a specific version according to your needs.
### Install from pypi.org
```bash
python3 -m pip install c104
```
### Install from git with tag
```bash
python3 -m pip install c104@git+https://github.com/fraunhofer-fit-dien/iec104-python.git
```
You need the build requirements, listed under "How to build".
## Documentation
Read more about the **Classes** and their **Properties** in our [read the docs documentation](https://iec104-python.readthedocs.io/latest/index.html).
## Contribution
### How to contribute
1. Add feature requests and report bugs using GitHub's issues
1. Create pull requests
### How to build (linux)
1. Install dependencies
```bash
sudo apt-get install build-essential python3-pip python3-dev python3-dbg
python3 -m pip install --upgrade pip
```
1. Clone repository
```bash
git clone --depth=1 --branch=main https://github.com/Fraunhofer-FIT-DIEN/iec104-python.git
cd iec104-python
git submodule update --init
```
1. Build wheel
```bash
python3 -m pip wheel .
```
### How to build for multiple python versions (linux with docker)
1. Build wheels via docker (linux)
```bash
/bin/bash ./bin/linux-build.sh
```
### How to analyze performance (linux)
1. Install dependencies
```bash
sudo apt-get install google-perftools valgrind
sudo pip3 install yep
```
1. Copy pprof binary
```bash
cd /usr/bin
sudo wget https://raw.githubusercontent.com/gperftools/gperftools/master/src/pprof
sudo chmod +x pprof
```
1. Execute profiler script
```bash
./bin/profiler.sh
```
### How to build (windows)
1. Install dependencies
- [Python 3](https://www.python.org/downloads/windows/)
- [Buildtools für Visual Studio 2022](https://visualstudio.microsoft.com/de/downloads/) (Scroll down » All Downloads » Tools for Visual Studio 2022)
1. Option 1: Build as wheel
```bash
python3 -m pip wheel .
```
1. Option 2: Build pyd via Powershell
```powershell
cmake -DCMAKE_BUILD_TYPE=Release -G "Visual Studio 17 2022" -B cmake-build-release -A x64 -DPython_EXECUTABLE=C:\PATH_TO_PYTHON\python.exe
&"C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\MSBuild\Current\Bin\MSBuild.exe" /m /p:Platform=x64 /p:Configuration=Release c104.sln /t:Rebuild
```
Set a valid PATH_TO_PYTHON, if you have multiple python versions. \
Set a valid path to MSBuild.exe unless msbuild is already in path.
### Generate documentation
1. Build c104 module
1. Install dependencies
- `python3 -m pip install -r ./docs/requirements.txt`
- doxygen
- graphviz
1. Build doxygen xml
```bash
doxygen Doxyfile
```
1. Build sphinx html
```bash
python3 bin/build-docs.py
```
## Change log
Track all changes in our [CHANGELOG](https://github.com/Fraunhofer-FIT-DIEN/iec104-python/blob/main/CHANGELOG.md) documentation.
Raw data
{
"_id": null,
"home_page": "https://github.com/fraunhofer-fit-dien/iec104-python",
"name": "c104",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.7",
"maintainer_email": null,
"keywords": "Python bindings, scada, rtu, remote-terminal-unit, mtu, master-terminal-unit, energy-management, 60870-5-104, iec60870-5-104, iec60870-5, 60870, lib60870, lib60870-C",
"author": "Martin Unkel, Fraunhofer FIT",
"author_email": "martin.unkel@fit.fraunhofer.de",
"download_url": "https://files.pythonhosted.org/packages/70/ce/6a6a35d8aa95ab9e78e8fa1948da1ae55827e7605585b24d0e380429b31b/c104-2.0.2.tar.gz",
"platform": null,
"description": "# iec104-python\n\n__Table of contents__\n1. [Introduction](#introduction)\n2. [Licensing](#licensing)\n3. [System requirements](#system-requirements)\n4. [Installation](#installation)\n5. [Documentation](#documentation)\n6. [Contribution](#contribution)\n\n\n---\n\n## Introduction\n\nThis software provides an object-oriented high-level python module to simulate scada systems and remote terminal units communicating via 60870-5-104 protocol.\n\nThe python module c104 combines the use of lib60870-C with state structures and python callback handlers.\n\n**Example remote terminal unit**\n\n```python\nimport c104\n\n# server and station preparation\nserver = c104.Server(ip=\"0.0.0.0\", port=2404)\n\n# add local station and points\nstation = server.add_station(common_address=47)\nmeasurement_point = station.add_point(io_address=11, type=c104.Type.M_ME_NC_1, report_ms=5000)\ncommand_point = station.add_point(io_address=12, type=c104.Type.C_RC_TA_1)\n\nserver.start()\n```\n\n**Example scada unit**\n\n```python\nimport c104\n\nclient = c104.Client()\n\n# add RTU with station and points\nconnection = client.add_connection(ip=\"127.0.0.1\", port=2404, init=c104.Init.INTERROGATION)\nstation = connection.add_station(common_address=47)\nmeasurement_point = station.add_point(io_address=11, type=c104.Type.M_ME_NC_1)\ncommand_point = station.add_point(io_address=12, type=c104.Type.C_RC_TA_1)\n\nclient.start()\n```\n\nSee [examples](https://github.com/Fraunhofer-FIT-DIEN/iec104-python/tree/main/examples) folder for more detailed examples.\n\n## Licensing\n\nThis software is licensed under the GPLv3 (https://www.gnu.org/licenses/gpl-3.0.en.html).\n\nSee [LICENSE](https://github.com/Fraunhofer-FIT-DIEN/iec104-python/blob/main/LICENSE) file for the complete license text.\n\n### Dependencies\n\n#### lib60870-C\n\nThis project is build on top of lib60870-C v2 from MZ Automation GmbH, which is licensed under [GPLv3](https://www.gnu.org/licenses/gpl-3.0.en.html).\n\nThe library is used for 60870-5-104 protocol based communication.\n\n[» Source code](https://github.com/mz-automation/lib60870)\n\n[» Documentation](https://support.mz-automation.de/doc/lib60870/latest/index.html)\n\n#### mbedtls\n\nThis project is build on top of mbedtls from the Mbed TLS Contributors, which is licensed under [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0).\n\nThe library is used to add transport layer security to the 60870-5-104 protocol based communication.\n\n[» Source code](https://github.com/Mbed-TLS/mbedtls)\n\n[» Documentation](https://www.trustedfirmware.org/projects/mbed-tls/)\n\n#### pybind11\n\nThis project is build on top of pybind11 from Wenzel Jakob, which is licensed under a [BSD-style license](https://github.com/pybind/pybind11/blob/master/LICENSE).\n\nThe library is used to wrap c++ code into a python module and allow seamless operability between python and c++.\n\n[» Source code](https://github.com/pybind/pybind11)\n\n[» Documentation](https://pybind11.readthedocs.io/en/stable/)\n\n#### catch2\n\nThis project is build on top of catch2 from the Catch2 Authors, which is licensed under [BSL-1.0](https://www.boost.org/users/license.html).\n\nThe library is used as testing framework for test-automation.\n\n[» Source code](https://github.com/catchorg/Catch2)\n\n[» Documentation](https://github.com/catchorg/Catch2/blob/devel/docs/Readme.md)\n\n\n## System requirements\n\n### Operating systems\n\n* Manylinux (x86_64): YES\n* Manylinux (aarch64): YES\n* Raspbian (armv7l): YES\n* Windows (x64): YES\n\n### Python versions\n* python >= 3.7, < 3.13\n\n## Installation\nPlease adjust the version number to the latest version or use a specific version according to your needs.\n\n### Install from pypi.org\n```bash\npython3 -m pip install c104\n```\n\n### Install from git with tag\n```bash\npython3 -m pip install c104@git+https://github.com/fraunhofer-fit-dien/iec104-python.git\n```\n\nYou need the build requirements, listed under \"How to build\".\n\n## Documentation\n\nRead more about the **Classes** and their **Properties** in our [read the docs documentation](https://iec104-python.readthedocs.io/latest/index.html).\n\n## Contribution\n\n### How to contribute\n\n1. Add feature requests and report bugs using GitHub's issues\n\n1. Create pull requests\n\n### How to build (linux)\n\n1. Install dependencies\n ```bash\n sudo apt-get install build-essential python3-pip python3-dev python3-dbg\n python3 -m pip install --upgrade pip\n ```\n\n1. Clone repository\n ```bash\n git clone --depth=1 --branch=main https://github.com/Fraunhofer-FIT-DIEN/iec104-python.git\n cd iec104-python\n git submodule update --init\n ```\n\n1. Build wheel\n ```bash\n python3 -m pip wheel .\n ```\n\n### How to build for multiple python versions (linux with docker)\n\n1. Build wheels via docker (linux)\n ```bash\n /bin/bash ./bin/linux-build.sh\n ```\n\n### How to analyze performance (linux)\n\n1. Install dependencies\n ```bash\n sudo apt-get install google-perftools valgrind\n sudo pip3 install yep\n ```\n\n1. Copy pprof binary\n ```bash\n cd /usr/bin\n sudo wget https://raw.githubusercontent.com/gperftools/gperftools/master/src/pprof\n sudo chmod +x pprof\n ```\n\n1. Execute profiler script\n ```bash\n ./bin/profiler.sh\n ```\n\n### How to build (windows)\n\n1. Install dependencies\n - [Python 3](https://www.python.org/downloads/windows/)\n - [Buildtools f\u00fcr Visual Studio 2022](https://visualstudio.microsoft.com/de/downloads/) (Scroll down » All Downloads » Tools for Visual Studio 2022)\n\n1. Option 1: Build as wheel\n ```bash\n python3 -m pip wheel .\n ```\n\n1. Option 2: Build pyd via Powershell\n ```powershell\n cmake -DCMAKE_BUILD_TYPE=Release -G \"Visual Studio 17 2022\" -B cmake-build-release -A x64 -DPython_EXECUTABLE=C:\\PATH_TO_PYTHON\\python.exe\n &\"C:\\Program Files (x86)\\Microsoft Visual Studio\\2022\\BuildTools\\MSBuild\\Current\\Bin\\MSBuild.exe\" /m /p:Platform=x64 /p:Configuration=Release c104.sln /t:Rebuild\n ```\n Set a valid PATH_TO_PYTHON, if you have multiple python versions. \\\n Set a valid path to MSBuild.exe unless msbuild is already in path.\n\n### Generate documentation\n\n1. Build c104 module\n\n1. Install dependencies\n - `python3 -m pip install -r ./docs/requirements.txt`\n - doxygen\n - graphviz\n\n1. Build doxygen xml\n ```bash\n doxygen Doxyfile\n ```\n\n1. Build sphinx html\n ```bash\n python3 bin/build-docs.py\n ```\n\n## Change log\n\nTrack all changes in our [CHANGELOG](https://github.com/Fraunhofer-FIT-DIEN/iec104-python/blob/main/CHANGELOG.md) documentation.\n",
"bugtrack_url": null,
"license": "GPLv3",
"summary": "A Python module to simulate SCADA and RTU communication over protocol 60870-5-104 to research ICT behavior in power grids.",
"version": "2.0.2",
"project_urls": {
"Bug Tracker": "https://github.com/Fraunhofer-FIT-DIEN/iec104-python/issues",
"Changelog": "https://iec104-python.readthedocs.io/latest/changelog.html",
"Documentation": "https://iec104-python.readthedocs.io/latest/python/index.html",
"Homepage": "https://github.com/fraunhofer-fit-dien/iec104-python",
"Source Code": "https://github.com/Fraunhofer-FIT-DIEN/iec104-python"
},
"split_keywords": [
"python bindings",
" scada",
" rtu",
" remote-terminal-unit",
" mtu",
" master-terminal-unit",
" energy-management",
" 60870-5-104",
" iec60870-5-104",
" iec60870-5",
" 60870",
" lib60870",
" lib60870-c"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "d67789872fc493b5e8e3ef0dd659f9a85b37cf502b859dd1622eb2c9b8f4c76a",
"md5": "8899065f5596ff9aeb4580dfdf221632",
"sha256": "61767b3ff2534029f45d333cf904add14ac825ba8ad24a4e97001bd45881335c"
},
"downloads": -1,
"filename": "c104-2.0.2-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl",
"has_sig": false,
"md5_digest": "8899065f5596ff9aeb4580dfdf221632",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.7",
"size": 550430,
"upload_time": "2024-11-04T12:01:42",
"upload_time_iso_8601": "2024-11-04T12:01:42.804434Z",
"url": "https://files.pythonhosted.org/packages/d6/77/89872fc493b5e8e3ef0dd659f9a85b37cf502b859dd1622eb2c9b8f4c76a/c104-2.0.2-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "20d70834769f60002f7cc8d146747bbc25079446dc490fa7def37fce3410c653",
"md5": "f8e2380a75027080da3c10ac3f11ae7b",
"sha256": "9a3c8aa395dce606c0c59b86fe557e2255746e1c634d6d30c1024f2814782951"
},
"downloads": -1,
"filename": "c104-2.0.2-cp310-cp310-win_amd64.whl",
"has_sig": false,
"md5_digest": "f8e2380a75027080da3c10ac3f11ae7b",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.7",
"size": 483189,
"upload_time": "2024-11-04T12:01:45",
"upload_time_iso_8601": "2024-11-04T12:01:45.149844Z",
"url": "https://files.pythonhosted.org/packages/20/d7/0834769f60002f7cc8d146747bbc25079446dc490fa7def37fce3410c653/c104-2.0.2-cp310-cp310-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "e6a8bfa418e52005d1ec602abf65a0bf9b420c31a461e4cefec26a85d22e646f",
"md5": "01822a342e0f0b8154675f26f90c2003",
"sha256": "6924fd256b9d4fe7ba30f91200c41cf7d78937ad94cb313a317421e1c45313cf"
},
"downloads": -1,
"filename": "c104-2.0.2-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl",
"has_sig": false,
"md5_digest": "01822a342e0f0b8154675f26f90c2003",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.7",
"size": 551017,
"upload_time": "2024-11-04T12:01:46",
"upload_time_iso_8601": "2024-11-04T12:01:46.342735Z",
"url": "https://files.pythonhosted.org/packages/e6/a8/bfa418e52005d1ec602abf65a0bf9b420c31a461e4cefec26a85d22e646f/c104-2.0.2-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "5e23b831303fde69c3b7b0a74dadc23943d3709e7914b9776436dbe859065c34",
"md5": "5e07f19c459557231824775626837932",
"sha256": "c5c4ece99d981040eaf4b45aed464a03ecf0bbf4468e30136897877da21d8c40"
},
"downloads": -1,
"filename": "c104-2.0.2-cp311-cp311-win_amd64.whl",
"has_sig": false,
"md5_digest": "5e07f19c459557231824775626837932",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.7",
"size": 483899,
"upload_time": "2024-11-04T12:01:47",
"upload_time_iso_8601": "2024-11-04T12:01:47.924283Z",
"url": "https://files.pythonhosted.org/packages/5e/23/b831303fde69c3b7b0a74dadc23943d3709e7914b9776436dbe859065c34/c104-2.0.2-cp311-cp311-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "10f8ea32f942fe688160244464b4d9d4b919c1a45e27166fc3c3ab3ffec3c4d0",
"md5": "ef1fc244fc2c1bf65b642fa3885f7b0d",
"sha256": "6ff571cbf0858839c2a8e9b946c01d851c817f339c8a50a558b7a9246bc60017"
},
"downloads": -1,
"filename": "c104-2.0.2-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl",
"has_sig": false,
"md5_digest": "ef1fc244fc2c1bf65b642fa3885f7b0d",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.7",
"size": 550981,
"upload_time": "2024-11-04T12:01:49",
"upload_time_iso_8601": "2024-11-04T12:01:49.774662Z",
"url": "https://files.pythonhosted.org/packages/10/f8/ea32f942fe688160244464b4d9d4b919c1a45e27166fc3c3ab3ffec3c4d0/c104-2.0.2-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "b9da615c59b0bb3333fb129d8bef4849f35a4401ace08a37079e46121bb50947",
"md5": "b46bc0f0ed30af97f5eb563527f63863",
"sha256": "2699c69d8ee40f7b825509b88b0ef5a7f8dad9bfa4bd4abec6e0abeb7a6b1fd5"
},
"downloads": -1,
"filename": "c104-2.0.2-cp312-cp312-win_amd64.whl",
"has_sig": false,
"md5_digest": "b46bc0f0ed30af97f5eb563527f63863",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.7",
"size": 485122,
"upload_time": "2024-11-04T12:01:51",
"upload_time_iso_8601": "2024-11-04T12:01:51.583531Z",
"url": "https://files.pythonhosted.org/packages/b9/da/615c59b0bb3333fb129d8bef4849f35a4401ace08a37079e46121bb50947/c104-2.0.2-cp312-cp312-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "86f1f231d0f8f7e796d23e04403b0ac291e648b52a402aaa03513c5e8723a63e",
"md5": "05338b8dd264018d85ddfd2133bcdceb",
"sha256": "a01cc3550b58f36ff8ebe52dd9b3dd49c09e24e60594cd43432ae28d0939a263"
},
"downloads": -1,
"filename": "c104-2.0.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "05338b8dd264018d85ddfd2133bcdceb",
"packagetype": "bdist_wheel",
"python_version": "cp37",
"requires_python": ">=3.7",
"size": 583828,
"upload_time": "2024-11-04T12:01:53",
"upload_time_iso_8601": "2024-11-04T12:01:53.011801Z",
"url": "https://files.pythonhosted.org/packages/86/f1/f231d0f8f7e796d23e04403b0ac291e648b52a402aaa03513c5e8723a63e/c104-2.0.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "c7bd89570a6d252d6b8ea33d342b3cc828e5fef6a92fe7dde42d85fffb26d575",
"md5": "26df35d22abde0aa1a09142b3980bb66",
"sha256": "6b6f61982715b3b42ab2d2c79c7f9c08835c0a482693f8aded1837e7cadc5675"
},
"downloads": -1,
"filename": "c104-2.0.2-cp37-cp37m-win_amd64.whl",
"has_sig": false,
"md5_digest": "26df35d22abde0aa1a09142b3980bb66",
"packagetype": "bdist_wheel",
"python_version": "cp37",
"requires_python": ">=3.7",
"size": 480222,
"upload_time": "2024-11-04T12:01:54",
"upload_time_iso_8601": "2024-11-04T12:01:54.762128Z",
"url": "https://files.pythonhosted.org/packages/c7/bd/89570a6d252d6b8ea33d342b3cc828e5fef6a92fe7dde42d85fffb26d575/c104-2.0.2-cp37-cp37m-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "3584a12af22d04bb563c1e53c2d23dc46d575a9391318327b0c1d8d4ceffe70f",
"md5": "3749633494825a6032d1c685a09bb33a",
"sha256": "6daf43314373ff8d14f41e89d874d26f7a0967ced5669150842751b35455ec96"
},
"downloads": -1,
"filename": "c104-2.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "3749633494825a6032d1c685a09bb33a",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.7",
"size": 589410,
"upload_time": "2024-11-04T12:01:56",
"upload_time_iso_8601": "2024-11-04T12:01:56.487452Z",
"url": "https://files.pythonhosted.org/packages/35/84/a12af22d04bb563c1e53c2d23dc46d575a9391318327b0c1d8d4ceffe70f/c104-2.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "7a819cd2e70395edcaed6e55556200d3069c700384ec3dbedcad3929823a2423",
"md5": "756f36f021a679ebe91b47132cdb5916",
"sha256": "dbd2b9c266af005fa59dc03afb5a5cc4db85d5f9c72459fd1ad0c012d55f91fe"
},
"downloads": -1,
"filename": "c104-2.0.2-cp38-cp38-win_amd64.whl",
"has_sig": false,
"md5_digest": "756f36f021a679ebe91b47132cdb5916",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.7",
"size": 483137,
"upload_time": "2024-11-04T12:01:58",
"upload_time_iso_8601": "2024-11-04T12:01:58.071193Z",
"url": "https://files.pythonhosted.org/packages/7a/81/9cd2e70395edcaed6e55556200d3069c700384ec3dbedcad3929823a2423/c104-2.0.2-cp38-cp38-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "272d679a28d4123a0c877663c5f36f4b6eed049c1577c1076e417c728aa074b6",
"md5": "e44c9c0f76b5c73013e42c290436d3ac",
"sha256": "c13cc10dc0f481d73894f8960d867e10fb67b49f2682c19e164f240835402c68"
},
"downloads": -1,
"filename": "c104-2.0.2-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl",
"has_sig": false,
"md5_digest": "e44c9c0f76b5c73013e42c290436d3ac",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.7",
"size": 550621,
"upload_time": "2024-11-04T12:01:59",
"upload_time_iso_8601": "2024-11-04T12:01:59.735734Z",
"url": "https://files.pythonhosted.org/packages/27/2d/679a28d4123a0c877663c5f36f4b6eed049c1577c1076e417c728aa074b6/c104-2.0.2-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "362131c38a4b2890a3880c2b1b08180a086757b95a3bd2e52d66ba35a0944f3b",
"md5": "a0c5e8c2a073ba9135827026f56b7c27",
"sha256": "ae6e6a027092cc71572b476bc5cc6c29cb9931e05259d92bc7752ee319386581"
},
"downloads": -1,
"filename": "c104-2.0.2-cp39-cp39-win_amd64.whl",
"has_sig": false,
"md5_digest": "a0c5e8c2a073ba9135827026f56b7c27",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.7",
"size": 483402,
"upload_time": "2024-11-04T12:02:01",
"upload_time_iso_8601": "2024-11-04T12:02:01.627432Z",
"url": "https://files.pythonhosted.org/packages/36/21/31c38a4b2890a3880c2b1b08180a086757b95a3bd2e52d66ba35a0944f3b/c104-2.0.2-cp39-cp39-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "70ce6a6a35d8aa95ab9e78e8fa1948da1ae55827e7605585b24d0e380429b31b",
"md5": "c043a4033b0b347bc3191446cf4a7991",
"sha256": "a31c7ed85e82aa026a620b08ea1ebf36ee740d5bda74fe42117d7b044f5ead07"
},
"downloads": -1,
"filename": "c104-2.0.2.tar.gz",
"has_sig": false,
"md5_digest": "c043a4033b0b347bc3191446cf4a7991",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.7",
"size": 1517549,
"upload_time": "2024-11-04T12:02:02",
"upload_time_iso_8601": "2024-11-04T12:02:02.995883Z",
"url": "https://files.pythonhosted.org/packages/70/ce/6a6a35d8aa95ab9e78e8fa1948da1ae55827e7605585b24d0e380429b31b/c104-2.0.2.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-11-04 12:02:02",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "fraunhofer-fit-dien",
"github_project": "iec104-python",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"lcname": "c104"
}