node-switchbot 3.0.2-beta.1 → 3.0.2-beta.3
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/advertising.js +1 -1
- package/dist/advertising.js.map +1 -1
- package/dist/device/woblindtilt.d.ts +5 -2
- package/dist/device/woblindtilt.d.ts.map +1 -1
- package/dist/device/woblindtilt.js +6 -6
- package/dist/device/woblindtilt.js.map +1 -1
- package/dist/device/wobulb.d.ts +5 -2
- package/dist/device/wobulb.d.ts.map +1 -1
- package/dist/device/wobulb.js +14 -12
- package/dist/device/wobulb.js.map +1 -1
- package/dist/device/woceilinglight.d.ts +7 -4
- package/dist/device/woceilinglight.d.ts.map +1 -1
- package/dist/device/woceilinglight.js +15 -14
- package/dist/device/woceilinglight.js.map +1 -1
- package/dist/device/wocontact.d.ts +5 -2
- package/dist/device/wocontact.d.ts.map +1 -1
- package/dist/device/wocontact.js +6 -2
- package/dist/device/wocontact.js.map +1 -1
- package/dist/device/wocurtain.d.ts +5 -2
- package/dist/device/wocurtain.d.ts.map +1 -1
- package/dist/device/wocurtain.js +34 -20
- package/dist/device/wocurtain.js.map +1 -1
- package/dist/device/wohand.d.ts +6 -3
- package/dist/device/wohand.d.ts.map +1 -1
- package/dist/device/wohand.js +13 -14
- package/dist/device/wohand.js.map +1 -1
- package/dist/device/wohub2.d.ts +5 -2
- package/dist/device/wohub2.d.ts.map +1 -1
- package/dist/device/wohub2.js +6 -2
- package/dist/device/wohub2.js.map +1 -1
- package/dist/device/wohumi.d.ts +5 -2
- package/dist/device/wohumi.d.ts.map +1 -1
- package/dist/device/wohumi.js +6 -6
- package/dist/device/wohumi.js.map +1 -1
- package/dist/device/woiosensorth.d.ts +5 -2
- package/dist/device/woiosensorth.d.ts.map +1 -1
- package/dist/device/woiosensorth.js +6 -2
- package/dist/device/woiosensorth.js.map +1 -1
- package/dist/device/woplugmini.d.ts +8 -5
- package/dist/device/woplugmini.d.ts.map +1 -1
- package/dist/device/woplugmini.js +10 -10
- package/dist/device/woplugmini.js.map +1 -1
- package/dist/device/wopresence.d.ts +2 -0
- package/dist/device/wopresence.d.ts.map +1 -1
- package/dist/device/wopresence.js +3 -0
- package/dist/device/wopresence.js.map +1 -1
- package/dist/device/wosensorth.d.ts +2 -0
- package/dist/device/wosensorth.d.ts.map +1 -1
- package/dist/device/wosensorth.js +3 -0
- package/dist/device/wosensorth.js.map +1 -1
- package/dist/device/wostrip.d.ts +2 -0
- package/dist/device/wostrip.d.ts.map +1 -1
- package/dist/device/wostrip.js +3 -0
- package/dist/device/wostrip.js.map +1 -1
- package/dist/device.d.ts +33 -31
- package/dist/device.d.ts.map +1 -1
- package/dist/device.js +94 -90
- package/dist/device.js.map +1 -1
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +16 -0
- package/dist/index.js.map +1 -1
- package/dist/parameter-checker.d.ts.map +1 -1
- package/dist/parameter-checker.js +1 -9
- package/dist/parameter-checker.js.map +1 -1
- package/dist/switchbot-ble.d.ts +19 -51
- package/dist/switchbot-ble.d.ts.map +1 -1
- package/dist/switchbot-ble.js +132 -276
- package/dist/switchbot-ble.js.map +1 -1
- package/dist/test/advertising.test.js +3 -3
- package/dist/test/advertising.test.js.map +1 -1
- package/dist/test/switchbot-ble.test.d.ts +2 -0
- package/dist/test/switchbot-ble.test.d.ts.map +1 -0
- package/dist/test/switchbot-ble.test.js +45 -0
- package/dist/test/switchbot-ble.test.js.map +1 -0
- package/dist/test/switchbot-openapi.test.js +10 -64
- package/dist/test/switchbot-openapi.test.js.map +1 -1
- package/dist/types/bledevicestatus.d.ts +5 -3
- package/dist/types/bledevicestatus.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/test/switchbot.test.d.ts +0 -2
- package/dist/test/switchbot.test.d.ts.map +0 -1
- package/dist/test/switchbot.test.js +0 -106
- package/dist/test/switchbot.test.js.map +0 -1
package/dist/device.d.ts
CHANGED
|
@@ -1,23 +1,25 @@
|
|
|
1
1
|
import type * as Noble from '@stoprocent/noble';
|
|
2
|
-
import type { Chars, SwitchBotBLEModel, SwitchBotBLEModelName } from './types/types.js';
|
|
2
|
+
import type { Chars, SwitchBotBLEModel, SwitchBotBLEModelFriendlyName, SwitchBotBLEModelName } from './types/types.js';
|
|
3
3
|
import { Buffer } from 'node:buffer';
|
|
4
4
|
import { EventEmitter } from 'node:events';
|
|
5
5
|
/**
|
|
6
6
|
* Represents a Switchbot Device.
|
|
7
7
|
*/
|
|
8
8
|
export declare class SwitchbotDevice extends EventEmitter {
|
|
9
|
-
|
|
10
|
-
private
|
|
11
|
-
private
|
|
12
|
-
private
|
|
13
|
-
private
|
|
14
|
-
private
|
|
15
|
-
private
|
|
16
|
-
private
|
|
17
|
-
private
|
|
18
|
-
private
|
|
19
|
-
private
|
|
20
|
-
private
|
|
9
|
+
[x: string]: any;
|
|
10
|
+
private noble;
|
|
11
|
+
private peripheral;
|
|
12
|
+
private characteristics;
|
|
13
|
+
private deviceId;
|
|
14
|
+
private deviceAddress;
|
|
15
|
+
private deviceModel;
|
|
16
|
+
private deviceModelName;
|
|
17
|
+
private deviceFriendlyName;
|
|
18
|
+
private explicitlyConnected;
|
|
19
|
+
private isConnected;
|
|
20
|
+
private onNotify;
|
|
21
|
+
private onDisconnect;
|
|
22
|
+
private onConnect;
|
|
21
23
|
/**
|
|
22
24
|
* Initializes a new instance of the SwitchbotDevice class.
|
|
23
25
|
* @param peripheral The peripheral object from noble.
|
|
@@ -25,21 +27,21 @@ export declare class SwitchbotDevice extends EventEmitter {
|
|
|
25
27
|
*/
|
|
26
28
|
constructor(peripheral: Noble.Peripheral, noble: typeof Noble);
|
|
27
29
|
/**
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
* @param
|
|
31
|
-
* @param message - The log message to be emitted.
|
|
30
|
+
* Logs a message with the specified log level.
|
|
31
|
+
* @param level The severity level of the log (e.g., 'info', 'warn', 'error').
|
|
32
|
+
* @param message The log message to be emitted.
|
|
32
33
|
*/
|
|
33
|
-
|
|
34
|
+
log(level: string, message: string): Promise<void>;
|
|
34
35
|
get id(): string;
|
|
35
36
|
get address(): string;
|
|
36
37
|
get model(): SwitchBotBLEModel;
|
|
37
38
|
get modelName(): SwitchBotBLEModelName;
|
|
39
|
+
get friendlyName(): SwitchBotBLEModelFriendlyName;
|
|
38
40
|
get connectionState(): string;
|
|
39
|
-
get
|
|
40
|
-
set
|
|
41
|
-
get
|
|
42
|
-
set
|
|
41
|
+
get onConnectHandler(): () => Promise<void>;
|
|
42
|
+
set onConnectHandler(func: () => Promise<void>);
|
|
43
|
+
get onDisconnectHandler(): () => Promise<void>;
|
|
44
|
+
set onDisconnectHandler(func: () => Promise<void>);
|
|
43
45
|
/**
|
|
44
46
|
* Connects to the device.
|
|
45
47
|
* @returns A Promise that resolves when the connection is complete.
|
|
@@ -49,7 +51,7 @@ export declare class SwitchbotDevice extends EventEmitter {
|
|
|
49
51
|
* Internal method to handle the connection process.
|
|
50
52
|
* @returns A Promise that resolves when the connection is complete.
|
|
51
53
|
*/
|
|
52
|
-
private
|
|
54
|
+
private internalConnect;
|
|
53
55
|
/**
|
|
54
56
|
* Retrieves the device characteristics.
|
|
55
57
|
* @returns A Promise that resolves with the device characteristics.
|
|
@@ -70,12 +72,12 @@ export declare class SwitchbotDevice extends EventEmitter {
|
|
|
70
72
|
* Subscribes to the notify characteristic.
|
|
71
73
|
* @returns A Promise that resolves when the subscription is complete.
|
|
72
74
|
*/
|
|
73
|
-
private
|
|
75
|
+
private subscribeToNotify;
|
|
74
76
|
/**
|
|
75
77
|
* Unsubscribes from the notify characteristic.
|
|
76
78
|
* @returns A Promise that resolves when the unsubscription is complete.
|
|
77
79
|
*/
|
|
78
|
-
|
|
80
|
+
unsubscribeFromNotify(): Promise<void>;
|
|
79
81
|
/**
|
|
80
82
|
* Disconnects from the device.
|
|
81
83
|
* @returns A Promise that resolves when the disconnection is complete.
|
|
@@ -85,7 +87,7 @@ export declare class SwitchbotDevice extends EventEmitter {
|
|
|
85
87
|
* Internal method to handle disconnection if not explicitly initiated.
|
|
86
88
|
* @returns A Promise that resolves when the disconnection is complete.
|
|
87
89
|
*/
|
|
88
|
-
private
|
|
90
|
+
private internalDisconnect;
|
|
89
91
|
/**
|
|
90
92
|
* Retrieves the device name.
|
|
91
93
|
* @returns A Promise that resolves with the device name.
|
|
@@ -99,27 +101,27 @@ export declare class SwitchbotDevice extends EventEmitter {
|
|
|
99
101
|
setDeviceName(name: string): Promise<void>;
|
|
100
102
|
/**
|
|
101
103
|
* Sends a command to the device and awaits a response.
|
|
102
|
-
* @param
|
|
104
|
+
* @param reqBuf The command buffer.
|
|
103
105
|
* @returns A Promise that resolves with the response buffer.
|
|
104
106
|
*/
|
|
105
|
-
command(
|
|
107
|
+
command(reqBuf: Buffer): Promise<Buffer>;
|
|
106
108
|
/**
|
|
107
109
|
* Waits for a response from the device after sending a command.
|
|
108
110
|
* @returns A Promise that resolves with the response buffer.
|
|
109
111
|
*/
|
|
110
|
-
private
|
|
112
|
+
private waitForCommandResponse;
|
|
111
113
|
/**
|
|
112
114
|
* Reads data from a characteristic with a timeout.
|
|
113
115
|
* @param char The characteristic to read from.
|
|
114
116
|
* @returns A Promise that resolves with the data buffer.
|
|
115
117
|
*/
|
|
116
|
-
private
|
|
118
|
+
private readCharacteristic;
|
|
117
119
|
/**
|
|
118
120
|
* Writes data to a characteristic with a timeout.
|
|
119
121
|
* @param char The characteristic to write to.
|
|
120
122
|
* @param buf The data buffer.
|
|
121
123
|
* @returns A Promise that resolves when the write is complete.
|
|
122
124
|
*/
|
|
123
|
-
private
|
|
125
|
+
private writeCharacteristic;
|
|
124
126
|
}
|
|
125
127
|
//# sourceMappingURL=device.d.ts.map
|
package/dist/device.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"device.d.ts","sourceRoot":"","sources":["../src/device.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,KAAK,KAAK,MAAM,mBAAmB,CAAA;AAE/C,OAAO,KAAK,EAAE,KAAK,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"device.d.ts","sourceRoot":"","sources":["../src/device.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,KAAK,KAAK,MAAM,mBAAmB,CAAA;AAE/C,OAAO,KAAK,EAAE,KAAK,EAAE,iBAAiB,EAAE,6BAA6B,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAA;AAEtH,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAM1C;;GAEG;AACH,qBAAa,eAAgB,SAAQ,YAAY;IAC/C,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,CAAA;IAChB,OAAO,CAAC,KAAK,CAAc;IAC3B,OAAO,CAAC,UAAU,CAAkB;IACpC,OAAO,CAAC,eAAe,CAAqB;IAC5C,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,WAAW,CAAoB;IACvC,OAAO,CAAC,eAAe,CAAwB;IAC/C,OAAO,CAAC,kBAAkB,CAAgC;IAC1D,OAAO,CAAC,mBAAmB,CAAQ;IACnC,OAAO,CAAC,WAAW,CAAQ;IAC3B,OAAO,CAAC,QAAQ,CAAkC;IAClD,OAAO,CAAC,YAAY,CAAsC;IAC1D,OAAO,CAAC,SAAS,CAAsC;IAEvD;;;;OAIG;gBACS,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,EAAE,OAAO,KAAK;IAc7D;;;;OAIG;IACU,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAK/D,IAAI,EAAE,IAAI,MAAM,CAEf;IAED,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,IAAI,KAAK,IAAI,iBAAiB,CAE7B;IAED,IAAI,SAAS,IAAI,qBAAqB,CAErC;IAED,IAAI,YAAY,IAAI,6BAA6B,CAEhD;IAED,IAAI,eAAe,IAAI,MAAM,CAE5B;IAED,IAAI,gBAAgB,IAAI,MAAM,OAAO,CAAC,IAAI,CAAC,CAE1C;IAED,IAAI,gBAAgB,CAAC,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,EAO7C;IAED,IAAI,mBAAmB,IAAI,MAAM,OAAO,CAAC,IAAI,CAAC,CAE7C;IAED,IAAI,mBAAmB,CAAC,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,EAOhD;IAED;;;OAGG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAK9B;;;OAGG;YACW,eAAe;IA8B7B;;;OAGG;IACU,kBAAkB,IAAI,OAAO,CAAC,KAAK,CAAC;IAkCjD;;;OAGG;IACU,gBAAgB,IAAI,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;IAczD;;;;OAIG;YACW,uBAAuB;IAIrC;;;OAGG;YACW,iBAAiB;IAS/B;;;OAGG;IACG,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC;IAS5C;;;OAGG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAejC;;;OAGG;YACW,kBAAkB;IAOhC;;;OAGG;IACG,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC;IAUtC;;;;OAIG;IACG,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAoBhD;;;;OAIG;IACG,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAiB9C;;;OAGG;YACW,sBAAsB;IAoBpC;;;;OAIG;YACW,kBAAkB;IAehC;;;;;OAKG;YACW,mBAAmB;CAalC"}
|
package/dist/device.js
CHANGED
|
@@ -2,23 +2,24 @@ import { Buffer } from 'node:buffer';
|
|
|
2
2
|
import { EventEmitter } from 'node:events';
|
|
3
3
|
import { Advertising } from './advertising.js';
|
|
4
4
|
import { parameterChecker } from './parameter-checker.js';
|
|
5
|
-
import { CHAR_UUID_DEVICE, CHAR_UUID_NOTIFY, CHAR_UUID_WRITE, READ_TIMEOUT_MSEC, SERV_UUID_PRIMARY, WRITE_TIMEOUT_MSEC
|
|
5
|
+
import { CHAR_UUID_DEVICE, CHAR_UUID_NOTIFY, CHAR_UUID_WRITE, READ_TIMEOUT_MSEC, SERV_UUID_PRIMARY, WRITE_TIMEOUT_MSEC } from './settings.js';
|
|
6
6
|
/**
|
|
7
7
|
* Represents a Switchbot Device.
|
|
8
8
|
*/
|
|
9
9
|
export class SwitchbotDevice extends EventEmitter {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
10
|
+
noble;
|
|
11
|
+
peripheral;
|
|
12
|
+
characteristics = null;
|
|
13
|
+
deviceId;
|
|
14
|
+
deviceAddress;
|
|
15
|
+
deviceModel;
|
|
16
|
+
deviceModelName;
|
|
17
|
+
deviceFriendlyName;
|
|
18
|
+
explicitlyConnected = false;
|
|
19
|
+
isConnected = false;
|
|
20
|
+
onNotify = () => { };
|
|
21
|
+
onDisconnect = async () => { };
|
|
22
|
+
onConnect = async () => { };
|
|
22
23
|
/**
|
|
23
24
|
* Initializes a new instance of the SwitchbotDevice class.
|
|
24
25
|
* @param peripheral The peripheral object from noble.
|
|
@@ -26,59 +27,62 @@ export class SwitchbotDevice extends EventEmitter {
|
|
|
26
27
|
*/
|
|
27
28
|
constructor(peripheral, noble) {
|
|
28
29
|
super();
|
|
29
|
-
this.
|
|
30
|
-
this.
|
|
31
|
-
Advertising.parse(peripheral, this.
|
|
32
|
-
this.
|
|
33
|
-
this.
|
|
34
|
-
this.
|
|
35
|
-
this.
|
|
30
|
+
this.peripheral = peripheral;
|
|
31
|
+
this.noble = noble;
|
|
32
|
+
Advertising.parse(peripheral, this.log.bind(this)).then((ad) => {
|
|
33
|
+
this.deviceId = ad?.id ?? '';
|
|
34
|
+
this.deviceAddress = ad?.address ?? '';
|
|
35
|
+
this.deviceModel = ad?.serviceData.model ?? '';
|
|
36
|
+
this.deviceModelName = ad?.serviceData.modelName ?? '';
|
|
37
|
+
this.deviceFriendlyName = ad?.serviceData.modelFriendlyName ?? '';
|
|
36
38
|
});
|
|
37
39
|
}
|
|
38
40
|
/**
|
|
39
|
-
*
|
|
40
|
-
*
|
|
41
|
-
* @param
|
|
42
|
-
* @param message - The log message to be emitted.
|
|
41
|
+
* Logs a message with the specified log level.
|
|
42
|
+
* @param level The severity level of the log (e.g., 'info', 'warn', 'error').
|
|
43
|
+
* @param message The log message to be emitted.
|
|
43
44
|
*/
|
|
44
|
-
async
|
|
45
|
+
async log(level, message) {
|
|
45
46
|
this.emit('log', { level, message });
|
|
46
47
|
}
|
|
47
48
|
// Getters
|
|
48
49
|
get id() {
|
|
49
|
-
return this.
|
|
50
|
+
return this.deviceId;
|
|
50
51
|
}
|
|
51
52
|
get address() {
|
|
52
|
-
return this.
|
|
53
|
+
return this.deviceAddress;
|
|
53
54
|
}
|
|
54
55
|
get model() {
|
|
55
|
-
return this.
|
|
56
|
+
return this.deviceModel;
|
|
56
57
|
}
|
|
57
58
|
get modelName() {
|
|
58
|
-
return this.
|
|
59
|
+
return this.deviceModelName;
|
|
60
|
+
}
|
|
61
|
+
get friendlyName() {
|
|
62
|
+
return this.deviceFriendlyName;
|
|
59
63
|
}
|
|
60
64
|
get connectionState() {
|
|
61
|
-
return this.
|
|
65
|
+
return this.isConnected ? 'connected' : this.peripheral.state;
|
|
62
66
|
}
|
|
63
|
-
get
|
|
64
|
-
return this.
|
|
67
|
+
get onConnectHandler() {
|
|
68
|
+
return this.onConnect;
|
|
65
69
|
}
|
|
66
|
-
set
|
|
70
|
+
set onConnectHandler(func) {
|
|
67
71
|
if (typeof func !== 'function') {
|
|
68
|
-
throw new TypeError('The `
|
|
72
|
+
throw new TypeError('The `onConnectHandler` must be a function that returns a Promise<void>.');
|
|
69
73
|
}
|
|
70
|
-
this.
|
|
74
|
+
this.onConnect = async () => {
|
|
71
75
|
await func();
|
|
72
76
|
};
|
|
73
77
|
}
|
|
74
|
-
get
|
|
75
|
-
return this.
|
|
78
|
+
get onDisconnectHandler() {
|
|
79
|
+
return this.onDisconnect;
|
|
76
80
|
}
|
|
77
|
-
set
|
|
81
|
+
set onDisconnectHandler(func) {
|
|
78
82
|
if (typeof func !== 'function') {
|
|
79
|
-
throw new TypeError('The `
|
|
83
|
+
throw new TypeError('The `onDisconnectHandler` must be a function that returns a Promise<void>.');
|
|
80
84
|
}
|
|
81
|
-
this.
|
|
85
|
+
this.onDisconnect = async () => {
|
|
82
86
|
await func();
|
|
83
87
|
};
|
|
84
88
|
}
|
|
@@ -87,16 +91,16 @@ export class SwitchbotDevice extends EventEmitter {
|
|
|
87
91
|
* @returns A Promise that resolves when the connection is complete.
|
|
88
92
|
*/
|
|
89
93
|
async connect() {
|
|
90
|
-
this.
|
|
91
|
-
await this.
|
|
94
|
+
this.explicitlyConnected = true;
|
|
95
|
+
await this.internalConnect();
|
|
92
96
|
}
|
|
93
97
|
/**
|
|
94
98
|
* Internal method to handle the connection process.
|
|
95
99
|
* @returns A Promise that resolves when the connection is complete.
|
|
96
100
|
*/
|
|
97
|
-
async
|
|
98
|
-
if (this.
|
|
99
|
-
throw new Error(`The Bluetooth status is ${this.
|
|
101
|
+
async internalConnect() {
|
|
102
|
+
if (this.noble._state !== 'poweredOn') {
|
|
103
|
+
throw new Error(`The Bluetooth status is ${this.noble._state}, not poweredOn.`);
|
|
100
104
|
}
|
|
101
105
|
const state = this.connectionState;
|
|
102
106
|
if (state === 'connected') {
|
|
@@ -105,19 +109,19 @@ export class SwitchbotDevice extends EventEmitter {
|
|
|
105
109
|
if (state === 'connecting' || state === 'disconnecting') {
|
|
106
110
|
throw new Error(`Now ${state}. Wait for a few seconds then try again.`);
|
|
107
111
|
}
|
|
108
|
-
this.
|
|
109
|
-
this.
|
|
110
|
-
await this.
|
|
112
|
+
this.peripheral.once('connect', async () => {
|
|
113
|
+
this.isConnected = true;
|
|
114
|
+
await this.onConnect();
|
|
111
115
|
});
|
|
112
|
-
this.
|
|
113
|
-
this.
|
|
114
|
-
this.
|
|
115
|
-
this.
|
|
116
|
-
await this.
|
|
116
|
+
this.peripheral.once('disconnect', async () => {
|
|
117
|
+
this.isConnected = false;
|
|
118
|
+
this.characteristics = null;
|
|
119
|
+
this.peripheral.removeAllListeners();
|
|
120
|
+
await this.onDisconnect();
|
|
117
121
|
});
|
|
118
|
-
await this.
|
|
119
|
-
this.
|
|
120
|
-
await this.
|
|
122
|
+
await this.peripheral.connectAsync();
|
|
123
|
+
this.characteristics = await this.getCharacteristics();
|
|
124
|
+
await this.subscribeToNotify();
|
|
121
125
|
}
|
|
122
126
|
/**
|
|
123
127
|
* Retrieves the device characteristics.
|
|
@@ -159,7 +163,7 @@ export class SwitchbotDevice extends EventEmitter {
|
|
|
159
163
|
*/
|
|
160
164
|
async discoverServices() {
|
|
161
165
|
try {
|
|
162
|
-
const services = await this.
|
|
166
|
+
const services = await this.peripheral.discoverServicesAsync([]);
|
|
163
167
|
const primaryServices = services.filter(s => s.uuid === SERV_UUID_PRIMARY);
|
|
164
168
|
if (primaryServices.length === 0) {
|
|
165
169
|
throw new Error('No service was found.');
|
|
@@ -182,20 +186,20 @@ export class SwitchbotDevice extends EventEmitter {
|
|
|
182
186
|
* Subscribes to the notify characteristic.
|
|
183
187
|
* @returns A Promise that resolves when the subscription is complete.
|
|
184
188
|
*/
|
|
185
|
-
async
|
|
186
|
-
const char = this.
|
|
189
|
+
async subscribeToNotify() {
|
|
190
|
+
const char = this.characteristics?.notify;
|
|
187
191
|
if (!char) {
|
|
188
192
|
throw new Error('No notify characteristic was found.');
|
|
189
193
|
}
|
|
190
194
|
await char.subscribeAsync();
|
|
191
|
-
char.on('data', this.
|
|
195
|
+
char.on('data', this.onNotify);
|
|
192
196
|
}
|
|
193
197
|
/**
|
|
194
198
|
* Unsubscribes from the notify characteristic.
|
|
195
199
|
* @returns A Promise that resolves when the unsubscription is complete.
|
|
196
200
|
*/
|
|
197
|
-
async
|
|
198
|
-
const char = this.
|
|
201
|
+
async unsubscribeFromNotify() {
|
|
202
|
+
const char = this.characteristics?.notify;
|
|
199
203
|
if (!char) {
|
|
200
204
|
return;
|
|
201
205
|
}
|
|
@@ -207,25 +211,25 @@ export class SwitchbotDevice extends EventEmitter {
|
|
|
207
211
|
* @returns A Promise that resolves when the disconnection is complete.
|
|
208
212
|
*/
|
|
209
213
|
async disconnect() {
|
|
210
|
-
this.
|
|
211
|
-
const state = this.
|
|
214
|
+
this.explicitlyConnected = false;
|
|
215
|
+
const state = this.peripheral.state;
|
|
212
216
|
if (state === 'disconnected') {
|
|
213
217
|
return;
|
|
214
218
|
}
|
|
215
219
|
if (state === 'connecting' || state === 'disconnecting') {
|
|
216
220
|
throw new Error(`Now ${state}. Wait for a few seconds then try again.`);
|
|
217
221
|
}
|
|
218
|
-
await this.
|
|
219
|
-
await this.
|
|
222
|
+
await this.unsubscribeFromNotify();
|
|
223
|
+
await this.peripheral.disconnectAsync();
|
|
220
224
|
}
|
|
221
225
|
/**
|
|
222
226
|
* Internal method to handle disconnection if not explicitly initiated.
|
|
223
227
|
* @returns A Promise that resolves when the disconnection is complete.
|
|
224
228
|
*/
|
|
225
|
-
async
|
|
226
|
-
if (!this.
|
|
229
|
+
async internalDisconnect() {
|
|
230
|
+
if (!this.explicitlyConnected) {
|
|
227
231
|
await this.disconnect();
|
|
228
|
-
this.
|
|
232
|
+
this.explicitlyConnected = true;
|
|
229
233
|
}
|
|
230
234
|
}
|
|
231
235
|
/**
|
|
@@ -233,12 +237,12 @@ export class SwitchbotDevice extends EventEmitter {
|
|
|
233
237
|
* @returns A Promise that resolves with the device name.
|
|
234
238
|
*/
|
|
235
239
|
async getDeviceName() {
|
|
236
|
-
await this.
|
|
237
|
-
if (!this.
|
|
240
|
+
await this.internalConnect();
|
|
241
|
+
if (!this.characteristics?.device) {
|
|
238
242
|
throw new Error(`The device does not support the characteristic UUID 0x${CHAR_UUID_DEVICE}.`);
|
|
239
243
|
}
|
|
240
|
-
const buf = await this.
|
|
241
|
-
await this.
|
|
244
|
+
const buf = await this.readCharacteristic(this.characteristics.device);
|
|
245
|
+
await this.internalDisconnect();
|
|
242
246
|
return buf.toString('utf8');
|
|
243
247
|
}
|
|
244
248
|
/**
|
|
@@ -252,43 +256,43 @@ export class SwitchbotDevice extends EventEmitter {
|
|
|
252
256
|
throw new Error(parameterChecker.error.message);
|
|
253
257
|
}
|
|
254
258
|
const buf = Buffer.from(name, 'utf8');
|
|
255
|
-
await this.
|
|
256
|
-
if (!this.
|
|
259
|
+
await this.internalConnect();
|
|
260
|
+
if (!this.characteristics?.device) {
|
|
257
261
|
throw new Error(`The device does not support the characteristic UUID 0x${CHAR_UUID_DEVICE}.`);
|
|
258
262
|
}
|
|
259
|
-
await this.
|
|
260
|
-
await this.
|
|
263
|
+
await this.writeCharacteristic(this.characteristics.device, buf);
|
|
264
|
+
await this.internalDisconnect();
|
|
261
265
|
}
|
|
262
266
|
/**
|
|
263
267
|
* Sends a command to the device and awaits a response.
|
|
264
|
-
* @param
|
|
268
|
+
* @param reqBuf The command buffer.
|
|
265
269
|
* @returns A Promise that resolves with the response buffer.
|
|
266
270
|
*/
|
|
267
|
-
async command(
|
|
268
|
-
if (!Buffer.isBuffer(
|
|
271
|
+
async command(reqBuf) {
|
|
272
|
+
if (!Buffer.isBuffer(reqBuf)) {
|
|
269
273
|
throw new TypeError('The specified data is not acceptable for writing.');
|
|
270
274
|
}
|
|
271
|
-
await this.
|
|
272
|
-
if (!this.
|
|
275
|
+
await this.internalConnect();
|
|
276
|
+
if (!this.characteristics?.write) {
|
|
273
277
|
throw new Error('No characteristics available.');
|
|
274
278
|
}
|
|
275
|
-
await this.
|
|
276
|
-
const
|
|
277
|
-
await this.
|
|
278
|
-
return
|
|
279
|
+
await this.writeCharacteristic(this.characteristics.write, reqBuf);
|
|
280
|
+
const resBuf = await this.waitForCommandResponse();
|
|
281
|
+
await this.internalDisconnect();
|
|
282
|
+
return resBuf;
|
|
279
283
|
}
|
|
280
284
|
/**
|
|
281
285
|
* Waits for a response from the device after sending a command.
|
|
282
286
|
* @returns A Promise that resolves with the response buffer.
|
|
283
287
|
*/
|
|
284
|
-
async
|
|
288
|
+
async waitForCommandResponse() {
|
|
285
289
|
const timeout = READ_TIMEOUT_MSEC;
|
|
286
290
|
let timer = null;
|
|
287
291
|
const timeoutPromise = new Promise((_, reject) => {
|
|
288
292
|
timer = setTimeout(() => reject(new Error('READ_TIMEOUT')), timeout);
|
|
289
293
|
});
|
|
290
294
|
const readPromise = new Promise((resolve) => {
|
|
291
|
-
this.
|
|
295
|
+
this.onNotify = (buf) => {
|
|
292
296
|
if (timer) {
|
|
293
297
|
clearTimeout(timer);
|
|
294
298
|
}
|
|
@@ -302,7 +306,7 @@ export class SwitchbotDevice extends EventEmitter {
|
|
|
302
306
|
* @param char The characteristic to read from.
|
|
303
307
|
* @returns A Promise that resolves with the data buffer.
|
|
304
308
|
*/
|
|
305
|
-
async
|
|
309
|
+
async readCharacteristic(char) {
|
|
306
310
|
const timer = setTimeout(() => {
|
|
307
311
|
throw new Error('READ_TIMEOUT');
|
|
308
312
|
}, READ_TIMEOUT_MSEC);
|
|
@@ -322,7 +326,7 @@ export class SwitchbotDevice extends EventEmitter {
|
|
|
322
326
|
* @param buf The data buffer.
|
|
323
327
|
* @returns A Promise that resolves when the write is complete.
|
|
324
328
|
*/
|
|
325
|
-
async
|
|
329
|
+
async writeCharacteristic(char, buf) {
|
|
326
330
|
const timer = setTimeout(() => {
|
|
327
331
|
throw new Error('WRITE_TIMEOUT');
|
|
328
332
|
}, WRITE_TIMEOUT_MSEC);
|
package/dist/device.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"device.js","sourceRoot":"","sources":["../src/device.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAE1C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AACzD,OAAO,
|
|
1
|
+
{"version":3,"file":"device.js","sourceRoot":"","sources":["../src/device.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAE1C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AACzD,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,eAAe,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAE7I;;GAEG;AACH,MAAM,OAAO,eAAgB,SAAQ,YAAY;IAEvC,KAAK,CAAc;IACnB,UAAU,CAAkB;IAC5B,eAAe,GAAiB,IAAI,CAAA;IACpC,QAAQ,CAAS;IACjB,aAAa,CAAS;IACtB,WAAW,CAAoB;IAC/B,eAAe,CAAwB;IACvC,kBAAkB,CAAgC;IAClD,mBAAmB,GAAG,KAAK,CAAA;IAC3B,WAAW,GAAG,KAAK,CAAA;IACnB,QAAQ,GAA0B,GAAG,EAAE,GAAE,CAAC,CAAA;IAC1C,YAAY,GAAwB,KAAK,IAAI,EAAE,GAAE,CAAC,CAAA;IAClD,SAAS,GAAwB,KAAK,IAAI,EAAE,GAAE,CAAC,CAAA;IAEvD;;;;OAIG;IACH,YAAY,UAA4B,EAAE,KAAmB;QAC3D,KAAK,EAAE,CAAA;QACP,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;QAC5B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;QAElB,WAAW,CAAC,KAAK,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE;YAC7D,IAAI,CAAC,QAAQ,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,CAAA;YAC5B,IAAI,CAAC,aAAa,GAAG,EAAE,EAAE,OAAO,IAAI,EAAE,CAAA;YACtC,IAAI,CAAC,WAAW,GAAG,EAAE,EAAE,WAAW,CAAC,KAA0B,IAAI,EAAE,CAAA;YACnE,IAAI,CAAC,eAAe,GAAG,EAAE,EAAE,WAAW,CAAC,SAAkC,IAAI,EAAE,CAAA;YAC/E,IAAI,CAAC,kBAAkB,GAAG,EAAE,EAAE,WAAW,CAAC,iBAAkD,IAAI,EAAE,CAAA;QACpG,CAAC,CAAC,CAAA;IACJ,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,GAAG,CAAC,KAAa,EAAE,OAAe;QAC7C,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAA;IACtC,CAAC;IAED,UAAU;IACV,IAAI,EAAE;QACJ,OAAO,IAAI,CAAC,QAAQ,CAAA;IACtB,CAAC;IAED,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,aAAa,CAAA;IAC3B,CAAC;IAED,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,WAAW,CAAA;IACzB,CAAC;IAED,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,eAAe,CAAA;IAC7B,CAAC;IAED,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,kBAAkB,CAAA;IAChC,CAAC;IAED,IAAI,eAAe;QACjB,OAAO,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAA;IAC/D,CAAC;IAED,IAAI,gBAAgB;QAClB,OAAO,IAAI,CAAC,SAAS,CAAA;IACvB,CAAC;IAED,IAAI,gBAAgB,CAAC,IAAyB;QAC5C,IAAI,OAAO,IAAI,KAAK,UAAU,EAAE,CAAC;YAC/B,MAAM,IAAI,SAAS,CAAC,yEAAyE,CAAC,CAAA;QAChG,CAAC;QACD,IAAI,CAAC,SAAS,GAAG,KAAK,IAAI,EAAE;YAC1B,MAAM,IAAI,EAAE,CAAA;QACd,CAAC,CAAA;IACH,CAAC;IAED,IAAI,mBAAmB;QACrB,OAAO,IAAI,CAAC,YAAY,CAAA;IAC1B,CAAC;IAED,IAAI,mBAAmB,CAAC,IAAyB;QAC/C,IAAI,OAAO,IAAI,KAAK,UAAU,EAAE,CAAC;YAC/B,MAAM,IAAI,SAAS,CAAC,4EAA4E,CAAC,CAAA;QACnG,CAAC;QACD,IAAI,CAAC,YAAY,GAAG,KAAK,IAAI,EAAE;YAC7B,MAAM,IAAI,EAAE,CAAA;QACd,CAAC,CAAA;IACH,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,OAAO;QACX,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAA;QAC/B,MAAM,IAAI,CAAC,eAAe,EAAE,CAAA;IAC9B,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,eAAe;QAC3B,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;YACtC,MAAM,IAAI,KAAK,CAAC,2BAA2B,IAAI,CAAC,KAAK,CAAC,MAAM,kBAAkB,CAAC,CAAA;QACjF,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAA;QAClC,IAAI,KAAK,KAAK,WAAW,EAAE,CAAC;YAC1B,OAAM;QACR,CAAC;QACD,IAAI,KAAK,KAAK,YAAY,IAAI,KAAK,KAAK,eAAe,EAAE,CAAC;YACxD,MAAM,IAAI,KAAK,CAAC,OAAO,KAAK,0CAA0C,CAAC,CAAA;QACzE,CAAC;QAED,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE;YACzC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAA;YACvB,MAAM,IAAI,CAAC,SAAS,EAAE,CAAA;QACxB,CAAC,CAAC,CAAA;QAEF,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,IAAI,EAAE;YAC5C,IAAI,CAAC,WAAW,GAAG,KAAK,CAAA;YACxB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAA;YAC3B,IAAI,CAAC,UAAU,CAAC,kBAAkB,EAAE,CAAA;YACpC,MAAM,IAAI,CAAC,YAAY,EAAE,CAAA;QAC3B,CAAC,CAAC,CAAA;QAEF,MAAM,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,CAAA;QACpC,IAAI,CAAC,eAAe,GAAG,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAA;QACtD,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAA;IAChC,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,kBAAkB;QAC7B,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YAC5B,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAA;QAC7E,CAAC,EAAE,IAAI,CAAC,CAAA;QAER,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAA;YAC9C,MAAM,KAAK,GAAU,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;YAEhE,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;gBAC/B,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAA;gBACnE,KAAK,MAAM,IAAI,IAAI,eAAe,EAAE,CAAC;oBACnC,IAAI,IAAI,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;wBAClC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAA;oBACpB,CAAC;oBACD,IAAI,IAAI,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;wBACnC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAA;oBACrB,CAAC;oBACD,IAAI,IAAI,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;wBACnC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAA;oBACrB,CAAC;gBACH,CAAC;YACH,CAAC;YAED,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;gBAClC,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAA;YACjD,CAAC;YAED,OAAO,KAAK,CAAA;QACd,CAAC;gBAAS,CAAC;YACT,YAAY,CAAC,KAAK,CAAC,CAAA;QACrB,CAAC;IACH,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,gBAAgB;QAC3B,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,qBAAqB,CAAC,EAAE,CAAC,CAAA;YAChE,MAAM,eAAe,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,iBAAiB,CAAC,CAAA;YAE1E,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACjC,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAA;YAC1C,CAAC;YACD,OAAO,eAAe,CAAA;QACxB,CAAC;QAAC,OAAO,CAAM,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC,OAAO,IAAI,CAAC,EAAE,CAAC,CAAA;QAC1E,CAAC;IACH,CAAC;IAED;;;;OAIG;IACK,KAAK,CAAC,uBAAuB,CAAC,OAAsB;QAC1D,OAAO,MAAM,OAAO,CAAC,4BAA4B,CAAC,EAAE,CAAC,CAAA;IACvD,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,iBAAiB;QAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,EAAE,MAAM,CAAA;QACzC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAA;QACxD,CAAC;QACD,MAAM,IAAI,CAAC,cAAc,EAAE,CAAA;QAC3B,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAA;IAChC,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,qBAAqB;QACzB,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,EAAE,MAAM,CAAA;QACzC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAM;QACR,CAAC;QACD,IAAI,CAAC,kBAAkB,EAAE,CAAA;QACzB,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAA;IAC/B,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,UAAU;QACd,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAA;QAChC,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAA;QAEnC,IAAI,KAAK,KAAK,cAAc,EAAE,CAAC;YAC7B,OAAM;QACR,CAAC;QACD,IAAI,KAAK,KAAK,YAAY,IAAI,KAAK,KAAK,eAAe,EAAE,CAAC;YACxD,MAAM,IAAI,KAAK,CAAC,OAAO,KAAK,0CAA0C,CAAC,CAAA;QACzE,CAAC;QAED,MAAM,IAAI,CAAC,qBAAqB,EAAE,CAAA;QAClC,MAAM,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,CAAA;IACzC,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,kBAAkB;QAC9B,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC9B,MAAM,IAAI,CAAC,UAAU,EAAE,CAAA;YACvB,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAA;QACjC,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,aAAa;QACjB,MAAM,IAAI,CAAC,eAAe,EAAE,CAAA;QAC5B,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,MAAM,EAAE,CAAC;YAClC,MAAM,IAAI,KAAK,CAAC,yDAAyD,gBAAgB,GAAG,CAAC,CAAA;QAC/F,CAAC;QACD,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAA;QACtE,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAA;QAC/B,OAAO,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;IAC7B,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,aAAa,CAAC,IAAY;QAC9B,MAAM,KAAK,GAAG,gBAAgB,CAAC,KAAK,CAClC,EAAE,IAAI,EAAE,EACR,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE,EACxE,IAAI,CACL,CAAA;QAED,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,KAAM,CAAC,OAAO,CAAC,CAAA;QAClD,CAAC;QAED,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;QACrC,MAAM,IAAI,CAAC,eAAe,EAAE,CAAA;QAC5B,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,MAAM,EAAE,CAAC;YAClC,MAAM,IAAI,KAAK,CAAC,yDAAyD,gBAAgB,GAAG,CAAC,CAAA;QAC/F,CAAC;QACD,MAAM,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;QAChE,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAA;IACjC,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,OAAO,CAAC,MAAc;QAC1B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YAC7B,MAAM,IAAI,SAAS,CAAC,mDAAmD,CAAC,CAAA;QAC1E,CAAC;QAED,MAAM,IAAI,CAAC,eAAe,EAAE,CAAA;QAC5B,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,KAAK,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAA;QAClD,CAAC;QAED,MAAM,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;QAClE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,sBAAsB,EAAE,CAAA;QAClD,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAA;QAE/B,OAAO,MAAM,CAAA;IACf,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,sBAAsB;QAClC,MAAM,OAAO,GAAG,iBAAiB,CAAA;QACjC,IAAI,KAAK,GAA0B,IAAI,CAAA;QAEvC,MAAM,cAAc,GAAG,IAAI,OAAO,CAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;YACtD,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC,EAAE,OAAO,CAAC,CAAA;QACtE,CAAC,CAAC,CAAA;QAEF,MAAM,WAAW,GAAG,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,EAAE;YAClD,IAAI,CAAC,QAAQ,GAAG,CAAC,GAAW,EAAE,EAAE;gBAC9B,IAAI,KAAK,EAAE,CAAC;oBACV,YAAY,CAAC,KAAK,CAAC,CAAA;gBACrB,CAAC;gBACD,OAAO,CAAC,GAAG,CAAC,CAAA;YACd,CAAC,CAAA;QACH,CAAC,CAAC,CAAA;QAEF,OAAO,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC,CAAA;IAC1D,CAAC;IAED;;;;OAIG;IACK,KAAK,CAAC,kBAAkB,CAAC,IAA0B;QACzD,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YAC5B,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAA;QACjC,CAAC,EAAE,iBAAiB,CAAC,CAAA;QAErB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAA;YACrC,YAAY,CAAC,KAAK,CAAC,CAAA;YACnB,OAAO,MAAM,CAAA;QACf,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,YAAY,CAAC,KAAK,CAAC,CAAA;YACnB,MAAM,KAAK,CAAA;QACb,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACK,KAAK,CAAC,mBAAmB,CAAC,IAA0B,EAAE,GAAW;QACvE,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YAC5B,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAA;QAClC,CAAC,EAAE,kBAAkB,CAAC,CAAA;QAEtB,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;YACjC,YAAY,CAAC,KAAK,CAAC,CAAA;QACrB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,YAAY,CAAC,KAAK,CAAC,CAAA;YACnB,MAAM,KAAK,CAAA;QACb,CAAC;IACH,CAAC;CACF"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,20 @@
|
|
|
1
|
+
export * from './advertising.js';
|
|
1
2
|
export * from './device.js';
|
|
3
|
+
export * from './device/woblindtilt.js';
|
|
4
|
+
export * from './device/wobulb.js';
|
|
5
|
+
export * from './device/woceilinglight.js';
|
|
6
|
+
export * from './device/wocontact.js';
|
|
7
|
+
export * from './device/wocurtain.js';
|
|
8
|
+
export * from './device/wohand.js';
|
|
9
|
+
export * from './device/wohub2.js';
|
|
10
|
+
export * from './device/wohumi.js';
|
|
11
|
+
export * from './device/woiosensorth.js';
|
|
12
|
+
export * from './device/woplugmini.js';
|
|
13
|
+
export * from './device/wopresence.js';
|
|
14
|
+
export * from './device/wosensorth.js';
|
|
15
|
+
export * from './device/wosmartlock.js';
|
|
16
|
+
export * from './device/wosmartlockpro.js';
|
|
17
|
+
export * from './device/wostrip.js';
|
|
2
18
|
export * from './switchbot-ble.js';
|
|
3
19
|
export * from './switchbot-openapi.js';
|
|
4
20
|
export * from './types/bledevicestatus.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,cAAc,aAAa,CAAA;AAC3B,cAAc,oBAAoB,CAAA;AAClC,cAAc,wBAAwB,CAAA;AACtC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,uBAAuB,CAAA;AACrC,cAAc,uBAAuB,CAAA;AACrC,cAAc,2BAA2B,CAAA;AACzC,cAAc,yBAAyB,CAAA;AACvC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,yBAAyB,CAAA;AACvC,cAAc,kBAAkB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,cAAc,kBAAkB,CAAA;AAChC,cAAc,aAAa,CAAA;AAC3B,cAAc,yBAAyB,CAAA;AACvC,cAAc,oBAAoB,CAAA;AAClC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,uBAAuB,CAAA;AACrC,cAAc,uBAAuB,CAAA;AACrC,cAAc,oBAAoB,CAAA;AAClC,cAAc,oBAAoB,CAAA;AAClC,cAAc,oBAAoB,CAAA;AAClC,cAAc,0BAA0B,CAAA;AACxC,cAAc,wBAAwB,CAAA;AACtC,cAAc,wBAAwB,CAAA;AACtC,cAAc,wBAAwB,CAAA;AACtC,cAAc,yBAAyB,CAAA;AACvC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,qBAAqB,CAAA;AACnC,cAAc,oBAAoB,CAAA;AAClC,cAAc,wBAAwB,CAAA;AACtC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,uBAAuB,CAAA;AACrC,cAAc,uBAAuB,CAAA;AACrC,cAAc,2BAA2B,CAAA;AACzC,cAAc,yBAAyB,CAAA;AACvC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,yBAAyB,CAAA;AACvC,cAAc,kBAAkB,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -2,7 +2,23 @@
|
|
|
2
2
|
*
|
|
3
3
|
* index.ts: Switchbot BLE API registration.
|
|
4
4
|
*/
|
|
5
|
+
export * from './advertising.js';
|
|
5
6
|
export * from './device.js';
|
|
7
|
+
export * from './device/woblindtilt.js';
|
|
8
|
+
export * from './device/wobulb.js';
|
|
9
|
+
export * from './device/woceilinglight.js';
|
|
10
|
+
export * from './device/wocontact.js';
|
|
11
|
+
export * from './device/wocurtain.js';
|
|
12
|
+
export * from './device/wohand.js';
|
|
13
|
+
export * from './device/wohub2.js';
|
|
14
|
+
export * from './device/wohumi.js';
|
|
15
|
+
export * from './device/woiosensorth.js';
|
|
16
|
+
export * from './device/woplugmini.js';
|
|
17
|
+
export * from './device/wopresence.js';
|
|
18
|
+
export * from './device/wosensorth.js';
|
|
19
|
+
export * from './device/wosmartlock.js';
|
|
20
|
+
export * from './device/wosmartlockpro.js';
|
|
21
|
+
export * from './device/wostrip.js';
|
|
6
22
|
export * from './switchbot-ble.js';
|
|
7
23
|
export * from './switchbot-openapi.js';
|
|
8
24
|
export * from './types/bledevicestatus.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,cAAc,aAAa,CAAA;AAC3B,cAAc,oBAAoB,CAAA;AAClC,cAAc,wBAAwB,CAAA;AACtC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,uBAAuB,CAAA;AACrC,cAAc,uBAAuB,CAAA;AACrC,cAAc,2BAA2B,CAAA;AACzC,cAAc,yBAAyB,CAAA;AACvC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,yBAAyB,CAAA;AACvC,cAAc,kBAAkB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,cAAc,kBAAkB,CAAA;AAChC,cAAc,aAAa,CAAA;AAC3B,cAAc,yBAAyB,CAAA;AACvC,cAAc,oBAAoB,CAAA;AAClC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,uBAAuB,CAAA;AACrC,cAAc,uBAAuB,CAAA;AACrC,cAAc,oBAAoB,CAAA;AAClC,cAAc,oBAAoB,CAAA;AAClC,cAAc,oBAAoB,CAAA;AAClC,cAAc,0BAA0B,CAAA;AACxC,cAAc,wBAAwB,CAAA;AACtC,cAAc,wBAAwB,CAAA;AACtC,cAAc,wBAAwB,CAAA;AACtC,cAAc,yBAAyB,CAAA;AACvC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,qBAAqB,CAAA;AACnC,cAAc,oBAAoB,CAAA;AAClC,cAAc,wBAAwB,CAAA;AACtC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,uBAAuB,CAAA;AACrC,cAAc,uBAAuB,CAAA;AACrC,cAAc,2BAA2B,CAAA;AACzC,cAAc,yBAAyB,CAAA;AACvC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,yBAAyB,CAAA;AACvC,cAAc,kBAAkB,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parameter-checker.d.ts","sourceRoot":"","sources":["../src/parameter-checker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AAOzD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAE1C,qBAAa,gBAAiB,SAAQ,YAAY;IAChD,OAAO,CAAC,MAAM,CAA2B;IAEzC;;;;;OAKG;YACW,OAAO;IAIrB;;;;OAIG;IACH,IAAI,KAAK,IAAI,WAAW,GAAG,IAAI,CAE9B;IAED;;;;;OAKG;IACH,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO;IAIpC;;;;;;;OAOG;IACG,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,QAAQ,GAAE,OAAe,GAAG,OAAO,CAAC,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"parameter-checker.d.ts","sourceRoot":"","sources":["../src/parameter-checker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AAOzD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAE1C,qBAAa,gBAAiB,SAAQ,YAAY;IAChD,OAAO,CAAC,MAAM,CAA2B;IAEzC;;;;;OAKG;YACW,OAAO;IAIrB;;;;OAIG;IACH,IAAI,KAAK,IAAI,WAAW,GAAG,IAAI,CAE9B;IAED;;;;;OAKG;IACH,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO;IAIpC;;;;;;;OAOG;IACG,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,QAAQ,GAAE,OAAe,GAAG,OAAO,CAAC,OAAO,CAAC;IAqDnH;;;;;;;OAOG;IACG,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,GAAE,MAAgB,GAAG,OAAO,CAAC,OAAO,CAAC;IA8BnF;;;;;;;OAOG;IACG,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,GAAE,MAAgB,GAAG,OAAO,CAAC,OAAO,CAAC;IAerF;;;;;;;OAOG;IACG,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,GAAE,MAAgB,GAAG,OAAO,CAAC,OAAO,CAAC;IAerF;;;;;;;OAOG;IACG,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,GAAE,MAAgB,GAAG,OAAO,CAAC,OAAO,CAAC;IAepF;;;;;;;OAOG;IACG,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,GAAE,MAAgB,GAAG,OAAO,CAAC,OAAO,CAAC;IAyBnF;;;;;;;OAOG;IACG,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,GAAE,MAAgB,GAAG,OAAO,CAAC,OAAO,CAAC;CAkDrF;AAED,eAAO,MAAM,gBAAgB,kBAAyB,CAAA"}
|
|
@@ -42,15 +42,7 @@ export class ParameterChecker extends EventEmitter {
|
|
|
42
42
|
*/
|
|
43
43
|
async check(obj, rules, required = false) {
|
|
44
44
|
this._error = null;
|
|
45
|
-
|
|
46
|
-
console.log('Checking object:', obj);
|
|
47
|
-
// eslint-disable-next-line no-console
|
|
48
|
-
console.log('With rules:', rules);
|
|
49
|
-
// eslint-disable-next-line no-console
|
|
50
|
-
console.log('Is required:', required);
|
|
51
|
-
this.emitLog('debug', `Checking object: ${JSON.stringify(obj)}`);
|
|
52
|
-
this.emitLog('debug', `With rules: ${JSON.stringify(rules)}`);
|
|
53
|
-
this.emitLog('debug', `Is required: ${JSON.stringify(required)}`);
|
|
45
|
+
this.emitLog('debug', `Using rules: ${JSON.stringify(rules)}`);
|
|
54
46
|
if (required && !this.isSpecified(obj)) {
|
|
55
47
|
this._error = { code: 'MISSING_REQUIRED', message: 'The first argument is missing.' };
|
|
56
48
|
return false;
|