node-red-contrib-ccu 4.1.0 → 4.3.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 (51) hide show
  1. package/CHANGELOG.md +125 -0
  2. package/HANDOFF.md +67 -16
  3. package/README.md +42 -0
  4. package/ROADMAP.md +129 -47
  5. package/examples/home-assistant.json +127 -0
  6. package/nodes/ccu-alexa.html +3 -1
  7. package/nodes/ccu-connection.html +26 -0
  8. package/nodes/ccu-connection.js +124 -13
  9. package/nodes/ccu-display.js +29 -13
  10. package/nodes/ccu-get-value.html +3 -1
  11. package/nodes/ccu-homeassistant.html +334 -0
  12. package/nodes/ccu-homeassistant.js +272 -0
  13. package/nodes/ccu-mqtt.html +21 -4
  14. package/nodes/ccu-mqtt.js +188 -105
  15. package/nodes/ccu-rpc-event.html +6 -0
  16. package/nodes/ccu-rpc-event.js +31 -12
  17. package/nodes/ccu-set-value.html +38 -0
  18. package/nodes/ccu-set-value.js +59 -235
  19. package/nodes/ccu-signal.html +55 -1
  20. package/nodes/ccu-signal.js +52 -9
  21. package/nodes/ccu-switch.html +17 -4
  22. package/nodes/ccu-switch.js +28 -4
  23. package/nodes/ccu-sysvar.html +40 -1
  24. package/nodes/ccu-sysvar.js +78 -8
  25. package/nodes/ccu-value.html +27 -1
  26. package/nodes/ccu-value.js +69 -19
  27. package/nodes/lib/cast.js +59 -14
  28. package/nodes/lib/channelfilter.js +136 -0
  29. package/nodes/lib/dynconfig.js +81 -0
  30. package/nodes/lib/hadiscovery.js +846 -0
  31. package/nodes/lib/haroles.js +193 -0
  32. package/nodes/lib/localccu.js +81 -0
  33. package/nodes/lib/message.js +6 -2
  34. package/nodes/lib/valuestatus.js +145 -0
  35. package/nodes/locales/de/ccu-display.html +17 -0
  36. package/nodes/locales/de/ccu-rpc-event.json +1 -0
  37. package/nodes/locales/de/ccu-sysvar.json +3 -2
  38. package/nodes/locales/de/ccu-value.json +2 -1
  39. package/nodes/locales/en-US/ccu-display.html +17 -0
  40. package/nodes/locales/en-US/ccu-rpc-event.json +3 -2
  41. package/nodes/locales/en-US/ccu-switch.html +12 -0
  42. package/nodes/locales/en-US/ccu-sysvar.json +3 -2
  43. package/nodes/locales/en-US/ccu-value.json +2 -1
  44. package/package.json +2 -1
  45. package/patch-certainonly.py +51 -0
  46. package/roadmap-archive/B-16.md +31 -0
  47. package/roadmap-archive/B-2.md +69 -0
  48. package/roadmap-archive/B-3.md +57 -0
  49. package/roadmap-archive/B-4.md +44 -0
  50. package/roadmap-archive/B-5.md +57 -0
  51. package/roadmap-archive/README.md +11 -0
package/ROADMAP.md CHANGED
@@ -25,9 +25,17 @@ Decisions (D-n) stay here as the record of why things are the way they
25
25
  are; answered open questions are rewritten in place
26
26
  (`**answered <date>** — …`).
27
27
 
28
- Status 2026-09-02: **4.0.0 is released** (npm latest, OIDC provenance,
29
- GitHub release). Phases 1 and 2 are done and archived. Next: Phase 3
30
- (refactor & tests) and the Phase 4 backlog (B-1…B-16); work continues on
28
+ Status 2026-09-04: **4.0.0 (2026-09-02) and 4.1.0 (2026-09-04) are
29
+ released** (npm latest, OIDC provenance, GitHub releases); 4.1.0 carries
30
+ the regenerated device descriptions and the LEVEL_2 fix; **4.2.0
31
+ (2026-09-04) = B-16**, the Home Assistant discovery node, lab-verified and
32
+ archived. B-2 moved to 4.3.0. The issue tracker was triaged a second time
33
+ on 2026-09-04 (§12): 36 issues remain open, every one of them annotated
34
+ with its roadmap item, and eight newly diagnosed defects were added to
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. Phases 1 and 2 are done and archived.
37
+ Next: Phase 3 (refactor & tests) and the rest of the Phase 4 backlog;
38
+ work continues on
31
39
  master with CI (Node 22/24 × Node-RED 4/5) as the gate. Research basis:
32
40
  the GitHub tracker/PRs/forks, homematic-forum.de, Node-RED release notes and
