zigbee-herdsman 0.48.0 → 0.49.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.
@@ -1,3 +1,3 @@
1
1
  {
2
- ".": "0.48.0"
2
+ ".": "0.49.0"
3
3
  }
package/CHANGELOG.md CHANGED
@@ -1,5 +1,20 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.49.0](https://github.com/Koenkk/zigbee-herdsman/compare/v0.48.1...v0.49.0) (2024-05-23)
4
+
5
+
6
+ ### Features
7
+
8
+ * Ember: Custom stack config support ([#1072](https://github.com/Koenkk/zigbee-herdsman/issues/1072)) ([bacf947](https://github.com/Koenkk/zigbee-herdsman/commit/bacf947192119fa4ac7d8fa44c89b95d4b9c7528))
9
+
10
+ ## [0.48.1](https://github.com/Koenkk/zigbee-herdsman/compare/v0.48.0...v0.48.1) (2024-05-19)
11
+
12
+
13
+ ### Bug Fixes
14
+
15
+ * Ember: revert default APS options change in [#1065](https://github.com/Koenkk/zigbee-herdsman/issues/1065) ([#1068](https://github.com/Koenkk/zigbee-herdsman/issues/1068)) ([4f8e9fb](https://github.com/Koenkk/zigbee-herdsman/commit/4f8e9fb5cdc08540740dfbf628551ad85978afb9))
16
+ * **ignore:** update dependencies ([#1067](https://github.com/Koenkk/zigbee-herdsman/issues/1067)) ([6c31940](https://github.com/Koenkk/zigbee-herdsman/commit/6c31940c8ca792d990245953f6d0930e9b4ceb50))
17
+
3
18
  ## [0.48.0](https://github.com/Koenkk/zigbee-herdsman/compare/v0.47.2...v0.48.0) (2024-05-18)
4
19
 
5
20
 
@@ -23,6 +23,68 @@ type LinkKeyBackupData = {
23
23
  outgoingFrameCounter: number;
24
24
  incomingFrameCounter: number;
25
25
  };
26
+ type StackConfig = {
27
+ CONCENTRATOR_RAM_TYPE: 'high' | 'low';
28
+ /**
29
+ * Minimum Time between broadcasts (in seconds) <1-60>
30
+ * Default: 10
31
+ * The minimum amount of time that must pass between MTORR broadcasts.
32
+ */
33
+ CONCENTRATOR_MIN_TIME: number;
34
+ /**
35
+ * Maximum Time between broadcasts (in seconds) <30-300>
36
+ * Default: 60
37
+ * The maximum amount of time that can pass between MTORR broadcasts.
38
+ */
39
+ CONCENTRATOR_MAX_TIME: number;
40
+ /**
41
+ * Route Error Threshold <1-100>
42
+ * Default: 3
43
+ * The number of route errors that will trigger a re-broadcast of the MTORR.
44
+ */
45
+ CONCENTRATOR_ROUTE_ERROR_THRESHOLD: number;
46
+ /**
47
+ * Delivery Failure Threshold <1-100>
48
+ * Default: 1
49
+ * The number of APS delivery failures that will trigger a re-broadcast of the MTORR.
50
+ */
51
+ CONCENTRATOR_DELIVERY_FAILURE_THRESHOLD: number;
52
+ /**
53
+ * Maximum number of hops for Broadcast <0-30>
54
+ * Default: 0
55
+ * The maximum number of hops that the MTORR broadcast will be allowed to have.
56
+ * A value of 0 will be converted to the EMBER_MAX_HOPS value set by the stack.
57
+ */
58
+ CONCENTRATOR_MAX_HOPS: number;
59
+ /** <6-64> (Default: 6) @see EzspConfigId.MAX_END_DEVICE_CHILDREN */
60
+ MAX_END_DEVICE_CHILDREN: number;
61
+ /** <1-255> (Default: 10) @see EzspConfigId.APS_UNICAST_MESSAGE_COUNT */
62
+ APS_UNICAST_MESSAGE_COUNT: number;
63
+ /** <-> (Default: 16) @see EzspConfigId.RETRY_QUEUE_SIZE */
64
+ RETRY_QUEUE_SIZE: number;
65
+ /** <1-250> (Default: 2) @see EzspConfigId.ADDRESS_TABLE_SIZE */
66
+ ADDRESS_TABLE_SIZE: number;
67
+ /** <0-4> (Default: 2) @see EzspConfigId.TRUST_CENTER_ADDRESS_CACHE_SIZE */
68
+ TRUST_CENTER_ADDRESS_CACHE_SIZE: number;
69
+ /** <0-127> (Default: 0) @see EzspConfigId.KEY_TABLE_SIZE */
70
+ KEY_TABLE_SIZE: number;
71
+ /** <0-127> (Default: 2) @see EzspConfigId.BINDING_TABLE_SIZE */
72
+ BINDING_TABLE_SIZE: number;
73
+ /** <15-254> (Default: 15) @see EzspConfigId.BROADCAST_TABLE_SIZE */
74
+ BROADCAST_TABLE_SIZE: number;
75
+ /** <1-250> (Default: 8) @see EzspConfigId.MULTICAST_TABLE_SIZE */
76
+ MULTICAST_TABLE_SIZE: number;
77
+ /** [1, 16, 26] (Default: 16). @see EzspConfigId.NEIGHBOR_TABLE_SIZE */
78
+ NEIGHBOR_TABLE_SIZE: number;
79
+ /** <0-255> (Default: 0) @see EzspConfigId.SOURCE_ROUTE_TABLE_SIZE */
80
+ SOURCE_ROUTE_TABLE_SIZE: number;
81
+ /** <-> (Default: 10000) @see EzspValueId.TRANSIENT_DEVICE_TIMEOUT */
82
+ TRANSIENT_DEVICE_TIMEOUT: number;
83
+ /** <0-14> (Default: 8) @see EzspConfigId.END_DEVICE_POLL_TIMEOUT */
84
+ END_DEVICE_POLL_TIMEOUT: number;
85
+ /** <0-65535> (Default: 300) @see EzspConfigId.TRANSIENT_KEY_TIMEOUT_S */
86
+ TRANSIENT_KEY_TIMEOUT_S: number;
87
+ };
26
88
  /**
27
89
  * Relay calls between Z2M and EZSP-layer and handle any error that might occur via queue & waitress.
28
90
  *
@@ -31,10 +93,7 @@ type LinkKeyBackupData = {
31
93
  export declare class EmberAdapter extends Adapter {
32
94
  /** Current manufacturer code assigned to the coordinator. Used for join workarounds... */
33
95
  private manufacturerCode;
34
- /** Key in STACK_CONFIGS */
35
- readonly stackConfig: 'default' | 'zigbeed';
36
- /** EMBER_LOW_RAM_CONCENTRATOR or EMBER_HIGH_RAM_CONCENTRATOR. */
37
- private readonly concentratorType;
96
+ readonly stackConfig: StackConfig;
38
97
  private readonly ezsp;
39
98
  private version;
40
99
  private readonly requestQueue;
@@ -54,6 +113,7 @@ export declare class EmberAdapter extends Adapter {
54
113
  */
55
114
  private networkCache;
56
115
  constructor(networkOptions: TsType.NetworkOptions, serialPortOptions: TsType.SerialPortOptions, backupPath: string, adapterOptions: TsType.AdapterOptions);
116
+ private loadStackConfig;
57
117
  /**
58
118
  * Emitted from @see Ezsp.ezspStackStatusHandler
59
119
  * @param status
@@ -181,7 +241,7 @@ export declare class EmberAdapter extends Adapter {
181
241
  /**
182
242
  * Loads currently stored backup and returns it in internal backup model.
183
243
  */
184
- getStoredBackup(): Promise<Backup>;
244
+ private getStoredBackup;
185
245
  /**
186
246
  * Export link keys for backup.
187
247
  *
@@ -1 +1 @@
1
- {"version":3,"file":"emberAdapter.d.ts","sourceRoot":"","sources":["../../../../src/adapter/ember/adapter/emberAdapter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"emberAdapter.d.ts","sourceRoot":"","sources":["../../../../src/adapter/ember/adapter/emberAdapter.ts"],"names":[],"mappings":"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"}
@@ -29,7 +29,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
29
29
  exports.EmberAdapter = void 0;
30
30
  /* istanbul ignore file */
31
31
  const es6_1 = __importDefault(require("fast-deep-equal/es6"));
32
- const mz_1 = require("mz");
32
+ const fs_1 = require("fs");
33
+ const path_1 = __importDefault(require("path"));
33
34
  const serialPortUtils_1 = __importDefault(require("../../serialPortUtils"));
34
35
  const socketPortUtils_1 = __importDefault(require("../../socketPortUtils"));
35
36
  const utils_1 = require("../../../utils");
@@ -86,30 +87,6 @@ const autoDetectDefinitions = [
86
87
  /** NOTE: Manuf code "0x134B" for "Nabu Casa, Inc." */
87
88
  { manufacturer: 'Nabu Casa', vendorId: '10c4', productId: 'ea60' }, // Home Assistant SkyConnect
88
89
  ];
89
- /**
90
- * Config for EMBER_LOW_RAM_CONCENTRATOR type concentrator.
91
- *
92
- * Based on ZigbeeMinimalHost/zigpc
93
- */
94
- const LOW_RAM_CONCENTRATOR_CONFIG = {
95
- minTime: 5, // zigpc: 10
96
- maxTime: 60, // zigpc: 60
97
- routeErrorThreshold: 3, // zigpc: 3
98
- deliveryFailureThreshold: 1, // zigpc: 1, ZigbeeMinimalHost: 3
99
- mapHops: 0, // zigpc: 0
100
- };
101
- /**
102
- * Config for EMBER_HIGH_RAM_CONCENTRATOR type concentrator.
103
- *
104
- * XXX: For now, same as low, until proper values can be determined.
105
- */
106
- const HIGH_RAM_CONCENTRATOR_CONFIG = {
107
- minTime: 5,
108
- maxTime: 60,
109
- routeErrorThreshold: 3,
110
- deliveryFailureThreshold: 1,
111
- mapHops: 0,
112
- };
113
90
  /**
114
91
  * Application generated ZDO messages use sequence numbers 0-127, and the stack
115
92
  * uses sequence numbers 128-255. This simplifies life by eliminating the need
@@ -129,87 +106,44 @@ const BACKUP_OLDEST_SUPPORTED_EZSP_VERSION = 12;
129
106
  */
130
107
  const BROADCAST_NETWORK_KEY_SWITCH_WAIT_TIME = 15000;
131
108
  /**
132
- * Stack configuration values for various supported stacks.
109
+ * Default stack configuration values.
110
+ * @see https://www.silabs.com/documents/public/user-guides/ug100-ezsp-reference-guide.pdf 2.3.1 for descriptions/RAM costs
133
111
  *
134
112
  * https://github.com/darkxst/silabs-firmware-builder/tree/main/manifests
135
113
  * https://github.com/NabuCasa/silabs-firmware/wiki/Zigbee-EmberZNet-NCP-firmware-configuration#skyconnect
136
114
  * https://github.com/SiliconLabs/UnifySDK/blob/main/applications/zigbeed/project_files/zigbeed.slcp
137
115
  */
138
- const STACK_CONFIGS = {
139
- "default": {
140
- /** <1-250> (Default: 2) @see EzspConfigId.ADDRESS_TABLE_SIZE */
141
- ADDRESS_TABLE_SIZE: 16, // zigpc: 32, darkxst: 16, nabucasa: 16
142
- /** <0-4> (Default: 2) @see EzspConfigId.TRUST_CENTER_ADDRESS_CACHE_SIZE */
143
- TRUST_CENTER_ADDRESS_CACHE_SIZE: 2,
144
- /** (Default: USE_TOKEN) @see EzspConfigId.TX_POWER_MODE */
145
- TX_POWER_MODE: enums_2.EmberTXPowerMode.USE_TOKEN,
146
- /** <-> (Default: 1) @see EzspConfigId.SUPPORTED_NETWORKS */
147
- SUPPORTED_NETWORKS: 1,
148
- /** <-> (Default: ) @see EzspConfigId.STACK_PROFILE */
149
- STACK_PROFILE: consts_2.STACK_PROFILE_ZIGBEE_PRO,
150
- /** <-> (Default: ) @see EzspConfigId.SECURITY_LEVEL */
151
- SECURITY_LEVEL: consts_2.SECURITY_LEVEL_Z3,
152
- /** (Default: KEEP_ALIVE_SUPPORT_ALL) @see EzspValueId.END_DEVICE_KEEP_ALIVE_SUPPORT_MODE */
153
- END_DEVICE_KEEP_ALIVE_SUPPORT_MODE: enums_2.EmberKeepAliveMode.KEEP_ALIVE_SUPPORT_ALL,
154
- /** <-> (Default: MAXIMUM_APS_PAYLOAD_LENGTH) @see EzspValueId.MAXIMUM_INCOMING_TRANSFER_SIZE */
155
- MAXIMUM_INCOMING_TRANSFER_SIZE: consts_2.MAXIMUM_APS_PAYLOAD_LENGTH,
156
- /** <-> (Default: MAXIMUM_APS_PAYLOAD_LENGTH) @see EzspValueId.MAXIMUM_OUTGOING_TRANSFER_SIZE */
157
- MAXIMUM_OUTGOING_TRANSFER_SIZE: consts_2.MAXIMUM_APS_PAYLOAD_LENGTH,
158
- /** <-> (Default: 10000) @see EzspValueId.TRANSIENT_DEVICE_TIMEOUT */
159
- TRANSIENT_DEVICE_TIMEOUT: 10000,
160
- /** <0-127> (Default: 2) @see EzspConfigId.BINDING_TABLE_SIZE */
161
- BINDING_TABLE_SIZE: 32, // zigpc: 2, Z3GatewayGPCombo: 5, nabucasa: 32
162
- /** <0-127> (Default: 0) @see EzspConfigId.KEY_TABLE_SIZE */
163
- KEY_TABLE_SIZE: 0, // zigpc: 4
164
- /** <6-64> (Default: 6) @see EzspConfigId.MAX_END_DEVICE_CHILDREN */
165
- MAX_END_DEVICE_CHILDREN: 32, // zigpc: 6, nabucasa: 32, Dongle-E (Sonoff firmware): 32
166
- /** <1-255> (Default: 10) @see EzspConfigId.APS_UNICAST_MESSAGE_COUNT */
167
- APS_UNICAST_MESSAGE_COUNT: 32, // zigpc: 10, darkxst: 20, nabucasa: 20
168
- /** <15-254> (Default: 15) @see EzspConfigId.BROADCAST_TABLE_SIZE */
169
- BROADCAST_TABLE_SIZE: 15, // zigpc: 15, Z3GatewayGPCombo: 35 - NOTE: Sonoff Dongle-E fails at 35
170
- /** [1, 16, 26] (Default: 16). @see EzspConfigId.NEIGHBOR_TABLE_SIZE */
171
- NEIGHBOR_TABLE_SIZE: 26, // zigpc: 16, darkxst: 26, nabucasa: 26
172
- /** (Default: 8) @see EzspConfigId.END_DEVICE_POLL_TIMEOUT */
173
- END_DEVICE_POLL_TIMEOUT: 8, // zigpc: 8
174
- /** <0-65535> (Default: 300) @see EzspConfigId.TRANSIENT_KEY_TIMEOUT_S */
175
- TRANSIENT_KEY_TIMEOUT_S: 300, // zigpc: 65535
176
- /** <-> (Default: 16) @see EzspConfigId.RETRY_QUEUE_SIZE */
177
- RETRY_QUEUE_SIZE: 16, // nabucasa: 16
178
- /** <0-255> (Default: 0) @see EzspConfigId.SOURCE_ROUTE_TABLE_SIZE */
179
- SOURCE_ROUTE_TABLE_SIZE: 200, // Z3GatewayGPCombo: 100, darkxst: 200, nabucasa: 200
180
- /** <1-250> (Default: 8) @see EzspConfigId.MULTICAST_TABLE_SIZE */
181
- MULTICAST_TABLE_SIZE: 16, // darkxst: 16, nabucasa: 16 - NOTE: should always be at least enough to register FIXED_ENDPOINTS multicastIds
182
- },
183
- "zigbeed": {
184
- ADDRESS_TABLE_SIZE: 128,
185
- TRUST_CENTER_ADDRESS_CACHE_SIZE: 2,
186
- TX_POWER_MODE: enums_2.EmberTXPowerMode.USE_TOKEN,
187
- SUPPORTED_NETWORKS: 1,
188
- STACK_PROFILE: consts_2.STACK_PROFILE_ZIGBEE_PRO,
189
- SECURITY_LEVEL: consts_2.SECURITY_LEVEL_Z3,
190
- END_DEVICE_KEEP_ALIVE_SUPPORT_MODE: enums_2.EmberKeepAliveMode.KEEP_ALIVE_SUPPORT_ALL,
191
- MAXIMUM_INCOMING_TRANSFER_SIZE: consts_2.MAXIMUM_APS_PAYLOAD_LENGTH,
192
- MAXIMUM_OUTGOING_TRANSFER_SIZE: consts_2.MAXIMUM_APS_PAYLOAD_LENGTH,
193
- TRANSIENT_DEVICE_TIMEOUT: 10000,
194
- BINDING_TABLE_SIZE: 128,
195
- KEY_TABLE_SIZE: 0, // zigbeed 128
196
- MAX_END_DEVICE_CHILDREN: 64,
197
- APS_UNICAST_MESSAGE_COUNT: 32,
198
- BROADCAST_TABLE_SIZE: 15,
199
- NEIGHBOR_TABLE_SIZE: 26,
200
- END_DEVICE_POLL_TIMEOUT: 8,
201
- TRANSIENT_KEY_TIMEOUT_S: 300,
202
- RETRY_QUEUE_SIZE: 16,
203
- SOURCE_ROUTE_TABLE_SIZE: 254,
204
- MULTICAST_TABLE_SIZE: 128,
205
- },
116
+ const DEFAULT_STACK_CONFIG = {
117
+ CONCENTRATOR_RAM_TYPE: 'high',
118
+ CONCENTRATOR_MIN_TIME: 5, // zigpc: 10
119
+ CONCENTRATOR_MAX_TIME: 60, // zigpc: 60
120
+ CONCENTRATOR_ROUTE_ERROR_THRESHOLD: 3, // zigpc: 3
121
+ CONCENTRATOR_DELIVERY_FAILURE_THRESHOLD: 1, // zigpc: 1, ZigbeeMinimalHost: 3
122
+ CONCENTRATOR_MAX_HOPS: 0, // zigpc: 0
123
+ MAX_END_DEVICE_CHILDREN: 32, // zigpc: 6, nabucasa: 32, Dongle-E (Sonoff firmware): 32
124
+ APS_UNICAST_MESSAGE_COUNT: 32, // zigpc: 10, darkxst: 20, nabucasa: 20
125
+ RETRY_QUEUE_SIZE: 16, // nabucasa: 16
126
+ ADDRESS_TABLE_SIZE: 16, // zigpc: 32, darkxst: 16, nabucasa: 16
127
+ TRUST_CENTER_ADDRESS_CACHE_SIZE: 2,
128
+ KEY_TABLE_SIZE: 0, // zigpc: 4
129
+ BINDING_TABLE_SIZE: 32, // zigpc: 2, Z3GatewayGPCombo: 5, nabucasa: 32
130
+ BROADCAST_TABLE_SIZE: 15, // zigpc: 15, Z3GatewayGPCombo: 35 - NOTE: Sonoff Dongle-E fails at 35
131
+ MULTICAST_TABLE_SIZE: 16, // darkxst: 16, nabucasa: 16 - NOTE: should always be at least enough to register FIXED_ENDPOINTS multicastIds
132
+ NEIGHBOR_TABLE_SIZE: 26, // zigpc: 16, darkxst: 26, nabucasa: 26
133
+ SOURCE_ROUTE_TABLE_SIZE: 200, // Z3GatewayGPCombo: 100, darkxst: 200, nabucasa: 200
134
+ TRANSIENT_DEVICE_TIMEOUT: 10000,
135
+ END_DEVICE_POLL_TIMEOUT: 8, // zigpc: 8
136
+ TRANSIENT_KEY_TIMEOUT_S: 300, // zigpc: 65535
206
137
  };
207
138
  /**
208
- * NOTE: This from SDK:
139
+ * NOTE: This from SDK is currently ignored here because of issues in below links:
209
140
  * - BUGZID 12261: Concentrators use MTORRs for route discovery and should not enable route discovery in the APS options.
210
- * - https://community.silabs.com/s/question/0D58Y00008DRfDCSA1/coordinator-cant-send-unicast-to-sleepy-node-after-reboot?language=en_US
141
+ * - https://community.silabs.com/s/question/0D58Y00008DRfDCSA1/coordinator-cant-send-unicast-to-sleepy-node-after-reboot
142
+ * - https://community.silabs.com/s/question/0D58Y0000B4nTb7SQE/largedense-network-communication-problem-source-route-table-not-big-enough
143
+ *
144
+ * Removing `ENABLE_ROUTE_DISCOVERY` leads to devices that won't reconnect/go offline, and various other issues. Keeping it for now.
211
145
  */
212
- const DEFAULT_APS_OPTIONS = (enums_2.EmberApsOption.RETRY | enums_2.EmberApsOption.ENABLE_ADDRESS_DISCOVERY);
146
+ const DEFAULT_APS_OPTIONS = (enums_2.EmberApsOption.RETRY | enums_2.EmberApsOption.ENABLE_ROUTE_DISCOVERY | enums_2.EmberApsOption.ENABLE_ADDRESS_DISCOVERY);
213
147
  /**
214
148
  * Enabling this allows to immediately reject requests that won't be able to get to their destination.
215
149
  * However, it causes more NCP calls, notably to get the source route overhead.
@@ -243,10 +177,7 @@ const WORKAROUND_JOIN_MANUF_IEEE_PREFIX_TO_CODE = {
243
177
  class EmberAdapter extends __1.Adapter {
244
178
  /** Current manufacturer code assigned to the coordinator. Used for join workarounds... */
245
179
  manufacturerCode;
246
- /** Key in STACK_CONFIGS */
247
180
  stackConfig;
248
- /** EMBER_LOW_RAM_CONCENTRATOR or EMBER_HIGH_RAM_CONCENTRATOR. */
249
- concentratorType;
250
181
  ezsp;
251
182
  version;
252
183
  requestQueue;
@@ -267,11 +198,7 @@ class EmberAdapter extends __1.Adapter {
267
198
  networkCache;
268
199
  constructor(networkOptions, serialPortOptions, backupPath, adapterOptions) {
269
200
  super(networkOptions, serialPortOptions, backupPath, adapterOptions);
270
- // TODO config
271
- // XXX: 'zigbeed': 4.4.x/7.4.x not supported by multiprotocol at the moment, will need refactoring when/if support is added
272
- this.stackConfig = 'default';
273
- // TODO config
274
- this.concentratorType = consts_2.EMBER_HIGH_RAM_CONCENTRATOR;
201
+ this.stackConfig = this.loadStackConfig();
275
202
  const delay = (typeof this.adapterOptions.delay === 'number') ? Math.min(Math.max(this.adapterOptions.delay, 5), 60) : 5;
276
203
  logger_1.logger.debug(`Using delay=${delay}.`, NS);
277
204
  this.requestQueue = new requestQueue_1.EmberRequestQueue(delay);
@@ -287,6 +214,102 @@ class EmberAdapter extends __1.Adapter {
287
214
  this.ezsp.on(ezsp_1.EzspEvents.GREENPOWER_MESSAGE, this.onGreenpowerMessage.bind(this));
288
215
  this.ezsp.on(ezsp_1.EzspEvents.TRUST_CENTER_JOIN, this.onTrustCenterJoin.bind(this));
289
216
  }
217
+ loadStackConfig() {
218
+ // store stack config in same dir as backup
219
+ const configPath = path_1.default.join(path_1.default.dirname(this.backupPath), 'stack_config.json');
220
+ try {
221
+ const customConfig = JSON.parse((0, fs_1.readFileSync)(configPath, 'utf8'));
222
+ // set any undefined config to default
223
+ const config = { ...DEFAULT_STACK_CONFIG, ...customConfig };
224
+ const inRange = (value, min, max) => (value == undefined || value < min || value > max) ? false : true;
225
+ if (!['high', 'low'].includes(config.CONCENTRATOR_RAM_TYPE)) {
226
+ config.CONCENTRATOR_RAM_TYPE = DEFAULT_STACK_CONFIG.CONCENTRATOR_RAM_TYPE;
227
+ logger_1.logger.error(`[STACK CONFIG] Invalid CONCENTRATOR_RAM_TYPE, using default.`, NS);
228
+ }
229
+ if (!inRange(config.CONCENTRATOR_MIN_TIME, 1, 60) || (config.CONCENTRATOR_MIN_TIME >= config.CONCENTRATOR_MAX_TIME)) {
230
+ config.CONCENTRATOR_MIN_TIME = DEFAULT_STACK_CONFIG.CONCENTRATOR_MIN_TIME;
231
+ logger_1.logger.error(`[STACK CONFIG] Invalid CONCENTRATOR_MIN_TIME, using default.`, NS);
232
+ }
233
+ if (!inRange(config.CONCENTRATOR_MAX_TIME, 30, 300) || (config.CONCENTRATOR_MAX_TIME <= config.CONCENTRATOR_MIN_TIME)) {
234
+ config.CONCENTRATOR_MAX_TIME = DEFAULT_STACK_CONFIG.CONCENTRATOR_MAX_TIME;
235
+ logger_1.logger.error(`[STACK CONFIG] Invalid CONCENTRATOR_MAX_TIME, using default.`, NS);
236
+ }
237
+ if (!inRange(config.CONCENTRATOR_ROUTE_ERROR_THRESHOLD, 1, 100)) {
238
+ config.CONCENTRATOR_ROUTE_ERROR_THRESHOLD = DEFAULT_STACK_CONFIG.CONCENTRATOR_ROUTE_ERROR_THRESHOLD;
239
+ logger_1.logger.error(`[STACK CONFIG] Invalid CONCENTRATOR_ROUTE_ERROR_THRESHOLD, using default.`, NS);
240
+ }
241
+ if (!inRange(config.CONCENTRATOR_DELIVERY_FAILURE_THRESHOLD, 1, 100)) {
242
+ config.CONCENTRATOR_DELIVERY_FAILURE_THRESHOLD = DEFAULT_STACK_CONFIG.CONCENTRATOR_DELIVERY_FAILURE_THRESHOLD;
243
+ logger_1.logger.error(`[STACK CONFIG] Invalid CONCENTRATOR_DELIVERY_FAILURE_THRESHOLD, using default.`, NS);
244
+ }
245
+ if (!inRange(config.CONCENTRATOR_MAX_HOPS, 0, 30)) {
246
+ config.CONCENTRATOR_MAX_HOPS = DEFAULT_STACK_CONFIG.CONCENTRATOR_MAX_HOPS;
247
+ logger_1.logger.error(`[STACK CONFIG] Invalid CONCENTRATOR_MAX_HOPS, using default.`, NS);
248
+ }
249
+ if (!inRange(config.MAX_END_DEVICE_CHILDREN, 6, 64)) {
250
+ config.MAX_END_DEVICE_CHILDREN = DEFAULT_STACK_CONFIG.MAX_END_DEVICE_CHILDREN;
251
+ logger_1.logger.error(`[STACK CONFIG] Invalid MAX_END_DEVICE_CHILDREN, using default.`, NS);
252
+ }
253
+ if (!inRange(config.APS_UNICAST_MESSAGE_COUNT, 1, 255)) {
254
+ config.APS_UNICAST_MESSAGE_COUNT = DEFAULT_STACK_CONFIG.APS_UNICAST_MESSAGE_COUNT;
255
+ logger_1.logger.error(`[STACK CONFIG] Invalid APS_UNICAST_MESSAGE_COUNT, using default.`, NS);
256
+ }
257
+ if (!inRange(config.RETRY_QUEUE_SIZE, 0, 255)) {
258
+ config.RETRY_QUEUE_SIZE = DEFAULT_STACK_CONFIG.RETRY_QUEUE_SIZE;
259
+ logger_1.logger.error(`[STACK CONFIG] Invalid RETRY_QUEUE_SIZE, using default.`, NS);
260
+ }
261
+ if (!inRange(config.ADDRESS_TABLE_SIZE, 1, 250)) {
262
+ config.ADDRESS_TABLE_SIZE = DEFAULT_STACK_CONFIG.ADDRESS_TABLE_SIZE;
263
+ logger_1.logger.error(`[STACK CONFIG] Invalid ADDRESS_TABLE_SIZE, using default.`, NS);
264
+ }
265
+ if (!inRange(config.TRUST_CENTER_ADDRESS_CACHE_SIZE, 0, 4)) {
266
+ config.TRUST_CENTER_ADDRESS_CACHE_SIZE = DEFAULT_STACK_CONFIG.TRUST_CENTER_ADDRESS_CACHE_SIZE;
267
+ logger_1.logger.error(`[STACK CONFIG] Invalid TRUST_CENTER_ADDRESS_CACHE_SIZE, using default.`, NS);
268
+ }
269
+ if (!inRange(config.KEY_TABLE_SIZE, 0, 127)) {
270
+ config.KEY_TABLE_SIZE = DEFAULT_STACK_CONFIG.KEY_TABLE_SIZE;
271
+ logger_1.logger.error(`[STACK CONFIG] Invalid KEY_TABLE_SIZE, using default.`, NS);
272
+ }
273
+ if (!inRange(config.BINDING_TABLE_SIZE, 0, 127)) {
274
+ config.BINDING_TABLE_SIZE = DEFAULT_STACK_CONFIG.BINDING_TABLE_SIZE;
275
+ logger_1.logger.error(`[STACK CONFIG] Invalid BINDING_TABLE_SIZE, using default.`, NS);
276
+ }
277
+ if (!inRange(config.BROADCAST_TABLE_SIZE, 15, 254)) {
278
+ config.BROADCAST_TABLE_SIZE = DEFAULT_STACK_CONFIG.BROADCAST_TABLE_SIZE;
279
+ logger_1.logger.error(`[STACK CONFIG] Invalid BROADCAST_TABLE_SIZE, using default.`, NS);
280
+ }
281
+ // min should always be enough to cover `multicastIds` in `FIXED_ENDPOINTS`
282
+ if (!inRange(config.MULTICAST_TABLE_SIZE, 5, 250)) {
283
+ config.MULTICAST_TABLE_SIZE = DEFAULT_STACK_CONFIG.MULTICAST_TABLE_SIZE;
284
+ logger_1.logger.error(`[STACK CONFIG] Invalid MULTICAST_TABLE_SIZE, using default.`, NS);
285
+ }
286
+ if (![16, 26].includes(config.NEIGHBOR_TABLE_SIZE)) {
287
+ config.NEIGHBOR_TABLE_SIZE = DEFAULT_STACK_CONFIG.NEIGHBOR_TABLE_SIZE;
288
+ logger_1.logger.error(`[STACK CONFIG] Invalid NEIGHBOR_TABLE_SIZE, using default.`, NS);
289
+ }
290
+ if (!inRange(config.SOURCE_ROUTE_TABLE_SIZE, 0, 254)) {
291
+ config.SOURCE_ROUTE_TABLE_SIZE = DEFAULT_STACK_CONFIG.SOURCE_ROUTE_TABLE_SIZE;
292
+ logger_1.logger.error(`[STACK CONFIG] Invalid SOURCE_ROUTE_TABLE_SIZE, using default.`, NS);
293
+ }
294
+ if (!inRange(config.TRANSIENT_DEVICE_TIMEOUT, 0, 65535)) {
295
+ config.TRANSIENT_DEVICE_TIMEOUT = DEFAULT_STACK_CONFIG.TRANSIENT_DEVICE_TIMEOUT;
296
+ logger_1.logger.error(`[STACK CONFIG] Invalid TRANSIENT_DEVICE_TIMEOUT, using default.`, NS);
297
+ }
298
+ if (!inRange(config.END_DEVICE_POLL_TIMEOUT, 0, 14)) {
299
+ config.END_DEVICE_POLL_TIMEOUT = DEFAULT_STACK_CONFIG.END_DEVICE_POLL_TIMEOUT;
300
+ logger_1.logger.error(`[STACK CONFIG] Invalid END_DEVICE_POLL_TIMEOUT, using default.`, NS);
301
+ }
302
+ if (!inRange(config.TRANSIENT_KEY_TIMEOUT_S, 0, 65535)) {
303
+ config.TRANSIENT_KEY_TIMEOUT_S = DEFAULT_STACK_CONFIG.TRANSIENT_KEY_TIMEOUT_S;
304
+ logger_1.logger.error(`[STACK CONFIG] Invalid TRANSIENT_KEY_TIMEOUT_S, using default.`, NS);
305
+ }
306
+ logger_1.logger.info(`Using stack config ${JSON.stringify(config)}.`, NS);
307
+ return config;
308
+ }
309
+ catch { }
310
+ logger_1.logger.info(`Using default stack config.`, NS);
311
+ return DEFAULT_STACK_CONFIG;
312
+ }
290
313
  /**
291
314
  * Emitted from @see Ezsp.ezspStackStatusHandler
292
315
  * @param status
@@ -584,37 +607,35 @@ class EmberAdapter extends __1.Adapter {
584
607
  */
585
608
  async initNCPPreConfiguration() {
586
609
  // this can only decrease, not increase, NCP-side value
587
- await this.emberSetEzspConfigValue(enums_1.EzspConfigId.ADDRESS_TABLE_SIZE, STACK_CONFIGS[this.stackConfig].ADDRESS_TABLE_SIZE);
588
- await this.emberSetEzspConfigValue(enums_1.EzspConfigId.TRUST_CENTER_ADDRESS_CACHE_SIZE, STACK_CONFIGS[this.stackConfig].TRUST_CENTER_ADDRESS_CACHE_SIZE);
589
- if (STACK_CONFIGS[this.stackConfig].STACK_PROFILE === consts_2.STACK_PROFILE_ZIGBEE_PRO) {
590
- // BUG 14222: If stack profile is 2 (ZigBee Pro), we need to enforce
591
- // the standard stack configuration values for that feature set.
592
- /** MAC indirect timeout should be 7.68 secs */
593
- await this.emberSetEzspConfigValue(enums_1.EzspConfigId.INDIRECT_TRANSMISSION_TIMEOUT, 7680);
594
- /** Max hops should be 2 * nwkMaxDepth, where nwkMaxDepth is 15 */
595
- await this.emberSetEzspConfigValue(enums_1.EzspConfigId.MAX_HOPS, 30);
596
- }
597
- await this.emberSetEzspConfigValue(enums_1.EzspConfigId.TX_POWER_MODE, STACK_CONFIGS[this.stackConfig].TX_POWER_MODE);
598
- await this.emberSetEzspConfigValue(enums_1.EzspConfigId.SUPPORTED_NETWORKS, STACK_CONFIGS[this.stackConfig].SUPPORTED_NETWORKS);
599
- await this.emberSetEzspValue(enums_1.EzspValueId.END_DEVICE_KEEP_ALIVE_SUPPORT_MODE, 1, [STACK_CONFIGS[this.stackConfig].END_DEVICE_KEEP_ALIVE_SUPPORT_MODE]);
610
+ await this.emberSetEzspConfigValue(enums_1.EzspConfigId.ADDRESS_TABLE_SIZE, this.stackConfig.ADDRESS_TABLE_SIZE);
611
+ await this.emberSetEzspConfigValue(enums_1.EzspConfigId.TRUST_CENTER_ADDRESS_CACHE_SIZE, this.stackConfig.TRUST_CENTER_ADDRESS_CACHE_SIZE);
612
+ // BUG 14222: If stack profile is 2 (ZigBee Pro), we need to enforce
613
+ // the standard stack configuration values for that feature set.
614
+ /** MAC indirect timeout should be 7.68 secs */
615
+ await this.emberSetEzspConfigValue(enums_1.EzspConfigId.INDIRECT_TRANSMISSION_TIMEOUT, 7680);
616
+ /** Max hops should be 2 * nwkMaxDepth, where nwkMaxDepth is 15 */
617
+ await this.emberSetEzspConfigValue(enums_1.EzspConfigId.MAX_HOPS, 30);
618
+ await this.emberSetEzspConfigValue(enums_1.EzspConfigId.TX_POWER_MODE, enums_2.EmberTXPowerMode.USE_TOKEN);
619
+ await this.emberSetEzspConfigValue(enums_1.EzspConfigId.SUPPORTED_NETWORKS, 1);
620
+ await this.emberSetEzspValue(enums_1.EzspValueId.END_DEVICE_KEEP_ALIVE_SUPPORT_MODE, 1, [enums_2.EmberKeepAliveMode.KEEP_ALIVE_SUPPORT_ALL]);
600
621
  // allow other devices to modify the binding table
601
622
  await this.emberSetEzspPolicy(enums_1.EzspPolicyId.BINDING_MODIFICATION_POLICY, enums_1.EzspDecisionId.CHECK_BINDING_MODIFICATIONS_ARE_VALID_ENDPOINT_CLUSTERS);
602
623
  // return message tag and message contents in ezspMessageSentHandler()
603
624
  await this.emberSetEzspPolicy(enums_1.EzspPolicyId.MESSAGE_CONTENTS_IN_CALLBACK_POLICY, enums_1.EzspDecisionId.MESSAGE_TAG_AND_CONTENTS_IN_CALLBACK);
604
- await this.emberSetEzspValue(enums_1.EzspValueId.MAXIMUM_INCOMING_TRANSFER_SIZE, 2, (0, math_1.lowHighBytes)(STACK_CONFIGS[this.stackConfig].MAXIMUM_INCOMING_TRANSFER_SIZE));
605
- await this.emberSetEzspValue(enums_1.EzspValueId.MAXIMUM_OUTGOING_TRANSFER_SIZE, 2, (0, math_1.lowHighBytes)(STACK_CONFIGS[this.stackConfig].MAXIMUM_OUTGOING_TRANSFER_SIZE));
606
- await this.emberSetEzspValue(enums_1.EzspValueId.TRANSIENT_DEVICE_TIMEOUT, 2, (0, math_1.lowHighBytes)(STACK_CONFIGS[this.stackConfig].TRANSIENT_DEVICE_TIMEOUT));
625
+ await this.emberSetEzspValue(enums_1.EzspValueId.MAXIMUM_INCOMING_TRANSFER_SIZE, 2, (0, math_1.lowHighBytes)(consts_2.MAXIMUM_APS_PAYLOAD_LENGTH));
626
+ await this.emberSetEzspValue(enums_1.EzspValueId.MAXIMUM_OUTGOING_TRANSFER_SIZE, 2, (0, math_1.lowHighBytes)(consts_2.MAXIMUM_APS_PAYLOAD_LENGTH));
627
+ await this.emberSetEzspValue(enums_1.EzspValueId.TRANSIENT_DEVICE_TIMEOUT, 2, (0, math_1.lowHighBytes)(this.stackConfig.TRANSIENT_DEVICE_TIMEOUT));
607
628
  await this.ezsp.ezspSetManufacturerCode(this.manufacturerCode);
608
629
  // network security init
609
- await this.emberSetEzspConfigValue(enums_1.EzspConfigId.STACK_PROFILE, STACK_CONFIGS[this.stackConfig].STACK_PROFILE);
610
- await this.emberSetEzspConfigValue(enums_1.EzspConfigId.SECURITY_LEVEL, STACK_CONFIGS[this.stackConfig].SECURITY_LEVEL);
630
+ await this.emberSetEzspConfigValue(enums_1.EzspConfigId.STACK_PROFILE, consts_2.STACK_PROFILE_ZIGBEE_PRO);
631
+ await this.emberSetEzspConfigValue(enums_1.EzspConfigId.SECURITY_LEVEL, consts_2.SECURITY_LEVEL_Z3);
611
632
  }
612
633
  /**
613
634
  * NCP Address table init.
614
635
  * @returns
615
636
  */
616
637
  async initNCPAddressTable() {
617
- const desiredTableSize = STACK_CONFIGS[this.stackConfig].ADDRESS_TABLE_SIZE;
638
+ const desiredTableSize = this.stackConfig.ADDRESS_TABLE_SIZE;
618
639
  // If the host and the ncp disagree on the address table size, explode.
619
640
  const [status, addressTableSize] = (await this.ezsp.ezspGetConfigurationValue(enums_1.EzspConfigId.ADDRESS_TABLE_SIZE));
620
641
  // After the change of ncp memory model in UC, we can not increase the default NCP table sizes anymore.
@@ -628,17 +649,17 @@ class EmberAdapter extends __1.Adapter {
628
649
  * NCP configuration init
629
650
  */
630
651
  async initNCPConfiguration() {
631
- await this.emberSetEzspConfigValue(enums_1.EzspConfigId.BINDING_TABLE_SIZE, STACK_CONFIGS[this.stackConfig].BINDING_TABLE_SIZE);
632
- await this.emberSetEzspConfigValue(enums_1.EzspConfigId.KEY_TABLE_SIZE, STACK_CONFIGS[this.stackConfig].KEY_TABLE_SIZE);
633
- await this.emberSetEzspConfigValue(enums_1.EzspConfigId.MAX_END_DEVICE_CHILDREN, STACK_CONFIGS[this.stackConfig].MAX_END_DEVICE_CHILDREN);
634
- await this.emberSetEzspConfigValue(enums_1.EzspConfigId.APS_UNICAST_MESSAGE_COUNT, STACK_CONFIGS[this.stackConfig].APS_UNICAST_MESSAGE_COUNT);
635
- await this.emberSetEzspConfigValue(enums_1.EzspConfigId.BROADCAST_TABLE_SIZE, STACK_CONFIGS[this.stackConfig].BROADCAST_TABLE_SIZE);
636
- await this.emberSetEzspConfigValue(enums_1.EzspConfigId.NEIGHBOR_TABLE_SIZE, STACK_CONFIGS[this.stackConfig].NEIGHBOR_TABLE_SIZE);
637
- await this.emberSetEzspConfigValue(enums_1.EzspConfigId.END_DEVICE_POLL_TIMEOUT, STACK_CONFIGS[this.stackConfig].END_DEVICE_POLL_TIMEOUT);
638
- await this.emberSetEzspConfigValue(enums_1.EzspConfigId.TRANSIENT_KEY_TIMEOUT_S, STACK_CONFIGS[this.stackConfig].TRANSIENT_KEY_TIMEOUT_S);
639
- await this.emberSetEzspConfigValue(enums_1.EzspConfigId.RETRY_QUEUE_SIZE, STACK_CONFIGS[this.stackConfig].RETRY_QUEUE_SIZE);
640
- await this.emberSetEzspConfigValue(enums_1.EzspConfigId.SOURCE_ROUTE_TABLE_SIZE, STACK_CONFIGS[this.stackConfig].SOURCE_ROUTE_TABLE_SIZE);
641
- await this.emberSetEzspConfigValue(enums_1.EzspConfigId.MULTICAST_TABLE_SIZE, STACK_CONFIGS[this.stackConfig].MULTICAST_TABLE_SIZE);
652
+ await this.emberSetEzspConfigValue(enums_1.EzspConfigId.BINDING_TABLE_SIZE, this.stackConfig.BINDING_TABLE_SIZE);
653
+ await this.emberSetEzspConfigValue(enums_1.EzspConfigId.KEY_TABLE_SIZE, this.stackConfig.KEY_TABLE_SIZE);
654
+ await this.emberSetEzspConfigValue(enums_1.EzspConfigId.MAX_END_DEVICE_CHILDREN, this.stackConfig.MAX_END_DEVICE_CHILDREN);
655
+ await this.emberSetEzspConfigValue(enums_1.EzspConfigId.APS_UNICAST_MESSAGE_COUNT, this.stackConfig.APS_UNICAST_MESSAGE_COUNT);
656
+ await this.emberSetEzspConfigValue(enums_1.EzspConfigId.BROADCAST_TABLE_SIZE, this.stackConfig.BROADCAST_TABLE_SIZE);
657
+ await this.emberSetEzspConfigValue(enums_1.EzspConfigId.NEIGHBOR_TABLE_SIZE, this.stackConfig.NEIGHBOR_TABLE_SIZE);
658
+ await this.emberSetEzspConfigValue(enums_1.EzspConfigId.END_DEVICE_POLL_TIMEOUT, this.stackConfig.END_DEVICE_POLL_TIMEOUT);
659
+ await this.emberSetEzspConfigValue(enums_1.EzspConfigId.TRANSIENT_KEY_TIMEOUT_S, this.stackConfig.TRANSIENT_KEY_TIMEOUT_S);
660
+ await this.emberSetEzspConfigValue(enums_1.EzspConfigId.RETRY_QUEUE_SIZE, this.stackConfig.RETRY_QUEUE_SIZE);
661
+ await this.emberSetEzspConfigValue(enums_1.EzspConfigId.SOURCE_ROUTE_TABLE_SIZE, this.stackConfig.SOURCE_ROUTE_TABLE_SIZE);
662
+ await this.emberSetEzspConfigValue(enums_1.EzspConfigId.MULTICAST_TABLE_SIZE, this.stackConfig.MULTICAST_TABLE_SIZE);
642
663
  }
643
664
  /**
644
665
  * NCP concentrator init. Also enables source route discovery mode with RESCHEDULE.
@@ -655,8 +676,7 @@ class EmberAdapter extends __1.Adapter {
655
676
  * (through a target node that is neither the trust center nor one of its neighboring routers.)
656
677
  */
657
678
  async initNCPConcentrator() {
658
- const config = (this.concentratorType === consts_2.EMBER_HIGH_RAM_CONCENTRATOR) ? HIGH_RAM_CONCENTRATOR_CONFIG : LOW_RAM_CONCENTRATOR_CONFIG;
659
- const status = (await this.ezsp.ezspSetConcentrator(true, this.concentratorType, config.minTime, config.maxTime, config.routeErrorThreshold, config.deliveryFailureThreshold, config.mapHops));
679
+ const status = (await this.ezsp.ezspSetConcentrator(true, (this.stackConfig.CONCENTRATOR_RAM_TYPE === 'low') ? consts_2.EMBER_LOW_RAM_CONCENTRATOR : consts_2.EMBER_HIGH_RAM_CONCENTRATOR, this.stackConfig.CONCENTRATOR_MIN_TIME, this.stackConfig.CONCENTRATOR_MAX_TIME, this.stackConfig.CONCENTRATOR_ROUTE_ERROR_THRESHOLD, this.stackConfig.CONCENTRATOR_DELIVERY_FAILURE_THRESHOLD, this.stackConfig.CONCENTRATOR_MAX_HOPS));
660
680
  if (status !== enums_2.EmberStatus.SUCCESS) {
661
681
  throw new Error(`[CONCENTRATOR] Failed to set concentrator with status=${status}.`);
662
682
  }
@@ -716,8 +736,7 @@ class EmberAdapter extends __1.Adapter {
716
736
  throw new Error(`[INIT TC] Failed to set EzspPolicyId TC_KEY_REQUEST_POLICY to ALLOW_TC_KEY_REQUESTS_AND_SEND_CURRENT_KEY `
717
737
  + `with status=${enums_2.EzspStatus[status]}.`);
718
738
  }
719
- const appKeyPolicy = STACK_CONFIGS[this.stackConfig].KEY_TABLE_SIZE
720
- ? enums_1.EzspDecisionId.ALLOW_APP_KEY_REQUESTS : enums_1.EzspDecisionId.DENY_APP_KEY_REQUESTS;
739
+ const appKeyPolicy = this.stackConfig.KEY_TABLE_SIZE ? enums_1.EzspDecisionId.ALLOW_APP_KEY_REQUESTS : enums_1.EzspDecisionId.DENY_APP_KEY_REQUESTS;
721
740
  status = (await this.emberSetEzspPolicy(enums_1.EzspPolicyId.APP_KEY_REQUEST_POLICY, appKeyPolicy));
722
741
  if (status !== enums_2.EzspStatus.SUCCESS) {
723
742
  throw new Error(`[INIT TC] Failed to set EzspPolicyId APP_KEY_REQUEST_POLICY to ${enums_1.EzspDecisionId[appKeyPolicy]} `
@@ -775,7 +794,7 @@ class EmberAdapter extends __1.Adapter {
775
794
  action = NetworkInitAction.LEFT;
776
795
  }
777
796
  }
778
- const backup = (await this.getStoredBackup());
797
+ const backup = this.getStoredBackup();
779
798
  if ((initStatus === enums_2.EmberStatus.NOT_JOINED) || (action === NetworkInitAction.LEFT)) {
780
799
  // no network
781
800
  if (backup != null) {
@@ -878,7 +897,7 @@ class EmberAdapter extends __1.Adapter {
878
897
  if (extSecStatus !== enums_2.EzspStatus.SUCCESS) {
879
898
  throw new Error(`[INIT FORM] Failed to set extended security bitmask to ${extended} with status=${enums_2.EzspStatus[extSecStatus]}.`);
880
899
  }
881
- if (!fromBackup && STACK_CONFIGS[this.stackConfig].KEY_TABLE_SIZE) {
900
+ if (!fromBackup && this.stackConfig.KEY_TABLE_SIZE > 0) {
882
901
  emberStatus = await this.ezsp.ezspClearKeyTable();
883
902
  if (emberStatus !== enums_2.EmberStatus.SUCCESS) {
884
903
  throw new Error(`[INIT FORM] Failed to clear key table with status=${enums_2.EmberStatus[emberStatus]}.`);
@@ -907,16 +926,13 @@ class EmberAdapter extends __1.Adapter {
907
926
  /**
908
927
  * Loads currently stored backup and returns it in internal backup model.
909
928
  */
910
- async getStoredBackup() {
911
- try {
912
- await mz_1.fs.access(this.backupPath);
913
- }
914
- catch (error) {
929
+ getStoredBackup() {
930
+ if (!(0, fs_1.existsSync)(this.backupPath)) {
915
931
  return null;
916
932
  }
917
933
  let data;
918
934
  try {
919
- data = JSON.parse((await mz_1.fs.readFile(this.backupPath)).toString());
935
+ data = JSON.parse(((0, fs_1.readFileSync)(this.backupPath)).toString());
920
936
  }
921
937
  catch (error) {
922
938
  throw new Error(`[BACKUP] Coordinator backup is corrupted.`);
@@ -2079,7 +2095,7 @@ class EmberAdapter extends __1.Adapter {
2079
2095
  throw new Error(`[BACKUP] No network key set.`);
2080
2096
  }
2081
2097
  let keyList = [];
2082
- if (STACK_CONFIGS[this.stackConfig].KEY_TABLE_SIZE) {
2098
+ if (this.stackConfig.KEY_TABLE_SIZE > 0) {
2083
2099
  keyList = (await this.exportLinkKeys());
2084
2100
  }
2085
2101
  // XXX: this only makes sense on stop (if that), not hourly/on start, plus network needs to be at near-standstill @see AN1387
@@ -2114,7 +2130,7 @@ class EmberAdapter extends __1.Adapter {
2114
2130
  sequenceNumber: netKeyInfo.networkKeySequenceNumber,
2115
2131
  frameCounter: netKeyInfo.networkKeyFrameCounter,
2116
2132
  },
2117
- securityLevel: STACK_CONFIGS[this.stackConfig].SECURITY_LEVEL,
2133
+ securityLevel: consts_2.SECURITY_LEVEL_Z3,
2118
2134
  networkUpdateId: netParams.nwkUpdateId,
2119
2135
  coordinatorIeeeAddress: Buffer.from(this.networkCache.eui64.substring(2) /*take out 0x*/, 'hex').reverse(),
2120
2136
  devices: keyList.map((key) => ({