@switchbot/homebridge-switchbot 5.0.0-beta.80 → 5.0.0-beta.82
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/dist/homebridge-ui/public/index.html +182 -24
- package/dist/homebridge-ui/server.d.ts.map +1 -1
- package/dist/homebridge-ui/server.js +19 -6
- package/dist/homebridge-ui/server.js.map +1 -1
- package/dist/platform.d.ts +9 -1
- package/dist/platform.d.ts.map +1 -1
- package/dist/platform.js +98 -13
- package/dist/platform.js.map +1 -1
- package/docs/variables/default.html +1 -1
- package/package.json +1 -1
- package/src/homebridge-ui/public/index.html +182 -24
- package/src/homebridge-ui/server.ts +22 -6
- package/src/platform.ts +107 -15
|
@@ -5,24 +5,82 @@
|
|
|
5
5
|
<meta name="viewport" content="width=device-width,initial-scale=1" />
|
|
6
6
|
<title>SwitchBot Plugin UI</title>
|
|
7
7
|
<style>
|
|
8
|
-
|
|
8
|
+
:root {
|
|
9
|
+
color-scheme: light dark;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
@media (prefers-color-scheme: light) {
|
|
13
|
+
body {
|
|
14
|
+
background: #f5f5f5;
|
|
15
|
+
color: #1a1a1a;
|
|
16
|
+
}
|
|
17
|
+
input {
|
|
18
|
+
background: #fff;
|
|
19
|
+
border-color: #ddd;
|
|
20
|
+
color: #1a1a1a;
|
|
21
|
+
}
|
|
22
|
+
input:focus {
|
|
23
|
+
border-color: #6366f1;
|
|
24
|
+
}
|
|
25
|
+
.card {
|
|
26
|
+
background: #fff;
|
|
27
|
+
border: 1px solid #ddd;
|
|
28
|
+
}
|
|
29
|
+
code {
|
|
30
|
+
background: #f0f0f0;
|
|
31
|
+
color: #1a1a1a;
|
|
32
|
+
}
|
|
33
|
+
h2 {
|
|
34
|
+
border-bottom-color: #ddd;
|
|
35
|
+
}
|
|
36
|
+
.status {
|
|
37
|
+
color: #666;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
@media (prefers-color-scheme: dark) {
|
|
42
|
+
body {
|
|
43
|
+
background: #1a1a1a;
|
|
44
|
+
color: #fff;
|
|
45
|
+
}
|
|
46
|
+
input {
|
|
47
|
+
background: #2a2a2a;
|
|
48
|
+
border-color: #444;
|
|
49
|
+
color: #fff;
|
|
50
|
+
}
|
|
51
|
+
.card {
|
|
52
|
+
background: #2a2a2a;
|
|
53
|
+
}
|
|
54
|
+
code {
|
|
55
|
+
background: #333;
|
|
56
|
+
color: #fff;
|
|
57
|
+
}
|
|
58
|
+
h2 {
|
|
59
|
+
border-bottom-color: #444;
|
|
60
|
+
}
|
|
61
|
+
.status {
|
|
62
|
+
color: #888;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
body { font-family: system-ui, -apple-system, Arial; padding: 16px }
|
|
9
67
|
h1 { font-size: 24px; margin-top:0 }
|
|
10
|
-
h2 { font-size: 16px; margin-top: 24px; margin-bottom: 12px; border-bottom:1px solid
|
|
68
|
+
h2 { font-size: 16px; margin-top: 24px; margin-bottom: 12px; border-bottom: 1px solid; padding-bottom:8px }
|
|
11
69
|
ul { padding-left: 0; list-style: none }
|
|
12
70
|
li { margin: 8px 0; display:flex; gap:8px; align-items:center }
|
|
13
71
|
button { padding: 8px 16px; background:#6366f1; color:#fff; border:none; border-radius:4px; cursor:pointer }
|
|
14
72
|
button:hover { background:#4f46e5 }
|
|
15
73
|
button.success { background:#10b981 }
|
|
16
|
-
code {
|
|
74
|
+
code { padding:4px 6px; border-radius:4px; font-family: monospace }
|
|
17
75
|
.form-group { margin-bottom:16px }
|
|
18
76
|
label { display:block; margin-bottom:6px; font-weight:500 }
|
|
19
|
-
input { width:100%; max-width:400px; padding:8px;
|
|
20
|
-
input:focus { outline:none
|
|
21
|
-
.status { font-size:14px;
|
|
77
|
+
input { width:100%; max-width:400px; padding:8px; border: 1px solid; border-radius:4px; font-family:monospace }
|
|
78
|
+
input:focus { outline:none }
|
|
79
|
+
.status { font-size:14px; margin-top:4px }
|
|
22
80
|
.status.ok { color:#10b981 }
|
|
23
81
|
.error { color:#ef4444 }
|
|
24
82
|
.success-msg { color:#10b981; margin-top:8px }
|
|
25
|
-
.card {
|
|
83
|
+
.card { padding:16px; border-radius:8px; margin-bottom:16px }
|
|
26
84
|
</style>
|
|
27
85
|
</head>
|
|
28
86
|
<body>
|
|
@@ -302,27 +360,127 @@
|
|
|
302
360
|
}
|
|
303
361
|
}
|
|
304
362
|
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
363
|
+
const DEVICE_TYPES = [
|
|
364
|
+
'bot', 'curtain', 'fan', 'light', 'lightstrip', 'motion', 'contact',
|
|
365
|
+
'vacuum', 'lock', 'humidifier', 'temperature', 'relay', 'plug',
|
|
366
|
+
'wosweeper', 'blindtilt', 'curtain3', 'rollershade', 'meter',
|
|
367
|
+
'waterdetector', 'walletfinder', 'unknown'
|
|
368
|
+
]
|
|
308
369
|
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
370
|
+
async function editDevice(device) {
|
|
371
|
+
// Create modal dialog for editing
|
|
372
|
+
const div = document.createElement('div')
|
|
373
|
+
div.style.position = 'fixed'
|
|
374
|
+
div.style.top = '0'
|
|
375
|
+
div.style.left = '0'
|
|
376
|
+
div.style.width = '100%'
|
|
377
|
+
div.style.height = '100%'
|
|
378
|
+
div.style.background = 'rgba(0,0,0,0.7)'
|
|
379
|
+
div.style.display = 'flex'
|
|
380
|
+
div.style.alignItems = 'center'
|
|
381
|
+
div.style.justifyContent = 'center'
|
|
382
|
+
div.style.zIndex = '9999'
|
|
383
|
+
|
|
384
|
+
const modal = document.createElement('div')
|
|
385
|
+
modal.style.background = getComputedStyle(document.body).backgroundColor
|
|
386
|
+
modal.style.color = getComputedStyle(document.body).color
|
|
387
|
+
modal.style.padding = '24px'
|
|
388
|
+
modal.style.borderRadius = '8px'
|
|
389
|
+
modal.style.minWidth = '400px'
|
|
390
|
+
modal.style.boxShadow = '0 10px 40px rgba(0,0,0,0.3)'
|
|
391
|
+
|
|
392
|
+
const title = document.createElement('h3')
|
|
393
|
+
title.textContent = 'Edit Device'
|
|
394
|
+
title.style.marginTop = '0'
|
|
395
|
+
|
|
396
|
+
const nameLabel = document.createElement('label')
|
|
397
|
+
nameLabel.textContent = 'Device Name'
|
|
398
|
+
nameLabel.style.display = 'block'
|
|
399
|
+
nameLabel.style.marginBottom = '8px'
|
|
400
|
+
nameLabel.style.fontWeight = '500'
|
|
401
|
+
|
|
402
|
+
const nameInput = document.createElement('input')
|
|
403
|
+
nameInput.type = 'text'
|
|
404
|
+
nameInput.value = device.name || device.id
|
|
405
|
+
nameInput.style.width = '100%'
|
|
406
|
+
nameInput.style.marginBottom = '16px'
|
|
407
|
+
|
|
408
|
+
const typeLabel = document.createElement('label')
|
|
409
|
+
typeLabel.textContent = 'Device Type'
|
|
410
|
+
typeLabel.style.display = 'block'
|
|
411
|
+
typeLabel.style.marginBottom = '8px'
|
|
412
|
+
typeLabel.style.fontWeight = '500'
|
|
413
|
+
|
|
414
|
+
const typeSelect = document.createElement('select')
|
|
415
|
+
typeSelect.style.width = '100%'
|
|
416
|
+
typeSelect.style.padding = '8px'
|
|
417
|
+
typeSelect.style.marginBottom = '16px'
|
|
418
|
+
typeSelect.style.borderRadius = '4px'
|
|
419
|
+
typeSelect.style.background = getComputedStyle(nameInput).background
|
|
420
|
+
typeSelect.style.color = getComputedStyle(nameInput).color
|
|
421
|
+
typeSelect.style.border = getComputedStyle(nameInput).border
|
|
422
|
+
|
|
423
|
+
DEVICE_TYPES.forEach(t => {
|
|
424
|
+
const opt = document.createElement('option')
|
|
425
|
+
opt.value = t
|
|
426
|
+
opt.text = t
|
|
427
|
+
opt.selected = (device.type || 'unknown') === t
|
|
428
|
+
typeSelect.appendChild(opt)
|
|
429
|
+
})
|
|
430
|
+
|
|
431
|
+
const buttons = document.createElement('div')
|
|
432
|
+
buttons.style.display = 'flex'
|
|
433
|
+
buttons.style.gap = '8px'
|
|
434
|
+
buttons.style.justifyContent = 'flex-end'
|
|
435
|
+
|
|
436
|
+
const cancelBtn = document.createElement('button')
|
|
437
|
+
cancelBtn.textContent = 'Cancel'
|
|
438
|
+
cancelBtn.style.background = '#666'
|
|
439
|
+
cancelBtn.onclick = () => div.remove()
|
|
440
|
+
|
|
441
|
+
const saveBtn = document.createElement('button')
|
|
442
|
+
saveBtn.textContent = 'Save'
|
|
443
|
+
saveBtn.onclick = async () => {
|
|
444
|
+
try {
|
|
445
|
+
const params = {
|
|
446
|
+
deviceId: device.id,
|
|
447
|
+
configDeviceName: nameInput.value || undefined,
|
|
448
|
+
configDeviceType: typeSelect.value,
|
|
449
|
+
}
|
|
450
|
+
console.log('[Edit Device] Sending update request with params:', params)
|
|
451
|
+
|
|
452
|
+
const resp = await homebridge.request('/update-device', params)
|
|
453
|
+
|
|
454
|
+
console.log('[Edit Device] Update response:', resp)
|
|
455
|
+
|
|
456
|
+
if (!resp || resp.success === false) {
|
|
457
|
+
throw new Error(resp?.data?.message || 'Failed to update device')
|
|
458
|
+
}
|
|
314
459
|
|
|
315
|
-
|
|
316
|
-
|
|
460
|
+
// Refresh device list
|
|
461
|
+
console.log('[Edit Device] Refreshing device list after update')
|
|
462
|
+
const list = await fetchDevices()
|
|
463
|
+
render(list)
|
|
464
|
+
div.remove()
|
|
465
|
+
} catch (e) {
|
|
466
|
+
console.error('Update error:', e)
|
|
467
|
+
alert('Error: ' + (e?.message || 'Failed to update device'))
|
|
317
468
|
}
|
|
318
|
-
|
|
319
|
-
// Refresh device list
|
|
320
|
-
const list = await fetchDevices()
|
|
321
|
-
render(list)
|
|
322
|
-
} catch (e) {
|
|
323
|
-
console.error('Update error:', e)
|
|
324
|
-
alert('Error: ' + (e?.message || 'Failed to update device'))
|
|
325
469
|
}
|
|
470
|
+
|
|
471
|
+
buttons.appendChild(cancelBtn)
|
|
472
|
+
buttons.appendChild(saveBtn)
|
|
473
|
+
|
|
474
|
+
modal.appendChild(title)
|
|
475
|
+
modal.appendChild(nameLabel)
|
|
476
|
+
modal.appendChild(nameInput)
|
|
477
|
+
modal.appendChild(typeLabel)
|
|
478
|
+
modal.appendChild(typeSelect)
|
|
479
|
+
modal.appendChild(buttons)
|
|
480
|
+
|
|
481
|
+
div.appendChild(modal)
|
|
482
|
+
document.body.appendChild(div)
|
|
483
|
+
nameInput.focus()
|
|
326
484
|
}
|
|
327
485
|
|
|
328
486
|
function render(list) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/homebridge-ui/server.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAgB,MAAM,6BAA6B,CAAA;AAGpF,QAAA,MAAM,MAAM,0BAAiC,CAAA;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/homebridge-ui/server.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAgB,MAAM,6BAA6B,CAAA;AAGpF,QAAA,MAAM,MAAM,0BAAiC,CAAA;AA4V7C,eAAe,MAAM,CAAA"}
|
|
@@ -169,41 +169,54 @@ server.onRequest('/add-device', async (body) => {
|
|
|
169
169
|
});
|
|
170
170
|
server.onRequest('/update-device', async (body) => {
|
|
171
171
|
try {
|
|
172
|
-
const { deviceId, configDeviceName, connectionPreference, room } = body;
|
|
172
|
+
const { deviceId, configDeviceName, configDeviceType, connectionPreference, room } = body;
|
|
173
|
+
console.log('[SwitchBot UI] POST /update-device - Full request body:', JSON.stringify(body, null, 2));
|
|
173
174
|
if (!deviceId) {
|
|
174
175
|
throw new Error('Device ID is required');
|
|
175
176
|
}
|
|
176
177
|
const { config, platform, cfgPath } = await getSwitchBotPlatformConfig();
|
|
177
|
-
console.log('[SwitchBot UI] POST /update-device - Updating:', deviceId);
|
|
178
|
+
console.log('[SwitchBot UI] POST /update-device - Updating device:', deviceId);
|
|
179
|
+
console.log('[SwitchBot UI] Parameters - name:', configDeviceName, 'type:', configDeviceType, 'pref:', connectionPreference, 'room:', room);
|
|
178
180
|
// Find and update device
|
|
179
181
|
if (!Array.isArray(platform.devices)) {
|
|
180
182
|
throw new TypeError('No devices found in config');
|
|
181
183
|
}
|
|
182
184
|
const device = platform.devices.find((d) => (d.deviceId ?? d.id) === deviceId);
|
|
183
185
|
if (!device) {
|
|
186
|
+
console.error('[SwitchBot UI] Device not found. Available devices:', platform.devices.map((d) => d.deviceId ?? d.id));
|
|
184
187
|
throw new Error('Device not found in config');
|
|
185
188
|
}
|
|
189
|
+
console.log('[SwitchBot UI] Found device before update:', JSON.stringify(device, null, 2));
|
|
186
190
|
// Update properties
|
|
187
|
-
if (configDeviceName !== undefined) {
|
|
191
|
+
if (configDeviceName !== undefined && configDeviceName !== null && String(configDeviceName).trim() !== '') {
|
|
188
192
|
device.configDeviceName = configDeviceName;
|
|
193
|
+
console.log('[SwitchBot UI] ✓ Updated configDeviceName to:', configDeviceName);
|
|
194
|
+
}
|
|
195
|
+
if (configDeviceType !== undefined && configDeviceType !== null && String(configDeviceType).trim() !== '') {
|
|
196
|
+
device.configDeviceType = configDeviceType;
|
|
197
|
+
console.log('[SwitchBot UI] ✓ Updated configDeviceType to:', configDeviceType);
|
|
189
198
|
}
|
|
190
199
|
if (connectionPreference !== undefined) {
|
|
191
200
|
device.connectionPreference = connectionPreference;
|
|
201
|
+
console.log('[SwitchBot UI] ✓ Updated connectionPreference to:', connectionPreference);
|
|
192
202
|
}
|
|
193
203
|
if (room !== undefined) {
|
|
194
204
|
device.room = room || undefined;
|
|
205
|
+
console.log('[SwitchBot UI] ✓ Updated room to:', room);
|
|
195
206
|
}
|
|
207
|
+
console.log('[SwitchBot UI] Device after updates:', JSON.stringify(device, null, 2));
|
|
196
208
|
// Save config
|
|
197
209
|
await fs.writeFile(cfgPath, JSON.stringify(config, null, 2), 'utf8');
|
|
210
|
+
console.log('[SwitchBot UI] ✓ Config file saved successfully');
|
|
198
211
|
console.log('[SwitchBot UI] Device updated successfully:', deviceId);
|
|
199
212
|
return {
|
|
200
213
|
success: true,
|
|
201
|
-
data: { message: `Device updated successfully` },
|
|
214
|
+
data: { message: `Device updated successfully - type: ${configDeviceType || device.configDeviceType}` },
|
|
202
215
|
};
|
|
203
216
|
}
|
|
204
217
|
catch (e) {
|
|
205
|
-
console.error('[SwitchBot UI] Error in /update-device:', e);
|
|
206
|
-
throw new RequestError(
|
|
218
|
+
console.error('[SwitchBot UI] Error in /update-device:', e instanceof Error ? e.message : String(e), e);
|
|
219
|
+
throw new RequestError(`Failed to update device: ${e instanceof Error ? e.message : String(e)}`, e);
|
|
207
220
|
}
|
|
208
221
|
});
|
|
209
222
|
server.onRequest('/delete-device', async (body) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/homebridge-ui/server.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/homebridge-ui/server.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,OAAO,EAAE,wBAAwB,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAA;AACpF,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAEjC,MAAM,MAAM,GAAG,IAAI,wBAAwB,EAAE,CAAA;AAE7C,wDAAwD;AACxD,KAAK,UAAU,0BAA0B;IACvC,MAAM,OAAO,GAAG,MAAM,CAAC,oBAAoB,CAAA;IAC3C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAA;IACnD,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;IAC9C,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAC3B,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAA;IAEnE,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;QAC1B,MAAM,YAAY,GAAG,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,IAAI,IAAI,EAAE,CAAA;QAC/C,IAAI,CAAC,YAAY,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC;YAC9D,SAAQ;QACV,CAAC;QACD,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,CAAA;IAC9C,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAA;AAC3D,CAAC;AAED,MAAM,CAAC,SAAS,CAAC,UAAU,EAAE,KAAK,IAAI,EAAE;IACtC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,CAAC,oBAAoB,CAAA;QAC3C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAA;QACnD,CAAC;QAED,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;QAC9C,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QAC3B,MAAM,KAAK,GAAsG,EAAE,CAAA;QAEnH,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAA;QACnE,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;YAC1B,IAAI,CAAC;gBACH,MAAM,YAAY,GAAG,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,IAAI,IAAI,EAAE,CAAA;gBAC/C,6CAA6C;gBAC7C,IAAI,CAAC,YAAY,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC;oBAC9D,SAAQ;gBACV,CAAC;gBAED,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,IAAI,CAAC,CAAA;gBAC9B,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAA;gBACrE,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;oBACxB,MAAM,EAAE,GAAG,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,EAAE,CAAA;oBAC7B,IAAI,CAAC,EAAE,EAAE,CAAC;wBACR,SAAQ;oBACV,CAAC;oBAED,KAAK,CAAC,IAAI,CAAC;wBACT,EAAE;wBACF,IAAI,EAAE,CAAC,CAAC,gBAAgB,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,UAAU;wBAClD,IAAI,EAAE,CAAC,CAAC,gBAAgB,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,UAAU;wBAClD,oBAAoB,EAAE,CAAC,CAAC,oBAAoB,IAAI,CAAC,CAAC,UAAU,IAAI,MAAM;wBACtE,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,QAAQ,IAAI,SAAS;qBACxC,CAAC,CAAA;gBACJ,CAAC;YACH,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,oCAAoC;YACtC,CAAC;QACH,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,qCAAqC,EAAE,KAAK,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;QAC3E,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAA;IACvC,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,mCAAmC,EAAE,CAAC,CAAC,CAAA;QACrD,MAAM,IAAI,YAAY,CAAC,kCAAkC,EAAE,CAAC,CAAC,CAAA;IAC/D,CAAC;AACH,CAAC,CAAC,CAAA;AAEF,MAAM,CAAC,SAAS,CAAC,WAAW,EAAE,KAAK,IAAI,EAAE;IACvC,IAAI,CAAC;QACH,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,0BAA0B,EAAE,CAAA;QAEvD,OAAO,CAAC,GAAG,CAAC,iDAAiD,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAA;QAErF,MAAM,KAAK,GAAG,QAAQ,CAAC,YAAY,IAAI,QAAQ,CAAC,KAAK,CAAA;QACrD,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,sDAAsD,CAAC,CAAA;YACrE,MAAM,IAAI,KAAK,CAAC,mEAAmE,CAAC,CAAA;QACtF,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,oEAAoE,CAAC,CAAA;QAEjF,MAAM,GAAG,GAAG,yCAAyC,CAAA;QACrD,MAAM,IAAI,GAAG;YACX,OAAO,EAAE;gBACP,aAAa,EAAE,KAAK;aACrB;SACF,CAAA;QAED,OAAO,CAAC,GAAG,CAAC,kDAAkD,EAAE,GAAG,CAAC,CAAA;QACpE,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;QAEnC,OAAO,CAAC,GAAG,CAAC,qDAAqD,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;QAE/E,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;YACb,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAA;YACnC,OAAO,CAAC,KAAK,CAAC,oCAAoC,EAAE,SAAS,CAAC,CAAA;YAC9D,MAAM,IAAI,KAAK,CAAC,0BAA0B,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC,CAAA;QACxE,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAA;QAC9B,OAAO,CAAC,GAAG,CAAC,mDAAmD,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;QAE/F,oCAAoC;QACpC,IAAI,OAAO,GAAU,EAAE,CAAA;QACvB,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACxB,OAAO,GAAG,IAAI,CAAA;QAChB,CAAC;aAAM,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACpC,OAAO,GAAG,IAAI,CAAC,IAAI,CAAA;QACrB,CAAC;aAAM,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YACvC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAA;QACxB,CAAC;aAAM,IAAI,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtD,wDAAwD;YACxD,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACvC,IAAI,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;gBACpC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAA;YAC3E,CAAC;iBAAM,IAAI,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;gBACxC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAA;YACrE,CAAC;QACH,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5B,OAAO,CAAC,IAAI,CAAC,6EAA6E,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;YACxK,OAAO,GAAG,EAAE,CAAA;QACd,CAAC;QAED,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC;YAC1C,EAAE,EAAE,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,EAAE;YACtB,IAAI,EAAE,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,IAAI;YAC5B,IAAI,EAAE,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,IAAI,IAAI,SAAS;YACzC,KAAK,EAAE,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,KAAK;YAC/B,OAAO,EAAE,CAAC,CAAC,kBAAkB,KAAK,KAAK;SACxC,CAAC,CAAC,CAAA;QAEH,OAAO,CAAC,GAAG,CAAC,sCAAsC,EAAE,UAAU,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAA;QAC1F,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,CAAA;IAC5C,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,oCAAoC,EAAE,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;QAC/F,MAAM,IAAI,YAAY,CAAC,+BAA+B,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAA;IACxG,CAAC;AACH,CAAC,CAAC,CAAA;AAEF,MAAM,CAAC,SAAS,CAAC,aAAa,EAAE,KAAK,EAAE,IAAS,EAAE,EAAE;IAClD,IAAI,CAAC;QACH,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,CAAA;QAErC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAA;QAC1C,CAAC;QAED,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,MAAM,0BAA0B,EAAE,CAAA;QAExE,OAAO,CAAC,GAAG,CAAC,kDAAkD,EAAE,QAAQ,CAAC,CAAA;QAEzE,qCAAqC;QACrC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YACrC,QAAQ,CAAC,OAAO,GAAG,EAAE,CAAA;QACvB,CAAC;QAED,0BAA0B;QAC1B,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,QAAQ,CAAC,CAAA;QACnF,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,0BAA0B,EAAE,EAAE,CAAA;QAC1E,CAAC;QAED,aAAa;QACb,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC;YACpB,QAAQ;YACR,gBAAgB,EAAE,IAAI;YACtB,gBAAgB,EAAE,IAAI;SACvB,CAAC,CAAA;QAEF,cAAc;QACd,MAAM,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAA;QAEpE,OAAO,CAAC,GAAG,CAAC,2CAA2C,EAAE,QAAQ,CAAC,CAAA;QAElE,OAAO;YACL,OAAO,EAAE,IAAI;YACb,IAAI,EAAE,EAAE,OAAO,EAAE,WAAW,IAAI,sBAAsB,EAAE;SACzD,CAAA;IACH,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,sCAAsC,EAAE,CAAC,CAAC,CAAA;QACxD,MAAM,IAAI,YAAY,CAAC,sBAAsB,EAAE,CAAC,CAAC,CAAA;IACnD,CAAC;AACH,CAAC,CAAC,CAAA;AAEF,MAAM,CAAC,SAAS,CAAC,gBAAgB,EAAE,KAAK,EAAE,IAAS,EAAE,EAAE;IACrD,IAAI,CAAC;QACH,MAAM,EAAE,QAAQ,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,IAAI,EAAE,GAAG,IAAI,CAAA;QAEzF,OAAO,CAAC,GAAG,CAAC,yDAAyD,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;QAErG,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAA;QAC1C,CAAC;QAED,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,MAAM,0BAA0B,EAAE,CAAA;QAExE,OAAO,CAAC,GAAG,CAAC,uDAAuD,EAAE,QAAQ,CAAC,CAAA;QAC9E,OAAO,CAAC,GAAG,CAAC,mCAAmC,EAAE,gBAAgB,EAAE,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,oBAAoB,EAAE,OAAO,EAAE,IAAI,CAAC,CAAA;QAE3I,yBAAyB;QACzB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YACrC,MAAM,IAAI,SAAS,CAAC,4BAA4B,CAAC,CAAA;QACnD,CAAC;QAED,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,QAAQ,CAAC,CAAA;QACnF,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,CAAC,KAAK,CAAC,qDAAqD,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;YAC1H,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAA;QAC/C,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,4CAA4C,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;QAE1F,oBAAoB;QACpB,IAAI,gBAAgB,KAAK,SAAS,IAAI,gBAAgB,KAAK,IAAI,IAAI,MAAM,CAAC,gBAAgB,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YAC1G,MAAM,CAAC,gBAAgB,GAAG,gBAAgB,CAAA;YAC1C,OAAO,CAAC,GAAG,CAAC,+CAA+C,EAAE,gBAAgB,CAAC,CAAA;QAChF,CAAC;QACD,IAAI,gBAAgB,KAAK,SAAS,IAAI,gBAAgB,KAAK,IAAI,IAAI,MAAM,CAAC,gBAAgB,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YAC1G,MAAM,CAAC,gBAAgB,GAAG,gBAAgB,CAAA;YAC1C,OAAO,CAAC,GAAG,CAAC,+CAA+C,EAAE,gBAAgB,CAAC,CAAA;QAChF,CAAC;QACD,IAAI,oBAAoB,KAAK,SAAS,EAAE,CAAC;YACvC,MAAM,CAAC,oBAAoB,GAAG,oBAAoB,CAAA;YAClD,OAAO,CAAC,GAAG,CAAC,mDAAmD,EAAE,oBAAoB,CAAC,CAAA;QACxF,CAAC;QACD,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,MAAM,CAAC,IAAI,GAAG,IAAI,IAAI,SAAS,CAAA;YAC/B,OAAO,CAAC,GAAG,CAAC,mCAAmC,EAAE,IAAI,CAAC,CAAA;QACxD,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,sCAAsC,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;QAEpF,cAAc;QACd,MAAM,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAA;QACpE,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAA;QAE9D,OAAO,CAAC,GAAG,CAAC,6CAA6C,EAAE,QAAQ,CAAC,CAAA;QAEpE,OAAO;YACL,OAAO,EAAE,IAAI;YACb,IAAI,EAAE,EAAE,OAAO,EAAE,uCAAuC,gBAAgB,IAAI,MAAM,CAAC,gBAAgB,EAAE,EAAE;SACxG,CAAA;IACH,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,yCAAyC,EAAE,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QACvG,MAAM,IAAI,YAAY,CAAC,4BAA4B,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAA;IACrG,CAAC;AACH,CAAC,CAAC,CAAA;AAEF,MAAM,CAAC,SAAS,CAAC,gBAAgB,EAAE,KAAK,EAAE,IAAS,EAAE,EAAE;IACrD,IAAI,CAAC;QACH,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAA;QAEzB,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAA;QAC1C,CAAC;QAED,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,MAAM,0BAA0B,EAAE,CAAA;QAExE,OAAO,CAAC,GAAG,CAAC,gDAAgD,EAAE,QAAQ,CAAC,CAAA;QAEvE,2BAA2B;QAC3B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YACrC,MAAM,IAAI,SAAS,CAAC,4BAA4B,CAAC,CAAA;QACnD,CAAC;QAED,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,QAAQ,CAAC,CAAA;QACvF,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAA;QAC/C,CAAC;QAED,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,gBAAgB,IAAI,QAAQ,CAAA;QACvE,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;QAEjC,cAAc;QACd,MAAM,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAA;QAEpE,OAAO,CAAC,GAAG,CAAC,6CAA6C,EAAE,QAAQ,CAAC,CAAA;QAEpE,OAAO;YACL,OAAO,EAAE,IAAI;YACb,IAAI,EAAE,EAAE,OAAO,EAAE,WAAW,UAAU,uBAAuB,EAAE;SAChE,CAAA;IACH,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,yCAAyC,EAAE,CAAC,CAAC,CAAA;QAC3D,MAAM,IAAI,YAAY,CAAC,yBAAyB,EAAE,CAAC,CAAC,CAAA;IACtD,CAAC;AACH,CAAC,CAAC,CAAA;AAEF,MAAM,CAAC,SAAS,CAAC,cAAc,EAAE,KAAK,EAAE,IAAS,EAAE,EAAE;IACnD,IAAI,CAAC;QACH,oCAAoC;QACpC,IAAI,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5C,sCAAsC;YACtC,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,0BAA0B,EAAE,CAAA;YAEvD,MAAM,MAAM,GAAG;gBACb,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,YAAY;gBACjC,SAAS,EAAE,CAAC,CAAC,QAAQ,CAAC,aAAa;gBACnC,WAAW,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBAC7E,YAAY,EAAE,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;aACjF,CAAA;YAED,OAAO,CAAC,GAAG,CAAC,2CAA2C,EAAE,MAAM,CAAC,CAAA;YAChE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,CAAA;QACxC,CAAC;aAAM,CAAC;YACN,kCAAkC;YAClC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;YAE9B,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC;gBACtB,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAA;YAClD,CAAC;YAED,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,MAAM,0BAA0B,EAAE,CAAA;YAExE,OAAO,CAAC,GAAG,CAAC,wDAAwD,EAAE,QAAQ,CAAC,QAAQ,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAA;YACzG,OAAO,CAAC,GAAG,CAAC,6BAA6B,EAAE,OAAO,CAAC,CAAA;YACnD,OAAO,CAAC,GAAG,CAAC,8BAA8B,EAAE,KAAK,CAAC,MAAM,EAAE,gBAAgB,EAAE,MAAM,CAAC,MAAM,CAAC,CAAA;YAE1F,wDAAwD;YACxD,QAAQ,CAAC,YAAY,GAAG,KAAK,CAAA;YAC7B,QAAQ,CAAC,aAAa,GAAG,MAAM,CAAA;YAE/B,4BAA4B;YAC5B,MAAM,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAA;YAEpE,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAA;YAE5D,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,IAAI,EAAE,EAAE,OAAO,EAAE,gCAAgC,EAAE;aACpD,CAAA;QACH,CAAC;IACH,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,uCAAuC,EAAE,CAAC,CAAC,CAAA;QACzD,MAAM,IAAI,YAAY,CAAC,sCAAsC,EAAE,CAAC,CAAC,CAAA;IACnE,CAAC;AACH,CAAC,CAAC,CAAA;AAEF,MAAM,CAAC,KAAK,EAAE,CAAA;AAEd,eAAe,MAAM,CAAA"}
|
package/dist/platform.d.ts
CHANGED
|
@@ -1,12 +1,16 @@
|
|
|
1
|
-
import type { API, Logger, PlatformConfig } from 'homebridge';
|
|
2
1
|
import type { SwitchBotPluginConfig } from './settings.js';
|
|
2
|
+
import type { API, Logger, PlatformConfig } from 'homebridge';
|
|
3
3
|
export declare class SwitchBotHAPPlatform {
|
|
4
4
|
api: API | undefined;
|
|
5
5
|
log: Logger;
|
|
6
6
|
config: SwitchBotPluginConfig;
|
|
7
7
|
devices: any[];
|
|
8
8
|
accessories: Map<string, any>;
|
|
9
|
+
private lastConfigHash;
|
|
10
|
+
private configReloadInterval;
|
|
9
11
|
constructor(log: Logger, config: PlatformConfig, api?: API);
|
|
12
|
+
private getConfigHash;
|
|
13
|
+
private checkAndReloadDevices;
|
|
10
14
|
loadDevices(): Promise<void>;
|
|
11
15
|
configureAccessory(accessory: any): Promise<void>;
|
|
12
16
|
configureMatterAccessory?(accessory: any): void;
|
|
@@ -17,8 +21,12 @@ export declare class SwitchBotMatterPlatform {
|
|
|
17
21
|
config: SwitchBotPluginConfig;
|
|
18
22
|
devices: any[];
|
|
19
23
|
accessories: Map<string, any>;
|
|
24
|
+
private lastConfigHash;
|
|
25
|
+
private configReloadInterval;
|
|
20
26
|
constructor(log: Logger, config: PlatformConfig, api?: API);
|
|
21
27
|
loadDevices(): Promise<void>;
|
|
28
|
+
private getConfigHash;
|
|
29
|
+
private checkAndReloadDevices;
|
|
22
30
|
configureAccessory(accessory: any): Promise<void>;
|
|
23
31
|
configureMatterAccessory(accessory: any): void;
|
|
24
32
|
registerMatterAccessories(): Promise<void>;
|
package/dist/platform.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA;AAC1D,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAwB7D,qBAAa,oBAAoB;IAC/B,GAAG,EAAE,GAAG,GAAG,SAAS,CAAA;IACpB,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE,qBAAqB,CAAA;IAC7B,OAAO,EAAE,GAAG,EAAE,CAAK;IAEnB,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAE7B,OAAO,CAAC,cAAc,CAAa;IACnC,OAAO,CAAC,oBAAoB,CAA8B;gBAE9C,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,CAAC,EAAE,GAAG;IA2C1D,OAAO,CAAC,aAAa;YAUP,qBAAqB;IAU7B,WAAW;IAwJX,kBAAkB,CAAC,SAAS,EAAE,GAAG;IAYvC,wBAAwB,CAAC,CAAC,SAAS,EAAE,GAAG;CASzC;AAGD,qBAAa,uBAAuB;IAClC,GAAG,EAAE,GAAG,GAAG,SAAS,CAAA;IACpB,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE,qBAAqB,CAAA;IAC7B,OAAO,EAAE,GAAG,EAAE,CAAK;IACnB,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAE7B,OAAO,CAAC,cAAc,CAAa;IACnC,OAAO,CAAC,oBAAoB,CAA8B;gBAE9C,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,CAAC,EAAE,GAAG;IA8CpD,WAAW;IAwCjB,OAAO,CAAC,aAAa;YAUP,qBAAqB;IAU7B,kBAAkB,CAAC,SAAS,EAAE,GAAG;IAWvC,wBAAwB,CAAC,SAAS,EAAE,GAAG;IAWjC,yBAAyB;CAuEhC;AAED,eAAe,oBAAoB,CAAA"}
|
package/dist/platform.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { SwitchBotClient } from './switchbotClient.js';
|
|
2
1
|
import { createDevice } from './deviceFactory.js';
|
|
3
|
-
import {
|
|
2
|
+
import { PLATFORM_NAME, PLUGIN_NAME } from './settings.js';
|
|
3
|
+
import { SwitchBotClient } from './switchbotClient.js';
|
|
4
4
|
// Which device types should prefer Matter if available
|
|
5
5
|
const DEVICE_MATTER_SUPPORTED = {
|
|
6
6
|
bot: false,
|
|
@@ -10,10 +10,13 @@ const DEVICE_MATTER_SUPPORTED = {
|
|
|
10
10
|
lightstrip: true,
|
|
11
11
|
motion: true,
|
|
12
12
|
contact: true,
|
|
13
|
-
vacuum:
|
|
13
|
+
vacuum: true,
|
|
14
14
|
lock: true,
|
|
15
15
|
humidifier: true,
|
|
16
16
|
temperature: true,
|
|
17
|
+
wosweeper: true,
|
|
18
|
+
wosweepermini: true,
|
|
19
|
+
wosweeperminipro: true,
|
|
17
20
|
};
|
|
18
21
|
export class SwitchBotHAPPlatform {
|
|
19
22
|
api;
|
|
@@ -22,6 +25,9 @@ export class SwitchBotHAPPlatform {
|
|
|
22
25
|
devices = [];
|
|
23
26
|
// cached accessories restored by Homebridge
|
|
24
27
|
accessories;
|
|
28
|
+
// Track last loaded config to detect changes
|
|
29
|
+
lastConfigHash = '';
|
|
30
|
+
configReloadInterval = null;
|
|
25
31
|
constructor(log, config, api) {
|
|
26
32
|
this.log = log;
|
|
27
33
|
this.config = config ?? {};
|
|
@@ -51,10 +57,36 @@ export class SwitchBotHAPPlatform {
|
|
|
51
57
|
;
|
|
52
58
|
this.api.on('didFinishLaunching', () => {
|
|
53
59
|
void this.loadDevices();
|
|
60
|
+
// Start periodic config reload to pick up UI changes
|
|
61
|
+
this.configReloadInterval = setInterval(() => {
|
|
62
|
+
void this.checkAndReloadDevices();
|
|
63
|
+
}, 10000); // Check every 10 seconds
|
|
54
64
|
});
|
|
55
65
|
}
|
|
56
66
|
else {
|
|
57
67
|
void this.loadDevices();
|
|
68
|
+
// Start periodic config reload to pick up UI changes
|
|
69
|
+
this.configReloadInterval = setInterval(() => {
|
|
70
|
+
void this.checkAndReloadDevices();
|
|
71
|
+
}, 10000); // Check every 10 seconds
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
getConfigHash() {
|
|
75
|
+
// Create a simple hash of current device config to detect changes
|
|
76
|
+
const devices = this.config?.devices ?? [];
|
|
77
|
+
return JSON.stringify(devices.map((d) => ({
|
|
78
|
+
id: d.deviceId ?? d.id,
|
|
79
|
+
type: d.configDeviceType ?? d.type,
|
|
80
|
+
name: d.configDeviceName ?? d.name,
|
|
81
|
+
})));
|
|
82
|
+
}
|
|
83
|
+
async checkAndReloadDevices() {
|
|
84
|
+
const currentHash = this.getConfigHash();
|
|
85
|
+
if (currentHash !== this.lastConfigHash) {
|
|
86
|
+
this.log.info('[SwitchBot] Detected config changes, reloading devices...');
|
|
87
|
+
// Clear existing devices
|
|
88
|
+
this.devices = [];
|
|
89
|
+
await this.loadDevices();
|
|
58
90
|
}
|
|
59
91
|
}
|
|
60
92
|
async loadDevices() {
|
|
@@ -67,7 +99,11 @@ export class SwitchBotHAPPlatform {
|
|
|
67
99
|
type: raw.configDeviceType ?? raw.type ?? raw.deviceType ?? 'unknown',
|
|
68
100
|
_raw: raw,
|
|
69
101
|
};
|
|
70
|
-
|
|
102
|
+
let type = d.type;
|
|
103
|
+
// Normalize wosweeper variants to vacuum
|
|
104
|
+
if (['wosweeper', 'wosweepermini', 'wosweeperminipro'].includes((type || '').toLowerCase())) {
|
|
105
|
+
type = 'vacuum';
|
|
106
|
+
}
|
|
71
107
|
const matterSupported = !!DEVICE_MATTER_SUPPORTED[(type || '').toLowerCase()];
|
|
72
108
|
const useMatter = !!this.config.enableMatter && matterSupported && !!this.config.preferMatter;
|
|
73
109
|
try {
|
|
@@ -86,7 +122,7 @@ export class SwitchBotHAPPlatform {
|
|
|
86
122
|
const accessory = {
|
|
87
123
|
uuid,
|
|
88
124
|
displayName: createdDesc.name || d.name || type,
|
|
89
|
-
context: { deviceId: d.id, type
|
|
125
|
+
context: { deviceId: d.id, type, _created: true },
|
|
90
126
|
};
|
|
91
127
|
try {
|
|
92
128
|
await matterApi.registerPlatformAccessories(PLUGIN_NAME, PLATFORM_NAME, [accessory]);
|
|
@@ -116,7 +152,7 @@ export class SwitchBotHAPPlatform {
|
|
|
116
152
|
let accessory = this.accessories.get(uuid);
|
|
117
153
|
// If not found by uuid, attempt to find by stored deviceId in accessory.context
|
|
118
154
|
if (!accessory) {
|
|
119
|
-
for (const [
|
|
155
|
+
for (const [, a] of Array.from(this.accessories.entries())) {
|
|
120
156
|
try {
|
|
121
157
|
if (a && a.context && a.context.deviceId === d.id) {
|
|
122
158
|
accessory = a;
|
|
@@ -165,14 +201,16 @@ export class SwitchBotHAPPlatform {
|
|
|
165
201
|
if (accDesc && accDesc.services) {
|
|
166
202
|
for (const s of accDesc.services) {
|
|
167
203
|
const Service = hap.Service[s.type] || hap.Service[s.type];
|
|
168
|
-
if (!Service)
|
|
204
|
+
if (!Service) {
|
|
169
205
|
continue;
|
|
206
|
+
}
|
|
170
207
|
const service = accessory.getService(Service) || accessory.addService(Service);
|
|
171
208
|
for (const [charName, getterSetterRaw] of Object.entries(s.characteristics || {})) {
|
|
172
209
|
const getterSetter = getterSetterRaw;
|
|
173
210
|
const Characteristic = hap.Characteristic[charName];
|
|
174
|
-
if (!Characteristic)
|
|
211
|
+
if (!Characteristic) {
|
|
175
212
|
continue;
|
|
213
|
+
}
|
|
176
214
|
// Apply characteristic props if provided (min/max/step)
|
|
177
215
|
if (getterSetter && getterSetter.props) {
|
|
178
216
|
try {
|
|
@@ -206,6 +244,8 @@ export class SwitchBotHAPPlatform {
|
|
|
206
244
|
this.log.error(`Failed to create device ${d.id}:`, e);
|
|
207
245
|
}
|
|
208
246
|
}
|
|
247
|
+
// Update hash after successfully loading devices
|
|
248
|
+
this.lastConfigHash = this.getConfigHash();
|
|
209
249
|
}
|
|
210
250
|
// Example lifecycle method called by Homebridge
|
|
211
251
|
async configureAccessory(accessory) {
|
|
@@ -238,6 +278,9 @@ export class SwitchBotMatterPlatform {
|
|
|
238
278
|
config;
|
|
239
279
|
devices = [];
|
|
240
280
|
accessories;
|
|
281
|
+
// Track last loaded config to detect changes
|
|
282
|
+
lastConfigHash = '';
|
|
283
|
+
configReloadInterval = null;
|
|
241
284
|
constructor(log, config, api) {
|
|
242
285
|
this.log = log;
|
|
243
286
|
this.config = config ?? {};
|
|
@@ -265,10 +308,18 @@ export class SwitchBotMatterPlatform {
|
|
|
265
308
|
this.log.warn('Error during Matter platform startup', e);
|
|
266
309
|
}
|
|
267
310
|
})();
|
|
311
|
+
// Start periodic config reload to pick up UI changes
|
|
312
|
+
this.configReloadInterval = setInterval(() => {
|
|
313
|
+
void this.checkAndReloadDevices();
|
|
314
|
+
}, 10000); // Check every 10 seconds
|
|
268
315
|
});
|
|
269
316
|
}
|
|
270
317
|
else {
|
|
271
318
|
void this.loadDevices();
|
|
319
|
+
// Start periodic config reload to pick up UI changes
|
|
320
|
+
this.configReloadInterval = setInterval(() => {
|
|
321
|
+
void this.checkAndReloadDevices();
|
|
322
|
+
}, 10000); // Check every 10 seconds
|
|
272
323
|
}
|
|
273
324
|
// Create/shared SwitchBot client and attach to config so child devices reuse it.
|
|
274
325
|
try {
|
|
@@ -290,7 +341,11 @@ export class SwitchBotMatterPlatform {
|
|
|
290
341
|
type: raw.configDeviceType ?? raw.type ?? raw.deviceType ?? 'unknown',
|
|
291
342
|
_raw: raw,
|
|
292
343
|
};
|
|
293
|
-
|
|
344
|
+
let type = d.type;
|
|
345
|
+
// Normalize wosweeper variants to vacuum
|
|
346
|
+
if (['wosweeper', 'wosweepermini', 'wosweeperminipro'].includes((type || '').toLowerCase())) {
|
|
347
|
+
type = 'vacuum';
|
|
348
|
+
}
|
|
294
349
|
const matterSupported = !!DEVICE_MATTER_SUPPORTED[(type || '').toLowerCase()];
|
|
295
350
|
const useMatter = !!this.config.enableMatter && matterSupported;
|
|
296
351
|
try {
|
|
@@ -300,13 +355,41 @@ export class SwitchBotMatterPlatform {
|
|
|
300
355
|
this.log.info(`Prepared Matter accessory for ${d.id} (${type})`);
|
|
301
356
|
}
|
|
302
357
|
else {
|
|
303
|
-
this.
|
|
358
|
+
if (!this.config.enableMatter) {
|
|
359
|
+
this.log.info(`Skipping Matter for ${d.id} (${type}) - Matter not enabled in plugin config`);
|
|
360
|
+
}
|
|
361
|
+
else if (!matterSupported) {
|
|
362
|
+
this.log.info(`Skipping Matter for ${d.id} (${type}) - device type not supported`);
|
|
363
|
+
}
|
|
364
|
+
else {
|
|
365
|
+
this.log.info(`Skipping Matter for ${d.id} (${type}) - not supported`);
|
|
366
|
+
}
|
|
304
367
|
}
|
|
305
368
|
}
|
|
306
369
|
catch (e) {
|
|
307
370
|
this.log.error(`Failed to create Matter device ${d.id}:`, e);
|
|
308
371
|
}
|
|
309
372
|
}
|
|
373
|
+
// Update hash after successfully loading devices
|
|
374
|
+
this.lastConfigHash = this.getConfigHash();
|
|
375
|
+
}
|
|
376
|
+
getConfigHash() {
|
|
377
|
+
// Create a simple hash of current device config to detect changes
|
|
378
|
+
const devices = this.config?.devices ?? [];
|
|
379
|
+
return JSON.stringify(devices.map((d) => ({
|
|
380
|
+
id: d.deviceId ?? d.id,
|
|
381
|
+
type: d.configDeviceType ?? d.type,
|
|
382
|
+
name: d.configDeviceName ?? d.name,
|
|
383
|
+
})));
|
|
384
|
+
}
|
|
385
|
+
async checkAndReloadDevices() {
|
|
386
|
+
const currentHash = this.getConfigHash();
|
|
387
|
+
if (currentHash !== this.lastConfigHash) {
|
|
388
|
+
this.log.info('[SwitchBot] Detected config changes, reloading devices...');
|
|
389
|
+
// Clear existing devices
|
|
390
|
+
this.devices = [];
|
|
391
|
+
await this.loadDevices();
|
|
392
|
+
}
|
|
310
393
|
}
|
|
311
394
|
async configureAccessory(accessory) {
|
|
312
395
|
try {
|
|
@@ -331,8 +414,9 @@ export class SwitchBotMatterPlatform {
|
|
|
331
414
|
}
|
|
332
415
|
// Register serialized Matter accessories via Homebridge Matter API
|
|
333
416
|
async registerMatterAccessories() {
|
|
334
|
-
if (!this.api)
|
|
417
|
+
if (!this.api) {
|
|
335
418
|
return;
|
|
419
|
+
}
|
|
336
420
|
const matterApi = this.api.matter;
|
|
337
421
|
if (!matterApi || typeof matterApi.registerPlatformAccessories !== 'function') {
|
|
338
422
|
this.log.info('Homebridge Matter API not available; skipping Matter accessory registration');
|
|
@@ -344,15 +428,16 @@ export class SwitchBotMatterPlatform {
|
|
|
344
428
|
const type = d.type || d.deviceType || 'unknown';
|
|
345
429
|
const matterSupported = !!DEVICE_MATTER_SUPPORTED[(type || '').toLowerCase()];
|
|
346
430
|
const useMatter = !!this.config.enableMatter && matterSupported;
|
|
347
|
-
if (!useMatter)
|
|
431
|
+
if (!useMatter) {
|
|
348
432
|
continue;
|
|
433
|
+
}
|
|
349
434
|
try {
|
|
350
435
|
const created = await createDevice({ id: d.id, type, name: d.name }, this.config, true);
|
|
351
436
|
const createdDesc = created.createAccessory?.(this.api) || { id: d.id, name: d.name || type };
|
|
352
437
|
const uuid = matterApi.uuid.generate(`${d.id}`);
|
|
353
438
|
// Try to find existing restored accessory by deviceId
|
|
354
439
|
let existing;
|
|
355
|
-
for (const [
|
|
440
|
+
for (const [, a] of Array.from(this.accessories.entries())) {
|
|
356
441
|
try {
|
|
357
442
|
if (a && a.context && a.context.deviceId === d.id) {
|
|
358
443
|
existing = a;
|