33
41
  scorecard criteria, and the hm2mqtt.js 3.0 rewrite (same author), which
@@ -189,24 +197,24 @@ to 4.3.0**. B-3/B-5 ride along when ready; B-12/B-13 later. The four
189
197
  needs-info issues (#111, #145, #146, #151) are closed as
190
198
  unreproducible if the reporters have not responded by ~2026-12.
191
199
 
192
- | ID | Item | Source |
193
- | ---- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------- |
194
- | 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 |
195
- | 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), plus [#148](https://github.com/rdmtc/node-red-contrib-ccu/issues/148) (SOUNDFILE_LIST via msg), [#158](https://github.com/rdmtc/node-red-contrib-ccu/issues/158) (subflow env config) and [#133](https://github.com/rdmtc/node-red-contrib-ccu/issues/133) — the latter confirmed still broken in 4.0.0: `setValues()` writes msg values into `config` permanently, so the first message's filters stick. Design properly rather than merging PR #173's auto-subscribe | tracker |
196
- | B-3 | Fix the ccu-mqtt node bugs verified in hm2mqtt ROADMAP §1.3 (see §8.2); also [#115](https://github.com/rdmtc/node-red-contrib-ccu/issues/115) get/update method (fresh user interest Apr 2026), [#22](https://github.com/rdmtc/node-red-contrib-ccu/issues/22) missing RPC-topic GUI, [#167](https://github.com/rdmtc/node-red-contrib-ccu/issues/167) stale rooms/functions | hm2mqtt |
197
- | 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 |
198
- | 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), [#52](https://github.com/rdmtc/node-red-contrib-ccu/issues/52) last-event status, [#124](https://github.com/rdmtc/node-red-contrib-ccu/issues/124) re-read descriptions on poll, [#166](https://github.com/rdmtc/node-red-contrib-ccu/issues/166) immediate sysvar echo, [#96](https://github.com/rdmtc/node-red-contrib-ccu/issues/96) uncertain-filter option) | tracker |
199
- | 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 |
200
- | B-7 | Triage the remaining ~60 open issues (snapshot in §12) against phases; close what 4.0 fixes | tracker |
201
- | B-8 | Global object: expose CCU metadata/values via a global context object (old todo item) | old TODO |
202
- | B-9 | Value node: datapoint autocomplete / multiselect (rpc and rpc-event already have it) | old TODO |
203
- | 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 |
204
- | 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 |
205
- | 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 |
206
- | 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 |
207
- | 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 |
208
- | 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 |
209
- | B-16 | **New node `ccu-homeassistant`: Home Assistant MQTT auto-discovery for a checkbox-selected set of devices** (decided 2026-09-04: a dedicated node, not an option on ccu-mqtt). It is a companion to an existing ccu-mqtt node, not a replacement: its config references one ccu-mqtt node of the flow (select populated via `RED.nodes.eachNode`, type `ccu-mqtt`, same ccu-connection) and **reuses that node's configured topics** — `topicOutputEvent` as HA state topics, `topicInputSetValue` as command topics, `topicOutputSysvar` for sysvars later — plus its payload format (`payloadOutput` mqsh-basic/extended/plain → matching `value_template`, e.g. `{{ value_json.val }}`). State and commands keep flowing through ccu-mqtt; the new node only emits the retained discovery configs `{topic, payload, retain: true}` for the same downstream mqtt-out node (no broker connection of its own), republishes them on deploy/reconnect, and publishes empty retained configs for devices that were unchecked (removal from HA). **Device selection like RedMatic-HomeKit's `redmatic-homekit-homematic-devices` node**: the config dialog loads all devices of the connection from the `/ccu` admin endpoint into a table (checkbox · name · address · type, "enable all"/"disable all" buttons, filter box, optionally expandable per-channel rows), stored as a `devices` object keyed by address — but **opt-in**: nothing is checked, hence nothing published, until the user ticks a device. Mapping modeled on hm2mqtt.js [`lib/hadiscovery.js`](https://github.com/hobbyquaker/hm2mqtt.js/blob/master/lib/hadiscovery.js) (README section "Home Assistant"): one HA device per Homematic device, device-based discovery payloads `homeassistant/device/<id>/config` (HA ≥ 2024.11; prefix configurable), entities derived from the paramset descriptions' `CONTROL` hints — switch (SWITCH.STATE, HmIP virtual receivers), light (dimmers), cover (blind position/tilt/direction), climate (HM/HmIP thermostats, modes/presets), binary_sensor (contact/motion/presence/smoke/water), event (key press short/long), lock (KEYMATIC), sensor (energy, weather, maintenance) — port hm2mqtt's mapping table rather than re-deriving it. **Constraint found 2026-09-04 (corrected the same day):** only 290 of the 647 VALUES entries in the shipped `paramsets.json` carry `CONTROL` hints (the older contributed user dumps were stripped of them), and the persisted runtime cache of existing installs inherits that — so a pure CONTROL-based mapping would silently skip roughly half the device types. Key the mapping on the channel `TYPE` from the device metadata (always present) and use CONTROL only as a refinement where the cache has it (live fetches and the B-1 regen bring CONTROL in; the fetch tool stores the full response). B-3 is not a prerequisite (HA commands use the setValue path, which casts in the connection), but its trivial fixes ride along. Builds on Phase 3's extracted `lib/topic.js` so the HA node computes exactly ccu-mqtt's topics. **Runs on branch `b-16-homeassistant`, target 4.2.0** (decided 2026-09-04; 4.1.0 stays the small data release). Known gaps upstream too: RGBW lights, sirens, garage doors, sysvars/programs as entities. | user request |
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
+ | 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
+ | 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
+ | 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
+ | 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 |
208
+ | 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 |
210
218
 
211
219
  ## 8. Bug inventory (diagnosed, not yet fixed)
212
220
 
@@ -250,14 +258,16 @@ caught (the devDep pin to `^1.1.2` is why it never was).
250
258
 
251
259
  ### 8.2 Verified in the hm2mqtt 3.0 rewrite (free, confirmed findings)
252
260
 
253
- - `nodes/ccu-mqtt.js`: the writeable check `!(OPERATIONS) && 2` is always
254
- false; `putParamset` casts with `description[filter.param]` which is
255
- `undefined`, so values pass uncast.
256
- - Empty-name topic bug: devices without a rega name produce
257
- `hm/status//STATE`-style topics.
258
- - `datapointEnum`/`valueEnum` in outgoing messages read
261
+ **All three fixed in 4.3.0 (B-3) / 4.2.0.**
262
+
263
+ - ✅ `nodes/ccu-mqtt.js`: the writeable check `!(OPERATIONS) && 2` is
264
+ always false; `putParamset` casts with `description[filter.param]`
265
+ which is `undefined`, so values pass uncast. — 4.3.0
266
+ - ✅ Empty-name topic bug: devices without a rega name produce
267
+ `hm/status//STATE`-style topics. — 4.2.0
268
+ - ✅ `datapointEnum`/`valueEnum` in outgoing messages read
259
269
  `description.ENUM`, which the interface processes never send — both
260
- have always been `undefined`.
270
+ have always been `undefined`. The names are in `VALUE_LIST`. — 4.3.0
261
271
 
262
272
  ### 8.3 Misc
263
273
 
@@ -265,6 +275,57 @@ caught (the devDep pin to `^1.1.2` is why it never was).
265
275
  and loose `!= undefined` — fix when taking the guard.
266
276
  - Editor HTML ships `console.log` debug leftovers.
267
277
 
278
+ Found in the 2026-09-04 issue triage (all verified against 4.2.0):
279
+
280
+ - ✅ **RSSI conversion is unguarded** (#183, fixed 4.3.0): `getRegaValues()` does
281
+ `dp.value -= 256` for `RSSI_DEVICE`/`RSSI_PEER` unconditionally, so a
282
+ value that is already signed (or `0` for "never received") becomes
283
+ `-318` / `-256`. hm2mqtt's `values.js` has the guard this one lacks:
284
+ only subtract when `typeof value === 'number' && value > 127`. The
285
+ XML-RPC event path needs no conversion — ReGa only.
286
+ - ✅ **Immediate sysvar re-poll is dropped under concurrency** (#166, fixed 4.3.0):
287
+ `setVariable()` calls `regaPoll()` only `if (!this.regaPollPending)`,
288
+ and `regaPoll()` itself no-ops (`rega poll already pending`) while one
289
+ is in flight. Writing several variables at once therefore leaves all
290
+ but the first invisible until the next scheduled poll (30 s default).
291
+ Fix: trailing-edge debounce — set a flag and poll once more when the
292
+ running poll finishes. → B-5.
293
+ - ✅ **`ccu-switch` rule values have no `bool` type** (#51, fixed 4.3.0): the typedInput
294
+ offers `msg/flow/global/str/num/jsonata/env/prev` only, so `true` is
295
+ stored as a string and `true == "true"` is false — users are pushed
296
+ into 0/1. `RED.util.evaluateNodeProperty` already handles `bool`, so
297
+ the fix is the editor list. → §6.4.
298
+ - ✅ **Editor clears `${ENV}` placeholders** (#158, fixed 4.3.0): `autocompleteChannel()`
299
+ blanks Channel and Datapoint whenever the value is not a known channel
300
+ address, which wipes subflow-parameter placeholders on every dialog
301
+ open. Skip the clearing for `${...}` values. → §6.4.
302
+ - **Stale device metadata is never re-read** (#181, related #146; still
303
+ open — 4.3.0's refresh covers names/rooms/functions, not the device
304
+ table): the
305
+ connection answers the CCU's `listDevices` from its persisted cache
306
+ (`ccu_<host>.json`), so the daemon only sends `newDevices` for entries
307
+ the cache did not report. A channel that changes TYPE in place (HMW
308
+ I/O direction change) keeps its old datapoints forever. Workaround is
309
+ deleting the cache file; the fix is a "re-read device data" action on
310
+ the connection node. → B-5 or B-11.
311
+ - **Internal system variables are invisible** (#184, upstream): the
312
+ `variables.rega` script in `homematic-rega` iterates
313
+ `dom.GetObject(ID_SYSTEM_VARIABLES).EnumUsedIDs()`, which skips every
314
+ variable with `Internal() == true` — including the HmIP device-bound
315
+ ones (`svHmIPRainCounterToday_*`). Measured on a CCU3 3.89.8:
316
+ `EnumUsedIDs()` → 2, `EnumIDs()` → 4, the two extra being IDs 40/41,
317
+ which the script hard-codes for exactly this reason. Fix belongs in
318
+ homematic-rega (`EnumIDs()`, drop the special case); open question
319
+ whether internal variables ship by default or behind an option.
320
+ - ✅ **`ccu-mqtt` matches an `rpc` command it cannot execute** (#22, fixed 4.3.0): the
321
+ topic matcher includes `topicInputRpc`, but the class has no `rpc()`
322
+ method, so the match is silently dropped; `topicOutputRpc` is never
323
+ read. → B-3.
324
+ - ✅ **ReGa metadata is read once** (#167, fixed 4.3.0): `getRegaData()` (channels,
325
+ rooms, functions, groups) runs only in the connection constructor; the
326
+ poll refreshes variables and programs only. Rooms/functions added in
327
+ the WebUI stay invisible until redeploy. → B-3.
328
+
268
329
  ## 9. What to take from forks and PRs
269
330
 
270
331
  - **PR [#162](https://github.com/rdmtc/node-red-contrib-ccu/pull/162)**
@@ -326,38 +387,48 @@ resolved/obsolete/wrong-repo), 4 got retest requests and stay open
326
387
  roadmap item below.** Wrong annotations found during triage were
327
388
  corrected in place (#178, #119, #148).
328
389
 
329
- - [#22](https://github.com/rdmtc/node-red-contrib-ccu/issues/22) MQTT Node: No GUI for node-input-topicInputRpc
390
+ **Second pass 2026-09-04 (B-7 continued)**, covering the issues the
391
+ first pass had left without a comment plus #180…#186, transferred here
392
+ from rdmtc/RedMatic on 2026-09-04. 5 closed (#124 fixed in v3.2.1 and
393
+ never closed; #186 fixed by the xmlrpc 2.0 bump; #182 fixed by B-14;
394
+ #185 duplicate of #80; #158 answered — subflow parameters work via
395
+ `${ENV}` substitution), the rest commented with their roadmap item.
396
+ Eight defects were newly diagnosed against 4.2.0 in the process and are
397
+ recorded in §8.3 (#183, #166, #51, #158, #181, #184, #22, #167); #133
398
+ was confirmed rather than merely "to be retested".
399
+
400
+ - [#22](https://github.com/rdmtc/node-red-contrib-ccu/issues/22) MQTT Node: No GUI for node-input-topicInputRpc → B-3 (handler missing, not just the GUI — §8.3) — ✅ fixed in 4.3.0
330
401
  - [#27](https://github.com/rdmtc/node-red-contrib-ccu/issues/27) Anpassungen an CCU Firmware >= 3.41 → B-12 (Auth/TLS halves still open)
331
- - [#39](https://github.com/rdmtc/node-red-contrib-ccu/issues/39) topic handling vereinheitlichen
332
- - [#44](https://github.com/rdmtc/node-red-contrib-ccu/issues/44) Configuration Option to deactivate Ping Checks → B-5
333
- - [#51](https://github.com/rdmtc/node-red-contrib-ccu/issues/51) switch node casts boolean payloads to numbers
334
- - [#52](https://github.com/rdmtc/node-red-contrib-ccu/issues/52) RPC Event: Zeitpunkt des letzten Events und ggf. letztes Topic
335
- - [#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
336
- - [#56](https://github.com/rdmtc/node-red-contrib-ccu/issues/56) make property for sysvar-node configurable → B-2/B-5
402
+ - [#39](https://github.com/rdmtc/node-red-contrib-ccu/issues/39) topic handling vereinheitlichen → §6 (topic.js extracted; D-15 blocks changing the defaults)
403
+ - [#44](https://github.com/rdmtc/node-red-contrib-ccu/issues/44) Configuration Option to deactivate Ping Checks → B-5 — ✅ fixed in 4.3.0
404
+ - [#51](https://github.com/rdmtc/node-red-contrib-ccu/issues/51) switch node casts boolean payloads to numbers → §6.4 (no `bool` typedInput type — §8.3) — ✅ fixed in 4.3.0
405
+ - [#52](https://github.com/rdmtc/node-red-contrib-ccu/issues/52) RPC Event: Zeitpunkt des letzten Events und ggf. letztes Topic → B-5 — ✅ fixed in 4.3.0
406
+ - [#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 — ✅ fixed in 4.3.0
407
+ - [#56](https://github.com/rdmtc/node-red-contrib-ccu/issues/56) make property for sysvar-node configurable → B-2/B-5 — ✅ fixed in 4.3.0
337
408
  - [#58](https://github.com/rdmtc/node-red-contrib-ccu/issues/58) Hilfe Texte → §6.5
338
- - [#71](https://github.com/rdmtc/node-red-contrib-ccu/issues/71) Set value node: allow to set filter properties with incoming msg → B-2
339
- - [#80](https://github.com/rdmtc/node-red-contrib-ccu/issues/80) Signal Node: allow to overwrite settings via msg/context/env → B-2
409
+ - [#71](https://github.com/rdmtc/node-red-contrib-ccu/issues/71) Set value node: allow to set filter properties with incoming msg → B-2 — ✅ fixed in 4.3.0
410
+ - [#80](https://github.com/rdmtc/node-red-contrib-ccu/issues/80) Signal Node: allow to overwrite settings via msg/context/env → B-2 — ✅ fixed in 4.3.0
340
411
  - [#81](https://github.com/rdmtc/node-red-contrib-ccu/issues/81) increase test coverage → §6.2
341
412
  - [#87](https://github.com/rdmtc/node-red-contrib-ccu/issues/87) Changelog → D-11 — ✅ closed 2026-09-02
342
- - [#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
343
- - [#103](https://github.com/rdmtc/node-red-contrib-ccu/issues/103) switch node params via msg → B-2
413
+ - [#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 → B-5 (flag done, filter option open) — ✅ fixed in 4.3.0
414
+ - [#103](https://github.com/rdmtc/node-red-contrib-ccu/issues/103) switch node params via msg → B-2 — ✅ fixed in 4.3.0
344
415
  - [#105](https://github.com/rdmtc/node-red-contrib-ccu/issues/105) ccu-value Node: Weiterbenutzung des Input-msg-Objects, statt Neuinstaziierung — ✅ closed 2026-09-02
345
416
  - [#106](https://github.com/rdmtc/node-red-contrib-ccu/issues/106) Statusänderung eines Kanals wird nicht übermittelt — ✅ closed 2026-09-02
346
417
  - [#110](https://github.com/rdmtc/node-red-contrib-ccu/issues/110) Node-RED: v1.0.4 & CCU3-3.51.6 / Error: getaddrinfo ENOTFOUND — ✅ closed 2026-09-02
347
418
  - [#111](https://github.com/rdmtc/node-red-contrib-ccu/issues/111) ON_TIME wird nicht initial befüllt
348
419
  - [#112](https://github.com/rdmtc/node-red-contrib-ccu/issues/112) Nur drei Heizungsprofile verfügbar (# 4-6 stehen nicht zur Auswahl) → B-1 (stale MAX=3 in paramset)
349
420
  - [#114](https://github.com/rdmtc/node-red-contrib-ccu/issues/114) Possible to use "localfilesystem" for Context Store — ✅ closed 2026-09-02
350
- - [#115](https://github.com/rdmtc/node-red-contrib-ccu/issues/115) add get/update method to mqtt node
421
+ - [#115](https://github.com/rdmtc/node-red-contrib-ccu/issues/115) add get/update method to mqtt node → B-3 — ✅ fixed in 4.3.0
351
422
  - [#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 — ✅ closed 2026-09-02
352
423
  - [#117](https://github.com/rdmtc/node-red-contrib-ccu/issues/117) Einbinden HmIP-FCI6 → B-1
353
424
  - [#119](https://github.com/rdmtc/node-red-contrib-ccu/issues/119) HmIP-BROLL wird nicht gefunden (resolved: port misconfiguration) — ✅ closed 2026-09-02
354
425
  - [#121](https://github.com/rdmtc/node-red-contrib-ccu/issues/121) rpc-event STICKY_UNREACH — ✅ closed 2026-09-02
355
- - [#124](https://github.com/rdmtc/node-red-contrib-ccu/issues/124) poll variable description
426
+ - [#124](https://github.com/rdmtc/node-red-contrib-ccu/issues/124) poll variable description — ✅ closed 2026-09-04 (fixed 2020-08-03 in 453f2b2, v3.2.1; never closed)
356
427
  - [#126](https://github.com/rdmtc/node-red-contrib-ccu/issues/126) Context store property name dot replacement — ✅ closed 2026-09-02
357
428
  - [#128](https://github.com/rdmtc/node-red-contrib-ccu/issues/128) CCU Switch node - wrong resize in settings dialog (fix in v3.4.2?) — ✅ closed 2026-09-02
358
429
  - [#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?) — ✅ closed 2026-09-02
359
430
  - [#132](https://github.com/rdmtc/node-red-contrib-ccu/issues/132) Ports — ✅ closed 2026-09-02
360
- - [#133](https://github.com/rdmtc/node-red-contrib-ccu/issues/133) ccu-set-value "remembers" previous events
431
+ - [#133](https://github.com/rdmtc/node-red-contrib-ccu/issues/133) ccu-set-value "remembers" previous events → B-2 (confirmed on 4.2.0: `setValues()` mutates `this.config`, so only the first msg configures the node) — ✅ fixed in 4.3.0
361
432
  - [#136](https://github.com/rdmtc/node-red-contrib-ccu/issues/136) HmIP-FBL → B-1
362
433
  - [#138](https://github.com/rdmtc/node-red-contrib-ccu/issues/138) Failed at the grpc@1.19.0 install script — ✅ closed 2026-09-02
363
434
  - [#139](https://github.com/rdmtc/node-red-contrib-ccu/issues/139) CCU Node error message in the log (IoBroker) — ✅ closed 2026-09-02
@@ -366,23 +437,34 @@ corrected in place (#178, #119, #148).
366
437
  - [#144](https://github.com/rdmtc/node-red-contrib-ccu/issues/144) Signal Node: Integration of HmIP-WRCD → B-1
367
438
  - [#145](https://github.com/rdmtc/node-red-contrib-ccu/issues/145) CCU value Node CUX16 no Output
368
439
  - [#146](https://github.com/rdmtc/node-red-contrib-ccu/issues/146) CCU different / changing Nodes with "unknown Datapoint"
369
- - [#148](https://github.com/rdmtc/node-red-contrib-ccu/issues/148) Signal Node: HmIP-MP3P Dynamisches Setzen von SOUNDFILE_LIST → B-2
440
+ - [#148](https://github.com/rdmtc/node-red-contrib-ccu/issues/148) Signal Node: HmIP-MP3P Dynamisches Setzen von SOUNDFILE_LIST → B-2 — ✅ fixed in 4.3.0
370
441
  - [#149](https://github.com/rdmtc/node-red-contrib-ccu/issues/149) XML-RPC fault mit falscher value? — ✅ closed 2026-09-02
371
442
  - [#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
372
443
  - [#154](https://github.com/rdmtc/node-red-contrib-ccu/issues/154) HmIP-BBL datapoint LEVEL_2 cannot be set → B-1
373
444
  - [#155](https://github.com/rdmtc/node-red-contrib-ccu/issues/155) Error: Local address XXX not available. Using YYY instead. — ✅ closed 2026-09-02
374
445
  - [#156](https://github.com/rdmtc/node-red-contrib-ccu/issues/156) Set PARTY_TIME_START and PARTY_TIME_END not working → B-13
375
- - [#158](https://github.com/rdmtc/node-red-contrib-ccu/issues/158) using in SubFlows
446
+ - [#158](https://github.com/rdmtc/node-red-contrib-ccu/issues/158) using in SubFlows — ✅ closed 2026-09-04 (works via `${ENV}`; editor clears the placeholder — §8.3)
376
447
  - [#159](https://github.com/rdmtc/node-red-contrib-ccu/issues/159) Fehlender CuxD datapoint "DIR" → B-1
377
448
  - [#160](https://github.com/rdmtc/node-red-contrib-ccu/issues/160) Node-RED Absturz bei Verbindungsverlust zur CCU → D-5 — ✅ closed 2026-09-02
378
449
  - [#161](https://github.com/rdmtc/node-red-contrib-ccu/issues/161) Feature Request: Node "Party Mode" → B-13
379
450
  - [#164](https://github.com/rdmtc/node-red-contrib-ccu/issues/164) Support CCU-Jack → D-14
380
- - [#166](https://github.com/rdmtc/node-red-contrib-ccu/issues/166) Mehrere Variablen sofort schreiben und triggern
381
- - [#167](https://github.com/rdmtc/node-red-contrib-ccu/issues/167) updated function values in ccu and functions in ccu-mqtt node
451
+ - [#166](https://github.com/rdmtc/node-red-contrib-ccu/issues/166) Mehrere Variablen sofort schreiben und triggern → B-5 (regaPoll drops the re-poll while one is pending — §8.3) — ✅ fixed in 4.3.0
452
+ - [#167](https://github.com/rdmtc/node-red-contrib-ccu/issues/167) updated function values in ccu and functions in ccu-mqtt node → B-3 (getRegaData runs once, in the constructor — §8.3) — ✅ fixed in 4.3.0
382
453
  - [#169](https://github.com/rdmtc/node-red-contrib-ccu/issues/169) "Error: XML-RPC fault: Generic error (UNREACH)" — ✅ closed 2026-09-02
383
454
  - [#170](https://github.com/rdmtc/node-red-contrib-ccu/issues/170) Auslesen System-Variable — ✅ closed 2026-09-02
384
- - [#172](https://github.com/rdmtc/node-red-contrib-ccu/issues/172) Configure CCU-Value through message → B-2
455
+ - [#172](https://github.com/rdmtc/node-red-contrib-ccu/issues/172) Configure CCU-Value through message → B-2 — ✅ fixed in 4.3.0
385
456
  - [#175](https://github.com/rdmtc/node-red-contrib-ccu/issues/175) HmIP-DRBLI4 Level_2 not working → B-1
386
457
  - [#176](https://github.com/rdmtc/node-red-contrib-ccu/issues/176) Deprecated dependencies → D-4/D-6/D-7 — ✅ closed 2026-09-02
387
458
  - [#177](https://github.com/rdmtc/node-red-contrib-ccu/issues/177) HmIP-BSL 2.0.2 & Signal Node: Color Behaviour missing → B-1
388
459
  - [#178](https://github.com/rdmtc/node-red-contrib-ccu/issues/178) HmIP-SWDO visible in device list but HmIP-SWDO-PL-2 not (redmatic-homekit issue, wrong repo) — ✅ closed 2026-09-02
460
+
461
+ Transferred here from rdmtc/RedMatic on 2026-09-04 (all predate the
462
+ snapshot above):
463
+
464
+ - [#180](https://github.com/rdmtc/node-red-contrib-ccu/issues/180) ccu-get-value Node liefert immer nur "value" — runtime honours the property on 4.2.0, retest requested
465
+ - [#181](https://github.com/rdmtc/node-red-contrib-ccu/issues/181) Redmatic Datenpunkte HMW-IO-12-FM → stale `ccu_<host>.json` device cache (§8.3), workaround given, retest requested
466
+ - [#182](https://github.com/rdmtc/node-red-contrib-ccu/issues/182) HmIPW-DRBL4 combatibility — ✅ closed 2026-09-04 (fixed by B-14 in 4.1.0)
467
+ - [#183](https://github.com/rdmtc/node-red-contrib-ccu/issues/183) RSSI hat falschen Wert / TypeCast → fixed for the ReGa path in v3.4.2; conversion still unguarded (§8.3) — ✅ fixed in 4.3.0
468
+ - [#184](https://github.com/rdmtc/node-red-contrib-ccu/issues/184) Systemvariablen (versteckt) nicht auswählbar → upstream homematic-rega `EnumUsedIDs()` (§8.3)
469
+ - [#185](https://github.com/rdmtc/node-red-contrib-ccu/issues/185) Parameter der Node Display für HMIP-BSL als Eingang — ✅ closed 2026-09-04 (duplicate of #80 → B-2)
470
+ - [#186](https://github.com/rdmtc/node-red-contrib-ccu/issues/186) RedMatic startet nicht, wenn HM-LC-Sw2-FM Geräte vorhanden — ✅ closed 2026-09-04 (xmlbuilder `assertLegalChar` gone with homematic-xmlrpc 2.0, D-4)
@@ -0,0 +1,127 @@
1
+ [
2
+ {
3
+ "id": "ccu-mqtt-example",
4
+ "type": "ccu-mqtt",
5
+ "name": "ccu ⇄ mqtt",
6
+ "ccuConfig": "ccu-conn-example",
7
+ "cache": true,
8
+ "topicOutputEvent": "hm/status/${channelName}/${datapoint}",
9
+ "topicInputSetValue": "hm/set/${channelNameOrAddress}/${datapoint}",
10
+ "topicOutputSysvar": "hm/status/${name}",
11
+ "topicInputSysvar": "hm/set/${name}",
12
+ "topicInputPutParam": "hm/paramset/${channelNameOrAddress}/${paramset}/${param}",
13
+ "topicInputPutParamset": "hm/paramset/${channelNameOrAddress}/${paramset}",
14
+ "topicInputRpc": "hm/rpc/${iface}/${method}/${command}/${callid}",
15
+ "topicOutputRpc": "hm/response/${callid}",
16
+ "topicCounters": "hm/status/counter/${iface}/${rxtx}",
17
+ "payloadOutput": "mqsh-extended",
18
+ "x": 380,
19
+ "y": 100,
20
+ "wires": [["mqtt-out-example"]]
21
+ },
22
+ {
23
+ "id": "mqtt-in-example",
24
+ "type": "mqtt in",
25
+ "name": "hm/set/#",
26
+ "topic": "hm/set/#",
27
+ "qos": "0",
28
+ "datatype": "auto-detect",
29
+ "broker": "mqtt-broker-example",
30
+ "nl": false,
31
+ "rap": true,
32
+ "rh": 0,
33
+ "inputs": 0,
34
+ "x": 160,
35
+ "y": 100,
36
+ "wires": [["ccu-mqtt-example"]]
37
+ },
38
+ {
39
+ "id": "mqtt-out-example",
40
+ "type": "mqtt out",
41
+ "name": "",
42
+ "topic": "",
43
+ "qos": "",
44
+ "retain": "",
45
+ "respTopic": "",
46
+ "contentType": "",
47
+ "userProps": "",
48
+ "correl": "",
49
+ "expiry": "",
50
+ "broker": "mqtt-broker-example",
51
+ "x": 640,
52
+ "y": 140,
53
+ "wires": []
54
+ },
55
+ {
56
+ "id": "ccu-ha-example",
57
+ "type": "ccu-homeassistant",
58
+ "name": "Home Assistant discovery",
59
+ "ccuConfig": "ccu-conn-example",
60
+ "mqttNode": "ccu-mqtt-example",
61
+ "prefix": "homeassistant",
62
+ "generic": true,
63
+ "devices": {},
64
+ "x": 400,
65
+ "y": 180,
66
+ "wires": [["mqtt-out-example"]]
67
+ },
68
+ {
69
+ "id": "inject-republish",
70
+ "type": "inject",
71
+ "name": "republish discovery",
72
+ "props": [{"p": "payload"}],
73
+ "repeat": "",
74
+ "crontab": "",
75
+ "once": false,
76
+ "onceDelay": 0.1,
77
+ "topic": "",
78
+ "payload": "",
79
+ "payloadType": "date",
80
+ "x": 170,
81
+ "y": 180,
82
+ "wires": [["ccu-ha-example"]]
83
+ },
84
+ {
85
+ "id": "comment-ha",
86
+ "type": "comment",
87
+ "name": "Tick the devices to publish in the Home Assistant node's config dialog, then deploy",
88
+ "info": "",
89
+ "x": 330,
90
+ "y": 40,
91
+ "wires": []
92
+ },
93
+ {
94
+ "id": "mqtt-broker-example",
95
+ "type": "mqtt-broker",
96
+ "name": "Broker",
97
+ "broker": "mqtt-broker-hostname-or-ip",
98
+ "port": "1883",
99
+ "clientid": "",
100
+ "autoConnect": true,
101
+ "usetls": false,
102
+ "protocolVersion": "4",
103
+ "keepalive": "60",
104
+ "cleansession": true,
105
+ "autoUnsubscribe": true
106
+ },
107
+ {
108
+ "id": "ccu-conn-example",
109
+ "type": "ccu-connection",
110
+ "name": "CCU",
111
+ "host": "ccu3-hostname-or-ip",
112
+ "regaEnabled": true,
113
+ "bcrfEnabled": true,
114
+ "iprfEnabled": true,
115
+ "virtEnabled": false,
116
+ "bcwiEnabled": false,
117
+ "cuxdEnabled": false,
118
+ "jackEnabled": false,
119
+ "regaPoll": true,
120
+ "regaInterval": "30",
121
+ "rpcPingTimeout": "60",
122
+ "rpcInitAddress": "",
123
+ "rpcServerHost": "",
124
+ "rpcBinPort": "2047",
125
+ "rpcXmlPort": "2048"
126
+ }
127
+ ]
@@ -122,7 +122,9 @@
122
122
  arr.sort((a, b) => a.localeCompare(b));
123
123
  $nodeInputChannel.autocomplete('option', 'source', arr);
124
124
 
125
- if (!data[$nodeInputChannel.val().split(' ')[0]]) {
125
+ // ${ENV} placeholders are substituted by Node-RED before the node is
126
+ // constructed (subflow parameters, #158) - do not clear them
127
+ if (!/^\$\{[^}]+\}$/.test($nodeInputChannel.val()) && !data[$nodeInputChannel.val().split(' ')[0]]) {
126
128
  $nodeInputChannel.val('');
127
129
  }
128
130
  }