node-red-contrib-ccu 4.6.1 → 4.7.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/CHANGELOG.md CHANGED
@@ -5,6 +5,70 @@ 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.0 (2026-10-27)
9
+
10
+ ### Added
11
+
12
+ - **On openccu-lite the interfaces are reached through the system's lite-rpc**
13
+ (with [occulite-client](https://www.npmjs.com/package/occulite-client))
14
+ instead of XML-RPC/BIN-RPC clients and callback servers of this node's own -
15
+ the requests over the system's web port, the events from a stream the
16
+ connection opens, replayed after a break and re-read after a restart of the
17
+ system; one subscriber at the interface processes serves every program on
18
+ the system, and nothing registers with `init`. The credential is the
19
+ openccu-lite token of the connection node, or on the system itself
20
+ RedMatic's own token, which the system mints for it. A new setting
21
+ _openccu-lite interfaces_ in the connection node chooses: _auto_ (the
22
+ default; the CCU way on a CCU), _openccu-lite_ (lite-rpc only) or _CCU_ (the
23
+ direct connection with callbacks, on openccu-lite too). An existing
24
+ connection is moved to lite-rpc once, at its first start on openccu-lite,
25
+ and the log says so; a choice made in the node is never changed by a later
26
+ version. The value cache is filled from the system's state store at deploy,
27
+ so nodes with _cache_ get a value on openccu-lite as well. CUxD and CCU-Jack
28
+ keep their own connections. On a CCU, RaspberryMatic and OpenCCU nothing
29
+ changes.
30
+
31
+ ### Changed
32
+
33
+ - **An interface process that is not up yet is tried every 3 s for the first
34
+ 90 s, then every 15 s.** The 1, 2, 4, 8 s steps and the 15 s after them
35
+ missed hmipserver's ready moment on a booting system by up to 15 s (measured
36
+ on an openccu-lite Pi 4: hmipserver answers 50-55 s after the boot, the next
37
+ attempt came at 61 s). The same holds after a process went away. When one
38
+ interface appears, the others still waiting are tried at once, and the log
39
+ line that reports the connection says how long after the start (or after the
40
+ outage) it came. The metadata API's re-detection on openccu-lite follows the
41
+ same schedule.
42
+ - **The port of each interface can be set in the connection node**, beside its
43
+ checkbox: blank is the CCU's port for the transport as before (2001/42001 and
44
+ so on, the 3xxxx ports on the CCU itself), a number replaces it - for a CCU
45
+ behind port forwarding, or a simulator on another port.
46
+ - The test suite runs hm-simulator 1.4 on free ports, so it runs beside a CCU
47
+ or another suite, and drives the simulator's scenario API: devices paired
48
+ and removed while Node-RED runs, a ramp-time write, a service message, an
49
+ interface process that restarts and forgets its clients, TLS with basic
50
+ auth.
51
+ - **On openccu-lite the metadata stream reports as `Metadata`, not as
52
+ "Interface ReGaHSS".** The system has no ReGaHSS; the connection borrowed
53
+ that slot for the stream's state, so the log said "Interface ReGaHSS
54
+ connected" at every start and reconnect, right next to "this box has no
55
+ ReGaHSS". The log now says "Metadata stream connected", the nodes' status
56
+ counts the stream under that name, and the editors' interface lists do not
57
+ offer it.
58
+
59
+ ## 4.6.2 (2026-10-23)
60
+
61
+ ### Fixed
62
+
63
+ - **One event a few times a day was lost on the way from hmipserver, which
64
+ logged a `RpcIOException … Connection reset` for it.** hmipserver delivers
65
+ its events through a pooled HTTP keep-alive client whose idle timeout is
66
+ 1200 s and sends the next event on a pooled connection without checking it;
67
+ the XML-RPC callback server closed an idle connection after Node's default
68
+ 5 s, so at the idle boundary the event went out onto a socket this side was
69
+ closing. The callback server now keeps an idle connection open for 1300 s,
70
+ longer than the client pool does, so it is always the client that lets go.
71
+
8
72
  ## 4.6.1 (2026-10-22)
