zigbee-herdsman 1.0.1 → 2.0.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 (140) hide show
  1. package/.release-please-manifest.json +1 -1
  2. package/CHANGELOG.md +23 -0
  3. package/dist/adapter/adapter.d.ts +8 -12
  4. package/dist/adapter/adapter.d.ts.map +1 -1
  5. package/dist/adapter/adapter.js +3 -0
  6. package/dist/adapter/adapter.js.map +1 -1
  7. package/dist/adapter/deconz/adapter/deconzAdapter.d.ts +7 -15
  8. package/dist/adapter/deconz/adapter/deconzAdapter.d.ts.map +1 -1
  9. package/dist/adapter/deconz/adapter/deconzAdapter.js +154 -693
  10. package/dist/adapter/deconz/adapter/deconzAdapter.js.map +1 -1
  11. package/dist/adapter/deconz/driver/constants.d.ts +102 -56
  12. package/dist/adapter/deconz/driver/constants.d.ts.map +1 -1
  13. package/dist/adapter/deconz/driver/constants.js +1 -2
  14. package/dist/adapter/deconz/driver/constants.js.map +1 -1
  15. package/dist/adapter/deconz/driver/driver.d.ts.map +1 -1
  16. package/dist/adapter/deconz/driver/driver.js +46 -41
  17. package/dist/adapter/deconz/driver/driver.js.map +1 -1
  18. package/dist/adapter/deconz/driver/frameParser.d.ts.map +1 -1
  19. package/dist/adapter/deconz/driver/frameParser.js +174 -107
  20. package/dist/adapter/deconz/driver/frameParser.js.map +1 -1
  21. package/dist/adapter/ember/adapter/emberAdapter.d.ts +5 -22
  22. package/dist/adapter/ember/adapter/emberAdapter.d.ts.map +1 -1
  23. package/dist/adapter/ember/adapter/emberAdapter.js +92 -325
  24. package/dist/adapter/ember/adapter/emberAdapter.js.map +1 -1
  25. package/dist/adapter/ember/adapter/oneWaitress.d.ts +17 -14
  26. package/dist/adapter/ember/adapter/oneWaitress.d.ts.map +1 -1
  27. package/dist/adapter/ember/adapter/oneWaitress.js +16 -42
  28. package/dist/adapter/ember/adapter/oneWaitress.js.map +1 -1
  29. package/dist/adapter/events.d.ts +1 -9
  30. package/dist/adapter/events.d.ts.map +1 -1
  31. package/dist/adapter/ezsp/adapter/ezspAdapter.d.ts +12 -19
  32. package/dist/adapter/ezsp/adapter/ezspAdapter.d.ts.map +1 -1
  33. package/dist/adapter/ezsp/adapter/ezspAdapter.js +90 -272
  34. package/dist/adapter/ezsp/adapter/ezspAdapter.js.map +1 -1
  35. package/dist/adapter/ezsp/driver/driver.d.ts +6 -14
  36. package/dist/adapter/ezsp/driver/driver.d.ts.map +1 -1
  37. package/dist/adapter/ezsp/driver/driver.js +56 -37
  38. package/dist/adapter/ezsp/driver/driver.js.map +1 -1
  39. package/dist/adapter/ezsp/driver/ezsp.d.ts.map +1 -1
  40. package/dist/adapter/ezsp/driver/ezsp.js +3 -0
  41. package/dist/adapter/ezsp/driver/ezsp.js.map +1 -1
  42. package/dist/adapter/tstype.d.ts +1 -27
  43. package/dist/adapter/tstype.d.ts.map +1 -1
  44. package/dist/adapter/z-stack/adapter/manager.d.ts.map +1 -1
  45. package/dist/adapter/z-stack/adapter/manager.js +20 -10
  46. package/dist/adapter/z-stack/adapter/manager.js.map +1 -1
  47. package/dist/adapter/z-stack/adapter/zStackAdapter.d.ts +7 -15
  48. package/dist/adapter/z-stack/adapter/zStackAdapter.d.ts.map +1 -1
  49. package/dist/adapter/z-stack/adapter/zStackAdapter.js +128 -253
  50. package/dist/adapter/z-stack/adapter/zStackAdapter.js.map +1 -1
  51. package/dist/adapter/z-stack/znp/definition.d.ts.map +1 -1
  52. package/dist/adapter/z-stack/znp/definition.js +256 -302
  53. package/dist/adapter/z-stack/znp/definition.js.map +1 -1
  54. package/dist/adapter/z-stack/znp/tstype.d.ts +8 -8
  55. package/dist/adapter/z-stack/znp/tstype.d.ts.map +1 -1
  56. package/dist/adapter/z-stack/znp/utils.d.ts +3 -2
  57. package/dist/adapter/z-stack/znp/utils.d.ts.map +1 -1
  58. package/dist/adapter/z-stack/znp/utils.js +8 -7
  59. package/dist/adapter/z-stack/znp/utils.js.map +1 -1
  60. package/dist/adapter/z-stack/znp/znp.d.ts +3 -1
  61. package/dist/adapter/z-stack/znp/znp.d.ts.map +1 -1
  62. package/dist/adapter/z-stack/znp/znp.js +31 -14
  63. package/dist/adapter/z-stack/znp/znp.js.map +1 -1
  64. package/dist/adapter/z-stack/znp/zpiObject.d.ts +5 -6
  65. package/dist/adapter/z-stack/znp/zpiObject.d.ts.map +1 -1
  66. package/dist/adapter/z-stack/znp/zpiObject.js +28 -11
  67. package/dist/adapter/z-stack/znp/zpiObject.js.map +1 -1
  68. package/dist/adapter/zboss/adapter/zbossAdapter.d.ts +8 -16
  69. package/dist/adapter/zboss/adapter/zbossAdapter.d.ts.map +1 -1
  70. package/dist/adapter/zboss/adapter/zbossAdapter.js +124 -162
  71. package/dist/adapter/zboss/adapter/zbossAdapter.js.map +1 -1
  72. package/dist/adapter/zboss/commands.d.ts +3 -0
  73. package/dist/adapter/zboss/commands.d.ts.map +1 -1
  74. package/dist/adapter/zboss/commands.js +248 -205
  75. package/dist/adapter/zboss/commands.js.map +1 -1
  76. package/dist/adapter/zboss/driver.d.ts +4 -14
  77. package/dist/adapter/zboss/driver.d.ts.map +1 -1
  78. package/dist/adapter/zboss/driver.js +63 -89
  79. package/dist/adapter/zboss/driver.js.map +1 -1
  80. package/dist/adapter/zboss/enums.d.ts +24 -2
  81. package/dist/adapter/zboss/enums.d.ts.map +1 -1
  82. package/dist/adapter/zboss/enums.js +35 -3
  83. package/dist/adapter/zboss/enums.js.map +1 -1
  84. package/dist/adapter/zboss/frame.d.ts +6 -1
  85. package/dist/adapter/zboss/frame.d.ts.map +1 -1
  86. package/dist/adapter/zboss/frame.js +56 -11
  87. package/dist/adapter/zboss/frame.js.map +1 -1
  88. package/dist/adapter/zboss/uart.d.ts +1 -0
  89. package/dist/adapter/zboss/uart.d.ts.map +1 -1
  90. package/dist/adapter/zboss/uart.js +4 -2
  91. package/dist/adapter/zboss/uart.js.map +1 -1
  92. package/dist/adapter/zigate/adapter/patchZdoBuffaloBE.d.ts +5 -0
  93. package/dist/adapter/zigate/adapter/patchZdoBuffaloBE.d.ts.map +1 -0
  94. package/dist/adapter/zigate/adapter/patchZdoBuffaloBE.js +44 -0
  95. package/dist/adapter/zigate/adapter/patchZdoBuffaloBE.js.map +1 -0
  96. package/dist/adapter/zigate/adapter/zigateAdapter.d.ts +6 -10
  97. package/dist/adapter/zigate/adapter/zigateAdapter.d.ts.map +1 -1
  98. package/dist/adapter/zigate/adapter/zigateAdapter.js +99 -289
  99. package/dist/adapter/zigate/adapter/zigateAdapter.js.map +1 -1
  100. package/dist/adapter/zigate/driver/buffaloZiGate.d.ts.map +1 -1
  101. package/dist/adapter/zigate/driver/buffaloZiGate.js +2 -18
  102. package/dist/adapter/zigate/driver/buffaloZiGate.js.map +1 -1
  103. package/dist/adapter/zigate/driver/commandType.js +218 -218
  104. package/dist/adapter/zigate/driver/commandType.js.map +1 -1
  105. package/dist/adapter/zigate/driver/constants.d.ts +14 -8
  106. package/dist/adapter/zigate/driver/constants.d.ts.map +1 -1
  107. package/dist/adapter/zigate/driver/constants.js +36 -9
  108. package/dist/adapter/zigate/driver/constants.js.map +1 -1
  109. package/dist/adapter/zigate/driver/messageType.js +42 -42
  110. package/dist/adapter/zigate/driver/messageType.js.map +1 -1
  111. package/dist/adapter/zigate/driver/zigate.d.ts +17 -13
  112. package/dist/adapter/zigate/driver/zigate.d.ts.map +1 -1
  113. package/dist/adapter/zigate/driver/zigate.js +83 -18
  114. package/dist/adapter/zigate/driver/zigate.js.map +1 -1
  115. package/dist/controller/controller.d.ts +5 -0
  116. package/dist/controller/controller.d.ts.map +1 -1
  117. package/dist/controller/controller.js +143 -37
  118. package/dist/controller/controller.js.map +1 -1
  119. package/dist/controller/greenPower.js +3 -3
  120. package/dist/controller/greenPower.js.map +1 -1
  121. package/dist/controller/model/device.d.ts +8 -7
  122. package/dist/controller/model/device.d.ts.map +1 -1
  123. package/dist/controller/model/device.js +176 -72
  124. package/dist/controller/model/device.js.map +1 -1
  125. package/dist/controller/model/endpoint.d.ts +1 -0
  126. package/dist/controller/model/endpoint.d.ts.map +1 -1
  127. package/dist/controller/model/endpoint.js +27 -4
  128. package/dist/controller/model/endpoint.js.map +1 -1
  129. package/dist/zspec/zdo/buffaloZdo.d.ts +1 -139
  130. package/dist/zspec/zdo/buffaloZdo.d.ts.map +1 -1
  131. package/dist/zspec/zdo/buffaloZdo.js.map +1 -1
  132. package/dist/zspec/zdo/definition/tstypes.d.ts +168 -1
  133. package/dist/zspec/zdo/definition/tstypes.d.ts.map +1 -1
  134. package/dist/zspec/zdo/definition/tstypes.js +1 -0
  135. package/dist/zspec/zdo/definition/tstypes.js.map +1 -1
  136. package/dist/zspec/zdo/utils.d.ts +2 -3
  137. package/dist/zspec/zdo/utils.d.ts.map +1 -1
  138. package/dist/zspec/zdo/utils.js +3 -4
  139. package/dist/zspec/zdo/utils.js.map +1 -1
  140. package/package.json +5 -4
