zigbee-herdsman 2.1.2 → 3.0.0-pre.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 (76) hide show
  1. package/.github/workflows/ci.yml +11 -8
  2. package/.github/workflows/typedoc.yaml +2 -2
  3. package/.github/workflows/update_deps.yml +5 -4
  4. package/.prettierignore +1 -1
  5. package/.release-please-manifest.json +1 -1
  6. package/CHANGELOG.md +7 -0
  7. package/dist/adapter/adapter.d.ts.map +1 -1
  8. package/dist/adapter/adapter.js +9 -94
  9. package/dist/adapter/adapter.js.map +1 -1
  10. package/dist/adapter/adapterDiscovery.d.ts +23 -0
  11. package/dist/adapter/adapterDiscovery.d.ts.map +1 -0
  12. package/dist/adapter/adapterDiscovery.js +468 -0
  13. package/dist/adapter/adapterDiscovery.js.map +1 -0
  14. package/dist/adapter/deconz/adapter/deconzAdapter.d.ts +0 -2
  15. package/dist/adapter/deconz/adapter/deconzAdapter.d.ts.map +1 -1
  16. package/dist/adapter/deconz/adapter/deconzAdapter.js +7 -12
  17. package/dist/adapter/deconz/adapter/deconzAdapter.js.map +1 -1
  18. package/dist/adapter/deconz/driver/driver.d.ts +0 -2
  19. package/dist/adapter/deconz/driver/driver.d.ts.map +1 -1
  20. package/dist/adapter/deconz/driver/driver.js +0 -11
  21. package/dist/adapter/deconz/driver/driver.js.map +1 -1
  22. package/dist/adapter/ember/adapter/emberAdapter.d.ts +0 -2
  23. package/dist/adapter/ember/adapter/emberAdapter.d.ts.map +1 -1
  24. package/dist/adapter/ember/adapter/emberAdapter.js +19 -32
  25. package/dist/adapter/ember/adapter/emberAdapter.js.map +1 -1
  26. package/dist/adapter/ember/ezsp/ezsp.d.ts +35 -1
  27. package/dist/adapter/ember/ezsp/ezsp.d.ts.map +1 -1
  28. package/dist/adapter/ember/ezsp/ezsp.js +49 -1
  29. package/dist/adapter/ember/ezsp/ezsp.js.map +1 -1
  30. package/dist/adapter/ezsp/adapter/ezspAdapter.d.ts +0 -2
  31. package/dist/adapter/ezsp/adapter/ezspAdapter.d.ts.map +1 -1
  32. package/dist/adapter/ezsp/adapter/ezspAdapter.js +0 -24
  33. package/dist/adapter/ezsp/adapter/ezspAdapter.js.map +1 -1
  34. package/dist/adapter/serialPort.d.ts +1 -1
  35. package/dist/adapter/serialPort.d.ts.map +1 -1
  36. package/dist/adapter/tstype.d.ts +21 -14
  37. package/dist/adapter/tstype.d.ts.map +1 -1
  38. package/dist/adapter/z-stack/adapter/zStackAdapter.d.ts +0 -2
  39. package/dist/adapter/z-stack/adapter/zStackAdapter.d.ts.map +1 -1
  40. package/dist/adapter/z-stack/adapter/zStackAdapter.js +0 -6
  41. package/dist/adapter/z-stack/adapter/zStackAdapter.js.map +1 -1
  42. package/dist/adapter/z-stack/znp/znp.d.ts +0 -2
  43. package/dist/adapter/z-stack/znp/znp.d.ts.map +1 -1
  44. package/dist/adapter/z-stack/znp/znp.js +0 -28
  45. package/dist/adapter/z-stack/znp/znp.js.map +1 -1
  46. package/dist/adapter/zboss/adapter/zbossAdapter.d.ts +0 -2
  47. package/dist/adapter/zboss/adapter/zbossAdapter.d.ts.map +1 -1
  48. package/dist/adapter/zboss/adapter/zbossAdapter.js +0 -24
  49. package/dist/adapter/zboss/adapter/zbossAdapter.js.map +1 -1
  50. package/dist/adapter/zigate/adapter/zigateAdapter.d.ts +0 -2
  51. package/dist/adapter/zigate/adapter/zigateAdapter.d.ts.map +1 -1
  52. package/dist/adapter/zigate/adapter/zigateAdapter.js +0 -6
  53. package/dist/adapter/zigate/adapter/zigateAdapter.js.map +1 -1
  54. package/dist/adapter/zigate/driver/zigate.d.ts +0 -2
  55. package/dist/adapter/zigate/driver/zigate.d.ts.map +1 -1
  56. package/dist/adapter/zigate/driver/zigate.js +0 -12
  57. package/dist/adapter/zigate/driver/zigate.js.map +1 -1
  58. package/dist/controller/controller.d.ts +5 -5
  59. package/dist/controller/controller.d.ts.map +1 -1
  60. package/dist/controller/controller.js +29 -40
  61. package/dist/controller/controller.js.map +1 -1
  62. package/dist/controller/events.d.ts +0 -1
  63. package/dist/controller/events.d.ts.map +1 -1
  64. package/dist/utils/index.d.ts +1 -2
  65. package/dist/utils/index.d.ts.map +1 -1
  66. package/dist/utils/index.js +1 -3
  67. package/dist/utils/index.js.map +1 -1
  68. package/package.json +104 -105
  69. package/dist/adapter/serialPortUtils.d.ts +0 -13
  70. package/dist/adapter/serialPortUtils.d.ts.map +0 -1
  71. package/dist/adapter/serialPortUtils.js +0 -19
  72. package/dist/adapter/serialPortUtils.js.map +0 -1
  73. package/dist/utils/equalsPartial.d.ts +0 -3
  74. package/dist/utils/equalsPartial.d.ts.map +0 -1
  75. package/dist/utils/equalsPartial.js +0 -12
  76. package/dist/utils/equalsPartial.js.map +0 -1
