node-red-contrib-knx-ultimate 2.0.0 → 2.0.2
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 +9 -0
- package/KNXEngine/dptlib/index.js +1 -1
- package/KNXUltimate.code-workspace +11 -1
- package/README.md +1 -1
- package/img/hue.png +0 -0
- package/img/hueButton.png +0 -0
- package/img/hueLight.png +0 -0
- package/img/knx.png +0 -0
- package/nodes/hue-config.js +20 -6
- package/nodes/knxUltimateHueButton.html +586 -0
- package/nodes/knxUltimateHueButton.js +159 -0
- package/nodes/knxUltimateHueLight.html +363 -55
- package/nodes/knxUltimateHueLight.js +70 -13
- package/nodes/locales/en-US/knxUltimateHueLight.json +3 -3
- package/nodes/utils/hueColorConverter.js +237 -0
- package/nodes/utils/hueUtils.js +37 -21
- package/package.json +6 -4
- package/nodes/locales/en-US/knxUltimateHueLight.html +0 -10
- /package/nodes/locales/{de → de-disabled}/hue-config.html +0 -0
- /package/nodes/locales/{de → de-disabled}/hue-config.json +0 -0
- /package/nodes/locales/{de → de-disabled}/knxUltimate-config.html +0 -0
- /package/nodes/locales/{de → de-disabled}/knxUltimate-config.json +0 -0
- /package/nodes/locales/{de → de-disabled}/knxUltimate.html +0 -0
- /package/nodes/locales/{de → de-disabled}/knxUltimate.json +0 -0
- /package/nodes/locales/{de → de-disabled}/knxUltimateAlerter.html +0 -0
- /package/nodes/locales/{de → de-disabled}/knxUltimateAlerter.json +0 -0
- /package/nodes/locales/{de → de-disabled}/knxUltimateGlobalContext.html +0 -0
- /package/nodes/locales/{de → de-disabled}/knxUltimateGlobalContext.json +0 -0
- /package/nodes/locales/{de → de-disabled}/knxUltimateHueLight.html +0 -0
- /package/nodes/locales/{de → de-disabled}/knxUltimateHueLight.json +0 -0
- /package/nodes/locales/{de → de-disabled}/knxUltimateLoadControl.html +0 -0
- /package/nodes/locales/{de → de-disabled}/knxUltimateLoadControl.json +0 -0
- /package/nodes/locales/{de → de-disabled}/knxUltimateLogger.html +0 -0
- /package/nodes/locales/{de → de-disabled}/knxUltimateLogger.json +0 -0
- /package/nodes/locales/{de → de-disabled}/knxUltimateSceneController.html +0 -0
- /package/nodes/locales/{de → de-disabled}/knxUltimateSceneController.json +0 -0
- /package/nodes/locales/{de → de-disabled}/knxUltimateViewer.html +0 -0
- /package/nodes/locales/{de → de-disabled}/knxUltimateViewer.json +0 -0
- /package/nodes/locales/{de → de-disabled}/knxUltimateWatchDog.html +0 -0
- /package/nodes/locales/{de → de-disabled}/knxUltimateWatchDog.json +0 -0
|
@@ -0,0 +1,586 @@
|
|
|
1
|
+
<script type="text/javascript">
|
|
2
|
+
RED.nodes.registerType('knxUltimateHueButton', {
|
|
3
|
+
category: "KNX Ultimate",
|
|
4
|
+
color: '#C7E9C0',
|
|
5
|
+
defaults: {
|
|
6
|
+
//buttonState: {value: true},
|
|
7
|
+
server: { type: "knxUltimate-config", required: true },
|
|
8
|
+
serverHue: { type: "hue-config", required: true },
|
|
9
|
+
name: { value: "Hue Button (beta)" },
|
|
10
|
+
|
|
11
|
+
nameinitial_press: { value: "" },
|
|
12
|
+
GAinitial_press: { value: "" },
|
|
13
|
+
dptinitial_press: { value: "" },
|
|
14
|
+
|
|
15
|
+
namerepeat: { value: "" },
|
|
16
|
+
GArepeat: { value: "" },
|
|
17
|
+
dptrepeat: { value: "" },
|
|
18
|
+
|
|
19
|
+
nameshort_release: { value: "" },
|
|
20
|
+
GAshort_release: { value: "" },
|
|
21
|
+
dptshort_release: { value: "" },
|
|
22
|
+
|
|
23
|
+
namelong_release: { value: "" },
|
|
24
|
+
GAlong_release: { value: "" },
|
|
25
|
+
dptlong_release: { value: "" },
|
|
26
|
+
|
|
27
|
+
namedouble_short_release: { value: "" },
|
|
28
|
+
GAdouble_short_release: { value: "" },
|
|
29
|
+
dptdouble_short_release: { value: "" },
|
|
30
|
+
|
|
31
|
+
namelong_press: { value: "" },
|
|
32
|
+
GAlong_press: { value: "" },
|
|
33
|
+
dptlong_press: { value: "" },
|
|
34
|
+
|
|
35
|
+
toggleValues: { value: true },
|
|
36
|
+
hueDevice: { value: "" }
|
|
37
|
+
},
|
|
38
|
+
inputs: 0,
|
|
39
|
+
outputs: 0,
|
|
40
|
+
icon: "node-hue-icon.svg",
|
|
41
|
+
label: function () {
|
|
42
|
+
return (this.name);
|
|
43
|
+
},
|
|
44
|
+
paletteLabel: "Hue Button",
|
|
45
|
+
// button: {
|
|
46
|
+
// enabled: function() {
|
|
47
|
+
// // return whether or not the button is enabled, based on the current
|
|
48
|
+
// // configuration of the node
|
|
49
|
+
// return !this.changed
|
|
50
|
+
// },
|
|
51
|
+
// visible: function() {
|
|
52
|
+
// // return whether or not the button is visible, based on the current
|
|
53
|
+
// // configuration of the node
|
|
54
|
+
// return this.hasButton
|
|
55
|
+
// },
|
|
56
|
+
// //toggle: "buttonState",
|
|
57
|
+
// onclick: function() {}
|
|
58
|
+
// },
|
|
59
|
+
oneditprepare: function () {
|
|
60
|
+
var node = this;
|
|
61
|
+
var oNodeServer = RED.nodes.node($("#node-input-server").val()); // Store the config-node
|
|
62
|
+
var oNodeServerHue = RED.nodes.node($("#node-input-serverHue").val()); // Store the config-node
|
|
63
|
+
|
|
64
|
+
// 19/02/2020 Used to get the server sooner als deploy.
|
|
65
|
+
$("#node-input-server").change(function () {
|
|
66
|
+
try {
|
|
67
|
+
oNodeServer = RED.nodes.node($(this).val());
|
|
68
|
+
} catch (error) { }
|
|
69
|
+
});
|
|
70
|
+
// 19/02/2020 Used to get the server sooner als deploy.
|
|
71
|
+
$("#node-input-serverHue").change(function () {
|
|
72
|
+
try {
|
|
73
|
+
oNodeServerHue = RED.nodes.node($(this).val());
|
|
74
|
+
} catch (error) { }
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
// 31/03/2020 Search Helper
|
|
78
|
+
function fullSearch(sourceText, searchString) {
|
|
79
|
+
// This searches for all words in a string
|
|
80
|
+
var aSearchWords = searchString.toLowerCase().split(" ");
|
|
81
|
+
var i = 0;
|
|
82
|
+
for (let index = 0; index < aSearchWords.length; index++) {
|
|
83
|
+
if (sourceText.toLowerCase().indexOf(aSearchWords[index]) > -1) i += 1;
|
|
84
|
+
}
|
|
85
|
+
return i == aSearchWords.length;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
// DPT Switch command
|
|
89
|
+
// ########################
|
|
90
|
+
$.getJSON('knxUltimateDpts', (data) => {
|
|
91
|
+
data.forEach(dpt => {
|
|
92
|
+
if (dpt.value.startsWith("1.")) {
|
|
93
|
+
$("#node-input-dptinitial_press").append($("<option></option>")
|
|
94
|
+
.attr("value", dpt.value)
|
|
95
|
+
.text(dpt.text))
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
$("#node-input-dptinitial_press").val(this.dptinitial_press)
|
|
99
|
+
})
|
|
100
|
+
|
|
101
|
+
// Autocomplete suggestion with ETS csv File
|
|
102
|
+
$("#node-input-GAinitial_press").autocomplete({
|
|
103
|
+
minLength: 1,
|
|
104
|
+
source: function (request, response) {
|
|
105
|
+
//$.getJSON("csv", request, function( data, status, xhr ) {
|
|
106
|
+
$.getJSON("knxUltimatecsv?nodeID=" + oNodeServer.id, (data) => {
|
|
107
|
+
response($.map(data, function (value, key) {
|
|
108
|
+
var sSearch = (value.ga + " (" + value.devicename + ") DPT" + value.dpt);
|
|
109
|
+
if (fullSearch(sSearch, request.term + " 1.")) {
|
|
110
|
+
return {
|
|
111
|
+
label: value.ga + " # " + value.devicename + " # " + value.dpt, // Label for Display
|
|
112
|
+
value: value.ga // Value
|
|
113
|
+
}
|
|
114
|
+
} else {
|
|
115
|
+
return null;
|
|
116
|
+
}
|
|
117
|
+
}));
|
|
118
|
+
});
|
|
119
|
+
}, select: function (event, ui) {
|
|
120
|
+
// Sets Datapoint and device name automatically
|
|
121
|
+
var sDevName = ui.item.label.split("#")[1].trim();
|
|
122
|
+
try {
|
|
123
|
+
sDevName = sDevName.substr(sDevName.indexOf(")") + 1).trim();
|
|
124
|
+
} catch (error) {
|
|
125
|
+
}
|
|
126
|
+
$('#node-input-nameinitial_press').val(sDevName);
|
|
127
|
+
var optVal = $("#node-input-dptinitial_press option:contains('" + ui.item.label.split("#")[2].trim() + "')").attr('value');
|
|
128
|
+
// Select the option value
|
|
129
|
+
$("#node-input-dptinitial_press").val(optVal);
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
// ########################
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
|
|
136
|
+
// DPT repeat
|
|
137
|
+
// ########################
|
|
138
|
+
$.getJSON('knxUltimateDpts', (data) => {
|
|
139
|
+
data.forEach(dpt => {
|
|
140
|
+
if (dpt.value.startsWith("1.") || dpt.value.startsWith("3.007")) {
|
|
141
|
+
$("#node-input-dptrepeat").append($("<option></option>")
|
|
142
|
+
.attr("value", dpt.value)
|
|
143
|
+
.text(dpt.text))
|
|
144
|
+
}
|
|
145
|
+
});
|
|
146
|
+
|
|
147
|
+
$("#node-input-dptrepeat").val(this.dptrepeat)
|
|
148
|
+
})
|
|
149
|
+
|
|
150
|
+
// Autocomplete suggestion with ETS csv File
|
|
151
|
+
$("#node-input-GArepeat").autocomplete({
|
|
152
|
+
minLength: 1,
|
|
153
|
+
source: function (request, response) {
|
|
154
|
+
$.getJSON("knxUltimatecsv?nodeID=" + oNodeServer.id, (data) => {
|
|
155
|
+
response($.map(data, function (value, key) {
|
|
156
|
+
var sSearch = (value.ga + " (" + value.devicename + ") DPT" + value.dpt);
|
|
157
|
+
if (fullSearch(sSearch, request.term)) {
|
|
158
|
+
if (value.dpt.startsWith('1.') || value.dpt.startsWith('3.007')) {
|
|
159
|
+
return {
|
|
160
|
+
label: value.ga + " # " + value.devicename + " # " + value.dpt, // Label for Display
|
|
161
|
+
value: value.ga // Value
|
|
162
|
+
}
|
|
163
|
+
} else { return null; }
|
|
164
|
+
} else {
|
|
165
|
+
return null;
|
|
166
|
+
}
|
|
167
|
+
}));
|
|
168
|
+
});
|
|
169
|
+
}, select: function (event, ui) {
|
|
170
|
+
// Sets Datapoint and device name automatically
|
|
171
|
+
var sDevName = ui.item.label.split("#")[1].trim();
|
|
172
|
+
try {
|
|
173
|
+
sDevName = sDevName.substr(sDevName.indexOf(")") + 1).trim();
|
|
174
|
+
} catch (error) {
|
|
175
|
+
}
|
|
176
|
+
$('#node-input-namerepeat').val(sDevName);
|
|
177
|
+
var optVal = $("#node-input-dptrepeat option:contains('" + ui.item.label.split("#")[2].trim() + "')").attr('value');
|
|
178
|
+
// Select the option value
|
|
179
|
+
$("#node-input-dptrepeat").val(optVal);
|
|
180
|
+
}
|
|
181
|
+
});
|
|
182
|
+
|
|
183
|
+
|
|
184
|
+
// DPT dptshort_release
|
|
185
|
+
// ########################
|
|
186
|
+
$.getJSON('knxUltimateDpts', (data) => {
|
|
187
|
+
data.forEach(dpt => {
|
|
188
|
+
if (dpt.value.startsWith('1.')) {
|
|
189
|
+
$("#node-input-dptshort_release").append($("<option></option>")
|
|
190
|
+
.attr("value", dpt.value)
|
|
191
|
+
.text(dpt.text))
|
|
192
|
+
}
|
|
193
|
+
});
|
|
194
|
+
|
|
195
|
+
$("#node-input-dptshort_release").val(this.dptshort_release)
|
|
196
|
+
|
|
197
|
+
})
|
|
198
|
+
|
|
199
|
+
// Autocomplete suggestion with ETS csv File
|
|
200
|
+
$("#node-input-GAshort_release").autocomplete({
|
|
201
|
+
minLength: 1,
|
|
202
|
+
source: function (request, response) {
|
|
203
|
+
$.getJSON("knxUltimatecsv?nodeID=" + oNodeServer.id, (data) => {
|
|
204
|
+
response($.map(data, function (value, key) {
|
|
205
|
+
var sSearch = (value.ga + " (" + value.devicename + ") DPT" + value.dpt);
|
|
206
|
+
if (fullSearch(sSearch, request.term + " 1.")) {
|
|
207
|
+
return {
|
|
208
|
+
label: value.ga + " # " + value.devicename + " # " + value.dpt, // Label for Display
|
|
209
|
+
value: value.ga // Value
|
|
210
|
+
}
|
|
211
|
+
} else {
|
|
212
|
+
return null;
|
|
213
|
+
}
|
|
214
|
+
}));
|
|
215
|
+
});
|
|
216
|
+
}, select: function (event, ui) {
|
|
217
|
+
// Sets Datapoint and device name automatically
|
|
218
|
+
var sDevName = ui.item.label.split("#")[1].trim();
|
|
219
|
+
try {
|
|
220
|
+
sDevName = sDevName.substr(sDevName.indexOf(")") + 1).trim();
|
|
221
|
+
} catch (error) {
|
|
222
|
+
}
|
|
223
|
+
$('#node-input-nameshort_release').val(sDevName);
|
|
224
|
+
var optVal = $("#node-input-dptshort_release option:contains('" + ui.item.label.split("#")[2].trim() + "')").attr('value');
|
|
225
|
+
// Select the option value
|
|
226
|
+
$("#node-input-dptshort_release").val(optVal);
|
|
227
|
+
}
|
|
228
|
+
});
|
|
229
|
+
|
|
230
|
+
|
|
231
|
+
// DPT dptlong_release and dptLightColorStateƒ
|
|
232
|
+
// ########################
|
|
233
|
+
$.getJSON('knxUltimateDpts', (data) => {
|
|
234
|
+
data.forEach(dpt => {
|
|
235
|
+
if (dpt.value.startsWith('1.')) {
|
|
236
|
+
$("#node-input-dptlong_release").append($("<option></option>")
|
|
237
|
+
.attr("value", dpt.value)
|
|
238
|
+
.text(dpt.text))
|
|
239
|
+
$("#node-input-dptdouble_short_release").append($("<option></option>")
|
|
240
|
+
.attr("value", dpt.value)
|
|
241
|
+
.text(dpt.text))
|
|
242
|
+
}
|
|
243
|
+
});
|
|
244
|
+
|
|
245
|
+
$("#node-input-dptlong_release").val(this.dptlong_release)
|
|
246
|
+
$("#node-input-dptdouble_short_release").val(this.dptdouble_short_release)
|
|
247
|
+
|
|
248
|
+
})
|
|
249
|
+
|
|
250
|
+
// Autocomplete suggestion with ETS csv File
|
|
251
|
+
$("#node-input-GAlong_release").autocomplete({
|
|
252
|
+
minLength: 1,
|
|
253
|
+
source: function (request, response) {
|
|
254
|
+
$.getJSON("knxUltimatecsv?nodeID=" + oNodeServer.id, (data) => {
|
|
255
|
+
response($.map(data, function (value, key) {
|
|
256
|
+
var sSearch = (value.ga + " (" + value.devicename + ") DPT" + value.dpt);
|
|
257
|
+
if (fullSearch(sSearch, request.term + " 1.")) {
|
|
258
|
+
return {
|
|
259
|
+
label: value.ga + " # " + value.devicename + " # " + value.dpt, // Label for Display
|
|
260
|
+
value: value.ga // Value
|
|
261
|
+
}
|
|
262
|
+
} else {
|
|
263
|
+
return null;
|
|
264
|
+
}
|
|
265
|
+
}));
|
|
266
|
+
});
|
|
267
|
+
}, select: function (event, ui) {
|
|
268
|
+
// Sets Datapoint and device name automatically
|
|
269
|
+
var sDevName = ui.item.label.split("#")[1].trim();
|
|
270
|
+
try {
|
|
271
|
+
sDevName = sDevName.substr(sDevName.indexOf(")") + 1).trim();
|
|
272
|
+
} catch (error) {
|
|
273
|
+
}
|
|
274
|
+
$('#node-input-namelong_release').val(sDevName);
|
|
275
|
+
var optVal = $("#node-input-dptlong_release option:contains('" + ui.item.label.split("#")[2].trim() + "')").attr('value');
|
|
276
|
+
// Select the option value
|
|
277
|
+
$("#node-input-dptlong_release").val(optVal);
|
|
278
|
+
}
|
|
279
|
+
});
|
|
280
|
+
|
|
281
|
+
// Autocomplete suggestion with ETS csv File
|
|
282
|
+
$("#node-input-GAdouble_short_release").autocomplete({
|
|
283
|
+
minLength: 1,
|
|
284
|
+
source: function (request, response) {
|
|
285
|
+
$.getJSON("knxUltimatecsv?nodeID=" + oNodeServer.id, (data) => {
|
|
286
|
+
response($.map(data, function (value, key) {
|
|
287
|
+
var sSearch = (value.ga + " (" + value.devicename + ") DPT" + value.dpt);
|
|
288
|
+
if (fullSearch(sSearch, request.term + " 1.")) {
|
|
289
|
+
return {
|
|
290
|
+
label: value.ga + " # " + value.devicename + " # " + value.dpt, // Label for Display
|
|
291
|
+
value: value.ga // Value
|
|
292
|
+
}
|
|
293
|
+
} else {
|
|
294
|
+
return null;
|
|
295
|
+
}
|
|
296
|
+
}));
|
|
297
|
+
});
|
|
298
|
+
}, select: function (event, ui) {
|
|
299
|
+
// Sets Datapoint and device name automatically
|
|
300
|
+
var sDevName = ui.item.label.split("#")[1].trim();
|
|
301
|
+
try {
|
|
302
|
+
sDevName = sDevName.substr(sDevName.indexOf(")") + 1).trim();
|
|
303
|
+
} catch (error) {
|
|
304
|
+
}
|
|
305
|
+
$('#node-input-namedouble_short_release').val(sDevName);
|
|
306
|
+
var optVal = $("#node-input-dptdouble_short_release option:contains('" + ui.item.label.split("#")[2].trim() + "')").attr('value');
|
|
307
|
+
// Select the option value
|
|
308
|
+
$("#node-input-dptdouble_short_release").val(optVal);
|
|
309
|
+
}
|
|
310
|
+
});
|
|
311
|
+
|
|
312
|
+
|
|
313
|
+
|
|
314
|
+
// DPT dptlong_press
|
|
315
|
+
// ########################
|
|
316
|
+
$.getJSON('knxUltimateDpts', (data) => {
|
|
317
|
+
data.forEach(dpt => {
|
|
318
|
+
if (dpt.value.startsWith('1.')) {
|
|
319
|
+
$("#node-input-dptlong_press").append($("<option></option>")
|
|
320
|
+
.attr("value", dpt.value)
|
|
321
|
+
.text(dpt.text))
|
|
322
|
+
}
|
|
323
|
+
});
|
|
324
|
+
|
|
325
|
+
$("#node-input-dptlong_press").val(this.dptlong_press)
|
|
326
|
+
|
|
327
|
+
})
|
|
328
|
+
|
|
329
|
+
// Autocomplete suggestion with ETS csv File
|
|
330
|
+
$("#node-input-GAlong_press").autocomplete({
|
|
331
|
+
minLength: 1,
|
|
332
|
+
source: function (request, response) {
|
|
333
|
+
$.getJSON("knxUltimatecsv?nodeID=" + oNodeServer.id, (data) => {
|
|
334
|
+
response($.map(data, function (value, key) {
|
|
335
|
+
var sSearch = (value.ga + " (" + value.devicename + ") DPT" + value.dpt);
|
|
336
|
+
if (fullSearch(sSearch, request.term + " 1.")) {
|
|
337
|
+
return {
|
|
338
|
+
label: value.ga + " # " + value.devicename + " # " + value.dpt, // Label for Display
|
|
339
|
+
value: value.ga // Value
|
|
340
|
+
}
|
|
341
|
+
} else {
|
|
342
|
+
return null;
|
|
343
|
+
}
|
|
344
|
+
}));
|
|
345
|
+
});
|
|
346
|
+
}, select: function (event, ui) {
|
|
347
|
+
// Sets Datapoint and device name automatically
|
|
348
|
+
var sDevName = ui.item.label.split("#")[1].trim();
|
|
349
|
+
try {
|
|
350
|
+
sDevName = sDevName.substr(sDevName.indexOf(")") + 1).trim();
|
|
351
|
+
} catch (error) {
|
|
352
|
+
}
|
|
353
|
+
$('#node-input-namelong_press').val(sDevName);
|
|
354
|
+
var optVal = $("#node-input-dptlong_press option:contains('" + ui.item.label.split("#")[2].trim() + "')").attr('value');
|
|
355
|
+
// Select the option value
|
|
356
|
+
$("#node-input-dptlong_press").val(optVal);
|
|
357
|
+
}
|
|
358
|
+
});
|
|
359
|
+
|
|
360
|
+
|
|
361
|
+
|
|
362
|
+
|
|
363
|
+
|
|
364
|
+
|
|
365
|
+
// Autocomplete suggestion with HUE Lights
|
|
366
|
+
$("#node-input-name").autocomplete({
|
|
367
|
+
minLength: 1,
|
|
368
|
+
source: function (request, response) {
|
|
369
|
+
$.getJSON("KNXUltimateGetDevicesHUE?rtype=button&nodeID=" + oNodeServerHue.id, (data) => {
|
|
370
|
+
response($.map(data.devices, function (value, key) {
|
|
371
|
+
//alert(JSON.stringify(value) + " "+ key)
|
|
372
|
+
var sSearch = (value.name);
|
|
373
|
+
if (fullSearch(sSearch, request.term)) {
|
|
374
|
+
return {
|
|
375
|
+
hueDevice: value.id, // Label for Display
|
|
376
|
+
value: value.name // Value
|
|
377
|
+
}
|
|
378
|
+
} else {
|
|
379
|
+
return null;
|
|
380
|
+
}
|
|
381
|
+
}));
|
|
382
|
+
});
|
|
383
|
+
}, select: function (event, ui) {
|
|
384
|
+
// Sets the fields
|
|
385
|
+
$('#node-input-hueDevice').val(ui.item.hueDevice);
|
|
386
|
+
}
|
|
387
|
+
});
|
|
388
|
+
|
|
389
|
+
|
|
390
|
+
// ########################
|
|
391
|
+
|
|
392
|
+
|
|
393
|
+
},
|
|
394
|
+
oneditsave: function () {
|
|
395
|
+
|
|
396
|
+
|
|
397
|
+
},
|
|
398
|
+
oneditcancel: function () {
|
|
399
|
+
|
|
400
|
+
}
|
|
401
|
+
})
|
|
402
|
+
|
|
403
|
+
</script>
|
|
404
|
+
|
|
405
|
+
<script type="text/x-red" data-template-name="knxUltimateHueButton">
|
|
406
|
+
|
|
407
|
+
|
|
408
|
+
<div class="form-row">
|
|
409
|
+
<b>HUE Light</b>  <span style="color:red"
|
|
410
|
+
 <i class="fa fa-question-circle"></i></span>
|
|
411
|
+
 <a target="_blank" href="https://github.com/Supergiovane/node-red-contrib-knx-ultimate/wiki/en-hue-configuration"><u>Configuration</u></a>
|
|
412
|
+
<br />
|
|
413
|
+
<p align="center"><img src='https://raw.githubusercontent.com/Supergiovane/node-red-contrib-knx-ultimate/master/img/hueButton.png'></p>
|
|
414
|
+
<br />
|
|
415
|
+
<label for="node-input-server" >
|
|
416
|
+
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAKnRFWHRDcmVhdGlvbiBUaW1lAEZyIDYgQXVnIDIwMTAgMjE6NTI6MTkgKzAxMDD84aS8AAAAB3RJTUUH3gYYCicNV+4WIQAAAAlwSFlzAAALEgAACxIB0t1+/AAAAARnQU1BAACxjwv8YQUAAACUSURBVHjaY2CgFZg5c+Z/ZEyWAZ8+f/6/ZsWs/xoamqMGkGrA6Wla/1+fVARjEBuGsSoGmY4eZSCNL59d/g8DIDbIAHR14OgFGQByKjIGKX5+6/T///8gGMQGiV1+/B0Fg70GIkD+RMYgxf/O5/7//2MSmAZhkBi6OrgB6Bg5DGB4ajr3f2xqsYYLSDE2THJUDg0AAAqyDVd4tp4YAAAAAElFTkSuQmCC"></img>
|
|
417
|
+
KNX GW
|
|
418
|
+
</label>
|
|
419
|
+
<input type="text" id="node-input-server" />
|
|
420
|
+
</div>
|
|
421
|
+
|
|
422
|
+
<div class="form-row">
|
|
423
|
+
<label for="node-input-serverHue">
|
|
424
|
+
<img src="data:image/png;base64, iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAEKADAAQAAAABAAAAEAAAAAA0VXHyAAABFUlEQVQ4EZWSsWoCQRCG1yiENEFEi6QSkjqWWoqFoBYJ+Br6JHkMn8Iibd4ihQpaJIhWNkry/ZtdGZY78Qa+m39nZ+dm9s4550awglNBluS/gVtAX6KgDclf68w2OThgfR9iT/jnoEv4TtByDThWTCDKW4SSZTf/zj9/eZbN+izTDuKGimu0vPF8B/YN8aC8LmcOj/AAn9CFTEs70Js/oGqy79C69bqJ5XbQI2kGO5N8QL9D08S8zBtBF5ZaVsznpCMoqJnVdjTpb1Db0fwIWmQV6BLXzFOYgA6/gDVfQN9bBWp2J2hdWDPoBV5FrKnAJutHikk/CHHR8i7x4iG7qQ720IYvu3GFbpHjx3pFrOFYkA354z/5bkK826phyAAAAABJRU5ErkJggg=="/>
|
|
425
|
+
HUE Bridge
|
|
426
|
+
</label>
|
|
427
|
+
<input type="text" id="node-input-serverHue" />
|
|
428
|
+
</div>
|
|
429
|
+
|
|
430
|
+
<br/>
|
|
431
|
+
<p>
|
|
432
|
+
<b>Philips HUE</b>
|
|
433
|
+
</p>
|
|
434
|
+
|
|
435
|
+
<div class="form-row">
|
|
436
|
+
<label for="node-input-hueDevice" >
|
|
437
|
+
<i class="fa fa-play-circle"></i> Hue Button</label>
|
|
438
|
+
<input type="text" id="node-input-name" placeholder="Enter your hue device name" />
|
|
439
|
+
<input type="hidden" id="node-input-hueDevice" />
|
|
440
|
+
</div>
|
|
441
|
+
|
|
442
|
+
<br/>
|
|
443
|
+
|
|
444
|
+
<!-- <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> -->
|
|
445
|
+
|
|
446
|
+
<p>
|
|
447
|
+
<b>PHILIPS HUE BUTTON EVENTS -> TO KNX</b>
|
|
448
|
+
</p>
|
|
449
|
+
|
|
450
|
+
<div class="form-row">
|
|
451
|
+
<label for="node-input-nameinitial_press" style="width:100px;"><i class="fa fa-play-circle-o"></i> Initial press</span></label>
|
|
452
|
+
|
|
453
|
+
<label for="node-input-GAinitial_press" style="width:20px;">GA</label>
|
|
454
|
+
<input type="text" id="node-input-GAinitial_press" placeholder="Ex: 1/1/1" style="width:70px;margin-left: 5px; text-align: left;">
|
|
455
|
+
|
|
456
|
+
<label for="node-input-dptinitial_press" style="width:40px; margin-left: 0px; text-align: right;">dpt</label>
|
|
457
|
+
<select id="node-input-dptinitial_press" style="width:140px;"></select>
|
|
458
|
+
|
|
459
|
+
<label for="node-input-nameinitial_press" style="width:50px; margin-left: 0px; text-align: right;">Name</label>
|
|
460
|
+
<input type="text" id="node-input-nameinitial_press" style="width:200px;margin-left: 5px; text-align: left;">
|
|
461
|
+
</div>
|
|
462
|
+
|
|
463
|
+
<div class="form-row">
|
|
464
|
+
<label for="node-input-namerepeat" style="width:100px;"><i class="fa fa-play-circle-o"></i> Repeat</span></label>
|
|
465
|
+
|
|
466
|
+
<label for="node-input-GArepeat" style="width:20px;">GA</label>
|
|
467
|
+
<input type="text" id="node-input-GArepeat" placeholder="Ex: 1/1/1" style="width:70px;margin-left: 5px; text-align: left;">
|
|
468
|
+
|
|
469
|
+
<label for="node-input-dptrepeat" style="width:40px; margin-left: 0px; text-align: right;">dpt</label>
|
|
470
|
+
<select id="node-input-dptrepeat" style="width:140px;"></select>
|
|
471
|
+
|
|
472
|
+
<label for="node-input-namerepeat" style="width:50px; margin-left: 0px; text-align: right;">Name</label>
|
|
473
|
+
<input type="text" id="node-input-namerepeat" style="width:200px;margin-left: 5px; text-align: left;">
|
|
474
|
+
</div>
|
|
475
|
+
|
|
476
|
+
<div class="form-row">
|
|
477
|
+
<label for="node-input-nameshort_release" style="width:100px;"><i class="fa fa-play-circle-o"></i> Short release</label>
|
|
478
|
+
|
|
479
|
+
<label for="node-input-GAhort_release" style="width:20px;">GA</label>
|
|
480
|
+
<input type="text" id="node-input-GAshort_release" placeholder="Ex: 1/1/1" style="width:70px;margin-left: 5px; text-align: left;">
|
|
481
|
+
|
|
482
|
+
<label for="node-input-dptshort_release" style="width:40px; margin-left: 0px; text-align: right;">dpt</label>
|
|
483
|
+
<select id="node-input-dptshort_release" style="width:140px;"></select>
|
|
484
|
+
|
|
485
|
+
<label for="node-input-nameshort_release" style="width:50px; margin-left: 0px; text-align: right;">Name</label>
|
|
486
|
+
<input type="text" id="node-input-nameshort_release" style="width:200px;margin-left: 5px; text-align: left;">
|
|
487
|
+
</div>
|
|
488
|
+
|
|
489
|
+
<div class="form-row">
|
|
490
|
+
<label for="node-input-namelong_release" style="width:100px;"><i class="fa fa-play-circle-o"></i> Long release</label>
|
|
491
|
+
|
|
492
|
+
<label for="node-input-GAhort_release" style="width:20px;">GA</label>
|
|
493
|
+
<input type="text" id="node-input-GAlong_release" placeholder="Ex: 1/1/1" style="width:70px;margin-left: 5px; text-align: left;">
|
|
494
|
+
|
|
495
|
+
<label for="node-input-dptlong_release" style="width:40px; margin-left: 0px; text-align: right;">dpt</label>
|
|
496
|
+
<select id="node-input-dptlong_release" style="width:140px;"></select>
|
|
497
|
+
|
|
498
|
+
<label for="node-input-namelong_release" style="width:50px; margin-left: 0px; text-align: right;">Name</label>
|
|
499
|
+
<input type="text" id="node-input-namelong_release" style="width:200px;margin-left: 5px; text-align: left;">
|
|
500
|
+
</div>
|
|
501
|
+
|
|
502
|
+
<div class="form-row">
|
|
503
|
+
<label for="node-input-namedouble_short_release" style="width:100px;"><i class="fa fa-play-circle-o"></i> Double short release</label>
|
|
504
|
+
|
|
505
|
+
<label for="node-input-GAdouble_short_release" style="width:20px;">GA</label>
|
|
506
|
+
<input type="text" id="node-input-GAdouble_short_release" placeholder="Ex: 1/1/1" style="width:70px;margin-left: 5px; text-align: left;">
|
|
507
|
+
|
|
508
|
+
<label for="node-input-dptdouble_short_release" style="width:40px; margin-left: 0px; text-align: right;">dpt</label>
|
|
509
|
+
<select id="node-input-dptdouble_short_release" style="width:140px;"></select>
|
|
510
|
+
|
|
511
|
+
<label for="node-input-namedouble_short_release" style="width:50px; margin-left: 0px; text-align: right;"><span data-i18n="knxUltimateHueButton.node-input-name"></span></label>
|
|
512
|
+
<input type="text" id="node-input-namedouble_short_release" style="width:200px;margin-left: 5px; text-align: left;">
|
|
513
|
+
</div>
|
|
514
|
+
|
|
515
|
+
<div class="form-row">
|
|
516
|
+
<label for="node-input-namelong_press" style="width:100px;"><i class="fa fa-play-circle-o"></i> Long press</label>
|
|
517
|
+
|
|
518
|
+
<label for="node-input-GAhort_release" style="width:20px;">GA</label>
|
|
519
|
+
<input type="text" id="node-input-GAlong_press" placeholder="Ex: 1/1/1" style="width:70px;margin-left: 5px; text-align: left;">
|
|
520
|
+
|
|
521
|
+
<label for="node-input-dptlong_press" style="width:40px; margin-left: 0px; text-align: right;">dpt</label>
|
|
522
|
+
<select id="node-input-dptlong_press" style="width:140px;"></select>
|
|
523
|
+
|
|
524
|
+
<label for="node-input-namelong_press" style="width:50px; margin-left: 0px; text-align: right;">Name</label>
|
|
525
|
+
<input type="text" id="node-input-namelong_press" style="width:200px;margin-left: 5px; text-align: left;">
|
|
526
|
+
</div>
|
|
527
|
+
|
|
528
|
+
<div class="form-row">
|
|
529
|
+
<input type="checkbox" id="node-input-toggleValues" style="display:inline-block; width:auto; vertical-align:top;" />
|
|
530
|
+
<label style="width:auto" for="node-input-toggleValues">
|
|
531
|
+
<img
|
|
532
|
+
src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAAACXBIWXMAAB7CAAAewgFu0HU+AAAFGmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDggNzkuMTY0MDM2LCAyMDE5LzA4LzEzLTAxOjA2OjU3ICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgMjEuMSAoTWFjaW50b3NoKSIgeG1wOkNyZWF0ZURhdGU9IjIwMjAtMDMtMjNUMTY6MjM6MjMrMDE6MDAiIHhtcDpNb2RpZnlEYXRlPSIyMDIwLTAzLTIzVDE2OjI1OjM0KzAxOjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDIwLTAzLTIzVDE2OjI1OjM0KzAxOjAwIiBkYzpmb3JtYXQ9ImltYWdlL3BuZyIgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIgcGhvdG9zaG9wOklDQ1Byb2ZpbGU9InNSR0IgSUVDNjE5NjYtMi4xIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOmJmNGM3NWVjLTIwNGYtNGY1YS05YTMxLTQ5NTU5YWJmZDE4NSIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpiZjRjNzVlYy0yMDRmLTRmNWEtOWEzMS00OTU1OWFiZmQxODUiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpiZjRjNzVlYy0yMDRmLTRmNWEtOWEzMS00OTU1OWFiZmQxODUiPiA8eG1wTU06SGlzdG9yeT4gPHJkZjpTZXE+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjcmVhdGVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOmJmNGM3NWVjLTIwNGYtNGY1YS05YTMxLTQ5NTU5YWJmZDE4NSIgc3RFdnQ6d2hlbj0iMjAyMC0wMy0yM1QxNjoyMzoyMyswMTowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiLz4gPC9yZGY6U2VxPiA8L3htcE1NOkhpc3Rvcnk+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+nhtLUgAAAE9JREFUKJG1UMsOACAIgub//7IdqvVQtjrExU1EEQLuiGCvgTNgl5D74MmVZPu4wIxQAgm+/sDec2VhgQPgf0sq1unjMlYJE/3MZrvy+kMFZQkZEWfC7ikAAAAASUVORK5CYII="></img>
|
|
533
|
+
Toggle values
|
|
534
|
+
</label>
|
|
535
|
+
</div>
|
|
536
|
+
|
|
537
|
+
</div>
|
|
538
|
+
|
|
539
|
+
|
|
540
|
+
<br/>
|
|
541
|
+
<br/>
|
|
542
|
+
<br/>
|
|
543
|
+
<br/>
|
|
544
|
+
<br/>
|
|
545
|
+
<br/>
|
|
546
|
+
<br/>
|
|
547
|
+
<br/>
|
|
548
|
+
|
|
549
|
+
|
|
550
|
+
</script>
|
|
551
|
+
|
|
552
|
+
<script type="text/markdown" data-help-name="knxUltimateHueButton">
|
|
553
|
+
|
|
554
|
+
[Find it useful?](https://www.paypal.me/techtoday)
|
|
555
|
+
|
|
556
|
+
This node lets you get the events of your HUE button.<br/>
|
|
557
|
+
There are many event you can choose from. The relevants one are *short release* and *repeat*.<br/>
|
|
558
|
+
In *short release* you can send true/false to your KNX group address to, for example, toggle a light.<br/>
|
|
559
|
+
In *repeat* event, you can DIM a KNX light.<br/>
|
|
560
|
+
The **toggle values** option is enabled by default. This option toggles the value of each KNX group address (*true/false, increase/decrease dim*))
|
|
561
|
+
|
|
562
|
+
**General**
|
|
563
|
+
|Property|Description|
|
|
564
|
+
|--|--|
|
|
565
|
+
| KNX GW | Select the KNX gateway to be used |
|
|
566
|
+
| HUE Bridge | Select the HUE Bridge to be used |
|
|
567
|
+
| Hue Button | HUE button to be used. The avaiable buttons start showing up while you're typing.|
|
|
568
|
+
|
|
569
|
+
<br/>
|
|
570
|
+
|
|
571
|
+
**PHILIPS HUE BUTTON EVENTS -> TO KNX**
|
|
572
|
+
Here you can get the HUE button events.<br/>
|
|
573
|
+
Start typing in the GA field, the name or group address of your KNX device, the avaiable devices start showing up while you're typing.
|
|
574
|
+
|
|
575
|
+
|Property|Description|
|
|
576
|
+
|--|--|
|
|
577
|
+
| Initial press | As soon as you press your HUE button, this event fires|
|
|
578
|
+
| Repeat | This command is used either to send DIM (increase/decrease) or true/false commands to the KNX group address |
|
|
579
|
+
| Short release | Rapid push of the button, fired as soon as you release your finger from the button. Usually used to toggle a KNX light true/false |
|
|
580
|
+
| Long release | Long press of the button, fired as soon as you release your finger from the button |
|
|
581
|
+
| Long press | Long press of the button, fired as soon as you long press the button |
|
|
582
|
+
| Toggle values | Enable or disable toggling values. If enabled, all values toggles, otherwise, all values are sent as *true* or *increase dim*, to the selected KNX group address. |
|
|
583
|
+
|
|
584
|
+
|
|
585
|
+
<br/>
|
|
586
|
+
</script>
|