node-red-contrib-ccu 4.6.2 → 4.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -5,6 +5,79 @@ Notable changes to node-red-contrib-ccu. Format follows
5
5
  user-visible symptom and the cause, not the commit list (the release notes
6
6
  append commits automatically).
7
7
 
8
+ ## 4.7.1 (2026-10-28)
9
+
10
+ ### Fixed
11
+
12
+ - **On openccu-lite every write of a decimal value failed** - a dimmer's or a
13
+ blind's `LEVEL`, a thermostat's set point, an `ON_TIME`, through _value_,
14
+ _set value_, _rpc_ and the other nodes alike. A `FLOAT` datapoint is sent as
15
+ a typed double, which over XML-RPC is homematic-xmlrpc's
16
+ `{explicitDouble: n}`; the lite-rpc connection of 4.7.0 passed that object
17
+ on as it was, so the interface process got a struct where a number belongs
18
+ and refused it (`Failure` from rfd and hs485d,
19
+ `-5 Invalid parameter or value` from hmipserver). The lite-rpc connection
20
+ now sends lite-rpc's own typed double, `{double: n}` (or the plain number
21
+ on a system that does not announce it) - in `setValue`, in a paramset of
22
+ `putParamset` and in a multicall. The direct connection to a CCU is unchanged. Until this version
23
+ the workaround was _CCU_ in the connection node's _openccu-lite interfaces_.
24
+ - **Errors of the lite-rpc connection said less than they should:** a fault
25
+ of the interface process was logged as `fault -1 undefined` and reached the
26
+ flow as `OccuLiteError: Failure`, and a token without the needed rights did
27
+ not say which right it lacks. The fault now carries its code and text, and a
28
+ refused call names the missing scope.
29
+
30
+ ## 4.7.0 (2026-10-27)
31
+
32
+ ### Added
33
+
34
+ - **On openccu-lite the interfaces are reached through the system's lite-rpc**
35
+ (with [occulite-client](https://www.npmjs.com/package/occulite-client))
36
+ instead of XML-RPC/BIN-RPC clients and callback servers of this node's own -
37
+ the requests over the system's web port, the events from a stream the
38
+ connection opens, replayed after a break and re-read after a restart of the
39
+ system; one subscriber at the interface processes serves every program on
40
+ the system, and nothing registers with `init`. The credential is the
41
+ openccu-lite token of the connection node, or on the system itself
42
+ RedMatic's own token, which the system mints for it. A new setting
43
+ _openccu-lite interfaces_ in the connection node chooses: _auto_ (the
44
+ default; the CCU way on a CCU), _openccu-lite_ (lite-rpc only) or _CCU_ (the
45
+ direct connection with callbacks, on openccu-lite too). An existing
46
+ connection is moved to lite-rpc once, at its first start on openccu-lite,
47
+ and the log says so; a choice made in the node is never changed by a later
48
+ version. The value cache is filled from the system's state store at deploy,
49
+ so nodes with _cache_ get a value on openccu-lite as well. CUxD and CCU-Jack
50
+ keep their own connections. On a CCU, RaspberryMatic and OpenCCU nothing
51
+ changes.
52
+
53
+ ### Changed
54
+
55
+ - **An interface process that is not up yet is tried every 3 s for the first
56
+ 90 s, then every 15 s.** The 1, 2, 4, 8 s steps and the 15 s after them
57
+ missed hmipserver's ready moment on a booting system by up to 15 s (measured
58
+ on an openccu-lite Pi 4: hmipserver answers 50-55 s after the boot, the next
59
+ attempt came at 61 s). The same holds after a process went away. When one
60
+ interface appears, the others still waiting are tried at once, and the log
61
+ line that reports the connection says how long after the start (or after the
62
+ outage) it came. The metadata API's re-detection on openccu-lite follows the
63
+ same schedule.
64
+ - **The port of each interface can be set in the connection node**, beside its
65
+ checkbox: blank is the CCU's port for the transport as before (2001/42001 and
66
+ so on, the 3xxxx ports on the CCU itself), a number replaces it - for a CCU
67
+ behind port forwarding, or a simulator on another port.
68
+ - The test suite runs hm-simulator 1.4 on free ports, so it runs beside a CCU
69
+ or another suite, and drives the simulator's scenario API: devices paired
70
+ and removed while Node-RED runs, a ramp-time write, a service message, an
71
+ interface process that restarts and forgets its clients, TLS with basic
72
+ auth.
73
+ - **On openccu-lite the metadata stream reports as `Metadata`, not as
74
+ "Interface ReGaHSS".** The system has no ReGaHSS; the connection borrowed
75
+ that slot for the stream's state, so the log said "Interface ReGaHSS
76
+ connected" at every start and reconnect, right next to "this box has no
77
+ ReGaHSS". The log now says "Metadata stream connected", the nodes' status
78
+ counts the stream under that name, and the editors' interface lists do not
79
+ offer it.
80
+
8
81
  ## 4.6.2 (2026-10-23)
