node-switchbot 2.4.0 → 2.5.0-beta.1
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/npm-version-script.cjs +81 -0
- package/CHANGELOG.md +1 -1
- package/dist/advertising.d.ts +14 -148
- package/dist/advertising.d.ts.map +1 -1
- package/dist/advertising.js +36 -92
- package/dist/advertising.js.map +1 -1
- package/dist/device/woblindtilt.d.ts +98 -13
- package/dist/device/woblindtilt.d.ts.map +1 -1
- package/dist/device/woblindtilt.js +192 -86
- package/dist/device/woblindtilt.js.map +1 -1
- package/dist/device/woblindtilt.test.d.ts +2 -0
- package/dist/device/woblindtilt.test.d.ts.map +1 -0
- package/dist/device/woblindtilt.test.js +26 -0
- package/dist/device/woblindtilt.test.js.map +1 -0
- package/dist/device/wobulb.d.ts +17 -34
- package/dist/device/wobulb.d.ts.map +1 -1
- package/dist/device/wobulb.js +53 -61
- package/dist/device/wobulb.js.map +1 -1
- package/dist/device/wobulb.test.d.ts +2 -0
- package/dist/device/wobulb.test.d.ts.map +1 -0
- package/dist/device/wobulb.test.js +52 -0
- package/dist/device/wobulb.test.js.map +1 -0
- package/dist/device/woceilinglight.d.ts +21 -51
- package/dist/device/woceilinglight.d.ts.map +1 -1
- package/dist/device/woceilinglight.js +53 -64
- package/dist/device/woceilinglight.js.map +1 -1
- package/dist/device/woceilinglight.test.d.ts +2 -0
- package/dist/device/woceilinglight.test.d.ts.map +1 -0
- package/dist/device/woceilinglight.test.js +63 -0
- package/dist/device/woceilinglight.test.js.map +1 -0
- package/dist/device/wocontact.d.ts +1 -14
- package/dist/device/wocontact.d.ts.map +1 -1
- package/dist/device/wocontact.js +13 -13
- package/dist/device/wocontact.js.map +1 -1
- package/dist/device/wocontact.test.d.ts +2 -0
- package/dist/device/wocontact.test.d.ts.map +1 -0
- package/dist/device/wocontact.test.js +34 -0
- package/dist/device/wocontact.test.js.map +1 -0
- package/dist/device/wocurtain.d.ts +5 -16
- package/dist/device/wocurtain.d.ts.map +1 -1
- package/dist/device/wocurtain.js +58 -47
- package/dist/device/wocurtain.js.map +1 -1
- package/dist/device/wocurtain.test.d.ts +2 -0
- package/dist/device/wocurtain.test.d.ts.map +1 -0
- package/dist/device/wocurtain.test.js +33 -0
- package/dist/device/wocurtain.test.js.map +1 -0
- package/dist/device/wohand.d.ts +2 -10
- package/dist/device/wohand.d.ts.map +1 -1
- package/dist/device/wohand.js +31 -33
- package/dist/device/wohand.js.map +1 -1
- package/dist/device/wohand.test.d.ts +2 -0
- package/dist/device/wohand.test.d.ts.map +1 -0
- package/dist/device/wohand.test.js +62 -0
- package/dist/device/wohand.test.js.map +1 -0
- package/dist/device/wohand2.test.d.ts +2 -0
- package/dist/device/wohand2.test.d.ts.map +1 -0
- package/dist/device/wohand2.test.js +50 -0
- package/dist/device/wohand2.test.js.map +1 -0
- package/dist/device/wohub2.d.ts +1 -19
- 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 +2 -11
- package/dist/device/wohumi.d.ts.map +1 -1
- package/dist/device/wohumi.js +31 -33
- package/dist/device/wohumi.js.map +1 -1
- package/dist/device/wohumi.test.d.ts +2 -0
- package/dist/device/wohumi.test.d.ts.map +1 -0
- package/dist/device/wohumi.test.js +61 -0
- package/dist/device/wohumi.test.js.map +1 -0
- package/dist/device/woiosensorth.d.ts +1 -19
- package/dist/device/woiosensorth.d.ts.map +1 -1
- package/dist/device/woiosensorth.js +14 -10
- package/dist/device/woiosensorth.js.map +1 -1
- package/dist/device/woiosensorth.test.d.ts +2 -0
- package/dist/device/woiosensorth.test.d.ts.map +1 -0
- package/dist/device/woiosensorth.test.js +39 -0
- package/dist/device/woiosensorth.test.js.map +1 -0
- package/dist/device/woplugmini.d.ts +12 -38
- package/dist/device/woplugmini.d.ts.map +1 -1
- package/dist/device/woplugmini.js +35 -40
- package/dist/device/woplugmini.js.map +1 -1
- package/dist/device/woplugmini.test.d.ts +2 -0
- package/dist/device/woplugmini.test.d.ts.map +1 -0
- package/dist/device/woplugmini.test.js +91 -0
- package/dist/device/woplugmini.test.js.map +1 -0
- package/dist/device/wopresence.d.ts +2 -14
- package/dist/device/wopresence.d.ts.map +1 -1
- package/dist/device/wopresence.js +11 -7
- package/dist/device/wopresence.js.map +1 -1
- package/dist/device/wopresence.test.d.ts +2 -0
- package/dist/device/wopresence.test.d.ts.map +1 -0
- package/dist/device/wopresence.test.js +42 -0
- package/dist/device/wopresence.test.js.map +1 -0
- package/dist/device/wosensorth.d.ts +3 -37
- package/dist/device/wosensorth.d.ts.map +1 -1
- package/dist/device/wosensorth.js +24 -20
- package/dist/device/wosensorth.js.map +1 -1
- package/dist/device/wosensorth.test.d.ts +2 -0
- package/dist/device/wosensorth.test.d.ts.map +1 -0
- package/dist/device/wosensorth.test.js +59 -0
- package/dist/device/wosensorth.test.js.map +1 -0
- package/dist/device/wosmartlock.d.ts +19 -33
- package/dist/device/wosmartlock.d.ts.map +1 -1
- package/dist/device/wosmartlock.js +104 -83
- package/dist/device/wosmartlock.js.map +1 -1
- package/dist/device/wosmartlock.test.d.ts +2 -0
- package/dist/device/wosmartlock.test.d.ts.map +1 -0
- package/dist/device/wosmartlock.test.js +84 -0
- package/dist/device/wosmartlock.test.js.map +1 -0
- package/dist/device/wosmartlockpro.d.ts +13 -27
- package/dist/device/wosmartlockpro.d.ts.map +1 -1
- package/dist/device/wosmartlockpro.js +90 -70
- package/dist/device/wosmartlockpro.js.map +1 -1
- package/dist/device/wosmartlockpro.test.d.ts +2 -0
- package/dist/device/wosmartlockpro.test.d.ts.map +1 -0
- package/dist/device/wosmartlockpro.test.js +124 -0
- package/dist/device/wosmartlockpro.test.js.map +1 -0
- package/dist/device/wostrip.d.ts +18 -32
- package/dist/device/wostrip.d.ts.map +1 -1
- package/dist/device/wostrip.js +58 -70
- package/dist/device/wostrip.js.map +1 -1
- package/dist/device/wostrip.test.d.ts +2 -0
- package/dist/device/wostrip.test.d.ts.map +1 -0
- package/dist/device/wostrip.test.js +115 -0
- package/dist/device/wostrip.test.js.map +1 -0
- package/dist/device.d.ts +237 -39
- package/dist/device.d.ts.map +1 -1
- package/dist/device.js +478 -366
- package/dist/device.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/parameter-checker.d.ts.map +1 -1
- package/dist/parameter-checker.js.map +1 -1
- package/dist/settings.d.ts +8 -0
- package/dist/settings.d.ts.map +1 -0
- package/dist/settings.js +12 -0
- package/dist/settings.js.map +1 -0
- package/dist/switchbot.d.ts +30 -9
- package/dist/switchbot.d.ts.map +1 -1
- package/dist/switchbot.js +48 -78
- package/dist/switchbot.js.map +1 -1
- package/dist/types/bledevicestatus.d.ts +288 -0
- package/dist/types/bledevicestatus.d.ts.map +1 -0
- package/dist/types/bledevicestatus.js +2 -0
- package/dist/types/bledevicestatus.js.map +1 -0
- package/dist/types/devicelist.d.ts +89 -0
- package/dist/types/devicelist.d.ts.map +1 -0
- package/dist/types/devicelist.js +6 -0
- package/dist/types/devicelist.js.map +1 -0
- package/dist/types/deviceresponse.d.ts +13 -0
- package/dist/types/deviceresponse.d.ts.map +1 -0
- package/dist/types/deviceresponse.js +2 -0
- package/dist/types/deviceresponse.js.map +1 -0
- package/dist/types/devicestatus.d.ts +149 -0
- package/dist/types/devicestatus.d.ts.map +1 -0
- package/dist/types/devicestatus.js +3 -0
- package/dist/types/devicestatus.js.map +1 -0
- package/dist/types/devicewebhookstatus.d.ts +156 -0
- package/dist/types/devicewebhookstatus.d.ts.map +1 -0
- package/dist/types/devicewebhookstatus.js +2 -0
- package/dist/types/devicewebhookstatus.js.map +1 -0
- package/dist/types/irdevicelist.d.ts +10 -0
- package/dist/types/irdevicelist.d.ts.map +1 -0
- package/dist/types/irdevicelist.js +2 -0
- package/dist/types/irdevicelist.js.map +1 -0
- package/dist/types/pushbody.d.ts +6 -0
- package/dist/types/pushbody.d.ts.map +1 -0
- package/dist/types/pushbody.js +2 -0
- package/dist/types/pushbody.js.map +1 -0
- package/dist/{types.d.ts → types/types.d.ts} +9 -0
- package/dist/types/types.d.ts.map +1 -0
- package/dist/types/types.js.map +1 -0
- package/jest.config.js +3 -0
- package/package.json +22 -14
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js.map +0 -1
- /package/dist/{types.js → types/types.js} +0 -0
package/dist/device/wostrip.js
CHANGED
|
@@ -1,30 +1,31 @@
|
|
|
1
|
+
import { Buffer } from 'node:buffer';
|
|
1
2
|
/* Copyright(C) 2024, donavanbecker (https://github.com/donavanbecker). All rights reserved.
|
|
2
3
|
*
|
|
3
4
|
* wostrip.ts: Switchbot BLE API registration.
|
|
4
5
|
*/
|
|
5
|
-
import { Buffer } from 'node:buffer';
|
|
6
6
|
import { SwitchbotDevice } from '../device.js';
|
|
7
|
-
import { SwitchBotBLEModel, SwitchBotBLEModelFriendlyName, SwitchBotBLEModelName } from '../types.js';
|
|
7
|
+
import { SwitchBotBLEModel, SwitchBotBLEModelFriendlyName, SwitchBotBLEModelName } from '../types/types.js';
|
|
8
8
|
/**
|
|
9
9
|
* @see https://github.com/OpenWonderLabs/SwitchBotAPI-BLE/blob/latest/devicetypes/colorbulb.md
|
|
10
10
|
*/
|
|
11
11
|
export class WoStrip extends SwitchbotDevice {
|
|
12
|
-
static parseServiceData(
|
|
13
|
-
if (
|
|
12
|
+
static async parseServiceData(serviceData, onlog) {
|
|
13
|
+
if (serviceData.length !== 18) {
|
|
14
14
|
if (onlog && typeof onlog === 'function') {
|
|
15
|
-
onlog(`[parseServiceDataForWoStrip] Buffer length ${
|
|
15
|
+
onlog(`[parseServiceDataForWoStrip] Buffer length ${serviceData.length} !== 18!`);
|
|
16
16
|
}
|
|
17
17
|
return null;
|
|
18
18
|
}
|
|
19
|
-
// const byte1 =
|
|
20
|
-
// const byte2 =
|
|
21
|
-
const byte3 =
|
|
22
|
-
const byte4 =
|
|
23
|
-
const byte5 =
|
|
24
|
-
const byte7 =
|
|
25
|
-
const byte8 =
|
|
26
|
-
const byte9 =
|
|
27
|
-
const byte10 =
|
|
19
|
+
// const byte1 = serviceData.readUInt8(1)// power and light status
|
|
20
|
+
// const byte2 = serviceData.readUInt8(2)// bulb brightness
|
|
21
|
+
const byte3 = serviceData.readUInt8(3); // bulb R
|
|
22
|
+
const byte4 = serviceData.readUInt8(4); // bulb G
|
|
23
|
+
const byte5 = serviceData.readUInt8(5); // bulb B
|
|
24
|
+
const byte7 = serviceData.readUInt8(7);
|
|
25
|
+
const byte8 = serviceData.readUInt8(8);
|
|
26
|
+
const byte9 = serviceData.readUInt8(9);
|
|
27
|
+
const byte10 = serviceData.readUInt8(10);
|
|
28
|
+
const power = !!(byte7 & 0b10000000);
|
|
28
29
|
const state = !!(byte7 & 0b10000000);
|
|
29
30
|
const brightness = byte7 & 0b01111111;
|
|
30
31
|
const red = byte3;
|
|
@@ -39,6 +40,7 @@ export class WoStrip extends SwitchbotDevice {
|
|
|
39
40
|
model: SwitchBotBLEModel.StripLight,
|
|
40
41
|
modelName: SwitchBotBLEModelName.StripLight,
|
|
41
42
|
modelFriendlyName: SwitchBotBLEModelFriendlyName.StripLight,
|
|
43
|
+
power,
|
|
42
44
|
state,
|
|
43
45
|
brightness,
|
|
44
46
|
red,
|
|
@@ -53,38 +55,36 @@ export class WoStrip extends SwitchbotDevice {
|
|
|
53
55
|
return data;
|
|
54
56
|
}
|
|
55
57
|
/**
|
|
56
|
-
* @returns
|
|
58
|
+
* @returns resolves with a boolean that tells whether the plug in ON(true) or OFF(false)
|
|
57
59
|
*/
|
|
58
|
-
readState() {
|
|
59
|
-
return this.
|
|
60
|
+
async readState() {
|
|
61
|
+
return await this.operateStripLight([0x57, 0x0F, 0x4A, 0x01]);
|
|
60
62
|
}
|
|
61
63
|
/**
|
|
62
64
|
* @private
|
|
63
65
|
*/
|
|
64
|
-
|
|
66
|
+
async setState(reqByteArray) {
|
|
65
67
|
const base = [0x57, 0x0F, 0x49, 0x01];
|
|
66
|
-
return this.
|
|
68
|
+
return await this.operateStripLight([...base, ...reqByteArray]);
|
|
67
69
|
}
|
|
68
70
|
/**
|
|
69
|
-
* @returns
|
|
71
|
+
* @returns resolves with a boolean that tells whether the plug in ON(true) or OFF(false)
|
|
70
72
|
*/
|
|
71
|
-
turnOn() {
|
|
72
|
-
return this.
|
|
73
|
+
async turnOn() {
|
|
74
|
+
return await this.setState([0x01, 0x01]);
|
|
73
75
|
}
|
|
74
76
|
/**
|
|
75
|
-
* @returns
|
|
77
|
+
* @returns resolves with a boolean that tells whether the plug in ON(true) or OFF(false)
|
|
76
78
|
*/
|
|
77
|
-
turnOff() {
|
|
78
|
-
return this.
|
|
79
|
+
async turnOff() {
|
|
80
|
+
return await this.setState([0x01, 0x02]);
|
|
79
81
|
}
|
|
80
82
|
/**
|
|
81
|
-
* @returns
|
|
83
|
+
* @returns resolves with brightness percent
|
|
82
84
|
*/
|
|
83
|
-
setBrightness(brightness) {
|
|
85
|
+
async setBrightness(brightness) {
|
|
84
86
|
if (typeof brightness !== 'number') {
|
|
85
|
-
|
|
86
|
-
reject(new Error(`The type of target brightness percentage is incorrect: ${typeof brightness}`));
|
|
87
|
-
});
|
|
87
|
+
throw new TypeError(`The type of target brightness percentage is incorrect: ${typeof brightness}`);
|
|
88
88
|
}
|
|
89
89
|
if (brightness > 100) {
|
|
90
90
|
brightness = 100;
|
|
@@ -92,41 +92,31 @@ export class WoStrip extends SwitchbotDevice {
|
|
|
92
92
|
else if (brightness < 0) {
|
|
93
93
|
brightness = 0;
|
|
94
94
|
}
|
|
95
|
-
return this.
|
|
95
|
+
return await this.setState([0x02, 0x14]);
|
|
96
96
|
}
|
|
97
97
|
/**
|
|
98
|
-
*
|
|
98
|
+
* @returns resolves with color temperature
|
|
99
99
|
*/
|
|
100
|
-
setColorTemperature(color_temperature) {
|
|
100
|
+
async setColorTemperature(color_temperature) {
|
|
101
101
|
if (color_temperature) {
|
|
102
|
-
|
|
103
|
-
reject(new Error(`Strip Light Doesn't Support Color temperature: ${typeof color_temperature}`));
|
|
104
|
-
});
|
|
102
|
+
throw new Error(`Strip Light Doesn't Support Color temperature: ${typeof color_temperature}`);
|
|
105
103
|
}
|
|
106
104
|
}
|
|
107
105
|
/**
|
|
108
|
-
* @returns
|
|
106
|
+
* @returns resolves with brightness + rgb
|
|
109
107
|
*/
|
|
110
|
-
setRGB(brightness, red, green, blue) {
|
|
108
|
+
async setRGB(brightness, red, green, blue) {
|
|
111
109
|
if (typeof brightness !== 'number') {
|
|
112
|
-
|
|
113
|
-
reject(new Error(`The type of target brightness percentage is incorrect: ${typeof brightness}`));
|
|
114
|
-
});
|
|
110
|
+
throw new TypeError(`The type of target brightness percentage is incorrect: ${typeof brightness}`);
|
|
115
111
|
}
|
|
116
112
|
if (typeof red !== 'number') {
|
|
117
|
-
|
|
118
|
-
reject(new Error(`The type of target red is incorrect: ${typeof red}`));
|
|
119
|
-
});
|
|
113
|
+
throw new TypeError(`The type of target red is incorrect: ${typeof red}`);
|
|
120
114
|
}
|
|
121
115
|
if (typeof green !== 'number') {
|
|
122
|
-
|
|
123
|
-
reject(new Error(`The type of target green is incorrect: ${typeof green}`));
|
|
124
|
-
});
|
|
116
|
+
throw new TypeError(`The type of target green is incorrect: ${typeof green}`);
|
|
125
117
|
}
|
|
126
118
|
if (typeof blue !== 'number') {
|
|
127
|
-
|
|
128
|
-
reject(new Error(`The type of target blue is incorrect: ${typeof blue}`));
|
|
129
|
-
});
|
|
119
|
+
throw new TypeError(`The type of target blue is incorrect: ${typeof blue}`);
|
|
130
120
|
}
|
|
131
121
|
if (brightness > 100) {
|
|
132
122
|
brightness = 100;
|
|
@@ -152,34 +142,32 @@ export class WoStrip extends SwitchbotDevice {
|
|
|
152
142
|
else if (blue < 0) {
|
|
153
143
|
blue = 0;
|
|
154
144
|
}
|
|
155
|
-
return this.
|
|
145
|
+
return await this.setState([0x02, 0x12, brightness, red, green, blue]);
|
|
156
146
|
}
|
|
157
147
|
/**
|
|
158
148
|
* @private
|
|
159
149
|
*/
|
|
160
|
-
|
|
150
|
+
async operateStripLight(bytes) {
|
|
161
151
|
const req_buf = Buffer.from(bytes);
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
resolve(is_on);
|
|
171
|
-
}
|
|
172
|
-
else {
|
|
173
|
-
reject(new Error(`The device returned an error: 0x${res_buf.toString('hex')}`));
|
|
174
|
-
}
|
|
152
|
+
await this.command(req_buf)
|
|
153
|
+
.then((res_bytes) => {
|
|
154
|
+
const res_buf = Buffer.from(res_bytes);
|
|
155
|
+
if (res_buf.length === 2) {
|
|
156
|
+
const code = res_buf.readUInt8(1);
|
|
157
|
+
if (code === 0x00 || code === 0x80) {
|
|
158
|
+
const is_on = code === 0x80;
|
|
159
|
+
return is_on;
|
|
175
160
|
}
|
|
176
161
|
else {
|
|
177
|
-
|
|
162
|
+
throw new Error(`The device returned an error: 0x${res_buf.toString('hex')}`);
|
|
178
163
|
}
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
}
|
|
164
|
+
}
|
|
165
|
+
else {
|
|
166
|
+
throw new Error(`Expecting a 2-byte response, got instead: 0x${res_buf.toString('hex')}`);
|
|
167
|
+
}
|
|
168
|
+
})
|
|
169
|
+
.catch((error) => {
|
|
170
|
+
throw error;
|
|
183
171
|
});
|
|
184
172
|
}
|
|
185
173
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wostrip.js","sourceRoot":"","sources":["../../src/device/wostrip.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"wostrip.js","sourceRoot":"","sources":["../../src/device/wostrip.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wostrip.test.d.ts","sourceRoot":"","sources":["../../src/device/wostrip.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import { Buffer } from 'node:buffer';
|
|
2
|
+
import { expect } from 'chai';
|
|
3
|
+
import { WoStrip } from './wostrip.js';
|
|
4
|
+
describe('woStrip', () => {
|
|
5
|
+
describe('parseServiceData', () => {
|
|
6
|
+
it('should return null if serviceData length is not 18', async () => {
|
|
7
|
+
const serviceData = Buffer.alloc(10);
|
|
8
|
+
const result = await WoStrip.parseServiceData(serviceData, () => { });
|
|
9
|
+
return expect(result).to.be.null;
|
|
10
|
+
});
|
|
11
|
+
it('should parse serviceData correctly', async () => {
|
|
12
|
+
const serviceData = Buffer.from([0, 0, 0, 255, 255, 255, 0, 128, 8, 127, 254, 0, 0, 0, 0, 0, 0, 0]);
|
|
13
|
+
const result = await WoStrip.parseServiceData(serviceData, () => { });
|
|
14
|
+
expect(result).to.deep.equal({
|
|
15
|
+
model: 'StripLight',
|
|
16
|
+
modelName: 'StripLight',
|
|
17
|
+
modelFriendlyName: 'StripLight',
|
|
18
|
+
power: true,
|
|
19
|
+
state: true,
|
|
20
|
+
brightness: 0,
|
|
21
|
+
red: 255,
|
|
22
|
+
green: 255,
|
|
23
|
+
blue: 255,
|
|
24
|
+
delay: 128,
|
|
25
|
+
preset: 8,
|
|
26
|
+
color_mode: 0,
|
|
27
|
+
speed: 127,
|
|
28
|
+
loop_index: 254,
|
|
29
|
+
});
|
|
30
|
+
});
|
|
31
|
+
});
|
|
32
|
+
describe('readState', () => {
|
|
33
|
+
it('should return the state of the strip light', async () => {
|
|
34
|
+
const peripheral = {}; // Replace with actual peripheral object
|
|
35
|
+
const noble = {}; // Replace with actual noble object
|
|
36
|
+
const woStrip = new WoStrip(peripheral, noble);
|
|
37
|
+
woStrip.operateStripLight = async () => { };
|
|
38
|
+
const result = await woStrip.readState();
|
|
39
|
+
return expect(result).to.be.true;
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
describe('turnOn', () => {
|
|
43
|
+
it('should turn on the strip light', async () => {
|
|
44
|
+
const peripheral = {}; // Replace with actual peripheral object
|
|
45
|
+
const noble = {}; // Replace with actual noble object
|
|
46
|
+
const woStrip = new WoStrip(peripheral, noble);
|
|
47
|
+
woStrip.setState = async () => { };
|
|
48
|
+
const result = await woStrip.turnOn();
|
|
49
|
+
return expect(result).to.be.true;
|
|
50
|
+
});
|
|
51
|
+
});
|
|
52
|
+
describe('turnOff', () => {
|
|
53
|
+
it('should turn off the strip light', async () => {
|
|
54
|
+
const peripheral = {}; // Replace with actual peripheral object
|
|
55
|
+
const noble = {}; // Replace with actual noble object
|
|
56
|
+
const woStrip = new WoStrip(peripheral, noble);
|
|
57
|
+
woStrip.setState = async () => { };
|
|
58
|
+
const result = await woStrip.turnOff();
|
|
59
|
+
return expect(result).to.be.true;
|
|
60
|
+
});
|
|
61
|
+
});
|
|
62
|
+
describe('setBrightness', () => {
|
|
63
|
+
it('should set the brightness of the strip light', async () => {
|
|
64
|
+
const peripheral = {}; // Replace with actual peripheral object
|
|
65
|
+
const noble = {}; // Replace with actual noble object
|
|
66
|
+
const woStrip = new WoStrip(peripheral, noble);
|
|
67
|
+
woStrip.setState = async () => { };
|
|
68
|
+
const result = await woStrip.setBrightness(50);
|
|
69
|
+
return expect(result).to.be.true;
|
|
70
|
+
});
|
|
71
|
+
it('should throw an error if brightness is not a number', async () => {
|
|
72
|
+
const peripheral = {}; // Replace with actual peripheral object
|
|
73
|
+
const noble = {}; // Replace with actual noble object
|
|
74
|
+
const woStrip = new WoStrip(peripheral, noble);
|
|
75
|
+
try {
|
|
76
|
+
await woStrip.setBrightness('50');
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
if (error instanceof Error) {
|
|
80
|
+
expect(error.message).to.equal('The type of target brightness percentage is incorrect: string');
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
throw error;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
});
|
|
88
|
+
describe('setRGB', () => {
|
|
89
|
+
it('should set the RGB values of the strip light', async () => {
|
|
90
|
+
const peripheral = {}; // Replace with actual peripheral object
|
|
91
|
+
const noble = {}; // Replace with actual noble object
|
|
92
|
+
const woStrip = new WoStrip(peripheral, noble);
|
|
93
|
+
woStrip.setState = async () => { };
|
|
94
|
+
const result = await woStrip.setRGB(50, 255, 255, 255);
|
|
95
|
+
return expect(result).to.be.true;
|
|
96
|
+
});
|
|
97
|
+
it('should throw an error if any RGB value is not a number', async () => {
|
|
98
|
+
const peripheral = {}; // Replace with actual peripheral object
|
|
99
|
+
const noble = {}; // Replace with actual noble object
|
|
100
|
+
const woStrip = new WoStrip(peripheral, noble);
|
|
101
|
+
try {
|
|
102
|
+
await woStrip.setRGB(50, '255', 255, 255);
|
|
103
|
+
}
|
|
104
|
+
catch (error) {
|
|
105
|
+
if (error instanceof Error) {
|
|
106
|
+
expect(error.message).to.equal('The type of target red is incorrect: string');
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
throw error;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
});
|
|
114
|
+
});
|
|
115
|
+
//# sourceMappingURL=wostrip.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wostrip.test.js","sourceRoot":"","sources":["../../src/device/wostrip.test.ts"],"names":[],"mappings":"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"}
|