@@ -0,0 +1,468 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.matchUSBAdapter = matchUSBAdapter;
4
+ exports.findUSBAdapter = findUSBAdapter;
5
+ exports.findmDNSAdapter = findmDNSAdapter;
6
+ exports.findTCPAdapter = findTCPAdapter;
7
+ exports.discoverAdapter = discoverAdapter;
8
+ const os_1 = require("os");
9
+ const bonjour_service_1 = require("bonjour-service");
10
+ const logger_1 = require("../utils/logger");
11
+ const serialPort_1 = require("./serialPort");
12
+ const NS = 'zh:adapter:discovery';
13
+ /**
14
+ * @see https://serialport.io/docs/api-bindings-cpp#list
15
+ *
16
+ * On Windows, there are occurrences where `manufacturer` is replaced by the OS driver. Example: `ITEAD` => `wch.cn`.
17
+ *
18
+ * In virtualized environments, the passthrough mechanism can affect the `path`.
19
+ * Example:
20
+ * Linux: /dev/serial/by-id/usb-ITEAD_SONOFF_Zigbee_3.0_USB_Dongle_Plus_V2_20240122184111-if00
21
+ * Windows host => Linux guest: /dev/serial/by-id/usb-1a86_USB_Single_Serial_54DD002111-if00
22
+ *
23
+ * XXX: vendorId `10c4` + productId `ea60` is a problem on Windows since can't match `path` and possibly can't match `manufacturer` to refine properly
24
+ */
25
+ const USB_FINGERPRINTS = {
26
+ deconz: [
27
+ {
28
+ // Conbee II
29
+ vendorId: '1cf1',
30
+ productId: '0030',
31
+ manufacturer: 'dresden elektronik ingenieurtechnik GmbH',
32
+ // /dev/serial/by-id/usb-dresden_elektronik_ingenieurtechnik_GmbH_ConBee_II_DE2132111-if00
33
+ pathRegex: '.*conbee.*',
34
+ },
35
+ {
36
+ // Conbee III
37
+ vendorId: '0403',
38
+ productId: '6015',
39
+ manufacturer: 'dresden elektronik ingenieurtechnik GmbH',
40
+ // /dev/serial/by-id/usb-dresden_elektronik_ConBee_III_DE03188111-if00-port0
41
+ pathRegex: '.*conbee.*',
42
+ },
43
+ ],
44
+ ember: [
45
+ // {
46
+ // // TODO: Easyiot ZB-GW04 (v1.1)
47
+ // vendorId: '',
48
+ // productId: '',
49
+ // manufacturer: '',
50
+ // pathRegex: '.*.*',
51
+ // },
52
+ // {
53
+ // // TODO: Easyiot ZB-GW04 (v1.2)
54
+ // vendorId: '1a86',
55
+ // productId: '',
56
+ // manufacturer: '',
57
+ // // /dev/serial/by-id/usb-1a86_USB_Serial-if00-port0
58
+ // pathRegex: '.*.*',
59
+ // },
60
+ {
61
+ // Home Assistant SkyConnect
62
+ vendorId: '10c4',
63
+ productId: 'ea60',
64
+ manufacturer: 'Nabu Casa',
65
+ // /dev/serial/by-id/usb-Nabu_Casa_SkyConnect_v1.0_3abe54797c91ed118fc3cad13b20a111-if00-port0
66
+ pathRegex: '.*Nabu_Casa_SkyConnect.*',
67
+ },
68
+ // {
69
+ // // TODO: Home Assistant Yellow
70
+ // vendorId: '',
71
+ // productId: '',
72
+ // manufacturer: '',
73
+ // // /dev/ttyAMA1
74
+ // pathRegex: '.*.*',
75
+ // },
76
+ {
77
+ // SMLight slzb-07
78
+ vendorId: '10c4',
79
+ productId: 'ea60',
80
+ manufacturer: 'SMLIGHT',
81
+ // /dev/serial/by-id/usb-SMLIGHT_SMLIGHT_SLZB-07_be9faa0786e1ea11bd68dc2d9a583111-if00-port0
82
+ // /dev/serial/by-id/usb-Silicon_Labs_CP2102N_USB_to_UART_Bridge_Controller_a215650c853bec119a079e957a0af111-if00-port0
83
+ pathRegex: '.*slzb-07_.*', // `_` to not match 07p7
84
+ },
85
+ {
86
+ // SMLight slzb-07mg24
87
+ vendorId: '10c4',
88
+ productId: 'ea60',
89
+ manufacturer: 'SMLIGHT',
90
+ pathRegex: '.*slzb-07mg24.*',
91
+ },
92
+ {
93
+ // Sonoff ZBDongle-E V2
94
+ vendorId: '1a86',
95
+ productId: '55d4',
96
+ manufacturer: 'ITEAD',
97
+ // /dev/serial/by-id/usb-ITEAD_SONOFF_Zigbee_3.0_USB_Dongle_Plus_V2_20240122184111-if00
98
+ // /dev/serial/by-id/usb-ITead_Sonoff_Zigbee_3.0_USB_Dongle_Plus_186ff44314e2ed11b891eb5162c61111-if00-port0
99
+ pathRegex: '.*sonoff.*plus.*',
100
+ },
101
+ // {
102
+ // // TODO: Z-station by z-wave.me (EFR32MG21A020F1024IM32)
103
+ // vendorId: '',
104
+ // productId: '',
105
+ // // manufacturer: '',
106
+ // // /dev/serial/by-id/usb-Silicon_Labs_CP2105_Dual_USB_to_UART_Bridge_Controller_012BA111-if01-port0
107
+ // pathRegex: '.*CP2105.*',
108
+ // },
109
+ ],
110
+ zstack: [
111
+ {
112
+ // ZZH
113
+ vendorId: '0403',
114
+ productId: '6015',
115
+ manufacturer: 'Electrolama',
116
+ pathRegex: '.*electrolama.*',
117
+ },
118
+ {
119
+ // slae.sh cc2652rb
120
+ vendorId: '10c4',
121
+ productId: 'ea60',
122
+ manufacturer: 'Silicon Labs',
123
+ // /dev/serial/by-id/usb-Silicon_Labs_slae.sh_cc2652rb_stick_-_slaesh_s_iot_stuff_00_12_4B_00_21_A8_EC_79-if00-port0
124
+ pathRegex: '.*slae\\.sh_cc2652rb.*',
125
+ },
126
+ {
127
+ // Sonoff ZBDongle-P (CC2652P)
128
+ vendorId: '10c4',
129
+ productId: 'ea60',
130
+ manufacturer: 'ITEAD',
131
+ // /dev/serial/by-id/usb-Silicon_Labs_Sonoff_Zigbee_3.0_USB_Dongle_Plus_0111-if00-port0
132
+ // /dev/serial/by-id/usb-ITead_Sonoff_Zigbee_3.0_USB_Dongle_Plus_b8b49abd27a6ed11a280eba32981d111-if00-port0
133
+ pathRegex: '.*sonoff.*plus.*',
134
+ },
135
+ {
136
+ // CC2538
137
+ vendorId: '0451',
138
+ productId: '16c8',
139
+ manufacturer: 'Texas Instruments',
140
+ // zStack30x: /dev/serial/by-id/usb-Texas_Instruments_CC2538_USB_CDC-if00
141
+ pathRegex: '.*CC2538.*',
142
+ },
143
+ {
144
+ // CC2531
145
+ vendorId: '0451',
146
+ productId: '16a8',
147
+ manufacturer: 'Texas Instruments',
148
+ // /dev/serial/by-id/usb-Texas_Instruments_TI_CC2531_USB_CDC___0X00124B0018ED1111-if00
149
+ pathRegex: '.*CC2531.*',
150
+ },
151
+ {
152
+ // Texas instruments launchpads
153
+ vendorId: '0451',
154
+ productId: 'bef3',
155
+ manufacturer: 'Texas Instruments',
156
+ pathRegex: '.*Texas_Instruments.*',
157
+ },
158
+ {
159
+ // SMLight slzb-07p7
160
+ vendorId: '10c4',
161
+ productId: 'ea60',
162
+ manufacturer: 'SMLIGHT',
163
+ // /dev/serial/by-id/usb-SMLIGHT_SMLIGHT_SLZB-07p7_be9faa0786e1ea11bd68dc2d9a583111-if00-port0
164
+ pathRegex: '.*SLZB-07p7.*',
165
+ },
166
+ {
167
+ // SMLight slzb-06p7
168
+ vendorId: '10c4',
169
+ productId: 'ea60',
170
+ manufacturer: 'SMLIGHT',
171
+ // /dev/serial/by-id/usb-SMLIGHT_SMLIGHT_SLZB-06p7_82e43faf9872ed118bb924f3fdf7b791-if00-port0
172
+ pathRegex: '.*SMLIGHT_SLZB-06p7_.*',
173
+ },
174
+ {
175
+ // SMLight slzb-06p10
176
+ vendorId: '10c4',
177
+ productId: 'ea60',
178
+ manufacturer: 'SMLIGHT',
179
+ // /dev/serial/by-id/usb-SMLIGHT_SMLIGHT_SLZB-06p10_40df2f3e3977ed11b142f6fafdf7b791-if00-port0
180
+ pathRegex: '.*SMLIGHT_SLZB-06p10_.*',
181
+ },
182
+ {
183
+ // TubesZB ?
184
+ vendorId: '10c4',
185
+ productId: 'ea60',
186
+ // manufacturer: '',
187
+ pathRegex: '.*tubeszb.*',
188
+ },
189
+ {
190
+ // TubesZB ?
191
+ vendorId: '1a86',
192
+ productId: '7523',
193
+ // manufacturer: '',
194
+ pathRegex: '.*tubeszb.*',
195
+ },
196
+ {
197
+ // ZigStar
198
+ vendorId: '1a86',
199
+ productId: '7523',
200
+ // manufacturer: '',
201
+ pathRegex: '.*zigstar.*',
202
+ },
203
+ ],
204
+ zboss: [
205
+ {
206
+ // Nordic Zigbee NCP
207
+ vendorId: '2fe3',
208
+ productId: '0100',
209
+ manufacturer: 'ZEPHYR',
210
+ // /dev/serial/by-id/usb-ZEPHYR_Zigbee_NCP_54ACCFAFA6DAD111-if00
211
+ pathRegex: '.*ZEPHYR.*',
212
+ },
213
+ ],
214
+ zigate: [
215
+ {
216
+ // ZiGate PL2303HX (blue)
217
+ vendorId: '067b',
218
+ productId: '2303',
219
+ manufacturer: 'zigate_PL2303',
220
+ pathRegex: '.*zigate.*',
221
+ },
222
+ {
223
+ // ZiGate CP2102 (red)
224
+ vendorId: '10c4',
225
+ productId: 'ea60',
226
+ manufacturer: 'zigate_cp2102',
227
+ pathRegex: '.*zigate.*',
228
+ },
229
+ {
230
+ // ZiGate+ V2 CDM_21228
231
+ vendorId: '0403',
232
+ productId: '6015',
233
+ // manufacturer: '',
234
+ // /dev/serial/by-id/usb-FTDI_ZiGate_ZIGATE+-if00-port0
235
+ pathRegex: '.*zigate.*',
236
+ },
237
+ ],
238
+ };
239
+ /**
240
+ * Vendor and Product IDs that are prone to conflict if only matching on vendorId+productId.
241
+ */
242
+ const USB_FINGERPRINTS_CONFLICT_IDS = ['10c4:ea60'];
243
+ async function getSerialPortList() {
244
+ const portInfos = await serialPort_1.SerialPort.list();
245
+ // TODO: can sorting be removed in favor of `path` regex matching?
246
+ // CC1352P_2 and CC26X2R1 lists as 2 USB devices with same manufacturer, productId and vendorId
247
+ // one is the actual chip interface, other is the XDS110.
248
+ // The chip is always exposed on the first one after alphabetical sorting.
249
+ /* istanbul ignore next */
250
+ portInfos.sort((a, b) => (a.path < b.path ? -1 : 1));
251
+ return portInfos;
252
+ }
253
+ /**
254
+ * Case insensitive string matching.
255
+ * @param str1
256
+ * @param str2
257
+ * @returns
258
+ */
259
+ function matchString(str1, str2) {
260
+ return str1.localeCompare(str2, undefined, { sensitivity: 'base' }) === 0;
261
+ }
262
+ /**
263
+ * Case insensitive regex matching.
264
+ * @param regexStr Passed to RegExp constructor.
265
+ * @param str Always returns false if undefined.
266
+ * @returns
267
+ */
268
+ function matchRegex(regexStr, str) {
269
+ return str !== undefined && new RegExp(regexStr, 'i').test(str);
270
+ }
271
+ function matchUSBFingerprint(portInfo, entries, isWindows, conflictProne) {
272
+ if (!portInfo.vendorId || !portInfo.productId) {
273
+ // port info is missing essential information for proper matching, ignore it
274
+ return;
275
+ }
276
+ let match;
277
+ let score = 0 /* USBFingerprintMatchScore.NONE */;
278
+ for (const entry of entries) {
279
+ if (!matchString(portInfo.vendorId, entry.vendorId) || !matchString(portInfo.productId, entry.productId)) {
280
+ continue;
281
+ }
282
+ // allow matching on vendorId+productId only on Windows
283
+ if (score < 1 /* USBFingerprintMatchScore.VID_PID */ && isWindows) {
284
+ match = entry;
285
+ score = 1 /* USBFingerprintMatchScore.VID_PID */;
286
+ }
287
+ if (score < 2 /* USBFingerprintMatchScore.VID_PID_MANUF */ &&
288
+ entry.manufacturer &&
289
+ portInfo.manufacturer &&
290
+ matchString(portInfo.manufacturer, entry.manufacturer)) {
291
+ match = entry;
292
+ score = 2 /* USBFingerprintMatchScore.VID_PID_MANUF */;
293
+ if (isWindows && !conflictProne) {
294
+ // path will never match on Windows (COMx), assume vendor+product+manufacturer is "exact match"
295
+ // except for conflict-prone, since it could easily return a mismatch (better to return no match and force manual config)
296
+ return [portInfo.path, score];
297
+ }
298
+ }
299
+ if (score < 3 /* USBFingerprintMatchScore.VID_PID_PATH */ &&
300
+ entry.pathRegex &&
301
+ (matchRegex(entry.pathRegex, portInfo.path) || matchRegex(entry.pathRegex, portInfo.pnpId))) {
302
+ if (score === 2 /* USBFingerprintMatchScore.VID_PID_MANUF */) {
303
+ // best possible match, return early
304
+ return [portInfo.path, 4 /* USBFingerprintMatchScore.VID_PID_MANUF_PATH */];
305
+ }
306
+ else {
307
+ match = entry;
308
+ score = 3 /* USBFingerprintMatchScore.VID_PID_PATH */;
309
+ }
310
+ }
311
+ }
312
+ // poor match only returned if port info not conflict-prone
313
+ return match && (score > 1 /* USBFingerprintMatchScore.VID_PID */ || !conflictProne) ? [portInfo.path, score] : undefined;
314
+ }
315
+ async function matchUSBAdapter(adapter, path) {
316
+ const isWindows = (0, os_1.platform)() === 'win32';
317
+ const portList = await getSerialPortList();
318
+ logger_1.logger.debug(() => `Connected devices: ${JSON.stringify(portList)}`, NS);
319
+ for (const portInfo of portList) {
320
+ /* istanbul ignore else */
321
+ if (portInfo.path !== path) {
322
+ continue;
323
+ }
324
+ const conflictProne = USB_FINGERPRINTS_CONFLICT_IDS.includes(`${portInfo.vendorId}:${portInfo.productId}`);
325
+ const match = matchUSBFingerprint(portInfo, USB_FINGERPRINTS[adapter === 'ezsp' ? 'ember' : adapter], isWindows, conflictProne);
326
+ /* istanbul ignore else */
327
+ if (match) {
328
+ logger_1.logger.info(() => `Matched adapter: ${JSON.stringify(portInfo)} => ${adapter}: ${JSON.stringify(match[1])}`, NS);
329
+ return true;
330
+ }
331
+ }
332
+ return false;
333
+ }
334
+ async function findUSBAdapter(adapter, path) {
335
+ const isWindows = (0, os_1.platform)() === 'win32';
336
+ // refine to DiscoverableUSBAdapter
337
+ adapter = adapter && adapter === 'ezsp' ? 'ember' : adapter;
338
+ const portList = await getSerialPortList();
339
+ logger_1.logger.debug(() => `Connected devices: ${JSON.stringify(portList)}`, NS);
340
+ for (const portInfo of portList) {
341
+ if (path && portInfo.path !== path) {
342
+ continue;
343
+ }
344
+ const conflictProne = USB_FINGERPRINTS_CONFLICT_IDS.includes(`${portInfo.vendorId}:${portInfo.productId}`);
345
+ let bestMatch;
346
+ for (const key in USB_FINGERPRINTS) {
347
+ if (adapter && adapter !== key) {
348
+ continue;
349
+ }
350
+ const match = matchUSBFingerprint(portInfo, USB_FINGERPRINTS[key], isWindows, conflictProne);
351
+ // register the match if no previous or better score
352
+ if (match && (!bestMatch || bestMatch[1][1] < match[1])) {
353
+ bestMatch = [key, match];
354
+ if (match[1] === 4 /* USBFingerprintMatchScore.VID_PID_MANUF_PATH */) {
355
+ // got best possible match, exit loop
356
+ break;
357
+ }
358
+ }
359
+ }
360
+ if (bestMatch) {
361
+ logger_1.logger.info(() => `Matched adapter: ${JSON.stringify(portInfo)} => ${bestMatch[0]}: path=${bestMatch[1][0]}, score=${bestMatch[1][1]}`, NS);
362
+ return [bestMatch[0], bestMatch[1][0]];
363
+ }
364
+ }
365
+ }
366
+ async function findmDNSAdapter(path) {
367
+ const mdnsDevice = path.substring(7);
368
+ if (mdnsDevice.length == 0) {
369
+ throw new Error(`No mdns device specified. You must specify the coordinator mdns service type after mdns://, e.g. mdns://my-adapter`);
370
+ }
371
+ const bj = new bonjour_service_1.Bonjour();
372
+ const mdnsTimeout = 2000; // timeout for mdns scan
373
+ logger_1.logger.info(`Starting mdns discovery for coordinator: ${mdnsDevice}`, NS);
374
+ return await new Promise((resolve, reject) => {
375
+ bj.findOne({ type: mdnsDevice }, mdnsTimeout, function (service) {
376
+ if (service) {
377
+ if (service.txt?.radio_type && service.txt?.baud_rate && service.addresses && service.port) {
378
+ const mdnsIp = service.addresses[0];
379
+ const mdnsPort = service.port;
380
+ const mdnsAdapter = (service.txt.radio_type == 'znp' ? 'zstack' : service.txt.radio_type);
381
+ const mdnsBaud = parseInt(service.txt.baud_rate);
382
+ logger_1.logger.info(`Coordinator Ip: ${mdnsIp}`, NS);
383
+ logger_1.logger.info(`Coordinator Port: ${mdnsPort}`, NS);
384
+ logger_1.logger.info(`Coordinator Radio: ${mdnsAdapter}`, NS);
385
+ logger_1.logger.info(`Coordinator Baud: ${mdnsBaud}\n`, NS);
386
+ bj.destroy();
387
+ path = `tcp://${mdnsIp}:${mdnsPort}`;
388
+ const adapter = mdnsAdapter;
389
+ const baudRate = mdnsBaud;
390
+ resolve([adapter, path, baudRate]);
391
+ }
392
+ else {
393
+ bj.destroy();
394
+ reject(new Error(`Coordinator returned wrong Zeroconf format! The following values are expected:\n` +
395
+ `txt.radio_type, got: ${service.txt?.radio_type}\n` +
396
+ `txt.baud_rate, got: ${service.txt?.baud_rate}\n` +
397
+ `address, got: ${service.addresses?.[0]}\n` +
398
+ `port, got: ${service.port}`));
399
+ }
400
+ }
401
+ else {
402
+ bj.destroy();
403
+ reject(new Error(`Coordinator [${mdnsDevice}] not found after timeout of ${mdnsTimeout}ms!`));
404
+ }
405
+ });
406
+ });
407
+ }
408
+ async function findTCPAdapter(path, adapter) {
409
+ const regex = /^tcp:\/\/(?:[0-9]{1,3}\.){3}[0-9]{1,3}:\d{1,5}$/gm;
410
+ if (!regex.test(path)) {
411
+ throw new Error(`Invalid TCP path, expected format: tcp://<host>:<port>`);
412
+ }
413
+ if (!adapter) {
414
+ throw new Error(`Cannot discover TCP adapters at this time. Specify valid 'adapter' and 'port' in your configuration.`);
415
+ }
416
+ return [adapter, path];
417
+ }
418
+ /**
419
+ * Discover adapter using mDNS, TCP or USB.
420
+ *
421
+ * @param adapter The adapter type.
422
+ * - mDNS: Unused.
423
+ * - TCP: Required, cannot discover at this time.
424
+ * - USB: Optional, limits the discovery to the specified adapter type.
425
+ * @param path The path to the adapter.
426
+ * - mDNS: Required, serves to initiate the discovery.
427
+ * - TCP: Required, cannot discover at this time.
428
+ * - USB: Optional, limits the discovery to the specified path.
429
+ * @returns adapter An adapter type supported by Z2M. While result is TS-typed, this should be validated against actual values before use.
430
+ * @returns path Path to adapter.
431
+ * @returns baudRate [optional] Discovered baud rate of the adapter. Valid only for mDNS discovery at the moment.
432
+ */
433
+ async function discoverAdapter(adapter, path) {
434
+ if (path) {
435
+ if (path.startsWith('mdns://')) {
436
+ return await findmDNSAdapter(path);
437
+ }
438
+ else if (path.startsWith('tcp://')) {
439
+ return await findTCPAdapter(path, adapter);
440
+ }
441
+ else if (adapter) {
442
+ try {
443
+ const matched = await matchUSBAdapter(adapter, path);
444
+ /* istanbul ignore else */
445
+ if (!matched) {
446
+ logger_1.logger.debug(`Unable to match USB adapter: ${adapter} | ${path}`, NS);
447
+ }
448
+ }
449
+ catch (error) {
450
+ logger_1.logger.debug(`Error while trying to match USB adapter (${error.message}).`, NS);
451
+ }
452
+ return [adapter, path];
453
+ }
454
+ }
455
+ try {
456
+ // default to matching USB
457
+ const match = await findUSBAdapter(adapter, path);
458
+ if (!match) {
459
+ throw new Error(`No valid USB adapter found`);
460
+ }
461
+ // keep adapter if `ezsp` since findUSBAdapter returns DiscoverableUSBAdapter
462
+ return adapter && adapter === 'ezsp' ? [adapter, match[1]] : match;
463
+ }
464
+ catch (error) {
465
+ throw new Error(`USB adapter discovery error (${error.message}). Specify valid 'adapter' and 'port' in your configuration.`);
466
+ }
467
+ }
468
+ //# sourceMappingURL=adapterDiscovery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapterDiscovery.js","sourceRoot":"","sources":["../../src/adapter/adapterDiscovery.ts"],"names":[],"mappings":"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"}
@@ -16,8 +16,6 @@ declare class DeconzAdapter extends Adapter {
16
16
  private TX_OPTIONS;
17
17
  private joinPermitted;
18
18
  constructor(networkOptions: NetworkOptions, serialPortOptions: SerialPortOptions, backupPath: string, adapterOptions: AdapterOptions);
19
- static isValidPath(path: string): Promise<boolean>;
20
- static autoDetectPath(): Promise<string | undefined>;
21
19
  /**
22
20
  * Adapter methods
23
21
  */
@@ -1 +1 @@
1
- {"version":3,"file":"deconzAdapter.d.ts","sourceRoot":"","sources":["../../../../src/adapter/deconz/adapter/deconzAdapter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"deconzAdapter.d.ts","sourceRoot":"","sources":["../../../../src/adapter/deconz/adapter/deconzAdapter.ts"],"names":[],"mappings":"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"}
@@ -27,7 +27,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
27
27
  return (mod && mod.__esModule) ? mod : { "default": mod };
28
28
  };
29
29
  Object.defineProperty(exports, "__esModule", { value: true });
30
- const assert_1 = __importDefault(require("assert"));
31
30
  const device_1 = __importDefault(require("../../../controller/model/device"));
32
31
  const utils_1 = require("../../../utils");
33
32
  const logger_1 = require("../../../utils/logger");
@@ -77,12 +76,6 @@ class DeconzAdapter extends adapter_1.default {
77
76
  this.checkReceivedDataPayload(null);
78
77
  }, 1000);
79
78
  }
