Skip to main content

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 curated translation_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)

Source distribution for openccu-data 2026.9.0
File Size Uploaded
openccu_data-2026.9.0.tar.gz 677.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for openccu-data 2026.9.0
File Interpreter ABI Platform
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 log

Release 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

Release history Release notifications | RSS feed

This release

2026.9.0 This release

2 release 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