iobroker.zigbee 1.7.5 → 1.8.0

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 (50) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +22 -29
  3. package/admin/admin.js +494 -469
  4. package/admin/i18n/de/translations.json +108 -0
  5. package/admin/i18n/en/translations.json +108 -0
  6. package/admin/i18n/es/translations.json +102 -0
  7. package/admin/i18n/fr/translations.json +108 -0
  8. package/admin/i18n/it/translations.json +102 -0
  9. package/admin/i18n/nl/translations.json +108 -0
  10. package/admin/i18n/pl/translations.json +108 -0
  11. package/admin/i18n/pt/translations.json +102 -0
  12. package/admin/i18n/ru/translations.json +108 -0
  13. package/admin/i18n/uk/translations.json +108 -0
  14. package/admin/i18n/zh-cn/translations.json +102 -0
  15. package/admin/index_m.html +1 -1
  16. package/admin/tab_m.html +44 -3
  17. package/admin/words.js +107 -108
  18. package/io-package.json +326 -357
  19. package/lib/backup.js +2 -2
  20. package/lib/binding.js +23 -24
  21. package/lib/colors.js +16 -14
  22. package/lib/commands.js +89 -82
  23. package/lib/developer.js +6 -7
  24. package/lib/devices.js +145 -154
  25. package/lib/exclude.js +30 -36
  26. package/lib/exposes.js +106 -111
  27. package/lib/groups.js +53 -54
  28. package/lib/json.js +3 -4
  29. package/lib/networkmap.js +2 -2
  30. package/lib/ota.js +23 -15
  31. package/lib/rgb.js +47 -44
  32. package/lib/seriallist.js +21 -10
  33. package/lib/states.js +488 -498
  34. package/lib/statescontroller.js +170 -164
  35. package/lib/utils.js +22 -21
  36. package/lib/zbBaseExtension.js +4 -4
  37. package/lib/zbDelayedAction.js +5 -13
  38. package/lib/zbDeviceAvailability.js +47 -44
  39. package/lib/zbDeviceConfigure.js +18 -23
  40. package/lib/zbDeviceEvent.js +3 -4
  41. package/lib/zigbeecontroller.js +97 -100
  42. package/main.js +149 -133
  43. package/package.json +33 -19
  44. package/.eslintignore +0 -2
  45. package/.eslintrc.json +0 -37
  46. package/.github/FUNDING.yml +0 -3
  47. package/.github/stale.yml +0 -13
  48. package/.github/workflows/test-and-release.yml +0 -151
  49. package/.travis/wiki.sh +0 -28
  50. package/admin/adapter-settings.js +0 -244
package/lib/devices.js CHANGED
@@ -1,9 +1,9 @@
1
1
  'use strict';
2
2
 
3
- const states = require(__dirname + '/states.js').states;
4
- const utils = require(__dirname + '/utils.js');
5
- const rgb = require(__dirname + '/rgb.js');
6
- const applyExposes = require(__dirname + '/exposes.js').applyExposes;
3
+ const states = require('./states.js').states;
4
+ const utils = require('./utils.js');
5
+ const rgb = require('./rgb.js');
6
+ const applyExposes = require('./exposes.js').applyExposes;
7
7
 
8
8
 
9
9
  // return list of changing states when incoming state is changed
@@ -23,7 +23,7 @@ const comb = {
23
23
  // index: -1, // before main change
24
24
  // timeout: 0,
25
25
  index: 1, // after main change
26
- timeout: timeout,
26
+ timeout,
27
27
  }];
28
28
  }
29
29
  } else if (disableQueue || options.state) {
@@ -32,7 +32,7 @@ const comb = {
32
32
  stateDesc: states.state,
33
33
  value: false,
34
34
  index: 1, // after main change
35
- timeout: timeout,
35
+ timeout,
36
36
  }];
37
37
  }
38
38
  }
