node-red-contrib-ccu 3.4.2 → 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.
- package/.prettierignore +10 -0
- package/.prettierrc +14 -0
- package/AGENTS.md +96 -0
- package/CHANGELOG.md +66 -0
- package/README.md +17 -21
- package/ROADMAP.md +402 -0
- package/eslint.config.js +45 -0
- package/examples/rpc-events.json +65 -0
- package/examples/switch-datapoint.json +86 -0
- package/examples/system-variable.json +60 -0
- package/nodes/ccu-alexa.html +12 -7
- package/nodes/ccu-alexa.js +33 -14
- package/nodes/ccu-connection.html +9 -1
- package/nodes/ccu-connection.js +588 -335
- package/nodes/ccu-display.html +11 -4
- package/nodes/ccu-display.js +26 -9
- package/nodes/ccu-get-value.html +13 -4
- package/nodes/ccu-get-value.js +2 -2
- package/nodes/ccu-mqtt.html +9 -10
- package/nodes/ccu-mqtt.js +55 -29
- package/nodes/ccu-program.html +1 -1
- package/nodes/ccu-program.js +9 -7
- package/nodes/ccu-rpc-event.html +12 -7
- package/nodes/ccu-rpc-event.js +4 -5
- package/nodes/ccu-rpc.html +12 -5
- package/nodes/ccu-rpc.js +8 -6
- package/nodes/ccu-script.html +1 -1
- package/nodes/ccu-script.js +4 -3
- package/nodes/ccu-set-value.html +11 -7
- package/nodes/ccu-set-value.js +40 -16
- package/nodes/ccu-signal.html +11 -5
- package/nodes/ccu-signal.js +34 -23
- package/nodes/ccu-switch.html +13 -5
- package/nodes/ccu-sysvar.html +1 -1
- package/nodes/ccu-sysvar.js +11 -7
- package/nodes/ccu-value.html +12 -7
- package/nodes/ccu-value.js +36 -13
- package/nodes/lib/base62.js +22 -0
- package/nodes/lib/discover.js +127 -0
- package/nodes/lib/nextport.js +30 -0
- package/nodes/lib/similarity.js +51 -0
- package/nodes/lib/status.js +1 -1
- package/package.json +105 -155
- package/roadmap-archive/README.md +20 -0
- package/roadmap-archive/phase-1.md +48 -0
- package/roadmap-archive/todo-history.md +39 -0
- package/TODO.md +0 -41
- package/ccu_rega_localhost.json +0 -1
- 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
|
package/eslint.config.js
ADDED
|
@@ -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
|
+
]
|