9
73
 
10
74
  ### Fixed
@@ -13,9 +77,8 @@ append commits automatically).
13
77
  maintenance channel's `STICKY_UNREACH`** went out as a `switch` with
14
78
  `device_class: problem`, a class only `binary_sensor` knows, and Home
15
79
  Assistant refused that component ("expected SwitchDeviceClass or one of
16
- 'outlet', 'switch'") while it created the device and its other entities
17
- (B-39). `STICKY_UNREACH` is no longer announced at all - the maintainer's
18
- decision: "UNREACH is enough" -, and a device class a platform does not
80
+ 'outlet', 'switch'") while it created the device and its other entities. `STICKY_UNREACH` is no longer announced at all
81
+ (UNREACH covers it), and a device class a platform does not
19
82
  accept is dropped from any component before it goes out. A test now checks
20
83
  every component of every device the shipped paramsets know against Home
21
84
  Assistant's device classes per platform.
@@ -44,7 +107,7 @@ append commits automatically).
44
107
  ### Fixed
45
108
 
46
109
  - **Home Assistant showed every entity of a device as "unavailable" for
47
- good** (B-38, reported by mail). The discovery configs name the device's
110
+ good** (reported by mail). The discovery configs name the device's
48
111
  `…:0/UNREACH` topic as its availability, and Home Assistant treats an
49
112
  entity as unavailable until that topic delivers a value. Only `ccu-mqtt`
50
113
  published UNREACH: when it changed, or once in its start-up burst of
@@ -64,8 +127,7 @@ append commits automatically).
64
127
 
65
128
  ### Fixed
66
129
 
67
- - **No HmIP-RF events for up to 10 minutes after hmipserver restarted**
68
- (B-37). hmipserver keeps its subscribers over a restart: it calls
130
+ - **No HmIP-RF events for up to 10 minutes after hmipserver restarted**. hmipserver keeps its subscribers over a restart: it calls
69
131
  `listDevices` and `newDevices` on them and answers their pings, but
70
132
  delivers no event to such a kept subscription until it is subscribed
71
133
  afresh. The liveness ping saw its PONG and was content, so the
@@ -80,7 +142,7 @@ append commits automatically).
80
142
  ### Fixed
81
143
 
82
144
  - **A burst of `getParamsetDescription Error: XML-RPC fault: Invalid device`
83
- at the first start after an update** (B-36). A device deleted from the CCU
145
+ at the first start after an update**. A device deleted from the CCU
84
146
  while Node-RED was not running stayed in the cached device table
85
147
  (`ccu_<host>.json`) and in the values cache (`ccu_values_<host>.json`).
86
148
  At the start its paramset descriptions were queued from the cached table;
@@ -105,7 +167,7 @@ append commits automatically).
105
167
  ### Added
106
168
 
107
169
  - **TLS and authentication for every connection to a CCU on the network**
