iobroker.zigbee 1.8.3 → 1.8.5

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 (87) hide show
  1. package/README.md +3 -0
  2. package/admin/admin.js +512 -493
  3. package/admin/index_m.html +1171 -1001
  4. package/admin/tab_m.html +44 -3
  5. package/docs/de/img/CC2531.png +0 -0
  6. package/docs/de/img/CC2538_CC2592_PA.PNG +0 -0
  7. package/docs/de/img/CC2591.png +0 -0
  8. package/docs/de/img/boards.jpg +0 -0
  9. package/docs/de/img/cc26x2r.PNG +0 -0
  10. package/docs/de/img/results.jpg +0 -0
  11. package/docs/de/img/sku_429478_2.png +0 -0
  12. package/docs/de/img/sku_429601_2.png +0 -0
  13. package/docs/de/readme.md +27 -0
  14. package/docs/en/img/CC2531.png +0 -0
  15. package/docs/en/img/CC2591.png +0 -0
  16. package/docs/en/img/deconz.png +0 -0
  17. package/docs/en/img/sku_429478_2.png +0 -0
  18. package/docs/en/img/sku_429601_2.png +0 -0
  19. package/docs/en/readme.md +30 -0
  20. package/docs/flashing_via_arduino_(en).md +110 -0
  21. package/docs/ru/img/CC2531.png +0 -0
  22. package/docs/ru/img/CC2591.png +0 -0
  23. package/docs/ru/img/sku_429478_2.png +0 -0
  24. package/docs/ru/img/sku_429601_2.png +0 -0
  25. package/docs/ru/readme.md +28 -0
  26. package/docs/tutorial/CC2530_20190425.zip +0 -0
  27. package/docs/tutorial/CC2530_CC2591_20190515.zip +0 -0
  28. package/docs/tutorial/CC2530_CC2592_20190515.zip +0 -0
  29. package/docs/tutorial/CC2531_20190425.zip +0 -0
  30. package/docs/tutorial/adm5_1.PNG +0 -0
  31. package/docs/tutorial/adm5_2.PNG +0 -0
  32. package/docs/tutorial/cat.PNG +0 -0
  33. package/docs/tutorial/groups-1.png +0 -0
  34. package/docs/tutorial/groups-2.png +0 -0
  35. package/docs/tutorial/inst.PNG +0 -0
  36. package/docs/tutorial/reflash-finish.PNG +0 -0
  37. package/docs/tutorial/reflash-step0.png +0 -0
  38. package/docs/tutorial/reflash-step1.PNG +0 -0
  39. package/docs/tutorial/reflash-step2.PNG +0 -0
  40. package/docs/tutorial/settings.png +0 -0
  41. package/docs/tutorial/tab-dev-1.png +0 -0
  42. package/docs/tutorial/zigbee.png +0 -0
  43. package/docs/tutorial/zigbee15.png +0 -0
  44. package/io-package.json +17 -25
  45. package/lib/backup.js +2 -2
  46. package/lib/binding.js +32 -37
  47. package/lib/colors.js +163 -158
  48. package/lib/commands.js +100 -91
  49. package/lib/developer.js +9 -12
  50. package/lib/devices.js +168 -178
  51. package/lib/exclude.js +30 -36
  52. package/lib/exposes.js +163 -139
  53. package/lib/groups.js +81 -83
  54. package/lib/json.js +5 -6
  55. package/lib/networkmap.js +2 -3
  56. package/lib/ota.js +34 -18
  57. package/lib/rgb.js +114 -72
  58. package/lib/seriallist.js +25 -20
  59. package/lib/states.js +511 -526
  60. package/lib/statescontroller.js +206 -183
  61. package/lib/utils.js +24 -23
  62. package/lib/zbBaseExtension.js +4 -4
  63. package/lib/zbDelayedAction.js +5 -13
  64. package/lib/zbDeviceAvailability.js +69 -65
  65. package/lib/zbDeviceConfigure.js +9 -21
  66. package/lib/zbDeviceEvent.js +3 -4
  67. package/lib/zigbeecontroller.js +133 -128
  68. package/main.js +169 -154
  69. package/package.json +27 -13
  70. package/.eslintignore +0 -2
  71. package/.eslintrc.json +0 -37
  72. package/.github/FUNDING.yml +0 -3
  73. package/.github/auto-merge.yml +0 -17
  74. package/.github/dependabot.yml +0 -24
  75. package/.github/stale.yml +0 -13
  76. package/.github/workflows/codeql.yml +0 -41
  77. package/.github/workflows/dependabot-automerge.yml +0 -22
  78. package/.github/workflows/test-and-release.yml +0 -149
  79. package/.releaseconfig.json +0 -3
  80. package/.travis/wiki.sh +0 -28
  81. package/.travis.yml +0 -41
  82. package/gulpfile.js +0 -464
  83. package/test/integration.js +0 -5
  84. package/test/mocha.custom.opts +0 -2
  85. package/test/mocha.setup.js +0 -14
  86. package/test/package.js +0 -5
  87. package/test/unit.js +0 -5
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 transfered it to JavaScript.
7
+ I've used the formulas and Objective-C example code and transferred it to JavaScript.
8
8
 
