Skip to main content

profinet-py

CI PyPI Python License Code style: ruff CLA

A Python library for PROFINET IO communication, acting as an IO-Controller.

Features

  • DCP Discovery & Configuration: Find devices, set IP/name, signal LEDs, factory reset with full SET response validation
  • DCE/RPC Communication: Establish Application Relationships (AR) and perform acyclic read/write via slot/subslot/index
  • I&M Records: Read/write Identification & Maintenance data (IM0-IM5)
  • Cyclic I/O: Real-time periodic data exchange (RT_CLASS_1) with state machine, double-buffered IO, cycle counter tracking, watchdog fault detection, and graceful shutdown
  • Alarm Handling: Background alarm listener per IEC 61158-6-10
  • Diagnosis Parsing: Channel, extended channel, and qualified channel diagnosis decoding
  • Vendor Registry: 2100+ PROFINET vendor IDs with name lookup
  • Declarative Parsing: Binary protocol parsing via construct library
  • Cross-Platform: Linux (AF_PACKET), Windows (Npcap)
  • High-level API: ProfinetDevice class and scan() for quick device interaction

Requirements

  • Python 3.10+
  • Administrator/root privileges (for raw Ethernet access)
  • construct>=2.10

Platform-specific

Platform Raw Socket Backend Extra Software
Linux AF_PACKET (built-in) None
Windows Npcap (wpcap.dll) Install Npcap with "WinPcap API-compatible Mode" enabled

Installation

pip install profinet-py

From source:

git clone https://github.com/f0rw4rd/profinet-py.git
cd profinet-py
pip install -e ".[dev]"

Usage

import profinet

# Discover all PROFINET devices on the network
for device in profinet.scan("eth0", timeout=5):
    print(f"Found: {device.name} at {device.ip} ({device.mac})")

On Windows, use the adapter's friendly name:

for device in profinet.scan("Ethernet 3", timeout=5):
    print(f"Found: {device.name} at {device.ip}")

Low-level DCP + RPC

from profinet.util import ethernet_socket, get_mac
from profinet.dcp import send_discover, read_response
from profinet.rpc import RPCCon

# Create raw socket on interface
sock = ethernet_socket("eth0")
src_mac = get_mac("eth0")

# Discover PROFINET devices
send_discover(sock, src_mac)
responses = read_response(sock, src_mac, timeout_sec=5)

sock.close()

CLI

# Discover devices
profinet -i eth0 discover

# Read I&M0 from device
profinet -i eth0 read-inm0 device-name

# Read raw record
profinet -i eth0 read device-name --slot 0 --subslot 1 --index 0xAFF0

# Cyclic IO monitoring (default 32ms cycle)
profinet -i eth0 cyclic device-name --gsdml device.xml

# Custom cycle time
profinet -i eth0 cyclic device-name --gsdml device.xml --cycle-ms 16

Support

If you find this project useful, consider supporting development:

Ko-fi

License

Dual-licensed under GPL-3.0 and a commercial license.

Free for open source use under GPL-3.0. If you want to use profinet-py in proprietary products without GPL obligations, a commercial license is available — see LICENSE-COMMERCIAL.md for details.

References

Trademarks

All marks belong to their owners; used nominatively to describe interoperability; no endorsement implied.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

profinet_py-0.6.3.tar.gz (235.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

profinet_py-0.6.3-py3-none-any.whl (173.6 kB view details)

Uploaded Python 3

File details

Details for the file profinet_py-0.6.3.tar.gz.

File metadata

  • Download URL: profinet_py-0.6.3.tar.gz
  • Upload date:
  • Size: 235.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for profinet_py-0.6.3.tar.gz
Algorithm Hash digest
SHA256 c3085b945c6955e883ecf67e5849c4ff06fca0c0b3d260ff9d16ca0294427f81
MD5 57c2ae2ca49413a3f56257f6f75571aa
BLAKE2b-256 f7a1574b6b0c388b2d1474a0976bb44d276fb0dec14ffb83116e0e43389bc82a

See more details on using hashes here.

Provenance

The following attestation bundles were made for profinet_py-0.6.3.tar.gz:

Publisher: release.yml on f0rw4rd/profinet-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file profinet_py-0.6.3-py3-none-any.whl.

File metadata

  • Download URL: profinet_py-0.6.3-py3-none-any.whl
  • Upload date:
  • Size: 173.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for profinet_py-0.6.3-py3-none-any.whl
Algorithm Hash digest
SHA256 df982012a0c78c7d74d93f117ec817063145388c44ed4ba4d2df35ba17cab403
MD5 1d4f0fe2664ad1f286ec6fcddfa278a4
BLAKE2b-256 e46d8052fe66956ebd7857818db9a46d6b48b02b39c65559b56cdbb2db87173d

See more details on using hashes here.

Provenance

The following attestation bundles were made for profinet_py-0.6.3-py3-none-any.whl:

Publisher: release.yml on f0rw4rd/profinet-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

This release

0.6.3 This release

2 files

0.6.2

2 files

0.6.1

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page