108
- (task 5, #27). With _TLS/SSL_ on, all XML-RPC interfaces are reached over
170
+ (#27). With _TLS/SSL_ on, all XML-RPC interfaces are reached over
109
171
  the CCU's TLS ports (42000, 42001, 42010, 49292; CCU-Jack 2122), the ReGaHSS
110
172
  over 48181 and openccu-lite's metadata api over 443; with _Authentication_
111
173
  on, the username and password go out as HTTP basic auth on every call, the
@@ -126,7 +188,7 @@ append commits automatically).
126
188
  certificates_, the CCU's self-signed certificate is refused, as before.
127
189
 
128
190
  - **One topic template in every node that emits, the value node's input
129
- takes the emitted shape** (task 6, #39 @psi-4ward). The `get value` node has a _Topic_
191
+ takes the emitted shape** (#39 @psi-4ward). The `get value` node has a _Topic_
130
192
  field now, the same `${…}` template as rpc-event, value, sysvar, program,
131
193
  rpc and script; empty (the default, and every existing flow) leaves
132
194
  `msg.topic` as it came in. The value node's input accepts a datapoint
@@ -140,7 +202,7 @@ append commits automatically).
140
202
  rpc-event, value and get value the placeholders.
141
203
 
142
204
  - **Help texts for every node in German and English, as locale files**
143
- (task 7, #58). The help moved from inline blocks in the node files into
205
+ (#58). The help moved from inline blocks in the node files into
144
206
  `nodes/locales/de/` and `nodes/locales/en-US/`, the layout Node-RED
145
207
  documents for node help: the runtime serves one language's text per
146
208
  request through the same lookup as its own nodes (`de` and `de-DE` both
@@ -158,7 +220,7 @@ append commits automatically).
158
220
  ### Fixed
159
221
 
160
222
  - **Writing one party-mode datapoint of an HmIP thermostat reset the other
161
- two** (task 2, #156 @ben-5555, #161 @lolli78). An HmIP eTRV/WTH takes
223
+ two** (#156 @ben-5555, #161 @lolli78). An HmIP eTRV/WTH takes
162
224
  `PARTY_TIME_START`, `PARTY_TIME_END` and `PARTY_SET_POINT_TEMPERATURE` only
163
225
  together: a `setValue` of one of them put the others back to
164
226
  `1999_11_30 00:00`, so party or holiday mode could not be set from the
@@ -170,7 +232,7 @@ append commits automatically).
170
232
  Date, an ISO string or epoch milliseconds; they are formatted for the device
171
233
  in local time. Any other datapoint of the channel is written as before. The
172
234
  older HM thermostats (`PARTY_MODE_SUBMIT`) are not covered.
173
- - **A callback call with an unknown interface id ended Node-RED** (B-32).
235
+ - **A callback call with an unknown interface id ended Node-RED**.
174
236
  Anything on the system can connect to the connection's callback ports on
175
237
  the loopback; a `system.listMethods` without parameters, an `event` with an
176
238
  id that is not one of ours, or a `newDevices` list with a malformed entry
@@ -180,7 +242,7 @@ append commits automatically).
180
242
  `system.listMethods`) and logged at debug; a throw inside a handler is
181
243
  logged as an error and answered instead of ending the process.
182
244
  - **A metadata api detection that timed out at start left the connection in
183
- ReGa mode for good** (B-28). On openccu-lite the connection asks
245
+ ReGa mode for good**. On openccu-lite the connection asks
184
246
  `GET /api/meta/v1/version` once at start; when that probe ran into its 5 s
185
247
  timeout - on a Raspberry Pi 3 Node-RED's own start blocks the event loop
186
248
  long enough for that at every start, on a busy system now and then - the
@@ -191,8 +253,7 @@ append commits automatically).
191
253
  the detection is repeated after 1, 2, 4, 8 s and then every 15 s (up to 20
192
254
  times, then the five-minute rule again), and the failing ReGa poll asks for
193
255
  a re-detection too. A CCU's 404 is still a conclusive "no".
194
- - **After an hmipserver restart HmIP-RF events stopped for up to ten minutes**
195
- (B-29). hmipserver forgets its clients when it restarts and does not tell
256
+ - **After an hmipserver restart HmIP-RF events stopped for up to ten minutes**. hmipserver forgets its clients when it restarts and does not tell
196
257
  them: the `init` had succeeded, nothing failed, and the events simply stopped
197
258
  until the 600 s silence timeout called `init` again. The connection now
198
259
  pings HmIP-RF after 30 s without an event and, when no event (the PONG)
@@ -203,7 +264,7 @@ append commits automatically).
203
264
  events are back well within a minute. An interface that never delivered an
204
265
  event since its `init` is not re-subscribed on a missing PONG alone.
205
266
  - **A queued write of the same set point was dropped after the actuator had
206
- been operated by hand** (B-19, #151 @vigeland). The value node's _Queue_ compared the
267
+ been operated by hand** (#151 @vigeland). The value node's _Queue_ compared the
207
268
  new value with the value cache, and the cache of a control channel
208
269
  (HmIP-FROLL/BROLL `:4`, the status lives in `:3`) holds the echo of our own
209
270
  last write for good - a blind moved by hand reports no new set point there,
@@ -217,7 +278,7 @@ append commits automatically).
217
278
  ### Security
218
279
 
219
280
  - **The CCU password and the openccu-lite token were stored in plain text in
220
- `flows.json`** and went out with every exported flow (B-31). Both are
281
+ `flows.json`** and went out with every exported flow. Both are
221
282
  Node-RED credentials now (`flows_cred.json`, encrypted, never exported).
222
283
  A flow written before this version still carries them as plain properties:
223
284
  the connection uses them once, moves them into the credentials and warns;
@@ -226,8 +287,7 @@ append commits automatically).
226
287
 
227
288
  ### Changed
228
289
 
229
- - **The device table follows the CCU, and can be re-read by hand** (task 9,
230
- #146 @guny74, #181 @vore). A device or channel the CCU reports with another TYPE,
290
+ - **The device table follows the CCU, and can be re-read by hand** (#146 @guny74, #181 @vore). A device or channel the CCU reports with another TYPE,
231
291
  VERSION or FIRMWARE than the cache holds replaces the cached entry, leaves
232
292
  its old type list and gets its datapoints fetched again - a channel whose
233
293
  type changed in place kept its old datapoints before, until the cache file
@@ -237,14 +297,14 @@ append commits automatically).
237
297
  reports what changed. The editor's channel pickers no longer empty the
238
298
  configured channel when the connection is still initialising: they show
239
299
  _loading device data_ and ask again.
240
- - **An interface without devices is watched too** (task 9, old B-11). The
300
+ - **An interface without devices is watched too**. The
241
301
  ping watchdog returned early for an interface with no devices in the
242
302
  cache, so such an interface never pinged and never re-initialised after a
243
303
  CCU reboot. It pings now, and re-initialises after the ping timeout once
244
304
  it has ever delivered an event (a PONG counts) - a process that answers no
245
305
  ping at all is not asked to `init` every timeout.
246
306
  - **The `listDevices` answer to hmipserver lists the CCU's virtual remote
247
- control (HmIP-RCV-1) again** (task 13). It was left out since CCU3 firmware
307
+ control (HmIP-RCV-1) again**. It was left out since CCU3 firmware
248
308
  3.43.15 (2019), whose hmipserver failed on an answer that held it; current
249
309
  hmipservers take it, and without it every `init` made hmipserver log a
250
310
  _handleIDMigration_ warning and send the whole virtual remote (52
@@ -262,8 +322,7 @@ append commits automatically).
262
322
  proxy ports (XML-RPC instead of BIN-RPC for BidCos) until the next restart.
263
323
  A loopback host on a system that has the CCU's interface list
264
324
  (`/etc/config/InterfacesList.xml`) is now taken as local as well.
265
- - **Waiting for an interface process that is still starting is no warning**
266
- (task 12). Before the interface was ever connected, a refused connection
325
+ - **Waiting for an interface process that is still starting is no warning**. Before the interface was ever connected, a refused connection
267
326
  is one info line (_"HmIP-RF not listening yet (connect ECONNREFUSED),
268
327
  waiting for it - retrying in 1 s"_); another transport error, or a refused
269
328
  connection after the interface had been connected, is still a warning, and
@@ -272,7 +331,7 @@ append commits automatically).
272
331
  ### Changed
273
332
 
274
333
  - **A failed `init` is retried after 1 s, 2 s, 4 s and 8 s, then every 15 s**
275
- (task 12; was 2, 4, 8, 16 s, then every 30 s), the schedule of hm2mqtt.js and
334
+ (was 2, 4, 8, 16 s, then every 30 s), the schedule of hm2mqtt.js and
276
335
  the Homematic Manager.
277
336
 
278
337
  ## 4.4.4 (2026-09-17)
@@ -280,7 +339,7 @@ append commits automatically).
280
339
  ### Fixed
281
340
 
282
341
  - **An interface stayed without events for minutes, or for good, when its
283
- process did not answer the first `init`** (task 11). A failed `init` at
342
+ process did not answer the first `init`**. A failed `init` at
284
343
  start (connection refused, timeout) was only retried by the ping
285
344
  supervision, which does nothing without cached devices and waits the ping
286
345
  timeout otherwise: 60 s, and 600 s for HmIP-RF. A Node-RED that starts
@@ -298,8 +357,7 @@ append commits automatically).
298
357
 
