@switchbot/homebridge-switchbot 3.7.1-beta.24 → 3.7.1-beta.26
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/device/bot.d.ts.map +1 -1
- package/dist/device/bot.js +34 -38
- package/dist/device/bot.js.map +1 -1
- package/dist/device/curtain.d.ts.map +1 -1
- package/dist/device/curtain.js +16 -30
- package/dist/device/curtain.js.map +1 -1
- package/dist/platform.js +1 -1
- package/dist/platform.js.map +1 -1
- package/package.json +1 -1
- package/src/device/bot.ts +32 -40
- package/src/device/curtain.ts +15 -27
- package/src/platform.ts +1 -1
- package/dist/device/bot-old.d.ts +0 -132
- package/dist/device/bot-old.d.ts.map +0 -1
- package/dist/device/bot-old.js +0 -1482
- package/dist/device/bot-old.js.map +0 -1
- package/src/device/bot-old.ts +0 -1540
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@switchbot/homebridge-switchbot",
|
|
3
3
|
"displayName": "SwitchBot",
|
|
4
4
|
"type": "module",
|
|
5
|
-
"version": "3.7.1-beta.
|
|
5
|
+
"version": "3.7.1-beta.26",
|
|
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/device/bot.ts
CHANGED
|
@@ -775,13 +775,8 @@ export class Bot extends deviceBase {
|
|
|
775
775
|
* Handle requests to set the "On" characteristic
|
|
776
776
|
*/
|
|
777
777
|
async OnSet(value: CharacteristicValue): Promise<void> {
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
this.accessory.context.On = this.On
|
|
781
|
-
} else {
|
|
782
|
-
this.On = this.accessory.context.On
|
|
783
|
-
}
|
|
784
|
-
|
|
778
|
+
this.On = this.accessory.context.On ?? false
|
|
779
|
+
this.accessory.context.On = this.On
|
|
785
780
|
const deviceTypeActions: { [key: string]: () => Promise<void> } = {
|
|
786
781
|
switch: async () => {
|
|
787
782
|
if (this.Switch) {
|
|
@@ -842,10 +837,8 @@ export class Bot extends deviceBase {
|
|
|
842
837
|
}
|
|
843
838
|
},
|
|
844
839
|
}
|
|
845
|
-
|
|
846
840
|
const action = deviceTypeActions[this.botDeviceType] || deviceTypeActions.default
|
|
847
841
|
await action()
|
|
848
|
-
|
|
849
842
|
this.accessory.context.On = this.On
|
|
850
843
|
this.doBotUpdate.next()
|
|
851
844
|
}
|
|
@@ -1135,48 +1128,47 @@ export class Bot extends deviceBase {
|
|
|
1135
1128
|
|
|
1136
1129
|
async getBotConfigSettings(device: device & devicesConfig) {
|
|
1137
1130
|
// Bot Device Type
|
|
1138
|
-
this.botDeviceType =
|
|
1139
|
-
|
|
1140
|
-
:
|
|
1141
|
-
|
|
1142
|
-
? `Using Device Type: ${this.botDeviceType}, from Accessory Cache.`
|
|
1143
|
-
: device.bot?.deviceType
|
|
1144
|
-
? `Using Device Type: ${this.botDeviceType}`
|
|
1145
|
-
: `No Device Type Set, deviceType: ${this.device.bot?.deviceType}, Using default deviceType: ${this.botDeviceType}`
|
|
1131
|
+
this.botDeviceType = device.bot?.deviceType ?? 'outlet'
|
|
1132
|
+
const botDeviceType = device.bot?.deviceType
|
|
1133
|
+
? `Using Device Type: ${this.botDeviceType}`
|
|
1134
|
+
: `No Device Type Set, deviceType: ${this.device.bot?.deviceType}, Using default deviceType: ${this.botDeviceType}`
|
|
1146
1135
|
await this.debugWarnLog(botDeviceType)
|
|
1147
1136
|
this.accessory.context.botDeviceType = this.botDeviceType
|
|
1148
1137
|
// Bot Mode
|
|
1149
|
-
this.botMode =
|
|
1150
|
-
|
|
1151
|
-
|
|
1152
|
-
|
|
1153
|
-
|
|
1138
|
+
this.botMode = device.bot?.mode ?? 'switch'
|
|
1139
|
+
if (!device.bot?.mode) {
|
|
1140
|
+
this.botMode = 'switch'
|
|
1141
|
+
this.warnLog(`${this.device.deviceType}: ${this.accessory.displayName} does not have bot mode set in the Plugin's SwitchBot Device Settings, defaulting to "${this.botMode}" mode. You may experience issues.`)
|
|
1142
|
+
} else if (['switch', 'press', 'multipress'].includes(device.bot.mode)) {
|
|
1143
|
+
this.botMode = device.bot.mode
|
|
1144
|
+
this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Using Bot Mode: ${this.botMode}`)
|
|
1145
|
+
} else {
|
|
1146
|
+
throw new Error(`${this.device.deviceType}: ${this.accessory.displayName} Invalid Bot Mode: ${device.bot.mode}`)
|
|
1147
|
+
}
|
|
1148
|
+
const botModeLog = device.bot?.mode
|
|
1149
|
+
? `Using Bot Mode: ${this.botMode}`
|
|
1150
|
+
: `No Bot Mode Set, Using default Bot Mode: ${this.botMode}`
|
|
1151
|
+
await this.debugWarnLog(botModeLog)
|
|
1154
1152
|
this.accessory.context.botMode = this.botMode
|
|
1155
1153
|
// Bot Double Press
|
|
1156
|
-
this.doublePress =
|
|
1157
|
-
const doublePress =
|
|
1158
|
-
? `Using Double Press: ${this.doublePress}
|
|
1159
|
-
:
|
|
1160
|
-
? `Using Double Press: ${this.doublePress}`
|
|
1161
|
-
: `No Double Press Set, Using default Double Press: ${this.doublePress}`
|
|
1154
|
+
this.doublePress = device.bot?.doublePress ?? 1
|
|
1155
|
+
const doublePress = device.bot?.doublePress
|
|
1156
|
+
? `Using Double Press: ${this.doublePress}`
|
|
1157
|
+
: `No Double Press Set, Using default Double Press: ${this.doublePress}`
|
|
1162
1158
|
await this.debugWarnLog(doublePress)
|
|
1163
1159
|
this.accessory.context.doublePress = this.doublePress
|
|
1164
1160
|
// Bot Press PushRate
|
|
1165
|
-
this.pushRatePress =
|
|
1166
|
-
const pushRatePress =
|
|
1167
|
-
? `Using Push Rate Press: ${this.pushRatePress}
|
|
1168
|
-
:
|
|
1169
|
-
? `Using Bot Push Rate Press: ${this.pushRatePress}`
|
|
1170
|
-
: `No Push Rate Press Set, Using default Push Rate Press: ${this.pushRatePress}`
|
|
1161
|
+
this.pushRatePress = device.bot?.pushRatePress ?? 15
|
|
1162
|
+
const pushRatePress = device.bot?.pushRatePress
|
|
1163
|
+
? `Using Bot Push Rate Press: ${this.pushRatePress}`
|
|
1164
|
+
: `No Push Rate Press Set, Using default Push Rate Press: ${this.pushRatePress}`
|
|
1171
1165
|
await this.debugWarnLog(pushRatePress)
|
|
1172
1166
|
this.accessory.context.pushRatePress = this.pushRatePress
|
|
1173
1167
|
// Bot Allow Push
|
|
1174
|
-
this.allowPush =
|
|
1175
|
-
const allowPush =
|
|
1176
|
-
? `Using Allow Push: ${this.allowPush}
|
|
1177
|
-
:
|
|
1178
|
-
? `Using Allow Push: ${this.allowPush}`
|
|
1179
|
-
: `No Allow Push Set, Using default Allow Push: ${this.allowPush}`
|
|
1168
|
+
this.allowPush = device.bot?.allowPush ?? false
|
|
1169
|
+
const allowPush = device.bot?.allowPush
|
|
1170
|
+
? `Using Allow Push: ${this.allowPush}`
|
|
1171
|
+
: `No Allow Push Set, Using default Allow Push: ${this.allowPush}`
|
|
1180
1172
|
await this.debugWarnLog(allowPush)
|
|
1181
1173
|
this.accessory.context.allowPush = this.allowPush
|
|
1182
1174
|
// Bot Multi Press Count
|
package/src/device/curtain.ts
CHANGED
|
@@ -191,19 +191,13 @@ export class Curtain extends deviceBase {
|
|
|
191
191
|
}
|
|
192
192
|
} else {
|
|
193
193
|
accessory.context.OpenModeSwitch = accessory.context.OpenModeSwitch ?? {}
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
} else {
|
|
202
|
-
this.OpenModeSwitch = {
|
|
203
|
-
Name: `${accessory.displayName} Silent Open Mode`,
|
|
204
|
-
Service: accessory.addService(this.hap.Service.Switch, this.OpenModeSwitch?.Name, this.OpenModeSwitch?.Name) as Service,
|
|
205
|
-
On: accessory.context.OpenModeSwitch.On ?? false,
|
|
206
|
-
}
|
|
194
|
+
this.debugLog('Adding Open Mode Switch Service')
|
|
195
|
+
const name = `${accessory.displayName} Silent Open Mode`
|
|
196
|
+
const uuid = this.api.hap.uuid.generate(name)
|
|
197
|
+
this.OpenModeSwitch = {
|
|
198
|
+
Name: name,
|
|
199
|
+
Service: accessory.getService(name) ?? accessory.addService(this.hap.Service.Switch, name, uuid) as Service,
|
|
200
|
+
On: accessory.context.OpenModeSwitch.On ?? false,
|
|
207
201
|
}
|
|
208
202
|
accessory.context.OpenModeSwitch = this.OpenModeSwitch as object
|
|
209
203
|
|
|
@@ -225,19 +219,13 @@ export class Curtain extends deviceBase {
|
|
|
225
219
|
}
|
|
226
220
|
} else {
|
|
227
221
|
accessory.context.CloseModeSwitch = accessory.context.CloseModeSwitch ?? {}
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
} else {
|
|
236
|
-
this.CloseModeSwitch = {
|
|
237
|
-
Name: `${accessory.displayName} Silent Close Mode`,
|
|
238
|
-
Service: accessory.addService(this.hap.Service.Switch, this.CloseModeSwitch?.Name, this.CloseModeSwitch?.Name) as Service,
|
|
239
|
-
On: accessory.context.CloseModeSwitch.On ?? false,
|
|
240
|
-
}
|
|
222
|
+
this.debugLog('Adding Close Mode Switch Service')
|
|
223
|
+
const name = `${accessory.displayName} Silent Close Mode`
|
|
224
|
+
const uuid = this.api.hap.uuid.generate(name)
|
|
225
|
+
this.CloseModeSwitch = {
|
|
226
|
+
Name: name,
|
|
227
|
+
Service: this.accessory.getService(name) ?? accessory.addService(this.hap.Service.Switch, name, uuid) as Service,
|
|
228
|
+
On: accessory.context.CloseModeSwitch.On ?? false,
|
|
241
229
|
}
|
|
242
230
|
accessory.context.CloseModeSwitch = this.CloseModeSwitch as object
|
|
243
231
|
|
|
@@ -330,7 +318,7 @@ export class Curtain extends deviceBase {
|
|
|
330
318
|
/*
|
|
331
319
|
* Setup EVE history features for curtain devices.
|
|
332
320
|
*/
|
|
333
|
-
async setupHistoryService(): Promise
|
|
321
|
+
async setupHistoryService(): Promise<void> {
|
|
334
322
|
if (this.device.history !== true) {
|
|
335
323
|
return
|
|
336
324
|
}
|
package/src/platform.ts
CHANGED
|
@@ -31,7 +31,7 @@ import { queueScheduler } from 'rxjs'
|
|
|
31
31
|
import { request } from 'undici'
|
|
32
32
|
|
|
33
33
|
import { BlindTilt } from './device/blindtilt.js'
|
|
34
|
-
import { Bot } from './device/bot
|
|
34
|
+
import { Bot } from './device/bot.js'
|
|
35
35
|
import { CeilingLight } from './device/ceilinglight.js'
|
|
36
36
|
import { ColorBulb } from './device/colorbulb.js'
|
|
37
37
|
import { Contact } from './device/contact.js'
|
package/dist/device/bot-old.d.ts
DELETED
|
@@ -1,132 +0,0 @@
|
|
|
1
|
-
import type { API, CharacteristicValue, HAP, Logging, PlatformAccessory, Service } from 'homebridge';
|
|
2
|
-
import type { SwitchBotPlatform } from '../platform.js';
|
|
3
|
-
import type { devicesConfig, SwitchBotPlatformConfig } from '../settings.js';
|
|
4
|
-
import type { botServiceData as serviceData } from '../types/bledevicestatus.js';
|
|
5
|
-
import type { device } from '../types/devicelist.js';
|
|
6
|
-
import type { botStatus as deviceStatus } from '../types/devicestatus.js';
|
|
7
|
-
import { Subject } from 'rxjs';
|
|
8
|
-
/**
|
|
9
|
-
* Platform Accessory
|
|
10
|
-
* An instance of this class is created for each accessory your platform registers
|
|
11
|
-
* Each accessory may expose multiple services of different service types.
|
|
12
|
-
*/
|
|
13
|
-
export declare class Bot {
|
|
14
|
-
private readonly platform;
|
|
15
|
-
private accessory;
|
|
16
|
-
device: device & devicesConfig;
|
|
17
|
-
readonly api: API;
|
|
18
|
-
readonly log: Logging;
|
|
19
|
-
readonly config: SwitchBotPlatformConfig;
|
|
20
|
-
protected readonly hap: HAP;
|
|
21
|
-
fanService?: Service;
|
|
22
|
-
doorService?: Service;
|
|
23
|
-
lockService?: Service;
|
|
24
|
-
faucetService?: Service;
|
|
25
|
-
windowService?: Service;
|
|
26
|
-
switchService?: Service;
|
|
27
|
-
outletService?: Service;
|
|
28
|
-
batteryService: Service;
|
|
29
|
-
garageDoorService?: Service;
|
|
30
|
-
windowCoveringService?: Service;
|
|
31
|
-
statefulProgrammableSwitchService?: Service;
|
|
32
|
-
On: CharacteristicValue;
|
|
33
|
-
BatteryLevel: CharacteristicValue;
|
|
34
|
-
FirmwareRevision: CharacteristicValue;
|
|
35
|
-
StatusLowBattery: CharacteristicValue;
|
|
36
|
-
OpenAPI_On: deviceStatus['power'];
|
|
37
|
-
OpenAPI_BatteryLevel: deviceStatus['battery'];
|
|
38
|
-
OpenAPI_FirmwareRevision: deviceStatus['version'];
|
|
39
|
-
BLE_On: serviceData['state'];
|
|
40
|
-
BLE_Mode: serviceData['mode'];
|
|
41
|
-
BLE_BatteryLevel: serviceData['battery'];
|
|
42
|
-
BLE_IsConnected?: boolean;
|
|
43
|
-
botMode: string;
|
|
44
|
-
allowPush?: boolean;
|
|
45
|
-
doublePress: number;
|
|
46
|
-
scanDuration: number;
|
|
47
|
-
botDeviceType: string;
|
|
48
|
-
pushRatePress: number;
|
|
49
|
-
deviceLogging: string;
|
|
50
|
-
multiPressCount: number;
|
|
51
|
-
deviceRefreshRate: number;
|
|
52
|
-
botUpdateInProgress: boolean;
|
|
53
|
-
doBotUpdate: Subject<void>;
|
|
54
|
-
private readonly OpenAPI;
|
|
55
|
-
private readonly BLE;
|
|
56
|
-
constructor(platform: SwitchBotPlatform, accessory: PlatformAccessory, device: device & devicesConfig);
|
|
57
|
-
/**
|
|
58
|
-
* Parse the device status from the SwitchBot api
|
|
59
|
-
*/
|
|
60
|
-
parseStatus(): Promise<void>;
|
|
61
|
-
BLEparseStatus(): Promise<void>;
|
|
62
|
-
openAPIparseStatus(): Promise<void>;
|
|
63
|
-
/**
|
|
64
|
-
* Asks the SwitchBot API for the latest device information
|
|
65
|
-
*/
|
|
66
|
-
refreshStatus(): Promise<void>;
|
|
67
|
-
BLERefreshStatus(): Promise<void>;
|
|
68
|
-
openAPIRefreshStatus(): Promise<void>;
|
|
69
|
-
/**
|
|
70
|
-
* Pushes the requested changes to the SwitchBot API
|
|
71
|
-
* deviceType commandType Command command parameter Description
|
|
72
|
-
* Bot - "command" "turnOff" "default" = set to OFF state
|
|
73
|
-
* Bot - "command" "turnOn" "default" = set to ON state
|
|
74
|
-
* Bot - "command" "press" "default" = trigger press
|
|
75
|
-
*/
|
|
76
|
-
pushChanges(): Promise<void>;
|
|
77
|
-
BLEpushChanges(): Promise<void>;
|
|
78
|
-
openAPIpushChanges(): Promise<void>;
|
|
79
|
-
/**
|
|
80
|
-
* Handle requests to set the "On" characteristic
|
|
81
|
-
*/
|
|
82
|
-
OnSet(value: CharacteristicValue): Promise<void>;
|
|
83
|
-
/**
|
|
84
|
-
* Updates the status for each of the HomeKit Characteristics
|
|
85
|
-
*/
|
|
86
|
-
updateHomeKitCharacteristics(): Promise<void>;
|
|
87
|
-
removeOutletService(accessory: PlatformAccessory): Promise<void>;
|
|
88
|
-
removeGarageDoorService(accessory: PlatformAccessory): Promise<void>;
|
|
89
|
-
removeDoorService(accessory: PlatformAccessory): Promise<void>;
|
|
90
|
-
removeLockService(accessory: PlatformAccessory): Promise<void>;
|
|
91
|
-
removeFaucetService(accessory: PlatformAccessory): Promise<void>;
|
|
92
|
-
removeFanService(accessory: PlatformAccessory): Promise<void>;
|
|
93
|
-
removeWindowService(accessory: PlatformAccessory): Promise<void>;
|
|
94
|
-
removeWindowCoveringService(accessory: PlatformAccessory): Promise<void>;
|
|
95
|
-
removeStatefulProgrammableSwitchService(accessory: PlatformAccessory): Promise<void>;
|
|
96
|
-
removeSwitchService(accessory: PlatformAccessory): Promise<void>;
|
|
97
|
-
private DoublePress;
|
|
98
|
-
stopScanning(switchbot: any): Promise<void>;
|
|
99
|
-
getCustomBLEAddress(switchbot: any): Promise<void>;
|
|
100
|
-
BLEPushConnection(): Promise<void>;
|
|
101
|
-
BLERefreshConnection(switchbot: any): Promise<void>;
|
|
102
|
-
retry({ max, fn }: {
|
|
103
|
-
max: number;
|
|
104
|
-
fn: {
|
|
105
|
-
(): any;
|
|
106
|
-
(): Promise<any>;
|
|
107
|
-
};
|
|
108
|
-
}): Promise<null>;
|
|
109
|
-
maxRetry(): number;
|
|
110
|
-
PressOrSwitch(device: device & devicesConfig): Promise<void>;
|
|
111
|
-
allowPushChanges(device: device & devicesConfig): Promise<void>;
|
|
112
|
-
scan(device: device & devicesConfig): Promise<void>;
|
|
113
|
-
statusCode(statusCode: number): Promise<void>;
|
|
114
|
-
offlineOff(): Promise<void>;
|
|
115
|
-
apiError(e: any): Promise<void>;
|
|
116
|
-
deviceType(device: device & devicesConfig): Promise<void>;
|
|
117
|
-
deviceContext(): Promise<void>;
|
|
118
|
-
refreshRate(device: device & devicesConfig): Promise<void>;
|
|
119
|
-
deviceConfig(device: device & devicesConfig): Promise<void>;
|
|
120
|
-
deviceLogs(device: device & devicesConfig): Promise<void>;
|
|
121
|
-
/**
|
|
122
|
-
* Logging for Device
|
|
123
|
-
*/
|
|
124
|
-
infoLog(...log: any[]): void;
|
|
125
|
-
warnLog(...log: any[]): void;
|
|
126
|
-
debugWarnLog(...log: any[]): void;
|
|
127
|
-
errorLog(...log: any[]): void;
|
|
128
|
-
debugErrorLog(...log: any[]): void;
|
|
129
|
-
debugLog(...log: any[]): void;
|
|
130
|
-
enablingDeviceLogging(): boolean;
|
|
131
|
-
}
|
|
132
|
-
//# sourceMappingURL=bot-old.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"bot-old.d.ts","sourceRoot":"","sources":["../../src/device/bot-old.ts"],"names":[],"mappings":"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"}
|