9
82
 
10
83
  ### Fixed
package/README.md CHANGED
@@ -36,8 +36,22 @@ BINRPC/XMLRPC works unchanged. Device, channel, room and function names come fro
36
36
  ReGaHSS; the connection node detects this at start (`GET /api/meta/v1/version`), nothing has to be configured, and
37
37
  `msg.channelName`, `msg.rooms`, `msg.functions` and the room/function filters keep their shape.
38
38
 
39
- - Node-RED **on the system** (RedMatic from its addon catalogue): the system's own read-only token is used, nothing to do.
40
- - Node-RED **elsewhere**: an API token of the system goes into the connection node's **openccu-lite token** field.
39
+ Since 4.7.0 the interface processes are reached through the system's **lite-rpc** as well, with
40
+ [occulite-client](https://www.npmjs.com/package/occulite-client): the requests over the system's web port, the events
41
+ from a stream the connection opens (replayed after a break, re-read after a restart of the system), one subscriber at
42
+ the processes for every program on the system, no callback server and no `init` of this node's own; the value cache is
43
+ filled from the system's state store at deploy. The connection node's **openccu-lite interfaces** setting chooses
44
+ _auto_ (the default: lite-rpc on openccu-lite, the CCU way on a CCU), _openccu-lite_ (lite-rpc only) or _CCU_ (the
45
+ direct connection with callbacks, on openccu-lite too); an existing connection is moved to lite-rpc once at its first
46
+ start on openccu-lite, the log says so, and a choice made in the node is never changed by a later version. CUxD and
47
+ CCU-Jack keep their own connections.
48
+
49
+ - Node-RED **on the system** (RedMatic from its addon catalogue): lite-rpc with RedMatic's own token, which the system
50
+ mints for it from RedMatic's manifest (RedMatic 9.13 or later); the names come with the system's read-only token.
51
+ Nothing to configure. An older RedMatic has no such token and connects the CCU way, the log says so.
52
+ - Node-RED **elsewhere**: an API token of the system goes into the connection node's **openccu-lite token** field -
53
+ for lite-rpc it needs the `rpc:*` scope of what the flow does (`rpc:read` for events and reads, `rpc:operate` for
54
+ `setValue`, `rpc:configure` for paramsets and links, `rpc:admin` for the rest; the rpc node may call anything).
41
55
  - **System variables, programs and HM-Script do not exist there.** The `ccu-sysvar`, `ccu-program`, `ccu-script` and
42
56
  `ccu-poll` nodes stay in the flows and answer every message with an error.
43
57
 
@@ -13,6 +13,12 @@
13
13
  cuxdEnabled: {value: false},
14
14
  jackEnabled: {value: false},
15
15
  jackPort: {value: 2121},
16
+ regaPort: {value: ''},
17
+ bcrfPort: {value: ''},
18
+ bcwiPort: {value: ''},
19
+ iprfPort: {value: ''},
20
+ virtPort: {value: ''},
21
+ cuxdPort: {value: ''},
16
22
 
17
23
  regaPoll: {value: true},
18
24
  regaInterval: {value: 30},
@@ -31,6 +37,7 @@
31
37
  username: {value: ''},
32
38
 
33
39
  metaPort: {value: ''},
40
+ connectionType: {value: 'auto'},
34
41
 
35
42
  queueTimeout: {value: 5000, required: true},
36
43
  queuePause: {value: 250, required: true},
@@ -223,12 +230,18 @@
223
230
  <div class="form-row">
224
231
  <label for="node-input-rfdEnabled"><i class="icon-tag"></i> Interfaces</label>
225
232
  <div style="width: 70%; display: inline-block; vertical-align: text-top;">
226
- <label class="ccu-checkbox"><input type="checkbox" id="node-config-input-regaEnabled"> ReGaHSS</label><br>
227
- <label class="ccu-checkbox"><input type="checkbox" id="node-config-input-bcrfEnabled"> BidCos-RF</label><br>
228
- <label class="ccu-checkbox"><input type="checkbox" id="node-config-input-bcwiEnabled"> BidCos-Wired</label><br>
229
- <label class="ccu-checkbox"><input type="checkbox" id="node-config-input-iprfEnabled"> HmIP-RF</label><br>
230
- <label class="ccu-checkbox"><input type="checkbox" id="node-config-input-virtEnabled"> VirtualDevices</label><br>
231
- <label class="ccu-checkbox"><input type="checkbox" id="node-config-input-cuxdEnabled"> CUxD</label><br>
233
+ <label class="ccu-checkbox"><input type="checkbox" id="node-config-input-regaEnabled"> ReGaHSS</label>
234
+ <input type="text" id="node-config-input-regaPort" class="ccu-port" style="width: 70px;" placeholder="8181"><br>
235
+ <label class="ccu-checkbox"><input type="checkbox" id="node-config-input-bcrfEnabled"> BidCos-RF</label>
236
+ <input type="text" id="node-config-input-bcrfPort" class="ccu-port" style="width: 70px;" placeholder="2001"><br>
237
+ <label class="ccu-checkbox"><input type="checkbox" id="node-config-input-bcwiEnabled"> BidCos-Wired</label>
238
+ <input type="text" id="node-config-input-bcwiPort" class="ccu-port" style="width: 70px;" placeholder="2000"><br>
239
+ <label class="ccu-checkbox"><input type="checkbox" id="node-config-input-iprfEnabled"> HmIP-RF</label>
240
+ <input type="text" id="node-config-input-iprfPort" class="ccu-port" style="width: 70px;" placeholder="2010"><br>
241
+ <label class="ccu-checkbox"><input type="checkbox" id="node-config-input-virtEnabled"> VirtualDevices</label>
242
+ <input type="text" id="node-config-input-virtPort" class="ccu-port" style="width: 70px;" placeholder="9292"><br>
243
+ <label class="ccu-checkbox"><input type="checkbox" id="node-config-input-cuxdEnabled"> CUxD</label>
244
+ <input type="text" id="node-config-input-cuxdPort" class="ccu-port" style="width: 70px;" placeholder="8701"><br>
232
245
  <label class="ccu-checkbox"><input type="checkbox" id="node-config-input-jackEnabled"> CCU-Jack</label>
233
246
  <input type="text" id="node-config-input-jackPort" style="width: 70px;" placeholder="2121">
234
247
  </div>
@@ -300,10 +313,18 @@
300
313
  <label for="node-config-input-password"><i class="icon-tag"></i> Password</label>
301
314
  <input type="password" id="node-config-input-password">
302
315
  </div>
316
+ <div class="form-row">
317
+ <label for="node-config-input-connectionType"><i class="icon-tag"></i> openccu-lite interfaces</label>
318
+ <select id="node-config-input-connectionType" style="width: 70%;">
319
+ <option value="auto">auto: through the system's lite-rpc on openccu-lite (the default), the CCU way elsewhere</option>
320
+ <option value="openccu-lite">openccu-lite: lite-rpc only</option>
321
+ <option value="ccu">CCU: directly, with callbacks (XML-RPC/BIN-RPC) - on openccu-lite too</option>
322
+ </select>
323
+ </div>
303
324
  <div class="form-row">
304
325
  <label for="node-config-input-metaToken"><i class="icon-tag"></i> openccu-lite token</label>
305
326
  <input type="password" id="node-config-input-metaToken" placeholder="olt_...">
306
- <small>Only for openccu-lite (a CCU ignores this). Leave empty when Node-RED runs on the box.</small>
327
+ <small>Only for openccu-lite (a CCU ignores this). Leave empty when Node-RED runs on the system itself (RedMatic).</small>
307
328
  </div>
308
329
  <div class="form-row">
309
330
  <label for="node-config-input-metaPort"><i class="icon-tag"></i> openccu-lite port</label>