node-red-contrib-knx-ultimate 2.1.10 → 2.1.11
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
|
@@ -6,6 +6,10 @@
|
|
|
6
6
|
|
|
7
7
|
# CHANGELOG
|
|
8
8
|
|
|
9
|
+
<p>
|
|
10
|
+
<b>Version 2.1.11</b> - June 2023<br/>
|
|
11
|
+
- KNX Global Context node: added the optional datastore to choose from.<br/>
|
|
12
|
+
</p>
|
|
9
13
|
<p>
|
|
10
14
|
<b>Version 2.1.10</b> - June 2023<br/>
|
|
11
15
|
- KNX Gateway Node: Migrated documentation to the standard node-red documentation box.<br/>
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "knxultimate",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.36",
|
|
4
4
|
"lockfileVersion": 2,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "knxultimate",
|
|
9
|
-
"version": "1.0.
|
|
9
|
+
"version": "1.0.36",
|
|
10
10
|
"license": "MIT",
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"@types/node": "^6.14.4",
|
|
@@ -14,16 +14,16 @@
|
|
|
14
14
|
"binary-parser": "1.1.5",
|
|
15
15
|
"binary-protocol": "0.0.0",
|
|
16
16
|
"caller-id": "^0.1.0",
|
|
17
|
-
"crypto-js": "
|
|
17
|
+
"crypto-js": "4.1.1",
|
|
18
18
|
"fs": "0.0.1-security",
|
|
19
|
-
"ipaddr.js": "
|
|
20
|
-
"lodash": "
|
|
19
|
+
"ipaddr.js": "2.0.0",
|
|
20
|
+
"lodash": "4.17.21",
|
|
21
21
|
"log-driver": "1.2.7",
|
|
22
22
|
"mkdirp": "^0.5.1",
|
|
23
|
-
"os": "
|
|
24
|
-
"path": "
|
|
25
|
-
"ping": "
|
|
26
|
-
"xml2js": "
|
|
23
|
+
"os": "0.1.1",
|
|
24
|
+
"path": "0.12.7",
|
|
25
|
+
"ping": "0.4.1",
|
|
26
|
+
"xml2js": "0.5.0"
|
|
27
27
|
},
|
|
28
28
|
"devDependencies": {},
|
|
29
29
|
"engines": {
|
|
@@ -85,9 +85,9 @@
|
|
|
85
85
|
"integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
|
|
86
86
|
},
|
|
87
87
|
"node_modules/ipaddr.js": {
|
|
88
|
-
"version": "2.0.
|
|
89
|
-
"resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.
|
|
90
|
-
"integrity": "sha512-
|
|
88
|
+
"version": "2.0.0",
|
|
89
|
+
"resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.0.tgz",
|
|
90
|
+
"integrity": "sha512-S54H9mIj0rbxRIyrDMEuuER86LdlgUg9FSeZ8duQb6CUG2iRrA36MYVQBSprTF/ZeAwvyQ5mDGuNvIPM0BIl3w==",
|
|
91
91
|
"engines": {
|
|
92
92
|
"node": ">= 10"
|
|
93
93
|
}
|
|
@@ -106,9 +106,12 @@
|
|
|
106
106
|
}
|
|
107
107
|
},
|
|
108
108
|
"node_modules/minimist": {
|
|
109
|
-
"version": "1.2.
|
|
110
|
-
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.
|
|
111
|
-
"integrity": "sha512-
|
|
109
|
+
"version": "1.2.8",
|
|
110
|
+
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
|
|
111
|
+
"integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
|
|
112
|
+
"funding": {
|
|
113
|
+
"url": "https://github.com/sponsors/ljharb"
|
|
114
|
+
}
|
|
112
115
|
},
|
|
113
116
|
"node_modules/mkdirp": {
|
|
114
117
|
"version": "0.5.5",
|
|
@@ -122,9 +125,9 @@
|
|
|
122
125
|
}
|
|
123
126
|
},
|
|
124
127
|
"node_modules/os": {
|
|
125
|
-
"version": "0.1.
|
|
126
|
-
"resolved": "https://registry.npmjs.org/os/-/os-0.1.
|
|
127
|
-
"integrity": "sha512-
|
|
128
|
+
"version": "0.1.1",
|
|
129
|
+
"resolved": "https://registry.npmjs.org/os/-/os-0.1.1.tgz",
|
|
130
|
+
"integrity": "sha512-jg06S2xr5De63mLjZVJDf3/k37tpjppr2LR7MUOsxv8XuUCVpCnvbCksXCBcB5gQqQf/K0+87WGTRlAj5q7r1A=="
|
|
128
131
|
},
|
|
129
132
|
"node_modules/path": {
|
|
130
133
|
"version": "0.12.7",
|
|
@@ -191,9 +194,9 @@
|
|
|
191
194
|
}
|
|
192
195
|
},
|
|
193
196
|
"node_modules/xml2js": {
|
|
194
|
-
"version": "0.
|
|
195
|
-
"resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.
|
|
196
|
-
"integrity": "sha512-
|
|
197
|
+
"version": "0.5.0",
|
|
198
|
+
"resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz",
|
|
199
|
+
"integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==",
|
|
197
200
|
"dependencies": {
|
|
198
201
|
"sax": ">=0.6.0",
|
|
199
202
|
"xmlbuilder": "~11.0.0"
|
|
@@ -264,9 +267,9 @@
|
|
|
264
267
|
"integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
|
|
265
268
|
},
|
|
266
269
|
"ipaddr.js": {
|
|
267
|
-
"version": "2.0.
|
|
268
|
-
"resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.
|
|
269
|
-
"integrity": "sha512-
|
|
270
|
+
"version": "2.0.0",
|
|
271
|
+
"resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.0.tgz",
|
|
272
|
+
"integrity": "sha512-S54H9mIj0rbxRIyrDMEuuER86LdlgUg9FSeZ8duQb6CUG2iRrA36MYVQBSprTF/ZeAwvyQ5mDGuNvIPM0BIl3w=="
|
|
270
273
|
},
|
|
271
274
|
"lodash": {
|
|
272
275
|
"version": "4.17.21",
|
|
@@ -279,9 +282,9 @@
|
|
|
279
282
|
"integrity": "sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg=="
|
|
280
283
|
},
|
|
281
284
|
"minimist": {
|
|
282
|
-
"version": "1.2.
|
|
283
|
-
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.
|
|
284
|
-
"integrity": "sha512-
|
|
285
|
+
"version": "1.2.8",
|
|
286
|
+
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
|
|
287
|
+
"integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA=="
|
|
285
288
|
},
|
|
286
289
|
"mkdirp": {
|
|
287
290
|
"version": "0.5.5",
|
|
@@ -292,9 +295,9 @@
|
|
|
292
295
|
}
|
|
293
296
|
},
|
|
294
297
|
"os": {
|
|
295
|
-
"version": "0.1.
|
|
296
|
-
"resolved": "https://registry.npmjs.org/os/-/os-0.1.
|
|
297
|
-
"integrity": "sha512-
|
|
298
|
+
"version": "0.1.1",
|
|
299
|
+
"resolved": "https://registry.npmjs.org/os/-/os-0.1.1.tgz",
|
|
300
|
+
"integrity": "sha512-jg06S2xr5De63mLjZVJDf3/k37tpjppr2LR7MUOsxv8XuUCVpCnvbCksXCBcB5gQqQf/K0+87WGTRlAj5q7r1A=="
|
|
298
301
|
},
|
|
299
302
|
"path": {
|
|
300
303
|
"version": "0.12.7",
|
|
@@ -348,9 +351,9 @@
|
|
|
348
351
|
}
|
|
349
352
|
},
|
|
350
353
|
"xml2js": {
|
|
351
|
-
"version": "0.
|
|
352
|
-
"resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.
|
|
353
|
-
"integrity": "sha512-
|
|
354
|
+
"version": "0.5.0",
|
|
355
|
+
"resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz",
|
|
356
|
+
"integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==",
|
|
354
357
|
"requires": {
|
|
355
358
|
"sax": ">=0.6.0",
|
|
356
359
|
"xmlbuilder": "~11.0.0"
|
package/KNXEngine/package.json
CHANGED
|
@@ -7,7 +7,8 @@
|
|
|
7
7
|
server: { type: "knxUltimate-config", required: true },
|
|
8
8
|
name: { value: "KNXGlobalContext", validate: RED.validators.regex(/^[a-zA-Z]+$/) },
|
|
9
9
|
exposeAsVariable: { value: "exposeAsVariableREADWRITE", required: false },
|
|
10
|
-
writeExecutionInterval: { value: 1000 }
|
|
10
|
+
writeExecutionInterval: { value: 1000 },
|
|
11
|
+
contextStorage: { value: "" }
|
|
11
12
|
},
|
|
12
13
|
inputs: 0,
|
|
13
14
|
outputs: 0,
|
|
@@ -98,5 +99,11 @@
|
|
|
98
99
|
</select>
|
|
99
100
|
</div>
|
|
100
101
|
|
|
102
|
+
<div class="form-row">
|
|
103
|
+
<label for="node-input-contextStorage" style="width:60%;">
|
|
104
|
+
<i class="fa fa-tag"></i> Context storage
|
|
105
|
+
</label>
|
|
106
|
+
<input style="width:35%;" type="text" id="node-input-contextStorage" placeholder="Optional context storage name" />
|
|
107
|
+
</div>
|
|
101
108
|
|
|
102
109
|
</script>
|
|
@@ -26,7 +26,7 @@ module.exports = function (RED) {
|
|
|
26
26
|
// payload
|
|
27
27
|
// }
|
|
28
28
|
|
|
29
|
-
function knxUltimateGlobalContext
|
|
29
|
+
function knxUltimateGlobalContext(config) {
|
|
30
30
|
RED.nodes.createNode(this, config)
|
|
31
31
|
const node = this
|
|
32
32
|
node.server = RED.nodes.getNode(config.server)
|
|
@@ -50,7 +50,7 @@ module.exports = function (RED) {
|
|
|
50
50
|
node.formatnegativevalue = 'leave'
|
|
51
51
|
node.formatdecimalsvalue = 999
|
|
52
52
|
node.writeExecutionInterval = config.writeExecutionInterval === undefined ? 1000 : config.writeExecutionInterval
|
|
53
|
-
|
|
53
|
+
node.contextStorage = config.contextStorage !== undefined ? config.contextStorage : ''
|
|
54
54
|
node.exposeAsVariable = config.exposeAsVariable !== undefined ? config.exposeAsVariable : 'exposeAsVariableREADONLY' // Should expose the Group Addresses to the Global Context?
|
|
55
55
|
node.exposedGAs = []
|
|
56
56
|
node.timerExposedGAs = null
|
|
@@ -83,8 +83,8 @@ module.exports = function (RED) {
|
|
|
83
83
|
node.goTimerGo = function () {
|
|
84
84
|
if (node.timerExposedGAs !== null) clearTimeout(node.timerExposedGAs) // 21/03/2021
|
|
85
85
|
node.timerExposedGAs = setTimeout(() => {
|
|
86
|
-
let oContext = node.context().global.get(node.name + '_WRITE') || []
|
|
87
|
-
node.context().global.set(node.name + '_WRITE', []) // Delete the var
|
|
86
|
+
let oContext = node.context().global.get(node.name + '_WRITE', node.contextStorage) || []
|
|
87
|
+
node.context().global.set(node.name + '_WRITE', [], node.contextStorage) // Delete the var
|
|
88
88
|
for (let index = 0; index < oContext.length; index++) {
|
|
89
89
|
const element = oContext[index]
|
|
90
90
|
if (!element.hasOwnProperty('address')) {
|
|
@@ -129,7 +129,7 @@ module.exports = function (RED) {
|
|
|
129
129
|
node.setNodeStatus({ fill: 'green', shape: 'dot', text: 'Start Writing', payload: '', GA: '', dpt: '', devicename: '' })
|
|
130
130
|
} else {
|
|
131
131
|
if (node.timerExposedGAs !== null) clearTimeout(node.timerExposedGAs)
|
|
132
|
-
node.context().global.set(node.name + '_WRITE', []) // Delete the var
|
|
132
|
+
node.context().global.set(node.name + '_WRITE', [], node.contextStorage) // Delete the var
|
|
133
133
|
}
|
|
134
134
|
// #endregion
|
|
135
135
|
|
|
@@ -149,14 +149,14 @@ module.exports = function (RED) {
|
|
|
149
149
|
}
|
|
150
150
|
// Save into the global Context
|
|
151
151
|
try {
|
|
152
|
-
node.context().global.set(node.name + '_READ', node.exposedGAs)
|
|
152
|
+
node.context().global.set(node.name + '_READ', node.exposedGAs, node.contextStorage)
|
|
153
153
|
} catch (error) {
|
|
154
154
|
console.log(error)
|
|
155
155
|
}
|
|
156
156
|
oGa = null // 21/03/2022
|
|
157
157
|
} else {
|
|
158
158
|
node.exposedGAs = []
|
|
159
|
-
node.context().global.set(node.name + '_READ', node.exposedGAs)
|
|
159
|
+
node.context().global.set(node.name + '_READ', node.exposedGAs, node.contextStorage)
|
|
160
160
|
}
|
|
161
161
|
}
|
|
162
162
|
|
|
@@ -28,6 +28,14 @@
|
|
|
28
28
|
GALightColorState: { value: "" },
|
|
29
29
|
dptLightColorState: { value: "" },
|
|
30
30
|
|
|
31
|
+
nameLightHSV: { value: "" },
|
|
32
|
+
GALightHSV: { value: "" },
|
|
33
|
+
dptLightHSV: { value: "" },
|
|
34
|
+
|
|
35
|
+
nameLightHSVState: { value: "" },
|
|
36
|
+
GALightHSVState: { value: "" },
|
|
37
|
+
dptLightHSVState: { value: "" },
|
|
38
|
+
|
|
31
39
|
nameLightBrightness: { value: "" },
|
|
32
40
|
GALightBrightness: { value: "" },
|
|
33
41
|
dptLightBrightness: { value: "" },
|
|
@@ -237,7 +245,7 @@
|
|
|
237
245
|
});
|
|
238
246
|
|
|
239
247
|
|
|
240
|
-
// DPT dptLightColor and
|
|
248
|
+
// DPT dptLightColor and dptLightColorState
|
|
241
249
|
// ########################
|
|
242
250
|
$.getJSON('knxUltimateDpts', (data) => {
|
|
243
251
|
data.forEach(dpt => {
|
|
@@ -320,6 +328,98 @@
|
|
|
320
328
|
|
|
321
329
|
|
|
322
330
|
|
|
331
|
+
|
|
332
|
+
|
|
333
|
+
|
|
334
|
+
// DPT dptLightTunableWhite and dptLightTunableWhiteState
|
|
335
|
+
// ########################
|
|
336
|
+
$.getJSON('knxUltimateDpts', (data) => {
|
|
337
|
+
data.forEach(dpt => {
|
|
338
|
+
if (dpt.value === "3.007" || dpt.value === "5.001") {
|
|
339
|
+
$("#node-input-dptLightHSV").append($("<option></option>")
|
|
340
|
+
.attr("value", dpt.value)
|
|
341
|
+
.text(dpt.text))
|
|
342
|
+
$("#node-input-dptLightHSVState").append($("<option></option>")
|
|
343
|
+
.attr("value", dpt.value)
|
|
344
|
+
.text(dpt.text))
|
|
345
|
+
}
|
|
346
|
+
});
|
|
347
|
+
|
|
348
|
+
$("#node-input-dptLightHSV").val(this.dptLightHSV)
|
|
349
|
+
$("#node-input-dptLightHSVState").val(this.dptLightHSVState)
|
|
350
|
+
|
|
351
|
+
})
|
|
352
|
+
|
|
353
|
+
// Autocomplete suggestion with ETS csv File
|
|
354
|
+
$("#node-input-GALightHSV").autocomplete({
|
|
355
|
+
minLength: 1,
|
|
356
|
+
source: function (request, response) {
|
|
357
|
+
$.getJSON("knxUltimatecsv?nodeID=" + oNodeServer.id, (data) => {
|
|
358
|
+
response($.map(data, function (value, key) {
|
|
359
|
+
if (value.dpt === "3.007" || value.dpt === "5.001") {
|
|
360
|
+
var sSearch = (value.ga + " (" + value.devicename + ") DPT" + value.dpt);
|
|
361
|
+
if (fullSearch(sSearch, request.term)) {
|
|
362
|
+
return {
|
|
363
|
+
label: value.ga + " # " + value.devicename + " # " + value.dpt, // Label for Display
|
|
364
|
+
value: value.ga // Value
|
|
365
|
+
}
|
|
366
|
+
} else {
|
|
367
|
+
return null;
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
}));
|
|
371
|
+
});
|
|
372
|
+
}, select: function (event, ui) {
|
|
373
|
+
// Sets Datapoint and device name automatically
|
|
374
|
+
var sDevName = ui.item.label.split("#")[1].trim();
|
|
375
|
+
try {
|
|
376
|
+
sDevName = sDevName.substr(sDevName.indexOf(")") + 1).trim();
|
|
377
|
+
} catch (error) {
|
|
378
|
+
}
|
|
379
|
+
$('#node-input-nameLightHSV').val(sDevName);
|
|
380
|
+
var optVal = $("#node-input-dptLightHSV option:contains('" + ui.item.label.split("#")[2].trim() + "')").attr('value');
|
|
381
|
+
// Select the option value
|
|
382
|
+
$("#node-input-dptLightHSV").val(optVal);
|
|
383
|
+
}
|
|
384
|
+
});
|
|
385
|
+
|
|
386
|
+
// Autocomplete suggestion with ETS csv File
|
|
387
|
+
$("#node-input-GALightHSVState").autocomplete({
|
|
388
|
+
minLength: 1,
|
|
389
|
+
source: function (request, response) {
|
|
390
|
+
$.getJSON("knxUltimatecsv?nodeID=" + oNodeServer.id, (data) => {
|
|
391
|
+
response($.map(data, function (value, key) {
|
|
392
|
+
if (value.dpt === "3.007" || value.dpt === "5.001") {
|
|
393
|
+
var sSearch = (value.ga + " (" + value.devicename + ") DPT" + value.dpt);
|
|
394
|
+
if (fullSearch(sSearch, request.term)) {
|
|
395
|
+
return {
|
|
396
|
+
label: value.ga + " # " + value.devicename + " # " + value.dpt, // Label for Display
|
|
397
|
+
value: value.ga // Value
|
|
398
|
+
}
|
|
399
|
+
} else {
|
|
400
|
+
return null;
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
}));
|
|
404
|
+
});
|
|
405
|
+
}, select: function (event, ui) {
|
|
406
|
+
// Sets Datapoint and device name automatically
|
|
407
|
+
var sDevName = ui.item.label.split("#")[1].trim();
|
|
408
|
+
try {
|
|
409
|
+
sDevName = sDevName.substr(sDevName.indexOf(")") + 1).trim();
|
|
410
|
+
} catch (error) {
|
|
411
|
+
}
|
|
412
|
+
$('#node-input-nameLightHSVState').val(sDevName);
|
|
413
|
+
var optVal = $("#node-input-dptLightHSVState option:contains('" + ui.item.label.split("#")[2].trim() + "')").attr('value');
|
|
414
|
+
// Select the option value
|
|
415
|
+
$("#node-input-dptLightHSVState").val(optVal);
|
|
416
|
+
}
|
|
417
|
+
});
|
|
418
|
+
// ########################
|
|
419
|
+
|
|
420
|
+
|
|
421
|
+
|
|
422
|
+
|
|
323
423
|
// DPT dptLightBrightness and dptLightBrightnessState
|
|
324
424
|
// ########################
|
|
325
425
|
$.getJSON('knxUltimateDpts', (data) => {
|
|
@@ -583,8 +683,6 @@
|
|
|
583
683
|
|
|
584
684
|
<br/>
|
|
585
685
|
|
|
586
|
-
<!-- <p> <img src='https://raw.githubusercontent.com/Supergiovane/node-red-contrib-knx-ultimate/master/img/knx.png' width='32px'> -> <img src='https://raw.githubusercontent.com/Supergiovane/node-red-contrib-knx-ultimate/master/img/hue.png' width='32px'></p> -->
|
|
587
|
-
|
|
588
686
|
<p>
|
|
589
687
|
<b>KNX LINK</b>
|
|
590
688
|
</p>
|
|
@@ -612,8 +710,8 @@
|
|
|
612
710
|
<label for="node-input-nameLightState" style="width:50px; margin-left: 0px; text-align: right;"><span data-i18n="knxUltimateHueLight.node-input-name"></span></label>
|
|
613
711
|
<input type="text" id="node-input-nameLightState" style="width:200px;margin-left: 5px; text-align: left;">
|
|
614
712
|
</div>
|
|
615
|
-
|
|
616
|
-
|
|
713
|
+
|
|
714
|
+
|
|
617
715
|
<div class="form-row">
|
|
618
716
|
<label for="node-input-nameLightDIM" style="width:100px;"><i class="fa fa-play-circle-o"></i> Dimming</label>
|
|
619
717
|
|
|
@@ -625,9 +723,8 @@
|
|
|
625
723
|
|
|
626
724
|
<label for="node-input-nameLightDIM" style="width:50px; margin-left: 0px; text-align: right;"><span data-i18n="knxUltimateHueLight.node-input-name"></span></label>
|
|
627
725
|
<input type="text" id="node-input-nameLightDIM" style="width:200px;margin-left: 5px; text-align: left;">
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
</div>
|
|
726
|
+
</div>
|
|
727
|
+
|
|
631
728
|
<div class="form-row">
|
|
632
729
|
<label for="node-input-nameLightColor" style="width:100px;"><i class="fa fa-play-circle-o"></i> Color</label>
|
|
633
730
|
|
|
@@ -639,7 +736,7 @@
|
|
|
639
736
|
|
|
640
737
|
<label for="node-input-nameLightColor" style="width:50px; margin-left: 0px; text-align: right;"><span data-i18n="knxUltimateHueLight.node-input-name"></span></label>
|
|
641
738
|
<input type="text" id="node-input-nameLightColor" style="width:200px;margin-left: 5px; text-align: left;">
|
|
642
|
-
|
|
739
|
+
</div>
|
|
643
740
|
<div class="form-row">
|
|
644
741
|
<label for="node-input-nameLightColorState" style="width:100px;"><i class="fa fa-play-circle-o"></i> Color Status</label>
|
|
645
742
|
|
|
@@ -651,10 +748,12 @@
|
|
|
651
748
|
|
|
652
749
|
<label for="node-input-nameLightColorState" style="width:50px; margin-left: 0px; text-align: right;"><span data-i18n="knxUltimateHueLight.node-input-name"></span></label>
|
|
653
750
|
<input type="text" id="node-input-nameLightColorState" style="width:200px;margin-left: 5px; text-align: left;">
|
|
654
|
-
</div>
|
|
655
|
-
<br/>
|
|
656
|
-
</div>
|
|
657
751
|
</div>
|
|
752
|
+
|
|
753
|
+
|
|
754
|
+
|
|
755
|
+
|
|
756
|
+
|
|
658
757
|
<div class="form-row">
|
|
659
758
|
<label for="node-input-nameLightBrightness" style="width:100px;"><i class="fa fa-play-circle-o"></i> Brightness</label>
|
|
660
759
|
|
|
@@ -666,8 +765,8 @@
|
|
|
666
765
|
|
|
667
766
|
<label for="node-input-nameLightBrightness" style="width:50px; margin-left: 0px; text-align: right;"><span data-i18n="knxUltimateHueLight.node-input-name"></span></label>
|
|
668
767
|
<input type="text" id="node-input-nameLightBrightness" style="width:200px;margin-left: 5px; text-align: left;">
|
|
669
|
-
|
|
670
|
-
|
|
768
|
+
</div>
|
|
769
|
+
|
|
671
770
|
<div class="form-row">
|
|
672
771
|
<label for="node-input-nameLightBrightnessState" style="width:100px;"><i class="fa fa-play-circle-o"></i> Brightness Status</label>
|
|
673
772
|
|
|
@@ -679,10 +778,9 @@
|
|
|
679
778
|
|
|
680
779
|
<label for="node-input-nameLightBrightnessState" style="width:50px; margin-left: 0px; text-align: right;"><span data-i18n="knxUltimateHueLight.node-input-name"></span></label>
|
|
681
780
|
<input type="text" id="node-input-nameLightBrightnessState" style="width:200px;margin-left: 5px; text-align: left;">
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
</div>
|
|
781
|
+
</div>
|
|
782
|
+
|
|
783
|
+
|
|
686
784
|
<div class="form-row">
|
|
687
785
|
<label for="node-input-nameLightBlink" style="width:100px;"><i class="fa fa-play-circle-o"></i> Blink</label>
|
|
688
786
|
|
|
@@ -694,8 +792,8 @@
|
|
|
694
792
|
|
|
695
793
|
<label for="node-input-nameLightBlink" style="width:50px; margin-left: 0px; text-align: right;"><span data-i18n="knxUltimateHueLight.node-input-name"></span></label>
|
|
696
794
|
<input type="text" id="node-input-nameLightBlink" style="width:200px;margin-left: 5px; text-align: left;">
|
|
697
|
-
|
|
698
|
-
|
|
795
|
+
</div>
|
|
796
|
+
|
|
699
797
|
<div class="form-row">
|
|
700
798
|
<label for="node-input-nameLightColorCycle" style="width:100px;"><i class="fa fa-play-circle-o"></i> Color Cycle</label>
|
|
701
799
|
|
|
@@ -707,7 +805,7 @@
|
|
|
707
805
|
|
|
708
806
|
<label for="node-input-nameLightColorCycle" style="width:50px; margin-left: 0px; text-align: right;"><span data-i18n="knxUltimateHueLight.node-input-name"></span></label>
|
|
709
807
|
<input type="text" id="node-input-nameLightColorCycle" style="width:200px;margin-left: 5px; text-align: left;">
|
|
710
|
-
|
|
808
|
+
</div>
|
|
711
809
|
<br/>
|
|
712
810
|
<br/>
|
|
713
811
|
<br/>
|
|
@@ -738,6 +836,8 @@ Start typing in the GA field, the name or group address of your KNX device, the
|
|
|
738
836
|
| Dimming | Relative DIM the HUE light |
|
|
739
837
|
| Color | This command is used to change the HUE light's color. Accepted datapoint is RGB triplet (r,g,b). The node handles the gamut color correction. As soon as you send a color KNX telegran, the light turns on and sets color and brightness, derived from the brightness human perception. As soon as you send a KNX telegram with r,g,b set to zero, the light turns off |
|
|
740
838
|
| Color Status | Link this to the light's color status group address. Accepted datapoint is RGB triplet (r,g,b)|
|
|
839
|
+
| Tunable white | This command is used to change the HUE light's white temperature. There are a bunch of Datapoints you can choose from, to suit your needs. |
|
|
840
|
+
| Tunable white Status | Link this to the light temperature status group address. |
|
|
741
841
|
| Brightness | This command is used to change the absolute HUE light's brightness |
|
|
742
842
|
| Brightness Status| Link this to the light's brightness status group address |
|
|
743
843
|
| Blink| *true* Blink the light, *false* Stop blinking. Blinks the light on and off. Useful for signalling. Works with all HUE lights. |
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"engines": {
|
|
4
4
|
"node": ">=16.0.0"
|
|
5
5
|
},
|
|
6
|
-
"version": "2.1.
|
|
6
|
+
"version": "2.1.11",
|
|
7
7
|
"description": "Control your KNX intallation via Node-Red! Single Node KNX IN/OUT with optional ETS group address importer. Easy to use and highly configurable. With integrated Philips HUE devices handling.",
|
|
8
8
|
"dependencies": {
|
|
9
9
|
"mkdirp": "1.0.4",
|