openccu-data 2026.4.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- openccu_data-2026.4.1/LICENSE +21 -0
- openccu_data-2026.4.1/NOTICE.md +49 -0
- openccu_data-2026.4.1/PKG-INFO +161 -0
- openccu_data-2026.4.1/README.md +127 -0
- openccu_data-2026.4.1/openccu_data/__init__.py +5 -0
- openccu_data-2026.4.1/openccu_data/const.py +7 -0
- openccu_data-2026.4.1/openccu_data/data/__init__.py +5 -0
- openccu_data-2026.4.1/openccu_data/data/easymode_extract.json.gz +0 -0
- openccu_data-2026.4.1/openccu_data/data/profiles/ACCESS_RECEIVER.json.gz +0 -0
- openccu_data-2026.4.1/openccu_data/data/profiles/ACOUSTIC_SIGNAL_VIRTUAL_RECEIVER.json.gz +0 -0
- openccu_data-2026.4.1/openccu_data/data/profiles/ACTOR_SECURITY.json.gz +0 -0
- openccu_data-2026.4.1/openccu_data/data/profiles/ACTOR_WINDOW.json.gz +0 -0
- openccu_data-2026.4.1/openccu_data/data/profiles/ALARMACTUATOR.json.gz +0 -0
- openccu_data-2026.4.1/openccu_data/data/profiles/ALARM_COND_SWITCH_RECEIVER.json.gz +0 -0
- openccu_data-2026.4.1/openccu_data/data/profiles/ALARM_SWITCH_VIRTUAL_RECEIVER.json.gz +0 -0
- openccu_data-2026.4.1/openccu_data/data/profiles/ARMING.json.gz +0 -0
- openccu_data-2026.4.1/openccu_data/data/profiles/AUTO_RELOCK_TRANSCEIVER.json.gz +0 -0
- openccu_data-2026.4.1/openccu_data/data/profiles/BLIND.json.gz +0 -0
- openccu_data-2026.4.1/openccu_data/data/profiles/BLIND_VIRTUAL_RECEIVER.json.gz +0 -0
- openccu_data-2026.4.1/openccu_data/data/profiles/CLIMATECONTROL_FLOOR_PUMP_TRANSCEIVER.json.gz +0 -0
- openccu_data-2026.4.1/openccu_data/data/profiles/CLIMATECONTROL_FLOOR_TRANSCEIVER.json.gz +0 -0
- openccu_data-2026.4.1/openccu_data/data/profiles/CLIMATECONTROL_INPUT_RECEIVER.json.gz +0 -0
- openccu_data-2026.4.1/openccu_data/data/profiles/CLIMATECONTROL_RECEIVER.json.gz +0 -0
- openccu_data-2026.4.1/openccu_data/data/profiles/CLIMATECONTROL_RT_RECEIVER.json.gz +0 -0
- openccu_data-2026.4.1/openccu_data/data/profiles/CLIMATECONTROL_VENT_DRIVE.json.gz +0 -0
- openccu_data-2026.4.1/openccu_data/data/profiles/DDC.json.gz +0 -0
- openccu_data-2026.4.1/openccu_data/data/profiles/DIMMER.json.gz +0 -0
- openccu_data-2026.4.1/openccu_data/data/profiles/DIMMER_VIRTUAL_RECEIVER.json.gz +0 -0
- openccu_data-2026.4.1/openccu_data/data/profiles/DIMMER_woLongKeyPress.json.gz +0 -0
- openccu_data-2026.4.1/openccu_data/data/profiles/DOOR_LOCK_TRANSCEIVER.json.gz +0 -0
- openccu_data-2026.4.1/openccu_data/data/profiles/DOOR_RECEIVER.json.gz +0 -0
- openccu_data-2026.4.1/openccu_data/data/profiles/DUAL_WHITE_BRIGHTNESS.json.gz +0 -0
- openccu_data-2026.4.1/openccu_data/data/profiles/DUAL_WHITE_COLOR.json.gz +0 -0
- openccu_data-2026.4.1/openccu_data/data/profiles/HEATING_CLIMATECONTROL_CL_RECEIVER.json.gz +0 -0
- openccu_data-2026.4.1/openccu_data/data/profiles/HEATING_CLIMATECONTROL_RECEIVER.json.gz +0 -0
- openccu_data-2026.4.1/openccu_data/data/profiles/HEATING_KEY_RECEIVER.json.gz +0 -0
- openccu_data-2026.4.1/openccu_data/data/profiles/HEATING_ROOM_TH_RECEIVER.json.gz +0 -0
- openccu_data-2026.4.1/openccu_data/data/profiles/HMW_BLIND.json.gz +0 -0
- openccu_data-2026.4.1/openccu_data/data/profiles/HMW_DIMMER.json.gz +0 -0
- openccu_data-2026.4.1/openccu_data/data/profiles/HMW_INPUT_OUTPUT.json.gz +0 -0
- openccu_data-2026.4.1/openccu_data/data/profiles/HMW_SWITCH.json.gz +0 -0
- openccu_data-2026.4.1/openccu_data/data/profiles/JALOUSIE.json.gz +0 -0
- openccu_data-2026.4.1/openccu_data/data/profiles/KEYMATIC.json.gz +0 -0
- openccu_data-2026.4.1/openccu_data/data/profiles/REMOTECONTROL_RECEIVER.json.gz +0 -0
- openccu_data-2026.4.1/openccu_data/data/profiles/RGBW_AUTOMATIC.json.gz +0 -0
- openccu_data-2026.4.1/openccu_data/data/profiles/RGBW_COLOR.json.gz +0 -0
- openccu_data-2026.4.1/openccu_data/data/profiles/SERVO_VIRTUAL_RECEIVER.json.gz +0 -0
- openccu_data-2026.4.1/openccu_data/data/profiles/SHUTTER_VIRTUAL_RECEIVER.json.gz +0 -0
- openccu_data-2026.4.1/openccu_data/data/profiles/SIGNAL_CHIME.json.gz +0 -0
- openccu_data-2026.4.1/openccu_data/data/profiles/SIGNAL_CHIMEM.json.gz +0 -0
- openccu_data-2026.4.1/openccu_data/data/profiles/SIGNAL_LED.json.gz +0 -0
- openccu_data-2026.4.1/openccu_data/data/profiles/SIGNAL_LEDM.json.gz +0 -0
- openccu_data-2026.4.1/openccu_data/data/profiles/SIMPLE_SWITCH_RECEIVER.json.gz +0 -0
- openccu_data-2026.4.1/openccu_data/data/profiles/STATE_RESET_RECEIVER.json.gz +0 -0
- openccu_data-2026.4.1/openccu_data/data/profiles/STATUS_INDICATOR.json.gz +0 -0
- openccu_data-2026.4.1/openccu_data/data/profiles/SWITCH.json.gz +0 -0
- openccu_data-2026.4.1/openccu_data/data/profiles/SWITCH_PANIC.json.gz +0 -0
- openccu_data-2026.4.1/openccu_data/data/profiles/SWITCH_SENSOR.json.gz +0 -0
- openccu_data-2026.4.1/openccu_data/data/profiles/SWITCH_VIRTUAL_RECEIVER.json.gz +0 -0
- openccu_data-2026.4.1/openccu_data/data/profiles/UNIVERSAL_ACTOR.json.gz +0 -0
- openccu_data-2026.4.1/openccu_data/data/profiles/UNIVERSAL_LIGHT_RECEIVER_LSC.json.gz +0 -0
- openccu_data-2026.4.1/openccu_data/data/profiles/UNIVERSAL_LIGHT_RECEIVER_PWM.json.gz +0 -0
- openccu_data-2026.4.1/openccu_data/data/profiles/UNIVERSAL_LIGHT_RECEIVER_RGB(W).json.gz +0 -0
- openccu_data-2026.4.1/openccu_data/data/profiles/UNIVERSAL_LIGHT_RECEIVER_RGBW_DALI.json.gz +0 -0
- openccu_data-2026.4.1/openccu_data/data/profiles/UNIVERSAL_LIGHT_RECEIVER_TW.json.gz +0 -0
- openccu_data-2026.4.1/openccu_data/data/profiles/VIRTUAL_DIMMER.json.gz +0 -0
- openccu_data-2026.4.1/openccu_data/data/profiles/VIRTUAL_DUAL_WHITE_COLOR.json.gz +0 -0
- openccu_data-2026.4.1/openccu_data/data/profiles/WATER_SWITCH_VIRTUAL_RECEIVER.json.gz +0 -0
- openccu_data-2026.4.1/openccu_data/data/profiles/WEATHER_RECEIVER.json.gz +0 -0
- openccu_data-2026.4.1/openccu_data/data/profiles/WINDOW_DRIVE_RECEIVER.json.gz +0 -0
- openccu_data-2026.4.1/openccu_data/data/profiles/WINDOW_SWITCH_RECEIVER.json.gz +0 -0
- openccu_data-2026.4.1/openccu_data/data/profiles/WINMATIC.json.gz +0 -0
- openccu_data-2026.4.1/openccu_data/data/profiles/WS_TH.json.gz +0 -0
- openccu_data-2026.4.1/openccu_data/data/profiles/_receiver_type_aliases.json +5 -0
- openccu_data-2026.4.1/openccu_data/data/translation_custom/channel_types_de.json +21 -0
- openccu_data-2026.4.1/openccu_data/data/translation_custom/channel_types_en.json +21 -0
- openccu_data-2026.4.1/openccu_data/data/translation_custom/device_icons.json +1 -0
- openccu_data-2026.4.1/openccu_data/data/translation_custom/device_models_de.json +142 -0
- openccu_data-2026.4.1/openccu_data/data/translation_custom/device_models_en.json +142 -0
- openccu_data-2026.4.1/openccu_data/data/translation_custom/parameter_help_de.json +1 -0
- openccu_data-2026.4.1/openccu_data/data/translation_custom/parameter_help_en.json +1 -0
- openccu_data-2026.4.1/openccu_data/data/translation_custom/parameter_values_de.json +1237 -0
- openccu_data-2026.4.1/openccu_data/data/translation_custom/parameter_values_en.json +1240 -0
- openccu_data-2026.4.1/openccu_data/data/translation_custom/parameters_de.json +704 -0
- openccu_data-2026.4.1/openccu_data/data/translation_custom/parameters_en.json +704 -0
- openccu_data-2026.4.1/openccu_data/data/translation_extract.json.gz +0 -0
- openccu_data-2026.4.1/openccu_data/easymodes/__init__.py +9 -0
- openccu_data-2026.4.1/openccu_data/easymodes/extractor.py +1094 -0
- openccu_data-2026.4.1/openccu_data/profiles/__init__.py +9 -0
- openccu_data-2026.4.1/openccu_data/profiles/extractor.py +891 -0
- openccu_data-2026.4.1/openccu_data/py.typed +0 -0
- openccu_data-2026.4.1/openccu_data/translations/__init__.py +9 -0
- openccu_data-2026.4.1/openccu_data/translations/extractor.py +1590 -0
- openccu_data-2026.4.1/openccu_data.egg-info/PKG-INFO +161 -0
- openccu_data-2026.4.1/openccu_data.egg-info/SOURCES.txt +100 -0
- openccu_data-2026.4.1/openccu_data.egg-info/dependency_links.txt +1 -0
- openccu_data-2026.4.1/openccu_data.egg-info/entry_points.txt +4 -0
- openccu_data-2026.4.1/openccu_data.egg-info/requires.txt +4 -0
- openccu_data-2026.4.1/openccu_data.egg-info/top_level.txt +1 -0
- openccu_data-2026.4.1/pyproject.toml +144 -0
- openccu_data-2026.4.1/setup.cfg +4 -0
- openccu_data-2026.4.1/tests/test_easymodes_extractor.py +54 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 SukramJ
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# NOTICE
|
|
2
|
+
|
|
3
|
+
This repository ships two distinct kinds of files that are governed by
|
|
4
|
+
different licenses. Please respect both when redistributing.
|
|
5
|
+
|
|
6
|
+
## 1. Original code (MIT License)
|
|
7
|
+
|
|
8
|
+
All Python source code in this repository — extractor modules, CLI entry
|
|
9
|
+
points, tests, and packaging metadata — is original work and licensed under
|
|
10
|
+
the [MIT License](./LICENSE).
|
|
11
|
+
|
|
12
|
+
This covers everything under:
|
|
13
|
+
|
|
14
|
+
- `openccu_data/` (except the `data/` subtree, see below)
|
|
15
|
+
- `script/`
|
|
16
|
+
- `tests/`
|
|
17
|
+
- top-level configuration files (`pyproject.toml`, `.pre-commit-config.yaml`,
|
|
18
|
+
…)
|
|
19
|
+
|
|
20
|
+
## 2. Extracted data artifacts (EQ-3 / OCCU License)
|
|
21
|
+
|
|
22
|
+
The committed data artifacts under `openccu_data/data/` are derivative works
|
|
23
|
+
generated from the
|
|
24
|
+
[HomeMatic Open Central Control Unit SDK (HM-OCCU-SDK)](https://github.com/eq-3/occu)
|
|
25
|
+
maintained by eQ-3 AG, and from compatible distributions such as
|
|
26
|
+
[OpenCCU](https://github.com/jens-maus/RaspberryMatic).
|
|
27
|
+
|
|
28
|
+
Specifically these files:
|
|
29
|
+
|
|
30
|
+
- `openccu_data/data/easymode_extract.json.gz`
|
|
31
|
+
- `openccu_data/data/translation_extract.json.gz`
|
|
32
|
+
- `openccu_data/data/translation_custom/*.json` _(curated additions, MIT)_
|
|
33
|
+
- `openccu_data/data/profiles/*.json`
|
|
34
|
+
|
|
35
|
+
are obtained by parsing TCL configuration and JavaScript translation files
|
|
36
|
+
shipped with OCCU/RaspberryMatic. They retain the licensing of the original
|
|
37
|
+
upstream sources. Refer to OCCU's `LicenseDE.txt` for the full terms — in
|
|
38
|
+
short: free for private and non-commercial use; commercial redistribution
|
|
39
|
+
requires permission from eQ-3.
|
|
40
|
+
|
|
41
|
+
The `translation_custom/` files are the exception inside the data tree: they
|
|
42
|
+
contain hand-curated translation overrides authored by the openccu-data
|
|
43
|
+
maintainers and are released under the MIT License together with the rest of
|
|
44
|
+
the code.
|
|
45
|
+
|
|
46
|
+
## Trademarks
|
|
47
|
+
|
|
48
|
+
"Homematic" and "HomematicIP" are trademarks of eQ-3 AG. This project is not
|
|
49
|
+
affiliated with or endorsed by eQ-3 AG.
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: openccu-data
|
|
3
|
+
Version: 2026.4.1
|
|
4
|
+
Summary: Extract and distribute Homematic CCU/OpenCCU configuration metadata (translations, easymodes, link profiles).
|
|
5
|
+
Author-email: SukramJ <sukramj@icloud.com>
|
|
6
|
+
License: MIT License
|
|
7
|
+
Project-URL: Homepage, https://github.com/sukramj/openccu-data
|
|
8
|
+
Project-URL: Source Code, https://github.com/sukramj/openccu-data
|
|
9
|
+
Project-URL: Bug Reports, https://github.com/sukramj/openccu-data/issues
|
|
10
|
+
Project-URL: Changelog, https://github.com/sukramj/openccu-data/blob/devel/changelog.md
|
|
11
|
+
Keywords: home,automation,homematic,ccu,openccu,raspberrymatic,easymode
|
|
12
|
+
Classifier: Development Status :: 3 - Alpha
|
|
13
|
+
Classifier: Intended Audience :: Developers
|
|
14
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
15
|
+
Classifier: Natural Language :: English
|
|
16
|
+
Classifier: Natural Language :: German
|
|
17
|
+
Classifier: Operating System :: OS Independent
|
|
18
|
+
Classifier: Programming Language :: Python
|
|
19
|
+
Classifier: Programming Language :: Python :: 3
|
|
20
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
22
|
+
Classifier: Programming Language :: Python :: Implementation :: CPython
|
|
23
|
+
Classifier: Topic :: Home Automation
|
|
24
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
25
|
+
Classifier: Typing :: Typed
|
|
26
|
+
Requires-Python: >=3.14
|
|
27
|
+
Description-Content-Type: text/markdown
|
|
28
|
+
License-File: LICENSE
|
|
29
|
+
License-File: NOTICE.md
|
|
30
|
+
Provides-Extra: test
|
|
31
|
+
Requires-Dist: pytest>=8.0.0; extra == "test"
|
|
32
|
+
Requires-Dist: pytest-cov>=5.0.0; extra == "test"
|
|
33
|
+
Dynamic: license-file
|
|
34
|
+
|
|
35
|
+
# openccu-data
|
|
36
|
+
|
|
37
|
+
Extract and distribute Homematic CCU configuration metadata
|
|
38
|
+
(translations, easymodes, link profiles) from
|
|
39
|
+
[OCCU](https://github.com/eq-3/occu) /
|
|
40
|
+
[OpenCCU](https://github.com/jens-maus/RaspberryMatic) /
|
|
41
|
+
[RaspberryMatic](https://github.com/jens-maus/RaspberryMatic).
|
|
42
|
+
|
|
43
|
+
This repository is the **single source of truth** for the data artifacts that
|
|
44
|
+
are consumed by [aiohomematic](https://github.com/sukramj/aiohomematic) and
|
|
45
|
+
[aiohomematic-config](https://github.com/sukramj/aiohomematic-config). Both
|
|
46
|
+
projects vendor the produced JSON archives at runtime.
|
|
47
|
+
|
|
48
|
+
## What this provides
|
|
49
|
+
|
|
50
|
+
| Extractor | Source | Output |
|
|
51
|
+
| ------------------------------ | ------------------------------------ | -------------------------------------------------------------------------------------- |
|
|
52
|
+
| `openccu-extract-easymodes` | TCL config under `config/easymodes/` | `openccu_data/data/easymode_extract.json.gz` |
|
|
53
|
+
| `openccu-extract-translations` | JS translation files + stringtable | `openccu_data/data/translation_extract.json.gz` + `translation_custom/` |
|
|
54
|
+
| `openccu-extract-profiles` | TCL link-profile files per receiver | `openccu_data/data/profiles/<RECEIVER_TYPE>.json.gz` (+ `_receiver_type_aliases.json`) |
|
|
55
|
+
|
|
56
|
+
All three read from either:
|
|
57
|
+
|
|
58
|
+
- a local OCCU/OpenCCU/RaspberryMatic checkout (`OCCU_PATH=/path/to/occu`), or
|
|
59
|
+
- a running CCU instance over HTTP/HTTPS (`CCU_URL=https://my-ccu.local`).
|
|
60
|
+
|
|
61
|
+
If both are set, the easymode/translation extractors merge results; the
|
|
62
|
+
profile extractor prefers the running CCU and falls back to local.
|
|
63
|
+
|
|
64
|
+
## Repository layout
|
|
65
|
+
|
|
66
|
+
```
|
|
67
|
+
openccu-data/
|
|
68
|
+
├── LICENSE MIT (covers the code)
|
|
69
|
+
├── NOTICE.md Data-artifact licensing (EQ-3/OCCU)
|
|
70
|
+
├── README.md this file
|
|
71
|
+
├── CLAUDE.md guide for AI assistants
|
|
72
|
+
├── changelog.md
|
|
73
|
+
├── pyproject.toml
|
|
74
|
+
├── openccu_data/
|
|
75
|
+
│ ├── const.py
|
|
76
|
+
│ ├── easymodes/extractor.py easymode metadata parser
|
|
77
|
+
│ ├── translations/extractor.py CCU WebUI translation parser
|
|
78
|
+
│ ├── profiles/extractor.py easymode link-profile parser
|
|
79
|
+
│ └── data/ committed, vendored output
|
|
80
|
+
│ ├── easymode_extract.json.gz
|
|
81
|
+
│ ├── translation_extract.json.gz
|
|
82
|
+
│ ├── translation_custom/*.json
|
|
83
|
+
│ └── profiles/*.json.gz (+ _receiver_type_aliases.json)
|
|
84
|
+
├── script/ CLI wrappers
|
|
85
|
+
└── tests/
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
## Installation
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
python -m pip install -e .[test]
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
No third-party runtime dependencies; only the standard library.
|
|
95
|
+
|
|
96
|
+
## Usage
|
|
97
|
+
|
|
98
|
+
### Console scripts
|
|
99
|
+
|
|
100
|
+
After installation, three console scripts are available on the PATH:
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
OCCU_PATH=/path/to/occu openccu-extract-easymodes
|
|
104
|
+
OCCU_PATH=/path/to/occu openccu-extract-translations
|
|
105
|
+
CCU_URL=https://my-ccu.local openccu-extract-profiles
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
Output lands in `openccu_data/data/` by default. Override via `OUTPUT_DIR`.
|
|
109
|
+
|
|
110
|
+
### Without installation
|
|
111
|
+
|
|
112
|
+
```bash
|
|
113
|
+
OCCU_PATH=/path/to/occu python script/extract_easymodes.py
|
|
114
|
+
OCCU_PATH=/path/to/occu python script/extract_translations.py
|
|
115
|
+
CCU_URL=https://my-ccu.local python script/extract_profiles.py
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
### Environment variables
|
|
119
|
+
|
|
120
|
+
| Variable | Purpose |
|
|
121
|
+
| ------------ | ------------------------------------------------------------------------ |
|
|
122
|
+
| `OCCU_PATH` | Path to a local OCCU/RaspberryMatic checkout |
|
|
123
|
+
| `CCU_URL` | URL of a running CCU/OpenCCU instance (`http://` or `https://`) |
|
|
124
|
+
| `OUTPUT_DIR` | Override the default output directory |
|
|
125
|
+
| `RECEIVERS` | (`extract_profiles` only) comma-separated list of receiver channel types |
|
|
126
|
+
|
|
127
|
+
`.env` files at the repository root are auto-loaded (existing env vars win).
|
|
128
|
+
|
|
129
|
+
## Vendoring into consumer projects
|
|
130
|
+
|
|
131
|
+
The committed artifacts in `openccu_data/data/` are the **source of truth**.
|
|
132
|
+
Consumers maintain their own runtime copies:
|
|
133
|
+
|
|
134
|
+
| Consumer | Vendored copy |
|
|
135
|
+
| --------------------- | -------------------------------------------------------------------------- |
|
|
136
|
+
| `aiohomematic` | `aiohomematic/ccu_data/easymode_extract.json.gz` |
|
|
137
|
+
| `aiohomematic` | `aiohomematic/ccu_data/translation_extract.json.gz` |
|
|
138
|
+
| `aiohomematic` | `aiohomematic/ccu_data/translation_custom/*.json` |
|
|
139
|
+
| `aiohomematic-config` | `aiohomematic_config/profiles/*.json.gz` (+ `_receiver_type_aliases.json`) |
|
|
140
|
+
|
|
141
|
+
After regenerating any artifact, copy the relevant files into the consumer
|
|
142
|
+
repository and open a PR there as well.
|
|
143
|
+
|
|
144
|
+
## Development
|
|
145
|
+
|
|
146
|
+
```bash
|
|
147
|
+
python -m pip install -e .[test]
|
|
148
|
+
pytest tests/
|
|
149
|
+
ruff check openccu_data/ tests/
|
|
150
|
+
mypy
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
## License
|
|
154
|
+
|
|
155
|
+
- **Code**: [MIT](./LICENSE).
|
|
156
|
+
- **Data artifacts** under `openccu_data/data/`: derivative of OCCU/RaspberryMatic
|
|
157
|
+
and subject to the EQ-3 license (see [NOTICE.md](./NOTICE.md)). The curated
|
|
158
|
+
`translation_custom/` overrides are MIT.
|
|
159
|
+
|
|
160
|
+
"Homematic" and "HomematicIP" are trademarks of eQ-3 AG. This project is not
|
|
161
|
+
affiliated with or endorsed by eQ-3 AG.
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
# openccu-data
|
|
2
|
+
|
|
3
|
+
Extract and distribute Homematic CCU configuration metadata
|
|
4
|
+
(translations, easymodes, link profiles) from
|
|
5
|
+
[OCCU](https://github.com/eq-3/occu) /
|
|
6
|
+
[OpenCCU](https://github.com/jens-maus/RaspberryMatic) /
|
|
7
|
+
[RaspberryMatic](https://github.com/jens-maus/RaspberryMatic).
|
|
8
|
+
|
|
9
|
+
This repository is the **single source of truth** for the data artifacts that
|
|
10
|
+
are consumed by [aiohomematic](https://github.com/sukramj/aiohomematic) and
|
|
11
|
+
[aiohomematic-config](https://github.com/sukramj/aiohomematic-config). Both
|
|
12
|
+
projects vendor the produced JSON archives at runtime.
|
|
13
|
+
|
|
14
|
+
## What this provides
|
|
15
|
+
|
|
16
|
+
| Extractor | Source | Output |
|
|
17
|
+
| ------------------------------ | ------------------------------------ | -------------------------------------------------------------------------------------- |
|
|
18
|
+
| `openccu-extract-easymodes` | TCL config under `config/easymodes/` | `openccu_data/data/easymode_extract.json.gz` |
|
|
19
|
+
| `openccu-extract-translations` | JS translation files + stringtable | `openccu_data/data/translation_extract.json.gz` + `translation_custom/` |
|
|
20
|
+
| `openccu-extract-profiles` | TCL link-profile files per receiver | `openccu_data/data/profiles/<RECEIVER_TYPE>.json.gz` (+ `_receiver_type_aliases.json`) |
|
|
21
|
+
|
|
22
|
+
All three read from either:
|
|
23
|
+
|
|
24
|
+
- a local OCCU/OpenCCU/RaspberryMatic checkout (`OCCU_PATH=/path/to/occu`), or
|
|
25
|
+
- a running CCU instance over HTTP/HTTPS (`CCU_URL=https://my-ccu.local`).
|
|
26
|
+
|
|
27
|
+
If both are set, the easymode/translation extractors merge results; the
|
|
28
|
+
profile extractor prefers the running CCU and falls back to local.
|
|
29
|
+
|
|
30
|
+
## Repository layout
|
|
31
|
+
|
|
32
|
+
```
|
|
33
|
+
openccu-data/
|
|
34
|
+
├── LICENSE MIT (covers the code)
|
|
35
|
+
├── NOTICE.md Data-artifact licensing (EQ-3/OCCU)
|
|
36
|
+
├── README.md this file
|
|
37
|
+
├── CLAUDE.md guide for AI assistants
|
|
38
|
+
├── changelog.md
|
|
39
|
+
├── pyproject.toml
|
|
40
|
+
├── openccu_data/
|
|
41
|
+
│ ├── const.py
|
|
42
|
+
│ ├── easymodes/extractor.py easymode metadata parser
|
|
43
|
+
│ ├── translations/extractor.py CCU WebUI translation parser
|
|
44
|
+
│ ├── profiles/extractor.py easymode link-profile parser
|
|
45
|
+
│ └── data/ committed, vendored output
|
|
46
|
+
│ ├── easymode_extract.json.gz
|
|
47
|
+
│ ├── translation_extract.json.gz
|
|
48
|
+
│ ├── translation_custom/*.json
|
|
49
|
+
│ └── profiles/*.json.gz (+ _receiver_type_aliases.json)
|
|
50
|
+
├── script/ CLI wrappers
|
|
51
|
+
└── tests/
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## Installation
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
python -m pip install -e .[test]
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
No third-party runtime dependencies; only the standard library.
|
|
61
|
+
|
|
62
|
+
## Usage
|
|
63
|
+
|
|
64
|
+
### Console scripts
|
|
65
|
+
|
|
66
|
+
After installation, three console scripts are available on the PATH:
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
OCCU_PATH=/path/to/occu openccu-extract-easymodes
|
|
70
|
+
OCCU_PATH=/path/to/occu openccu-extract-translations
|
|
71
|
+
CCU_URL=https://my-ccu.local openccu-extract-profiles
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
Output lands in `openccu_data/data/` by default. Override via `OUTPUT_DIR`.
|
|
75
|
+
|
|
76
|
+
### Without installation
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
OCCU_PATH=/path/to/occu python script/extract_easymodes.py
|
|
80
|
+
OCCU_PATH=/path/to/occu python script/extract_translations.py
|
|
81
|
+
CCU_URL=https://my-ccu.local python script/extract_profiles.py
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
### Environment variables
|
|
85
|
+
|
|
86
|
+
| Variable | Purpose |
|
|
87
|
+
| ------------ | ------------------------------------------------------------------------ |
|
|
88
|
+
| `OCCU_PATH` | Path to a local OCCU/RaspberryMatic checkout |
|
|
89
|
+
| `CCU_URL` | URL of a running CCU/OpenCCU instance (`http://` or `https://`) |
|
|
90
|
+
| `OUTPUT_DIR` | Override the default output directory |
|
|
91
|
+
| `RECEIVERS` | (`extract_profiles` only) comma-separated list of receiver channel types |
|
|
92
|
+
|
|
93
|
+
`.env` files at the repository root are auto-loaded (existing env vars win).
|
|
94
|
+
|
|
95
|
+
## Vendoring into consumer projects
|
|
96
|
+
|
|
97
|
+
The committed artifacts in `openccu_data/data/` are the **source of truth**.
|
|
98
|
+
Consumers maintain their own runtime copies:
|
|
99
|
+
|
|
100
|
+
| Consumer | Vendored copy |
|
|
101
|
+
| --------------------- | -------------------------------------------------------------------------- |
|
|
102
|
+
| `aiohomematic` | `aiohomematic/ccu_data/easymode_extract.json.gz` |
|
|
103
|
+
| `aiohomematic` | `aiohomematic/ccu_data/translation_extract.json.gz` |
|
|
104
|
+
| `aiohomematic` | `aiohomematic/ccu_data/translation_custom/*.json` |
|
|
105
|
+
| `aiohomematic-config` | `aiohomematic_config/profiles/*.json.gz` (+ `_receiver_type_aliases.json`) |
|
|
106
|
+
|
|
107
|
+
After regenerating any artifact, copy the relevant files into the consumer
|
|
108
|
+
repository and open a PR there as well.
|
|
109
|
+
|
|
110
|
+
## Development
|
|
111
|
+
|
|
112
|
+
```bash
|
|
113
|
+
python -m pip install -e .[test]
|
|
114
|
+
pytest tests/
|
|
115
|
+
ruff check openccu_data/ tests/
|
|
116
|
+
mypy
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
## License
|
|
120
|
+
|
|
121
|
+
- **Code**: [MIT](./LICENSE).
|
|
122
|
+
- **Data artifacts** under `openccu_data/data/`: derivative of OCCU/RaspberryMatic
|
|
123
|
+
and subject to the EQ-3 license (see [NOTICE.md](./NOTICE.md)). The curated
|
|
124
|
+
`translation_custom/` overrides are MIT.
|
|
125
|
+
|
|
126
|
+
"Homematic" and "HomematicIP" are trademarks of eQ-3 AG. This project is not
|
|
127
|
+
affiliated with or endorsed by eQ-3 AG.
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
openccu_data-2026.4.1/openccu_data/data/profiles/CLIMATECONTROL_FLOOR_PUMP_TRANSCEIVER.json.gz
ADDED
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
{
|
|
2
|
+
"accesspoint_generic_receiver": "Access Point Generischer Empfänger",
|
|
3
|
+
"ddc": "Direkte Gerätekommunikation",
|
|
4
|
+
"digital_analog_input": "Digital-/Analogeingang",
|
|
5
|
+
"digital_analog_output": "Digital-/Analogausgang",
|
|
6
|
+
"digital_input": "Digitaleingang",
|
|
7
|
+
"digital_output": "Digitalausgang",
|
|
8
|
+
"ecokey": "ecoKey",
|
|
9
|
+
"generic": "Generischer Kanal",
|
|
10
|
+
"input_output": "Ein-/Ausgang",
|
|
11
|
+
"kwl_controller_transmitter": "Lüftungssteuerung",
|
|
12
|
+
"passage_detector": "Durchgangszähler",
|
|
13
|
+
"passage_detector_direction_transmitter": "Durchgangszähler Richtung",
|
|
14
|
+
"shading_receiver": "Beschattungsempfänger",
|
|
15
|
+
"shading_week_profile": "Beschattungs-Wochenprofil",
|
|
16
|
+
"simple_switch_receiver": "Einfacher Schaltempfänger",
|
|
17
|
+
"temp_humidity_particulate_matter_transmitter": "Temperatur-/Feuchte-/Feinstaubsensor",
|
|
18
|
+
"window": "Fensterkanal",
|
|
19
|
+
"ws_cs": "Wetterstation Kombinationssensor",
|
|
20
|
+
"ws_th": "Wetterstation Temperatur/Feuchte"
|
|
21
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
{
|
|
2
|
+
"accesspoint_generic_receiver": "Access Point Generic Receiver",
|
|
3
|
+
"ddc": "Direct Device Communication",
|
|
4
|
+
"digital_analog_input": "Digital/Analog Input",
|
|
5
|
+
"digital_analog_output": "Digital/Analog Output",
|
|
6
|
+
"digital_input": "Digital Input",
|
|
7
|
+
"digital_output": "Digital Output",
|
|
8
|
+
"ecokey": "ecoKey",
|
|
9
|
+
"generic": "Generic Channel",
|
|
10
|
+
"input_output": "Input/Output",
|
|
11
|
+
"kwl_controller_transmitter": "Ventilation Controller",
|
|
12
|
+
"passage_detector": "Passage Detector",
|
|
13
|
+
"passage_detector_direction_transmitter": "Passage Detector Direction",
|
|
14
|
+
"shading_receiver": "Shading Receiver",
|
|
15
|
+
"shading_week_profile": "Shading Week Profile",
|
|
16
|
+
"simple_switch_receiver": "Simple Switch Receiver",
|
|
17
|
+
"temp_humidity_particulate_matter_transmitter": "Temperature/Humidity/Particulate Matter Sensor",
|
|
18
|
+
"window": "Window Channel",
|
|
19
|
+
"ws_cs": "Weather Station Combination Sensor",
|
|
20
|
+
"ws_th": "Weather Station Temperature/Humidity"
|
|
21
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{}
|