iobroker.zigbee 1.7.6 → 1.8.1

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 (97) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +368 -381
  3. package/admin/admin.js +2951 -2927
  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/img/philips_hue_lom001.png +0 -0
  16. package/admin/index.html +159 -159
  17. package/admin/index_m.html +1161 -1161
  18. package/admin/moment.min.js +1 -1
  19. package/admin/shuffle.min.js +2 -2
  20. package/admin/tab_m.html +985 -944
  21. package/admin/vis-network.min.css +1 -1
  22. package/admin/vis-network.min.js +27 -27
  23. package/admin/words.js +110 -110
  24. package/docs/de/img/CC2531.png +0 -0
  25. package/docs/de/img/CC2538_CC2592_PA.PNG +0 -0
  26. package/docs/de/img/CC2591.png +0 -0
  27. package/docs/de/img/boards.jpg +0 -0
  28. package/docs/de/img/cc26x2r.PNG +0 -0
  29. package/docs/de/img/results.jpg +0 -0
  30. package/docs/de/img/sku_429478_2.png +0 -0
  31. package/docs/de/img/sku_429601_2.png +0 -0
  32. package/docs/de/readme.md +27 -0
  33. package/docs/en/img/CC2531.png +0 -0
  34. package/docs/en/img/CC2591.png +0 -0
  35. package/docs/en/img/deconz.png +0 -0
  36. package/docs/en/img/sku_429478_2.png +0 -0
  37. package/docs/en/img/sku_429601_2.png +0 -0
  38. package/docs/en/readme.md +30 -0
  39. package/docs/flashing_via_arduino_(en).md +110 -0
  40. package/docs/ru/img/CC2531.png +0 -0
  41. package/docs/ru/img/CC2591.png +0 -0
  42. package/docs/ru/img/sku_429478_2.png +0 -0
  43. package/docs/ru/img/sku_429601_2.png +0 -0
  44. package/docs/ru/readme.md +28 -0
  45. package/docs/tutorial/CC2530_20190425.zip +0 -0
  46. package/docs/tutorial/CC2530_CC2591_20190515.zip +0 -0
  47. package/docs/tutorial/CC2530_CC2592_20190515.zip +0 -0
  48. package/docs/tutorial/CC2531_20190425.zip +0 -0
  49. package/docs/tutorial/adm5_1.PNG +0 -0
  50. package/docs/tutorial/adm5_2.PNG +0 -0
  51. package/docs/tutorial/cat.PNG +0 -0
  52. package/docs/tutorial/groups-1.png +0 -0
  53. package/docs/tutorial/groups-2.png +0 -0
  54. package/docs/tutorial/inst.PNG +0 -0
  55. package/docs/tutorial/reflash-finish.PNG +0 -0
  56. package/docs/tutorial/reflash-step0.png +0 -0
  57. package/docs/tutorial/reflash-step1.PNG +0 -0
  58. package/docs/tutorial/reflash-step2.PNG +0 -0
  59. package/docs/tutorial/settings.png +0 -0
  60. package/docs/tutorial/tab-dev-1.png +0 -0
  61. package/docs/tutorial/zigbee.png +0 -0
  62. package/docs/tutorial/zigbee15.png +0 -0
  63. package/io-package.json +335 -370
  64. package/lib/backup.js +171 -171
  65. package/lib/binding.js +320 -325
  66. package/lib/colors.js +465 -460
  67. package/lib/commands.js +510 -501
  68. package/lib/developer.js +145 -148
  69. package/lib/devices.js +3135 -3145
  70. package/lib/exclude.js +162 -168
  71. package/lib/exposes.js +828 -804
  72. package/lib/groups.js +340 -342
  73. package/lib/json.js +59 -60
  74. package/lib/networkmap.js +55 -56
  75. package/lib/ota.js +195 -179
  76. package/lib/rgb.js +297 -255
  77. package/lib/seriallist.js +48 -37
  78. package/lib/states.js +6405 -6416
  79. package/lib/statescontroller.js +693 -670
  80. package/lib/tools.js +54 -54
  81. package/lib/utils.js +152 -151
  82. package/lib/zbBaseExtension.js +36 -36
  83. package/lib/zbDelayedAction.js +144 -152
  84. package/lib/zbDeviceAvailability.js +319 -315
  85. package/lib/zbDeviceConfigure.js +147 -159
  86. package/lib/zbDeviceEvent.js +48 -49
  87. package/lib/zigbeecontroller.js +957 -951
  88. package/main.js +163 -147
  89. package/package.json +33 -19
  90. package/support/docgen.js +93 -93
  91. package/.eslintignore +0 -2
  92. package/.eslintrc.json +0 -37
  93. package/.github/FUNDING.yml +0 -3
  94. package/.github/stale.yml +0 -13
  95. package/.github/workflows/test-and-release.yml +0 -151
  96. package/.travis/wiki.sh +0 -28
  97. package/admin/adapter-settings.js +0 -244