@@ -3,6 +3,8 @@ import { Backup } from '../../../models';
3
3
  import * as ZSpec from '../../../zspec';
4
4
  import { EUI64, ExtendedPanId, PanId } from '../../../zspec/tstypes';
5
5
  import * as Zcl from '../../../zspec/zcl';
6
+ import * as Zdo from '../../../zspec/zdo';
7
+ import * as ZdoTypes from '../../../zspec/zdo/definition/tstypes';
6
8
  import { ZclPayload } from '../../events';
7
9
  import { IEEE802154CcaMode } from '../enums';
8
10
  import { EmberKeyData, EmberNetworkParameters } from '../types';
@@ -318,29 +320,16 @@ export declare class EmberAdapter extends Adapter {
318
320
  * @return uint8_t The next device request sequence number
319
321
  */
320
322
  private nextZDORequestSequence;
321
- /**
322
- * ZDO
323
- *
324
- * @param destination
325
- * @param clusterId uint16_t
326
- * @param messageContents Content of the ZDO request (sequence to be assigned at index zero)
327
- * @param options
328
- * @returns status Indicates success or failure (with reason) of send
329
- * @returns apsFrame The APS Frame resulting of the request being built and sent (`sequence` set from stack-given value).
330
- * @returns messageTag The tag passed to ezspSend${x} function.
331
- */
332
- private sendZDORequest;
333
323
  static isValidPath(path: string): Promise<boolean>;
334
324
  static autoDetectPath(): Promise<string | undefined>;
335
325
  start(): Promise<TsType.StartResult>;
336
326
  stop(): Promise<void>;
337
- getCoordinator(): Promise<TsType.Coordinator>;
327
+ getCoordinatorIEEE(): Promise<string>;
338
328
  getCoordinatorVersion(): Promise<TsType.CoordinatorVersion>;
339
329
  reset(type: 'soft' | 'hard'): Promise<void>;
340
330
  supportsBackup(): Promise<boolean>;
341
331
  backup(ieeeAddressesInDatabase: string[]): Promise<Backup>;
342
332
  getNetworkParameters(): Promise<TsType.NetworkParameters>;
343
- changeChannel(newChannel: number): Promise<void>;
344
333
  setTransmitPower(value: number): Promise<void>;
345
334
  addInstallCode(ieeeAddress: string, key: Buffer): Promise<void>;
346
335
  /** WARNING: Adapter impl. Starts timer immediately upon returning */
@@ -348,15 +337,9 @@ export declare class EmberAdapter extends Adapter {
348
337
  promise: Promise<ZclPayload>;
349
338
  cancel: () => void;
350
339
  };
340
+ sendZdo(ieeeAddress: string, networkAddress: number, clusterId: Zdo.ClusterId, payload: Buffer, disableResponse: true): Promise<void>;
341
+ sendZdo<K extends keyof ZdoTypes.RequestToResponseMap>(ieeeAddress: string, networkAddress: number, clusterId: K, payload: Buffer, disableResponse: false): Promise<ZdoTypes.RequestToResponseMap[K]>;
351
342
  permitJoin(seconds: number, networkAddress?: number): Promise<void>;
352
- lqi(networkAddress: number): Promise<TsType.LQI>;
353
- routingTable(networkAddress: number): Promise<TsType.RoutingTable>;
354
- nodeDescriptor(networkAddress: number): Promise<TsType.NodeDescriptor>;
355
- activeEndpoints(networkAddress: number): Promise<TsType.ActiveEndpoints>;
356
- simpleDescriptor(networkAddress: number, endpointID: number): Promise<TsType.SimpleDescriptor>;
357
- bind(destinationNetworkAddress: number, sourceIeeeAddress: string, sourceEndpoint: number, clusterID: number, destinationAddressOrGroup: string | number, type: 'endpoint' | 'group', destinationEndpoint?: number): Promise<void>;
358
- unbind(destinationNetworkAddress: number, sourceIeeeAddress: string, sourceEndpoint: number, clusterID: number, destinationAddressOrGroup: string | number, type: 'endpoint' | 'group', destinationEndpoint?: number): Promise<void>;
359
- removeDevice(networkAddress: number, ieeeAddr: string): Promise<void>;
360
343
  sendZclFrameToEndpoint(ieeeAddr: string, networkAddress: number, endpoint: number, zclFrame: Zcl.Frame, timeout: number, disableResponse: boolean, disableRecovery: boolean, sourceEndpoint?: number): Promise<ZclPayload | void>;
361
344
  sendZclFrameToGroup(groupID: number, zclFrame: Zcl.Frame, sourceEndpoint?: number): Promise<void>;
362
345
  sendZclFrameToAll(endpoint: number, zclFrame: Zcl.Frame, sourceEndpoint: number, destination: ZSpec.BroadcastAddress): Promise<void>;
@@ -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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"}
@@ -80,8 +80,6 @@ const autoDetectDefinitions = [
80
80
  const APPLICATION_ZDO_SEQUENCE_MASK = 0x7f;
81
81
  /* Default radius used for broadcast ZDO requests. uint8_t */
82
82
  const ZDO_REQUEST_RADIUS = 0xff;
83
- /** Current revision of the spec by zigbee alliance supported by Z2M. */
84
- const CURRENT_ZIGBEE_SPEC_REVISION = 22;
85
83
  /** Oldest supported EZSP version for backups. Don't take the risk to restore a broken network until older backup versions can be investigated. */
86
84
  const BACKUP_OLDEST_SUPPORTED_EZSP_VERSION = 12;
87
85
  /**
@@ -169,6 +167,8 @@ class EmberAdapter extends __1.Adapter {
169
167
  multicastTable;
170
168
  constructor(networkOptions, serialPortOptions, backupPath, adapterOptions) {
171
169
  super(networkOptions, serialPortOptions, backupPath, adapterOptions);
170
+ this.hasZdoMessageOverhead = true;
171
+ this.manufacturerID = Zcl.ManufacturerCode.SILICON_LABORATORIES;
172
172
  this.version = {
173
173
  ezsp: 0,
174
174
  revision: 'unknown',
@@ -287,7 +287,6 @@ class EmberAdapter extends __1.Adapter {
287
287
  break;
288
288
  }
289
289
  case enums_1.SLStatus.ZIGBEE_CHANNEL_CHANGED: {
290
- this.oneWaitress.resolveEvent(oneWaitress_1.OneWaitressEvents.STACK_STATUS_CHANNEL_CHANGED);
291
290
  // invalidate cache
292
291
  this.networkCache.parameters.radioChannel = consts_1.INVALID_RADIO_CHANNEL;
293
292
  logger_1.logger.info(`[STACK STATUS] Channel changed.`, NS);
@@ -312,6 +311,7 @@ class EmberAdapter extends __1.Adapter {
312
311
  async onMessageSent(status, type, indexOrDestination, apsFrame, messageTag) {
313
312
  switch (status) {
314
313
  case enums_1.SLStatus.ZIGBEE_DELIVERY_FAILED: {
314
+ logger_1.logger.debug(() => `~x~> DELIVERY_FAILED [indexOrDestination=${indexOrDestination} apsFrame=${JSON.stringify(apsFrame)} messageTag=${messageTag}]`, NS);
315
315
  // no ACK was received from the destination
316
316
  switch (type) {
317
317
  case enums_1.EmberOutgoingMessageType.BROADCAST:
@@ -319,7 +319,7 @@ class EmberAdapter extends __1.Adapter {
319
319
  case enums_1.EmberOutgoingMessageType.MULTICAST:
320
320
  case enums_1.EmberOutgoingMessageType.MULTICAST_WITH_ALIAS: {
321
321
  // BC/MC not checking for message sent, avoid unnecessary waitress lookups
322
- logger_1.logger.error(`Delivery of ${enums_1.EmberOutgoingMessageType[type]} failed for '${indexOrDestination}' [apsFrame=${JSON.stringify(apsFrame)} messageTag=${messageTag}]`, NS);
322
+ logger_1.logger.error(`Delivery of ${enums_1.EmberOutgoingMessageType[type]} failed for '${indexOrDestination}'.`, NS);
323
323
  break;
324
324
  }
325
325
  default: {
@@ -373,26 +373,19 @@ class EmberAdapter extends __1.Adapter {
373
373
  * @param messageContents The content of the response.
374
374
  */
375
375
  async onZDOResponse(apsFrame, sender, messageContents) {
376
- const [status, payload] = Zdo.Buffalo.readResponse(this.hasZdoMessageOverhead, apsFrame.clusterId, messageContents);
377
- if (status === Zdo.Status.SUCCESS) {
378
- logger_1.logger.debug(() => `<~~~ [ZDO ${Zdo.ClusterId[apsFrame.clusterId]} from=${sender} ${payload ? JSON.stringify(payload) : 'OK'}]`, NS);
379
- this.oneWaitress.resolveZDO(sender, apsFrame, payload);
380
- if (apsFrame.clusterId === Zdo.ClusterId.NETWORK_ADDRESS_RESPONSE) {
381
- this.emit('networkAddress', {
382
- networkAddress: payload.nwkAddress,
383
- ieeeAddr: payload.eui64,
384
- });
385
- }
386
- else if (apsFrame.clusterId === Zdo.ClusterId.END_DEVICE_ANNOUNCE) {
387
- this.emit('deviceAnnounce', {
388
- networkAddress: payload.nwkAddress,
389
- ieeeAddr: payload.eui64,
390
- });
376
+ const result = Zdo.Buffalo.readResponse(this.hasZdoMessageOverhead, apsFrame.clusterId, messageContents);
377
+ if (apsFrame.clusterId === Zdo.ClusterId.NETWORK_ADDRESS_RESPONSE) {
378
+ // special case to properly resolve a NETWORK_ADDRESS_RESPONSE following a NETWORK_ADDRESS_REQUEST (based on EUI64 from ZDO payload)
379
+ // NOTE: if response has invalid status (no EUI64 available), response waiter will eventually time out
380
+ /* istanbul ignore else */
381
+ if (Zdo.Buffalo.checkStatus(result)) {
382
+ this.oneWaitress.resolveZDO(result[1].eui64, apsFrame, result);
391
383
  }
392
384
  }
393
385
  else {
394
- this.oneWaitress.resolveZDO(sender, apsFrame, new Zdo.StatusError(status));
386
+ this.oneWaitress.resolveZDO(sender, apsFrame, result);
395
387
  }
388
+ this.emit('zdoResponse', apsFrame.clusterId, result);
396
389
  }
397
390
  /**
398
391
  * Emitted from @see Ezsp.ezspIncomingMessageHandler @see Ezsp.ezspGpepIncomingMessageHandler
@@ -1164,48 +1157,6 @@ class EmberAdapter extends __1.Adapter {
1164
1157
  nextZDORequestSequence() {
1165
1158
  return (this.zdoRequestSequence = ++this.zdoRequestSequence & APPLICATION_ZDO_SEQUENCE_MASK);
1166
1159
  }
1167
- /**
1168
- * ZDO
1169
- *
1170
- * @param destination
1171
- * @param clusterId uint16_t
1172
- * @param messageContents Content of the ZDO request (sequence to be assigned at index zero)
1173
- * @param options
1174
- * @returns status Indicates success or failure (with reason) of send
1175
- * @returns apsFrame The APS Frame resulting of the request being built and sent (`sequence` set from stack-given value).
1176
- * @returns messageTag The tag passed to ezspSend${x} function.
1177
- */
1178
- async sendZDORequest(destination, clusterId, messageContents, options) {
1179
- const messageTag = this.nextZDORequestSequence();
1180
- messageContents[0] = messageTag;
1181
- const apsFrame = {
1182
- profileId: Zdo.ZDO_PROFILE_ID,
1183
- clusterId,
1184
- sourceEndpoint: Zdo.ZDO_ENDPOINT,
1185
- destinationEndpoint: Zdo.ZDO_ENDPOINT,
1186
- options,
1187
- groupId: 0,
1188
- sequence: 0, // set by stack
1189
- };
1190
- if (destination === ZSpec.BroadcastAddress.DEFAULT ||
1191
- destination === ZSpec.BroadcastAddress.RX_ON_WHEN_IDLE ||
1192
- destination === ZSpec.BroadcastAddress.SLEEPY) {
1193
- logger_1.logger.debug(`~~~> [ZDO ${Zdo.ClusterId[clusterId]} BROADCAST to=${destination} messageTag=${messageTag} messageContents=${messageContents.toString('hex')}]`, NS);
1194
- const [status, apsSequence] = await this.ezsp.ezspSendBroadcast(ZSpec.NULL_NODE_ID, // alias
1195
- destination, 0, // nwkSequence
1196
- apsFrame, ZDO_REQUEST_RADIUS, messageTag, messageContents);
1197
- apsFrame.sequence = apsSequence;
1198
- logger_1.logger.debug(`~~~> [SENT ZDO type=BROADCAST apsSequence=${apsSequence} messageTag=${messageTag} status=${enums_1.SLStatus[status]}`, NS);
1199
- return [status, apsFrame, messageTag];
1200
- }
1201
- else {
1202
- logger_1.logger.debug(`~~~> [ZDO ${Zdo.ClusterId[clusterId]} UNICAST to=${destination} messageTag=${messageTag} messageContents=${messageContents.toString('hex')}]`, NS);
1203
- const [status, apsSequence] = await this.ezsp.ezspSendUnicast(enums_1.EmberOutgoingMessageType.DIRECT, destination, apsFrame, messageTag, messageContents);
1204
- apsFrame.sequence = apsSequence;
1205
- logger_1.logger.debug(`~~~> [SENT ZDO type=DIRECT apsSequence=${apsSequence} messageTag=${messageTag} status=${enums_1.SLStatus[status]}`, NS);
1206
- return [status, apsFrame, messageTag];
1207
- }
1208
- }
1209
1160
  //---- END Ember ZDO
1210
1161
  //-- START Adapter implementation
1211
1162
  /* istanbul ignore next */
@@ -1239,26 +1190,11 @@ class EmberAdapter extends __1.Adapter {
1239
1190
  this.ezsp.removeAllListeners();
1240
1191
  logger_1.logger.info(`======== Ember Adapter Stopped ========`, NS);
1241
1192
  }
1242
- // queued, non-InterPAN
1243
- async getCoordinator() {
1193
+ async getCoordinatorIEEE() {
1244
1194
  return await this.queue.execute(async () => {
1245
1195
  this.checkInterpanLock();
1246
1196
  // in all likelihood this will be retrieved from cache
1247
- const ieeeAddr = await this.emberGetEui64();
1248
- return {
1249
- ieeeAddr,
1250
- networkAddress: ZSpec.COORDINATOR_ADDRESS,
1251
- manufacturerID: DEFAULT_MANUFACTURER_CODE,
1252
- endpoints: endpoints_1.FIXED_ENDPOINTS.map((ep) => {
1253
- return {
1254
- profileID: ep.profileId,
1255
- ID: ep.endpoint,
1256
- deviceID: ep.deviceId,
1257
- inputClusters: ep.inClusterList.slice(), // copy
1258
- outputClusters: ep.outClusterList.slice(), // copy
1259
- };
1260
- }),
1261
- };
1197
+ return await this.emberGetEui64();
1262
1198
  });
1263
1199
  }
1264
1200
  async getCoordinatorVersion() {
@@ -1361,19 +1297,6 @@ class EmberAdapter extends __1.Adapter {
1361
1297
  });
1362
1298
  }
1363
1299
  // queued
1364
- async changeChannel(newChannel) {
1365
- return await this.queue.execute(async () => {
1366
- this.checkInterpanLock();
1367
- const zdoPayload = Zdo.Buffalo.buildRequest(this.hasZdoMessageOverhead, Zdo.ClusterId.NWK_UPDATE_REQUEST, [newChannel], 0xfe, undefined, undefined, undefined);
1368
- const [status] = await this.sendZDORequest(ZSpec.BroadcastAddress.SLEEPY, Zdo.ClusterId.NWK_UPDATE_REQUEST, zdoPayload, exports.DEFAULT_APS_OPTIONS);
1369
- if (status !== enums_1.SLStatus.OK) {
1370
- throw new Error(`[ZDO] Failed broadcast channel change to '${newChannel}' with status=${enums_1.SLStatus[status]}.`);
1371
- }
1372
- await this.oneWaitress.startWaitingForEvent({ eventName: oneWaitress_1.OneWaitressEvents.STACK_STATUS_CHANNEL_CHANGED }, DEFAULT_NETWORK_REQUEST_TIMEOUT * 2, // observed to ~9sec
1373
- '[ZDO] Change Channel');
1374
- });
1375
- }
1376
- // queued
1377
1300
  async setTransmitPower(value) {
1378
1301
  return await this.queue.execute(async () => {
1379
1302
  const status = await this.ezsp.ezspSetRadioPower(value);
@@ -1444,9 +1367,59 @@ class EmberAdapter extends __1.Adapter {
1444
1367
  promise: waiter.start().promise,
1445
1368
  };
1446
1369
  }
1447
- //---- ZDO
1370
+ async sendZdo(ieeeAddress, networkAddress, clusterId, payload, disableResponse) {
1371
+ return await this.queue.execute(async () => {
1372
+ this.checkInterpanLock();
1373
+ const clusterName = Zdo.ClusterId[clusterId];
1374
+ const messageTag = this.nextZDORequestSequence();
1375
+ payload[0] = messageTag;
1376
+ const apsFrame = {
1377
+ profileId: Zdo.ZDO_PROFILE_ID,
1378
+ clusterId,
1379
+ sourceEndpoint: Zdo.ZDO_ENDPOINT,
1380
+ destinationEndpoint: Zdo.ZDO_ENDPOINT,
1381
+ options: exports.DEFAULT_APS_OPTIONS,
1382
+ groupId: 0,
1383
+ sequence: 0, // set by stack
1384
+ };
1385
+ let status;
1386
+ let apsSequence;
1387
+ if (ZSpec.Utils.isBroadcastAddress(networkAddress)) {
1388
+ logger_1.logger.debug(() => `~~~> [ZDO ${clusterName} BROADCAST to=${networkAddress} messageTag=${messageTag} payload=${payload.toString('hex')}]`, NS);
1389
+ [status, apsSequence] = await this.ezsp.ezspSendBroadcast(ZSpec.NULL_NODE_ID, // alias
1390
+ networkAddress, 0, // nwkSequence
1391
+ apsFrame, ZDO_REQUEST_RADIUS, messageTag, payload);
1392
+ apsFrame.sequence = apsSequence;
1393
+ logger_1.logger.debug(`~~~> [SENT ZDO BROADCAST messageTag=${messageTag} apsSequence=${apsSequence} status=${enums_1.SLStatus[status]}]`, NS);
1394
+ if (status !== enums_1.SLStatus.OK) {
1395
+ throw new Error(`~x~> [ZDO ${clusterName} BROADCAST to=${networkAddress} messageTag=${messageTag}] Failed to send request with status=${enums_1.SLStatus[status]}.`);
1396
+ }
1397
+ }
1398
+ else {
1399
+ logger_1.logger.debug(() => `~~~> [ZDO ${clusterName} UNICAST to=${ieeeAddress}:${networkAddress} messageTag=${messageTag} payload=${payload.toString('hex')}]`, NS);
1400
+ [status, apsSequence] = await this.ezsp.ezspSendUnicast(enums_1.EmberOutgoingMessageType.DIRECT, networkAddress, apsFrame, messageTag, payload);
1401
+ apsFrame.sequence = apsSequence;
1402
+ logger_1.logger.debug(`~~~> [SENT ZDO UNICAST messageTag=${messageTag} apsSequence=${apsSequence} status=${enums_1.SLStatus[status]}]`, NS);
1403
+ if (status !== enums_1.SLStatus.OK) {
1404
+ throw new Error(`~x~> [ZDO ${clusterName} UNICAST to=${ieeeAddress}:${networkAddress} messageTag=${messageTag}] Failed to send request with status=${enums_1.SLStatus[status]}.`);
1405
+ }
1406
+ }
1407
+ if (!disableResponse) {
1408
+ const responseClusterId = Zdo.Utils.getResponseClusterId(clusterId);
1409
+ /* istanbul ignore else */
1410
+ if (responseClusterId) {
1411
+ return await this.oneWaitress.startWaitingFor({
1412
+ target: responseClusterId === Zdo.ClusterId.NETWORK_ADDRESS_RESPONSE ? ieeeAddress : networkAddress,
1413
+ apsFrame,
1414
+ zdoResponseClusterId: responseClusterId,
1415
+ }, DEFAULT_REQUEST_TIMEOUT);
1416
+ }
1417
+ }
1418
+ }, networkAddress);
1419
+ }
1448
1420
  // queued, non-InterPAN
1449
1421
  async permitJoin(seconds, networkAddress) {
1422
+ const clusterId = Zdo.ClusterId.PERMIT_JOINING_REQUEST;
1450
1423
  const preJoining = async () => {
1451
1424
  if (seconds) {
1452
1425
  const plaintextKey = { contents: Buffer.from(consts_1.ZIGBEE_PROFILE_INTEROPERABILITY_LINK_KEY) };
@@ -1474,243 +1447,37 @@ class EmberAdapter extends __1.Adapter {
1474
1447
  };
1475
1448
  if (networkAddress) {
1476
1449
  // specific device that is not `Coordinator`
1477
- return await this.queue.execute(async () => {
1450
+ await this.queue.execute(async () => {
1478
1451
  this.checkInterpanLock();
1479
1452
  await preJoining();
1480
- // `authentication`: TC significance always 1 (zb specs)
1481
- const zdoPayload = Zdo.Buffalo.buildRequest(this.hasZdoMessageOverhead, Zdo.ClusterId.PERMIT_JOINING_REQUEST, seconds, 1, []);
1482
- const [status, apsFrame] = await this.sendZDORequest(networkAddress, Zdo.ClusterId.PERMIT_JOINING_REQUEST, zdoPayload, exports.DEFAULT_APS_OPTIONS);
1483
- if (status !== enums_1.SLStatus.OK) {
1484
- throw new Error(`[ZDO] Failed permit joining request for '${networkAddress}' with status=${enums_1.SLStatus[status]}.`);
1485
- }
1486
- await this.oneWaitress.startWaitingFor({
1487
- target: networkAddress,
1488
- apsFrame,
1489
- responseClusterId: Zdo.ClusterId.PERMIT_JOINING_RESPONSE,
1490
- }, DEFAULT_REQUEST_TIMEOUT);
1491
1453
  });
1454
+ // `authentication`: TC significance always 1 (zb specs)
1455
+ const zdoPayload = Zdo.Buffalo.buildRequest(this.hasZdoMessageOverhead, clusterId, seconds, 1, []);
1456
+ const result = await this.sendZdo(ZSpec.BLANK_EUI64, networkAddress, clusterId, zdoPayload, false);
1457
+ /* istanbul ignore next */
1458
+ if (!Zdo.Buffalo.checkStatus(result)) {
1459
+ // TODO: will disappear once moved upstream
1460
+ throw new Zdo.StatusError(result[0]);
1461
+ }
1492
1462
  }
1493
1463
  else {
1494
1464
  // coordinator-only (0), or all
1495
- return await this.queue.execute(async () => {
1465
+ await this.queue.execute(async () => {
1496
1466
  this.checkInterpanLock();
1497
1467
  await preJoining();
1498
- const status = await this.ezsp.ezspPermitJoining(seconds);
1499
- if (status !== enums_1.SLStatus.OK) {
1500
- throw new Error(`[ZDO] Failed coordinator permit joining request with status=${enums_1.SLStatus[status]}.`);
1501
- }
1502
- logger_1.logger.debug(`Permit joining on coordinator for ${seconds} sec.`, NS);
1503
- // broadcast permit joining ZDO
1504
- if (networkAddress === undefined) {
1505
- // `authentication`: TC significance always 1 (zb specs)
1506
- const zdoPayload = Zdo.Buffalo.buildRequest(this.hasZdoMessageOverhead, Zdo.ClusterId.PERMIT_JOINING_REQUEST, seconds, 1, []);
1507
- const [bcStatus] = await this.sendZDORequest(ZSpec.BroadcastAddress.DEFAULT, Zdo.ClusterId.PERMIT_JOINING_REQUEST, zdoPayload, exports.DEFAULT_APS_OPTIONS);
1508
- if (bcStatus !== enums_1.SLStatus.OK) {
1509
- // don't throw, coordinator succeeded at least
1510
- logger_1.logger.error(`[ZDO] Failed broadcast permit joining request with status=${enums_1.SLStatus[bcStatus]}.`, NS);
1511
- }
1512
- }
1513
1468
  });
1514
- }
1515
- }
1516
- // queued, non-InterPAN
1517
- async lqi(networkAddress) {
1518
- return await this.queue.execute(async () => {
1519
- this.checkInterpanLock();
1520
- const neighbors = [];
1521
- const request = async (startIndex) => {
1522
- const zdoPayload = Zdo.Buffalo.buildRequest(this.hasZdoMessageOverhead, Zdo.ClusterId.LQI_TABLE_REQUEST, startIndex);
1523
- const [status, apsFrame] = await this.sendZDORequest(networkAddress, Zdo.ClusterId.LQI_TABLE_REQUEST, zdoPayload, exports.DEFAULT_APS_OPTIONS);
1524
- if (status !== enums_1.SLStatus.OK) {
1525
- throw new Error(`[ZDO] Failed LQI request for '${networkAddress}' (index '${startIndex}') with status=${enums_1.SLStatus[status]}.`);
1526
- }
1527
- const result = await this.oneWaitress.startWaitingFor({
1528
- target: networkAddress,
1529
- apsFrame,
1530
- responseClusterId: Zdo.ClusterId.LQI_TABLE_RESPONSE,
1531
- }, DEFAULT_REQUEST_TIMEOUT);
1532
- for (const entry of result.entryList) {
1533
- neighbors.push({
1534
- ieeeAddr: entry.eui64,
1535
- networkAddress: entry.nwkAddress,
1536
- linkquality: entry.lqi,
1537
- relationship: entry.relationship,
1538
- depth: entry.depth,
1539
- });
1540
- }
1541
- return [result.neighborTableEntries, result.entryList.length];
1542
- };
1543
- let [tableEntries, entryCount] = await request(0);
1544
- const size = tableEntries;
1545
- let nextStartIndex = entryCount;
1546
- while (neighbors.length < size) {
1547
- [tableEntries, entryCount] = await request(nextStartIndex);
1548
- nextStartIndex += entryCount;
1549
- }
1550
- return { neighbors };
1551
- }, networkAddress);
1552
- }
1553
- // queued, non-InterPAN
1554
- async routingTable(networkAddress) {
1555
- return await this.queue.execute(async () => {
1556
- this.checkInterpanLock();
1557
- const table = [];
1558
- const request = async (startIndex) => {
1559
- const zdoPayload = Zdo.Buffalo.buildRequest(this.hasZdoMessageOverhead, Zdo.ClusterId.ROUTING_TABLE_REQUEST, startIndex);
1560
- const [status, apsFrame] = await this.sendZDORequest(networkAddress, Zdo.ClusterId.ROUTING_TABLE_REQUEST, zdoPayload, exports.DEFAULT_APS_OPTIONS);
1561
- if (status !== enums_1.SLStatus.OK) {
1562
- throw new Error(`[ZDO] Failed routing table request for '${networkAddress}' (index '${startIndex}') with status=${enums_1.SLStatus[status]}.`);
1563
- }
1564
- const result = await this.oneWaitress.startWaitingFor({
1565
- target: networkAddress,
1566
- apsFrame,
1567
- responseClusterId: Zdo.ClusterId.ROUTING_TABLE_RESPONSE,
1568
- }, DEFAULT_REQUEST_TIMEOUT);
1569
- for (const entry of result.entryList) {
1570
- table.push({
1571
- destinationAddress: entry.destinationAddress,
1572
- status: entry.status,
1573
- nextHop: entry.nextHopAddress,
1574
- });
1575
- }
1576
- return [result.routingTableEntries, result.entryList.length];
1577
- };
1578
- let [tableEntries, entryCount] = await request(0);
1579
- const size = tableEntries;
1580
- let nextStartIndex = entryCount;
1581
- while (table.length < size) {
1582
- [tableEntries, entryCount] = await request(nextStartIndex);
1583
- nextStartIndex += entryCount;
1584
- }
1585
- return { table };
1586
- }, networkAddress);
1587
- }
1588
- // queued, non-InterPAN
1589
- async nodeDescriptor(networkAddress) {
1590
- return await this.queue.execute(async () => {
1591
- this.checkInterpanLock();
1592
- const zdoPayload = Zdo.Buffalo.buildRequest(this.hasZdoMessageOverhead, Zdo.ClusterId.NODE_DESCRIPTOR_REQUEST, networkAddress);
1593
- const [status, apsFrame] = await this.sendZDORequest(networkAddress, Zdo.ClusterId.NODE_DESCRIPTOR_REQUEST, zdoPayload, exports.DEFAULT_APS_OPTIONS);
1469
+ const status = await this.ezsp.ezspPermitJoining(seconds);
1594
1470
  if (status !== enums_1.SLStatus.OK) {
1595
- throw new Error(`[ZDO] Failed node descriptor request for '${networkAddress}' with status=${enums_1.SLStatus[status]}.`);
1596
- }
1597
- const result = await this.oneWaitress.startWaitingFor({
1598
- target: networkAddress,
1599
- apsFrame,
1600
- responseClusterId: Zdo.ClusterId.NODE_DESCRIPTOR_RESPONSE,
1601
- }, DEFAULT_REQUEST_TIMEOUT);
1602
- let type = 'Unknown';
1603
- switch (result.logicalType) {
1604
- case 0x0:
1605
- type = 'Coordinator';
1606
- break;
1607
- case 0x1:
1608
- type = 'Router';
1609
- break;
1610
- case 0x2:
1611
- type = 'EndDevice';
1612
- break;
1613
- }
1614
- /* istanbul ignore else */
1615
- if (result.serverMask.stackComplianceRevision < CURRENT_ZIGBEE_SPEC_REVISION) {
1616
- // always 0 before rev. 21 where field was added
1617
- const rev = result.serverMask.stackComplianceRevision < 21 ? 'pre-21' : result.serverMask.stackComplianceRevision;
1618
- logger_1.logger.warning(`[ZDO] Device '${networkAddress}' is only compliant to revision '${rev}' of the ZigBee specification (current revision: ${CURRENT_ZIGBEE_SPEC_REVISION}).`, NS);
1471
+ throw new Error(`[ZDO] Failed coordinator permit joining request with status=${enums_1.SLStatus[status]}.`);
1619
1472
  }
1620
- return { type, manufacturerCode: result.manufacturerCode };
1621
- }, networkAddress);
1622
- }
1623
- // queued, non-InterPAN
1624
- async activeEndpoints(networkAddress) {
1625
- return await this.queue.execute(async () => {
1626
- this.checkInterpanLock();
1627
- const zdoPayload = Zdo.Buffalo.buildRequest(this.hasZdoMessageOverhead, Zdo.ClusterId.ACTIVE_ENDPOINTS_REQUEST, networkAddress);
1628
- const [status, apsFrame] = await this.sendZDORequest(networkAddress, Zdo.ClusterId.ACTIVE_ENDPOINTS_REQUEST, zdoPayload, exports.DEFAULT_APS_OPTIONS);
1629
- if (status !== enums_1.SLStatus.OK) {
1630
- throw new Error(`[ZDO] Failed active endpoints request for '${networkAddress}' with status=${enums_1.SLStatus[status]}.`);
1631
- }
1632
- const result = await this.oneWaitress.startWaitingFor({
1633
- target: networkAddress,
1634
- apsFrame,
1635
- responseClusterId: Zdo.ClusterId.ACTIVE_ENDPOINTS_RESPONSE,
1636
- }, DEFAULT_REQUEST_TIMEOUT);
1637
- return { endpoints: result.endpointList };
1638
- }, networkAddress);
1639
- }
1640
- // queued, non-InterPAN
1641
- async simpleDescriptor(networkAddress, endpointID) {
1642
- return await this.queue.execute(async () => {
1643
- this.checkInterpanLock();
1644
- const zdoPayload = Zdo.Buffalo.buildRequest(this.hasZdoMessageOverhead, Zdo.ClusterId.SIMPLE_DESCRIPTOR_REQUEST, networkAddress, endpointID);
1645
- const [status, apsFrame] = await this.sendZDORequest(networkAddress, Zdo.ClusterId.SIMPLE_DESCRIPTOR_REQUEST, zdoPayload, exports.DEFAULT_APS_OPTIONS);
1646
- if (status !== enums_1.SLStatus.OK) {
1647
- throw new Error(`[ZDO] Failed simple descriptor request for '${networkAddress}' endpoint '${endpointID}' with status=${enums_1.SLStatus[status]}.`);
1648
- }
1649
- const result = await this.oneWaitress.startWaitingFor({
1650
- target: networkAddress,
1651
- apsFrame,
1652
- responseClusterId: Zdo.ClusterId.SIMPLE_DESCRIPTOR_RESPONSE,
1653
- }, DEFAULT_REQUEST_TIMEOUT);
1654
- return {
1655
- profileID: result.profileId,
1656
- endpointID: result.endpoint,
1657
- deviceID: result.deviceId,
1658
- inputClusters: result.inClusterList,
1659
- outputClusters: result.outClusterList,
1660
- };
1661
- }, networkAddress);
1662
- }
1663
- // queued, non-InterPAN
1664
- async bind(destinationNetworkAddress, sourceIeeeAddress, sourceEndpoint, clusterID, destinationAddressOrGroup, type, destinationEndpoint) {
1665
- return await this.queue.execute(async () => {
1666
- this.checkInterpanLock();
1667
- const zdoPayload = Zdo.Buffalo.buildRequest(this.hasZdoMessageOverhead, Zdo.ClusterId.BIND_REQUEST, sourceIeeeAddress, sourceEndpoint, clusterID, type === 'group' ? Zdo.MULTICAST_BINDING : Zdo.UNICAST_BINDING, destinationAddressOrGroup, // not used with MULTICAST_BINDING
1668
- destinationAddressOrGroup, // not used with UNICAST_BINDING
1669
- destinationEndpoint ?? 0);
1670
- const [status, apsFrame] = await this.sendZDORequest(destinationNetworkAddress, Zdo.ClusterId.BIND_REQUEST, zdoPayload, exports.DEFAULT_APS_OPTIONS);
1671
- if (status !== enums_1.SLStatus.OK) {
1672
- throw new Error(`[ZDO] Failed bind request for '${destinationNetworkAddress}' destination '${destinationAddressOrGroup}' endpoint '${destinationEndpoint}' with status=${enums_1.SLStatus[status]}.`);
1673
- }
1674
- await this.oneWaitress.startWaitingFor({
1675
- target: destinationNetworkAddress,
1676
- apsFrame,
1677
- responseClusterId: Zdo.ClusterId.BIND_RESPONSE,
1678
- }, DEFAULT_REQUEST_TIMEOUT);
1679
- }, destinationNetworkAddress);
1680
- }
1681
- // queued, non-InterPAN
1682
- async unbind(destinationNetworkAddress, sourceIeeeAddress, sourceEndpoint, clusterID, destinationAddressOrGroup, type, destinationEndpoint) {
1683
- return await this.queue.execute(async () => {
1684
- this.checkInterpanLock();
1685
- const zdoPayload = Zdo.Buffalo.buildRequest(this.hasZdoMessageOverhead, Zdo.ClusterId.UNBIND_REQUEST, sourceIeeeAddress, sourceEndpoint, clusterID, type === 'group' ? Zdo.MULTICAST_BINDING : Zdo.UNICAST_BINDING, destinationAddressOrGroup, // not used with MULTICAST_BINDING
1686
- destinationAddressOrGroup, // not used with UNICAST_BINDING
1687
- destinationEndpoint ?? 0);
1688
- const [status, apsFrame] = await this.sendZDORequest(destinationNetworkAddress, Zdo.ClusterId.UNBIND_REQUEST, zdoPayload, exports.DEFAULT_APS_OPTIONS);
1689
- if (status !== enums_1.SLStatus.OK) {
1690
- throw new Error(`[ZDO] Failed unbind request for '${destinationNetworkAddress}' destination '${destinationAddressOrGroup}' endpoint '${destinationEndpoint}' with status=${enums_1.SLStatus[status]}.`);
1691
- }
1692
- await this.oneWaitress.startWaitingFor({
1693
- target: destinationNetworkAddress,
1694
- apsFrame,
1695
- responseClusterId: Zdo.ClusterId.UNBIND_RESPONSE,
1696
- }, DEFAULT_REQUEST_TIMEOUT);
1697
- }, destinationNetworkAddress);
1698
- }
1699
- // queued, non-InterPAN
1700
- async removeDevice(networkAddress, ieeeAddr) {
1701
- return await this.queue.execute(async () => {
1702
- this.checkInterpanLock();
1703
- const zdoPayload = Zdo.Buffalo.buildRequest(this.hasZdoMessageOverhead, Zdo.ClusterId.LEAVE_REQUEST, ieeeAddr, Zdo.LeaveRequestFlags.WITHOUT_REJOIN);
1704
- const [status, apsFrame] = await this.sendZDORequest(networkAddress, Zdo.ClusterId.LEAVE_REQUEST, zdoPayload, exports.DEFAULT_APS_OPTIONS);
1705
- if (status !== enums_1.SLStatus.OK) {
1706
- throw new Error(`[ZDO] Failed remove device request for '${networkAddress}' target '${ieeeAddr}' with status=${enums_1.SLStatus[status]}.`);
1473
+ logger_1.logger.debug(`Permit joining on coordinator for ${seconds} sec.`, NS);
1474
+ // broadcast permit joining ZDO
1475
+ if (networkAddress === undefined) {
1476
+ // `authentication`: TC significance always 1 (zb specs)
1477
+ const zdoPayload = Zdo.Buffalo.buildRequest(this.hasZdoMessageOverhead, clusterId, seconds, 1, []);
1478
+ await this.sendZdo(ZSpec.BLANK_EUI64, ZSpec.BroadcastAddress.DEFAULT, clusterId, zdoPayload, true);
1707
1479
  }
1708
- await this.oneWaitress.startWaitingFor({
1709
- target: networkAddress,
1710
- apsFrame,
1711
- responseClusterId: Zdo.ClusterId.LEAVE_RESPONSE,
1712
- }, DEFAULT_REQUEST_TIMEOUT);
1713
- }, networkAddress);
1480
+ }
1714
1481
  }
1715
1482
  //---- ZCL
1716
1483
  // queued, non-InterPAN
@@ -1740,7 +1507,7 @@ class EmberAdapter extends __1.Adapter {
1740
1507
  const data = zclFrame.toBuffer();
1741
1508
  return await this.queue.execute(async () => {
1742
1509
  this.checkInterpanLock();
1743
- logger_1.logger.debug(() => `~~~> [ZCL to=${networkAddress} apsFrame=${JSON.stringify(apsFrame)} header=${JSON.stringify(zclFrame.header)}]`, NS);
1510
+ logger_1.logger.debug(() => `~~~> [ZCL to=${ieeeAddr}:${networkAddress} apsFrame=${JSON.stringify(apsFrame)} header=${JSON.stringify(zclFrame.header)}]`, NS);
1744
1511
  for (let i = 1; i <= QUEUE_MAX_SEND_ATTEMPTS; i++) {
1745
1512
  let status = enums_1.SLStatus.FAIL;
1746
1513
  try {
@@ -1767,7 +1534,7 @@ class EmberAdapter extends __1.Adapter {
1767
1534
  break;
1768
1535
  }
1769
1536
  else if (disableRecovery || i == QUEUE_MAX_SEND_ATTEMPTS) {
1770
- throw new Error(`~x~> [ZCL to=${networkAddress}] Failed to send request with status=${enums_1.SLStatus[status]}.`);
1537
+ throw new Error(`~x~> [ZCL to=${ieeeAddr}:${networkAddress} apsFrame=${JSON.stringify(apsFrame)}] Failed to send request with status=${enums_1.SLStatus[status]}.`);
1771
1538
  }
1772
1539
  else if (status === enums_1.SLStatus.ZIGBEE_MAX_MESSAGE_LIMIT_REACHED || status === enums_1.SLStatus.BUSY) {
1773
1540
  await (0, utils_1.Wait)(QUEUE_BUSY_DEFER_MSEC);
@@ -1776,9 +1543,9 @@ class EmberAdapter extends __1.Adapter {
1776
1543
  await (0, utils_1.Wait)(QUEUE_NETWORK_DOWN_DEFER_MSEC);
1777
1544
  }
1778
1545
  else {
1779
- throw new Error(`~x~> [ZCL to=${networkAddress}] Failed to send request with status=${enums_1.SLStatus[status]}.`);
1546
+ throw new Error(`~x~> [ZCL to=${ieeeAddr}:${networkAddress} apsFrame=${JSON.stringify(apsFrame)}] Failed to send request with status=${enums_1.SLStatus[status]}.`);
1780
1547
  }
1781
- logger_1.logger.debug(`~x~> [ZCL to=${networkAddress}] Failed to send request attempt ${i}/${QUEUE_MAX_SEND_ATTEMPTS} with status=${enums_1.SLStatus[status]}.`, NS);
1548
+ logger_1.logger.debug(`~x~> [ZCL to=${ieeeAddr}:${networkAddress}] Failed to send request attempt ${i}/${QUEUE_MAX_SEND_ATTEMPTS} with status=${enums_1.SLStatus[status]}.`, NS);
1782
1549
  }
1783
1550
  if (commandResponseId !== undefined) {
1784
1551
  // NOTE: aps sequence number will have been set by send function
@@ -1809,11 +1576,11 @@ class EmberAdapter extends __1.Adapter {
1809
1576
  this.checkInterpanLock();
1810
1577
  logger_1.logger.debug(() => `~~~> [ZCL GROUP apsFrame=${JSON.stringify(apsFrame)} header=${JSON.stringify(zclFrame.header)}]`, NS);
1811
1578
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
1812
- const [status, messageTag] = await this.ezsp.send(enums_1.EmberOutgoingMessageType.MULTICAST, apsFrame.groupId, // not used with MULTICAST
1579
+ const [status, messageTag] = await this.ezsp.send(enums_1.EmberOutgoingMessageType.MULTICAST, groupID, // not used with MULTICAST
1813
1580
  apsFrame, data, 0, // alias
1814
1581
  0);
1815
1582
  if (status !== enums_1.SLStatus.OK) {
1816
- throw new Error(`~x~> [ZCL GROUP] Failed to send with status=${enums_1.SLStatus[status]}.`);
1583
+ throw new Error(`~x~> [ZCL GROUP groupId=${groupID}] Failed to send with status=${enums_1.SLStatus[status]}.`);
1817
1584
  }
1818
1585
  // NOTE: since ezspMessageSentHandler could take a while here, we don't block, it'll just be logged if the delivery failed
1819
1586
  await (0, utils_1.Wait)(QUEUE_BUSY_DEFER_MSEC);
@@ -1839,7 +1606,7 @@ class EmberAdapter extends __1.Adapter {
1839
1606
  const [status, messageTag] = await this.ezsp.send(enums_1.EmberOutgoingMessageType.BROADCAST, destination, apsFrame, data, 0, // alias
1840
1607
  0);
1841
1608
  if (status !== enums_1.SLStatus.OK) {
1842
- throw new Error(`~x~> [ZCL BROADCAST] Failed to send with status=${enums_1.SLStatus[status]}.`);
1609
+ throw new Error(`~x~> [ZCL BROADCAST destination=${destination}] Failed to send with status=${enums_1.SLStatus[status]}.`);
1843
1610
  }
1844
1611
  // NOTE: since ezspMessageSentHandler could take a while here, we don't block, it'll just be logged if the delivery failed
1845
1612
  await (0, utils_1.Wait)(QUEUE_BUSY_DEFER_MSEC);