@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/settings.d.ts
CHANGED
|
@@ -12,6 +12,9 @@ export declare const PLUGIN_NAME = "@switchbot/homebridge-switchbot";
|
|
|
12
12
|
export interface SwitchBotPlatformConfig extends PlatformConfig {
|
|
13
13
|
credentials?: credentials;
|
|
14
14
|
options?: options;
|
|
15
|
+
deviceConfig?: {
|
|
16
|
+
[deviceType: string]: devicesConfig;
|
|
17
|
+
};
|
|
15
18
|
}
|
|
16
19
|
interface credentials {
|
|
17
20
|
token?: string;
|
|
@@ -24,6 +27,9 @@ export interface options {
|
|
|
24
27
|
[deviceType: string]: devicesConfig;
|
|
25
28
|
};
|
|
26
29
|
irdevices?: irDevicesConfig[];
|
|
30
|
+
irdeviceConfig?: {
|
|
31
|
+
[remoteType: string]: irDevicesConfig;
|
|
32
|
+
};
|
|
27
33
|
allowInvalidCharacters?: boolean;
|
|
28
34
|
mqttURL?: string;
|
|
29
35
|
mqttOptions?: IClientOptions;
|
package/dist/settings.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAChD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAKhD,OAAO,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,iBAAiB,EAAE,6BAA6B,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAA;AAC/H;;GAEG;AACH,eAAO,MAAM,aAAa,cAAc,CAAA;AAExC;;GAEG;AACH,eAAO,MAAM,WAAW,oCAAoC,CAAA;AAG5D,MAAM,WAAW,uBAAwB,SAAQ,cAAc;IAC7D,WAAW,CAAC,EAAE,WAAW,CAAA;IACzB,OAAO,CAAC,EAAE,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"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"}
|
package/dist/settings.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings.js","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"AAWA;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,WAAW,CAAA;AAExC;;GAEG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,iCAAiC,CAAA;
|
|
1
|
+
{"version":3,"file":"settings.js","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"AAWA;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,WAAW,CAAA;AAExC;;GAEG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,iCAAiC,CAAA;AAkC3D,CAAC;AA2CD,CAAC;AAOD,CAAC;AAOD,CAAC;AAOD,CAAC;AAcD,CAAC;AAeD,CAAC;AAQD,CAAC;AAOD,CAAC;AAMD,CAAC;AAMD,CAAC;AAMD,CAAC;AAMD,CAAC;AAMD,CAAC;AAUD,CAAC;AA6BD,CAAC;AAKD,CAAC;AAYD,CAAC;AAKD,CAAC"}
|
package/nodemon.json
CHANGED
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@switchbot/homebridge-switchbot",
|
|
3
3
|
"displayName": "SwitchBot",
|
|
4
4
|
"type": "module",
|
|
5
|
-
"version": "4.0.0-beta.
|
|
5
|
+
"version": "4.0.0-beta.5",
|
|
6
6
|
"description": "The SwitchBot plugin allows you to access your SwitchBot device(s) from HomeKit.",
|
|
7
7
|
"author": "SwitchBot <support@wondertechlabs.com> (https://github.com/SwitchBot)",
|
|
8
8
|
"contributors": [
|
package/src/platform.ts
CHANGED
|
@@ -113,6 +113,7 @@ export class SwitchBotPlatform implements DynamicPlatformPlugin {
|
|
|
113
113
|
credentials: config.credentials as object,
|
|
114
114
|
options: config.options as object,
|
|
115
115
|
devices: config.devices as { deviceId: string }[],
|
|
116
|
+
deviceConfig: config.deviceConfig as { [deviceType: string]: devicesConfig },
|
|
116
117
|
}
|
|
117
118
|
|
|
118
119
|
// Plugin Configuration
|
|
@@ -510,7 +511,7 @@ export class SwitchBotPlatform implements DynamicPlatformPlugin {
|
|
|
510
511
|
}
|
|
511
512
|
|
|
512
513
|
private async handleDevices(deviceLists: any[]) {
|
|
513
|
-
if (!this.config.options?.devices) {
|
|
514
|
+
if (!this.config.options?.devices && !this.config.options?.deviceConfig) {
|
|
514
515
|
await this.debugLog(`SwitchBot Device Config Not Set: ${JSON.stringify(this.config.options?.devices)}`)
|
|
515
516
|
if (deviceLists.length === 0) {
|
|
516
517
|
await this.debugLog('SwitchBot API Has No Devices With Cloud Services Enabled')
|
|
@@ -524,41 +525,83 @@ export class SwitchBotPlatform implements DynamicPlatformPlugin {
|
|
|
524
525
|
}
|
|
525
526
|
}
|
|
526
527
|
}
|
|
527
|
-
} else {
|
|
528
|
+
} else if (this.config.options?.devices || this.config.options?.deviceConfig) {
|
|
528
529
|
await this.debugLog(`SwitchBot Device Config Set: ${JSON.stringify(this.config.options?.devices)}`)
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
530
|
+
|
|
531
|
+
// Step 1: Check and assign configDeviceType to deviceType if deviceType is not present
|
|
532
|
+
const devicesWithTypeConfigPromises = deviceLists.map(async (device) => {
|
|
532
533
|
if (!device.deviceType && device.configDeviceType) {
|
|
533
534
|
device.deviceType = device.configDeviceType
|
|
534
535
|
await this.warnLog(`API is displaying no deviceType: ${device.deviceType}, So using configDeviceType: ${device.configDeviceType}`)
|
|
535
536
|
} else if (!device.deviceType && !device.configDeviceName) {
|
|
536
537
|
await this.errorLog('No deviceType or configDeviceType for device. No device will be created.')
|
|
538
|
+
return null // Skip this device
|
|
537
539
|
}
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
540
|
+
|
|
541
|
+
// Retrieve deviceTypeConfig for each device and merge it
|
|
542
|
+
const deviceTypeConfig = this.config.options?.deviceConfig?.[device.deviceType] || {}
|
|
543
|
+
return Object.assign({}, device, deviceTypeConfig)
|
|
544
|
+
})
|
|
545
|
+
|
|
546
|
+
// Wait for all promises to resolve
|
|
547
|
+
const devicesWithTypeConfig = (await Promise.all(devicesWithTypeConfigPromises)).filter(device => device !== null) // Filter out skipped devices
|
|
548
|
+
|
|
549
|
+
const devices = this.mergeByDeviceId(this.config.options.devices ?? [], devicesWithTypeConfig ?? [])
|
|
550
|
+
|
|
551
|
+
await this.debugLog(`SwitchBot Devices: ${JSON.stringify(devices)}`)
|
|
552
|
+
|
|
553
|
+
for (const device of devices) {
|
|
554
|
+
const deviceIdConfig = this.config.options?.devices?.[device.deviceId] || {}
|
|
555
|
+
const deviceWithConfig = Object.assign({}, device, deviceIdConfig)
|
|
556
|
+
|
|
557
|
+
if (device.configDeviceName) {
|
|
558
|
+
device.deviceName = device.configDeviceName
|
|
543
559
|
}
|
|
560
|
+
// Pass the merged device object to createDevice
|
|
561
|
+
await this.createDevice(deviceWithConfig)
|
|
544
562
|
}
|
|
545
563
|
}
|
|
546
564
|
}
|
|
547
565
|
|
|
548
566
|
private async handleIRDevices(irDeviceLists: any[]) {
|
|
549
|
-
if (!this.config.options?.irdevices) {
|
|
567
|
+
if (!this.config.options?.irdevices && !this.config.options?.irdeviceConfig) {
|
|
550
568
|
await this.debugLog(`IR Device Config Not Set: ${JSON.stringify(this.config.options?.irdevices)}`)
|
|
551
569
|
for (const device of irDeviceLists) {
|
|
552
570
|
if (device.remoteType) {
|
|
553
571
|
await this.createIRDevice(device)
|
|
554
572
|
}
|
|
555
573
|
}
|
|
556
|
-
} else {
|
|
574
|
+
} else if (this.config.options?.irdevices || this.config.options?.irdeviceConfig) {
|
|
557
575
|
await this.debugLog(`IR Device Config Set: ${JSON.stringify(this.config.options?.irdevices)}`)
|
|
558
|
-
|
|
576
|
+
|
|
577
|
+
// Step 1: Check and assign configRemoteType to remoteType if remoteType is not present
|
|
578
|
+
const devicesWithTypeConfigPromises = irDeviceLists.map(async (device) => {
|
|
579
|
+
if (!device.remoteType && device.configRemoteType) {
|
|
580
|
+
device.remoteType = device.configRemoteType
|
|
581
|
+
await this.warnLog(`API is displaying no remoteType: ${device.remoteType}, So using configRemoteType: ${device.configRemoteType}`)
|
|
582
|
+
} else if (!device.remoteType && !device.configDeviceName) {
|
|
583
|
+
await this.errorLog('No remoteType or configRemoteType for device. No device will be created.')
|
|
584
|
+
return null // Skip this device
|
|
585
|
+
}
|
|
586
|
+
|
|
587
|
+
// Retrieve remoteTypeConfig for each device and merge it
|
|
588
|
+
const remoteTypeConfig = this.config.options?.irdeviceConfig?.[device.remoteType] || {}
|
|
589
|
+
return Object.assign({}, device, remoteTypeConfig)
|
|
590
|
+
})
|
|
591
|
+
// Wait for all promises to resolve
|
|
592
|
+
const devicesWithRemoteTypeConfig = (await Promise.all(devicesWithTypeConfigPromises)).filter(device => device !== null) // Filter out skipped devices
|
|
593
|
+
|
|
594
|
+
const devices = this.mergeByDeviceId(this.config.options.irdevices ?? [], devicesWithRemoteTypeConfig ?? [])
|
|
595
|
+
|
|
559
596
|
await this.debugLog(`IR Devices: ${JSON.stringify(devices)}`)
|
|
560
597
|
for (const device of devices) {
|
|
561
|
-
|
|
598
|
+
const irdeviceIdConfig = this.config.options?.irdevices?.[device.deviceId] || {}
|
|
599
|
+
const irdeviceWithConfig = Object.assign({}, device, irdeviceIdConfig)
|
|
600
|
+
|
|
601
|
+
if (device.configDeviceName) {
|
|
602
|
+
device.deviceName = device.configDeviceName
|
|
603
|
+
}
|
|
604
|
+
await this.createIRDevice(irdeviceWithConfig)
|
|
562
605
|
}
|
|
563
606
|
}
|
|
564
607
|
}
|
|
@@ -614,11 +657,9 @@ export class SwitchBotPlatform implements DynamicPlatformPlugin {
|
|
|
614
657
|
'Battery Circulator Fan': this.createFan.bind(this),
|
|
615
658
|
}
|
|
616
659
|
|
|
617
|
-
const deviceConfig = this.config.options?.deviceConfig?.[device.deviceType] || {}
|
|
618
|
-
|
|
619
660
|
if (deviceTypeHandlers[device.deviceType!]) {
|
|
620
661
|
await this.debugLog(`Discovered ${device.deviceType}: ${device.deviceId}`)
|
|
621
|
-
await deviceTypeHandlers[device.deviceType!](
|
|
662
|
+
await deviceTypeHandlers[device.deviceType!](device)
|
|
622
663
|
} else if (['Hub Mini', 'Hub Plus', 'Remote', 'Indoor Cam', 'remote with screen'].includes(device.deviceType!)) {
|
|
623
664
|
await this.debugLog(`Discovered ${device.deviceType}: ${device.deviceId}, is currently not supported, device: ${JSON.stringify(device)}`)
|
|
624
665
|
} else {
|
package/src/settings.ts
CHANGED
|
@@ -23,6 +23,7 @@ export const PLUGIN_NAME = '@switchbot/homebridge-switchbot'
|
|
|
23
23
|
export interface SwitchBotPlatformConfig extends PlatformConfig {
|
|
24
24
|
credentials?: credentials
|
|
25
25
|
options?: options
|
|
26
|
+
deviceConfig?: { [deviceType: string]: devicesConfig }
|
|
26
27
|
}
|
|
27
28
|
interface credentials {
|
|
28
29
|
token?: string
|
|
@@ -34,6 +35,7 @@ export interface options {
|
|
|
34
35
|
devices?: devicesConfig[]
|
|
35
36
|
deviceConfig?: { [deviceType: string]: devicesConfig }
|
|
36
37
|
irdevices?: irDevicesConfig[]
|
|
38
|
+
irdeviceConfig?: { [remoteType: string]: irDevicesConfig }
|
|
37
39
|
allowInvalidCharacters?: boolean
|
|
38
40
|
mqttURL?: string
|
|
39
41
|
mqttOptions?: IClientOptions
|