package/lib/developer.js CHANGED
@@ -1,148 +1,145 @@
1
- 'use strict';
2
-
3
- const ZigbeeHerdsman = require('zigbee-herdsman');
4
-
5
-
6
- class Developer {
7
- constructor(adapter) {
8
- this.adapter = adapter;
9
- this.adapter.on('message', this.onMessage.bind(this));
10
- }
11
-
12
- start(zbController, stController) {
13
- this.zbController = zbController;
14
- this.stController = stController;
15
- }
16
-
17
- stop() {
18
- delete this.zbController;
19
- delete this.stController;
20
- }
21
-
22
- info(msg) {
23
- this.adapter.log.info(msg);
24
- }
25
-
26
- error(msg) {
27
- this.adapter.log.error(msg);
28
- }
29
-
30
- debug(msg) {
31
- this.adapter.log.debug(msg);
32
- }
33
-
34
- /**
35
- * @param {ioBroker.Message} obj
36
- */
37
- onMessage(obj) {
38
- if (typeof obj === 'object' && obj.command) {
39
- switch (obj.command) {
40
- case 'reset':
41
- this.zbController.reset(obj.message.mode, function (err) {
42
- this.adapter.sendTo(obj.from, obj.command, err, obj.callback);
43
- }.bind(this));
44
- break;
45
- case 'sendToZigbee':
46
- this.sendToZigbee(obj);
47
- break;
48
- case 'getLibData':
49
- // e.g. zcl lists
50
- this.getLibData(obj);
51
- break;
52
- }
53
- }
54
- }
55
-
56
- getLibData(obj) {
57
- const key = obj.message.key;
58
- const zcl = ZigbeeHerdsman.Zcl;
59
- const result = {};
60
- if (key === 'cidList') {
61
- result.list = zcl.Cluster;
62
- } else if (key === 'attrIdList') {
63
- const cid = obj.message.cid;
64
- result.list = zcl.Utils.getCluster(cid).attributes;
65
- } else if (key === 'cmdListFoundation') {
66
- result.list = zcl.Foundation;
67
- } else if (key === 'cmdListFunctional') {
68
- result.list = null;
69
- const cluster = zcl.Utils.getCluster(obj.message.cid);
70
- if (typeof cluster != 'undefined') {
71
- const extraCmd = cluster.commands;
72
- result.list = extraCmd;
73
- }
74
- } else if (key === 'respCodes') {
75
- result.list = zcl.Status;
76
- } else if (key === 'typeList') {
77
- result.list = zcl.DataType;
78
- } else {
79
- return;
80
- }
81
- result.key = key;
82
- this.adapter.sendTo(obj.from, obj.command, result, obj.callback);
83
- }
84
-
85
- async sendToZigbee(obj) {
86
- const zcl = ZigbeeHerdsman.Zcl;
87
- const devId = '0x' + obj.message.id.replace(this.adapter.namespace + '.', '');
88
- const ep = obj.message.ep ? obj.message.ep : null;
89
- const cid = obj.message.cid;
90
- const cmdType = obj.message.cmdType;
91
- let cmd;
92
- const zclData = obj.message.zclData;
93
- if (cmdType === 'functional') {
94
- cmd = zcl.Utils.getCluster(cid).getCommand(obj.message.cmd);
95
- }
96
- else if (cmdType === 'functionalResp') {
97
- cmd = zcl.Utils.getCluster(cid).getCommandResponse(obj.message.cmd);
98
- }
99
- else if (cmdType === 'foundation') {
100
- cmd = zcl.Utils.getGlobalCommand((obj.message.cmd));
101
- } else {
102
- this.adapter.sendTo(obj.from, obj.command, {localErr: 'Invalid cmdType'}, obj.callback);
103
- return;
104
- }
105
- const cfg = obj.message.hasOwnProperty('cfg') ? obj.message.cfg : null;
106
-
107
- const publishTarget = this.zbController.getDevice(devId) ? devId : this.zbController.getGroup(parseInt(devId));
108
- if (!publishTarget) {
109
- this.adapter.sendTo(obj.from, obj.command, {localErr: 'Device or group ' + devId + ' not found!'}, obj.callback);
110
- return;
111
- }
112
- if (!cid || !cmd) {
113
- this.adapter.sendTo(obj.from, obj.command, {localErr: 'Incomplete data (cid or cmd)'}, obj.callback);
114
- return;
115
- }
116
- this.debug(`Ready to send (ep: ${ep}, cid: ${cid}, cmd ${cmd.name}, zcl: ${JSON.stringify(zclData)})`);
117
- try {
118
- await this.zbController.publish(publishTarget, cid, cmd.name, zclData, cfg, ep, cmdType, (err, msg) => {
119
- // map err and msg in one object for sendTo
120
- const result = {};
121
- result.msg = msg;
122
- if (err) {
123
- // err is an instance of Error class, it cannot be forwarded to sendTo, just get error code
124
- result.error = err.code;
125
- }
126
- result.statusCode = 0;
127
- this.adapter.sendTo(obj.from, obj.command, result, obj.callback);
128
- },obj.message.zclSeqNum);
129
- } catch (exception) {
130
- // report exceptions
131
- // happens for example if user tries to send write command but did not provide value/type
132
- // or unsupported attribute was addressed.
133
- const ZclStatusError = require('zigbee-herdsman/dist/zcl/zclStatusError').default;
134
- if (exception instanceof ZclStatusError) {
135
- const result = {};
136
- result.msg = `Zigbee error ${exception.code} received!`;
137
- result.statusCode = exception.code;
138
- this.adapter.sendTo(obj.from, obj.command, result, obj.callback);
139
- } else {
140
- this.error('SendToZigbee failed! (' + exception + ')');
141
- // exception (Error class) cannot be send to adapter, send string message instead!
142
- this.adapter.sendTo(obj.from, obj.command, {msg: exception.message}, obj.callback);
143
- }
144
- }
145
- }
146
- }
147
-
148
- module.exports = Developer;
1
+ 'use strict';
2
+
3
+ const ZigbeeHerdsman = require('zigbee-herdsman');
4
+
5
+
6
+ class Developer {
7
+ constructor(adapter) {
8
+ this.adapter = adapter;
9
+ this.adapter.on('message', this.onMessage.bind(this));
10
+ }
11
+
12
+ start(zbController, stController) {
13
+ this.zbController = zbController;
14
+ this.stController = stController;
15
+ }
16
+
17
+ stop() {
18
+ delete this.zbController;
19
+ delete this.stController;
20
+ }
21
+
22
+ info(msg) {
23
+ this.adapter.log.info(msg);
24
+ }
25
+
26
+ error(msg) {
27
+ this.adapter.log.error(msg);
28
+ }
29
+
30
+ debug(msg) {
31
+ this.adapter.log.debug(msg);
32
+ }
33
+
34
+ /**
35
+ * @param {ioBroker.Message} obj
36
+ */
37
+ onMessage(obj) {
38
+ if (typeof obj === 'object' && obj.command) {
39
+ switch (obj.command) {
40
+ case 'reset':
41
+ this.zbController.reset(obj.message.mode, err =>
42
+ this.adapter.sendTo(obj.from, obj.command, err, obj.callback));
43
+ break;
44
+ case 'sendToZigbee':
45
+ this.sendToZigbee(obj);
46
+ break;
47
+ case 'getLibData':
48
+ // e.g. zcl lists
49
+ this.getLibData(obj);
50
+ break;
51
+ }
52
+ }
53
+ }
54
+
55
+ getLibData(obj) {
56
+ const key = obj.message.key;
57
+ const zcl = ZigbeeHerdsman.Zcl;
58
+ const result = {};
59
+ if (key === 'cidList') {
60
+ result.list = zcl.Cluster;
61
+ } else if (key === 'attrIdList') {
62
+ const cid = obj.message.cid;
63
+ result.list = zcl.Utils.getCluster(cid).attributes;
64
+ } else if (key === 'cmdListFoundation') {
65
+ result.list = zcl.Foundation;
66
+ } else if (key === 'cmdListFunctional') {
67
+ result.list = null;
68
+ const cluster = zcl.Utils.getCluster(obj.message.cid);
69
+ if (typeof cluster != 'undefined') {
70
+ const extraCmd = cluster.commands;
71
+ result.list = extraCmd;
72
+ }
73
+ } else if (key === 'respCodes') {
74
+ result.list = zcl.Status;
75
+ } else if (key === 'typeList') {
76
+ result.list = zcl.DataType;
77
+ } else {
78
+ return;
79
+ }
80
+ result.key = key;
81
+ this.adapter.sendTo(obj.from, obj.command, result, obj.callback);
82
+ }
83
+
84
+ async sendToZigbee(obj) {
85
+ const zcl = ZigbeeHerdsman.Zcl;
86
+ const devId = '0x' + obj.message.id.replace(this.adapter.namespace + '.', '');
87
+ const ep = obj.message.ep ? obj.message.ep : null;
88
+ const cid = obj.message.cid;
89
+ const cmdType = obj.message.cmdType;
90
+ let cmd;
91
+ const zclData = obj.message.zclData;
92
+ if (cmdType === 'functional') {
93
+ cmd = zcl.Utils.getCluster(cid).getCommand(obj.message.cmd);
94
+ } else if (cmdType === 'functionalResp') {
95
+ cmd = zcl.Utils.getCluster(cid).getCommandResponse(obj.message.cmd);
96
+ } else if (cmdType === 'foundation') {
97
+ cmd = zcl.Utils.getGlobalCommand((obj.message.cmd));
98
+ } else {
99
+ this.adapter.sendTo(obj.from, obj.command, {localErr: 'Invalid cmdType'}, obj.callback);
100
+ return;
101
+ }
102
+ const cfg = obj.message.hasOwnProperty('cfg') ? obj.message.cfg : null;
103
+
104
+ const publishTarget = this.zbController.getDevice(devId) ? devId : this.zbController.getGroup(parseInt(devId));
105
+ if (!publishTarget) {
106
+ this.adapter.sendTo(obj.from, obj.command, {localErr: `Device or group ${devId} not found!`}, obj.callback);
107
+ return;
108
+ }
109
+ if (!cid || !cmd) {
110
+ this.adapter.sendTo(obj.from, obj.command, {localErr: 'Incomplete data (cid or cmd)'}, obj.callback);
111
+ return;
112
+ }
113
+ this.debug(`Ready to send (ep: ${ep}, cid: ${cid}, cmd ${cmd.name}, zcl: ${JSON.stringify(zclData)})`);
114
+ try {
115
+ await this.zbController.publish(publishTarget, cid, cmd.name, zclData, cfg, ep, cmdType, (err, msg) => {
116
+ // map err and msg in one object for sendTo
117
+ const result = {};
118
+ result.msg = msg;
119
+ if (err) {
120
+ // err is an instance of Error class, it cannot be forwarded to sendTo, just get error code
121
+ result.error = err.code;
122
+ }
123
+ result.statusCode = 0;
124
+ this.adapter.sendTo(obj.from, obj.command, result, obj.callback);
125
+ }, obj.message.zclSeqNum);
126
+ } catch (exception) {
127
+ // report exceptions
128
+ // happens for example if user tries to send write command but did not provide value/type
129
+ // or unsupported attribute was addressed.
130
+ const ZclStatusError = require('zigbee-herdsman/dist/zcl/zclStatusError').default;
131
+ if (exception instanceof ZclStatusError) {
132
+ const result = {};
133
+ result.msg = `Zigbee error ${exception.code} received!`;
134
+ result.statusCode = exception.code;
135
+ this.adapter.sendTo(obj.from, obj.command, result, obj.callback);
136
+ } else {
137
+ this.error(`SendToZigbee failed! (${exception})`);
138
+ // exception (Error class) cannot be sent to adapter, send string message instead!
139
+ this.adapter.sendTo(obj.from, obj.command, {msg: exception.message}, obj.callback);
140
+ }
141
+ }
142
+ }
143
+ }
144
+
145
+ module.exports = Developer;