node-red-contrib-ccu 3.4.1 → 4.0.0

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.
Files changed (49) hide show
  1. package/.prettierignore +10 -0
  2. package/.prettierrc +14 -0
  3. package/AGENTS.md +96 -0
  4. package/CHANGELOG.md +66 -0
  5. package/README.md +17 -21
  6. package/ROADMAP.md +402 -0
  7. package/eslint.config.js +45 -0
  8. package/examples/rpc-events.json +65 -0
  9. package/examples/switch-datapoint.json +86 -0
  10. package/examples/system-variable.json +60 -0
  11. package/nodes/ccu-alexa.html +12 -7
  12. package/nodes/ccu-alexa.js +43 -15
  13. package/nodes/ccu-connection.html +9 -1
  14. package/nodes/ccu-connection.js +602 -337
  15. package/nodes/ccu-display.html +11 -4
  16. package/nodes/ccu-display.js +26 -9
  17. package/nodes/ccu-get-value.html +23 -14
  18. package/nodes/ccu-get-value.js +10 -5
  19. package/nodes/ccu-mqtt.html +9 -10
  20. package/nodes/ccu-mqtt.js +55 -29
  21. package/nodes/ccu-program.html +1 -1
  22. package/nodes/ccu-program.js +9 -7
  23. package/nodes/ccu-rpc-event.html +12 -7
  24. package/nodes/ccu-rpc-event.js +4 -5
  25. package/nodes/ccu-rpc.html +12 -5
  26. package/nodes/ccu-rpc.js +8 -6
  27. package/nodes/ccu-script.html +1 -1
  28. package/nodes/ccu-script.js +4 -3
  29. package/nodes/ccu-set-value.html +11 -7
  30. package/nodes/ccu-set-value.js +47 -16
  31. package/nodes/ccu-signal.html +11 -5
  32. package/nodes/ccu-signal.js +34 -23
  33. package/nodes/ccu-switch.html +23 -13
  34. package/nodes/ccu-sysvar.html +1 -1
  35. package/nodes/ccu-sysvar.js +11 -7
  36. package/nodes/ccu-value.html +12 -7
  37. package/nodes/ccu-value.js +36 -13
  38. package/nodes/lib/base62.js +22 -0
  39. package/nodes/lib/discover.js +127 -0
  40. package/nodes/lib/nextport.js +30 -0
  41. package/nodes/lib/similarity.js +51 -0
  42. package/nodes/lib/status.js +1 -1
  43. package/package.json +105 -144
  44. package/roadmap-archive/README.md +20 -0
  45. package/roadmap-archive/phase-1.md +48 -0
  46. package/roadmap-archive/todo-history.md +39 -0
  47. package/TODO.md +0 -41
  48. package/ccu_rega_localhost.json +0 -1
  49. package/ccu_values_localhost.json +0 -1
