OdyCAT
Open machine and factory automation with Python
What is OdyCAT
OdyCAT connects Python programs to EtherCAT I/O and drives on Linux. It is a tool for machine builders, integrators and engineers who want to combine industrial control with vision, monitoring and data processing on a single computer, in one of the world's most widely used programming languages.
What it looks like: switch an output on for one second.
import time
from odycat.devices.amsamotion import EC3A_IO1632
io = EC3A_IO1632(label="io_module") # the I/O module labelled io_module in the config
io.set_out00(True) # output 00 on
time.sleep(1)
io.set_out00(False) # output 00 off
Why OdyCAT
- One PC, one language, full control: I/O, drives, vision, databases and your HMI in Python, on the same computer.
- One Python script per task: a real-time C engine runs the cycle and exchanges data with your scripts through shared memory. Run as many scripts as you need and split a machine, or a whole line, into small independent programs, easy to read and maintain.
- No vendor IDE, no runtime keys, nothing between you and the machine: any editor and the usual Python tools, AI assistants included. It's Python, after all.
- No artificial limits on device count, axes or I/O. Configurable bus cycle times from 125 µs to 10 ms.
- See what happened: a cycle-by-cycle trace of recent activity, and events on edges, value changes and slaves leaving OP.
- Batteries included: device classes in the
testedtier are tested on the real device before each release (device catalogue). - Security support: every release has a published support period and a vulnerability policy (SECURITY.md); with a commercial licence, the OdyCAT-specific security information for your machine's technical file (EU Cyber Resilience Act).
- Deploy where you want: x86-64 and ARM, from fanless industrial PCs to single-board computers. Run your scripts on the host or in containers.
- Open source, developed in the EU: inspect, keep and repair the code your machines run. Become resilient.
Where OdyCAT fits
- Machine control applications: work with I/O and drives from Python on Linux, alongside machine vision, SCADA or data-processing software.
- Integration and commissioning: configure devices, inspect bus data and use events and recent cycle history to investigate machine behaviour.
- Test benches and prototypes: work at a higher level than firmware, using industrial devices from the outset.
For more detail, see intended use and supported environments.
How it works
OdyCAT drives the IgH EtherCAT Master
through a small real-time C engine, which mirrors the process data of every
slave into shared memory. Scripts read inputs and write outputs there with
the odycat package, without making the engine wait for Python (scripts
that write the same outputs coordinate with a lock held for microseconds).
How steady the cycle is depends on the computer: see
cycle time and jitter and intended use.
Python scripts ⇄ shared memory ⇄ odycat (C, real time) ⇄ IgH master ⇄ slaves
from odycat import Events
from odycat.devices.amsamotion import EC3A_IO1632
io = EC3A_IO1632(label="io_module")
ev = Events()
@ev.rising(io.in03) # called when IN03 switches on
def pressed(e):
io.set_out00(not io.out00())
while True:
ev.sleep(0.1) # handlers run here, in this thread
- Device classes for drives (CiA 402) and I/O, by vendor, with every variable as a method your editor completes; generic classes for standard profiles (CiA 402, CiA 401, ETG.5001 modular I/O).
- Events on rising and falling edges, value changes, slaves leaving OP.
- Trace: the engine keeps a rolling record of recent cycles (10 s by default). Read it before the ring overwrites older data; it is not a persistent audit log.
odycat-config scanwrites the bus configuration from the connected slaves.
Documentation
Start with getting started (installing IgH and OdyCAT, a first config, starting the engine). Everything else is listed in the documentation index.
Get in touch
Working on a machine or evaluating OdyCAT for an application? We'd be glad to hear about it; contact Yoctovision. For bugs, improvements and contributions to the library, see CONTRIBUTING.md. Report security problems privately through SECURITY.md.
Licence
OdyCAT is available under the GNU GPL v3 or a commercial licence, see LICENSING.md. Contributions are welcome under CONTRIBUTING.md; decisions are described in GOVERNANCE.md. Security problems go to SECURITY.md, not to public issues.
Motivation
I'm Javier Martínez, the author of OdyCAT and technical director of Yoctovision. Open source has given me most of the tools I have built my work on, and OdyCAT is my way of giving something back: the tools I wanted for programming machines, open to every engineer who wants them. I look forward to seeing what you build with it, and to teaching and helping along the way. Yoctovision's commercial licences and engineering services help to sustain the project for the long term.
Developed in Spain, EU 🇪🇺
OdyCAT® is copyright © Ocean Octane S.L.U. and is published and supported by Yoctovision S.L.U. under licence. OdyCAT® name and logo are registered trademarks of Ocean Octane S.L.U. EtherCAT® is a registered trademark and patented technology, licensed by Beckhoff Automation GmbH, Germany. All other company and product names are the trademarks of their respective owners and only identify the hardware OdyCAT works with.
Metadata
Release files for odycat 1.0.1
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 | Actions |
|---|---|---|---|---|
| odycat-1.0.1.tar.gz | 165.5 kB | With provenance | Details for odycat-1.0.1.tar.gz |
Built distributions (wheels)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| odycat-1.0.1-py3-none-any.whl | Python 3 | none | any | Details for odycat-1.0.1-py3-none-any.whl |
| odycat-1.0.1-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl | CPython 3.11 | abi3 | Linux glibc 2.28+ ARM64, Linux glibc 2.17+ ARM64 | Details for odycat-1.0.1-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl |
| odycat-1.0.1-cp311-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl | CPython 3.11 | abi3 | Linux glibc 2.5+ x86-64, Linux glibc 2.28+ x86-64 | Details for odycat-1.0.1-cp311-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl |
Total release size: 594.5 kB
Release files / odycat-1.0.1.tar.gz
| Download URL | odycat-1.0.1.tar.gz |
|---|---|
| Size | 165.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
044301a433e2b7b1a413e89aa8ce49e7e452f051b163e346a5a4093724966aac
|
|
BLAKE2b-256 checksum How to use checksums |
97c02e2d32cca8f63960880eeb27ab5e7491b07ec0aad274790dd2d793e6d1a3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 Nov 10, 2026.
Transparency logRelease files / odycat-1.0.1-py3-none-any.whl
| Download URL | odycat-1.0.1-py3-none-any.whl |
|---|---|
| Size | 137.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
53deb8ac31b8479e3b895d329764c0c9564cd487eeff4efb7813d1274b87e17a
|
|
BLAKE2b-256 checksum How to use checksums |
90f1e1bbb8890937d433798493021d16a93b41780a38cde2329c3a7a49709290
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 Nov 10, 2026.
Transparency logRelease files / odycat-1.0.1-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
| Download URL | odycat-1.0.1-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl |
|---|---|
| Size | 146.3 kB |
| Tags | CPython 3.11 Linux glibc 2.17+ ARM64 Linux glibc 2.28+ ARM64 abi3 |
|
SHA-256 checksum How to use checksums |
28d1a9106aeac8c35a0da0a6733e431479b1dcac5911558a9e031882e185216a
|
|
BLAKE2b-256 checksum How to use checksums |
74cd7e5c3ba44dcbbdcc4cc37a3df60e8973d5dde2b7f775827dd54dc7fc69e5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 Nov 10, 2026.
Transparency logRelease files / odycat-1.0.1-cp311-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
| Download URL | odycat-1.0.1-cp311-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl |
|---|---|
| Size | 145.2 kB |
| Tags | CPython 3.11 Linux glibc 2.28+ x86-64 Linux glibc 2.5+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
0e21eed6f20be405db8562585b95178d35e2975f7d299b16a8c5e2b4bd652e0f
|
|
BLAKE2b-256 checksum How to use checksums |
b74c2ecaf6b3f529951d55ebfa8d504c42a1268b12e16bd29772f2d68c248edf
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 Nov 10, 2026.
Transparency logSecurity for odycat 1.0.1
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 4 files in this release have been uploaded with provenance metadata.
Attestation for odycat-1.0.1.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 Nov 10, 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.
To learn more about protecting yourself from malicious actors, visit our package security documentation.