299
358
  ### Fixed
300
359
 
301
- - **Node-RED at 100 % CPU and unresponsive while ReGaHSS is unreachable**
302
- (B-27). binrpc up to 4.2.0 armed a new reconnect timer for both the `error`
360
+ - **Node-RED at 100 % CPU and unresponsive while ReGaHSS is unreachable**. binrpc up to 4.2.0 armed a new reconnect timer for both the `error`
303
361
  and the `close` event of every refused connect, so the number of attempts to
304
362
  the ReGaHSS port 31999 doubled every 2.5 s without bound: about 7,000 refused
305
363
  connects per second, 30,000 pending timers and 68 million connects in under
@@ -317,7 +375,7 @@ append commits automatically).
317
375
  ### Fixed
318
376
 
319
377
  - **`getRegaVariables Error: socket hang up` every few minutes on a CCU**
320
- (B-18, [RedMatic #601](https://github.com/rdmtc/RedMatic/issues/601)
378
+ ([RedMatic #601](https://github.com/rdmtc/RedMatic/issues/601)
321
379
  follow-up). Since 4.3.0 a local install talks to ReGaHSS itself on port 8183. ReGaHSS answers HTTP/1.1 without `Connection: close` — and then
322
380
  closes the connection 0.4–7 ms after every response (measured on a
323
381
  CCU3 3.89.8, median 0.55 ms). `homematic-rega` 2.0 (since 4.0.0) sent
@@ -374,7 +432,7 @@ hang up` — became an **unhandled rejection**, which Node >= 15 turns
374
432
 
375
433
  ### Added
376
434
 
377
- - **Dynamic node configuration through `msg.config`** (roadmap B-2). Put
435
+ - **Dynamic node configuration through `msg.config`**. Put
378
436
  an object in `msg.config` and its properties override that node's own
379
437
  configuration for that one message; the stored configuration is never
380
438
  modified, so the next message starts from the dialog settings again.
@@ -449,7 +507,6 @@ hang up` — became an **unhandled rejection**, which Node >= 15 turns
449
507
  `/etc/lighttpd/conf.d/proxy.conf` for a port number; on current
450
508
  firmware that file is a one-line include and the port markers live two
451
509
  levels down. It now looks for a listener on the direct port instead.
452
- (Roadmap B-4)
453
510
  - Writing several system variables at once left all but the first
454
511
  invisible until the next scheduled ReGa poll (30 s by default): the
455
512
  immediate re-poll each write triggers was dropped while another poll
@@ -481,7 +538,7 @@ hang up` — became an **unhandled rejection**, which Node >= 15 turns
481
538
  presence, smoke, water), event (keys), lock (KeyMatic), sensor (energy,
482
539
  weather, maintenance) plus, optionally, disabled-by-default entities for
483
540
  every other datapoint. Unchecking a device removes it from Home
484
- Assistant on the next deploy. (Roadmap B-16)
541
+ Assistant on the next deploy.
485
542
  - ccu-mqtt: the setValue topic accepts Home Assistant's command words —
486
543
  `OPEN`, `CLOSE`, `STOP`, `ON`, `OFF` on LEVEL and `AUTO-MODE`,
487
544
  `MANU-MODE`, `BOOST-MODE`, `COMFORT-MODE`, `LOWERING-MODE` on the
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>