s7commplus
Pure-Python S7CommPlus communication for Siemens S7-1200 and S7-1500 PLCs. It supports S7CommPlus V1, V2 (TLS), and V3; synchronous and asyncio clients; and a server emulator for testing. Both clients support legacy V1 SessionKey authentication, validated on a real S7-1200 (sync and async clients), an S7-1500 (sync client), and S7-PLCSIM Advanced (sync and async clients).
Installation
Install the latest stable release from PyPI:
python -m pip install --upgrade s7commplus
See the s7commplus documentation for the complete user guide and API reference.
from s7commplus import Client
with Client() as client:
client.connect("192.168.1.10", 0, 1)
data = client.db_read(1, 0, 4)
S7CommPlus is used by newer S7-1200/1500 PLCs when classic PUT/GET access is disabled. This is an unofficial implementation and is not affiliated with, endorsed by, or supported by Siemens AG. Test against an isolated controller before using it in production or safety-relevant environments.
Some older PLCs advertise only their SessionKey family instead of a complete
public-key fingerprint. Client and AsyncClient try the bounded set of
bundled keys from that family on fresh sessions and cache the confirmed key
for the PLC. Set allow_legacy_key_fallback=False on connect() when key
probing must be disabled.
The order number a PLC reports during connect can be turned into a readable module name and family:
from s7commplus import device_family, device_name
device_name("6ES7 512-1DK01-0AB0") # 'CPU 1512SP-1 PN'
device_family("6ES7 512-1DK01-0AB0") # 's7-1500-sp'
DEVICE_NAMES holds the full table (S7-1200/1500 controllers, SIPLUS
variants, software controllers and PLCSIM; classic S7-300/400 is out of
scope). python tools/check_devices_table.py validates its shape.
Installing the package also installs a s7commplus command-line tool:
s7commplus browse --host 192.168.1.10
s7commplus read --host 192.168.1.10 DB1.Motor.Speed
See the command-line interface guide in the documentation.
Development
Cloning the repository is only necessary for developing or testing
s7commplus. To use the stable library in an application, install it from PyPI
as shown above.
git clone https://github.com/gijzelaerr/s7commplus.git
cd s7commplus
python -m pip install -e '.[test,docs]'
pytest
mypy s7commplus
ruff check s7commplus tests
ruff format --check s7commplus tests
The published documentation is hosted on Read the Docs and validated in CI. To build it locally from a development checkout:
sphinx-build -W --keep-going -b html docs docs/_build/html
The V1 SessionKey implementation derives from HarpoS7; its MIT
license is included at s7commplus/v1_session_key/LICENSE-HarpoS7.
Metadata
Release files for s7commplus 0.3.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| s7commplus-0.3.0.tar.gz | 521.4 kB | With provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| s7commplus-0.3.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 798.7 kB
Release files / s7commplus-0.3.0.tar.gz
| Download URL | s7commplus-0.3.0.tar.gz |
|---|---|
| Size | 521.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
bd8fdd98e17846f8da02b6bd464c06ee9e63b4561d94442876ea5e47559b1027
|
|
BLAKE2b-256 checksum How to use checksums |
54e3809868ef87d4033fc517edf8e63e3f421343723f30e4234fd4c82a8e681a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 20, 2026.
Transparency logRelease files / s7commplus-0.3.0-py3-none-any.whl
| Download URL | s7commplus-0.3.0-py3-none-any.whl |
|---|---|
| Size | 277.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
35297ad59d100a5aa1155968cd56ce4099c382eabb9f0346262aa71d7a2b94e8
|
|
BLAKE2b-256 checksum How to use checksums |
d940d5567fda09352bd37b5e4b60910803a61248ad8e1c5bf422bd92305f6784
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 20, 2026.
Transparency logSecurity for s7commplus 0.3.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for s7commplus-0.3.0.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 20, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.