openccu-data
Extract and distribute Homematic CCU configuration metadata (translations, easymodes, link profiles) from OpenCCU-Base / OpenCCU.
This repository is the single source of truth for the data artifacts that are consumed by aiohomematic and aiohomematic-config. Both projects vendor the produced JSON archives at runtime.
What this provides
| Extractor | Source | Output |
|---|---|---|
openccu-extract-easymodes |
TCL config under config/easymodes/ |
openccu_data/data/easymode_extract.json.gz |
openccu-extract-translations |
JS translation files + stringtable | openccu_data/data/translation_extract.json.gz + translation_custom/ |
openccu-extract-profiles |
TCL link-profile files per receiver | openccu_data/data/profiles/<RECEIVER_TYPE>.json.gz (+ _receiver_type_aliases.json) |
All three read from either:
- a local OpenCCU-Base checkout (
OPENCCUBASE_PATH=/path/to/OpenCCU-Base), or - a running CCU instance over HTTP/HTTPS (
CCU_URL=https://my-ccu.local).
Which source to use is not a free choice — see
DATA_SOURCES.md for why a running CCU is currently
still required, and what has to change before it is not.
If both are set, the easymode/translation extractors merge results; the profile extractor prefers the running CCU and falls back to local.
Repository layout
openccu-data/
├── LICENSE MIT (covers the code)
├── NOTICE.md Data-artifact licensing (EQ-3/HMSL 2.0)
├── DATA_SOURCES.md Where the artifacts come from; upstream transition
├── README.md this file
├── CLAUDE.md guide for AI assistants
├── AI_POLICY.md AI contribution policy
├── changelog.md
├── Makefile common dev tasks (`make help`)
├── pyproject.toml
├── openccu_data/
│ ├── const.py
│ ├── easymodes/extractor.py easymode metadata parser
│ ├── translations/extractor.py CCU WebUI translation parser
│ ├── profiles/extractor.py easymode link-profile parser
│ └── data/ committed, vendored output
│ ├── easymode_extract.json.gz
│ ├── translation_extract.json.gz
│ ├── translation_custom/*.json
│ └── profiles/*.json.gz (+ _receiver_type_aliases.json)
├── script/ CLI wrappers
└── tests/
Installation
python -m pip install -e .[test]
No third-party runtime dependencies; only the standard library.
Usage
Console scripts
After installation, three console scripts are available on the PATH:
OPENCCUBASE_PATH=/path/to/OpenCCU-Base openccu-extract-easymodes
OPENCCUBASE_PATH=/path/to/OpenCCU-Base openccu-extract-translations
CCU_URL=https://my-ccu.local openccu-extract-profiles
Output lands in openccu_data/data/ by default. Override via OUTPUT_DIR.
Without installation
OPENCCUBASE_PATH=/path/to/OpenCCU-Base python script/extract_easymodes.py
OPENCCUBASE_PATH=/path/to/OpenCCU-Base python script/extract_translations.py
CCU_URL=https://my-ccu.local python script/extract_profiles.py
Environment variables
| Variable | Purpose |
|---|---|
OPENCCUBASE_PATH |
Path to a local source checkout — www/ (OpenCCU-Base) and WebUI/www/ (OCCU) layouts both work; relative paths resolve against the repo root |
CCU_URL |
URL of a running CCU/OpenCCU instance (http:// or https://) |
OUTPUT_DIR |
Override the default output directory |
RECEIVERS |
(extract_profiles only) comma-separated list of receiver channel types |
.env files at the repository root are auto-loaded (existing env vars win).
Vendoring into consumer projects
The committed artifacts in openccu_data/data/ are the source of truth.
Consumers maintain their own runtime copies:
| Consumer | Vendored copy |
|---|---|
aiohomematic |
aiohomematic/ccu_data/easymode_extract.json.gz |
aiohomematic |
aiohomematic/ccu_data/translation_extract.json.gz |
aiohomematic |
aiohomematic/ccu_data/translation_custom/*.json |
aiohomematic-config |
aiohomematic_config/profiles/*.json.gz (+ _receiver_type_aliases.json) |
After regenerating any artifact, copy the relevant files into the consumer repository and open a PR there as well.
Development
The common tasks are wrapped in a Makefile:
make setup # install dev dependencies + prek hooks
make test # run the pytest suite
make lint # ruff check
make format # ruff format
make typecheck # mypy
make check # lint + typecheck + test
make help lists all targets, including make extract /
make extract-<name> to regenerate the data artifacts. The same commands
also work without make:
python -m pip install -e .[test]
pytest tests/
ruff check openccu_data/ tests/
mypy
Parts of openccu-data are developed with agentic AI assistance, primarily Claude Code. Submitted issues are also triaged and analyzed with agentic help. Every change is still reviewed by a human maintainer and must pass the project's tests before it lands — AI accelerates the work, it does not replace the review gate.
Contributions may use AI tools as well — see AI_POLICY.md for the rules that apply.
License
- Code: MIT.
- Data artifacts under
openccu_data/data/: derivative of OpenCCU-Base/OpenCCU and subject to the EQ-3 license (see NOTICE.md). The curatedtranslation_custom/overrides are MIT.
"Homematic" and "HomematicIP" are trademarks of eQ-3 AG. This project is not affiliated with or endorsed by eQ-3 AG.
Metadata
Release files for openccu-data 2026.9.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 | |
|---|---|---|---|
| openccu_data-2026.9.0.tar.gz | 677.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| openccu_data-2026.9.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 1.4 MB
Release files / openccu_data-2026.9.0.tar.gz
| Download URL | openccu_data-2026.9.0.tar.gz |
|---|---|
| Size | 677.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
2f9e02fe16bffdf57a1ba98fa259b816ba61c9ebc00d0137b086ff37e516ffbe
|
|
BLAKE2b-256 checksum How to use checksums |
d1b1727d97b475409d45a51997c3f51eb8c4c9832c4cea6d2c27f01fdc46de49
|
| 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 Sep 7, 2026.
Transparency logRelease files / openccu_data-2026.9.0-py3-none-any.whl
| Download URL | openccu_data-2026.9.0-py3-none-any.whl |
|---|---|
| Size | 690.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
6a8a5c7cb6e5c4cec6cf868fecfbc19653791db1a0d016aaa0d75f1add149b6f
|
|
BLAKE2b-256 checksum How to use checksums |
635ebf998b1524e61d822daf701b8f058e034163a3ec410c682cba55f4cce164
|
| 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 Sep 7, 2026.
Transparency log