node-red-contrib-ccu 4.3.0 → 4.4.1
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.
- package/.prettierignore +3 -0
- package/CHANGELOG.md +72 -0
- package/HANDOFF.md +54 -12
- package/README.md +42 -0
- package/ROADMAP.md +19 -15
- package/nodes/ccu-connection.html +25 -0
- package/nodes/ccu-connection.js +252 -11
- package/nodes/ccu-mqtt.js +12 -3
- package/nodes/ccu-poll.js +8 -1
- package/nodes/lib/metaprovider.js +716 -0
- package/package.json +1 -1
- package/roadmap-archive/B-17.md +106 -0
- package/roadmap-archive/README.md +3 -0
package/.prettierignore
CHANGED
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,78 @@ Notable changes to node-red-contrib-ccu. Format follows
|
|
|
5
5
|
user-visible symptom and the cause, not the commit list (the release notes
|
|
6
6
|
append commits automatically).
|
|
7
7
|
|
|
8
|
+
## 4.4.1 (2026-09-07)
|
|
9
|
+
|
|
10
|
+
### Fixed
|
|
11
|
+
|
|
12
|
+
- **Node-RED could be killed by a failed ReGaHSS write, seconds after
|
|
13
|
+
start** ([RedMatic #601](https://github.com/rdmtc/RedMatic/issues/601)).
|
|
14
|
+
A write to a system variable that arrives before the variable list is
|
|
15
|
+
known is deferred into a queue and flushed once the first
|
|
16
|
+
`getRegaVariables` completes. That flush dropped the resulting promise,
|
|
17
|
+
so a rejected write — ReGaHSS closing the connection, `Error: socket
|
|
18
|
+
hang up` — became an **unhandled rejection**, which Node >= 15 turns
|
|
19
|
+
into an uncaught exception: the whole Node-RED process exited with
|
|
20
|
+
status 1 and its supervisor restarted it into the same crash. The
|
|
21
|
+
rejection is now caught and logged.
|
|
22
|
+
|
|
23
|
+
This became reachable in 4.3.0: the rewritten local-CCU detection made
|
|
24
|
+
`isLocal` true again on RedMatic boxes (it had silently stopped
|
|
25
|
+
matching on current firmware), which moves ReGa traffic from lighttpd
|
|
26
|
+
on 8181 to ReGaHSS directly on 8183. lighttpd absorbed a busy ReGaHSS;
|
|
27
|
+
the direct port simply closes the connection.
|
|
28
|
+
|
|
29
|
+
- The same floating-promise pattern in `ccu-mqtt`: `setVariable`,
|
|
30
|
+
`programActive` and `programExecute` triggered over MQTT dropped their
|
|
31
|
+
promises too, and now report through the node's error output instead of
|
|
32
|
+
taking the process down.
|
|
33
|
+
- `regaPoll`'s `finally` chain is caught as well, so a throw in the
|
|
34
|
+
follow-up scheduling cannot escape as an unhandled rejection.
|
|
35
|
+
|
|
36
|
+
## 4.4.0 (2026-09-06)
|
|
37
|
+
|
|
38
|
+
### Added
|
|
39
|
+
|
|
40
|
+
- **openccu-lite support** (roadmap B-17). [openccu-lite](https://github.com/hobbyquaker/openccu-lite)
|
|
41
|
+
is a Homematic CCU firmware without ReGaHSS: the interface processes
|
|
42
|
+
are unchanged, but nothing listens on 8181/8183, HM-Script is never
|
|
43
|
+
interpreted and there are no ReGa ids. The connection node now asks
|
|
44
|
+
the box `GET /api/meta/v1/version` when it starts and on every
|
|
45
|
+
reconnect of its name sync; a CCU3/RaspberryMatic/OpenCCU answers 404
|
|
46
|
+
and everything runs exactly as before, an openccu-lite answers with
|
|
47
|
+
its API version and device, channel, room and function names come
|
|
48
|
+
from its metadata API instead — a snapshot at start, then the box's
|
|
49
|
+
Server-Sent-Events change stream, so a rename in the box's UI reaches
|
|
50
|
+
running flows within a second without a redeploy. `msg.channelName`,
|
|
51
|
+
`msg.rooms`, `msg.functions` and the room/function filters keep the
|
|
52
|
+
shape they have on a CCU (rooms and functions are a tree there and
|
|
53
|
+
are flattened to the usual arrays of names, most specific first).
|
|
54
|
+
Nothing has to be configured: the same connection node works on both
|
|
55
|
+
kinds of box, which is what makes moving a backup between them
|
|
56
|
+
harmless.
|
|
57
|
+
- connection node: **openccu-lite token** and **openccu-lite port**
|
|
58
|
+
fields. The token is only needed when Node-RED does _not_ run on the
|
|
59
|
+
box — on the box the read-only token in
|
|
60
|
+
`/usr/local/etc/occulite/local-token` is picked up automatically, off
|
|
61
|
+
the box the administrator creates one on the box's _Users_ page. A
|
|
62
|
+
rejected or missing token is not fatal: the nodes work with addresses
|
|
63
|
+
instead of names, the connection logs it once and takes the names as
|
|
64
|
+
soon as a valid token is there. The port field is only for boxes
|
|
65
|
+
whose web server is not on 80/443. Both are ignored on a CCU.
|
|
66
|
+
- connection node: the cached `ccu_rega_<host>.json` now also holds the
|
|
67
|
+
room and function name lists, so the editor's room and function
|
|
68
|
+
pickers are filled right after a restart instead of only after the
|
|
69
|
+
first successful sync.
|
|
70
|
+
|
|
71
|
+
### Changed
|
|
72
|
+
|
|
73
|
+
- `ccu-sysvar`, `ccu-program`, `ccu-script` and `ccu-poll` stay in the
|
|
74
|
+
palette and in flows on openccu-lite, and stay accepted in the
|
|
75
|
+
editor. There is no ReGa DOM on such a box, so instead of failing the
|
|
76
|
+
connection they log one line when the connection starts and answer
|
|
77
|
+
every message with a clear error (`… are not available on this box
|
|
78
|
+
(openccu-lite has no ReGaHSS)`). On a CCU nothing about them changes.
|
|
79
|
+
|
|
8
80
|
## 4.3.0 (2026-09-04)
|
|
9
81
|
|
|
10
82
|
### Added
|
package/HANDOFF.md
CHANGED
|
@@ -20,11 +20,45 @@ Lab addresses and credentials are intentionally **not** in this file
|
|
|
20
20
|
`4.2.0-dev.1` build with the "B-16 Home Assistant" flow tabs; reporters
|
|
21
21
|
of #136/#154/#175 were asked (2026-09-04) to confirm the LEVEL_2 fix
|
|
22
22
|
on their hardware.
|
|
23
|
-
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
23
|
+
- **4.3.0 released 2026-09-04** (tag v4.3.0, npm latest = 4.3.0):
|
|
24
|
+
B-2 (dynamic configuration via `msg.config`), B-3 (ccu-mqtt fixes plus
|
|
25
|
+
the `get` and `rpc` commands and the VALUE_LIST enum names), B-4
|
|
26
|
+
(local-CCU detection via a /proc/net/tcp listener probe) and B-5
|
|
27
|
+
(ping toggle, value+age status lines, uncertain filter, trailing sysvar
|
|
28
|
+
re-poll, RSSI guard). All four archived. Branch `b-2-b-5` merged with
|
|
29
|
+
`--no-ff`; 145 pure tests, 23 integration specs green on all four CI
|
|
30
|
+
legs.
|
|
31
|
+
- **4.4.0 released 2026-09-06** (tag v4.4.0, npm latest = 4.4.0):
|
|
32
|
+
B-17, the openccu-lite port. `nodes/lib/metaprovider.js` takes names,
|
|
33
|
+
rooms and functions from the box's metadata API (`/api/meta/v1`
|
|
34
|
+
snapshot + SSE) when `GET /api/meta/v1/version` answers; a CCU
|
|
35
|
+
answers 404 and the ReGa path is byte-for-byte what it was. Two
|
|
36
|
+
optional connection fields (openccu-lite token, port); on the box the
|
|
37
|
+
token comes from `/usr/local/etc/occulite/local-token`. sysvar,
|
|
38
|
+
program, script and poll stay in the palette and error per message.
|
|
39
|
+
16 unit tests plus a verification against a real `occulited` built
|
|
40
|
+
from ../openccu-lite (see roadmap-archive/B-17.md). Branch
|
|
41
|
+
`b-17-openccu-lite` merged with `--no-ff` and deleted. **Open: no test
|
|
42
|
+
on real openccu-lite hardware, and the connection dialog with the two
|
|
43
|
+
new fields has not been opened in a browser.** RedMatic's own port
|
|
44
|
+
needs `node-red-contrib-ccu@^4.4.0`.
|
|
45
|
+
- Issue tracker: 36 → **19 open**. The 17 issues 4.3.0 fixes were
|
|
46
|
+
commented and closed after the release (#172 #71 #103 #80 #56 #148
|
|
47
|
+
#133 #115 #22 #167 #44 #54 #52 #96 #166 #183 #51, plus comments on the
|
|
48
|
+
already-closed #185 and #158). B-6/B-7/B-14/B-16 archived; roadmap is
|
|
49
|
+
current.
|
|
50
|
+
- **Not done for 4.3.0: the editor smoke test in a browser.** The inline
|
|
51
|
+
editor scripts are syntax-checked by a new unit test and the runtime
|
|
52
|
+
was verified on a lab CCU, but the dialogs themselves have not been
|
|
53
|
+
clicked through — and 4.3.0 adds fields to ccu-connection (RPC ping,
|
|
54
|
+
names/rooms refresh), ccu-sysvar (Value from), ccu-mqtt (get + the two
|
|
55
|
+
RPC topics) and ccu-value/ccu-rpc-event (discard uncertain values).
|
|
56
|
+
- Lab CCU `ccu-charly` runs 4.3.0-dev.1 (identical to the release) with a
|
|
57
|
+
flow tab **"B-2..B-5 test"**: three inject nodes driving one
|
|
58
|
+
ccu-set-value through different `msg.config` filters, an rpc-event
|
|
59
|
+
debug, and an mqtt rig on the `hm2test/` prefix (mqtt in → ccu-mqtt →
|
|
60
|
+
mqtt out) used to verify the new `get` and `rpc` commands. The relays
|
|
61
|
+
were left switched off.
|
|
28
62
|
|
|
29
63
|
## Decisions (2026-09-04)
|
|
30
64
|
|
|
@@ -147,13 +181,21 @@ application/json"`.
|
|
|
147
181
|
#112, #117 (retest comments posted).
|
|
148
182
|
- Hardware confirmation for B-14 from reporters (#136/#154/#175).
|
|
149
183
|
|
|
150
|
-
## After 4.
|
|
184
|
+
## After 4.3.0 (queue)
|
|
151
185
|
|
|
152
|
-
1.
|
|
186
|
+
1. Browser smoke test of the config dialogs changed in 4.3.0 (see above).
|
|
187
|
+
2. Editor loader consolidation (Phase 3 §6.4 + §8.1 defect 3, shared
|
|
153
188
|
`resources/` script for the 9 dialogs) — needs a user smoke test on
|
|
154
189
|
the Node-RED test box afterwards.
|
|
155
|
-
|
|
156
|
-
async/await as touched, i18n/help consolidation (#58).
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
190
|
+
3. Remaining Phase 3: split rpc/rega/queue out of ccu-connection.js,
|
|
191
|
+
async/await as touched, i18n/help consolidation (#58). `lib/` grew
|
|
192
|
+
`dynconfig`, `channelfilter`, `valuestatus` and `localccu` in 4.3.0;
|
|
193
|
+
`ccu-connection.js` is still ~3100 lines.
|
|
194
|
+
4. Remaining Phase 4: B-11 (re-init robustness — the `rpcCheckInit`
|
|
195
|
+
early return for device-less interfaces is still there, deliberately
|
|
196
|
+
left alone in 4.3.0 to keep its scope), B-12 (auth/TLS, #27), B-13
|
|
197
|
+
(party mode, #161/#156), B-15 (new HmIP channel types, #177/#144),
|
|
198
|
+
B-8/B-9/B-10.
|
|
199
|
+
5. Still open from §8.3: the stale device-table cache (#181 — 4.3.0's
|
|
200
|
+
refresh covers names/rooms/functions only) and the internal system
|
|
201
|
+
variables (#184, needs a `homematic-rega` release).
|
package/README.md
CHANGED
|
@@ -28,6 +28,48 @@ Some example flows can be found in the [RedMatic Wiki](https://github.com/rdmtc/
|
|
|
28
28
|
|
|
29
29
|
**Starting with Version 3.x these Nodes need Node-RED >= 1.0 to work correctly**
|
|
30
30
|
|
|
31
|
+
## openccu-lite
|
|
32
|
+
|
|
33
|
+
[openccu-lite](https://github.com/hobbyquaker/openccu-lite) is a Homematic CCU firmware **without ReGaHSS**. The
|
|
34
|
+
interface processes (`rfd`, `hs485d`, `hmipserver`) are the same, so everything these nodes do over BINRPC/XMLRPC works
|
|
35
|
+
unchanged — but there is no logic layer: nothing listens on 8181/8183, HM-Script is never interpreted, and there are no
|
|
36
|
+
ReGa ids. Device, channel, room and function names come from the box's metadata API instead.
|
|
37
|
+
|
|
38
|
+
Nothing has to be configured for this. When the connection node starts (and on every reconnect of its name sync) it
|
|
39
|
+
asks the box `GET /api/meta/v1/version`; a CCU3, RaspberryMatic or OpenCCU answers 404 and the ReGaHSS path runs exactly
|
|
40
|
+
as before, an openccu-lite answers with its API version and the node takes names, rooms and functions from there —
|
|
41
|
+
loaded once as a snapshot and then kept current from the box's event stream, so a rename in the box's UI shows up in
|
|
42
|
+
your flows within a second, without a redeploy. `msg.channelName`, `msg.rooms`, `msg.functions` and the room/function
|
|
43
|
+
filters keep exactly the shape they have on a CCU. The same connection node configuration works on both, which is what
|
|
44
|
+
makes moving a backup between the two harmless.
|
|
45
|
+
|
|
46
|
+
**Credential.** Every metadata endpoint except the version probe needs a token:
|
|
47
|
+
|
|
48
|
+
- Node-RED **on the box** (RedMatic): nothing to do — the box's own read-only token is read from
|
|
49
|
+
`/usr/local/etc/occulite/local-token`.
|
|
50
|
+
- Node-RED **elsewhere** (a PC, a container): create a token on the box's _Users_ page and paste it into the
|
|
51
|
+
**openccu-lite token** field of the connection node. The **openccu-lite port** field next to it is only needed when
|
|
52
|
+
the box's web server is not on port 80 (443 with TLS).
|
|
53
|
+
|
|
54
|
+
Without a token the nodes still work, with addresses instead of names: the connection logs the rejected credential once
|
|
55
|
+
and picks the names up on the next retry, as soon as a valid token is there.
|
|
56
|
+
|
|
57
|
+
**What has no replacement on openccu-lite** (from openccu-lite's own porting guide):
|
|
58
|
+
|
|
59
|
+
- **System variables** and **programs**: there is no ReGa DOM. The `ccu-sysvar`, `ccu-program` and `ccu-poll` nodes stay
|
|
60
|
+
in the palette and in your flows — they are accepted, they never break the connection, and every message they get is
|
|
61
|
+
answered with a clear error instead.
|
|
62
|
+
- **`exec()` of HM-Script** — `dom.GetObject`, `system.GetSessionVarStr` and everything else the `ccu-script` node
|
|
63
|
+
sends: gone, same handling as above.
|
|
64
|
+
- **ReGa ids** (`dom.GetObject(1234)`): there are none. The metadata API identifies objects by
|
|
65
|
+
`<interface>.<address>`; these nodes have always keyed on the address, so nothing changes for flows.
|
|
66
|
+
- **Service messages / alarms** (system variables 40 and 41): interface-level state only.
|
|
67
|
+
- **The CCU WebUI's JSON-RPC API** (`/api/homematic.cgi`, `Session.login`, `Device.listAll`): not present.
|
|
68
|
+
|
|
69
|
+
Rooms and functions are a **tree** on openccu-lite (`room/eg/wohnzimmer`), not a flat list. They are flattened to the
|
|
70
|
+
arrays these nodes have always published, most specific first: a channel in _Wohnzimmer_ below _Erdgeschoss_ gets
|
|
71
|
+
`msg.rooms = ["Wohnzimmer", "Erdgeschoss"]` and `msg.room = "Wohnzimmer"`, so a room filter on either name matches.
|
|
72
|
+
|
|
31
73
|
## Home Assistant
|
|
32
74
|
|
|
33
75
|
The `ccu-homeassistant` node publishes
|
package/ROADMAP.md
CHANGED
|
@@ -33,7 +33,10 @@ archived. B-2 moved to 4.3.0. The issue tracker was triaged a second time
|
|
|
33
33
|
on 2026-09-04 (§12): 36 issues remain open, every one of them annotated
|
|
34
34
|
with its roadmap item, and eight newly diagnosed defects were added to
|
|
35
35
|
§8.3. **4.3.0 (2026-09-04) = B-2 + B-3 + B-4 + B-5**, all four archived —
|
|
36
|
-
17 of those issues are fixed by it.
|
|
36
|
+
17 of those issues are fixed by it. **4.4.0 (2026-09-06) = B-17**, the
|
|
37
|
+
openccu-lite port (names, rooms and functions from the metadata API on a
|
|
38
|
+
box without ReGaHSS; the ReGa path unchanged), verified against a real
|
|
39
|
+
`occulited` and archived. Phases 1 and 2 are done and archived.
|
|
37
40
|
Next: Phase 3 (refactor & tests) and the rest of the Phase 4 backlog;
|
|
38
41
|
work continues on
|
|
39
42
|
master with CI (Node 22/24 × Node-RED 4/5) as the gate. Research basis:
|
|
@@ -58,7 +61,7 @@ whose ROADMAP documents several verified bugs in this repo.
|
|
|
58
61
|
- [4. Phase 1 — tooling groundwork](#4-phase-1--tooling-groundwork-no-behavior-change) ✅ [archived](roadmap-archive/phase-1.md)
|
|
59
62
|
- [5. Phase 2 — compatibility release 4.0.0](#5-phase-2--compatibility-release-400) ✅ [archived](roadmap-archive/phase-2.md)
|
|
60
63
|
- [6. Phase 3 — refactor & tests](#6-phase-3--refactor--tests)
|
|
61
|
-
- [7. Phase 4 — features & devices B-1…B-
|
|
64
|
+
- [7. Phase 4 — features & devices B-1…B-17](#7-phase-4--features--device-backlog)
|
|
62
65
|
|
|
63
66
|
**Reference**
|
|
64
67
|
|
|
@@ -197,24 +200,25 @@ to 4.3.0**. B-3/B-5 ride along when ready; B-12/B-13 later. The four
|
|
|
197
200
|
needs-info issues (#111, #145, #146, #151) are closed as
|
|
198
201
|
unreproducible if the reporters have not responded by ~2026-12.
|
|
199
202
|
|
|
200
|
-
| ID | Item | Source
|
|
201
|
-
| ---- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
202
|
-
| B-1 | Regenerate `paramsets.json` via a live-CCU XML-RPC fetch — **groundwork done 2026-09-02, full analysis in [docs/paramsets.md](docs/paramsets.md)**: the file is the runtime getParamsetDescription cache (grown 2018–2020 from contributed user dumps; firmware parsing is a dead end for HmIP — MIN/MAX come from compiled Java). **Tools done 2026-09-02** (`tools/paramsets-fetch.js` + modernized `paramsets-join.js`, smoke-tested against the live CCU; reporter dumps join with the same tool). **Lab dumps joined 2026-09-04** (CCU3 3.89.8 "Charly" with HmIPW-DRAP/DRI16/DRS8, OpenCCU 3.89.8 with HmIP-PDT/WRC2/RFUSB): +58 keys, 9 refreshed (HmIPW entries gained COMBINED_PARAMETER etc.), file now key-sorted (one-time reorder). **Production regen done 2026-09-04** (4.1.0-dev.7): fetched read-only from the author's CCU3 on 3.87.6 at 600 ms/call (~25 min, 962 keys) — +547 keys, 32 refreshed, 70 device type/firmware combos across BidCos-RF, BidCos-Wired, HmIP and the HmIP-HEATING 2.0.0 group; the "HmIP-only" assumption about that box was wrong. Rule for the production CCU: read-only, slow, and only client calls — its RPC callbacks reach nothing but the Node-RED test box. Remaining: collect reporter dumps (#177 BSL-V2, #144 WRCD, #159 CuxD — requested in the issues 2026-09-02). Data-only issues: [#112](https://github.com/rdmtc/node-red-contrib-ccu/issues/112) (likely CCU-side limit — live CCU still reports MAX=3, retest), [#117](https://github.com/rdmtc/node-red-contrib-ccu/issues/117) (entry exists, retest), [#159](https://github.com/rdmtc/node-red-contrib-ccu/issues/159) (needs CUxD user dump). The LEVEL_2/BSL/WRCD issues moved to B-14/B-15 (code, not data). | tracker + forum
|
|
203
|
+
| ID | Item | Source |
|
|
204
|
+
| ---- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------ |
|
|
205
|
+
| B-1 | Regenerate `paramsets.json` via a live-CCU XML-RPC fetch — **groundwork done 2026-09-02, full analysis in [docs/paramsets.md](docs/paramsets.md)**: the file is the runtime getParamsetDescription cache (grown 2018–2020 from contributed user dumps; firmware parsing is a dead end for HmIP — MIN/MAX come from compiled Java). **Tools done 2026-09-02** (`tools/paramsets-fetch.js` + modernized `paramsets-join.js`, smoke-tested against the live CCU; reporter dumps join with the same tool). **Lab dumps joined 2026-09-04** (CCU3 3.89.8 "Charly" with HmIPW-DRAP/DRI16/DRS8, OpenCCU 3.89.8 with HmIP-PDT/WRC2/RFUSB): +58 keys, 9 refreshed (HmIPW entries gained COMBINED_PARAMETER etc.), file now key-sorted (one-time reorder). **Production regen done 2026-09-04** (4.1.0-dev.7): fetched read-only from the author's CCU3 on 3.87.6 at 600 ms/call (~25 min, 962 keys) — +547 keys, 32 refreshed, 70 device type/firmware combos across BidCos-RF, BidCos-Wired, HmIP and the HmIP-HEATING 2.0.0 group; the "HmIP-only" assumption about that box was wrong. Rule for the production CCU: read-only, slow, and only client calls — its RPC callbacks reach nothing but the Node-RED test box. Remaining: collect reporter dumps (#177 BSL-V2, #144 WRCD, #159 CuxD — requested in the issues 2026-09-02). Data-only issues: [#112](https://github.com/rdmtc/node-red-contrib-ccu/issues/112) (likely CCU-side limit — live CCU still reports MAX=3, retest), [#117](https://github.com/rdmtc/node-red-contrib-ccu/issues/117) (entry exists, retest), [#159](https://github.com/rdmtc/node-red-contrib-ccu/issues/159) (needs CUxD user dump). The LEVEL_2/BSL/WRCD issues moved to B-14/B-15 (code, not data). | tracker + forum |
|
|
203
206
|
| B-2 | ✅ **done 2026-09-04** (4.3.0) — one mechanism (`msg.config`) across value/set-value/switch/sysvar/signal/display; closes #172 #71 #103 #80 #56 #148 #185 #133 #158. Archived: [roadmap-archive/B-2.md](roadmap-archive/B-2.md) |
|
|
204
207
|
| B-3 | ✅ **done 2026-09-04** (4.3.0) — §8.2 findings fixed, VALUE_LIST enum names, `get` and `rpc` commands, metadata refresh; closes #115 #22 #167. Archived: [roadmap-archive/B-3.md](roadmap-archive/B-3.md) |
|
|
205
208
|
| B-4 | ✅ **done 2026-09-04** (4.3.0) — replaced by a `/proc/net/tcp` listener probe (`nodes/lib/localccu.js`); verified against firmware 3.89.8. Archived: [roadmap-archive/B-4.md](roadmap-archive/B-4.md) |
|
|
206
209
|
| B-5 | ✅ **done 2026-09-04** (4.3.0) — ping toggle, value+age status lines, uncertain filter, trailing sysvar re-poll, RSSI guard; closes #44 #54 #52 #96 #166 #183 #124. Archived: [roadmap-archive/B-5.md](roadmap-archive/B-5.md) |
|
|
207
|
-
| B-6 | ✅ **done 2026-09-02** — delivered upstream as binrpc 4.1/4.2 (zero deps, frame reassembly); picked up here as `^4.2.0` in dev.4. Archived: [roadmap-archive/B-6.md](roadmap-archive/B-6.md) | deferred → upstream
|
|
210
|
+
| B-6 | ✅ **done 2026-09-02** — delivered upstream as binrpc 4.1/4.2 (zero deps, frame reassembly); picked up here as `^4.2.0` in dev.4. Archived: [roadmap-archive/B-6.md](roadmap-archive/B-6.md) | deferred → upstream |
|
|
208
211
|
| B-7 | ✅ **done 2026-09-04** — both passes complete (§12): 60 → 36 open, all annotated; 8 new defects recorded in §8.3 |
|
|
209
|
-
| B-8 | Global object: expose CCU metadata/values via a global context object (old todo item) | old TODO
|
|
210
|
-
| B-9 | Value node: datapoint autocomplete / multiselect (rpc and rpc-event already have it) | old TODO
|
|
211
|
-
| B-10 | Submit/display node polish (old todo items): submit autocomplete, limit list to 10 cmds, fix display LED, display beep, payload via msg | old TODO
|
|
212
|
-
| B-11 | Re-init robustness after a CCU outage (found live in the 2026-09-02 smoke test): (a) `rpcCheckInit` returns without rescheduling itself when the interface has no devices in the metadata cache, so interfaces without paired devices (e.g. BidCos-RF on an HmIP-only CCU) never ping and never re-init — after a CCU reboot they stay dead until Node-RED is restarted; (b) a failed `rpcInit` (e.g. the shutting-down CCU answers XML-RPC with an HTML error page → "Unknown XML-RPC tag 'TITLE'") has no retry of its own, so combined with (a) one failed re-init is final; (c) the hardcoded 600 s HmIP-RF pingTimeout means up to 10 min of silent event loss after a CCU reboot — make it configurable together with B-5/#44. Fix shape: arm the watchdog regardless of metadata, retry failed inits with backoff. | smoke test
|
|
213
|
-
| B-12 | Complete the [#27](https://github.com/rdmtc/node-red-contrib-ccu/issues/27) checklist: authentication and TLS for all interface connections (two of four items from 2019 still open; ptweety's TLS-warning reactivation in §9 is related groundwork) | tracker
|
|
214
|
-
| B-13 | Party/holiday mode support ([#161](https://github.com/rdmtc/node-red-contrib-ccu/issues/161), [#156](https://github.com/rdmtc/node-red-contrib-ccu/issues/156)): PARTY_TIME_START/END must be written atomically (putParamset/combined parameter); possibly a dedicated node | tracker
|
|
215
|
-
| B-14 | ✅ **done 2026-09-02** (dev.5) — LEVEL_2 writes remapped to COMBINED_PARAMETER (`L2=<pct>`) in setValue; fixes #136/#154/#175 pending hardware confirmation. Archived: [roadmap-archive/B-14.md](roadmap-archive/B-14.md) | B-1 research
|
|
216
|
-
| B-15 | New HmIP channel types in the signal/display nodes: BSL 2.x replaces DIMMER_VIRTUAL_RECEIVER with OPTICAL_SIGNAL_RECEIVER (LEVEL/COLOR/COLOR_BEHAVIOUR — without COLOR_BEHAVIOUR in the putParamset the LED stays dark, [#177](https://github.com/rdmtc/node-red-contrib-ccu/issues/177)); HmIP-WRCD ch3 is ACOUSTIC_DISPLAY_RECEIVER with DISPLAY_DATA_* datapoints ([#144](https://github.com/rdmtc/node-red-contrib-ccu/issues/144)). Paramset entries for both need reporter dumps. See docs/paramsets.md §4. | B-1 research
|
|
217
|
-
| B-16 | ✅ **done 2026-09-04** (4.2.0) — new `ccu-homeassistant` node: Home Assistant MQTT auto-discovery for checkbox-selected devices, companion to ccu-mqtt (reuses its topics/payload format); lab-verified against HA 2026.9 and she. Archived: [roadmap-archive/B-16.md](roadmap-archive/B-16.md) | user request
|
|
212
|
+
| B-8 | Global object: expose CCU metadata/values via a global context object (old todo item) | old TODO |
|
|
213
|
+
| B-9 | Value node: datapoint autocomplete / multiselect (rpc and rpc-event already have it) | old TODO |
|
|
214
|
+
| B-10 | Submit/display node polish (old todo items): submit autocomplete, limit list to 10 cmds, fix display LED, display beep, payload via msg | old TODO |
|
|
215
|
+
| B-11 | Re-init robustness after a CCU outage (found live in the 2026-09-02 smoke test): (a) `rpcCheckInit` returns without rescheduling itself when the interface has no devices in the metadata cache, so interfaces without paired devices (e.g. BidCos-RF on an HmIP-only CCU) never ping and never re-init — after a CCU reboot they stay dead until Node-RED is restarted; (b) a failed `rpcInit` (e.g. the shutting-down CCU answers XML-RPC with an HTML error page → "Unknown XML-RPC tag 'TITLE'") has no retry of its own, so combined with (a) one failed re-init is final; (c) the hardcoded 600 s HmIP-RF pingTimeout means up to 10 min of silent event loss after a CCU reboot — make it configurable together with B-5/#44. Fix shape: arm the watchdog regardless of metadata, retry failed inits with backoff. | smoke test |
|
|
216
|
+
| B-12 | Complete the [#27](https://github.com/rdmtc/node-red-contrib-ccu/issues/27) checklist: authentication and TLS for all interface connections (two of four items from 2019 still open; ptweety's TLS-warning reactivation in §9 is related groundwork) | tracker |
|
|
217
|
+
| B-13 | Party/holiday mode support ([#161](https://github.com/rdmtc/node-red-contrib-ccu/issues/161), [#156](https://github.com/rdmtc/node-red-contrib-ccu/issues/156)): PARTY_TIME_START/END must be written atomically (putParamset/combined parameter); possibly a dedicated node | tracker |
|
|
218
|
+
| B-14 | ✅ **done 2026-09-02** (dev.5) — LEVEL_2 writes remapped to COMBINED_PARAMETER (`L2=<pct>`) in setValue; fixes #136/#154/#175 pending hardware confirmation. Archived: [roadmap-archive/B-14.md](roadmap-archive/B-14.md) | B-1 research |
|
|
219
|
+
| B-15 | New HmIP channel types in the signal/display nodes: BSL 2.x replaces DIMMER_VIRTUAL_RECEIVER with OPTICAL_SIGNAL_RECEIVER (LEVEL/COLOR/COLOR_BEHAVIOUR — without COLOR_BEHAVIOUR in the putParamset the LED stays dark, [#177](https://github.com/rdmtc/node-red-contrib-ccu/issues/177)); HmIP-WRCD ch3 is ACOUSTIC_DISPLAY_RECEIVER with DISPLAY_DATA_* datapoints ([#144](https://github.com/rdmtc/node-red-contrib-ccu/issues/144)). Paramset entries for both need reporter dumps. See docs/paramsets.md §4. | B-1 research |
|
|
220
|
+
| B-16 | ✅ **done 2026-09-04** (4.2.0) — new `ccu-homeassistant` node: Home Assistant MQTT auto-discovery for checkbox-selected devices, companion to ccu-mqtt (reuses its topics/payload format); lab-verified against HA 2026.9 and she. Archived: [roadmap-archive/B-16.md](roadmap-archive/B-16.md) | user request |
|
|
221
|
+
| B-17 | ✅ **done 2026-09-06** (4.4.0) — [openccu-lite](https://github.com/hobbyquaker/openccu-lite) port: names, rooms and functions from the box's metadata API (`/api/meta/v1`, snapshot + SSE) when `GET /api/meta/v1/version` answers, the ReGaHSS path unchanged otherwise; sysvar/program/script/poll stay in the palette and error per message. Archived: [roadmap-archive/B-17.md](roadmap-archive/B-17.md) | openccu-lite porting kit |
|
|
218
222
|
|
|
219
223
|
## 8. Bug inventory (diagnosed, not yet fixed)
|
|
220
224
|
|
|
@@ -31,6 +31,9 @@
|
|
|
31
31
|
username: {value: ''},
|
|
32
32
|
password: {value: ''},
|
|
33
33
|
|
|
34
|
+
metaToken: {value: ''},
|
|
35
|
+
metaPort: {value: ''},
|
|
36
|
+
|
|
34
37
|
queueTimeout: {value: 5000, required: true},
|
|
35
38
|
queuePause: {value: 250, required: true},
|
|
36
39
|
|
|
@@ -248,6 +251,16 @@
|
|
|
248
251
|
<label for="node-config-input-password"><i class="icon-tag"></i> Password</label>
|
|
249
252
|
<input type="password" id="node-config-input-password">
|
|
250
253
|
</div>
|
|
254
|
+
<div class="form-row">
|
|
255
|
+
<label for="node-config-input-metaToken"><i class="icon-tag"></i> openccu-lite token</label>
|
|
256
|
+
<input type="password" id="node-config-input-metaToken" placeholder="olt_...">
|
|
257
|
+
<small>Only for openccu-lite (a CCU ignores this). Leave empty when Node-RED runs on the box.</small>
|
|
258
|
+
</div>
|
|
259
|
+
<div class="form-row">
|
|
260
|
+
<label for="node-config-input-metaPort"><i class="icon-tag"></i> openccu-lite port</label>
|
|
261
|
+
<input type="text" id="node-config-input-metaPort" placeholder="80 / 443">
|
|
262
|
+
<small>Only needed when the box's web server is not on the default port.</small>
|
|
263
|
+
</div>
|
|
251
264
|
</script>
|
|
252
265
|
|
|
253
266
|
|
|
@@ -307,6 +320,18 @@
|
|
|
307
320
|
|
|
308
321
|
Weiteres unter <a target="_blank" href="https://nodered.org/docs/user-guide/context">Working</a> with context in der Node-RED Dokumentation.</li>
|
|
309
322
|
</ul>
|
|
323
|
+
<ul>
|
|
324
|
+
<li><b>openccu-lite Token</b>: Nur für <a href="https://github.com/hobbyquaker/openccu-lite" target="_blank">openccu-lite</a>,
|
|
325
|
+
eine CCU-Firmware ohne ReGaHSS. Namen, Räume und Gewerke kommen dort aus der Metadaten-API der Box;
|
|
326
|
+
dafür wird ein Token benötigt, das auf der Box unter <i>Benutzer</i> erzeugt wird. Läuft Node-RED
|
|
327
|
+
auf der Box selbst (RedMatic), bleibt das Feld leer – das lokale Token wird dann automatisch gelesen.
|
|
328
|
+
Eine CCU/RaspberryMatic/OpenCCU ignoriert das Feld vollständig. Systemvariablen, Programme und
|
|
329
|
+
HM-Scripte gibt es auf openccu-lite nicht; die entsprechenden Nodes bleiben im Flow, melden aber pro
|
|
330
|
+
Nachricht einen Fehler.</li>
|
|
331
|
+
</ul>
|
|
332
|
+
<ul>
|
|
333
|
+
<li><b>openccu-lite Port</b>: Nur nötig, wenn der Webserver der Box nicht auf Port 80 bzw. 443 (TLS) läuft.</li>
|
|
334
|
+
</ul>
|
|
310
335
|
<ul>
|
|
311
336
|
<li><b>Authentication</b>: Hier kann angegeben werden wie mit der CCU Kommuniziert werden soll.</li>
|
|
312
337
|
<ul>
|