9
9
 
10
10
  Examples:
@@ -60,24 +60,20 @@ 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
-
70
69
  green = green / red;
71
70
  blue = blue / red;
72
71
  red = 1.0;
73
- }
74
- else if (green > blue && green > red && green > 1.0) {
75
-
72
+ } else if (green > blue && green > red && green > 1.0) {
76
73
  red = red / green;
77
74
  blue = blue / green;
78
75
  green = 1.0;
79
- }
80
- else if (blue > red && blue > green && blue > 1.0) {
76
+ } else if (blue > red && blue > green && blue > 1.0) {
81
77
 
82
78
  red = red / blue;
83
79
  green = green / blue;
@@ -85,25 +81,24 @@ function cie_to_rgb(x, y, brightness) {
85
81
  }
86
82
 
87
83
  //Reverse gamma correction
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
-
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;
92
87
 
93
88
  //Convert normalized decimal to decimal
94
- red = Math.round(red * 255);
95
- green = Math.round(green * 255);
96
- blue = Math.round(blue * 255);
89
+ red = Math.round(red * 255);
90
+ green = Math.round(green * 255);
91
+ blue = Math.round(blue * 255);
97
92
 
98
- if (isNaN(red) || red < 0 ) {
93
+ if (isNaN(red) || red < 0) {
99
94
  red = 0;
100
95
  }
101
96
 
102
- if (isNaN(green) || green < 0 ) {
97
+ if (isNaN(green) || green < 0) {
103
98
  green = 0;
104
99
  }
105
100
 
106
- if (isNaN(blue) || blue < 0 ) {
101
+ if (isNaN(blue) || blue < 0) {
107
102
  blue = 0;
108
103
  }
109
104
 
@@ -120,18 +115,18 @@ function cie_to_rgb(x, y, brightness) {
120
115
  */
121
116
  function rgb_to_cie(red, green, blue) {
122
117
  // 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
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);
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);
126
121
 
127
122
  // RGB values to XYZ using the Wide RGB D65 conversion formula
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;
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;
131
126
 
132
127
  // Calculate the xy values from the XYZ values
133
- let x = (X / (X + Y + Z)).toFixed(4);
134
- let y = (Y / (X + Y + Z)).toFixed(4);
128
+ let x = (X / (X + Y + Z)).toFixed(4);
129
+ let y = (Y / (X + Y + Z)).toFixed(4);
135
130
 
136
131
  if (isNaN(x)) {
137
132
  x = 0;
@@ -150,9 +145,13 @@ function hsvToRGB(h, s, v) {
150
145
  s = s / 100;
151
146
  v = v / 100;
152
147
 
153
- let r; let g; let b;
148
+ let r;
149
+ let g;
150
+ let b;
154
151
  if (arguments.length === 1) {
155
- s = h.s, v = h.v, h = h.h;
152
+ s = h.s;
153
+ v = h.v;
154
+ h = h.h;
156
155
  }
157
156
  const i = Math.floor(h * 6);
158
157
  const f = h * 6 - i;
@@ -160,12 +159,36 @@ function hsvToRGB(h, s, v) {
160
159
  const q = v * (1 - f * s);
161
160
  const t = v * (1 - (1 - f) * s);
162
161
  switch (i % 6) {
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;
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;
169
192
  }
170
193
  return {
171
194
  r: Math.round(r * 255),
@@ -176,73 +199,92 @@ function hsvToRGB(h, s, v) {
176
199
 
177
200
  function rgbToHSV(r, g, b, numeric) {
178
201
  if (arguments.length === 1) {
179
- g = r.g, b = r.b, r = r.r;
202
+ g = r.g;
203
+ b = r.b;
204
+ r = r.r;
180
205
  }
181
- const max = Math.max(r, g, b); const min = Math.min(r, g, b);
206
+ const max = Math.max(r, g, b);
207
+ const min = Math.min(r, g, b);
182
208
  const d = max - min;
183
209
  let h;
184
210
  const s = (max === 0 ? 0 : d / max);
185
211
  const v = max / 255;
186
212
 
187
213
  switch (max) {
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
- };
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
+ }
198
237
  return {
199
238
  h: (h * 360).toFixed(3),
200
239
  s: (s * 100).toFixed(3),
201
240
  v: (v * 100).toFixed(3),
202
241
  };
203
242
  }
243
+
204
244
  function colorArrayFromString(value) {
205
- if (typeof(value) === 'string') {
245
+ if (typeof value === 'string') {
206
246
  const rv = [];
207
- value.split(',').forEach(element => {
208
- rv.push(colors.ParseColor(element));
209
- });
247
+ value.split(',').forEach(element =>
248
+ rv.push(colors.ParseColor(element)));
210
249
  return rv;
211
250
  }
212
- return [{r:0,g:128,b:255}];
251
+ return [{r: 0, g: 128, b: 255}];
213
252
  }
214
253
 
215
- function colorStringFromRGBArray(payload)
216
- {
217
- let rv = []
218
- payload.forEach(element => {
219
- rv.push(rgb_to_rgbstring(element));
220
- });
254
+ function colorStringFromRGBArray(payload) {
255
+ const rv = [];
256
+ payload.forEach(element =>
257
+ rv.push(rgb_to_rgbstring(element)));
221
258
  return rv.toString();
222
259
  }
223
260
 
224
- function hsv_to_cie(h,s,v){
225
- const rgb = hsvToRGB(h,s,v);
261
+ function hsv_to_cie(h, s, v) {
262
+ const rgb = hsvToRGB(h, s, v);
226
263
  return rgb_to_cie(rgb.r, rgb.g, rgb.b);
227
264
  }
228
265
 
229
266
  function rgb_to_rgbstring(element) {
230
267
  let col = '#';
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';
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
+ }
240
283
  return col;
241
284
  }
242
285
 
243
-
244
- function hsvToRGBString(h,s,v) {
245
- return rgb_to_rgbstring(hsvToRGB(h,s,v))
286
+ function hsvToRGBString(h, s, v) {
287
+ return rgb_to_rgbstring(hsvToRGB(h, s, v));
246
288
  }
247
289
 
248
290
  exports.hsv_to_cie = hsv_to_cie;
package/lib/seriallist.js CHANGED
@@ -1,13 +1,13 @@
1
1
  'use strict';
2
2
 
3
- const serialPortUtils = require('zigbee-herdsman/dist/adapter/serialPortUtils').default;
4
-
3
+ let SerialPort = null;
5
4
 
6
5
  class SerialList {
7
6
  constructor(adapter) {
8
7
  this.adapter = adapter;
9
- this.adapter.on('message', this.onMessage.bind(this));
8
+ this.adapter.on('message', obj => this.onMessage(obj));
10
9
  }
10
+
11
11
  /**
12
12
  * @param {ioBroker.Message} obj
13
13
  */
@@ -16,28 +16,33 @@ class SerialList {
16
16
  switch (obj.command) {
17
17
  case 'listUart':
18
18
  if (obj.callback) {
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
- });
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
+ }
30
41
  }
31
42
  break;
32
43
  }
33
44
  }
34
45
  }
35
-
36
- listSerial() {
37
- return serialPortUtils.find([{}]).then((ports) => {
38
- return ports.map((port) => {return {comName: port};});
39
- });
40
- }
41
46
  }
42
47
 
43
48
  module.exports = SerialList;