package/ROADMAP.md ADDED
@@ -0,0 +1,402 @@
1
+ # Roadmap — node-red-contrib-ccu modernization
2
+
3
+ Goal: make node-red-contrib-ccu a first-class citizen on current Node-RED
4
+ (primary target: Node-RED 5 on Node 24, with Node-RED 4.x kept working),
5
+ on maintained tooling,
6
+ with a release pipeline that lets it ship regularly again. The package has
7
+ not been published since v3.4.2 (Jan 2022); flows.nodered.org shows
8
+ [no scorecard at all](https://flows.nodered.org/node/node-red-contrib-ccu/scorecard)
9
+ and Node-RED 4.1+ visibly flags stale packages in the palette manager.
10
+ Meanwhile the community keeps the ecosystem alive by hand
11
+ ([RedMatic 7.4.1 patch thread](https://homematic-forum.de/forum/viewtopic.php?t=86666),
12
+ active through Aug 2026) and competitors absorb users who leave
13
+ ([CCU-Jack](https://github.com/mdzio/ccu-jack) + MQTT,
14
+ [node-red-contrib-openccu-loom](https://github.com/SukramJ/node-red-contrib-openccu-loom)).
15
+ Demand for a maintained upstream is clearly there.
16
+
17
+ Conventions (same scheme as [feezal](https://github.com/feezal/feezal)):
18
+ decisions are `D-n`, open questions `OQ-n`, backlog items `B-n`. IDs are
19
+ stable and never reused. This file holds only open items: when an item is
20
+ completed or closed, its content moves to
21
+ [roadmap-archive/](roadmap-archive/) — one file per item, named after its
22
+ ID (e.g. `B-1.md`) — and its line in the contents below gets a ✅ marker
23
+ linking into the archive, so the ID stays findable from this index.
24
+ Decisions (D-n) stay here as the record of why things are the way they
25
+ are; answered open questions are rewritten in place
26
+ (`**answered <date>** — …`).
27
+
28
+ Status 2026-09-01: Phase 1 done (see archive); Phase 2 items 1–3 and
29
+ 5–7 done as `4.0.0-dev.5`…`dev.8` — remaining before the 4.0.0 release:
30
+ only the release/announcement itself (§5.8) — the 2026-09-02 smoke test
31
+ on Node-RED 5.0.6 / Node 24 passed (editor dialogs populate on first
32
+ open, all interfaces connect, CCU reboot survived crash-free) — released independently of the
33
+ RedMatic revival timeline (OQ-4). Verified locally on Node 24: 23/23
34
+ specs against Node-RED 4.1 and against Node-RED 5.0.5 (OQ-2). npm OIDC
35
+ trusted publishing is configured for release.yml (D-10 infrastructure in
36
+ place). Research basis:
37
+ the GitHub tracker/PRs/forks, homematic-forum.de, Node-RED release notes and
38
+ scorecard criteria, and the hm2mqtt.js 3.0 rewrite (same author), which
39
+ already re-derived and modernized large parts of `ccu-connection.js` and
40
+ whose ROADMAP documents several verified bugs in this repo.
41
+
42
+ **Ground truth**
43
+
44
+ - [1. Where we stand (v3.4.2)](#1-where-we-stand-v342)
45
+ - [2. Platform targets](#2-platform-targets)
46
+ - [10. Ecosystem context (2026)](#10-ecosystem-context-2026)
47
+
48
+ **Decisions**
49
+
50
+ - [3. Decisions D-1…D-15](#3-decisions)
51
+ - [11. Open questions OQ-1…OQ-6](#11-open-questions)
52
+
53
+ **Phases**
54
+
55
+ - [4. Phase 1 — tooling groundwork](#4-phase-1--tooling-groundwork-no-behavior-change) ✅ [archived](roadmap-archive/phase-1.md)
56
+ - [5. Phase 2 — compatibility release 4.0.0](#5-phase-2--compatibility-release-400)
57
+ - [6. Phase 3 — refactor & tests](#6-phase-3--refactor--tests)
58
+ - [7. Phase 4 — features & devices B-1…B-11](#7-phase-4--features--device-backlog)
59
+
60
+ **Reference**
61
+
62
+ - [8. Bug inventory](#8-bug-inventory-diagnosed-not-yet-fixed)
63
+ - [9. What to take from forks and PRs](#9-what-to-take-from-forks-and-prs)
64
+ - [12. GitHub issue snapshot](#12-github-issue-snapshot)
65
+
66
+ Completed items: [roadmap-archive/](roadmap-archive/) — currently only
67
+ the [pre-roadmap TODO.md history](roadmap-archive/todo-history.md).
68
+
69
+ ---
70
+
71
+ ## 1. Where we stand (v3.4.2)
72
+
73
+ - **Runtime**: `engines.node >= 10`; Node-RED devDep `^1.1.2`; zero
74
+ `async/await`, a `promise.prototype.finally` polyfill that has been a
75
+ no-op since Node 10; `nodes/ccu-connection.js` is a 2953-line monolith
76
+ (HTTP admin endpoint, RPC clients/servers, metadata persistence, ReGa,
77
+ message creation, casting, queue — all in one closure).
78
+ - **Tooling**: xo 0.32 (2020), mocha 8, nyc + coveralls (both effectively
79
+ dead), husky 4 (dead config format), `node-red-node-test-helper` 0.2.5
80
+ (current: 0.3.6). CI is a GitHub workflow on Node **10.x/12.x** with
81
+ `actions/*@v1/v2` (removed runners); a stale `.travis.yml` remains;
82
+ README badges point at dead services (travis-ci.org, david-dm.org).
83
+ Publishing is manual (`checkgit`/`postpublish` shell one-liners).
84
+ - **Tests**: 3 specs, 31 cases, all full Node-RED boots against
85
+ `hm-simulator`. No unit tests for the pure logic (`createMessage`,
86
+ casting, topic templates). Issue [#81](https://github.com/rdmtc/node-red-contrib-ccu/issues/81).
87
+ - **Known blocker**: on Node-RED 4.x, users must open node config dialogs
88
+ several times before the interface/device/channel/datapoint selects
89
+ populate. Root cause diagnosed — see §8.1. Nobody in the
90
+ ecosystem has fixed this; it must be fixed here.
91
+ - **Dependencies**: 4 of 10 runtime deps are removable outright, 2 have
92
+ maintained 2.0 releases by the same author, 1 (`string-similarity`) is
93
+ deprecated on npm (issue [#176](https://github.com/rdmtc/node-red-contrib-ccu/issues/176)).
94
+ Details in §3 / D-4…D-7.
95
+
96
+ ## 2. Platform targets
97
+
98
+ Facts (verified 2026-09-01):
99
+
100
+ | Platform | Requirement | Note |
101
+ | ------------------------------------------------------------------- | --------------------- | --------------------------------------------------------- |
102
+ | Node-RED 4.0 (Jun 2024) | Node ≥ 18 | in maintenance until 2026-12-31 |
103
+ | Node-RED 4.1 (Jul 2025) | Node ≥ 18 | flags stale/deprecated palette packages |
104
+ | Node-RED 5.0 (Jun 2026) | Node ≥ 22.9 | **drops 32-bit ARM** — no NR 5 on CCU3-class hardware |
105
+ | homematic-rega 2.0.0 / homematic-xmlrpc 2.0.0 | Node ≥ 20 | published 2026-08-27 |
106
+ | RedMatic revival ([../redmatic ROADMAP §4](../redmatic/ROADMAP.md)) | Node 24, Node-RED 5.x | armv7l runtime repackaged from Alpine musl (hm2mqtt H-39) |
107
+
108
+ Consequence: the old "Node-RED ≥ 1.0" README promise is obsolete. And the
109
+ "no Node-RED 5 / Node 24 on CCU3 hardware" constraint only applies to
110
+ _official_ binaries: hm2mqtt solved the runtime problem by repackaging
111
+ Alpine's musl Node 24 armv7l build with patchelf (hm2mqtt ROADMAP H-39),
112
+ verified on real CCU3 hardware — full test suite green on the official
113
+ firmware's glibc 2.27 (OQ-63 there). The RedMatic revival adopts exactly
114
+ that ([../redmatic ROADMAP §4](../redmatic/ROADMAP.md): Node 14 → 24.x,
115
+ Node-RED 2.1.5 → 5.x). So:
116
+
117
+ **Primary target: Node-RED 5.x on Node 24 — what RedMatic will bundle.
118
+ Floors stay at Node ≥ 20 / Node-RED ≥ 4.0** (nothing here needs 5-only
119
+ APIs; standalone Node-RED 4.x users remain supported at least until its
120
+ maintenance ends 2026-12-31), **CommonJS throughout** (D-2).
121
+
122
+ ## 3. Decisions
123
+
124
+ | ID | Decision |
125
+ | ---- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
126
+ | D-1 | **Raise floors: `engines.node: ">=20"`, `node-red.version: ">=4.0.0"` in package.json — but the primary dev/test target is Node-RED 5 on Node 24**, which the RedMatic revival bundles (self-built Alpine-musl armv7l runtime, hm2mqtt H-39). The floors keep standalone NR 4.x / Node 20 users supported and match what homematic-rega/xmlrpc 2.0 require (Node ≥ 20). This is the gate for everything else and makes the next release a major: **4.0.0**. |
127
+ | D-2 | **Stay CommonJS.** Node-RED 5's ESM support is incomplete; the maintainers themselves advise against migrating node runtimes to ESM ([discourse thread](https://discourse.nodered.org/t/node-red-v5-now-supports-esm-nodes-maybe-maybe-not/101259)). `homematic-rega` 2.0 is ESM-only → load it via dynamic `import()` from CJS. |
128
+ | D-3 | **Lint: xo → ESLint 9 flat config + Prettier.** Template exists in [hm2mqtt.js/eslint.config.js](../hm2mqtt.js/eslint.config.js) including the second config block with browser globals (`$`, `RED`) for the `.html` editor scripts — replaces xo's `global` hack. Prettier at 4-space/120-col matches the existing style (hm2mqtt's `.prettierrc` is copyable). Drop husky entirely; CI is the gate. |
129
+ | D-4 | **Bump `homematic-xmlrpc` → 2.0.0 and `homematic-rega` → 2.0.0.** xmlrpc 2.0 removes the fragile xmlbuilder GitHub-tarball reference and adds server `error`/`listening` events + promise `close()` — exactly what the `httpServer` reach-in hack at `ccu-connection.js:1709` asks for in its own TODO comment. rega 2.0 has zero runtime deps and finally removes `request@2.88` (deprecated since 2020, our biggest audit liability), does timestamp conversion in the lib, and is unit-tested. |
130
+ | D-5 | **binrpc: merge/release [hobbyquaker/binrpc#10](https://github.com/hobbyquaker/binrpc/pull/10)** (open since 2019 — missing socket error listener; a late response after timeout crashes the whole Node-RED process). This is the likely cause of issue [#160](https://github.com/rdmtc/node-red-contrib-ccu/issues/160). A binrpc 4.0 without the abandoned `binary`/`put` deps is a separate, later job (same call as hm2mqtt ROADMAP §6.4). |
131
+ | D-6 | **Drop dead-weight deps**: `promise.prototype.finally` (native since Node 10), `obj-ease` (only used by `tools/`, move to devDeps at most), `string-similarity` (deprecated; single call site at `ccu-connection.js:437` — replace with ~20 lines of inline Dice coefficient, closes the core of [#176](https://github.com/rdmtc/node-red-contrib-ccu/issues/176)). |
132
+ | D-7 | **Vendor the micro-deps** `hm-discover`, `nextport`, `buffer-base62`, `mqtt-wildcard` into `nodes/lib/` (ptweety fork demonstrated this — ~50 lines each, all dormant since ~2019). Fewer install-time deprecation warnings, better scorecard "dependencies at latest" line. |
133
+ | D-8 | **Tests: extract pure modules and unit-test them with `node --test` + `node:assert` (zero test deps); keep `node-red-node-test-helper` (bumped to 0.3.6) + mocha 10 for the integration specs; coverage nyc → c8, drop coveralls/camo-purge.** This revises the earlier "adopt jest" plan: the author's own newer practice (hm2mqtt, 21 test files on `node --test`) is a strictly smaller dependency surface, and test-helper remains the official, mocha-centric path for integration. |
134
+ | D-9 | **CI: GitHub Actions, Node 20/22/24 × Node-RED 4.x and 5.x** (5.x legs on Node 22/24 only — its floor is 22.9; **Node 24 + Node-RED 5 is the primary leg**), `checkout@v4`/`setup-node@v4`, `npm ci` → lint → test. Delete `.travis.yml`, fix README badges. |
135
+ | D-10 | **Release: tag-triggered workflow with npm OIDC trusted publishing** (`id-token: write`, `npm publish --provenance`, needs npm ≥ 11.5.1 so `npm install -g npm@latest` first). Copyable nearly verbatim from [hm2mqtt.js/.github/workflows/release.yml](../hm2mqtt.js/.github/workflows/release.yml). No long-lived npm token. |
136
+ | D-11 | **Changelog: hand-written Keep-a-Changelog `CHANGELOG.md`** + a small `release-notes.js` that extracts the tag's section for the GitHub release (hm2mqtt pattern). Closes [#87](https://github.com/rdmtc/node-red-contrib-ccu/issues/87). Preferred over the ptweety fork's `auto-changelog` — entries should explain user-visible symptoms, not list commits. |
137
+ | D-12 | **Keep the unscoped name `node-red-contrib-ccu`.** Existing unscoped names are grandfathered by the 2022 naming rules; the ptweety scoped fork was never actually published to npm and is dormant since Oct 2022 — this repo remains canonical. |
138
+ | D-13 | **Scorecard compliance before the next publish**: `engines.node`, `node-red.version`, an `examples/` directory with importable flows, refreshed deps. A new release instantly regenerates the missing scorecard — cheap, high-visibility win. |
139
+ | D-14 | **Add CCU-Jack as a supported interface** (PR [#162](https://github.com/rdmtc/node-red-contrib-ccu/pull/162), independently validated by ptweety commit `718ff65`; closes [#164](https://github.com/rdmtc/node-red-contrib-ccu/issues/164)). Expose port/path in config instead of hardcoding. |
140
+ | D-15 | **No flow-breaking config-schema changes in 4.0.** Existing flows must import cleanly; the major bump is for engines/Node-RED floors, not node semantics. Anything touching node config schemas needs a migration story (RedMatic installs). |
141
+
142
+ ## 4. Phase 1 — tooling groundwork (no behavior change)
143
+
144
+ **✅ done 2026-09-01** — moved to
145
+ [roadmap-archive/phase-1.md](roadmap-archive/phase-1.md). Shipped as
146
+ `4.0.0-dev.1` … `4.0.0-dev.4`: CI matrix (Node 20/22/24 × Node-RED 4/5)
147
+ plus the OIDC release pipeline, ESLint 9 + Prettier, runtime deps 10 → 4,
148
+ mocha 11 / test-helper 0.3.6 / c8, CHANGELOG bootstrap. The engines /
149
+ node-red.version floors (D-1/D-13) were pulled forward from Phase 2.
150
+
151
+ ## 5. Phase 2 — compatibility release 4.0.0
152
+
153
+ The user-facing release. Ship as one major:
154
+
155
+ 1. **done 2026-09-01 (dev.5), verified 2026-09-02** — Node-RED 4.x
156
+ editor select-population bug fixed (§8.1) and confirmed in a real
157
+ Node-RED 5.0.6 editor (node-red-dev smoke test): interface/channel/
158
+ datapoint selects and autocomplete populate on first open. The
159
+ cold-start empty-list case stays open for the Phase 3 loader
160
+ consolidation.
161
+ 2. **done 2026-09-01 (dev.1)** — engines `^20.19 || ^22.12 || >=24`
162
+ (require(esm), tightened in dev.6), `node-red.version >=4.0.0`
163
+ (D-1, D-13).
164
+ 3. **done 2026-09-01 (dev.6)** — `homematic-xmlrpc` 2.0 +
165
+ `homematic-rega` 2.0 (D-4): rega loaded via require(esm), call sites
166
+ fed through promise→callback adapters, timestamps now epoch ms from
167
+ the lib (the #96 uncertain marker is `ts === 0`), the `httpServer`
168
+ reach-in remains only for binrpc. `request` and the xmlbuilder
169
+ tarball are out of the runtime tree.
170
+ 4. **done 2026-09-01 (dev.9)** — binrpc 3.3.2 published (with
171
+ provenance, via binrpc's own new OIDC release workflow) and picked up
172
+ here through the `^3.3.1` range: adds the missing socket error
173
+ listener from
174
+ [hobbyquaker/binrpc#10](https://github.com/hobbyquaker/binrpc/pull/10)
175
+ (a late response after a timeout crashed the whole Node-RED process)
176
+ plus a fix for the methodCall callback firing twice on failed
177
+ connections. Addresses the #160 crash class (D-5).
178
+ 5. **done 2026-09-01 (dev.7)** — CCU-Jack interface (D-14): port
179
+ configurable (2121 / 2122 TLS), discovery probes it; closes #164.
180
+ 6. **done 2026-09-01 (dev.8)** — undefined-payload guard from PR
181
+ [#173](https://github.com/rdmtc/node-red-contrib-ccu/pull/173) (the
182
+ guard only; the auto-subscribe half is a feature redesign, see B-2).
183
+ 7. **done 2026-09-01 (dev.8)** — `examples/` with three importable
184
+ flows (D-13).
185
+ 8. Release via the new OIDC pipeline (D-10). Announce in the
186
+ homematic-forum RedMatic subforum — the community patching RedMatic by
187
+ hand is the audience, and coordination with the RedMatic revival
188
+ (rdmtc/RedMatic ROADMAP) makes 4.0.0 the version it bundles.
189
+
190
+ ## 6. Phase 3 — refactor & tests
191
+
192
+ Goal: make `ccu-connection.js` maintainable and the logic testable
193
+ without booting Node-RED. hm2mqtt already proved this decomposition
194
+ reproduces the behavior field-for-field (overnight compare, 1486 items).
195
+
196
+ 1. Split `ccu-connection.js` (2953 lines) along hm2mqtt's `lib/` seams:
197
+ rpc, metadata/paramsets, rega, values/createMessage, cast, topics,
198
+ queue, admin endpoint. Target ~300-line modules; pure functions where
199
+ possible.
200
+ 2. Unit tests (`node --test`) for the pure modules: `createMessage`,
201
+ `paramCast`, topic templates, sysvar casting (D-8) — this is the real
202
+ answer to [#81](https://github.com/rdmtc/node-red-contrib-ccu/issues/81).
203
+ 3. Migrate callbacks/`.then` chains to async/await as modules are
204
+ touched (no big-bang rewrite).
205
+ 4. Editor HTML cleanup: shared loader helper for the 9 near-identical
206
+ `oneditprepare` implementations (see §8.1's fix shape), proper error
207
+ handling on every `$.getJSON`.
208
+ 5. i18n/help consolidation: move the 13 inline `data-help-name` help
209
+ texts into `locales/`, add missing `ccu-alexa`/`ccu-mqtt`/`ccu-switch`
210
+ locale files (ptweety's restructure is the reference; this closes the
211
+ long-standing "documentation, i18n" todo).
212
+
213
+ ## 7. Phase 4 — features & device backlog
214
+
215
+ | ID | Item | Source |
216
+ | ---- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------ |
217
+ | B-1 | Update `paramsets.json` for newer HmIP devices — first make `tools/paramsets-join.js` a documented, repeatable job against a live CCU/OpenCCU (OQ-5 decision), then regenerate (HmIP-SWDO-PL-2 [#178](https://github.com/rdmtc/node-red-contrib-ccu/issues/178), HmIP-BSL 2.0.2 [#177](https://github.com/rdmtc/node-red-contrib-ccu/issues/177), LEVEL_2 blinds [#175](https://github.com/rdmtc/node-red-contrib-ccu/issues/175)/[#154](https://github.com/rdmtc/node-red-contrib-ccu/issues/154)/[#136](https://github.com/rdmtc/node-red-contrib-ccu/issues/136), CuxD DIR [#159](https://github.com/rdmtc/node-red-contrib-ccu/issues/159), forum reports: HmIP-eTRV-3, HmIP-BROLL-2, HmIP-ESI ch. 2–4) | tracker + forum |
218
+ | B-2 | Dynamic node configuration via msg — recurring theme [#172](https://github.com/rdmtc/node-red-contrib-ccu/issues/172), [#71](https://github.com/rdmtc/node-red-contrib-ccu/issues/71), [#103](https://github.com/rdmtc/node-red-contrib-ccu/issues/103), [#80](https://github.com/rdmtc/node-red-contrib-ccu/issues/80), [#56](https://github.com/rdmtc/node-red-contrib-ccu/issues/56); design properly rather than merging PR #173's auto-subscribe | tracker |
219
+ | B-3 | Fix the ccu-mqtt node bugs verified in hm2mqtt ROADMAP §1.3 (see §8.2) | hm2mqtt |
220
+ | B-4 | Fix/remove the dead `isLocal` detection (`/etc/lighttpd/conf.d/proxy.conf` grep, `ccu-connection.js:346` — file is a stub on firmware ≥ 3.87, so local installs silently go through the proxy) | hm2mqtt §15.4 |
221
+ | B-5 | Configurable ping checks ([#44](https://github.com/rdmtc/node-red-contrib-ccu/issues/44)), sysvar node property/status improvements ([#54](https://github.com/rdmtc/node-red-contrib-ccu/issues/54), [#56](https://github.com/rdmtc/node-red-contrib-ccu/issues/56)) | tracker |
222
+ | B-6 | binrpc 4.0 rewrite without abandoned `binary`/`put` deps | deferred, mirrors hm2mqtt §6.4 |
223
+ | B-7 | Triage the remaining ~60 open issues (snapshot in §12) against phases; close what 4.0 fixes | tracker |
224
+ | B-8 | Global object: expose CCU metadata/values via a global context object (old todo item) | old TODO |
225
+ | B-9 | Value node: datapoint autocomplete / multiselect (rpc and rpc-event already have it) | old TODO |
226
+ | 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 |
227
+ | 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 |
228
+
229
+ ## 8. Bug inventory (diagnosed, not yet fixed)
230
+
231
+ ### 8.1 Node-RED 4.x: config selects stay empty until dialog reopened
232
+
233
+ **Largely fixed 2026-09-01 (`4.0.0-dev.5`)** — defects 1 and 2 below are
234
+ fixed in all 9 files: the initial load is now triggered explicitly at the
235
+ end of `oneditprepare` instead of relying on the config select's `change`
236
+ event, the `ifacesPending` latch is cleared in a `.fail()` handler with up
237
+ to 5 retries (1 s apart), and the `_ADD_` code path no longer leaves the
238
+ latch stuck in the two files that had that variant (ccu-get-value,
239
+ ccu-switch). Defect 3 (cold start can return an empty channel list with no
240
+ retry) remains open — fold it into the Phase 3 editor-loader
241
+ consolidation (§6.4). Verified 2026-09-02 in a real Node-RED 5.0.6
242
+ editor (smoke test); CI still has no editor tests.
243
+
244
+ Same pattern in 9 editor files (`ccu-value`, `ccu-set-value`,
245
+ `ccu-get-value`, `ccu-rpc`, `ccu-rpc-event`, `ccu-signal`, `ccu-display`,
246
+ `ccu-switch`, `ccu-alexa`). Three compounding defects in the
247
+ `loadIfaces`/`loadConfig` chain (see `nodes/ccu-value.html:56-107`):
248
+
249
+ 1. The whole load chain hangs off a single jQuery `change` handler on the
250
+ config-node select — if Node-RED 4's dialog build sets the value
251
+ without firing `change` (or before the handler attaches), nothing ever
252
+ loads. Fix: trigger the initial load explicitly at the end of
253
+ `oneditprepare` (three nodes already do this trick for the _iface_
254
+ select, none for the _config_ select).
255
+ 2. `ifacesPending` is a one-way latch: only the `$.getJSON` success path
256
+ clears it. When the `/ccu` admin endpoint answers 500 (config node not
257
+ yet instantiated — just deployed, disabled, still starting), no retry
258
+ within the open dialog can ever succeed. Fix: `.fail()` handlers, a
259
+ request-in-flight promise instead of a boolean.
260
+ 3. Even a 200 can return `{}`: `type=channels|tree` only emit channels
261
+ whose paramset descriptions are already cached
262
+ (`ccu-connection.js:91-108`); on cold start the first open yields empty
263
+ lists with no error and no retry. Fix: retry/poll or surface a
264
+ "still loading" state.
265
+
266
+ Add a Node-RED 4.x leg to the test matrix so this class of regression is
267
+ caught (the devDep pin to `^1.1.2` is why it never was).
268
+
269
+ ### 8.2 Verified in the hm2mqtt 3.0 rewrite (free, confirmed findings)
270
+
271
+ - `nodes/ccu-mqtt.js`: the writeable check `!(OPERATIONS) && 2` is always
272
+ false; `putParamset` casts with `description[filter.param]` which is
273
+ `undefined`, so values pass uncast.
274
+ - Empty-name topic bug: devices without a rega name produce
275
+ `hm/status//STATE`-style topics.
276
+ - `datapointEnum`/`valueEnum` in outgoing messages read
277
+ `description.ENUM`, which the interface processes never send — both
278
+ have always been `undefined`.
279
+
280
+ ### 8.3 Misc
281
+
282
+ - PR #173 as submitted contains `message.cache || true` (always truthy)
283
+ and loose `!= undefined` — fix when taking the guard.
284
+ - Editor HTML ships `console.log` debug leftovers.
285
+
286
+ ## 9. What to take from forks and PRs
287
+
288
+ - **PR [#162](https://github.com/rdmtc/node-red-contrib-ccu/pull/162)**
289
+ (CCU-Jack): take, with configurable port/path (D-14).
290
+ - **PR [#173](https://github.com/rdmtc/node-red-contrib-ccu/pull/173)**:
291
+ take the undefined-payload guard only (§5.6); auto-subscribe → B-2.
292
+ - **[ptweety fork](https://github.com/ptweety/node-red-contrib-ccu)**
293
+ (v3.5.0–3.6.2, Oct 2022, dormant since, never on npm): cherry-pick
294
+ ideas, not commits — CCU-Jack (≡ PR #162), dep pruning/vendoring
295
+ (D-6/D-7), nyc→c8, TLS-warning reactivation (`9fb3466`), MIGRATION.md/
296
+ CONTRIBUTING.md docs idea. Skip: its `src/` build split (hm2mqtt's
297
+ newer answer is "ship sources, no build step"), auto-changelog (D-11),
298
+ xo bump (we leave xo entirely). It contains **no** Node-RED 3/4-era
299
+ fixes — it predates them.
300
+ - All other forks (11, all 0 stars, none pushed since 2022): nothing to
301
+ take beyond the two PRs above.
302
+ - **[binrpc#10](https://github.com/hobbyquaker/binrpc/pull/10)**: merge
303
+ upstream (D-5).
304
+
305
+ ## 10. Ecosystem context (2026)
306
+
307
+ - **RaspberryMatic → OpenCCU** (renamed May 2026). RedMatic remains a
308
+ third-party addon; the [rdmtc/RedMatic](https://github.com/rdmtc/RedMatic)
309
+ revival strips it down to node-red-contrib-ccu only and targets Node 24 /
310
+ Node-RED 5.x with a self-built armv7l runtime (Alpine musl repackage,
311
+ hm2mqtt H-39) — this roadmap's Phase 2 is its prerequisite.
312
+ - **Community**: RedMatic subforum still very active, but running on
313
+ community patches (Node-RED current + Node 20/22 on OpenCCU). These
314
+ users are the first adopters of 4.0.0.
315
+ - **Competition**: CCU-Jack + plain MQTT nodes is the most-cited
316
+ migration path; [openccu-loom](https://github.com/SukramJ/node-red-contrib-openccu-loom)
317
+ (2026, SukramJ of Home Assistant Homematic(IP) Local fame, NR ≥ 4.1.9 /
318
+ Node ≥ 22.9) is the modern benchmark. Differentiator to keep: direct
319
+ BINRPC/XMLRPC + ReGa without any extra daemon, and RedMatic packaging.
320
+ - **Node-RED 4.x maintenance ends 2026-12-31**; 5.x is the active line,
321
+ and with the bundled Alpine-musl Node 24 runtime it reaches CCU3
322
+ hardware despite the official 32-bit ARM drop. Supporting 4.x and 5.x
323
+ from one CJS codebase (D-1/D-2) covers the whole user base.
324
+
325
+ ## 11. Open questions
326
+
327
+ | ID | Question | Proposal |
328
+ | ---- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- |
329
+ | OQ-1 | **answered 2026-09-01** — Node floor 20 or 22? Floor stays `>=20` (homematic-rega/xmlrpc 2.0 requirement, keeps standalone NR 4.x users); the primary target is Node 24 + Node-RED 5, which RedMatic bundles via its own armv7l runtime (hm2mqtt H-39). | Revisit the floor when NR 4.x maintenance ends (2026-12-31). |
330
+ | OQ-2 | **answered 2026-09-01** — `node-red-node-test-helper` 0.3.6 runs the full suite cleanly under both targets: 23/23 specs on Node-RED 4.1 and on Node-RED 5.0.5, both on Node 24 (also on Node 20 / NR 4.1 earlier). | Closed. Only the editor UI itself (§8.1 fix) still needs a manual smoke test — the specs don't exercise the editor. |
331
+ | OQ-3 | **answered 2026-09-01** (user decision) — vendor only the dormant three (`hm-discover`, `nextport`, `buffer-base62`, done in dev.2); `mqtt-wildcard` stays a normal dependency (maintained, same author). | Closed. |
332
+ | OQ-4 | **answered 2026-09-01** (user decision) — 4.0.0 releases first, as soon as its blockers (§5.4, editor smoke test) are done; RedMatic bundles it whenever its own Node 24 / Node-RED 5 modernization lands. No release coupling. | Closed. |
333
+ | OQ-5 | **answered 2026-09-01** (user decision) — paramsets.json becomes scripted from a live CCU: revive `tools/paramsets-join.js` as a documented, repeatable job against the CCU/OpenCCU with current firmware, rerun on firmware updates and as part of B-1. | Closed — implementation folded into B-1 (Phase 4). |
334
+ | OQ-6 | **closed 2026-09-01** (user decision) — SPECIAL paramset key handling is dropped; no device using it was ever identified. Reopen only if a real device report needs it. | Closed. |
335
+
336
+ ## 12. GitHub issue snapshot
337
+
338
+ Imported from <https://github.com/rdmtc/node-red-contrib-ccu/issues> on
339
+ 2026-07-16 (60 open issues at the time; re-checked 2026-09-01 — nothing
340
+ newer, latest is #178 from 2025-08). Triage against the phases is B-7;
341
+ issues already addressed by a roadmap item are annotated.
342
+
343
+ - [#22](https://github.com/rdmtc/node-red-contrib-ccu/issues/22) MQTT Node: No GUI for node-input-topicInputRpc
344
+ - [#27](https://github.com/rdmtc/node-red-contrib-ccu/issues/27) Anpassungen an CCU Firmware >= 3.41
345
+ - [#39](https://github.com/rdmtc/node-red-contrib-ccu/issues/39) topic handling vereinheitlichen
346
+ - [#44](https://github.com/rdmtc/node-red-contrib-ccu/issues/44) Configuration Option to deactivate Ping Checks → B-5
347
+ - [#51](https://github.com/rdmtc/node-red-contrib-ccu/issues/51) switch node casts boolean payloads to numbers
348
+ - [#52](https://github.com/rdmtc/node-red-contrib-ccu/issues/52) RPC Event: Zeitpunkt des letzten Events und ggf. letztes Topic
349
+ - [#54](https://github.com/rdmtc/node-red-contrib-ccu/issues/54) ccu-sysvar node: aktueller Status und ggf. Zeitpunkt von wann der Status stammt unter dem node → B-5
350
+ - [#56](https://github.com/rdmtc/node-red-contrib-ccu/issues/56) make property for sysvar-node configurable → B-2/B-5
351
+ - [#58](https://github.com/rdmtc/node-red-contrib-ccu/issues/58) Hilfe Texte → §6.5
352
+ - [#71](https://github.com/rdmtc/node-red-contrib-ccu/issues/71) Set value node: allow to set filter properties with incoming msg → B-2
353
+ - [#80](https://github.com/rdmtc/node-red-contrib-ccu/issues/80) Signal Node: allow to overwrite settings via msg/context/env → B-2
354
+ - [#81](https://github.com/rdmtc/node-red-contrib-ccu/issues/81) increase test coverage → §6.2
355
+ - [#87](https://github.com/rdmtc/node-red-contrib-ccu/issues/87) Changelog → D-11
356
+ - [#96](https://github.com/rdmtc/node-red-contrib-ccu/issues/96) uncertain Flag das gesetzt wird wenn Rega Zeitstempel 1970-01-01 01:00:00 zurückgibt
357
+ - [#103](https://github.com/rdmtc/node-red-contrib-ccu/issues/103) switch node params via msg → B-2
358
+ - [#105](https://github.com/rdmtc/node-red-contrib-ccu/issues/105) ccu-value Node: Weiterbenutzung des Input-msg-Objects, statt Neuinstaziierung
359
+ - [#106](https://github.com/rdmtc/node-red-contrib-ccu/issues/106) Statusänderung eines Kanals wird nicht übermittelt
360
+ - [#110](https://github.com/rdmtc/node-red-contrib-ccu/issues/110) Node-RED: v1.0.4 & CCU3-3.51.6 / Error: getaddrinfo ENOTFOUND
361
+ - [#111](https://github.com/rdmtc/node-red-contrib-ccu/issues/111) ON_TIME wird nicht initial befüllt
362
+ - [#112](https://github.com/rdmtc/node-red-contrib-ccu/issues/112) Nur drei Heizungsprofile verfügbar (# 4-6 stehen nicht zur Auswahl)
363
+ - [#114](https://github.com/rdmtc/node-red-contrib-ccu/issues/114) Possible to use "localfilesystem" for Context Store
364
+ - [#115](https://github.com/rdmtc/node-red-contrib-ccu/issues/115) add get/update method to mqtt node
365
+ - [#116](https://github.com/rdmtc/node-red-contrib-ccu/issues/116) Google Home Anbindung: State von CCU wird nicht zurück an Google Home übermittelt
366
+ - [#117](https://github.com/rdmtc/node-red-contrib-ccu/issues/117) Einbinden HmIP-FCI6 → B-1
367
+ - [#119](https://github.com/rdmtc/node-red-contrib-ccu/issues/119) HmIP-BROLL wird nicht gefunden → B-1
368
+ - [#121](https://github.com/rdmtc/node-red-contrib-ccu/issues/121) rpc-event STICKY_UNREACH
369
+ - [#124](https://github.com/rdmtc/node-red-contrib-ccu/issues/124) poll variable description
370
+ - [#126](https://github.com/rdmtc/node-red-contrib-ccu/issues/126) Context store property name dot replacement
371
+ - [#128](https://github.com/rdmtc/node-red-contrib-ccu/issues/128) CCU Switch node - wrong resize in settings dialog (fix in v3.4.2?)
372
+ - [#129](https://github.com/rdmtc/node-red-contrib-ccu/issues/129) ccu-get-value node: bei einer Werteliste wird nur der value zurückgegeben (fix in v3.4.2?)
373
+ - [#132](https://github.com/rdmtc/node-red-contrib-ccu/issues/132) Ports
374
+ - [#133](https://github.com/rdmtc/node-red-contrib-ccu/issues/133) ccu-set-value "remembers" previous events
375
+ - [#136](https://github.com/rdmtc/node-red-contrib-ccu/issues/136) HmIP-FBL → B-1
376
+ - [#138](https://github.com/rdmtc/node-red-contrib-ccu/issues/138) Failed at the grpc@1.19.0 install script
377
+ - [#139](https://github.com/rdmtc/node-red-contrib-ccu/issues/139) CCU Node error message in the log (IoBroker)
378
+ - [#140](https://github.com/rdmtc/node-red-contrib-ccu/issues/140) "Error: unknown datapoint BidCos-RF.OEQxxxxxxx:1.STATE"
379
+ - [#143](https://github.com/rdmtc/node-red-contrib-ccu/issues/143) Ich bekomme mit get-value nur Fehlermeldungen und keinen Status
380
+ - [#144](https://github.com/rdmtc/node-red-contrib-ccu/issues/144) Signal Node: Integration of HmIP-WRCD → B-1
381
+ - [#145](https://github.com/rdmtc/node-red-contrib-ccu/issues/145) CCU value Node CUX16 no Output
382
+ - [#146](https://github.com/rdmtc/node-red-contrib-ccu/issues/146) CCU different / changing Nodes with "unknown Datapoint"
383
+ - [#148](https://github.com/rdmtc/node-red-contrib-ccu/issues/148) Signal Node: HmIP-MP3P Dynamisches Setzen von SOUNDFILE_LIST → B-1
384
+ - [#149](https://github.com/rdmtc/node-red-contrib-ccu/issues/149) XML-RPC fault mit falscher value?
385
+ - [#151](https://github.com/rdmtc/node-red-contrib-ccu/issues/151) FROLL: Cache geht nicht mit Geräten mit 2 Kanälen für Soll/Ist bei Handbedienung
386
+ - [#154](https://github.com/rdmtc/node-red-contrib-ccu/issues/154) HmIP-BBL datapoint LEVEL_2 cannot be set → B-1
387
+ - [#155](https://github.com/rdmtc/node-red-contrib-ccu/issues/155) Error: Local address XXX not available. Using YYY instead.
388
+ - [#156](https://github.com/rdmtc/node-red-contrib-ccu/issues/156) Set PARTY_TIME_START and PARTY_TIME_END not working
389
+ - [#158](https://github.com/rdmtc/node-red-contrib-ccu/issues/158) using in SubFlows
390
+ - [#159](https://github.com/rdmtc/node-red-contrib-ccu/issues/159) Fehlender CuxD datapoint "DIR" → B-1
391
+ - [#160](https://github.com/rdmtc/node-red-contrib-ccu/issues/160) Node-RED Absturz bei Verbindungsverlust zur CCU → D-5
392
+ - [#161](https://github.com/rdmtc/node-red-contrib-ccu/issues/161) Feature Request: Node "Party Mode"
393
+ - [#164](https://github.com/rdmtc/node-red-contrib-ccu/issues/164) Support CCU-Jack → D-14
394
+ - [#166](https://github.com/rdmtc/node-red-contrib-ccu/issues/166) Mehrere Variablen sofort schreiben und triggern
395
+ - [#167](https://github.com/rdmtc/node-red-contrib-ccu/issues/167) updated function values in ccu and functions in ccu-mqtt node
396
+ - [#169](https://github.com/rdmtc/node-red-contrib-ccu/issues/169) "Error: XML-RPC fault: Generic error (UNREACH)"
397
+ - [#170](https://github.com/rdmtc/node-red-contrib-ccu/issues/170) Auslesen System-Variable
398
+ - [#172](https://github.com/rdmtc/node-red-contrib-ccu/issues/172) Configure CCU-Value through message → B-2
399
+ - [#175](https://github.com/rdmtc/node-red-contrib-ccu/issues/175) HmIP-DRBLI4 Level_2 not working → B-1
400
+ - [#176](https://github.com/rdmtc/node-red-contrib-ccu/issues/176) Deprecated dependencies → D-4/D-6/D-7
401
+ - [#177](https://github.com/rdmtc/node-red-contrib-ccu/issues/177) HmIP-BSL 2.0.2 & Signal Node: Color Behaviour missing → B-1
402
+ - [#178](https://github.com/rdmtc/node-red-contrib-ccu/issues/178) HmIP-SWDO visible in device list but HmIP-SWDO-PL-2 not → B-1
@@ -0,0 +1,45 @@
1
+ const js = require('@eslint/js');
2
+ const prettier = require('eslint-config-prettier');
3
+ const globals = require('globals');
4
+ const html = require('eslint-plugin-html');
5
+
6
+ module.exports = [
7
+ {
8
+ ignores: [
9
+ 'node_modules/**',
10
+ 'coverage/**',
11
+ // excluded from linting since the xo days — burn down later
12
+ 'nodes/ccu-switch.js',
13
+ 'nodes/ccu-switch.html',
14
+ 'tools/paramsets-join.js',
15
+ ],
16
+ },
17
+ js.configs.recommended,
18
+ prettier,
19
+ {
20
+ languageOptions: {
21
+ ecmaVersion: 2023,
22
+ sourceType: 'commonjs',
23
+ globals: globals.node,
24
+ },
25
+ rules: {
26
+ 'no-unused-vars': ['error', {argsIgnorePattern: '^_', caughtErrorsIgnorePattern: '^_'}],
27
+ 'no-empty': ['error', {allowEmptyCatch: true}],
28
+ },
29
+ },
30
+ {
31
+ files: ['test/**/*.js'],
32
+ languageOptions: {
33
+ globals: {...globals.node, ...globals.mocha},
34
+ },
35
+ },
36
+ {
37
+ // editor-side scripts embedded in the node .html files
38
+ files: ['nodes/**/*.html'],
39
+ plugins: {html},
40
+ languageOptions: {
41
+ sourceType: 'script',
42
+ globals: {...globals.browser, ...globals.jquery, RED: 'readonly'},
43
+ },
44
+ },
45
+ ];
@@ -0,0 +1,65 @@
1
+ [
2
+ {
3
+ "id": "rpc-events",
4
+ "type": "ccu-rpc-event",
5
+ "name": "all events",
6
+ "iface": "",
7
+ "ccuConfig": "ccu-conn-example",
8
+ "rooms": "",
9
+ "roomsRx": "str",
10
+ "functions": "",
11
+ "functionsRx": "str",
12
+ "device": "",
13
+ "deviceRx": "str",
14
+ "deviceName": "",
15
+ "deviceNameRx": "str",
16
+ "deviceType": "",
17
+ "deviceTypeRx": "str",
18
+ "channel": "",
19
+ "channelRx": "str",
20
+ "channelName": "",
21
+ "channelNameRx": "str",
22
+ "channelType": "",
23
+ "channelTypeRx": "str",
24
+ "datapoint": "",
25
+ "datapointRx": "str",
26
+ "change": true,
27
+ "working": false,
28
+ "cache": false,
29
+ "topic": "${CCU}/${Interface}/${channelName}/${datapoint}",
30
+ "x": 160,
31
+ "y": 100,
32
+ "wires": [["debug-events"]]
33
+ },
34
+ {
35
+ "id": "debug-events",
36
+ "type": "debug",
37
+ "name": "events",
38
+ "active": true,
39
+ "tosidebar": true,
40
+ "complete": "true",
41
+ "x": 380,
42
+ "y": 100,
43
+ "wires": []
44
+ },
45
+ {
46
+ "id": "ccu-conn-example",
47
+ "type": "ccu-connection",
48
+ "name": "CCU",
49
+ "host": "ccu3-hostname-or-ip",
50
+ "regaEnabled": true,
51
+ "bcrfEnabled": true,
52
+ "iprfEnabled": true,
53
+ "virtEnabled": false,
54
+ "bcwiEnabled": false,
55
+ "cuxdEnabled": false,
56
+ "jackEnabled": false,
57
+ "regaPoll": true,
58
+ "regaInterval": "30",
59
+ "rpcPingTimeout": "60",
60
+ "rpcInitAddress": "",
61
+ "rpcServerHost": "",
62
+ "rpcBinPort": "2047",
63
+ "rpcXmlPort": "2048"
64
+ }
65
+ ]
@@ -0,0 +1,86 @@
1
+ [
2
+ {
3
+ "id": "inject-on",
4
+ "type": "inject",
5
+ "name": "ON",
6
+ "props": [
7
+ {
8
+ "p": "payload"
9
+ }
10
+ ],
11
+ "payload": "true",
12
+ "payloadType": "bool",
13
+ "x": 130,
14
+ "y": 80,
15
+ "wires": [["value-set"]]
16
+ },
17
+ {
18
+ "id": "inject-off",
19
+ "type": "inject",
20
+ "name": "OFF",
21
+ "props": [
22
+ {
23
+ "p": "payload"
24
+ }
25
+ ],
26
+ "payload": "false",
27
+ "payloadType": "bool",
28
+ "x": 130,
29
+ "y": 140,
30
+ "wires": [["value-set"]]
31
+ },
32
+ {
33
+ "id": "value-set",
34
+ "type": "ccu-value",
35
+ "name": "Switch actuator",
36
+ "iface": "HmIP-RF",
37
+ "channel": "",
38
+ "datapoint": "STATE",
39
+ "mode": "",
40
+ "start": true,
41
+ "change": true,
42
+ "cache": false,
43
+ "queue": true,
44
+ "on": 0,
45
+ "onType": "undefined",
46
+ "ramp": 0,
47
+ "rampType": "undefined",
48
+ "working": false,
49
+ "ccuConfig": "ccu-conn-example",
50
+ "topic": "${CCU}/${Interface}/${channel}/${datapoint}",
51
+ "x": 340,
52
+ "y": 110,
53
+ "wires": [["debug-state"]]
54
+ },
55
+ {
56
+ "id": "debug-state",
57
+ "type": "debug",
58
+ "name": "state",
59
+ "active": true,
60
+ "tosidebar": true,
61
+ "complete": "payload",
62
+ "x": 550,
63
+ "y": 110,
64
+ "wires": []
65
+ },
66
+ {
67
+ "id": "ccu-conn-example",
68
+ "type": "ccu-connection",
69
+ "name": "CCU",
70
+ "host": "ccu3-hostname-or-ip",
71
+ "regaEnabled": true,
72
+ "bcrfEnabled": true,
73
+ "iprfEnabled": true,
74
+ "virtEnabled": false,
75
+ "bcwiEnabled": false,
76
+ "cuxdEnabled": false,
77
+ "jackEnabled": false,
78
+ "regaPoll": true,
79
+ "regaInterval": "30",
80
+ "rpcPingTimeout": "60",
81
+ "rpcInitAddress": "",
82
+ "rpcServerHost": "",
83
+ "rpcBinPort": "2047",
84
+ "rpcXmlPort": "2048"
85
+ }
86
+ ]