iobroker.zigbee 1.8.1 → 1.8.3

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.
Files changed (89) hide show
  1. package/.eslintignore +2 -0
  2. package/.eslintrc.json +37 -0
  3. package/.github/FUNDING.yml +3 -0
  4. package/.github/auto-merge.yml +17 -0
  5. package/.github/dependabot.yml +24 -0
  6. package/.github/stale.yml +13 -0
  7. package/.github/workflows/codeql.yml +41 -0
  8. package/.github/workflows/dependabot-automerge.yml +22 -0
  9. package/.github/workflows/test-and-release.yml +149 -0
  10. package/.releaseconfig.json +3 -0
  11. package/.travis/wiki.sh +28 -0
  12. package/.travis.yml +41 -0
  13. package/README.md +31 -8
  14. package/admin/admin.js +466 -482
  15. package/admin/i18n/de/translations.json +2 -2
  16. package/admin/index_m.html +1 -1
  17. package/admin/tab_m.html +3 -44
  18. package/admin/words.js +2 -2
  19. package/gulpfile.js +464 -0
  20. package/io-package.json +18 -25
  21. package/lib/backup.js +2 -2
  22. package/lib/binding.js +37 -32
  23. package/lib/colors.js +158 -163
  24. package/lib/commands.js +90 -99
  25. package/lib/developer.js +12 -9
  26. package/lib/devices.js +179 -169
  27. package/lib/exclude.js +36 -30
  28. package/lib/exposes.js +139 -163
  29. package/lib/groups.js +83 -81
  30. package/lib/json.js +6 -5
  31. package/lib/networkmap.js +3 -2
  32. package/lib/ota.js +18 -34
  33. package/lib/rgb.js +72 -114
  34. package/lib/seriallist.js +20 -25
  35. package/lib/states.js +526 -511
  36. package/lib/statescontroller.js +183 -206
  37. package/lib/utils.js +23 -24
  38. package/lib/zbBaseExtension.js +4 -4
  39. package/lib/zbDelayedAction.js +13 -5
  40. package/lib/zbDeviceAvailability.js +65 -69
  41. package/lib/zbDeviceConfigure.js +21 -9
  42. package/lib/zbDeviceEvent.js +4 -3
  43. package/lib/zigbeecontroller.js +103 -109
  44. package/main.js +147 -163
  45. package/package.json +15 -29
  46. package/test/integration.js +5 -0
  47. package/test/mocha.custom.opts +2 -0
  48. package/test/mocha.setup.js +14 -0
  49. package/test/package.js +5 -0
  50. package/test/unit.js +5 -0
  51. package/docs/de/img/CC2531.png +0 -0
  52. package/docs/de/img/CC2538_CC2592_PA.PNG +0 -0
  53. package/docs/de/img/CC2591.png +0 -0
  54. package/docs/de/img/boards.jpg +0 -0
  55. package/docs/de/img/cc26x2r.PNG +0 -0
  56. package/docs/de/img/results.jpg +0 -0
  57. package/docs/de/img/sku_429478_2.png +0 -0
  58. package/docs/de/img/sku_429601_2.png +0 -0
  59. package/docs/de/readme.md +0 -27
  60. package/docs/en/img/CC2531.png +0 -0
  61. package/docs/en/img/CC2591.png +0 -0
  62. package/docs/en/img/deconz.png +0 -0
  63. package/docs/en/img/sku_429478_2.png +0 -0
  64. package/docs/en/img/sku_429601_2.png +0 -0
  65. package/docs/en/readme.md +0 -30
  66. package/docs/flashing_via_arduino_(en).md +0 -110
  67. package/docs/ru/img/CC2531.png +0 -0
  68. package/docs/ru/img/CC2591.png +0 -0
  69. package/docs/ru/img/sku_429478_2.png +0 -0
  70. package/docs/ru/img/sku_429601_2.png +0 -0
  71. package/docs/ru/readme.md +0 -28
  72. package/docs/tutorial/CC2530_20190425.zip +0 -0
  73. package/docs/tutorial/CC2530_CC2591_20190515.zip +0 -0
  74. package/docs/tutorial/CC2530_CC2592_20190515.zip +0 -0
  75. package/docs/tutorial/CC2531_20190425.zip +0 -0
  76. package/docs/tutorial/adm5_1.PNG +0 -0
  77. package/docs/tutorial/adm5_2.PNG +0 -0
  78. package/docs/tutorial/cat.PNG +0 -0
  79. package/docs/tutorial/groups-1.png +0 -0
  80. package/docs/tutorial/groups-2.png +0 -0
  81. package/docs/tutorial/inst.PNG +0 -0
  82. package/docs/tutorial/reflash-finish.PNG +0 -0
  83. package/docs/tutorial/reflash-step0.png +0 -0
  84. package/docs/tutorial/reflash-step1.PNG +0 -0
  85. package/docs/tutorial/reflash-step2.PNG +0 -0
  86. package/docs/tutorial/settings.png +0 -0
  87. package/docs/tutorial/tab-dev-1.png +0 -0
  88. package/docs/tutorial/zigbee.png +0 -0
  89. package/docs/tutorial/zigbee15.png +0 -0
