@switchbot/homebridge-switchbot 4.0.0-beta.3 → 4.0.0-beta.5
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/config.schema.json +9938 -2768
- package/dist/platform.d.ts.map +1 -1
- package/dist/platform.js +47 -16
- package/dist/platform.js.map +1 -1
- package/dist/settings.d.ts +6 -0
- package/dist/settings.d.ts.map +1 -1
- package/dist/settings.js.map +1 -1
- package/nodemon.json +2 -2
- package/package.json +1 -1
- package/src/platform.ts +58 -17
- package/src/settings.ts +2 -0
package/dist/platform.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAEvC,OAAO,KAAK,EAAE,GAAG,EAAE,qBAAqB,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AACxF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,MAAM,CAAA;AAEtC,OAAO,KAAK,EAAkC,aAAa,EAAE,eAAe,EAAW,uBAAuB,EAAE,MAAM,eAAe,CAAA;AAarI,OAAO,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAEvH,OAAO,EAAY,YAAY,EAAkB,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAiCzF;;;;GAIG;AACH,qBAAa,iBAAkB,YAAW,qBAAqB;IAEtD,WAAW,EAAE,iBAAiB,EAAE,CAAK;IAC5C,SAAgB,GAAG,EAAE,GAAG,CAAA;IACxB,SAAgB,GAAG,EAAE,OAAO,CAAA;IAG5B,OAAO,EAAG,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,SAAS,EAAG,OAAO,CAAA;IACnB,UAAU,EAAG,MAAM,CAAA;IACnB,mBAAmB,EAAG,MAAM,CAAA;IAC5B,cAAc,EAAG,uBAAuB,CAAC,SAAS,CAAC,CAAA;IACnD,eAAe,EAAG,uBAAuB,CAAC,SAAS,CAAC,CAAA;IACpD,MAAM,EAAG,uBAAuB,CAAA;IAGhC,UAAU,EAAE,UAAU,GAAG,IAAI,CAAO;IACpC,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAO;IAG1C,YAAY,EAAG,gBAAgB,CAAA;IAC/B,YAAY,EAAG,YAAY,CAAA;IAG3B,SAAgB,GAAG,EAAE,GAAG,CAAA;IACxB,SAAgB,WAAW,EAAE,GAAG,CAAA;IAGhC,SAAgB,mBAAmB,EAAE;QAAE,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,OAAO,EAAE,GAAG,KAAK,IAAI,CAAA;KAAE,CAAK;IACjF,SAAgB,eAAe,EAAE;QAAE,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,OAAO,EAAE,GAAG,KAAK,IAAI,CAAA;KAAE,CAAK;gBAG3E,GAAG,EAAE,OAAO,EACZ,MAAM,EAAE,uBAAuB,EAC/B,GAAG,EAAE,GAAG;
|
|
1
|
+
{"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"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"}
|
package/dist/platform.js
CHANGED
|
@@ -80,6 +80,7 @@ export class SwitchBotPlatform {
|
|
|
80
80
|
credentials: config.credentials,
|
|
81
81
|
options: config.options,
|
|
82
82
|
devices: config.devices,
|
|
83
|
+
deviceConfig: config.deviceConfig,
|
|
83
84
|
};
|
|
84
85
|
// Plugin Configuration
|
|
85
86
|
this.getPlatformLogSettings();
|
|
@@ -470,7 +471,7 @@ export class SwitchBotPlatform {
|
|
|
470
471
|
return (apiStatusCode === 200 || apiStatusCode === 100);
|
|
471
472
|
}
|
|
472
473
|
async handleDevices(deviceLists) {
|
|
473
|
-
if (!this.config.options?.devices) {
|
|
474
|
+
if (!this.config.options?.devices && !this.config.options?.deviceConfig) {
|
|
474
475
|
await this.debugLog(`SwitchBot Device Config Not Set: ${JSON.stringify(this.config.options?.devices)}`);
|
|
475
476
|
if (deviceLists.length === 0) {
|
|
476
477
|
await this.debugLog('SwitchBot API Has No Devices With Cloud Services Enabled');
|
|
@@ -486,29 +487,39 @@ export class SwitchBotPlatform {
|
|
|
486
487
|
}
|
|
487
488
|
}
|
|
488
489
|
}
|
|
489
|
-
else {
|
|
490
|
+
else if (this.config.options?.devices || this.config.options?.deviceConfig) {
|
|
490
491
|
await this.debugLog(`SwitchBot Device Config Set: ${JSON.stringify(this.config.options?.devices)}`);
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
for (const device of devices) {
|
|
492
|
+
// Step 1: Check and assign configDeviceType to deviceType if deviceType is not present
|
|
493
|
+
const devicesWithTypeConfigPromises = deviceLists.map(async (device) => {
|
|
494
494
|
if (!device.deviceType && device.configDeviceType) {
|
|
495
495
|
device.deviceType = device.configDeviceType;
|
|
496
496
|
await this.warnLog(`API is displaying no deviceType: ${device.deviceType}, So using configDeviceType: ${device.configDeviceType}`);
|
|
497
497
|
}
|
|
498
498
|
else if (!device.deviceType && !device.configDeviceName) {
|
|
499
499
|
await this.errorLog('No deviceType or configDeviceType for device. No device will be created.');
|
|
500
|
+
return null; // Skip this device
|
|
500
501
|
}
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
502
|
+
// Retrieve deviceTypeConfig for each device and merge it
|
|
503
|
+
const deviceTypeConfig = this.config.options?.deviceConfig?.[device.deviceType] || {};
|
|
504
|
+
return Object.assign({}, device, deviceTypeConfig);
|
|
505
|
+
});
|
|
506
|
+
// Wait for all promises to resolve
|
|
507
|
+
const devicesWithTypeConfig = (await Promise.all(devicesWithTypeConfigPromises)).filter(device => device !== null); // Filter out skipped devices
|
|
508
|
+
const devices = this.mergeByDeviceId(this.config.options.devices ?? [], devicesWithTypeConfig ?? []);
|
|
509
|
+
await this.debugLog(`SwitchBot Devices: ${JSON.stringify(devices)}`);
|
|
510
|
+
for (const device of devices) {
|
|
511
|
+
const deviceIdConfig = this.config.options?.devices?.[device.deviceId] || {};
|
|
512
|
+
const deviceWithConfig = Object.assign({}, device, deviceIdConfig);
|
|
513
|
+
if (device.configDeviceName) {
|
|
514
|
+
device.deviceName = device.configDeviceName;
|
|
506
515
|
}
|
|
516
|
+
// Pass the merged device object to createDevice
|
|
517
|
+
await this.createDevice(deviceWithConfig);
|
|
507
518
|
}
|
|
508
519
|
}
|
|
509
520
|
}
|
|
510
521
|
async handleIRDevices(irDeviceLists) {
|
|
511
|
-
if (!this.config.options?.irdevices) {
|
|
522
|
+
if (!this.config.options?.irdevices && !this.config.options?.irdeviceConfig) {
|
|
512
523
|
await this.debugLog(`IR Device Config Not Set: ${JSON.stringify(this.config.options?.irdevices)}`);
|
|
513
524
|
for (const device of irDeviceLists) {
|
|
514
525
|
if (device.remoteType) {
|
|
@@ -516,12 +527,33 @@ export class SwitchBotPlatform {
|
|
|
516
527
|
}
|
|
517
528
|
}
|
|
518
529
|
}
|
|
519
|
-
else {
|
|
530
|
+
else if (this.config.options?.irdevices || this.config.options?.irdeviceConfig) {
|
|
520
531
|
await this.debugLog(`IR Device Config Set: ${JSON.stringify(this.config.options?.irdevices)}`);
|
|
521
|
-
|
|
532
|
+
// Step 1: Check and assign configRemoteType to remoteType if remoteType is not present
|
|
533
|
+
const devicesWithTypeConfigPromises = irDeviceLists.map(async (device) => {
|
|
534
|
+
if (!device.remoteType && device.configRemoteType) {
|
|
535
|
+
device.remoteType = device.configRemoteType;
|
|
536
|
+
await this.warnLog(`API is displaying no remoteType: ${device.remoteType}, So using configRemoteType: ${device.configRemoteType}`);
|
|
537
|
+
}
|
|
538
|
+
else if (!device.remoteType && !device.configDeviceName) {
|
|
539
|
+
await this.errorLog('No remoteType or configRemoteType for device. No device will be created.');
|
|
540
|
+
return null; // Skip this device
|
|
541
|
+
}
|
|
542
|
+
// Retrieve remoteTypeConfig for each device and merge it
|
|
543
|
+
const remoteTypeConfig = this.config.options?.irdeviceConfig?.[device.remoteType] || {};
|
|
544
|
+
return Object.assign({}, device, remoteTypeConfig);
|
|
545
|
+
});
|
|
546
|
+
// Wait for all promises to resolve
|
|
547
|
+
const devicesWithRemoteTypeConfig = (await Promise.all(devicesWithTypeConfigPromises)).filter(device => device !== null); // Filter out skipped devices
|
|
548
|
+
const devices = this.mergeByDeviceId(this.config.options.irdevices ?? [], devicesWithRemoteTypeConfig ?? []);
|
|
522
549
|
await this.debugLog(`IR Devices: ${JSON.stringify(devices)}`);
|
|
523
550
|
for (const device of devices) {
|
|
524
|
-
|
|
551
|
+
const irdeviceIdConfig = this.config.options?.irdevices?.[device.deviceId] || {};
|
|
552
|
+
const irdeviceWithConfig = Object.assign({}, device, irdeviceIdConfig);
|
|
553
|
+
if (device.configDeviceName) {
|
|
554
|
+
device.deviceName = device.configDeviceName;
|
|
555
|
+
}
|
|
556
|
+
await this.createIRDevice(irdeviceWithConfig);
|
|
525
557
|
}
|
|
526
558
|
}
|
|
527
559
|
}
|
|
@@ -573,10 +605,9 @@ export class SwitchBotPlatform {
|
|
|
573
605
|
'Strip Light': this.createStripLight.bind(this),
|
|
574
606
|
'Battery Circulator Fan': this.createFan.bind(this),
|
|
575
607
|
};
|
|
576
|
-
const deviceConfig = this.config.options?.deviceConfig?.[device.deviceType] || {};
|
|
577
608
|
if (deviceTypeHandlers[device.deviceType]) {
|
|
578
609
|
await this.debugLog(`Discovered ${device.deviceType}: ${device.deviceId}`);
|
|
579
|
-
await deviceTypeHandlers[device.deviceType](
|
|
610
|
+
await deviceTypeHandlers[device.deviceType](device);
|
|
580
611
|
}
|
|
581
612
|
else if (['Hub Mini', 'Hub Plus', 'Remote', 'Indoor Cam', 'remote with screen'].includes(device.deviceType)) {
|
|
582
613
|
await this.debugLog(`Discovered ${device.deviceType}: ${device.deviceId}, is currently not supported, device: ${JSON.stringify(device)}`);
|