Skip to main content

openccu-data

Extract and distribute Homematic CCU configuration metadata (translations, easymodes, link profiles) from OCCU / OpenCCU / RaspberryMatic.

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 OCCU/OpenCCU/RaspberryMatic checkout (OCCU_PATH=/path/to/occu), or
  • a running CCU instance over HTTP/HTTPS (CCU_URL=https://my-ccu.local).

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/OCCU)
├── 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:

OCCU_PATH=/path/to/occu openccu-extract-easymodes
OCCU_PATH=/path/to/occu 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

OCCU_PATH=/path/to/occu python script/extract_easymodes.py
OCCU_PATH=/path/to/occu python script/extract_translations.py
CCU_URL=https://my-ccu.local python script/extract_profiles.py

Environment variables

Variable Purpose
OCCU_PATH Path to a local OCCU/RaspberryMatic checkout
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 OCCU/RaspberryMatic 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.

Download files

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

Source Distribution

openccu_data-2026.7.2.tar.gz (675.0 kB view details)

Uploaded Source

Built Distribution

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

openccu_data-2026.7.2-py3-none-any.whl (688.2 kB view details)

Uploaded Python 3

File details

Details for the file openccu_data-2026.7.2.tar.gz.

File metadata

  • Download URL: openccu_data-2026.7.2.tar.gz
  • Upload date:
  • Size: 675.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for openccu_data-2026.7.2.tar.gz
Algorithm Hash digest
SHA256 fefd60f9aaa18055f2b96dfe00fe4683b7c0fd84b02dbd625a2c4acad9603b74
MD5 372c7dbd535b73edbb0094d323e0776c
BLAKE2b-256 fbb7798c46044dcd1b63b779a2ce1b0828cd6e0c20c5ddde7af097519dcd375a

See more details on using hashes here.

Provenance

The following attestation bundles were made for openccu_data-2026.7.2.tar.gz:

Publisher: python-publish.yml on SukramJ/openccu-data

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

File details

Details for the file openccu_data-2026.7.2-py3-none-any.whl.

File metadata

  • Download URL: openccu_data-2026.7.2-py3-none-any.whl
  • Upload date:
  • Size: 688.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for openccu_data-2026.7.2-py3-none-any.whl
Algorithm Hash digest
SHA256 84b27e883a2266ec4e1b1a33082351eee4a535f53910b973f0668affddfdf2ca
MD5 2b0eca6f2f33ec9462911196fab11356
BLAKE2b-256 85d43641aba25939eb51ac14d87928ec9eb8f85e55ec204207a990506392bc46

See more details on using hashes here.

Provenance

The following attestation bundles were made for openccu_data-2026.7.2-py3-none-any.whl:

Publisher: python-publish.yml on SukramJ/openccu-data

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

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page