80
- static async isValidPath(path) {
81
- return await driver_1.default.isValidPath(path);
82
- }
83
- static async autoDetectPath() {
84
- return await driver_1.default.autoDetectPath();
85
- }
86
79
  /**
87
80
  * Adapter methods
88
81
  */
@@ -542,11 +535,13 @@ class DeconzAdapter extends adapter_1.default {
542
535
  logger_1.logger.debug(`Try to find network address of ${resp.srcAddr64}`, NS);
543
536
  // Note: Device expects addresses with a 0x prefix...
544
537
  srcAddr = device_1.default.byIeeeAddr('0x' + resp.srcAddr64, false)?.networkAddress;
538
+ // apperantly some functions furhter up in the protocol stack expect this to be set.
539
+ // so let's make sure they get the network address
540
+ // Note: srcAddr16 can be undefined after this and this is intended behavior
541
+ // there are zigbee frames which do not contain a 16 bit address, e.g. during joining.
542
+ // So any code that relies on srcAddr16 must handle this in some way.
543
+ resp.srcAddr16 = srcAddr;
545
544
  }
546
- (0, assert_1.default)(srcAddr, 'Failed to find srcAddr of message');
547
- // apperantly some functions furhter up in the protocol stack expect this to be set.
548
- // so let's make sure they get the network address
549
- resp.srcAddr16 = srcAddr; // TODO: can't be undefined
550
545
  }
551
546
  if (resp.profileId === Zdo.ZDO_PROFILE_ID) {
552
547
  if (resp.clusterId === Zdo.ClusterId.NETWORK_ADDRESS_RESPONSE) {
@@ -596,7 +591,7 @@ class DeconzAdapter extends adapter_1.default {
596
591
  clusterID: resp.clusterId,
597
592
  header,
598
593
  data: resp.asduPayload,
599
- address: resp.destAddrMode === 0x03 ? `0x${resp.srcAddr64}` : resp.srcAddr16,
594
+ address: resp.srcAddrMode === 0x03 ? `0x${resp.srcAddr64}` : resp.srcAddr16,
600
595
  endpoint: resp.srcEndpoint,
601
596
  linkquality: resp.lqi,
602
597
  groupID: resp.destAddrMode === 0x01 ? resp.destAddr16 : 0,