package/lib/rgb.js CHANGED
@@ -4,7 +4,7 @@ With these functions you can convert the CIE color space to the RGB color space
4
4
  The developer documentation for Philips Hue provides the formulas used in the code below:
5
5
  https://developers.meethue.com/documentation/color-conversions-rgb-xy
6
6
 
7
- I've used the formulas and Objective-C example code and transferred it to JavaScript.
7
+ I've used the formulas and Objective-C example code and transfered it to JavaScript.
8
8
 
9
9
 
10
10
  Examples:
@@ -60,20 +60,24 @@ function cie_to_rgb(x, y, brightness) {
60
60
  const Z = (Y / y) * z;
61
61
 
62
62
  //Convert to RGB using Wide RGB D65 conversion
63
- let red = X * 1.656492 - Y * 0.354851 - Z * 0.255038;
63
+ let red = X * 1.656492 - Y * 0.354851 - Z * 0.255038;
64
64
  let green = -X * 0.707196 + Y * 1.655397 + Z * 0.036152;
65
- let blue = X * 0.051713 - Y * 0.121364 + Z * 1.011530;
65
+ let blue = X * 0.051713 - Y * 0.121364 + Z * 1.011530;
66
66
 
67
67
  //If red, green or blue is larger than 1.0 set it back to the maximum of 1.0
68
68
  if (red > blue && red > green && red > 1.0) {
69
+
69
70
  green = green / red;
70
71
  blue = blue / red;
71
72
  red = 1.0;
72
- } else if (green > blue && green > red && green > 1.0) {
73
+ }
74
+ else if (green > blue && green > red && green > 1.0) {
75
+
73
76
  red = red / green;
74
77
  blue = blue / green;
75
78
  green = 1.0;
76
- } else if (blue > red && blue > green && blue > 1.0) {
79
+ }
80
+ else if (blue > red && blue > green && blue > 1.0) {
77
81
 
78
82
  red = red / blue;
79
83
  green = green / blue;
@@ -81,24 +85,25 @@ function cie_to_rgb(x, y, brightness) {
81
85
  }
82
86
 
83
87
  //Reverse gamma correction
84
- red = red <= 0.0031308 ? 12.92 * red : (1.0 + 0.055) * Math.pow(red, (1.0 / 2.4)) - 0.055;
85
- green = green <= 0.0031308 ? 12.92 * green : (1.0 + 0.055) * Math.pow(green, (1.0 / 2.4)) - 0.055;
86
- blue = blue <= 0.0031308 ? 12.92 * blue : (1.0 + 0.055) * Math.pow(blue, (1.0 / 2.4)) - 0.055;
88
+ red = red <= 0.0031308 ? 12.92 * red : (1.0 + 0.055) * Math.pow(red, (1.0 / 2.4)) - 0.055;
89
+ green = green <= 0.0031308 ? 12.92 * green : (1.0 + 0.055) * Math.pow(green, (1.0 / 2.4)) - 0.055;
90
+ blue = blue <= 0.0031308 ? 12.92 * blue : (1.0 + 0.055) * Math.pow(blue, (1.0 / 2.4)) - 0.055;
91
+
87
92
 
88
93
  //Convert normalized decimal to decimal
89
- red = Math.round(red * 255);
90
- green = Math.round(green * 255);
91
- blue = Math.round(blue * 255);
94
+ red = Math.round(red * 255);
95
+ green = Math.round(green * 255);
96
+ blue = Math.round(blue * 255);
92
97
 
93
- if (isNaN(red) || red < 0) {
98
+ if (isNaN(red) || red < 0 ) {
94
99
  red = 0;
95
100
  }
96
101
 
97
- if (isNaN(green) || green < 0) {
102
+ if (isNaN(green) || green < 0 ) {
98
103
  green = 0;
99
104
  }
100
105
 
101
- if (isNaN(blue) || blue < 0) {
106
+ if (isNaN(blue) || blue < 0 ) {
102
107
  blue = 0;
103
108
  }
104
109
 
@@ -115,18 +120,18 @@ function cie_to_rgb(x, y, brightness) {
115
120
  */
116
121
  function rgb_to_cie(red, green, blue) {
117
122
  // Apply a gamma correction to the RGB values, which makes the color more vivid and more the like the color displayed on the screen of your device
118
- red = (red > 0.04045) ? Math.pow((red + 0.055) / (1.0 + 0.055), 2.4) : (red / 12.92);
119
- green = (green > 0.04045) ? Math.pow((green + 0.055) / (1.0 + 0.055), 2.4) : (green / 12.92);
120
- blue = (blue > 0.04045) ? Math.pow((blue + 0.055) / (1.0 + 0.055), 2.4) : (blue / 12.92);
123
+ red = (red > 0.04045) ? Math.pow((red + 0.055) / (1.0 + 0.055), 2.4) : (red / 12.92);
124
+ green = (green > 0.04045) ? Math.pow((green + 0.055) / (1.0 + 0.055), 2.4) : (green / 12.92);
125
+ blue = (blue > 0.04045) ? Math.pow((blue + 0.055) / (1.0 + 0.055), 2.4) : (blue / 12.92);
121
126
 
122
127
  // RGB values to XYZ using the Wide RGB D65 conversion formula
123
- const X = red * 0.664511 + green * 0.154324 + blue * 0.162028;
124
- const Y = red * 0.283881 + green * 0.668433 + blue * 0.047685;
125
- const Z = red * 0.000088 + green * 0.072310 + blue * 0.986039;
128
+ const X = red * 0.664511 + green * 0.154324 + blue * 0.162028;
129
+ const Y = red * 0.283881 + green * 0.668433 + blue * 0.047685;
130
+ const Z = red * 0.000088 + green * 0.072310 + blue * 0.986039;
126
131
 
127
132
  // Calculate the xy values from the XYZ values
128
- let x = (X / (X + Y + Z)).toFixed(4);
129
- let y = (Y / (X + Y + Z)).toFixed(4);
133
+ let x = (X / (X + Y + Z)).toFixed(4);
134
+ let y = (Y / (X + Y + Z)).toFixed(4);
130
135
 
131
136
  if (isNaN(x)) {
132
137
  x = 0;
@@ -145,13 +150,9 @@ function hsvToRGB(h, s, v) {
145
150
  s = s / 100;
146
151
  v = v / 100;
147
152
 
148
- let r;
149
- let g;
150
- let b;
153
+ let r; let g; let b;
151
154
  if (arguments.length === 1) {
152
- s = h.s;
153
- v = h.v;
154
- h = h.h;
155
+ s = h.s, v = h.v, h = h.h;
155
156
  }
156
157
  const i = Math.floor(h * 6);
157
158
  const f = h * 6 - i;
@@ -159,36 +160,12 @@ function hsvToRGB(h, s, v) {
159
160
  const q = v * (1 - f * s);
160
161
  const t = v * (1 - (1 - f) * s);
161
162
  switch (i % 6) {
162
- case 0:
163
- r = v;
164
- g = t;
165
- b = p;
166
- break;
167
- case 1:
168
- r = q;
169
- g = v;
170
- b = p;
171
- break;
172
- case 2:
173
- r = p;
174
- g = v;
175
- b = t;
176
- break;
177
- case 3:
178
- r = p;
179
- g = q;
180
- b = v;
181
- break;
182
- case 4:
183
- r = t;
184
- g = p;
185
- b = v;
186
- break;
187
- case 5:
188
- r = v;
189
- g = p;
190
- b = q;
191
- break;
163
+ case 0: r = v, g = t, b = p; break;
164
+ case 1: r = q, g = v, b = p; break;
165
+ case 2: r = p, g = v, b = t; break;
166
+ case 3: r = p, g = q, b = v; break;
167
+ case 4: r = t, g = p, b = v; break;
168
+ case 5: r = v, g = p, b = q; break;
192
169
  }
193
170
  return {
194
171
  r: Math.round(r * 255),
@@ -199,92 +176,73 @@ function hsvToRGB(h, s, v) {
199
176
 
200
177
  function rgbToHSV(r, g, b, numeric) {
201
178
  if (arguments.length === 1) {
202
- g = r.g;
203
- b = r.b;
204
- r = r.r;
179
+ g = r.g, b = r.b, r = r.r;
205
180
  }
206
- const max = Math.max(r, g, b);
207
- const min = Math.min(r, g, b);
181
+ const max = Math.max(r, g, b); const min = Math.min(r, g, b);
208
182
  const d = max - min;
209
183
  let h;
210
184
  const s = (max === 0 ? 0 : d / max);
211
185
  const v = max / 255;
212
186
 
213
187
  switch (max) {
214
- case min:
215
- h = 0;
216
- break;
217
- case r:
218
- h = (g - b) + d * (g < b ? 6 : 0);
219
- h /= 6 * d;
220
- break;
221
- case g:
222
- h = (b - r) + d * 2;
223
- h /= 6 * d;
224
- break;
225
- case b:
226
- h = (r - g) + d * 4;
227
- h /= 6 * d;
228
- break;
229
- }
230
- if (numeric) {
231
- return {
232
- h: Math.round(h * 360),
233
- s: Math.round(s * 100),
234
- v: Math.round(v * 100),
235
- };
236
- }
188
+ case min: h = 0; break;
189
+ case r: h = (g - b) + d * (g < b ? 6: 0); h /= 6 * d; break;
190
+ case g: h = (b - r) + d * 2; h /= 6 * d; break;
191
+ case b: h = (r - g) + d * 4; h /= 6 * d; break;
192
+ }
193
+ if (numeric) return {
194
+ h: Math.round(h*360),
195
+ s: Math.round(s*100),
196
+ v: Math.round(v*100),
197
+ };
237
198
  return {
238
199
  h: (h * 360).toFixed(3),
239
200
  s: (s * 100).toFixed(3),
240
201
  v: (v * 100).toFixed(3),
241
202
  };
242
203
  }
243
-
244
204
  function colorArrayFromString(value) {
245
- if (typeof value === 'string') {
205
+ if (typeof(value) === 'string') {
246
206
  const rv = [];
247
- value.split(',').forEach(element =>
248
- rv.push(colors.ParseColor(element)));
207
+ value.split(',').forEach(element => {
208
+ rv.push(colors.ParseColor(element));
209
+ });
249
210
  return rv;
250
211
  }
251
- return [{r: 0, g: 128, b: 255}];
212
+ return [{r:0,g:128,b:255}];
252
213
  }
253
214
 
254
- function colorStringFromRGBArray(payload) {
255
- const rv = [];
256
- payload.forEach(element =>
257
- rv.push(rgb_to_rgbstring(element)));
215
+ function colorStringFromRGBArray(payload)
216
+ {
217
+ let rv = []
218
+ payload.forEach(element => {
219
+ rv.push(rgb_to_rgbstring(element));
220
+ });
258
221
  return rv.toString();
259
222
  }
260
223
 
261
- function hsv_to_cie(h, s, v) {
262
- const rgb = hsvToRGB(h, s, v);
224
+ function hsv_to_cie(h,s,v){
225
+ const rgb = hsvToRGB(h,s,v);
263
226
  return rgb_to_cie(rgb.r, rgb.g, rgb.b);
264
227
  }
265
228
 
266
229
  function rgb_to_rgbstring(element) {
267
230
  let col = '#';
268
- if (element && element.hasOwnProperty('r')) {
269
- col = col + element.r.toString(16).padStart(2, '0');
270
- } else {
271
- col = col + '00';
272
- }
273
- if (element && element.hasOwnProperty('g')) {
274
- col = col + element.g.toString(16).padStart(2, '0');
275
- } else {
276
- col = col + '00';
277
- }
278
- if (element && element.hasOwnProperty('b')) {
279
- col = col + element.b.toString(16).padStart(2, '0');
280
- } else {
281
- col = col + '00';
282
- }
231
+ if (element && element.hasOwnProperty("r"))
232
+ col = col + element.r.toString(16).padStart(2, '0');
233
+ else col = col + '00';
234
+ if (element && element.hasOwnProperty("g"))
235
+ col = col + element.g.toString(16).padStart(2, '0');
236
+ else col = col + '00';
237
+ if (element && element.hasOwnProperty("b"))
238
+ col = col + element.b.toString(16).padStart(2, '0');
239
+ else col = col + '00';
283
240
  return col;
284
241
  }
285
242
 
286
- function hsvToRGBString(h, s, v) {
287
- return rgb_to_rgbstring(hsvToRGB(h, s, v));
243
+
244
+ function hsvToRGBString(h,s,v) {
245
+ return rgb_to_rgbstring(hsvToRGB(h,s,v))
288
246
  }
289
247
 
290
248
  exports.hsv_to_cie = hsv_to_cie;
package/lib/seriallist.js CHANGED
@@ -1,13 +1,13 @@
1
1
  'use strict';
2
2
 
3
- let SerialPort = null;
3
+ const serialPortUtils = require('zigbee-herdsman/dist/adapter/serialPortUtils').default;
4
+
4
5
 
5
6
  class SerialList {
6
7
  constructor(adapter) {
7
8
  this.adapter = adapter;
8
- this.adapter.on('message', obj => this.onMessage(obj));
9
+ this.adapter.on('message', this.onMessage.bind(this));
9
10
  }
10
-
11
11
  /**
12
12
  * @param {ioBroker.Message} obj
13
13
  */
@@ -16,33 +16,28 @@ class SerialList {
16
16
  switch (obj.command) {
17
17
  case 'listUart':
18
18
  if (obj.callback) {
19
- SerialPort = SerialPort || require('serialport').SerialPort;
20
- if (SerialPort) {
21
- // read all found serial ports
22
- SerialPort.list()
23
- .then(ports => {
24
- this.adapter.log.info(`List of port: ${JSON.stringify(ports)}`);
25
- this.adapter.sendTo(obj.from, obj.command, ports.map(item => ({
26
- label: item.friendlyName || item.pnpId || item.manufacturer,
27
- comName: item.path
28
- })), obj.callback);
29
- })
30
- .catch(e => {
31
- this.adapter.sendTo(obj.from, obj.command, [], obj.callback);
32
- this.adapter.log.error(e);
33
- });
34
- } else {
35
- this.adapter.log.warn('Module serialport is not available');
36
- this.adapter.sendTo(obj.from, obj.command, [{
37
- label: 'Not available',
38
- comName: ''
39
- }], obj.callback);
40
- }
19
+ this.listSerial()
20
+ .then((ports) => {
21
+ this.adapter.log.debug('List of ports: ' + JSON.stringify(ports));
22
+ this.adapter.sendTo(obj.from, obj.command, ports.map(item => ({
23
+ label: item.friendlyName || item.pnpId || item.manufacturer,
24
+ comName: item.path
25
+ })), obj.callback);
26
+ }).catch((err) => {
27
+ this.adapter.log.error(`List of ports error: ${err}`);
28
+ this.adapter.sendTo(obj.from, obj.command, [], obj.callback);
29
+ });
41
30
  }
42
31
  break;
43
32
  }
44
33
  }
45
34
  }
35
+
36
+ listSerial() {
37
+ return serialPortUtils.find([{}]).then((ports) => {
38
+ return ports.map((port) => {return {comName: port};});
39
+ });
40
+ }
46
41
  }
47
42
 
48
43
  module.exports = SerialList;