@switchbot/homebridge-switchbot 5.0.0-beta.146 → 5.0.0-beta.148
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 +1 -1
- package/.github/workflows/manual-e2e.yml +3 -3
- package/config.schema.json +6 -0
- package/dist/deviceCommandMapper.d.ts +10 -0
- package/dist/deviceCommandMapper.d.ts.map +1 -0
- package/dist/deviceCommandMapper.js +319 -0
- package/dist/deviceCommandMapper.js.map +1 -0
- package/dist/deviceFactory.d.ts +2 -3
- package/dist/deviceFactory.d.ts.map +1 -1
- package/dist/deviceFactory.js +12 -3
- package/dist/deviceFactory.js.map +1 -1
- package/dist/homebridge-ui/endpoints/config.d.ts.map +1 -1
- package/dist/homebridge-ui/endpoints/config.js +1 -18
- package/dist/homebridge-ui/endpoints/config.js.map +1 -1
- package/dist/homebridge-ui/endpoints/devices.d.ts.map +1 -1
- package/dist/homebridge-ui/endpoints/devices.js +1 -350
- package/dist/homebridge-ui/endpoints/devices.js.map +1 -1
- package/dist/homebridge-ui/public/index.html +6 -0
- package/dist/homebridge-ui/public/js/advanced-settings.d.ts.map +1 -1
- package/dist/homebridge-ui/public/js/advanced-settings.js +22 -12
- package/dist/homebridge-ui/public/js/advanced-settings.js.map +1 -1
- package/dist/homebridge-ui/public/js/advanced-settings.ts +36 -25
- package/dist/homebridge-ui/public/js/api.d.ts +1 -1
- package/dist/homebridge-ui/public/js/api.d.ts.map +1 -1
- package/dist/homebridge-ui/public/js/api.js +111 -52
- package/dist/homebridge-ui/public/js/api.js.map +1 -1
- package/dist/homebridge-ui/public/js/api.ts +112 -53
- package/dist/homebridge-ui/public/js/app.js +234 -177
- package/dist/homebridge-ui/public/js/app.js.map +4 -4
- package/dist/homebridge-ui/public/js/credentials.d.ts.map +1 -1
- package/dist/homebridge-ui/public/js/credentials.js +26 -23
- package/dist/homebridge-ui/public/js/credentials.js.map +1 -1
- package/dist/homebridge-ui/public/js/credentials.ts +26 -25
- package/dist/homebridge-ui/public/js/devices-delete.d.ts.map +1 -1
- package/dist/homebridge-ui/public/js/devices-delete.js +3 -10
- package/dist/homebridge-ui/public/js/devices-delete.js.map +1 -1
- package/dist/homebridge-ui/public/js/devices-delete.ts +3 -12
- package/dist/homebridge-ui/public/js/devices.d.ts.map +1 -1
- package/dist/homebridge-ui/public/js/devices.js +0 -3
- package/dist/homebridge-ui/public/js/devices.js.map +1 -1
- package/dist/homebridge-ui/public/js/devices.ts +5 -9
- package/dist/homebridge-ui/server.js +0 -2
- package/dist/homebridge-ui/server.js.map +1 -1
- package/dist/platform.d.ts.map +1 -1
- package/dist/platform.js +3 -2
- package/dist/platform.js.map +1 -1
- package/dist/settings.d.ts +1 -0
- package/dist/settings.d.ts.map +1 -1
- package/dist/settings.js +1 -0
- package/dist/settings.js.map +1 -1
- package/dist/switchbotClient.d.ts.map +1 -1
- package/dist/switchbotClient.js +42 -55
- package/dist/switchbotClient.js.map +1 -1
- package/docs/variables/default.html +1 -1
- package/package.json +1 -1
- package/src/deviceCommandMapper.ts +333 -0
- package/src/deviceFactory.ts +14 -6
- package/src/homebridge-ui/endpoints/config.ts +2 -18
- package/src/homebridge-ui/endpoints/devices.ts +1 -392
- package/src/homebridge-ui/public/index.html +6 -0
- package/src/homebridge-ui/public/js/advanced-settings.ts +36 -25
- package/src/homebridge-ui/public/js/api.ts +112 -53
- package/src/homebridge-ui/public/js/credentials.ts +26 -25
- package/src/homebridge-ui/public/js/devices-delete.ts +3 -12
- package/src/homebridge-ui/public/js/devices.ts +5 -9
- package/src/homebridge-ui/server.ts +0 -2
- package/src/platform.ts +3 -2
- package/src/settings.ts +2 -0
- package/src/switchbotClient.ts +43 -54
- package/dist/homebridge-ui/endpoints/credentials.d.ts +0 -6
- package/dist/homebridge-ui/endpoints/credentials.d.ts.map +0 -1
- package/dist/homebridge-ui/endpoints/credentials.js +0 -65
- package/dist/homebridge-ui/endpoints/credentials.js.map +0 -1
- package/src/homebridge-ui/endpoints/credentials.ts +0 -74
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../../src/homebridge-ui/public/js/api.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../../src/homebridge-ui/public/js/api.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,25 @@
|
|
|
1
|
+
// Fetch the list of configured devices from the Homebridge UI API
|
|
1
2
|
import { isValidDeviceType, normalizeDeviceType } from '../../../device-types.js';
|
|
2
3
|
import './types.js';
|
|
3
4
|
import { uiLog } from './logger.js';
|
|
5
|
+
export async function fetchDevices() {
|
|
6
|
+
try {
|
|
7
|
+
if (typeof homebridge.getPluginConfig !== 'function') {
|
|
8
|
+
throw new TypeError('Homebridge UI API not available');
|
|
9
|
+
}
|
|
10
|
+
const configArr = await homebridge.getPluginConfig();
|
|
11
|
+
const config = Array.isArray(configArr) && configArr.length > 0 ? configArr.find(isSwitchBotPlatformConfig) : null;
|
|
12
|
+
if (!config || !Array.isArray(config.devices)) {
|
|
13
|
+
return [];
|
|
14
|
+
}
|
|
15
|
+
return config.devices;
|
|
16
|
+
}
|
|
17
|
+
catch (e) {
|
|
18
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
19
|
+
uiLog.error('Error fetching devices:', msg);
|
|
20
|
+
return [];
|
|
21
|
+
}
|
|
22
|
+
}
|
|
4
23
|
/**
|
|
5
24
|
* Validate and auto-correct device types in the config array before saving.
|
|
6
25
|
* Returns an array of errors for devices that cannot be fixed.
|
|
@@ -98,24 +117,6 @@ export async function saveCredentials(token, secret) {
|
|
|
98
117
|
}
|
|
99
118
|
return resp.data || resp;
|
|
100
119
|
}
|
|
101
|
-
export async function fetchDevices() {
|
|
102
|
-
try {
|
|
103
|
-
const resp = await homebridge.request('/devices', {});
|
|
104
|
-
if (!resp || resp.success === false) {
|
|
105
|
-
// Prefer backend error message if available
|
|
106
|
-
const backendMsg = resp?.data?.message || resp?.message;
|
|
107
|
-
throw new Error(backendMsg || 'request failed');
|
|
108
|
-
}
|
|
109
|
-
return resp.data || [];
|
|
110
|
-
}
|
|
111
|
-
catch (e) {
|
|
112
|
-
// Show the real error to the user
|
|
113
|
-
const msg = e instanceof Error ? e.message : String(e);
|
|
114
|
-
uiLog.error('Error fetching devices:', msg);
|
|
115
|
-
// Optionally, show a toast or UI error here if needed
|
|
116
|
-
return [];
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
120
|
export async function discoverDevices(mode = 'all', options) {
|
|
120
121
|
const resp = await homebridge.request('/discover', { mode, ...options });
|
|
121
122
|
uiLog.info('Discover response:', resp);
|
|
@@ -150,29 +151,45 @@ export async function testDeviceConnection(payload) {
|
|
|
150
151
|
};
|
|
151
152
|
}
|
|
152
153
|
export async function addDevice(deviceId, name, type, options) {
|
|
153
|
-
|
|
154
|
+
if (typeof homebridge.getPluginConfig !== 'function' || typeof homebridge.updatePluginConfig !== 'function') {
|
|
155
|
+
throw new TypeError('Homebridge UI API not available');
|
|
156
|
+
}
|
|
157
|
+
const configArr = await homebridge.getPluginConfig();
|
|
158
|
+
const idx = Array.isArray(configArr) ? configArr.findIndex(isSwitchBotPlatformConfig) : -1;
|
|
159
|
+
if (idx === -1) {
|
|
160
|
+
throw new Error('SwitchBot config not found');
|
|
161
|
+
}
|
|
162
|
+
const config = configArr[idx];
|
|
163
|
+
if (!Array.isArray(config.devices)) {
|
|
164
|
+
config.devices = [];
|
|
165
|
+
}
|
|
166
|
+
const normalizedDeviceId = String(deviceId).trim().toLowerCase();
|
|
167
|
+
const exists = config.devices.some((d) => String(d.deviceId ?? d.id ?? '').trim().toLowerCase() === normalizedDeviceId);
|
|
168
|
+
if (exists) {
|
|
169
|
+
return { alreadyExists: true, message: 'Device already in config' };
|
|
170
|
+
}
|
|
171
|
+
const newDevice = { deviceId, configDeviceName: name, configDeviceType: type };
|
|
154
172
|
if (options?.address) {
|
|
155
|
-
|
|
173
|
+
newDevice.address = options.address;
|
|
156
174
|
}
|
|
157
175
|
if (options?.model) {
|
|
158
|
-
|
|
176
|
+
newDevice.model = options.model;
|
|
159
177
|
}
|
|
160
178
|
if (options?.rssi !== undefined && options?.rssi !== null && options?.rssi !== 0) {
|
|
161
|
-
|
|
179
|
+
newDevice.rssi = options.rssi;
|
|
162
180
|
}
|
|
163
181
|
if (options?.encryptionKey) {
|
|
164
|
-
|
|
182
|
+
newDevice.encryptionKey = options.encryptionKey;
|
|
165
183
|
}
|
|
166
184
|
if (options?.keyId) {
|
|
167
|
-
|
|
185
|
+
newDevice.keyId = options.keyId;
|
|
168
186
|
}
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
throw new Error(resp?.data?.message || 'Failed to add device');
|
|
187
|
+
config.devices.push(newDevice);
|
|
188
|
+
await homebridge.updatePluginConfig(configArr);
|
|
189
|
+
if (typeof homebridge.savePluginConfig === 'function') {
|
|
190
|
+
await homebridge.savePluginConfig();
|
|
174
191
|
}
|
|
175
|
-
return
|
|
192
|
+
return { added: true, message: `Device "${name}" added successfully` };
|
|
176
193
|
}
|
|
177
194
|
export async function addDevicesInBulk(devices) {
|
|
178
195
|
const resp = await homebridge.request('/add-devices', { devices });
|
|
@@ -183,40 +200,82 @@ export async function addDevicesInBulk(devices) {
|
|
|
183
200
|
return resp.data || resp;
|
|
184
201
|
}
|
|
185
202
|
export async function updateDevice(deviceId, configDeviceName, configDeviceType, options) {
|
|
186
|
-
|
|
203
|
+
if (typeof homebridge.getPluginConfig !== 'function' || typeof homebridge.updatePluginConfig !== 'function') {
|
|
204
|
+
throw new TypeError('Homebridge UI API not available');
|
|
205
|
+
}
|
|
206
|
+
const configArr = await homebridge.getPluginConfig();
|
|
207
|
+
const idx = Array.isArray(configArr) ? configArr.findIndex(isSwitchBotPlatformConfig) : -1;
|
|
208
|
+
if (idx === -1) {
|
|
209
|
+
throw new Error('SwitchBot config not found');
|
|
210
|
+
}
|
|
211
|
+
const config = configArr[idx];
|
|
212
|
+
if (!Array.isArray(config.devices)) {
|
|
213
|
+
throw new TypeError('No devices array in config');
|
|
214
|
+
}
|
|
215
|
+
const normalizedDeviceId = String(deviceId).trim().toLowerCase();
|
|
216
|
+
const device = config.devices.find((d) => String(d.deviceId ?? d.id ?? '').trim().toLowerCase() === normalizedDeviceId);
|
|
217
|
+
if (!device) {
|
|
218
|
+
throw new Error('Device not found in config');
|
|
219
|
+
}
|
|
187
220
|
if (configDeviceName) {
|
|
188
|
-
|
|
221
|
+
device.configDeviceName = configDeviceName;
|
|
189
222
|
}
|
|
190
223
|
if (configDeviceType) {
|
|
191
|
-
|
|
224
|
+
device.configDeviceType = configDeviceType;
|
|
192
225
|
}
|
|
193
226
|
if (options) {
|
|
194
|
-
Object.assign(
|
|
227
|
+
Object.assign(device, options);
|
|
195
228
|
}
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
if (!resp || resp.success === false) {
|
|
200
|
-
throw new Error(resp?.data?.message || 'Failed to update device');
|
|
229
|
+
await homebridge.updatePluginConfig(configArr);
|
|
230
|
+
if (typeof homebridge.savePluginConfig === 'function') {
|
|
231
|
+
await homebridge.savePluginConfig();
|
|
201
232
|
}
|
|
202
|
-
return
|
|
233
|
+
return { updated: true, message: `Device updated successfully` };
|
|
203
234
|
}
|
|
204
235
|
export async function deleteDevice(deviceId) {
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
uiLog.info('Delete response:', resp);
|
|
208
|
-
if (!resp || resp.success === false) {
|
|
209
|
-
throw new Error(resp?.data?.message || 'Failed to delete device');
|
|
236
|
+
if (typeof homebridge.getPluginConfig !== 'function' || typeof homebridge.updatePluginConfig !== 'function') {
|
|
237
|
+
throw new TypeError('Homebridge UI API not available');
|
|
210
238
|
}
|
|
211
|
-
|
|
239
|
+
const configArr = await homebridge.getPluginConfig();
|
|
240
|
+
const idx = Array.isArray(configArr) ? configArr.findIndex(isSwitchBotPlatformConfig) : -1;
|
|
241
|
+
if (idx === -1) {
|
|
242
|
+
throw new Error('SwitchBot config not found');
|
|
243
|
+
}
|
|
244
|
+
const config = configArr[idx];
|
|
245
|
+
if (!Array.isArray(config.devices)) {
|
|
246
|
+
throw new TypeError('No devices array in config');
|
|
247
|
+
}
|
|
248
|
+
const normalizedDeviceId = String(deviceId).trim().toLowerCase();
|
|
249
|
+
const before = config.devices.length;
|
|
250
|
+
config.devices = config.devices.filter((d) => String(d.deviceId ?? d.id ?? '').trim().toLowerCase() !== normalizedDeviceId);
|
|
251
|
+
if (config.devices.length === before) {
|
|
252
|
+
throw new Error('Device not found in config');
|
|
253
|
+
}
|
|
254
|
+
await homebridge.updatePluginConfig(configArr);
|
|
255
|
+
if (typeof homebridge.savePluginConfig === 'function') {
|
|
256
|
+
await homebridge.savePluginConfig();
|
|
257
|
+
}
|
|
258
|
+
return { deleted: true, message: `Device removed from config` };
|
|
212
259
|
}
|
|
213
260
|
export async function deleteAllDevices() {
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
uiLog.info('Delete all response:', resp);
|
|
217
|
-
if (!resp || resp.success === false) {
|
|
218
|
-
throw new Error(resp?.data?.message || 'Failed to delete all devices');
|
|
261
|
+
if (typeof homebridge.getPluginConfig !== 'function' || typeof homebridge.updatePluginConfig !== 'function') {
|
|
262
|
+
throw new TypeError('Homebridge UI API not available');
|
|
219
263
|
}
|
|
220
|
-
|
|
264
|
+
const configArr = await homebridge.getPluginConfig();
|
|
265
|
+
const idx = Array.isArray(configArr) ? configArr.findIndex(isSwitchBotPlatformConfig) : -1;
|
|
266
|
+
if (idx === -1) {
|
|
267
|
+
throw new Error('SwitchBot config not found');
|
|
268
|
+
}
|
|
269
|
+
const config = configArr[idx];
|
|
270
|
+
if (!Array.isArray(config.devices)) {
|
|
271
|
+
throw new TypeError('No devices array in config');
|
|
272
|
+
}
|
|
273
|
+
const deletedCount = config.devices.length;
|
|
274
|
+
config.devices = [];
|
|
275
|
+
await homebridge.updatePluginConfig(configArr);
|
|
276
|
+
if (typeof homebridge.savePluginConfig === 'function') {
|
|
277
|
+
await homebridge.savePluginConfig();
|
|
278
|
+
}
|
|
279
|
+
return { deleted: true, deletedCount, message: `Removed ${deletedCount} device(s) from config` };
|
|
221
280
|
}
|
|
222
281
|
//# sourceMappingURL=api.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../../../src/homebridge-ui/public/js/api.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../../../src/homebridge-ui/public/js/api.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,26 @@
|
|
|
1
|
+
// Fetch the list of configured devices from the Homebridge UI API
|
|
1
2
|
import { isValidDeviceType, normalizeDeviceType } from '../../../device-types.js'
|
|
2
3
|
import './types.js'
|
|
3
4
|
import { uiLog } from './logger.js'
|
|
4
5
|
|
|
6
|
+
export async function fetchDevices(): Promise<any[]> {
|
|
7
|
+
try {
|
|
8
|
+
if (typeof homebridge.getPluginConfig !== 'function') {
|
|
9
|
+
throw new TypeError('Homebridge UI API not available')
|
|
10
|
+
}
|
|
11
|
+
const configArr = await homebridge.getPluginConfig()
|
|
12
|
+
const config = Array.isArray(configArr) && configArr.length > 0 ? configArr.find(isSwitchBotPlatformConfig) : null
|
|
13
|
+
if (!config || !Array.isArray(config.devices)) {
|
|
14
|
+
return []
|
|
15
|
+
}
|
|
16
|
+
return config.devices
|
|
17
|
+
} catch (e) {
|
|
18
|
+
const msg = e instanceof Error ? e.message : String(e)
|
|
19
|
+
uiLog.error('Error fetching devices:', msg)
|
|
20
|
+
return []
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
5
24
|
/**
|
|
6
25
|
* Validate and auto-correct device types in the config array before saving.
|
|
7
26
|
* Returns an array of errors for devices that cannot be fixed.
|
|
@@ -114,24 +133,6 @@ export async function saveCredentials(token: string, secret: string): Promise<an
|
|
|
114
133
|
return resp.data || resp
|
|
115
134
|
}
|
|
116
135
|
|
|
117
|
-
export async function fetchDevices(): Promise<any[]> {
|
|
118
|
-
try {
|
|
119
|
-
const resp = await homebridge.request('/devices', {})
|
|
120
|
-
if (!resp || resp.success === false) {
|
|
121
|
-
// Prefer backend error message if available
|
|
122
|
-
const backendMsg = resp?.data?.message || resp?.message
|
|
123
|
-
throw new Error(backendMsg || 'request failed')
|
|
124
|
-
}
|
|
125
|
-
return resp.data || []
|
|
126
|
-
} catch (e) {
|
|
127
|
-
// Show the real error to the user
|
|
128
|
-
const msg = e instanceof Error ? e.message : String(e)
|
|
129
|
-
uiLog.error('Error fetching devices:', msg)
|
|
130
|
-
// Optionally, show a toast or UI error here if needed
|
|
131
|
-
return []
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
|
|
135
136
|
export interface DiscoverRequestOptions {
|
|
136
137
|
bleEnabled?: boolean
|
|
137
138
|
bleScanDurationSeconds?: number
|
|
@@ -194,29 +195,45 @@ export async function addDevice(
|
|
|
194
195
|
type: string,
|
|
195
196
|
options?: { address?: string, model?: string, rssi?: number, encryptionKey?: string, keyId?: string },
|
|
196
197
|
): Promise<any> {
|
|
197
|
-
|
|
198
|
+
if (typeof homebridge.getPluginConfig !== 'function' || typeof homebridge.updatePluginConfig !== 'function') {
|
|
199
|
+
throw new TypeError('Homebridge UI API not available')
|
|
200
|
+
}
|
|
201
|
+
const configArr = await homebridge.getPluginConfig()
|
|
202
|
+
const idx = Array.isArray(configArr) ? configArr.findIndex(isSwitchBotPlatformConfig) : -1
|
|
203
|
+
if (idx === -1) {
|
|
204
|
+
throw new Error('SwitchBot config not found')
|
|
205
|
+
}
|
|
206
|
+
const config = configArr[idx]
|
|
207
|
+
if (!Array.isArray(config.devices)) {
|
|
208
|
+
config.devices = []
|
|
209
|
+
}
|
|
210
|
+
const normalizedDeviceId = String(deviceId).trim().toLowerCase()
|
|
211
|
+
const exists = config.devices.some((d: any) => String(d.deviceId ?? d.id ?? '').trim().toLowerCase() === normalizedDeviceId)
|
|
212
|
+
if (exists) {
|
|
213
|
+
return { alreadyExists: true, message: 'Device already in config' }
|
|
214
|
+
}
|
|
215
|
+
const newDevice: any = { deviceId, configDeviceName: name, configDeviceType: type }
|
|
198
216
|
if (options?.address) {
|
|
199
|
-
|
|
217
|
+
newDevice.address = options.address
|
|
200
218
|
}
|
|
201
219
|
if (options?.model) {
|
|
202
|
-
|
|
220
|
+
newDevice.model = options.model
|
|
203
221
|
}
|
|
204
222
|
if (options?.rssi !== undefined && options?.rssi !== null && options?.rssi !== 0) {
|
|
205
|
-
|
|
223
|
+
newDevice.rssi = options.rssi
|
|
206
224
|
}
|
|
207
225
|
if (options?.encryptionKey) {
|
|
208
|
-
|
|
226
|
+
newDevice.encryptionKey = options.encryptionKey
|
|
209
227
|
}
|
|
210
228
|
if (options?.keyId) {
|
|
211
|
-
|
|
229
|
+
newDevice.keyId = options.keyId
|
|
212
230
|
}
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
throw new Error(resp?.data?.message || 'Failed to add device')
|
|
231
|
+
config.devices.push(newDevice)
|
|
232
|
+
await homebridge.updatePluginConfig(configArr)
|
|
233
|
+
if (typeof homebridge.savePluginConfig === 'function') {
|
|
234
|
+
await homebridge.savePluginConfig()
|
|
218
235
|
}
|
|
219
|
-
return
|
|
236
|
+
return { added: true, message: `Device "${name}" added successfully` }
|
|
220
237
|
}
|
|
221
238
|
|
|
222
239
|
export async function addDevicesInBulk(
|
|
@@ -241,43 +258,85 @@ export async function updateDevice(
|
|
|
241
258
|
keyId?: string
|
|
242
259
|
room?: string
|
|
243
260
|
[key: string]: any
|
|
244
|
-
}
|
|
261
|
+
},
|
|
245
262
|
): Promise<any> {
|
|
246
|
-
|
|
263
|
+
if (typeof homebridge.getPluginConfig !== 'function' || typeof homebridge.updatePluginConfig !== 'function') {
|
|
264
|
+
throw new TypeError('Homebridge UI API not available')
|
|
265
|
+
}
|
|
266
|
+
const configArr = await homebridge.getPluginConfig()
|
|
267
|
+
const idx = Array.isArray(configArr) ? configArr.findIndex(isSwitchBotPlatformConfig) : -1
|
|
268
|
+
if (idx === -1) {
|
|
269
|
+
throw new Error('SwitchBot config not found')
|
|
270
|
+
}
|
|
271
|
+
const config = configArr[idx]
|
|
272
|
+
if (!Array.isArray(config.devices)) {
|
|
273
|
+
throw new TypeError('No devices array in config')
|
|
274
|
+
}
|
|
275
|
+
const normalizedDeviceId = String(deviceId).trim().toLowerCase()
|
|
276
|
+
const device = config.devices.find((d: any) => String(d.deviceId ?? d.id ?? '').trim().toLowerCase() === normalizedDeviceId)
|
|
277
|
+
if (!device) {
|
|
278
|
+
throw new Error('Device not found in config')
|
|
279
|
+
}
|
|
247
280
|
if (configDeviceName) {
|
|
248
|
-
|
|
281
|
+
device.configDeviceName = configDeviceName
|
|
249
282
|
}
|
|
250
283
|
if (configDeviceType) {
|
|
251
|
-
|
|
284
|
+
device.configDeviceType = configDeviceType
|
|
252
285
|
}
|
|
253
286
|
if (options) {
|
|
254
|
-
Object.assign(
|
|
287
|
+
Object.assign(device, options)
|
|
255
288
|
}
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
if (!resp || resp.success === false) {
|
|
260
|
-
throw new Error(resp?.data?.message || 'Failed to update device')
|
|
289
|
+
await homebridge.updatePluginConfig(configArr)
|
|
290
|
+
if (typeof homebridge.savePluginConfig === 'function') {
|
|
291
|
+
await homebridge.savePluginConfig()
|
|
261
292
|
}
|
|
262
|
-
return
|
|
293
|
+
return { updated: true, message: `Device updated successfully` }
|
|
263
294
|
}
|
|
264
295
|
|
|
265
296
|
export async function deleteDevice(deviceId: string): Promise<any> {
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
uiLog.info('Delete response:', resp)
|
|
269
|
-
if (!resp || resp.success === false) {
|
|
270
|
-
throw new Error(resp?.data?.message || 'Failed to delete device')
|
|
297
|
+
if (typeof homebridge.getPluginConfig !== 'function' || typeof homebridge.updatePluginConfig !== 'function') {
|
|
298
|
+
throw new TypeError('Homebridge UI API not available')
|
|
271
299
|
}
|
|
272
|
-
|
|
300
|
+
const configArr = await homebridge.getPluginConfig()
|
|
301
|
+
const idx = Array.isArray(configArr) ? configArr.findIndex(isSwitchBotPlatformConfig) : -1
|
|
302
|
+
if (idx === -1) {
|
|
303
|
+
throw new Error('SwitchBot config not found')
|
|
304
|
+
}
|
|
305
|
+
const config = configArr[idx]
|
|
306
|
+
if (!Array.isArray(config.devices)) {
|
|
307
|
+
throw new TypeError('No devices array in config')
|
|
308
|
+
}
|
|
309
|
+
const normalizedDeviceId = String(deviceId).trim().toLowerCase()
|
|
310
|
+
const before = config.devices.length
|
|
311
|
+
config.devices = config.devices.filter((d: any) => String(d.deviceId ?? d.id ?? '').trim().toLowerCase() !== normalizedDeviceId)
|
|
312
|
+
if (config.devices.length === before) {
|
|
313
|
+
throw new Error('Device not found in config')
|
|
314
|
+
}
|
|
315
|
+
await homebridge.updatePluginConfig(configArr)
|
|
316
|
+
if (typeof homebridge.savePluginConfig === 'function') {
|
|
317
|
+
await homebridge.savePluginConfig()
|
|
318
|
+
}
|
|
319
|
+
return { deleted: true, message: `Device removed from config` }
|
|
273
320
|
}
|
|
274
321
|
|
|
275
322
|
export async function deleteAllDevices(): Promise<any> {
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
uiLog.info('Delete all response:', resp)
|
|
279
|
-
if (!resp || resp.success === false) {
|
|
280
|
-
throw new Error(resp?.data?.message || 'Failed to delete all devices')
|
|
323
|
+
if (typeof homebridge.getPluginConfig !== 'function' || typeof homebridge.updatePluginConfig !== 'function') {
|
|
324
|
+
throw new TypeError('Homebridge UI API not available')
|
|
281
325
|
}
|
|
282
|
-
|
|
326
|
+
const configArr = await homebridge.getPluginConfig()
|
|
327
|
+
const idx = Array.isArray(configArr) ? configArr.findIndex(isSwitchBotPlatformConfig) : -1
|
|
328
|
+
if (idx === -1) {
|
|
329
|
+
throw new Error('SwitchBot config not found')
|
|
330
|
+
}
|
|
331
|
+
const config = configArr[idx]
|
|
332
|
+
if (!Array.isArray(config.devices)) {
|
|
333
|
+
throw new TypeError('No devices array in config')
|
|
334
|
+
}
|
|
335
|
+
const deletedCount = config.devices.length
|
|
336
|
+
config.devices = []
|
|
337
|
+
await homebridge.updatePluginConfig(configArr)
|
|
338
|
+
if (typeof homebridge.savePluginConfig === 'function') {
|
|
339
|
+
await homebridge.savePluginConfig()
|
|
340
|
+
}
|
|
341
|
+
return { deleted: true, deletedCount, message: `Removed ${deletedCount} device(s) from config` }
|
|
283
342
|
}
|