node-red-contrib-knx-ultimate 2.1.63 → 2.2.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.
@@ -1,106 +1,107 @@
1
1
  <script type="text/javascript">
2
- RED.nodes.registerType('knxUltimateHueLight', {
3
- category: "KNX Ultimate",
4
- color: '#C0C7E9',
5
- defaults: {
6
- //buttonState: {value: true},
7
- server: { type: "knxUltimate-config", required: true },
8
- serverHue: { type: "hue-config", required: true },
9
- name: { value: "" },
10
-
11
- nameLightSwitch: { value: "" },
12
- GALightSwitch: { value: "" },
13
- dptLightSwitch: { value: "" },
14
-
15
- nameLightState: { value: "" },
16
- GALightState: { value: "" },
17
- dptLightState: { value: "" },
18
-
19
- nameLightDIM: { value: "" },
20
- GALightDIM: { value: "" },
21
- dptLightDIM: { value: "" },
22
-
23
- nameLightColor: { value: "" },
24
- GALightColor: { value: "" },
25
- dptLightColor: { value: "" },
26
-
27
- nameLightColorState: { value: "" },
28
- GALightColorState: { value: "" },
29
- dptLightColorState: { value: "" },
30
-
31
- nameLightHSV: { value: "" },
32
- GALightHSV: { value: "" },
33
- dptLightHSV: { value: "" },
34
-
35
- nameLightHSVPercentage: { value: "" },
36
- GALightHSVPercentage: { value: "" },
37
- dptLightHSVPercentage: { value: "" },
38
-
39
- nameLightHSVState: { value: "" },
40
- GALightHSVState: { value: "" },
41
- dptLightHSVState: { value: "" },
42
-
43
- nameLightBrightness: { value: "" },
44
- GALightBrightness: { value: "" },
45
- dptLightBrightness: { value: "" },
46
-
47
- nameLightBrightnessState: { value: "" },
48
- GALightBrightnessState: { value: "" },
49
- dptLightBrightnessState: { value: "" },
50
-
51
- nameLightBlink: { value: "" },
52
- GALightBlink: { value: "" },
53
- dptLightBlink: { value: "" },
54
-
55
- nameLightColorCycle: { value: "" },
56
- GALightColorCycle: { value: "" },
57
- dptLightColorCycle: { value: "" },
58
-
59
- enableDayNightLighting: { value: "no" },
60
- colorAtSwitchOnDayTime: { value: '{"red":255, "green":255, "blue":255}' },
61
- colorAtSwitchOnNightTime: { value: '{"red":23, "green":4, "blue":0}' },
62
- invertDayNight: { value: false },
63
-
64
- nameDaylightSensor: { value: "" },
65
- GADaylightSensor: { value: "" },
66
- dptDaylightSensor: { value: "" },
67
-
68
- specifySwitchOnBrightness: { value: "yes" },
69
- updateKNXBrightnessStatusOnHUEOnOff: { value: "onhueoff" },
70
-
71
- hueDevice: { value: "" }
72
- },
73
- inputs: 0,
74
- outputs: 0,
75
- icon: "node-hue-icon.svg",
76
- label: function () {
77
- return (this.name);
78
- },
79
- paletteLabel: "Hue Light",
80
- // button: {
81
- // enabled: function() {
82
- // // return whether or not the button is enabled, based on the current
83
- // // configuration of the node
84
- // return !this.changed
85
- // },
86
- // visible: function() {
87
- // // return whether or not the button is visible, based on the current
88
- // // configuration of the node
89
- // return this.hasButton
90
- // },
91
- // //toggle: "buttonState",
92
- // onclick: function() {}
93
- // },
94
- oneditprepare: function () {
95
- var node = this;
96
- var oNodeServer = RED.nodes.node($("#node-input-server").val()); // Store the config-node
97
- var oNodeServerHue = RED.nodes.node($("#node-input-serverHue").val()); // Store the config-node
98
-
99
-
100
-
101
- // Create the TAB in Node-Red
102
- // ####################################
103
- const content = `<html>
2
+ RED.nodes.registerType("knxUltimateHueLight", {
3
+ category: "KNX Ultimate",
4
+ color: "#C0C7E9",
5
+ defaults: {
6
+ //buttonState: {value: true},
7
+ server: { type: "knxUltimate-config", required: true },
8
+ serverHue: { type: "hue-config", required: true },
9
+ name: { value: "" },
10
+
11
+ nameLightSwitch: { value: "" },
12
+ GALightSwitch: { value: "" },
13
+ dptLightSwitch: { value: "" },
14
+
15
+ nameLightState: { value: "" },
16
+ GALightState: { value: "" },
17
+ dptLightState: { value: "" },
18
+
19
+ nameLightDIM: { value: "" },
20
+ GALightDIM: { value: "" },
21
+ dptLightDIM: { value: "" },
22
+
23
+ nameLightColor: { value: "" },
24
+ GALightColor: { value: "" },
25
+ dptLightColor: { value: "" },
26
+
27
+ nameLightColorState: { value: "" },
28
+ GALightColorState: { value: "" },
29
+ dptLightColorState: { value: "" },
30
+
31
+ nameLightHSV: { value: "" },
32
+ GALightHSV: { value: "" },
33
+ dptLightHSV: { value: "" },
34
+
35
+ nameLightHSVPercentage: { value: "" },
36
+ GALightHSVPercentage: { value: "" },
37
+ dptLightHSVPercentage: { value: "" },
38
+
39
+ nameLightHSVState: { value: "" },
40
+ GALightHSVState: { value: "" },
41
+ dptLightHSVState: { value: "" },
42
+
43
+ nameLightBrightness: { value: "" },
44
+ GALightBrightness: { value: "" },
45
+ dptLightBrightness: { value: "" },
46
+
47
+ nameLightBrightnessState: { value: "" },
48
+ GALightBrightnessState: { value: "" },
49
+ dptLightBrightnessState: { value: "" },
50
+
51
+ nameLightBlink: { value: "" },
52
+ GALightBlink: { value: "" },
53
+ dptLightBlink: { value: "" },
54
+
55
+ nameLightColorCycle: { value: "" },
56
+ GALightColorCycle: { value: "" },
57
+ dptLightColorCycle: { value: "" },
58
+
59
+ enableDayNightLighting: { value: "no" },
60
+ colorAtSwitchOnDayTime: { value: '{"red":255, "green":255, "blue":255}' },
61
+ colorAtSwitchOnNightTime: { value: '{"red":23, "green":4, "blue":0}' },
62
+ invertDayNight: { value: false },
63
+
64
+ nameDaylightSensor: { value: "" },
65
+ GADaylightSensor: { value: "" },
66
+ dptDaylightSensor: { value: "" },
67
+
68
+ specifySwitchOnBrightness: { value: "yes" },
69
+ updateKNXBrightnessStatusOnHUEOnOff: { value: "onhueoff" },
70
+ dimSpeed: { value: 5000, required: false },
71
+ minDimLevelLight: { value: 10, required: false },
72
+ maxDimLevelLight: { value: 100, required: false },
73
+
74
+ hueDevice: { value: "" },
75
+ },
76
+ inputs: 0,
77
+ outputs: 0,
78
+ icon: "node-hue-icon.svg",
79
+ label: function () {
80
+ return this.name;
81
+ },
82
+ paletteLabel: "Hue Light",
83
+ // button: {
84
+ // enabled: function() {
85
+ // // return whether or not the button is enabled, based on the current
86
+ // // configuration of the node
87
+ // return !this.changed
88
+ // },
89
+ // visible: function() {
90
+ // // return whether or not the button is visible, based on the current
91
+ // // configuration of the node
92
+ // return this.hasButton
93
+ // },
94
+ // //toggle: "buttonState",
95
+ // onclick: function() {}
96
+ // },
97
+ oneditprepare: function () {
98
+ var node = this;
99
+ var oNodeServer = RED.nodes.node($("#node-input-server").val()); // Store the config-node
100
+ var oNodeServerHue = RED.nodes.node($("#node-input-serverHue").val()); // Store the config-node
101
+
102
+ // Create the TAB in Node-Red
103
+ // ####################################
104
+ const content = `<html>
104
105
 
105
106
  <head>
106
107
  <div class="red-ui-sidebar-header">Color Selector</div>
@@ -133,747 +134,795 @@
133
134
  </html>
134
135
  `;
135
136
 
136
- // COLOR BAR HANDLING ###########################
137
- RED.sidebar.addTab({
138
- id: "tabNRColor",
139
- label: "Color Picker",
140
- name: "Color Picker",
141
- iconClass: "fa fa-pencil",
142
- content: content,
143
- enableOnEdit: true
144
- });
145
-
146
- // Temperature
147
- node.kelvinPicker = new iro.ColorPicker("#kelvinPicker", {
148
- width: 250,
149
- color: "rgb(255, 0, 0)",
150
- borderWidth: 1,
151
- borderColor: "#fff",
152
- layoutDirection: 'vertical',
153
- layout: [
154
- {
155
- component: iro.ui.Slider,
156
- options: {
157
- sliderType: 'kelvin',
158
- sliderSize: 20,
159
- }
160
- },
161
- ]
162
- });
163
- // color:change callbacks receive the current color
164
- node.kelvinPicker.on("color:change", function (color) {
165
- const resultRGBForNode = '{"red": ' + color.rgb.r + ', "green": ' + color.rgb.g + ', "blue": ' + color.rgb.b + '}';
166
- $("#resultRGB").val(resultRGBForNode)
167
- });
168
-
169
-
170
- // Color
171
- node.colorPicker = new iro.ColorPicker("#colorPicker", {
172
- width: 250,
173
- color: "rgb(255, 0, 0)",
174
- borderWidth: 1,
175
- borderColor: "#fff",
176
- layout: [
177
- {
178
- component: iro.ui.Box,
179
- },
180
- {
181
- component: iro.ui.Slider,
182
- options: {
183
- id: 'hue-slider',
184
- sliderType: 'hue'
185
- }
186
- }
187
- ]
188
- });
189
- // color:change callbacks receive the current color
190
- node.colorPicker.on("color:change", function (color) {
191
- // Transform to compatible value for the node { "red": 255, "green": 255, "blue": 255 }
192
- const resultRGBForNode = '{"red": ' + color.rgb.r + ', "green": ' + color.rgb.g + ', "blue": ' + color.rgb.b + '}';
193
- $("#resultRGB").val(resultRGBForNode)
194
- });
195
- $("#resultRGB").on("keyup", function () {
196
- setIroColor()
197
- });
198
- function setIroColor() {
199
- try {
200
- const color = JSON.parse($("#resultRGB").val())
201
- node.colorPicker.color.setChannel('rgb', 'r', color.red);
202
- node.colorPicker.color.setChannel('rgb', 'g', color.green);
203
- node.colorPicker.color.setChannel('rgb', 'b', color.blue);
204
- } catch (error) { }
137
+ // COLOR BAR HANDLING ###########################
138
+ RED.sidebar.addTab({
139
+ id: "tabNRColor",
140
+ label: "Color Picker",
141
+ name: "Color Picker",
142
+ iconClass: "fa fa-pencil",
143
+ content: content,
144
+ enableOnEdit: true,
145
+ });
146
+
147
+ // Temperature
148
+ node.kelvinPicker = new iro.ColorPicker("#kelvinPicker", {
149
+ width: 250,
150
+ color: "rgb(255, 0, 0)",
151
+ borderWidth: 1,
152
+ borderColor: "#fff",
153
+ layoutDirection: "vertical",
154
+ layout: [
155
+ {
156
+ component: iro.ui.Slider,
157
+ options: {
158
+ sliderType: "kelvin",
159
+ sliderSize: 20,
160
+ },
161
+ },
162
+ ],
163
+ });
164
+ // color:change callbacks receive the current color
165
+ node.kelvinPicker.on("color:change", function (color) {
166
+ const resultRGBForNode = '{"red": ' + color.rgb.r + ', "green": ' + color.rgb.g + ', "blue": ' + color.rgb.b + "}";
167
+ $("#resultRGB").val(resultRGBForNode);
168
+ });
169
+
170
+ // Color
171
+ node.colorPicker = new iro.ColorPicker("#colorPicker", {
172
+ width: 250,
173
+ color: "rgb(255, 0, 0)",
174
+ borderWidth: 1,
175
+ borderColor: "#fff",
176
+ layout: [
177
+ {
178
+ component: iro.ui.Box,
179
+ },
180
+ {
181
+ component: iro.ui.Slider,
182
+ options: {
183
+ id: "hue-slider",
184
+ sliderType: "hue",
185
+ },
186
+ },
187
+ ],
188
+ });
189
+ // color:change callbacks receive the current color
190
+ node.colorPicker.on("color:change", function (color) {
191
+ // Transform to compatible value for the node { "red": 255, "green": 255, "blue": 255 }
192
+ const resultRGBForNode = '{"red": ' + color.rgb.r + ', "green": ' + color.rgb.g + ', "blue": ' + color.rgb.b + "}";
193
+ $("#resultRGB").val(resultRGBForNode);
194
+ });
195
+ $("#resultRGB").on("keyup", function () {
196
+ setIroColor();
197
+ });
198
+ function setIroColor() {
199
+ try {
200
+ const color = JSON.parse($("#resultRGB").val());
201
+ node.colorPicker.color.setChannel("rgb", "r", color.red);
202
+ node.colorPicker.color.setChannel("rgb", "g", color.green);
203
+ node.colorPicker.color.setChannel("rgb", "b", color.blue);
204
+ } catch (error) { }
205
+ }
206
+ // Copy to clipboard button
207
+ $("#tabNRColor_colorSelectorTABApplyTextButton").on("click", function () {
208
+ // const aa = $("#resultRGB").val()
209
+ // navigator.clipboard.writeText(aa)
210
+ const destTextBox = "#" + $("#tabNRColor_destinationTextbox").val();
211
+ const resultRGB = $("#resultRGB").val();
212
+ $(destTextBox).val(resultRGB);
213
+ // Flash the destination control
214
+ $(destTextBox).css("background-color", "lightgreen");
215
+ $("#tabNRColor_divApplyCancel").hide();
216
+ RED.sidebar.show("help");
217
+ setTimeout(() => {
218
+ $(destTextBox).css("background-color", "");
219
+ }, 500);
220
+ });
221
+ $("#tabNRColor_colorSelectorTABCancelTextButton").on("click", function () {
222
+ $("#tabNRColor_destinationTextbox").val("");
223
+ RED.sidebar.show("help");
224
+ $("#tabNRColor_divApplyCancel").hide();
225
+ });
226
+ $("#node-input-colorAtSwitchOnDayTime").on("focus", function () {
227
+ RED.sidebar.show("tabNRColor"); // Node-Red custom color TAB
228
+ $("#tabNRColor_destinationTextbox").val("node-input-colorAtSwitchOnDayTime");
229
+ $("#tabNRColor_divApplyCancel").show();
230
+ const color = $("#node-input-colorAtSwitchOnDayTime").val();
231
+ $("#resultRGB").val(color);
232
+ setIroColor();
233
+ });
234
+ // $("#node-input-colorAtSwitchOnDayTime").on("blur", function () {
235
+ // RED.sidebar.show("help");
236
+ // });
237
+ $("#node-input-colorAtSwitchOnNightTime").on("focus", function () {
238
+ RED.sidebar.show("tabNRColor"); // Node-Red custom color TAB
239
+ $("#tabNRColor_destinationTextbox").val("node-input-colorAtSwitchOnNightTime");
240
+ $("#tabNRColor_divApplyCancel").show();
241
+ const color = $("#node-input-colorAtSwitchOnNightTime").val();
242
+ $("#resultRGB").val(color);
243
+ setIroColor();
244
+ });
245
+ // ####################################
246
+
247
+ $("#tabs").tabs(); // Tabs gestione KNX
248
+
249
+ // 19/02/2020 Used to get the server sooner als deploy.
250
+ $("#node-input-server").change(function () {
251
+ try {
252
+ oNodeServer = RED.nodes.node($(this).val());
253
+ } catch (error) { }
254
+ });
255
+ // 19/02/2020 Used to get the server sooner als deploy.
256
+ $("#node-input-serverHue").change(function () {
257
+ try {
258
+ oNodeServerHue = RED.nodes.node($(this).val());
259
+ } catch (error) { }
260
+ });
261
+
262
+ // 31/03/2020 Search Helper
263
+ function fullSearch(sourceText, searchString) {
264
+ // This searches for all words in a string
265
+ var aSearchWords = searchString.toLowerCase().split(" ");
266
+ var i = 0;
267
+ for (let index = 0; index < aSearchWords.length; index++) {
268
+ if (sourceText.toLowerCase().indexOf(aSearchWords[index]) > -1) i += 1;
269
+ }
270
+ return i == aSearchWords.length;
271
+ }
272
+
273
+ function getDPT(_dpt, _destinationWidget) {
274
+ // DPT Switch command
275
+ // ########################
276
+ $.getJSON("knxUltimateDpts", (data) => {
277
+ data.forEach((dpt) => {
278
+ if (dpt.value.startsWith(_dpt)) {
279
+ $(_destinationWidget).append($("<option></option>").attr("value", dpt.value).text(dpt.text));
205
280
  }
206
- // Copy to clipboard button
207
- $("#tabNRColor_colorSelectorTABApplyTextButton").on("click", function () {
208
- // const aa = $("#resultRGB").val()
209
- // navigator.clipboard.writeText(aa)
210
- const destTextBox = "#" + $("#tabNRColor_destinationTextbox").val()
211
- const resultRGB = $("#resultRGB").val()
212
- $(destTextBox).val(resultRGB)
213
- // Flash the destination control
214
- $(destTextBox).css("background-color", "lightgreen");
215
- $("#tabNRColor_divApplyCancel").hide()
216
- RED.sidebar.show("help")
217
- setTimeout(() => {
218
- $(destTextBox).css("background-color", "");
219
- }, 500);
220
- });
221
- $("#tabNRColor_colorSelectorTABCancelTextButton").on("click", function () {
222
- $("#tabNRColor_destinationTextbox").val("")
223
- RED.sidebar.show("help")
224
- $("#tabNRColor_divApplyCancel").hide()
225
- })
226
- $("#node-input-colorAtSwitchOnDayTime").on("focus", function () {
227
- RED.sidebar.show("tabNRColor"); // Node-Red custom color TAB
228
- $("#tabNRColor_destinationTextbox").val("node-input-colorAtSwitchOnDayTime")
229
- $("#tabNRColor_divApplyCancel").show()
230
- const color = $("#node-input-colorAtSwitchOnDayTime").val()
231
- $("#resultRGB").val(color)
232
- setIroColor();
233
- });
234
- // $("#node-input-colorAtSwitchOnDayTime").on("blur", function () {
235
- // RED.sidebar.show("help");
236
- // });
237
- $("#node-input-colorAtSwitchOnNightTime").on("focus", function () {
238
- RED.sidebar.show("tabNRColor"); // Node-Red custom color TAB
239
- $("#tabNRColor_destinationTextbox").val("node-input-colorAtSwitchOnNightTime")
240
- $("#tabNRColor_divApplyCancel").show()
241
- const color = $("#node-input-colorAtSwitchOnNightTime").val()
242
- $("#resultRGB").val(color)
243
- setIroColor();
244
- });
245
- // ####################################
246
-
247
-
248
- $("#tabs").tabs(); // Tabs gestione KNX
249
-
250
- // 19/02/2020 Used to get the server sooner als deploy.
251
- $("#node-input-server").change(function () {
252
- try {
253
- oNodeServer = RED.nodes.node($(this).val());
254
- } catch (error) { }
255
- });
256
- // 19/02/2020 Used to get the server sooner als deploy.
257
- $("#node-input-serverHue").change(function () {
258
- try {
259
- oNodeServerHue = RED.nodes.node($(this).val());
260
- } catch (error) { }
281
+ });
282
+ // Eval
283
+ const format = "node." + _destinationWidget.replace("#node-input-", "");
284
+ $(_destinationWidget).val(eval(format).toString());
285
+ });
286
+ }
287
+
288
+ function getGroupAddress(_sourceWidgetAutocomplete, _destinationWidgetName, _destinationWidgetDPT, _additionalSearchTerm) {
289
+ $(_sourceWidgetAutocomplete).autocomplete({
290
+ minLength: 1,
291
+ source: function (request, response) {
292
+ //$.getJSON("csv", request, function( data, status, xhr ) {
293
+ $.getJSON("knxUltimatecsv?nodeID=" + oNodeServer.id, (data) => {
294
+ response(
295
+ $.map(data, function (value, key) {
296
+ var sSearch = value.ga + " (" + value.devicename + ") DPT" + value.dpt;
297
+ if (fullSearch(sSearch, request.term + _additionalSearchTerm)) {
298
+ return {
299
+ label: value.ga + " # " + value.devicename + " # " + value.dpt, // Label for Display
300
+ value: value.ga, // Value
301
+ };
302
+ } else {
303
+ return null;
304
+ }
305
+ })
306
+ );
261
307
  });
262
-
263
- // 31/03/2020 Search Helper
264
- function fullSearch(sourceText, searchString) {
265
- // This searches for all words in a string
266
- var aSearchWords = searchString.toLowerCase().split(" ");
267
- var i = 0;
268
- for (let index = 0; index < aSearchWords.length; index++) {
269
- if (sourceText.toLowerCase().indexOf(aSearchWords[index]) > -1) i += 1;
308
+ },
309
+ select: function (event, ui) {
310
+ // Sets Datapoint and device name automatically
311
+ var sDevName = ui.item.label.split("#")[1].trim();
312
+ try {
313
+ sDevName = sDevName.substr(sDevName.indexOf(")") + 1).trim();
314
+ } catch (error) { }
315
+ $(_destinationWidgetName).val(sDevName);
316
+ var optVal = $(_destinationWidgetDPT + " option:contains('" + ui.item.label.split("#")[2].trim() + "')").attr("value");
317
+ // Select the option value
318
+ $(_destinationWidgetDPT).val(optVal);
319
+ },
320
+ });
321
+ }
322
+
323
+ getDPT("1.", "#node-input-dptLightSwitch");
324
+ getGroupAddress("#node-input-GALightSwitch", "#node-input-nameLightSwitch", "#node-input-dptLightSwitch", " 1.");
325
+
326
+ getDPT("1.", "#node-input-dptLightState");
327
+ getGroupAddress("#node-input-GALightState", "#node-input-nameLightState", "#node-input-dptLightState", " 1.");
328
+
329
+ getDPT("3.007", "#node-input-dptLightDIM");
330
+ getGroupAddress("#node-input-GALightDIM", "#node-input-nameLightDIM", "#node-input-dptLightDIM", " 3.007");
331
+
332
+ getDPT("5.001", "#node-input-dptLightBrightness");
333
+ getGroupAddress("#node-input-GALightBrightness", "#node-input-nameLightBrightness", "#node-input-dptLightBrightness", " 5.001");
334
+
335
+ getDPT("5.001", "#node-input-dptLightBrightnessState");
336
+ getGroupAddress("#node-input-GALightBrightnessState", "#node-input-nameLightBrightnessState", "#node-input-dptLightBrightnessState", " 5.001");
337
+
338
+ getDPT("232.600", "#node-input-dptLightColor");
339
+ getGroupAddress("#node-input-GALightColor", "#node-input-nameLightColor", "#node-input-dptLightColor", " 232.600");
340
+
341
+ getDPT("232.600", "#node-input-dptLightColorState");
342
+ getGroupAddress("#node-input-GALightColorState", "#node-input-nameLightColorState", "#node-input-dptLightColorState", " 232.600");
343
+
344
+ getDPT("3.007", "#node-input-dptLightHSV");
345
+ getGroupAddress("#node-input-GALightHSV", "#node-input-nameLightHSV", "#node-input-dptLightHSV", " 3.007");
346
+
347
+ getDPT("5.001", "#node-input-dptLightHSVPercentage");
348
+ getGroupAddress("#node-input-GALightHSVPercentage", "#node-input-nameLightHSVPercentage", "#node-input-dptLightHSVPercentage", " 5.001");
349
+
350
+ getDPT("5.001", "#node-input-dptLightHSVState");
351
+ getGroupAddress("#node-input-GALightHSVState", "#node-input-nameLightHSVState", "#node-input-dptLightHSVState", " 5.001");
352
+
353
+ getDPT("1.", "#node-input-dptLightBlink");
354
+ getGroupAddress("#node-input-GALightBlink", "#node-input-nameLightBlink", "#node-input-dptLightBlink", " 1.");
355
+
356
+ getDPT("1.", "#node-input-dptLightColorCycle");
357
+ getGroupAddress("#node-input-GALightColorCycle", "#node-input-nameLightColorCycle", "#node-input-dptLightColorCycle", " 1.");
358
+
359
+ getDPT("1.", "#node-input-dptDaylightSensor");
360
+ getGroupAddress("#node-input-GADaylightSensor", "#node-input-nameDaylightSensor", "#node-input-dptDaylightSensor", " 1.");
361
+
362
+ // Show/Hide and enable/disable day/night Lighting behaviour
363
+ if (this.enableDayNightLighting === "yes") {
364
+ $("#divEnableDayNightLighting").show();
365
+ $("#divCCSBoxayNightLighting").css({ border: "1px solid dimgrey", "border-radius": "12px", padding: "5px" }); // Add little box to better understand the property page
366
+ } else {
367
+ $("#divEnableDayNightLighting").hide();
368
+ $("#divCCSBoxayNightLighting").css({ border: "", "border-radius": "", padding: "" });
369
+ }
370
+
371
+ $("#node-input-enableDayNightLighting").on("change", function () {
372
+ if ($("#node-input-enableDayNightLighting").val() === "yes") {
373
+ $("#divEnableDayNightLighting").show();
374
+ $("#divCCSBoxayNightLighting").css({ border: "1px solid dimgrey", "border-radius": "12px", padding: "5px" }); // Add little box to better understand the property page
375
+ } else {
376
+ $("#divEnableDayNightLighting").hide();
377
+ $("#divCCSBoxayNightLighting").css({ border: "", "border-radius": "", padding: "" });
378
+ }
379
+ });
380
+
381
+ // Show/Hide the div of the color at swich on
382
+ if (this.specifySwitchOnBrightness === "yes") {
383
+ $("#divColorsAtSwitchOn").show();
384
+ } else {
385
+ $("#divColorsAtSwitchOn").hide();
386
+ $("#node-input-colorAtSwitchOnDayTime").val("");
387
+ }
388
+
389
+ $("#node-input-specifySwitchOnBrightness").on("change", function () {
390
+ if ($("#node-input-specifySwitchOnBrightness").val() === "yes") {
391
+ $("#divColorsAtSwitchOn").show();
392
+ if ($("#node-input-colorAtSwitchOnDayTime").val() === "") $("#node-input-colorAtSwitchOnDayTime").val('{ "red": 255, "green": 255, "blue": 255 }');
393
+ } else {
394
+ $("#divColorsAtSwitchOn").hide();
395
+ $("#node-input-colorAtSwitchOnDayTime").val("");
396
+ }
397
+ });
398
+
399
+ // Autocomplete suggestion with HUE Lights
400
+ $("#node-input-name").autocomplete({
401
+ minLength: 1,
402
+ source: function (request, response) {
403
+ $.getJSON("KNXUltimateGetResourcesHUE?rtype=light&nodeID=" + oNodeServerHue.id, (data) => {
404
+ response(
405
+ $.map(data.devices, function (value, key) {
406
+ //alert(JSON.stringify(value) + " "+ key)
407
+ var sSearch = value.name;
408
+ if (fullSearch(sSearch, request.term)) {
409
+ return {
410
+ hueDevice: value.id,
411
+ value: value.name,
412
+ };
413
+ } else {
414
+ return null;
270
415
  }
271
- return i == aSearchWords.length;
416
+ })
417
+ );
418
+ });
419
+ },
420
+ select: function (event, ui) {
421
+ // Distinguish between group of lights an single light.
422
+ if (ui.item.value.toLowerCase().startsWith("grouped_light")) {
423
+ $("#node-input-hueDevice").val(ui.item.hueDevice + "#grouped_light");
424
+ $("#getColorAtSwitchOnDayTimeButton").hide();
425
+ $("#getColorAtSwitchOnNightTimeButton").hide();
426
+ } else {
427
+ $("#node-input-hueDevice").val(ui.item.hueDevice + "#light");
428
+ $("#getColorAtSwitchOnDayTimeButton").show();
429
+ $("#getColorAtSwitchOnNightTimeButton").show();
430
+ }
431
+ $("#tabs").show();
432
+ },
433
+ });
434
+
435
+ // Get the HUE capabilities to enable/disable UI parts
436
+ $.getJSON("KNXUltimateGetResourcesHUE?rtype=light&nodeID=" + oNodeServerHue.id, (data) => {
437
+ data.devices.forEach((element) => {
438
+ if (element.id === this.hueDevice.split("#")[0] && element.deviceObject !== undefined) {
439
+ // Check dimming
440
+ if (element.deviceObject.dimming === undefined) {
441
+ $("#tabs").tabs("disable", "#tabs-2");
442
+ $("#divColorsAtSwitchOn").hide();
443
+ $("#divColorCycle").hide();
272
444
  }
273
-
274
- function getDPT(_dpt, _destinationWidget) {
275
- // DPT Switch command
276
- // ########################
277
- $.getJSON('knxUltimateDpts', (data) => {
278
- data.forEach(dpt => {
279
- if (dpt.value.startsWith(_dpt)) {
280
- $(_destinationWidget).append($("<option></option>")
281
- .attr("value", dpt.value)
282
- .text(dpt.text))
283
- }
284
- });
285
- $(_destinationWidget).val(this + "." + _destinationWidget - replace("#node-input-", ""))
286
- })
445
+ // Check color
446
+ if (element.deviceObject.color_temperature === undefined) $("#tabs").tabs("disable", "#tabs-3");
447
+ if (element.deviceObject.color === undefined) {
448
+ $("#tabs").tabs("disable", "#tabs-4");
449
+ $("#divColorsAtSwitchOn").hide();
450
+ $("#divColorCycle").hide();
287
451
  }
288
-
289
- function getGroupAddress(_sourceWidgetAutocomplete, _destinationWidgetName, _destinationWidgetDPT, _additionalSearchTerm) {
290
- $(_sourceWidgetAutocomplete).autocomplete({
291
- minLength: 1,
292
- source: function (request, response) {
293
- //$.getJSON("csv", request, function( data, status, xhr ) {
294
- $.getJSON("knxUltimatecsv?nodeID=" + oNodeServer.id, (data) => {
295
- response($.map(data, function (value, key) {
296
- var sSearch = (value.ga + " (" + value.devicename + ") DPT" + value.dpt);
297
- if (fullSearch(sSearch, request.term + _additionalSearchTerm)) {
298
- return {
299
- label: value.ga + " # " + value.devicename + " # " + value.dpt, // Label for Display
300
- value: value.ga // Value
301
- }
302
- } else {
303
- return null;
304
- }
305
- }));
306
- });
307
- }, select: function (event, ui) {
308
- // Sets Datapoint and device name automatically
309
- var sDevName = ui.item.label.split("#")[1].trim();
310
- try {
311
- sDevName = sDevName.substr(sDevName.indexOf(")") + 1).trim();
312
- } catch (error) {
313
- }
314
- $(_destinationWidgetName).val(sDevName);
315
- var optVal = $(_destinationWidgetDPT + " option:contains('" + ui.item.label.split("#")[2].trim() + "')").attr('value');
316
- // Select the option value
317
- $(_destinationWidgetDPT).val(optVal);
318
- }
319
- });
452
+ // Check if grouped, to hide/show the "Get current" buttons
453
+ if (element.deviceObject.type === "grouped_light") {
454
+ $("#getColorAtSwitchOnDayTimeButton").hide();
455
+ $("#getColorAtSwitchOnNightTimeButton").hide();
456
+ } else {
457
+ $("#getColorAtSwitchOnDayTimeButton").show();
458
+ $("#getColorAtSwitchOnNightTimeButton").show();
320
459
  }
460
+ return;
461
+ }
462
+ });
463
+ });
464
+
465
+ $("#getColorAtSwitchOnDayTimeButton").on("click", function () {
466
+ // Get the HUE capabilities to enable/disable UI parts
467
+ $("#getColorAtSwitchOnDayTimeButton").text("Wait...");
468
+ $.getJSON("knxUltimateGetHueColor?id=" + $("#node-input-hueDevice").val().split("#")[0], (data) => {
469
+ $("#node-input-colorAtSwitchOnDayTime").val(data.toString());
470
+ $("#node-input-colorAtSwitchOnDayTime").css("background-color", "lightgreen");
471
+ setTimeout(() => {
472
+ $("#node-input-colorAtSwitchOnDayTime").css("background-color", "");
473
+ }, 500);
474
+ $("#getColorAtSwitchOnDayTimeButton").text("Get current");
475
+ });
476
+ });
477
+ $("#getColorAtSwitchOnNightTimeButton").on("click", function () {
478
+ // Get the HUE capabilities to enable/disable UI parts
479
+ $("#getColorAtSwitchOnNightTimeButton").text("Wait...");
480
+ $.getJSON("knxUltimateGetHueColor?id=" + $("#node-input-hueDevice").val().split("#")[0], (data) => {
481
+ $("#node-input-colorAtSwitchOnNightTime").val(data.toString());
482
+ $("#node-input-colorAtSwitchOnNightTime").css("background-color", "lightgreen");
483
+ setTimeout(() => {
484
+ $("#node-input-colorAtSwitchOnNightTime").css("background-color", "");
485
+ }, 500);
486
+ $("#getColorAtSwitchOnNightTimeButton").text("Get current");
487
+ });
488
+ });
489
+
490
+ // Fill options for minDimLevel and maxDimLevel
491
+ for (let index = 0; index <= 90; index++) {
492
+ if (index === 0){
493
+ $("#node-input-minDimLevelLight").append($("<option>").val(index).text(index.toString() + "% (Switch Off)"));
494
+ }else{
495
+ $("#node-input-minDimLevelLight").append($("<option>").val(index).text(index.toString() + "%"));
496
+ }
497
+
498
+ }
499
+ $("#node-input-minDimLevelLight").val(node.minDimLevelLight);
500
+ for (let index = 100; index >= 10; index--) {
501
+ $("#node-input-maxDimLevelLight").append(
502
+ $("<option>")
503
+ .val(index)
504
+ .text(index.toString() + "%")
505
+ );
506
+ }
507
+ $("#node-input-maxDimLevelLight").val(node.maxDimLevelLight);
508
+
509
+ if (this.hueDevice !== "") $("#tabs").show();
510
+ },
511
+ oneditsave: function () {
512
+ RED.sidebar.removeTab("tabNRColor");
513
+ RED.sidebar.show("help");
514
+ },
515
+ oneditcancel: function () {
516
+ RED.sidebar.removeTab("tabNRColor");
517
+ RED.sidebar.show("help");
518
+ },
519
+ });
520
+ </script>
521
+ <script src="https://kit.fontawesome.com/11f26b4500.js" crossorigin="anonymous"></script>
522
+ <script src="https://cdn.jsdelivr.net/npm/@jaames/iro@5"></script>
321
523
 
322
- getDPT("1.", "#node-input-dptLightSwitch")
323
- getGroupAddress("#node-input-GALightSwitch", "#node-input-nameLightSwitch", "#node-input-dptLightSwitch", " 1.")
324
-
325
- getDPT("1.", "#node-input-dptLightState")
326
- getGroupAddress("#node-input-GALightState", "#node-input-nameLightState", "#node-input-dptLightState", " 1.")
327
-
328
- getDPT("3.007", "#node-input-dptLightDIM")
329
- getGroupAddress("#node-input-GALightDIM", "#node-input-nameLightDIM", "#node-input-dptLightDIM", " 3.007")
330
-
331
- getDPT("5.001", "#node-input-dptLightBrightness")
332
- getGroupAddress("#node-input-GALightBrightness", "#node-input-nameLightBrightness", "#node-input-dptLightBrightness", " 5.001")
333
-
334
- getDPT("5.001", "#node-input-dptLightBrightnessState")
335
- getGroupAddress("#node-input-GALightBrightnessState", "#node-input-nameLightBrightnessState", "#node-input-dptLightBrightnessState", " 5.001")
336
-
337
- getDPT("232.600", "#node-input-dptLightColor")
338
- getGroupAddress("#node-input-GALightColor", "#node-input-nameLightColor", "#node-input-dptLightColor", " 232.600")
524
+ <script type="text/html" data-template-name="knxUltimateHueLight">
339
525
 
340
- getDPT("232.600", "#node-input-dptLightColorState")
341
- getGroupAddress("#node-input-GALightColorState", "#node-input-nameLightColorState", "#node-input-dptLightColorState", " 232.600")
342
526
 
343
- getDPT("3.007", "#node-input-dptLightHSV")
344
- getGroupAddress("#node-input-GALightHSV", "#node-input-nameLightHSV", "#node-input-dptLightHSV", " 3.007")
527
+ <div class="form-row">
528
+ <b>HUE Light/Group node</b>&nbsp&nbsp<span style="color:red"
529
+ &nbsp
530
+ &nbsp<i class="fa fa-youtube"></i></span>&nbsp<a target="_blank" href="https://youtu.be/jjEUI1J8bkA"><u>Youtube sample</u></a>
531
+ <br />
532
+ <br />
533
+ <p align="center">
534
+ <i class="fa-regular fa-lightbulb fa-bounce fa-8x"></i>
535
+ </p>
536
+ <br />
537
+ <label for="node-input-server" >
538
+ <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>
539
+ KNX GW
540
+ </label>
541
+ <input type="text" id="node-input-server" />
542
+ </div>
543
+
544
+ <div class="form-row">
545
+ <label for="node-input-serverHue">
546
+ <img src="data:image/png;base64, iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAEKADAAQAAAABAAAAEAAAAAA0VXHyAAABFUlEQVQ4EZWSsWoCQRCG1yiENEFEi6QSkjqWWoqFoBYJ+Br6JHkMn8Iibd4ihQpaJIhWNkry/ZtdGZY78Qa+m39nZ+dm9s4550awglNBluS/gVtAX6KgDclf68w2OThgfR9iT/jnoEv4TtByDThWTCDKW4SSZTf/zj9/eZbN+izTDuKGimu0vPF8B/YN8aC8LmcOj/AAn9CFTEs70Js/oGqy79C69bqJ5XbQI2kGO5N8QL9D08S8zBtBF5ZaVsznpCMoqJnVdjTpb1Db0fwIWmQV6BLXzFOYgA6/gDVfQN9bBWp2J2hdWDPoBV5FrKnAJutHikk/CHHR8i7x4iG7qQ720IYvu3GFbpHjx3pFrOFYkA354z/5bkK826phyAAAAABJRU5ErkJggg=="/>
547
+ HUE Bridge
548
+ </label>
549
+ <input type="text" id="node-input-serverHue" />
550
+ </div>
551
+
552
+ <br/>
553
+ <p>
554
+ <b>Philips HUE</b>
555
+ </p>
556
+
557
+ <div class="form-row">
558
+ <label for="node-input-hueDevice" >
559
+ <i class="fa fa-play-circle"></i>&nbspName</label>
560
+ <input type="text" id="node-input-name" placeholder="Enter your hue device name"/>
561
+ <input type="hidden" id="node-input-hueDevice"/>
562
+ </div>
563
+
564
+ <br/>
565
+
566
+
567
+ <div id="tabs" style="width:680px" hidden>
568
+ <ul>
569
+ <li><a href="#tabs-1">Switching</a></li>
570
+ <li><a href="#tabs-2">Dim/Brightness</a></li>
571
+ <li><a href="#tabs-3">Tunable white</a></li>
572
+ <li><a href="#tabs-4">Colors</a></li>
573
+ <li><a href="#tabs-5">Effects</a></li>
574
+ <li><a href="#tabs-6">Behaviour</a></li>
575
+ </ul>
576
+ <div id="tabs-1">
577
+ <p>
578
+ <div class="form-row">
579
+ <label for="node-input-nameLightSwitch" style="width:110px;"><i class="fa fa-play-circle-o"></i> Control</label>
345
580
 
346
- getDPT("5.001", "#node-input-dptLightHSVPercentage")
347
- getGroupAddress("#node-input-GALightHSVPercentage", "#node-input-nameLightHSVPercentage", "#node-input-dptLightHSVPercentage", " 5.001")
581
+ <label for="node-input-GALightSwitch" style="width:20px;"><span data-i18n="knxUltimateHueLight.node-input-GALightSwitch"></span></label>
582
+ <input type="text" id="node-input-GALightSwitch" placeholder="Ex: 1/1/1" style="width:70px;margin-left: 5px; text-align: left;">
348
583
 
349
- getDPT("5.001", "#node-input-dptLightHSVState")
350
- getGroupAddress("#node-input-GALightHSVState", "#node-input-nameLightHSVState", "#node-input-dptLightHSVState", " 5.001")
584
+ <label for="node-input-dptLightSwitch" style="width:40px; margin-left: 0px; text-align: right;">DPT</label>
585
+ <select id="node-input-dptLightSwitch" style="width:140px;"></select>
351
586
 
352
- getDPT("1.", "#node-input-dptLightBlink")
353
- getGroupAddress("#node-input-GALightBlink", "#node-input-nameLightBlink", "#node-input-dptLightBlink", " 1.")
587
+ <label for="node-input-nameLightSwitch" style="width:50px; margin-left: 0px; text-align: right;"><span data-i18n="knxUltimateHueLight.node-input-name"></span></label>
588
+ <input type="text" id="node-input-nameLightSwitch" style="width:190px;margin-left: 5px; text-align: left;">
589
+ </div>
590
+ <div class="form-row">
591
+ <label for="node-input-nameLightState" style="width:110px;"><i class="fa fa-play-circle-o"></i> Status</label>
354
592
 
355
- getDPT("1.", "#node-input-dptLightColorCycle")
356
- getGroupAddress("#node-input-GALightColorCycle", "#node-input-nameLightColorCycle", "#node-input-dptLightColorCycle", " 1.")
593
+ <label for="node-input-GALightState" style="width:20px;">GA</label>
594
+ <input type="text" id="node-input-GALightState" placeholder="Ex: 1/1/1" style="width:70px;margin-left: 5px; text-align: left;">
357
595
 
358
- getDPT("1.", "#node-input-dptDaylightSensor")
359
- getGroupAddress("#node-input-GADaylightSensor", "#node-input-nameDaylightSensor", "#node-input-dptDaylightSensor", " 1.")
596
+ <label for="node-input-dptLightState" style="width:40px; margin-left: 0px; text-align: right;">DPT</label>
597
+ <select id="node-input-dptLightState" style="width:140px;"></select>
360
598
 
599
+ <label for="node-input-nameLightState" style="width:50px; margin-left: 0px; text-align: right;"><span data-i18n="knxUltimateHueLight.node-input-name"></span></label>
600
+ <input type="text" id="node-input-nameLightState" style="width:190px;margin-left: 5px; text-align: left;">
601
+ </div>
602
+ </p>
603
+ </div>
604
+ <div id="tabs-2">
605
+ <p>
606
+ <div class="form-row">
607
+ <label for="node-input-nameLightDIM" style="width:110px;"><i class="fa fa-play-circle-o"></i> Control</label>
361
608
 
362
- // Show/Hide and enable/disable day/night Lighting behaviour
363
- if (this.enableDayNightLighting === "yes") {
364
- $("#DivEnableDayNightLighting").show()
365
- } else {
366
- $("#DivEnableDayNightLighting").hide()
367
- }
609
+ <label for="node-input-GALightDIM" style="width:20px;"><span data-i18n="knxUltimateHueLight.node-input-GALightState"></span></label>
610
+ <input type="text" id="node-input-GALightDIM" placeholder="Ex: 1/1/1" style="width:70px;margin-left: 5px; text-align: left;">
368
611
 
369
- $("#node-input-enableDayNightLighting").on('change', function () {
370
- if ($("#node-input-enableDayNightLighting").val() === 'yes') {
371
- $("#DivEnableDayNightLighting").show()
372
- } else {
373
- $("#DivEnableDayNightLighting").hide()
374
- }
375
- })
612
+ <label for="node-input-dptLightDIM" style="width:40px; margin-left: 0px; text-align: right;">DPT</label>
613
+ <select id="node-input-dptLightDIM" style="width:140px;"></select>
376
614
 
377
- // Show/Hide the div of the color at swich on
378
- if (this.specifySwitchOnBrightness === 'yes') {
379
- $("#divcolorAtSwitchOnNightTime").show()
380
- } else {
381
- $("#divcolorAtSwitchOnNightTime").hide()
382
- $("#node-input-colorAtSwitchOnDayTime").val('')
383
- }
615
+ <label for="node-input-nameLightDIM" style="width:50px; margin-left: 0px; text-align: right;"><span data-i18n="knxUltimateHueLight.node-input-name"></span></label>
616
+ <input type="text" id="node-input-nameLightDIM" style="width:190px;margin-left: 5px; text-align: left;">
617
+ </div>
618
+ <div class="form-row">
619
+ <label for="node-input-nameLightBrightness" style="width:110px;"><i class="fa fa-play-circle-o"></i> Control %</label>
384
620
 
385
- $("#node-input-specifySwitchOnBrightness").on('change', function () {
386
- if ($("#node-input-specifySwitchOnBrightness").val() === 'yes') {
387
- $("#divcolorAtSwitchOnNightTime").show()
388
- if ($("#node-input-colorAtSwitchOnDayTime").val() === '') $("#node-input-colorAtSwitchOnDayTime").val('{ "red": 255, "green": 255, "blue": 255 }')
389
- } else {
390
- $("#divcolorAtSwitchOnNightTime").hide()
391
- $("#node-input-colorAtSwitchOnDayTime").val('')
392
- }
393
- })
394
-
395
- // Autocomplete suggestion with HUE Lights
396
- $("#node-input-name").autocomplete({
397
- minLength: 1,
398
- source: function (request, response) {
399
- $.getJSON("KNXUltimateGetResourcesHUE?rtype=light&nodeID=" + oNodeServerHue.id, (data) => {
400
- response($.map(data.devices, function (value, key) {
401
- //alert(JSON.stringify(value) + " "+ key)
402
- var sSearch = (value.name);
403
- if (fullSearch(sSearch, request.term)) {
404
- return {
405
- hueDevice: value.id,
406
- value: value.name
407
- }
408
- } else {
409
- return null;
410
- }
411
- }));
412
- });
413
- }, select: function (event, ui) {
414
- // Distinguish between group of lights an single light.
415
- if (ui.item.value.toLowerCase().startsWith('grouped_light')) {
416
- $('#node-input-hueDevice').val(ui.item.hueDevice + "#grouped_light");
417
- $("#getColorAtSwitchOnDayTimeButton").hide();
418
- $("#getColorAtSwitchOnNightTimeButton").hide();
419
- } else {
420
- $('#node-input-hueDevice').val(ui.item.hueDevice + "#light");
421
- $("#getColorAtSwitchOnDayTimeButton").show();
422
- $("#getColorAtSwitchOnNightTimeButton").show();
423
- }
424
- $('#tabs').show();
425
- }
426
- });
621
+ <label for="node-input-GALightBrightness" style="width:20px;"><span data-i18n="knxUltimateHueLight.node-input-GALightState"></span></label>
622
+ <input type="text" id="node-input-GALightBrightness" placeholder="Ex: 1/1/1" style="width:70px;margin-left: 5px; text-align: left;">
427
623
 
428
- // Get the HUE capabilities to enable/disable UI parts
429
- $.getJSON("KNXUltimateGetResourcesHUE?rtype=light&nodeID=" + oNodeServerHue.id, (data) => {
430
- data.devices.forEach(element => {
431
- if (element.id === this.hueDevice.split('#')[0] && element.deviceObject !== undefined) {
432
- // Check dimming
433
- if (element.deviceObject.dimming === undefined) {
434
- $('#tabs').tabs("disable", "#tabs-2");
435
- $('#divColorsAtSwitchOn').hide()
436
- $('#divColorCycle').hide()
437
- }
438
- // Check color
439
- if (element.deviceObject.color_temperature === undefined) $('#tabs').tabs("disable", "#tabs-3");
440
- if (element.deviceObject.color === undefined) {
441
- $('#tabs').tabs("disable", "#tabs-4");
442
- $('#divColorsAtSwitchOn').hide()
443
- $('#divColorCycle').hide()
444
- }
445
- // Check if grouped, to hide/show the "Get current" buttons
446
- if (element.deviceObject.type === "grouped_light") {
447
- $("#getColorAtSwitchOnDayTimeButton").hide();
448
- $("#getColorAtSwitchOnNightTimeButton").hide();
449
- } else {
450
- $("#getColorAtSwitchOnDayTimeButton").show();
451
- $("#getColorAtSwitchOnNightTimeButton").show();
452
- }
453
- return
454
- }
455
- });
456
- });
624
+ <label for="node-input-dptLightBrightness" style="width:40px; margin-left: 0px; text-align: right;">DPT</label>
625
+ <select id="node-input-dptLightBrightness" style="width:140px;"></select>
457
626
 
458
- $("#getColorAtSwitchOnDayTimeButton").on("click", function () {
459
- // Get the HUE capabilities to enable/disable UI parts
460
- $("#getColorAtSwitchOnDayTimeButton").text("Wait...")
461
- $.getJSON("knxUltimateGetHueColor?id=" + $('#node-input-hueDevice').val().split('#')[0], (data) => {
462
- $('#node-input-colorAtSwitchOnDayTime').val(data.toString());
463
- $("#node-input-colorAtSwitchOnDayTime").css("background-color", "lightgreen");
464
- setTimeout(() => {
465
- $("#node-input-colorAtSwitchOnDayTime").css("background-color", "");
466
- }, 500);
467
- $("#getColorAtSwitchOnDayTimeButton").text("Get current")
468
- });
469
- });
470
- $("#getColorAtSwitchOnNightTimeButton").on("click", function () {
471
- // Get the HUE capabilities to enable/disable UI parts
472
- $("#getColorAtSwitchOnNightTimeButton").text("Wait...")
473
- $.getJSON("knxUltimateGetHueColor?id=" + $('#node-input-hueDevice').val().split('#')[0], (data) => {
474
- $('#node-input-colorAtSwitchOnNightTime').val(data.toString());
475
- $("#node-input-colorAtSwitchOnNightTime").css("background-color", "lightgreen");
476
- setTimeout(() => {
477
- $("#node-input-colorAtSwitchOnNightTime").css("background-color", "");
478
- }, 500);
479
- $("#getColorAtSwitchOnNightTimeButton").text("Get current")
480
- });
481
- });
627
+ <label for="node-input-nameLightBrightness" style="width:50px; margin-left: 0px; text-align: right;"><span data-i18n="knxUltimateHueLight.node-input-name"></span></label>
628
+ <input type="text" id="node-input-nameLightBrightness" style="width:190px;margin-left: 5px; text-align: left;">
629
+ </div>
482
630
 
483
- if (this.hueDevice !== "") $('#tabs').show();
631
+ <div class="form-row">
632
+ <label for="node-input-nameLightBrightnessState" style="width:110px;"><i class="fa fa-play-circle-o"></i> Status</label>
484
633
 
485
- },
486
- oneditsave: function () {
487
- RED.sidebar.removeTab("tabNRColor");
488
- RED.sidebar.show("help")
489
- },
490
- oneditcancel: function () {
491
- RED.sidebar.removeTab("tabNRColor");
492
- RED.sidebar.show("help")
493
- }
494
- })
634
+ <label for="node-input-GALightBrightnessState" style="width:20px;"><span data-i18n="knxUltimateHueLight.node-input-GALightState"></span></label>
635
+ <input type="text" id="node-input-GALightBrightnessState" placeholder="Ex: 1/1/1" style="width:70px;margin-left: 5px; text-align: left;">
495
636
 
496
- </script>
497
- <script src="https://kit.fontawesome.com/11f26b4500.js" crossorigin="anonymous"></script>
498
- <script src="https://cdn.jsdelivr.net/npm/@jaames/iro@5"></script>
499
- <!-- <script src="https://wzrd.in/standalone/copy-to-clipboard@latest" async></script> -->
637
+ <label for="node-input-dptLightBrightnessState" style="width:40px; margin-left: 0px; text-align: right;">DPT</label>
638
+ <select id="node-input-dptLightBrightnessState" style="width:140px;"></select>
500
639
 
501
- <script type="text/html" data-template-name="knxUltimateHueLight">
640
+ <label for="node-input-nameLightBrightnessState" style="width:50px; margin-left: 0px; text-align: right;"><span data-i18n="knxUltimateHueLight.node-input-name"></span></label>
641
+ <input type="text" id="node-input-nameLightBrightnessState" style="width:190px;margin-left: 5px; text-align: left;">
642
+ </div>
643
+ </p>
644
+ </div>
645
+ <div id="tabs-3">
646
+ <p>
647
+ <div class="form-row">
648
+ <label for="node-input-nameLightHSV" style="width:110px;"><i class="fa fa-play-circle-o"></i> Control</label>
502
649
 
650
+ <label for="node-input-GALightHSV" style="width:20px;">GA</label>
651
+ <input type="text" id="node-input-GALightHSV" placeholder="Ex: 1/1/1" style="width:70px;margin-left: 5px; text-align: left;">
503
652
 
504
- <div class="form-row">
505
- <b>HUE Light/Group node</b>&nbsp&nbsp<span style="color:red"
506
- &nbsp
507
- &nbsp<i class="fa fa-youtube"></i></span>&nbsp<a target="_blank" href="https://youtu.be/jjEUI1J8bkA"><u>Youtube sample</u></a>
508
- <br />
509
- <br />
510
- <p align="center">
511
- <i class="fa-regular fa-lightbulb fa-bounce fa-8x"></i>
512
- </p>
513
- <br />
514
- <label for="node-input-server" >
515
- <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>
516
- KNX GW
517
- </label>
518
- <input type="text" id="node-input-server" />
519
- </div>
653
+ <label for="node-input-dptLightHSV" style="width:40px; margin-left: 0px; text-align: right;">DPT</label>
654
+ <select id="node-input-dptLightHSV" style="width:140px;"></select>
520
655
 
521
- <div class="form-row">
522
- <label for="node-input-serverHue">
523
- <img src="data:image/png;base64, iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAEKADAAQAAAABAAAAEAAAAAA0VXHyAAABFUlEQVQ4EZWSsWoCQRCG1yiENEFEi6QSkjqWWoqFoBYJ+Br6JHkMn8Iibd4ihQpaJIhWNkry/ZtdGZY78Qa+m39nZ+dm9s4550awglNBluS/gVtAX6KgDclf68w2OThgfR9iT/jnoEv4TtByDThWTCDKW4SSZTf/zj9/eZbN+izTDuKGimu0vPF8B/YN8aC8LmcOj/AAn9CFTEs70Js/oGqy79C69bqJ5XbQI2kGO5N8QL9D08S8zBtBF5ZaVsznpCMoqJnVdjTpb1Db0fwIWmQV6BLXzFOYgA6/gDVfQN9bBWp2J2hdWDPoBV5FrKnAJutHikk/CHHR8i7x4iG7qQ720IYvu3GFbpHjx3pFrOFYkA354z/5bkK826phyAAAAABJRU5ErkJggg=="/>
524
- HUE Bridge
525
- </label>
526
- <input type="text" id="node-input-serverHue" />
527
- </div>
656
+ <label for="node-input-nameLightHSV" style="width:50px; margin-left: 0px; text-align: right;">Name</label>
657
+ <input type="text" id="node-input-nameLightHSV" style="width:190px;margin-left: 5px; text-align: left;">
658
+ </div>
659
+ <div class="form-row">
660
+ <label for="node-input-nameLightHSVPercentage" style="width:110px;"><i class="fa fa-play-circle-o"></i> Control %</label>
528
661
 
529
- <br/>
530
- <p>
531
- <b>Philips HUE</b>
532
- </p>
533
-
534
- <div class="form-row">
535
- <label for="node-input-hueDevice" >
536
- <i class="fa fa-play-circle"></i>&nbspName</label>
537
- <input type="text" id="node-input-name" placeholder="Enter your hue device name"/>
538
- <input type="hidden" id="node-input-hueDevice"/>
539
- </div>
662
+ <label for="node-input-GALightHSVPercentage" style="width:20px;">GA</label>
663
+ <input type="text" id="node-input-GALightHSVPercentage" placeholder="Ex: 1/1/1"
664
+ style="width:70px;margin-left: 5px; text-align: left;">
540
665
 
541
- <br/>
542
-
543
-
544
- <div id="tabs" style="width:680px" hidden>
545
- <ul>
546
- <li><a href="#tabs-1">Switching</a></li>
547
- <li><a href="#tabs-2">Dim/Brightness</a></li>
548
- <li><a href="#tabs-3">Tunable white</a></li>
549
- <li><a href="#tabs-4">Colors</a></li>
550
- <li><a href="#tabs-5">Effects</a></li>
551
- <li><a href="#tabs-6">Behaviour</a></li>
552
- </ul>
553
- <div id="tabs-1">
554
- <p>
555
- <div class="form-row">
556
- <label for="node-input-nameLightSwitch" style="width:110px;"><i class="fa fa-play-circle-o"></i> <span data-i18n="knxUltimateHueLight.node-input-nameLightSwitch"></span></label>
557
-
558
- <label for="node-input-GALightSwitch" style="width:20px;"><span data-i18n="knxUltimateHueLight.node-input-GALightSwitch"></span></label>
559
- <input type="text" id="node-input-GALightSwitch" placeholder="Ex: 1/1/1" style="width:70px;margin-left: 5px; text-align: left;">
560
-
561
- <label for="node-input-dptLightSwitch" style="width:40px; margin-left: 0px; text-align: right;">DPT</label>
562
- <select id="node-input-dptLightSwitch" style="width:140px;"></select>
563
-
564
- <label for="node-input-nameLightSwitch" style="width:50px; margin-left: 0px; text-align: right;"><span data-i18n="knxUltimateHueLight.node-input-name"></span></label>
565
- <input type="text" id="node-input-nameLightSwitch" style="width:190px;margin-left: 5px; text-align: left;">
566
- </div>
567
- <div class="form-row">
568
- <label for="node-input-nameLightState" style="width:110px;"><i class="fa fa-play-circle-o"></i> Status</label>
666
+ <label for="node-input-dptLightHSVPercentage" style="width:40px; margin-left: 0px; text-align: right;">DPT</label>
667
+ <select id="node-input-dptLightHSVPercentage" style="width:140px;"></select>
569
668
 
570
- <label for="node-input-GALightState" style="width:20px;">GA</label>
571
- <input type="text" id="node-input-GALightState" placeholder="Ex: 1/1/1" style="width:70px;margin-left: 5px; text-align: left;">
572
-
573
- <label for="node-input-dptLightState" style="width:40px; margin-left: 0px; text-align: right;">DPT</label>
574
- <select id="node-input-dptLightState" style="width:140px;"></select>
575
-
576
- <label for="node-input-nameLightState" style="width:50px; margin-left: 0px; text-align: right;"><span data-i18n="knxUltimateHueLight.node-input-name"></span></label>
577
- <input type="text" id="node-input-nameLightState" style="width:190px;margin-left: 5px; text-align: left;">
578
- </div>
579
- </p>
580
- </div>
581
- <div id="tabs-2">
582
- <p>
583
- <div class="form-row">
584
- <label for="node-input-nameLightDIM" style="width:110px;"><i class="fa fa-play-circle-o"></i> Dimming</label>
669
+ <label for="node-input-nameLightHSVPercentage" style="width:50px; margin-left: 0px; text-align: right;">Name</label>
670
+ <input type="text" id="node-input-nameLightHSVPercentage" style="width:190px;margin-left: 5px; text-align: left;">
671
+ </div>
672
+ <div class="form-row">
673
+ <label for="node-input-nameLightHSVState" style="width:110px;"><i class="fa fa-play-circle-o"></i> Status</label>
585
674
 
586
- <label for="node-input-GALightDIM" style="width:20px;"><span data-i18n="knxUltimateHueLight.node-input-GALightState"></span></label>
587
- <input type="text" id="node-input-GALightDIM" placeholder="Ex: 1/1/1" style="width:70px;margin-left: 5px; text-align: left;">
588
-
589
- <label for="node-input-dptLightDIM" style="width:40px; margin-left: 0px; text-align: right;">DPT</label>
590
- <select id="node-input-dptLightDIM" style="width:140px;"></select>
591
-
592
- <label for="node-input-nameLightDIM" style="width:50px; margin-left: 0px; text-align: right;"><span data-i18n="knxUltimateHueLight.node-input-name"></span></label>
593
- <input type="text" id="node-input-nameLightDIM" style="width:190px;margin-left: 5px; text-align: left;">
594
- </div>
595
- <div class="form-row">
596
- <label for="node-input-nameLightBrightness" style="width:110px;"><i class="fa fa-play-circle-o"></i> Percentage</label>
675
+ <label for="node-input-GALightHSVState" style="width:20px;"><span data-i18n="knxUltimateHueLight.node-input-GALightState"></span></label>
676
+ <input type="text" id="node-input-GALightHSVState" placeholder="Ex: 1/1/1" style="width:70px;margin-left: 5px; text-align: left;">
597
677
 
598
- <label for="node-input-GALightBrightness" style="width:20px;"><span data-i18n="knxUltimateHueLight.node-input-GALightState"></span></label>
599
- <input type="text" id="node-input-GALightBrightness" placeholder="Ex: 1/1/1" style="width:70px;margin-left: 5px; text-align: left;">
600
-
601
- <label for="node-input-dptLightBrightness" style="width:40px; margin-left: 0px; text-align: right;">DPT</label>
602
- <select id="node-input-dptLightBrightness" style="width:140px;"></select>
603
-
604
- <label for="node-input-nameLightBrightness" style="width:50px; margin-left: 0px; text-align: right;"><span data-i18n="knxUltimateHueLight.node-input-name"></span></label>
605
- <input type="text" id="node-input-nameLightBrightness" style="width:190px;margin-left: 5px; text-align: left;">
606
- </div>
607
-
608
- <div class="form-row">
609
- <label for="node-input-nameLightBrightnessState" style="width:110px;"><i class="fa fa-play-circle-o"></i> Status</label>
678
+ <label for="node-input-dptLightHSVState" style="width:40px; margin-left: 0px; text-align: right;">DPT</label>
679
+ <select id="node-input-dptLightHSVState" style="width:140px;"></select>
610
680
 
611
- <label for="node-input-GALightBrightnessState" style="width:20px;"><span data-i18n="knxUltimateHueLight.node-input-GALightState"></span></label>
612
- <input type="text" id="node-input-GALightBrightnessState" placeholder="Ex: 1/1/1" style="width:70px;margin-left: 5px; text-align: left;">
613
-
614
- <label for="node-input-dptLightBrightnessState" style="width:40px; margin-left: 0px; text-align: right;">DPT</label>
615
- <select id="node-input-dptLightBrightnessState" style="width:140px;"></select>
616
-
617
- <label for="node-input-nameLightBrightnessState" style="width:50px; margin-left: 0px; text-align: right;"><span data-i18n="knxUltimateHueLight.node-input-name"></span></label>
618
- <input type="text" id="node-input-nameLightBrightnessState" style="width:190px;margin-left: 5px; text-align: left;">
619
- </div>
620
- </p>
621
- </div>
622
- <div id="tabs-3">
623
- <p>
624
- <div class="form-row">
625
- <label for="node-input-nameLightHSV" style="width:110px;"><i class="fa fa-play-circle-o"></i> Dimming</label>
626
-
627
- <label for="node-input-GALightHSV" style="width:20px;">GA</label>
628
- <input type="text" id="node-input-GALightHSV" placeholder="Ex: 1/1/1" style="width:70px;margin-left: 5px; text-align: left;">
629
-
630
- <label for="node-input-dptLightHSV" style="width:40px; margin-left: 0px; text-align: right;">DPT</label>
631
- <select id="node-input-dptLightHSV" style="width:140px;"></select>
632
-
633
- <label for="node-input-nameLightHSV" style="width:50px; margin-left: 0px; text-align: right;">Name</label>
634
- <input type="text" id="node-input-nameLightHSV" style="width:190px;margin-left: 5px; text-align: left;">
635
- </div>
636
- <div class="form-row">
637
- <label for="node-input-nameLightHSVPercentage" style="width:110px;"><i class="fa fa-play-circle-o"></i> Percentage</label>
638
-
639
- <label for="node-input-GALightHSVPercentage" style="width:20px;">GA</label>
640
- <input type="text" id="node-input-GALightHSVPercentage" placeholder="Ex: 1/1/1"
641
- style="width:70px;margin-left: 5px; text-align: left;">
642
-
643
- <label for="node-input-dptLightHSVPercentage" style="width:40px; margin-left: 0px; text-align: right;">DPT</label>
644
- <select id="node-input-dptLightHSVPercentage" style="width:140px;"></select>
645
-
646
- <label for="node-input-nameLightHSVPercentage" style="width:50px; margin-left: 0px; text-align: right;">Name</label>
647
- <input type="text" id="node-input-nameLightHSVPercentage" style="width:190px;margin-left: 5px; text-align: left;">
648
- </div>
649
- <div class="form-row">
650
- <label for="node-input-nameLightHSVState" style="width:110px;"><i class="fa fa-play-circle-o"></i> Status</label>
651
-
652
- <label for="node-input-GALightHSVState" style="width:20px;"><span data-i18n="knxUltimateHueLight.node-input-GALightState"></span></label>
653
- <input type="text" id="node-input-GALightHSVState" placeholder="Ex: 1/1/1" style="width:70px;margin-left: 5px; text-align: left;">
654
-
655
- <label for="node-input-dptLightHSVState" style="width:40px; margin-left: 0px; text-align: right;">DPT</label>
656
- <select id="node-input-dptLightHSVState" style="width:140px;"></select>
657
-
658
- <label for="node-input-nameLightHSVState" style="width:50px; margin-left: 0px; text-align: right;"><span data-i18n="knxUltimateHueLight.node-input-name"></span></label>
659
- <input type="text" id="node-input-nameLightHSVState" style="width:190px;margin-left: 5px; text-align: left;">
660
- </div>
661
- </p>
662
- </div>
663
- <div id="tabs-4">
681
+ <label for="node-input-nameLightHSVState" style="width:50px; margin-left: 0px; text-align: right;"><span data-i18n="knxUltimateHueLight.node-input-name"></span></label>
682
+ <input type="text" id="node-input-nameLightHSVState" style="width:190px;margin-left: 5px; text-align: left;">
683
+ </div>
684
+ </p>
685
+ </div>
686
+ <div id="tabs-4">
687
+ <p>
688
+ <div class="form-row">
689
+ <label for="node-input-nameLightColor" style="width:110px;"><i class="fa fa-play-circle-o"></i> Control</label>
690
+
691
+ <label for="node-input-GALightColor" style="width:20px;"><span data-i18n="knxUltimateHueLight.node-input-GALightState"></span></label>
692
+ <input type="text" id="node-input-GALightColor" placeholder="Ex: 1/1/1" style="width:70px;margin-left: 5px; text-align: left;">
693
+
694
+ <label for="node-input-dptLightColor" style="width:40px; margin-left: 0px; text-align: right;">DPT</label>
695
+ <select id="node-input-dptLightColor" style="width:140px;"></select>
696
+
697
+ <label for="node-input-nameLightColor" style="width:50px; margin-left: 0px; text-align: right;"><span data-i18n="knxUltimateHueLight.node-input-name"></span></label>
698
+ <input type="text" id="node-input-nameLightColor" style="width:190px;margin-left: 5px; text-align: left;">
699
+ </div>
700
+ <div class="form-row">
701
+ <label for="node-input-nameLightColorState" style="width:110px;"><i class="fa fa-play-circle-o"></i> Status</label>
702
+
703
+ <label for="node-input-GALightColorState" style="width:20px;"><span data-i18n="knxUltimateHueLight.node-input-GALightState"></span></label>
704
+ <input type="text" id="node-input-GALightColorState" placeholder="Ex: 1/1/1" style="width:70px;margin-left: 5px; text-align: left;">
705
+
706
+ <label for="node-input-dptLightColorState" style="width:40px; margin-left: 0px; text-align: right;">DPT</label>
707
+ <select id="node-input-dptLightColorState" style="width:140px;"></select>
708
+
709
+ <label for="node-input-nameLightColorState" style="width:50px; margin-left: 0px; text-align: right;"><span data-i18n="knxUltimateHueLight.node-input-name"></span></label>
710
+ <input type="text" id="node-input-nameLightColorState" style="width:190px;margin-left: 5px; text-align: left;">
711
+ </div>
712
+ </p>
713
+ </div>
714
+ <div id="tabs-5">
715
+ <p>
716
+ <div class="form-row">
717
+ <label for="node-input-nameLightBlink" style="width:110px;"><i class="fa fa-play-circle-o"></i> Blink</label>
718
+
719
+ <label for="node-input-GALightBlink" style="width:20px;"><span data-i18n="knxUltimateHueLight.node-input-GALightState"></span></label>
720
+ <input type="text" id="node-input-GALightBlink" placeholder="Ex: 1/1/1" style="width:70px;margin-left: 5px; text-align: left;">
721
+
722
+ <label for="node-input-dptLightBlink" style="width:40px; margin-left: 0px; text-align: right;">DPT</label>
723
+ <select id="node-input-dptLightBlink" style="width:140px;"></select>
724
+
725
+ <label for="node-input-nameLightBlink" style="width:50px; margin-left: 0px; text-align: right;"><span data-i18n="knxUltimateHueLight.node-input-name"></span></label>
726
+ <input type="text" id="node-input-nameLightBlink" style="width:190px;margin-left: 5px; text-align: left;">
727
+ </div>
728
+
729
+ <div id="divColorCycle">
730
+ <div class="form-row">
731
+ <label for="node-input-nameLightColorCycle" style="width:110px;"><i class="fa fa-play-circle-o"></i> Color Cycle</label>
732
+
733
+ <label for="node-input-GALightColorCycle" style="width:20px;">GA</label>
734
+ <input type="text" id="node-input-GALightColorCycle" placeholder="Ex: 1/1/1" style="width:70px;margin-left: 5px; text-align: left;">
735
+
736
+ <label for="node-input-dptLightColorCycle" style="width:40px; margin-left: 0px; text-align: right;">DPT</label>
737
+ <select id="node-input-dptLightColorCycle" style="width:140px;"></select>
738
+
739
+ <label for="node-input-nameLightColorCycle" style="width:50px; margin-left: 0px; text-align: right;"><span data-i18n="knxUltimateHueLight.node-input-name"></span></label>
740
+ <input type="text" id="node-input-nameLightColorCycle" style="width:190px;margin-left: 5px; text-align: left;">
741
+ </div>
742
+ </div>
743
+ </p>
744
+ </div>
745
+ <div id="tabs-6">
664
746
  <p>
747
+ <div class="form-row">
748
+ <label for="node-input-updateKNXBrightnessStatusOnHUEOnOff" style="width:260px;">
749
+ <i class="fa fa-tag"></i> KNX Brightness Status
750
+ </label>
751
+ <select id="node-input-updateKNXBrightnessStatusOnHUEOnOff">
752
+ <option value="onhueoff">When HUE light is Off, send 0% (Default KNX behaviour)</option>
753
+ <option value="no">Leave as is (default HUE behaviour)</option>
754
+ </select>
755
+ </div>
756
+ <div class="form-row">
757
+ <label for="node-input-specifySwitchOnBrightness" style="width:260px;">
758
+ <i class="fa fa-tag"></i> Specify switch on brightness
759
+ </label>
760
+ <select id="node-input-specifySwitchOnBrightness">
761
+ <option value="yes">Yes</option>
762
+ <option value="no">No</option>
763
+ </select>
764
+ </div>
765
+
766
+ <div class="form-row" id="divColorsAtSwitchOn">
767
+ <label for="node-input-colorAtSwitchOnDayTime" style="width:260px">
768
+ <i class="fa fa-sun-o"></i> Switch On - color/brightness
769
+ </label>
770
+ <input type="text" id="node-input-colorAtSwitchOnDayTime"
771
+ placeholder='For example, {"red":255, "green":255, "blue":255}' style="width:260px">
772
+ <button id="getColorAtSwitchOnDayTimeButton" type="button" class="red-ui-button">Get current</button>
773
+ </div>
774
+ <div id="divCCSBoxayNightLighting">
665
775
  <div class="form-row">
666
- <label for="node-input-nameLightColor" style="width:110px;"><i class="fa fa-play-circle-o"></i>&nbspColor</label>
667
-
668
- <label for="node-input-GALightColor" style="width:20px;"><span data-i18n="knxUltimateHueLight.node-input-GALightState"></span></label>
669
- <input type="text" id="node-input-GALightColor" placeholder="Ex: 1/1/1" style="width:70px;margin-left: 5px; text-align: left;">
670
-
671
- <label for="node-input-dptLightColor" style="width:40px; margin-left: 0px; text-align: right;">DPT</label>
672
- <select id="node-input-dptLightColor" style="width:140px;"></select>
673
-
674
- <label for="node-input-nameLightColor" style="width:50px; margin-left: 0px; text-align: right;"><span data-i18n="knxUltimateHueLight.node-input-name"></span></label>
675
- <input type="text" id="node-input-nameLightColor" style="width:190px;margin-left: 5px; text-align: left;">
676
- </div>
677
- <div class="form-row">
678
- <label for="node-input-nameLightColorState" style="width:110px;"><i class="fa fa-play-circle-o"></i> Status</label>
679
-
680
- <label for="node-input-GALightColorState" style="width:20px;"><span data-i18n="knxUltimateHueLight.node-input-GALightState"></span></label>
681
- <input type="text" id="node-input-GALightColorState" placeholder="Ex: 1/1/1" style="width:70px;margin-left: 5px; text-align: left;">
682
-
683
- <label for="node-input-dptLightColorState" style="width:40px; margin-left: 0px; text-align: right;">DPT</label>
684
- <select id="node-input-dptLightColorState" style="width:140px;"></select>
685
-
686
- <label for="node-input-nameLightColorState" style="width:50px; margin-left: 0px; text-align: right;"><span data-i18n="knxUltimateHueLight.node-input-name"></span></label>
687
- <input type="text" id="node-input-nameLightColorState" style="width:190px;margin-left: 5px; text-align: left;">
688
- </div>
689
- </p>
690
- </div>
691
-
692
- <div id="tabs-5">
693
- <p>
776
+ <label for="node-input-enableDayNightLighting" style="width:260px;">
777
+ <i class="fa fa-clone"></i> Night Lighting
778
+ </label>
779
+ <select id="node-input-enableDayNightLighting">
780
+ <option value="yes">Yes</option>
781
+ <option value="no">No</option>
782
+ </select>
783
+ </div>
784
+ <div id="divEnableDayNightLighting">
694
785
  <div class="form-row">
695
- <label for="node-input-nameLightBlink" style="width:110px;"><i class="fa fa-play-circle-o"></i> Blink</label>
696
-
697
- <label for="node-input-GALightBlink" style="width:20px;"><span data-i18n="knxUltimateHueLight.node-input-GALightState"></span></label>
698
- <input type="text" id="node-input-GALightBlink" placeholder="Ex: 1/1/1" style="width:70px;margin-left: 5px; text-align: left;">
699
-
700
- <label for="node-input-dptLightBlink" style="width:40px; margin-left: 0px; text-align: right;">DPT</label>
701
- <select id="node-input-dptLightBlink" style="width:140px;"></select>
702
-
703
- <label for="node-input-nameLightBlink" style="width:50px; margin-left: 0px; text-align: right;"><span data-i18n="knxUltimateHueLight.node-input-name"></span></label>
704
- <input type="text" id="node-input-nameLightBlink" style="width:190px;margin-left: 5px; text-align: left;">
705
- </div>
706
-
707
- <div id="divColorCycle">
708
- <div class="form-row">
709
- <label for="node-input-nameLightColorCycle" style="width:110px;"><i class="fa fa-play-circle-o"></i> Color Cycle</label>
710
-
711
- <label for="node-input-GALightColorCycle" style="width:20px;">GA</label>
712
- <input type="text" id="node-input-GALightColorCycle" placeholder="Ex: 1/1/1" style="width:70px;margin-left: 5px; text-align: left;">
713
-
714
- <label for="node-input-dptLightColorCycle" style="width:40px; margin-left: 0px; text-align: right;">DPT</label>
715
- <select id="node-input-dptLightColorCycle" style="width:140px;"></select>
716
-
717
- <label for="node-input-nameLightColorCycle" style="width:50px; margin-left: 0px; text-align: right;"><span data-i18n="knxUltimateHueLight.node-input-name"></span></label>
718
- <input type="text" id="node-input-nameLightColorCycle" style="width:190px;margin-left: 5px; text-align: left;">
719
- </div>
786
+ <label for="node-input-colorAtSwitchOnNightTime" style="width:260px">
787
+ <i class="fa fa-moon-o"></i> Switch On color/brigh. at Night
788
+ </label>
789
+ <input type="text" id="node-input-colorAtSwitchOnNightTime"
790
+ placeholder='Example {"red":100, "green":0, "blue":50}' style="width:260px">
791
+ <button id="getColorAtSwitchOnNightTimeButton" type="button" class="red-ui-button">Get current</button>
720
792
  </div>
721
- </p>
722
- </div>
723
- <div id="tabs-6">
724
- <p>
725
793
  <div class="form-row">
726
- <label for="node-input-updateKNXBrightnessStatusOnHUEOnOff" style="width:260px;">
727
- <i class="fa fa-tag"></i> KNX Brightness Status
728
- </label>
729
- <select id="node-input-updateKNXBrightnessStatusOnHUEOnOff">
730
- <option value="onhueoff">When HUE light is Off, send 0% (Default KNX behaviour)</option>
731
- <option value="no">Leave as is (default HUE behaviour)</option>
732
- </select>
794
+ <label for="node-input-nameDaylightSensor" style="width:110px;"><i class="fa fa-clock-o"></i>
795
+ Day/Night</label>
796
+ <label for="node-input-GADaylightSensor" style="width:20px;">GA</label>
797
+ <input type="text" id="node-input-GADaylightSensor" placeholder="Ex: 1/1/1"
798
+ style="width:70px;margin-left: 5px; text-align: left;">
799
+
800
+ <label for="node-input-dptDaylightSensor"
801
+ style="width:40px; margin-left: 0px; text-align: right;">DPT</label>
802
+ <select id="node-input-dptDaylightSensor" style="width:140px;"></select>
803
+
804
+ <label for="node-input-nameDaylightSensor" style="width:50px; margin-left: 0px; text-align: right;"><span
805
+ data-i18n="knxUltimateHueLight.node-input-name"></span></label>
806
+ <input type="text" id="node-input-nameDaylightSensor"
807
+ style="width:190px;margin-left: 5px; text-align: left;">
733
808
  </div>
734
809
  <div class="form-row">
735
- <label for="node-input-specifySwitchOnBrightness" style="width:260px;">
736
- <i class="fa fa-tag"></i> Specify switch on brightness
737
- </label>
738
- <select id="node-input-specifySwitchOnBrightness">
739
- <option value="yes">Yes</option>
740
- <option value="no">No</option>
741
- </select>
810
+ <label style="width:170px" for="node-input-invertDayNight">
811
+ <i class="fa fa-shuffle"></i> Invert day/night values
812
+ </label>
813
+ <input type="checkbox" id="node-input-invertDayNight"
814
+ style="display:inline-block; width:auto; vertical-align:top;" />
815
+ </div>
742
816
  </div>
743
- <div id="divColorsAtSwitchOn">
744
- <div class="form-row" id="divcolorAtSwitchOnNightTime">
745
- <label for="node-input-colorAtSwitchOnDayTime" style="width:260px">
746
- <i class="fa fa-sun-o"></i> Switch On - color/brightness
747
- </label>
748
- <input type="text" id="node-input-colorAtSwitchOnDayTime"
749
- placeholder='For example, {"red":255, "green":255, "blue":255}' style="width:260px">
750
- <button id="getColorAtSwitchOnDayTimeButton" type="button" class="red-ui-button">Get current</button>
751
- </div>
752
- <div class="form-row">
753
- <label for="node-input-enableDayNightLighting" style="width:260px;">
754
- <i class="fa fa-clone"></i> Night Lighting
755
- </label>
756
- <select id="node-input-enableDayNightLighting">
757
- <option value="yes">Yes</option>
758
- <option value="no">No</option>
759
- </select>
760
- </div>
761
- <div id="DivEnableDayNightLighting">
762
- <div class="form-row">
763
- <label for="node-input-colorAtSwitchOnNightTime" style="width:260px">
764
- <i class="fa fa-moon-o"></i> Switch On color/brigh. at Night
765
- </label>
766
- <input type="text" id="node-input-colorAtSwitchOnNightTime"
767
- placeholder='Example {"red":100, "green":0, "blue":50}' style="width:260px">
768
- <button id="getColorAtSwitchOnNightTimeButton" type="button" class="red-ui-button">Get current</button>
769
- </div>
770
- <div class="form-row">
771
- <label for="node-input-nameDaylightSensor" style="width:110px;"><i class="fa fa-clock-o"></i>
772
- Day/Night</label>
773
-
774
- <label for="node-input-GADaylightSensor" style="width:20px;">GA</label>
775
- <input type="text" id="node-input-GADaylightSensor" placeholder="Ex: 1/1/1"
776
- style="width:70px;margin-left: 5px; text-align: left;">
777
-
778
- <label for="node-input-dptDaylightSensor"
779
- style="width:40px; margin-left: 0px; text-align: right;">DPT</label>
780
- <select id="node-input-dptDaylightSensor" style="width:140px;"></select>
781
-
782
- <label for="node-input-nameDaylightSensor" style="width:50px; margin-left: 0px; text-align: right;"><span
783
- data-i18n="knxUltimateHueLight.node-input-name"></span></label>
784
- <input type="text" id="node-input-nameDaylightSensor"
785
- style="width:190px;margin-left: 5px; text-align: left;">
786
- </div>
787
- <div class="form-row">
788
- <label style="width:170px" for="node-input-invertDayNight">
789
- <i class="fa fa-shuffle"></i> Invert day/night values
790
- </label>
791
- <input type="checkbox" id="node-input-invertDayNight"
792
- style="display:inline-block; width:auto; vertical-align:top;" />
793
-
794
- </div>
795
- </div>
796
- </div>
817
+ </div>
818
+ <br />
819
+ <div class="form-row">
820
+ <label for="node-input-dimSpeed" style="width:260px">
821
+ <i class="fa fa-bolt"></i> Dim Speed (ms)
822
+ </label>
823
+ <input type="text" id="node-input-dimSpeed" placeholder='Default is 5000' style="width:260px">
824
+ </div>
825
+ <div class="form-row">
826
+ <label for="node-input-minDimLevelLight" style="width:260px;">
827
+ <i class="fa fa-clone"></i> Min Dim Brightness
828
+ </label>
829
+ <select id="node-input-minDimLevelLight">
830
+ <option value="useHueLightLevel">Use minimum brightness specified in the HUE light</option>
831
+ </select>
832
+ </div>
833
+ <div class="form-row">
834
+ <label for="node-input-maxDimLevelLight" style="width:260px;">
835
+ <i class="fa fa-clone"></i> Max Dim Brightness
836
+ </label>
837
+ <select id="node-input-maxDimLevelLight"></select>
838
+ </div>
797
839
  </p>
798
- </div>
799
-
800
- <br/>
840
+ </div>
841
+
842
+ <br/>
801
843
  </script>
802
844
 
803
845
  <script type="text/markdown" data-help-name="knxUltimateHueLight">
804
- <p>This node lets you control your Philips HUE light and grouped lights and also gets the states of this lights, to be sent to the KNX bus.</p>
846
+ <p>This node lets you control your Philips HUE light and grouped lights and also gets the states of this lights, to be sent to the KNX bus.</p>
847
+
848
+ **General**
849
+ |Property|Description|
850
+ |--|--|
851
+ | KNX GW | Select the KNX gateway to be used |
852
+ | HUE Bridge | Select the HUE Bridge to be used |
853
+ | Name | HUE light or HUE grouped light to be used. The avaiable lights and groups start showing up while you're typing.|
854
+
855
+ <br/>
856
+
857
+ **OPTIONS**
805
858
 
806
- **General**
807
- |Property|Description|
808
- |--|--|
809
- | KNX GW | Select the KNX gateway to be used |
810
- | HUE Bridge | Select the HUE Bridge to be used |
811
- | Name | HUE light or HUE grouped light to be used. The avaiable lights and groups start showing up while you're typing.|
859
+ Here you can choose the KNX addresses to be linked to the avaiable HUE light commands/states.<br/>
860
+ 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.
812
861
 
813
- <br/>
862
+ **Switching**
863
+ |Property|Description|
864
+ |--|--|
865
+ | Control | This GA is used to turn on/off the HUE light via a boolean KNX value true/false|
866
+ | Status | Link this to the light's switch status group address|
814
867
 
815
- **OPTIONS**
868
+ <br/>
816
869
 
817
- Here you can choose the KNX addresses to be linked to the avaiable HUE light commands/states.<br/>
818
- 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.
870
+ **Dim/Brightness**
871
+ |Property|Description|
872
+ |--|--|
873
+ | Control | Relative DIM the HUE light. You can set the dimming speed in the **_Behaviour_** tab. |
874
+ | Control % | Changes the absolute HUE light's brightness (0-100%)|
875
+ | Status| Link this to the light's brightness status group address |
819
876
 
820
- **Switching**
821
- |Property|Description|
822
- |--|--|
823
- | Switch | This GA is used to turn on/off the HUE light via a boolean KNX value true/false|
824
- | Status | Link this to the light's switch status group address|
877
+ <br/>
825
878
 
826
- <br/>
879
+ **Tunable white**
880
+ |Property|Description|
881
+ |--|--|
882
+ | Control| Changes the HUE light's white temperature, using DPT 3.007 dimming. You can set the dimming speed in the **_Behaviour_** tab.|
883
+ | Control % | Changes the HUE light's white temperature, using the DPT 5.001. A value of 0 is full warm, a value of 100 is full cold.|
884
+ | Status | Link this to the light temperature status group address. Datapoint is 5.001 absolute value. 0 is full warm, 100 is full cold.|
827
885
 
828
- **Dim/Brightness**
829
- |Property|Description|
830
- |--|--|
831
- | Dimming | Relative DIM the HUE light |
832
- | Percentage | Changes the absolute HUE light's brightness (0-100%)|
833
- | Status| Link this to the light's brightness status group address |
886
+ <br/>
834
887
 
835
- <br/>
888
+ **Colors**
889
+ |Property|Description|
890
+ |--|--|
891
+ | Control | 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 |
892
+ | Status | Link this to the light's color status group address. Accepted datapoint is RGB triplet (r,g,b)|
836
893
 
837
- **Tunable white**
838
- |Property|Description|
839
- |--|--|
840
- | Dimming| Changes the HUE light's white temperature, using DPT 3.007 dimming.|
841
- | Percentage | Changes the HUE light's white temperature, using the DPT 5.001. A value of 0 is full warm, a value of 100 is full cold.|
842
- | Status | Link this to the light temperature status group address. Datapoint is 5.001 absolute value. 0 is full warm, 100 is full cold.|
894
+ <br/>
843
895
 
844
- <br/>
896
+ **Effects**
897
+ |Property|Description|
898
+ |--|--|
899
+ | Blink | _true_ Blink the light, _false_ Stop blinking. Blinks the light on and off. Useful for signalling. Works with all HUE lights. |
900
+ | Color Cycle | _true_ start cycle, _false_ Stop cycle. Randomly changes the HUE light's color at regular interval. Works with all HUE lights having color capabilities. The color effect will start 10 seconds after set. |
845
901
 
846
- **Colors**
847
- |Property|Description|
848
- |--|--|
849
- | 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 |
850
- | Status | Link this to the light's color status group address. Accepted datapoint is RGB triplet (r,g,b)|
902
+ <br/>
851
903
 
852
- <br/>
904
+ **Behaviour**
853
905
 
854
- **Effects**
855
- |Property|Description|
856
- |--|--|
857
- | Blink | *true* Blink the light, *false* Stop blinking. Blinks the light on and off. Useful for signalling. Works with all HUE lights. |
858
- | Color Cycle | *true* start cycle, *false* Stop cycle. Randomly changes the HUE light's color at regular interval. Works with all HUE lights having color capabilities. The color effect will start 10 seconds after set. |
906
+ | Property | Description |
907
+ | ----------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
908
+ | KNX Brightness Status | Updates the KNX brightness group address whenever the HUE lamp is switched ON/OFF. The options are `When HUE light is Off, send 0% (Default KNX behaviour)` and `Leave as is (default HUE behaviour)` |
909
+ | Specify switch on brightness | It enables the brightness value to follow the on/off status of the light. If you change the HUE brightness value to 0% (from the HUE App), an "off" telegram is also sent to the KNX bus; if you set it other than 0%, an "on" telegram is also sent to the KNX bus. This is valid also vice-versa: if you change the brightness via KNX bus, the HUE on/off value is also sent to the lamp. If you set it to **No**, the previous HUE light brightness value is retained. Default value is **Yes**. |
910
+ | Switch On - color/brightness | You can choose the color/brightness of your light, at switch on. Set it as JSON object, for example **{ "red": 255, "green": 255, "blue": 255 }** |
911
+ | Night Lighting | It allows to set a particular light color/brightness at nighttime. If **checked**, a further set of option shows up and the light changes the behaviour based on these options, everytime you switch the light _on_. |
912
+ | Switch On - color/brightness at Nighttime | You can choose the color/brightness of your light, at switch on, on night time. Set it as JSON object. Default value if you leave blank is **{ "red": 100, "green": 0, "blue": 0 }** |
913
+ | Day/Night | Select the group address used to set the day/night behaviour. The group address value is _true_ if daytime, _false_ if nighttime. |
914
+ | Invert day/night values | Invert the values of _Day/Night_ group address. Default value is **unchecked**. |
915
+ | Dim Speed (ms) | The dimming speed, in Milliseconds. This applies to the **light** and also to the **tunable white** dimming datapoints. It' calculated from 0% to 100%. |
916
+ | Min Dim brightness | Tha Minimum brightness that the lamp can reach. For example, if you are dimming the light down, the light will stop dimming at the specified brightness %. |
917
+ | Max Dim brightness | Tha Maximum brightness that the lamp can reach. For example, if you are dimming the light up, the light will stop dimming at the specified brightness %. |
859
918
 
860
- <br/>
919
+ ### Note
861
920
 
862
- **Behaviour**
863
-
864
- |Property|Description|
865
- |--|--|
866
- | KNX Brightness Status | Updates the KNX brightness group address whenever the HUE lamp is switched ON/OFF. The options are `When HUE light is Off, send 0% (Default KNX behaviour)` and `Leave as is (default HUE behaviour)` |
867
- | Specify switch on brightness | It enables the brightness value to follow the on/off status of the light. If you change the HUE brightness value to 0% (from the HUE App), an "off" telegram is also sent to the KNX bus; if you set it other than 0%, an "on" telegram is also sent to the KNX bus. This is valid also vice-versa: if you change the brightness via KNX bus, the HUE on/off value is also sent to the lamp. If you set it to **No**, the previous HUE light brightness value is retained. Default value is **Yes**. |
868
- | Switch On - color/brightness | You can choose the color/brightness of your light, at switch on. Set it as JSON object, for example **{ "red": 255, "green": 255, "blue": 255 }** |
869
- | Night Lighting | It allows to set a particular light color/brightness at nighttime. If **checked**, a further set of option shows up and the light changes the behaviour based on these options, everytime you switch the light *on*. |
870
- | Switch On - color/brightness at Nighttime | You can choose the color/brightness of your light, at switch on, on night time. Set it as JSON object. Default value if you leave blank is **{ "red": 100, "green": 0, "blue": 0 }** |
871
- | Day/Night | Select the group address used to set the day/night behaviour. The group address value is *true* if daytime, *false* if nighttime. |
872
- | Invert day/night values | Invert the values of *Day/Night* group address. Default value is **unchecked**.|
921
+ The Dimming function works in **KNX mode `start` and `stop`**. To start dimming, send only one "start" KNX telegram. To stop dimming, send a "stop" KNX telegram. Please **remember that**, when you set your wall swiches properties.
873
922
 
874
- <br/>
923
+ <br/>
875
924
 
876
- [Find it useful?](https://www.paypal.me/techtoday)
925
+ [Find it useful?](https://www.paypal.me/techtoday)
877
926
 
878
- <br/>
927
+ <br/>
879
928
  </script>