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.
- package/.github/workflows/ci.yml +11 -8
- package/.github/workflows/typedoc.yaml +2 -2
- package/.github/workflows/update_deps.yml +5 -4
- package/.prettierignore +1 -1
- package/.release-please-manifest.json +1 -1
- package/CHANGELOG.md +7 -0
- package/dist/adapter/adapter.d.ts.map +1 -1
- package/dist/adapter/adapter.js +9 -94
- package/dist/adapter/adapter.js.map +1 -1
- package/dist/adapter/adapterDiscovery.d.ts +23 -0
- package/dist/adapter/adapterDiscovery.d.ts.map +1 -0
- package/dist/adapter/adapterDiscovery.js +468 -0
- package/dist/adapter/adapterDiscovery.js.map +1 -0
- package/dist/adapter/deconz/adapter/deconzAdapter.d.ts +0 -2
- package/dist/adapter/deconz/adapter/deconzAdapter.d.ts.map +1 -1
- package/dist/adapter/deconz/adapter/deconzAdapter.js +7 -12
- package/dist/adapter/deconz/adapter/deconzAdapter.js.map +1 -1
- package/dist/adapter/deconz/driver/driver.d.ts +0 -2
- package/dist/adapter/deconz/driver/driver.d.ts.map +1 -1
- package/dist/adapter/deconz/driver/driver.js +0 -11
- package/dist/adapter/deconz/driver/driver.js.map +1 -1
- package/dist/adapter/ember/adapter/emberAdapter.d.ts +0 -2
- package/dist/adapter/ember/adapter/emberAdapter.d.ts.map +1 -1
- package/dist/adapter/ember/adapter/emberAdapter.js +19 -32
- package/dist/adapter/ember/adapter/emberAdapter.js.map +1 -1
- package/dist/adapter/ember/ezsp/ezsp.d.ts +35 -1
- package/dist/adapter/ember/ezsp/ezsp.d.ts.map +1 -1
- package/dist/adapter/ember/ezsp/ezsp.js +49 -1
- package/dist/adapter/ember/ezsp/ezsp.js.map +1 -1
- package/dist/adapter/ezsp/adapter/ezspAdapter.d.ts +0 -2
- package/dist/adapter/ezsp/adapter/ezspAdapter.d.ts.map +1 -1
- package/dist/adapter/ezsp/adapter/ezspAdapter.js +0 -24
- package/dist/adapter/ezsp/adapter/ezspAdapter.js.map +1 -1
- package/dist/adapter/serialPort.d.ts +1 -1
- package/dist/adapter/serialPort.d.ts.map +1 -1
- package/dist/adapter/tstype.d.ts +21 -14
- package/dist/adapter/tstype.d.ts.map +1 -1
- package/dist/adapter/z-stack/adapter/zStackAdapter.d.ts +0 -2
- package/dist/adapter/z-stack/adapter/zStackAdapter.d.ts.map +1 -1
- package/dist/adapter/z-stack/adapter/zStackAdapter.js +0 -6
- package/dist/adapter/z-stack/adapter/zStackAdapter.js.map +1 -1
- package/dist/adapter/z-stack/znp/znp.d.ts +0 -2
- package/dist/adapter/z-stack/znp/znp.d.ts.map +1 -1
- package/dist/adapter/z-stack/znp/znp.js +0 -28
- package/dist/adapter/z-stack/znp/znp.js.map +1 -1
- package/dist/adapter/zboss/adapter/zbossAdapter.d.ts +0 -2
- package/dist/adapter/zboss/adapter/zbossAdapter.d.ts.map +1 -1
- package/dist/adapter/zboss/adapter/zbossAdapter.js +0 -24
- package/dist/adapter/zboss/adapter/zbossAdapter.js.map +1 -1
- package/dist/adapter/zigate/adapter/zigateAdapter.d.ts +0 -2
- package/dist/adapter/zigate/adapter/zigateAdapter.d.ts.map +1 -1
- package/dist/adapter/zigate/adapter/zigateAdapter.js +0 -6
- package/dist/adapter/zigate/adapter/zigateAdapter.js.map +1 -1
- package/dist/adapter/zigate/driver/zigate.d.ts +0 -2
- package/dist/adapter/zigate/driver/zigate.d.ts.map +1 -1
- package/dist/adapter/zigate/driver/zigate.js +0 -12
- package/dist/adapter/zigate/driver/zigate.js.map +1 -1
- package/dist/controller/controller.d.ts +5 -5
- package/dist/controller/controller.d.ts.map +1 -1
- package/dist/controller/controller.js +29 -40
- package/dist/controller/controller.js.map +1 -1
- package/dist/controller/events.d.ts +0 -1
- package/dist/controller/events.d.ts.map +1 -1
- package/dist/utils/index.d.ts +1 -2
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -3
- package/dist/utils/index.js.map +1 -1
- package/package.json +104 -105
- package/dist/adapter/serialPortUtils.d.ts +0 -13
- package/dist/adapter/serialPortUtils.d.ts.map +0 -1
- package/dist/adapter/serialPortUtils.js +0 -19
- package/dist/adapter/serialPortUtils.js.map +0 -1
- package/dist/utils/equalsPartial.d.ts +0 -3
- package/dist/utils/equalsPartial.d.ts.map +0 -1
- package/dist/utils/equalsPartial.js +0 -12
- 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":"
|
|
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.
|
|
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,
|