@@ -42,20 +42,22 @@ const comb = {
42
42
  if (state.id === states.effect_json.id) {
43
43
  const effectjson = {};
44
44
  try {
45
- if (options.hasOwnProperty('effect_speed'))
45
+ if (options.hasOwnProperty('effect_speed')) {
46
46
  effectjson.speed = options.effect_speed;
47
- if (options.hasOwnProperty('effect_type'))
47
+ }
48
+ if (options.hasOwnProperty('effect_type')) {
48
49
  effectjson.effect = options.effect_type;
49
-
50
- if (options.hasOwnProperty('effect_colors'))
50
+ }
51
+ if (options.hasOwnProperty('effect_colors')) {
51
52
  effectjson.colors = rgb.colorsArrayFromString(options.effect_colors);
53
+ }
52
54
  // effectjson = JSON.parse(value);
53
55
  }
54
56
  catch {
55
57
  const effectjson = {
56
- colors:[{r: 255,g: 0,b: 0},{r: 0,g: 255,b: 0},{r: 0,g: 0,b: 255}],
57
- speed:10,
58
- effect:'glow',
58
+ colors: [{r: 255, g: 0, b: 0}, {r: 0, g: 255, b: 0}, {r: 0, g: 0, b: 255}],
59
+ speed: 10,
60
+ effect: 'glow',
59
61
  };
60
62
  if (options.hasOwnProperty('effect_speed'))
61
63
  effectjson.speed = options.effect_speed;
@@ -131,29 +133,30 @@ const freepad_states = [states.battery];
131
133
 
132
134
  function getKey(object, value) {
133
135
  for (const key in object) {
134
- if (object[key]==value) return key;
136
+ if (object[key] == value) {
137
+ return key;
138
+ }
135
139
  }
136
140
  }
137
141
 
138
142
  const unitLookup = {
139
143
  'temperature': 'C',
140
- 'humidity':'%',
141
- 'altitude':'m',
142
- 'pressure':'Pa',
143
- 'quality':'ppm',
144
- 'particle_size':'psize',
145
- 'voltage':'V',
146
- 'current':'A',
147
- 'energy':'Wh',
148
- 'power':'W',
149
- 'frequency':'Hz',
150
- 'power_factor':'pf',
151
- 'illuminance_lux':'lx',
152
-
144
+ 'humidity': '%',
145
+ 'altitude': 'm',
146
+ 'pressure': 'Pa',
147
+ 'quality': 'ppm',
148
+ 'particle_size': 'psize',
149
+ 'voltage': 'V',
150
+ 'current': 'A',
151
+ 'energy': 'Wh',
152
+ 'power': 'W',
153
+ 'frequency': 'Hz',
154
+ 'power_factor': 'pf',
155
+ 'illuminance_lux': 'lx',
153
156
  };
154
157
 
155
158
  const generator = {
156
- gledopto: (entity) => {
159
+ gledopto: entity => {
157
160
  if (entity.mapped.model === 'GL-C-008-2ID') {
158
161
  return gl_lightStatesWithColor.concat(gl8_white_channel);
159
162
  } else if (entity.mapped.model === 'GL-C-007-2ID') {
@@ -162,86 +165,75 @@ const generator = {
162
165
  return lightStatesWithColor;
163
166
  }
164
167
  },
165
- freepad: (entity) => {
168
+ freepad: entity => {
166
169
  const freepad_st = [];
167
170
  const ecount = entity.device.endpoints.length;
168
171
  for (let i = 1; i <= ecount; i++) {
169
- freepad_st.push(
170
- {
171
- id: `btn${i}_single`,
172
- prop: 'action',
173
- name: `Button ${i} click event`,
174
- icon: undefined,
175
- role: 'button',
176
- write: false,
177
- read: true,
178
- type: 'boolean',
179
- isEvent: true,
180
- getter: payload => (payload.action === `button_${i}_single`) ? true : undefined,
181
- }
182
- );
183
- freepad_st.push(
184
- {
185
- id: `btn${i}_double`,
186
- prop: 'action',
187
- name: `Button ${i} double click event`,
188
- icon: undefined,
189
- role: 'button',
190
- write: false,
191
- read: true,
192
- type: 'boolean',
193
- isEvent: true,
194
- getter: payload => (payload.action === `button_${i}_double`) ? true : undefined,
195
- }
196
- );
197
- freepad_st.push(
198
- {
199
- id: `btn${i}_hold`,
200
- prop: 'action',
201
- name: `Button ${i} hold`,
202
- icon: undefined,
203
- role: 'button',
204
- write: false,
205
- read: true,
206
- type: 'boolean',
207
- getter: payload => (payload.action === `button_${i}_hold`) ? true : (payload.action === `button_${i}_release`) ? false : undefined,
208
- }
209
- );
210
- freepad_st.push(
211
- {
212
- id: `btn${i}_triple`,
213
- prop: 'action',
214
- name: `Button ${i} triple click event`,
215
- icon: undefined,
216
- role: 'button',
217
- write: false,
218
- read: true,
219
- type: 'boolean',
220
- isEvent: true,
221
- getter: payload => (payload.action === `button_${i}_triple`) ? true : undefined,
222
- lazy: true,
223
- }
224
- );
225
- freepad_st.push(
226
- {
227
- id: `btn${i}_quadruple`,
228
- prop: 'action',
229
- name: `Button ${i} quadruple click event`,
230
- icon: undefined,
231
- role: 'button',
232
- write: false,
233
- read: true,
234
- type: 'boolean',
235
- isEvent: true,
236
- getter: payload => (payload.action === `button_${i}_quadruple`) ? true : undefined,
237
- lazy: true,
238
- }
239
- );
240
-
172
+ freepad_st.push({
173
+ id: `btn${i}_single`,
174
+ prop: 'action',
175
+ name: `Button ${i} click event`,
176
+ icon: undefined,
177
+ role: 'button',
178
+ write: false,
179
+ read: true,
180
+ type: 'boolean',
181
+ isEvent: true,
182
+ getter: payload => (payload.action === `button_${i}_single`) ? true : undefined,
183
+ });
184
+ freepad_st.push({
185
+ id: `btn${i}_double`,
186
+ prop: 'action',
187
+ name: `Button ${i} double click event`,
188
+ icon: undefined,
189
+ role: 'button',
190
+ write: false,
191
+ read: true,
192
+ type: 'boolean',
193
+ isEvent: true,
194
+ getter: payload => (payload.action === `button_${i}_double`) ? true : undefined,
195
+ });
196
+ freepad_st.push({
197
+ id: `btn${i}_hold`,
198
+ prop: 'action',
199
+ name: `Button ${i} hold`,
200
+ icon: undefined,
201
+ role: 'button',
202
+ write: false,
203
+ read: true,
204
+ type: 'boolean',
205
+ getter: payload => (payload.action === `button_${i}_hold`) ? true : (payload.action === `button_${i}_release`) ? false : undefined,
206
+ });
207
+ freepad_st.push({
208
+ id: `btn${i}_triple`,
209
+ prop: 'action',
210
+ name: `Button ${i} triple click event`,
211
+ icon: undefined,
212
+ role: 'button',
213
+ write: false,
214
+ read: true,
215
+ type: 'boolean',
216
+ isEvent: true,
217
+ getter: payload => (payload.action === `button_${i}_triple`) ? true : undefined,
218
+ lazy: true,
219
+ });
220
+ freepad_st.push({
221
+ id: `btn${i}_quadruple`,
222
+ prop: 'action',
223
+ name: `Button ${i} quadruple click event`,
224
+ icon: undefined,
225
+ role: 'button',
226
+ write: false,
227
+ read: true,
228
+ type: 'boolean',
229
+ isEvent: true,
230
+ getter: payload => (payload.action === `button_${i}_quadruple`) ? true : undefined,
231
+ lazy: true,
232
+ });
241
233
  }
242
234
  return freepad_states.concat(freepad_st);
243
235
  },
244
- ptvo_switch_channels: (entity) =>{
236
+ ptvo_switch_channels: entity =>{
245
237
  const devstates = [states.ptvo_trigger,states.ptvo_interval];
246
238
  for (const endpoint of entity.device.endpoints) {
247
239
  const epID = endpoint.ID;
@@ -269,7 +261,9 @@ const generator = {
269
261
 
270
262
  if (payload.hasOwnProperty(`device_${epName}`)) {
271
263
  id = (typeof(payload[`device_${epName}`]) == 'string' ? payload[`device_${epName}`].replace(/[-. ]/g, ''):'unset');
272
- } else if (payload.hasOwnProperty(`voltage_${epName}`)) id = 'voltage';
264
+ } else if (payload.hasOwnProperty(`voltage_${epName}`)) {
265
+ id = 'voltage';
266
+ }
273
267
  let unit = undefined;
274
268
  let measurement = undefined;
275
269
  for (const item in payload) {
@@ -283,12 +277,12 @@ const generator = {
283
277
  }
284
278
  }
285
279
  }
286
- if (measurement && id != 'voltage')
287
- rv.stateid = id + '_'+measurement;
280
+ if (measurement && id !== 'voltage')
281
+ rv.stateid = `${id}_${measurement}`;
288
282
  else
289
283
  rv.stateid = id;
290
284
  rv.value = payload[epName];
291
- rv.name = (measurement? measurement + ' 0x'+ id: '0x'+id);
285
+ rv.name = measurement? `${measurement} 0x${id}`: `0x${id}`;
292
286
  rv.unit = unit;
293
287
  rv.role = measurement;
294
288
 
@@ -306,8 +300,8 @@ const generator = {
306
300
  write: true,
307
301
  read: true,
308
302
  type: 'boolean',
309
- getter: payload => (payload[`state_${epName}`] === 'ON'),
310
- setter: (value) => (value) ? 'ON' : 'OFF',
303
+ getter: payload => payload[`state_${epName}`] === 'ON',
304
+ setter: value => value ? 'ON' : 'OFF',
311
305
  epname: epName,
312
306
  setattr: 'state',
313
307
  });
@@ -323,7 +317,7 @@ const generator = {
323
317
  read: true,
324
318
  type: 'boolean',
325
319
  isEvent: true,
326
- getter: payload => (payload.action === `single_${epName}`) ? true : undefined,
320
+ getter: payload => payload.action === `single_${epName}` ? true : undefined,
327
321
  });
328
322
  devstates.push({
329
323
  id: `channel_${epID}.double`,
@@ -335,7 +329,7 @@ const generator = {
335
329
  read: true,
336
330
  type: 'boolean',
337
331
  isEvent: true,
338
- getter: payload => (payload.action === `double_${epName}`) ? true : undefined,
332
+ getter: payload => payload.action === `double_${epName}` ? true : undefined,
339
333
  });
340
334
  devstates.push({
341
335
  id: `channel_${epID}.tripple`,
@@ -347,7 +341,7 @@ const generator = {
347
341
  read: true,
348
342
  type: 'boolean',
349
343
  isEvent: true,
350
- getter: payload => (payload.action === `tripple_${epName}`) ? true : undefined,
344
+ getter: payload => payload.action === `tripple_${epName}` ? true : undefined,
351
345
  });
352
346
  }
353
347
  if (endpoint.supportsOutputCluster('genLevelCtrl')) {
@@ -362,12 +356,8 @@ const generator = {
362
356
  unit: '',
363
357
  min: 0,
364
358
  max: 100,
365
- getter: payload => {
366
- return utils.bulbLevelToAdapterLevel(payload[`brightness_${epName}`]);
367
- },
368
- setter: (value) => {
369
- return utils.adapterLevelToBulbLevel(value);
370
- },
359
+ getter: payload => utils.bulbLevelToAdapterLevel(payload[`brightness_${epName}`]),
360
+ setter: value => utils.adapterLevelToBulbLevel(value),
371
361
  epname: epName,
372
362
  setattr: 'brightness',
373
363
  });
@@ -386,9 +376,7 @@ const generator = {
386
376
  getter: payload => { //l3=0 brightness_l3=0
387
377
  return payload[`${epName}`]; //return payload[`brightness_${epName}`];
388
378
  },
389
- setter: (value) => {
390
- return value;
391
- },
379
+ setter: value => value,
392
380
  epname: epName
393
381
  });
394
382
  }
@@ -438,9 +426,15 @@ const generator = {
438
426
  read: true,
439
427
  type: 'boolean',
440
428
  getter: payload => {
441
- if ((payload.action_group % ecount) != (epidx % ecount)) return undefined;
442
- if (payload.action == 'brightness_move_up') return true;
443
- if (payload.action == 'brightness_stop') return false;
429
+ if ((payload.action_group % ecount) != (epidx % ecount)) {
430
+ return undefined;
431
+ }
432
+ if (payload.action === 'brightness_move_up') {
433
+ return true;
434
+ }
435
+ if (payload.action === 'brightness_stop') {
436
+ return false;
437
+ }
444
438
  return undefined;
445
439
  },
446
440
  });
@@ -454,9 +448,15 @@ const generator = {
454
448
  read: true,
455
449
  type: 'boolean',
456
450
  getter: payload => {
457
- if ((payload.action_group % ecount) != (epidx % ecount)) return undefined;
458
- if (payload.action == 'brightness_move_down') return true;
459
- if (payload.action == 'brightness_stop') return false;
451
+ if ((payload.action_group % ecount) != (epidx % ecount)) {
452
+ return undefined;
453
+ }
454
+ if (payload.action === 'brightness_move_down') {
455
+ return true;
456
+ }
457
+ if (payload.action === 'brightness_stop') {
458
+ return false;
459
+ }
460
460
  return undefined;
461
461
  },
462
462
  });
@@ -502,8 +502,8 @@ const generator = {
502
502
  write: true,
503
503
  read: true,
504
504
  type: 'boolean',
505
- getter: payload => (payload[`state_${epName}`] === 'ON'),
506
- setter: (value) => (value) ? 'ON' : 'OFF',
505
+ getter: payload => payload[`state_${epName}`] === 'ON',
506
+ setter: value => value ? 'ON' : 'OFF',
507
507
  epname: epName,
508
508
  setattr: 'state',
509
509
  });
@@ -519,7 +519,7 @@ const generator = {
519
519
  read: true,
520
520
  type: 'boolean',
521
521
  isEvent: true,
522
- getter: payload => (payload.action === `single_${epName}`) ? true : undefined,
522
+ getter: payload => payload.action === `single_${epName}` ? true : undefined,
523
523
  });
524
524
  devstates.push({
525
525
  id: `btn_${epID}_double`,
@@ -531,7 +531,7 @@ const generator = {
531
531
  read: true,
532
532
  type: 'boolean',
533
533
  isEvent: true,
534
- getter: payload => (payload.action === `double_${epName}`) ? true : undefined,
534
+ getter: payload => payload.action === `double_${epName}` ? true : undefined,
535
535
  });
536
536
  devstates.push({
537
537
  id: `btn_${epID}_tripple`,
@@ -543,7 +543,7 @@ const generator = {
543
543
  read: true,
544
544
  type: 'boolean',
545
545
  isEvent: true,
546
- getter: payload => (payload.action === `tripple_${epName}`) ? true : undefined,
546
+ getter: payload => payload.action === `tripple_${epName}` ? true : undefined,
547
547
  });
548
548
  }
549
549
  if (endpoint.supportsOutputCluster('genLevelCtrl')) {
@@ -558,12 +558,8 @@ const generator = {
558
558
  unit: '',
559
559
  min: 0,
560
560
  max: 100,
561
- getter: payload => {
562
- return utils.bulbLevelToAdapterLevel(payload[`brightness_${epName}`]);
563
- },
564
- setter: (value) => {
565
- return utils.adapterLevelToBulbLevel(value);
566
- },
561
+ getter: payload => utils.bulbLevelToAdapterLevel(payload[`brightness_${epName}`]),
562
+ setter: value => utils.adapterLevelToBulbLevel(value),
567
563
  epname: epName,
568
564
  setattr: 'brightness',
569
565
  });
@@ -817,14 +813,14 @@ const devices = [
817
813
  {
818
814
  models: ['LLKZMK11LM'],
819
815
  icon: 'img/lumi_relay.png',
820
- states: [states.channel1_state, states.channel2_state, states.load_power,
816
+ states: [states.voltage, states.channel1_state, states.channel2_state, states.load_power,
821
817
  states.temperature, states.interlock, states.plug_consumption],
822
818
  },
823
819
  {
824
820
  models: ['ZNCLDJ11LM'],
825
821
  icon: 'img/aqara_curtain.png',
826
822
  states: [states.curtain_position, states.curtain_running, states.curtain_stop, states.curtain_xiaomi_reverse_direction,
827
- states.curtain_xiaomi_reset_limits, states.curtain_xiaomi_hand_open],
823
+ states.curtain_xiaomi_reset_limits, states.curtain_xiaomi_hand_open],
828
824
  },
829
825
  {
830
826
  models: ['WXCJKG11LM'],
@@ -3044,7 +3040,7 @@ const devices = [
3044
3040
  states: generator.icasa_remote,
3045
3041
  },
3046
3042
 
3047
- /* images only for admin */
3043
+ /* ------------ images only for admin ------------------- */
3048
3044
  {
3049
3045
  models: ['E1812'],
3050
3046
  icon: 'img/ikea_E1812.png',
@@ -3075,13 +3071,12 @@ const devices = [
3075
3071
  },
3076
3072
  {
3077
3073
  models: ['TI0001-cover'],
3078
- icon: 'img/TI0001-cover.png',
3074
+ icon: 'img/TI0001-cover.png',
3079
3075
  },
3080
3076
  {
3081
3077
  models: ['E1603/E1702/E1708'],
3082
3078
  icon: 'img/ikea_control_outlet.png',
3083
3079
  },
3084
-
3085
3080
  ];
3086
3081
 
3087
3082
  const commonStates = [
@@ -3094,12 +3089,11 @@ const commonStates = [
3094
3089
 
3095
3090
  const groupStates = [states.brightness_step].concat(lightStatesWithColor);
3096
3091
 
3097
-
3098
3092
  function getByModel() {
3099
3093
  const byModel = new Map();
3100
3094
  for (const device of devices) {
3101
3095
  for (const model of device.models) {
3102
- const stripModel = model.replace(/\0.*$/g, '').trim();
3096
+ const stripModel = model.replace(/0.*$/g, '').trim();
3103
3097
  byModel.set(stripModel, device);
3104
3098
  }
3105
3099
  }
@@ -3121,25 +3115,22 @@ function fillStatesWithExposes(allExcludesObj) {
3121
3115
  function removeEmptyStates(devices) {
3122
3116
  for (const device of devices) {
3123
3117
  if (Array.isArray(device.states)) {
3124
- device.states = device.states.filter((el) => el !== undefined);
3118
+ device.states = device.states.filter(el => el !== undefined);
3125
3119
  }
3126
3120
  }
3127
3121
  }
3128
3122
 
3129
-
3130
3123
  function findModel(model) {
3131
3124
  const byModel = getByModel();
3132
- const stripModel = (model) ? model.replace(/\0.*$/g, '').trim() : '';
3125
+ const stripModel = (model) ? model.replace(/0.*$/g, '').trim() : '';
3133
3126
  return byModel.get(stripModel);
3134
3127
  }
3135
3128
 
3136
-
3137
-
3138
3129
  module.exports = {
3139
- devices: devices,
3140
- commonStates: commonStates,
3141
- groupStates: groupStates,
3130
+ devices,
3131
+ commonStates,
3132
+ groupStates,
3142
3133
  groupsState: states.groups,
3143
- fillStatesWithExposes: fillStatesWithExposes,
3144
- findModel: findModel
3134
+ fillStatesWithExposes,
3135
+ findModel,
3145
3136
  };
package/lib/exclude.js CHANGED
@@ -27,13 +27,12 @@ class Exclude {
27
27
  debug(msg) {
28
28
  this.adapter.log.debug(msg);
29
29
  }
30
-
30
+
31
31
  warn(msg) {
32
32
  this.adapter.log.warn(msg);
33
33
  }
34
34
 
35
35
 
36
-
37
36
  /**
38
37
  * @param {ioBroker.Message} obj
39
38
  */
@@ -42,24 +41,21 @@ class Exclude {
42
41
  switch (obj.command) {
43
42
  case 'addExclude':
44
43
  if (obj && obj.message && typeof obj.message === 'object') {
45
- this.addExclude(obj.from, obj.command, obj.message, (err)=>{
46
- this.adapter.sendTo(obj.from, obj.command, err, obj.callback);
47
- });
44
+ this.addExclude(obj.from, obj.command, obj.message, err =>
45
+ this.adapter.sendTo(obj.from, obj.command, err, obj.callback));
48
46
  }
49
47
  break;
50
48
 
51
49
  case 'getExclude':
52
50
  if (obj && obj.message && typeof obj.message === 'object') {
53
- this.getExclude((exclude)=>{
54
- this.adapter.sendTo(obj.from, obj.command, exclude, obj.callback);
55
- });
51
+ this.getExclude(exclude =>
52
+ this.adapter.sendTo(obj.from, obj.command, exclude, obj.callback));
56
53
  }
57
54
  break;
58
55
  case 'delExclude':
59
56
  if (obj && obj.message) {
60
- this.delExclude(obj.from, obj.command, obj.message, (err)=>{
61
- this.adapter.sendTo(obj.from, obj.command, err, obj.callback);
62
- });
57
+ this.delExclude(obj.from, obj.command, obj.message, err =>
58
+ this.adapter.sendTo(obj.from, obj.command, err, obj.callback));
63
59
  }
64
60
  break;
65
61
  }
@@ -69,13 +65,14 @@ class Exclude {
69
65
  getExcludeId(exclude_target) {
70
66
  return `${this.extractDeviceId(exclude_target)}`;
71
67
  }
72
-
68
+
73
69
  extractDeviceId(stateId) {
74
- if (stateId)
70
+ if (stateId) {
75
71
  return stateId.replace(`${this.adapter.namespace}.`, '');
72
+ }
76
73
  return '';
77
74
  }
78
-
75
+
79
76
  extractExcludeId(stateId) {
80
77
  return stateId.replace(`${this.adapter.namespace}.exclude.`, '');
81
78
  }
@@ -94,27 +91,25 @@ class Exclude {
94
91
  {
95
92
  type: 'state',
96
93
  common: {name: exclude_mod},
97
- }, () => {
98
- this.adapter.setState(stateId, exclude_mod, true, () => {
99
- callback();
100
- });
101
- }
94
+ },
95
+ () => this.adapter.setState(stateId, exclude_mod, true, () =>
96
+ callback()),
102
97
  );
103
98
  } catch (error) {
104
99
  this.error(`Failed to addExclude ${error.stack}`);
105
100
  throw new Error(`Failed to addExclude ${error.stack}`);
106
101
  }
107
102
  }
103
+
108
104
  async delExclude(from, command, exclude_id, callback) {
109
105
  try {
110
- this.debug('delExclude message: ' + JSON.stringify(exclude_id));
106
+ this.debug(`delExclude message: ${JSON.stringify(exclude_id)}`);
111
107
  const stateId = `exclude.${exclude_id}`;
112
108
  this.adapter.getStateAsync(stateId)
113
109
  .then(async (stateV) => {
114
- this.debug('found state: ' + JSON.stringify(stateV));
115
- this.adapter.deleteState(null, 'exclude', exclude_id, async () => {
116
- callback();
117
- });
110
+ this.debug(`found state: ${JSON.stringify(stateV)}`);
111
+ this.adapter.deleteState(null, 'exclude', exclude_id, async () =>
112
+ callback());
118
113
  });
119
114
  } catch (error) {
120
115
  this.error(`Failed to delExclude ${error.stack}`);
@@ -130,32 +125,31 @@ class Exclude {
130
125
  const exc = [];
131
126
  states.forEach(state => {
132
127
  if (state._id.startsWith(`${this.adapter.namespace}.exclude`)) {
133
- exc.push(new Promise(resolve => {
134
- return this.adapter.getStateAsync(state._id)
128
+ exc.push(new Promise(resolve =>
129
+ this.adapter.getStateAsync(state._id)
135
130
  .then(stateVa => {
136
131
  if (stateVa !== null) {
137
132
  const val = {
138
133
  id: this.extractExcludeId(state._id),
139
- name : stateVa.val
134
+ name: stateVa.val
140
135
  };
141
136
  if (this.extractExcludeId(state._id) !== 'all') {
142
137
  exclude.push(val);
143
138
  }
144
139
  }
145
140
  resolve();
146
- });
147
- }));
141
+ })));
148
142
  }
149
143
  });
150
- return Promise.all(exc).then(() => {
151
- const arrExclude = JSON.stringify(exclude);
152
- this.debug('getExclude result: ' + arrExclude);
153
- this.adapter.setState('exclude.all', arrExclude, true, () => {
154
- callback(exclude);
144
+ return Promise.all(exc)
145
+ .then(() => {
146
+ const arrExclude = JSON.stringify(exclude);
147
+ this.debug(`getExclude result: ${arrExclude}`);
148
+ this.adapter.setState('exclude.all', arrExclude, true, () =>
149
+ callback(exclude));
155
150
  });
156
- });
157
151
  } else {
158
- this.debug('getExclude result: ' + JSON.stringify(exclude));
152
+ this.debug(`getExclude result: ${JSON.stringify(exclude)}`);
159
153
  callback(exclude);
160
154
  }
161
155
  });