node-switchbot 4.0.0-beta.11 → 4.0.0-beta.12
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/ble.d.ts +10 -0
- package/dist/ble.d.ts.map +1 -1
- package/dist/ble.js +69 -3
- package/dist/ble.js.map +1 -1
- package/dist/devices/index.d.ts +7 -0
- package/dist/devices/index.d.ts.map +1 -1
- package/dist/devices/index.js +7 -0
- package/dist/devices/index.js.map +1 -1
- package/dist/devices/wo-ai-hub.d.ts +6 -0
- package/dist/devices/wo-ai-hub.d.ts.map +1 -0
- package/dist/devices/wo-ai-hub.js +7 -0
- package/dist/devices/wo-ai-hub.js.map +1 -0
- package/dist/devices/wo-air-purifier-pm25.d.ts +6 -0
- package/dist/devices/wo-air-purifier-pm25.d.ts.map +1 -0
- package/dist/devices/wo-air-purifier-pm25.js +7 -0
- package/dist/devices/wo-air-purifier-pm25.js.map +1 -0
- package/dist/devices/wo-air-purifier.d.ts +17 -0
- package/dist/devices/wo-air-purifier.d.ts.map +1 -1
- package/dist/devices/wo-air-purifier.js +74 -9
- package/dist/devices/wo-air-purifier.js.map +1 -1
- package/dist/devices/wo-blind-tilt.d.ts +1 -0
- package/dist/devices/wo-blind-tilt.d.ts.map +1 -1
- package/dist/devices/wo-blind-tilt.js +41 -2
- package/dist/devices/wo-blind-tilt.js.map +1 -1
- package/dist/devices/wo-bulb.d.ts +27 -1
- package/dist/devices/wo-bulb.d.ts.map +1 -1
- package/dist/devices/wo-bulb.js +124 -34
- package/dist/devices/wo-bulb.js.map +1 -1
- package/dist/devices/wo-candle-warmer-lamp.d.ts +6 -0
- package/dist/devices/wo-candle-warmer-lamp.d.ts.map +1 -0
- package/dist/devices/wo-candle-warmer-lamp.js +7 -0
- package/dist/devices/wo-candle-warmer-lamp.js.map +1 -0
- package/dist/devices/wo-curtain.d.ts +17 -1
- package/dist/devices/wo-curtain.d.ts.map +1 -1
- package/dist/devices/wo-curtain.js +106 -2
- package/dist/devices/wo-curtain.js.map +1 -1
- package/dist/devices/wo-humi.d.ts +16 -0
- package/dist/devices/wo-humi.d.ts.map +1 -1
- package/dist/devices/wo-humi.js +39 -0
- package/dist/devices/wo-humi.js.map +1 -1
- package/dist/devices/wo-humi2.d.ts +0 -12
- package/dist/devices/wo-humi2.d.ts.map +1 -1
- package/dist/devices/wo-humi2.js +0 -18
- package/dist/devices/wo-humi2.js.map +1 -1
- package/dist/devices/wo-pan-tilt-cam-plus-3k.d.ts +6 -0
- package/dist/devices/wo-pan-tilt-cam-plus-3k.d.ts.map +1 -0
- package/dist/devices/wo-pan-tilt-cam-plus-3k.js +7 -0
- package/dist/devices/wo-pan-tilt-cam-plus-3k.js.map +1 -0
- package/dist/devices/wo-relay-switch-1.d.ts +14 -0
- package/dist/devices/wo-relay-switch-1.d.ts.map +1 -1
- package/dist/devices/wo-relay-switch-1.js +47 -10
- package/dist/devices/wo-relay-switch-1.js.map +1 -1
- package/dist/devices/wo-relay-switch-2pm.d.ts.map +1 -1
- package/dist/devices/wo-relay-switch-2pm.js +4 -6
- package/dist/devices/wo-relay-switch-2pm.js.map +1 -1
- package/dist/devices/wo-remote-with-screen.d.ts +6 -0
- package/dist/devices/wo-remote-with-screen.d.ts.map +1 -0
- package/dist/devices/wo-remote-with-screen.js +7 -0
- package/dist/devices/wo-remote-with-screen.js.map +1 -0
- package/dist/devices/wo-rgbic-neon-wire-rope-light.d.ts +6 -0
- package/dist/devices/wo-rgbic-neon-wire-rope-light.d.ts.map +1 -0
- package/dist/devices/wo-rgbic-neon-wire-rope-light.js +7 -0
- package/dist/devices/wo-rgbic-neon-wire-rope-light.js.map +1 -0
- package/dist/devices/wo-water-detector.d.ts +6 -0
- package/dist/devices/wo-water-detector.d.ts.map +1 -0
- package/dist/devices/wo-water-detector.js +7 -0
- package/dist/devices/wo-water-detector.js.map +1 -0
- package/dist/errors.d.ts +20 -0
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +31 -1
- package/dist/errors.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/settings.d.ts +1 -0
- package/dist/settings.d.ts.map +1 -1
- package/dist/settings.js +10 -0
- package/dist/settings.js.map +1 -1
- package/dist/switchbot.d.ts.map +1 -1
- package/dist/switchbot.js +14 -0
- package/dist/switchbot.js.map +1 -1
- package/dist/types/device.d.ts +25 -0
- package/dist/types/device.d.ts.map +1 -1
- package/dist/utils/index.d.ts +5 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +9 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/relay-encryption.d.ts +10 -0
- package/dist/utils/relay-encryption.d.ts.map +1 -0
- package/dist/utils/relay-encryption.js +23 -0
- package/dist/utils/relay-encryption.js.map +1 -0
- package/dist/utils/retry.d.ts.map +1 -1
- package/dist/utils/retry.js +49 -6
- package/dist/utils/retry.js.map +1 -1
- package/docs/assets/hierarchy.js +1 -1
- package/docs/assets/navigation.js +1 -1
- package/docs/assets/search.js +1 -1
- package/docs/classes/APIError.html +2 -2
- package/docs/classes/APINotAvailableError.html +2 -2
- package/docs/classes/BLEConnection.html +11 -9
- package/docs/classes/BLENotAvailableError.html +2 -2
- package/docs/classes/BLEScanner.html +9 -9
- package/docs/classes/CommandFailedError.html +2 -2
- package/docs/classes/ConnectionTimeoutError.html +2 -2
- package/docs/classes/DeviceManager.html +13 -13
- package/docs/classes/DeviceNotFoundError.html +2 -2
- package/docs/classes/DeviceOverrideStateDuringConnection.html +28 -28
- package/docs/classes/DiscoveryError.html +2 -2
- package/docs/classes/OpenAPIClient.html +24 -24
- package/docs/classes/SequenceDevice.html +29 -29
- package/docs/classes/SwitchBot.html +11 -11
- package/docs/classes/SwitchBotDevice.html +28 -28
- package/docs/classes/SwitchBotError.html +2 -2
- package/docs/classes/ValidationError.html +2 -2
- package/docs/classes/WoAIHub.html +56 -0
- package/docs/classes/WoAirPurifier.html +38 -33
- package/docs/classes/WoAirPurifierPM25.html +56 -0
- package/docs/classes/WoAirPurifierTable.html +38 -33
- package/docs/classes/WoArtFrame.html +46 -35
- package/docs/classes/WoBlindTilt.html +36 -34
- package/docs/classes/WoBulb.html +46 -35
- package/docs/classes/WoCandleWarmerLamp.html +56 -0
- package/docs/classes/WoCeilingLight.html +46 -35
- package/docs/classes/WoCirculatorFan.html +38 -33
- package/docs/classes/WoClimatePanel.html +38 -33
- package/docs/classes/WoContact.html +28 -28
- package/docs/classes/WoCurtain.html +43 -32
- package/docs/classes/WoFloorLamp.html +46 -35
- package/docs/classes/WoGarageDoorOpener.html +35 -32
- package/docs/classes/WoHand.html +38 -38
- package/docs/classes/WoHub2.html +28 -28
- package/docs/classes/WoHub3.html +28 -28
- package/docs/classes/WoHubMiniMatter.html +28 -28
- package/docs/classes/WoHumi.html +40 -32
- package/docs/classes/WoHumi2.html +40 -38
- package/docs/classes/WoIOSensorTH.html +28 -28
- package/docs/classes/WoKeypad.html +28 -28
- package/docs/classes/WoKeypadVision.html +28 -28
- package/docs/classes/WoKeypadVisionPro.html +28 -28
- package/docs/classes/WoLeak.html +28 -28
- package/docs/classes/WoPanTiltCamPlus3K.html +56 -0
- package/docs/classes/WoPlugMiniJP.html +31 -31
- package/docs/classes/WoPlugMiniUS.html +31 -31
- package/docs/classes/WoPresence.html +28 -28
- package/docs/classes/WoRGBICBulb.html +48 -37
- package/docs/classes/WoRGBICNeonWireRopeLight.html +56 -0
- package/docs/classes/WoRGBICWWFloorLamp.html +48 -37
- package/docs/classes/WoRGBICWWStripLight.html +48 -37
- package/docs/classes/WoRelaySwitch1.html +35 -32
- package/docs/classes/WoRelaySwitch1PM.html +35 -32
- package/docs/classes/WoRelaySwitch2PM.html +37 -34
- package/docs/classes/WoRemote.html +28 -28
- package/docs/classes/WoRemoteWithScreen.html +56 -0
- package/docs/classes/WoRollerShade.html +43 -32
- package/docs/classes/WoSensorTH.html +28 -28
- package/docs/classes/WoSensorTHPlus.html +28 -28
- package/docs/classes/WoSensorTHPro.html +28 -28
- package/docs/classes/WoSensorTHProCO2.html +28 -28
- package/docs/classes/WoSmartLock.html +31 -31
- package/docs/classes/WoSmartLockLite.html +31 -31
- package/docs/classes/WoSmartLockPro.html +33 -33
- package/docs/classes/WoSmartLockProWiFi.html +33 -33
- package/docs/classes/WoSmartLockVision.html +31 -31
- package/docs/classes/WoSmartLockVisionPro.html +33 -33
- package/docs/classes/WoSmartThermostatRadiator.html +38 -33
- package/docs/classes/WoStrip.html +46 -35
- package/docs/classes/WoStripLight3.html +46 -35
- package/docs/classes/WoVacuum.html +36 -36
- package/docs/classes/WoVacuumK10Plus.html +36 -36
- package/docs/classes/WoVacuumK10Pro.html +36 -36
- package/docs/classes/WoVacuumK10ProCombo.html +36 -36
- package/docs/classes/WoVacuumK11Plus.html +36 -36
- package/docs/classes/WoVacuumK20.html +36 -36
- package/docs/classes/WoVacuumS10.html +36 -36
- package/docs/classes/WoVacuumS20.html +36 -36
- package/docs/classes/WoWaterDetector.html +56 -0
- package/docs/enums/LogLevel.html +2 -2
- package/docs/enums/SwitchBotBLEModel.html +2 -2
- package/docs/enums/SwitchBotBLEModelName.html +2 -2
- package/docs/functions/updateBaseURL.html +1 -1
- package/docs/hierarchy.html +1 -1
- package/docs/interfaces/APICommandRequest.html +2 -2
- package/docs/interfaces/APICommandResponse.html +2 -2
- package/docs/interfaces/APIDevice.html +2 -2
- package/docs/interfaces/APIDeviceStatus.html +2 -2
- package/docs/interfaces/APIErrorResponse.html +2 -2
- package/docs/interfaces/APIResponse.html +2 -2
- package/docs/interfaces/AirPurifierCommands.html +3 -2
- package/docs/interfaces/AirPurifierServiceData.html +14 -14
- package/docs/interfaces/AirPurifierStatus.html +7 -7
- package/docs/interfaces/BLEAdvertisement.html +2 -2
- package/docs/interfaces/BLEScanOptions.html +5 -5
- package/docs/interfaces/BLEServiceData.html +14 -14
- package/docs/interfaces/BlindTiltCommands.html +2 -2
- package/docs/interfaces/BlindTiltServiceData.html +14 -14
- package/docs/interfaces/BlindTiltStatus.html +7 -6
- package/docs/interfaces/BotCommands.html +2 -2
- package/docs/interfaces/BotServiceData.html +14 -14
- package/docs/interfaces/BotStatus.html +6 -6
- package/docs/interfaces/BulbCommands.html +4 -2
- package/docs/interfaces/BulbServiceData.html +14 -14
- package/docs/interfaces/BulbStatus.html +6 -6
- package/docs/interfaces/CeilingLightCommands.html +4 -2
- package/docs/interfaces/CeilingLightServiceData.html +14 -14
- package/docs/interfaces/CeilingLightStatus.html +6 -6
- package/docs/interfaces/CommandResult.html +6 -6
- package/docs/interfaces/ContactServiceData.html +14 -14
- package/docs/interfaces/ContactStatus.html +6 -6
- package/docs/interfaces/CurtainCommands.html +5 -2
- package/docs/interfaces/CurtainExtendedInfo.html +4 -0
- package/docs/interfaces/CurtainServiceData.html +14 -14
- package/docs/interfaces/CurtainStatus.html +6 -6
- package/docs/interfaces/DeviceInfo.html +18 -18
- package/docs/interfaces/DeviceListResponse.html +2 -2
- package/docs/interfaces/DeviceStatus.html +6 -6
- package/docs/interfaces/DiscoveryOptions.html +7 -7
- package/docs/interfaces/HubServiceData.html +14 -14
- package/docs/interfaces/HubStatus.html +6 -6
- package/docs/interfaces/HumidifierCommands.html +6 -2
- package/docs/interfaces/HumidifierServiceData.html +15 -15
- package/docs/interfaces/HumidifierStatus.html +6 -6
- package/docs/interfaces/KeypadStatus.html +6 -6
- package/docs/interfaces/LeakServiceData.html +14 -14
- package/docs/interfaces/LeakStatus.html +6 -6
- package/docs/interfaces/LockCommands.html +2 -2
- package/docs/interfaces/LockServiceData.html +15 -15
- package/docs/interfaces/LockStatus.html +6 -6
- package/docs/interfaces/MeterServiceData.html +14 -14
- package/docs/interfaces/MeterStatus.html +6 -6
- package/docs/interfaces/MotionServiceData.html +14 -14
- package/docs/interfaces/MotionStatus.html +6 -6
- package/docs/interfaces/PlugCommands.html +2 -2
- package/docs/interfaces/PlugServiceData.html +14 -14
- package/docs/interfaces/PlugStatus.html +6 -6
- package/docs/interfaces/PresenceServiceData.html +14 -14
- package/docs/interfaces/PresenceStatus.html +6 -6
- package/docs/interfaces/RelaySwitchCommands.html +2 -2
- package/docs/interfaces/RelaySwitchServiceData.html +14 -14
- package/docs/interfaces/RelaySwitchStatus.html +6 -6
- package/docs/interfaces/RemoteStatus.html +6 -6
- package/docs/interfaces/SceneListResponse.html +2 -2
- package/docs/interfaces/StripCommands.html +4 -2
- package/docs/interfaces/StripServiceData.html +14 -14
- package/docs/interfaces/StripStatus.html +6 -6
- package/docs/interfaces/SwitchBotConfig.html +15 -15
- package/docs/interfaces/VacuumCommands.html +2 -2
- package/docs/interfaces/VacuumStatus.html +6 -6
- package/docs/interfaces/WebhookConfig.html +2 -2
- package/docs/interfaces/WebhookDetails.html +2 -2
- package/docs/interfaces/WebhookQueryResponse.html +2 -2
- package/docs/interfaces/WebhookSetupResponse.html +2 -2
- package/docs/modules.html +1 -1
- package/docs/types/ConnectionType.html +1 -1
- package/docs/types/PhysicalDeviceType.html +1 -1
- package/docs/types/VirtualDeviceType.html +1 -1
- package/docs/variables/urls.html +1 -1
- package/package.json +2 -2
- package/todo/PYSWITCHBOT_COMPARISON.md +4 -4
- package/todo/completed.md +161 -0
- package/todo/todo.md +54 -117
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
*
|
|
3
3
|
* devices/wo-curtain.ts: SwitchBot v4.0.0 - Curtain Device
|
|
4
4
|
*/
|
|
5
|
+
import { Buffer } from 'node:buffer';
|
|
5
6
|
import { DEVICE_COMMANDS } from '../settings.js';
|
|
6
7
|
import { clamp } from '../utils/index.js';
|
|
7
8
|
import { SwitchBotDevice } from './base.js';
|
|
@@ -46,15 +47,29 @@ export class WoCurtain extends SwitchBotDevice {
|
|
|
46
47
|
/**
|
|
47
48
|
* Get device status
|
|
48
49
|
*/
|
|
50
|
+
_lastPosition;
|
|
49
51
|
async getStatus() {
|
|
50
52
|
try {
|
|
53
|
+
let direction;
|
|
54
|
+
let position = 0;
|
|
51
55
|
// Try API first if available
|
|
52
56
|
if (this.hasAPI()) {
|
|
53
57
|
const apiStatus = await this.getAPIStatus();
|
|
58
|
+
position = typeof apiStatus.slidePosition === 'number' ? apiStatus.slidePosition : 0;
|
|
59
|
+
if (typeof this._lastPosition === 'number') {
|
|
60
|
+
if (position > this._lastPosition) {
|
|
61
|
+
direction = 'opening';
|
|
62
|
+
}
|
|
63
|
+
else if (position < this._lastPosition) {
|
|
64
|
+
direction = 'closing';
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
this._lastPosition = position;
|
|
54
68
|
return {
|
|
55
69
|
deviceId: this.info.id,
|
|
56
70
|
connectionType: 'api',
|
|
57
|
-
position
|
|
71
|
+
position,
|
|
72
|
+
direction,
|
|
58
73
|
calibrated: apiStatus.calibrate,
|
|
59
74
|
moving: apiStatus.moving,
|
|
60
75
|
battery: apiStatus.battery,
|
|
@@ -65,10 +80,21 @@ export class WoCurtain extends SwitchBotDevice {
|
|
|
65
80
|
// Fallback to BLE
|
|
66
81
|
if (this.hasBLE()) {
|
|
67
82
|
const bleData = await this.getBLEStatus().catch(() => this.normalizeBLEStatusData(undefined));
|
|
83
|
+
position = typeof bleData.position === 'number' ? bleData.position : 0;
|
|
84
|
+
if (typeof this._lastPosition === 'number') {
|
|
85
|
+
if (position > this._lastPosition) {
|
|
86
|
+
direction = 'opening';
|
|
87
|
+
}
|
|
88
|
+
else if (position < this._lastPosition) {
|
|
89
|
+
direction = 'closing';
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
this._lastPosition = position;
|
|
68
93
|
return {
|
|
69
94
|
deviceId: this.info.id,
|
|
70
95
|
connectionType: 'ble',
|
|
71
|
-
position
|
|
96
|
+
position,
|
|
97
|
+
direction,
|
|
72
98
|
calibrated: bleData.calibration,
|
|
73
99
|
battery: bleData.battery,
|
|
74
100
|
updatedAt: new Date(),
|
|
@@ -81,5 +107,83 @@ export class WoCurtain extends SwitchBotDevice {
|
|
|
81
107
|
throw error;
|
|
82
108
|
}
|
|
83
109
|
}
|
|
110
|
+
/**
|
|
111
|
+
* Get extended device information (Curtain 3)
|
|
112
|
+
* Returns device chain information and grouped curtain status
|
|
113
|
+
*/
|
|
114
|
+
async getExtendedInfo() {
|
|
115
|
+
if (!this.hasBLE()) {
|
|
116
|
+
throw new Error('Extended info only available via BLE');
|
|
117
|
+
}
|
|
118
|
+
try {
|
|
119
|
+
const result = await this.sendBLECommand(DEVICE_COMMANDS.CURTAIN.EXTENDED_INFO);
|
|
120
|
+
if (!result.success || !result.data) {
|
|
121
|
+
throw new Error('Failed to get extended info');
|
|
122
|
+
}
|
|
123
|
+
const response = Buffer.isBuffer(result.data) ? result.data : Buffer.from(result.data);
|
|
124
|
+
// Parse extended info from response
|
|
125
|
+
// Response format (example): [device_chain_info, group_status_bytes]
|
|
126
|
+
// This is a simplified implementation - actual parsing depends on device response format
|
|
127
|
+
return {
|
|
128
|
+
deviceChain: {
|
|
129
|
+
masterDevice: this.info.id,
|
|
130
|
+
slaveDevices: [], // Would parse from response bytes
|
|
131
|
+
},
|
|
132
|
+
groupStatus: {
|
|
133
|
+
position: response.length > 2 ? response[2] : 0,
|
|
134
|
+
calibrated: response.length > 3 ? (response[3] & 0x40) !== 0 : false,
|
|
135
|
+
moving: response.length > 3 ? (response[3] & 0x03) !== 0 : false,
|
|
136
|
+
},
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
catch (error) {
|
|
140
|
+
this.logger.error('Failed to get extended info', error);
|
|
141
|
+
throw error;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Send multiple commands in sequence (all must succeed)
|
|
146
|
+
* Used for Curtain 3 complex operations
|
|
147
|
+
*/
|
|
148
|
+
async sendCommandSequence(commands) {
|
|
149
|
+
try {
|
|
150
|
+
for (const command of commands) {
|
|
151
|
+
const success = await command();
|
|
152
|
+
if (!success) {
|
|
153
|
+
this.logger.warn('Command in sequence failed, stopping execution');
|
|
154
|
+
return false;
|
|
155
|
+
}
|
|
156
|
+
// Small delay between commands
|
|
157
|
+
await new Promise(resolve => setTimeout(resolve, 100));
|
|
158
|
+
}
|
|
159
|
+
return true;
|
|
160
|
+
}
|
|
161
|
+
catch (error) {
|
|
162
|
+
this.logger.error('Command sequence failed', error);
|
|
163
|
+
return false;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Send multiple commands (returns true if any succeed)
|
|
168
|
+
* Used for Curtain 3 fallback operations
|
|
169
|
+
*/
|
|
170
|
+
async sendMultipleCommands(commands) {
|
|
171
|
+
let anySucceeded = false;
|
|
172
|
+
for (const command of commands) {
|
|
173
|
+
try {
|
|
174
|
+
const success = await command();
|
|
175
|
+
if (success) {
|
|
176
|
+
anySucceeded = true;
|
|
177
|
+
}
|
|
178
|
+
// Small delay between commands
|
|
179
|
+
await new Promise(resolve => setTimeout(resolve, 100));
|
|
180
|
+
}
|
|
181
|
+
catch (error) {
|
|
182
|
+
this.logger.debug('Command in multi-command attempt failed', error);
|
|
183
|
+
// Continue trying other commands
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
return anySucceeded;
|
|
187
|
+
}
|
|
84
188
|
}
|
|
85
189
|
//# sourceMappingURL=wo-curtain.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wo-curtain.js","sourceRoot":"","sources":["../../src/devices/wo-curtain.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAChD,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAE3C;;GAEG;AACH,MAAM,OAAO,SAAU,SAAQ,eAAe;IAC5C;;OAEG;IACH,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,GAAG;QACpB,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,CAAA;QACzC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CACnC,CAAC,GAAG,eAAe,CAAC,OAAO,CAAC,QAAQ,EAAE,YAAY,EAAE,CAAC,CAAC,EACtD,aAAa,EACb,KAAK,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CACpD,CAAA;QACD,OAAO,MAAM,CAAC,OAAO,CAAA;IACvB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG;QACrB,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,CAAA;QACzC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CACnC,CAAC,GAAG,eAAe,CAAC,OAAO,CAAC,QAAQ,EAAE,YAAY,EAAE,GAAG,CAAC,EACxD,aAAa,EACb,KAAK,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,CACtD,CAAA;QACD,OAAO,MAAM,CAAC,OAAO,CAAA;IACvB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK;QACT,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CACnC,eAAe,CAAC,OAAO,CAAC,KAAK,EAC7B,OAAO,CACR,CAAA;QACD,OAAO,MAAM,CAAC,OAAO,CAAA;IACvB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW,CAAC,QAAgB,EAAE,KAAK,GAAG,GAAG;QAC7C,MAAM,eAAe,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC,EAAE,GAAG,CAAC,CAAA;QAC/C,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,CAAA;QAEzC,4CAA4C;QAC5C,MAAM,UAAU,GAAG,CAAC,GAAG,eAAe,CAAC,OAAO,CAAC,QAAQ,EAAE,YAAY,EAAE,eAAe,CAAC,CAAA;QAEvF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CACnC,UAAU,EACV,aAAa,EACb,KAAK,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,eAAe,EAAE,CACrE,CAAA;QACD,OAAO,MAAM,CAAC,OAAO,CAAA;IACvB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,SAAS;QACb,IAAI,CAAC;YACH,6BAA6B;YAC7B,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;gBAClB,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,CAAA;gBAC3C,OAAO;
|
|
1
|
+
{"version":3,"file":"wo-curtain.js","sourceRoot":"","sources":["../../src/devices/wo-curtain.ts"],"names":[],"mappings":"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"}
|
|
@@ -20,9 +20,25 @@ export declare class WoHumi extends SwitchBotDevice implements HumidifierCommand
|
|
|
20
20
|
* Set nebulization efficiency (0-100)
|
|
21
21
|
*/
|
|
22
22
|
setEfficiency(level: number): Promise<boolean>;
|
|
23
|
+
/**
|
|
24
|
+
* Set target humidity level (1-100)
|
|
25
|
+
*/
|
|
26
|
+
setLevel(level: number): Promise<boolean>;
|
|
23
27
|
/**
|
|
24
28
|
* Get device status
|
|
25
29
|
*/
|
|
26
30
|
getStatus(): Promise<HumidifierStatus>;
|
|
31
|
+
/**
|
|
32
|
+
* Set auto mode
|
|
33
|
+
*/
|
|
34
|
+
setAuto(): Promise<boolean>;
|
|
35
|
+
/**
|
|
36
|
+
* Set manual mode
|
|
37
|
+
*/
|
|
38
|
+
setManual(): Promise<boolean>;
|
|
39
|
+
/**
|
|
40
|
+
* Get target humidity level (if available)
|
|
41
|
+
*/
|
|
42
|
+
getTargetLevel(): Promise<number | undefined>;
|
|
27
43
|
}
|
|
28
44
|
//# sourceMappingURL=wo-humi.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wo-humi.d.ts","sourceRoot":"","sources":["../../src/devices/wo-humi.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAI9E,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAE3C;;GAEG;AACH,qBAAa,MAAO,SAAQ,eAAgB,YAAW,kBAAkB;IACvE;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC;IAQhC;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;IAQjC;;OAEG;IACG,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;IAaxD;;OAEG;IACG,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAiBpD;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"wo-humi.d.ts","sourceRoot":"","sources":["../../src/devices/wo-humi.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAI9E,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAE3C;;GAEG;AACH,qBAAa,MAAO,SAAQ,eAAgB,YAAW,kBAAkB;IACvE;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC;IAQhC;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;IAQjC;;OAEG;IACG,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;IAaxD;;OAEG;IACG,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAiBpD;;OAEG;IACG,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAK/C;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAwC5C;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;IAIjC;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC;IAInC;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;CAiBpD"}
|
package/dist/devices/wo-humi.js
CHANGED
|
@@ -46,6 +46,13 @@ export class WoHumi extends SwitchBotDevice {
|
|
|
46
46
|
const result = await this.sendCommand(bleCommand, 'setMode', clampedLevel.toString());
|
|
47
47
|
return result.success;
|
|
48
48
|
}
|
|
49
|
+
/**
|
|
50
|
+
* Set target humidity level (1-100)
|
|
51
|
+
*/
|
|
52
|
+
async setLevel(level) {
|
|
53
|
+
const clampedLevel = clamp(level, 1, 100);
|
|
54
|
+
return this.setEfficiency(clampedLevel);
|
|
55
|
+
}
|
|
49
56
|
/**
|
|
50
57
|
* Get device status
|
|
51
58
|
*/
|
|
@@ -87,5 +94,37 @@ export class WoHumi extends SwitchBotDevice {
|
|
|
87
94
|
throw error;
|
|
88
95
|
}
|
|
89
96
|
}
|
|
97
|
+
/**
|
|
98
|
+
* Set auto mode
|
|
99
|
+
*/
|
|
100
|
+
async setAuto() {
|
|
101
|
+
return this.setMode('auto');
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Set manual mode
|
|
105
|
+
*/
|
|
106
|
+
async setManual() {
|
|
107
|
+
return this.setMode('manual');
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Get target humidity level (if available)
|
|
111
|
+
*/
|
|
112
|
+
async getTargetLevel() {
|
|
113
|
+
// Try API first if available
|
|
114
|
+
if (this.hasAPI()) {
|
|
115
|
+
const apiStatus = await this.getAPIStatus();
|
|
116
|
+
if (typeof apiStatus.humidity === 'number') {
|
|
117
|
+
return apiStatus.humidity;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
// Fallback to BLE if available
|
|
121
|
+
if (this.hasBLE()) {
|
|
122
|
+
const bleData = await this.getBLEStatus();
|
|
123
|
+
if (typeof bleData.percentage === 'number') {
|
|
124
|
+
return bleData.percentage;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
return undefined;
|
|
128
|
+
}
|
|
90
129
|
}
|
|
91
130
|
//# sourceMappingURL=wo-humi.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wo-humi.js","sourceRoot":"","sources":["../../src/devices/wo-humi.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"wo-humi.js","sourceRoot":"","sources":["../../src/devices/wo-humi.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,17 +4,5 @@ import { WoHumi } from './wo-humi.js';
|
|
|
4
4
|
* Uses same logic as Humidifier
|
|
5
5
|
*/
|
|
6
6
|
export declare class WoHumi2 extends WoHumi {
|
|
7
|
-
/**
|
|
8
|
-
* Set auto mode
|
|
9
|
-
*/
|
|
10
|
-
setAuto(): Promise<boolean>;
|
|
11
|
-
/**
|
|
12
|
-
* Set manual mode
|
|
13
|
-
*/
|
|
14
|
-
setManual(): Promise<boolean>;
|
|
15
|
-
/**
|
|
16
|
-
* Set target humidity level (mapped to nebulization efficiency)
|
|
17
|
-
*/
|
|
18
|
-
setLevel(level: number): Promise<boolean>;
|
|
19
7
|
}
|
|
20
8
|
//# sourceMappingURL=wo-humi2.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wo-humi2.d.ts","sourceRoot":"","sources":["../../src/devices/wo-humi2.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAErC;;;GAGG;AACH,qBAAa,OAAQ,SAAQ,MAAM;
|
|
1
|
+
{"version":3,"file":"wo-humi2.d.ts","sourceRoot":"","sources":["../../src/devices/wo-humi2.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAErC;;;GAGG;AACH,qBAAa,OAAQ,SAAQ,MAAM;CAElC"}
|
package/dist/devices/wo-humi2.js
CHANGED
|
@@ -8,23 +8,5 @@ import { WoHumi } from './wo-humi.js';
|
|
|
8
8
|
* Uses same logic as Humidifier
|
|
9
9
|
*/
|
|
10
10
|
export class WoHumi2 extends WoHumi {
|
|
11
|
-
/**
|
|
12
|
-
* Set auto mode
|
|
13
|
-
*/
|
|
14
|
-
async setAuto() {
|
|
15
|
-
return this.setMode('auto');
|
|
16
|
-
}
|
|
17
|
-
/**
|
|
18
|
-
* Set manual mode
|
|
19
|
-
*/
|
|
20
|
-
async setManual() {
|
|
21
|
-
return this.setMode('manual');
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* Set target humidity level (mapped to nebulization efficiency)
|
|
25
|
-
*/
|
|
26
|
-
async setLevel(level) {
|
|
27
|
-
return this.setEfficiency(level);
|
|
28
|
-
}
|
|
29
11
|
}
|
|
30
12
|
//# sourceMappingURL=wo-humi2.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wo-humi2.js","sourceRoot":"","sources":["../../src/devices/wo-humi2.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAErC;;;GAGG;AACH,MAAM,OAAO,OAAQ,SAAQ,MAAM;
|
|
1
|
+
{"version":3,"file":"wo-humi2.js","sourceRoot":"","sources":["../../src/devices/wo-humi2.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAErC;;;GAGG;AACH,MAAM,OAAO,OAAQ,SAAQ,MAAM;CAElC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wo-pan-tilt-cam-plus-3k.d.ts","sourceRoot":"","sources":["../../src/devices/wo-pan-tilt-cam-plus-3k.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAE3C,qBAAa,kBAAmB,SAAQ,eAAe;IAC/C,SAAS,IAAI,OAAO,CAAC,YAAY,CAAC;CAGzC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wo-pan-tilt-cam-plus-3k.js","sourceRoot":"","sources":["../../src/devices/wo-pan-tilt-cam-plus-3k.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAE3C,MAAM,OAAO,kBAAmB,SAAQ,eAAe;IACrD,KAAK,CAAC,SAAS;QACb,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAA;IACjE,CAAC;CACF"}
|
|
@@ -1,9 +1,23 @@
|
|
|
1
1
|
import type { RelaySwitchCommands, RelaySwitchStatus } from '../types/device.js';
|
|
2
|
+
import { Buffer } from 'node:buffer';
|
|
2
3
|
import { SequenceDevice } from './sequence-device.js';
|
|
3
4
|
/**
|
|
4
5
|
* Relay Switch 1 Device (1-channel)
|
|
5
6
|
*/
|
|
6
7
|
export declare class WoRelaySwitch1 extends SequenceDevice implements RelaySwitchCommands {
|
|
8
|
+
/**
|
|
9
|
+
* Returns true if this relay switch requires BLE encryption (encryptionKey present)
|
|
10
|
+
*/
|
|
11
|
+
private needsEncryption;
|
|
12
|
+
/**
|
|
13
|
+
* Encrypts a command if encryption is required for this device
|
|
14
|
+
*/
|
|
15
|
+
protected maybeEncryptCommand(cmd: Buffer | readonly number[]): Buffer;
|
|
16
|
+
/**
|
|
17
|
+
* Verifies the BLE encryption key by attempting a status read with encryption.
|
|
18
|
+
* Throws an error if the key is invalid or the device rejects the command.
|
|
19
|
+
*/
|
|
20
|
+
verifyEncryptionKey(): Promise<boolean>;
|
|
7
21
|
private parseRelayPowerResponse;
|
|
8
22
|
private getRelayPowerMonitoring;
|
|
9
23
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wo-relay-switch-1.d.ts","sourceRoot":"","sources":["../../src/devices/wo-relay-switch-1.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"wo-relay-switch-1.d.ts","sourceRoot":"","sources":["../../src/devices/wo-relay-switch-1.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAChF,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAIpC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAErD;;GAEG;AACH,qBAAa,cAAe,SAAQ,cAAe,YAAW,mBAAmB;IAC/E;;OAEG;IACH,OAAO,CAAC,eAAe;IAIvB;;OAEG;IACH,SAAS,CAAC,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,GAAG,MAAM;IAStE;;;OAGG;IACG,mBAAmB,IAAI,OAAO,CAAC,OAAO,CAAC;IAiB7C,OAAO,CAAC,uBAAuB;YAmBjB,uBAAuB;IAiBrC;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC;IAMhC;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;IAMjC;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC;IAMhC;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,iBAAiB,CAAC;CA0C9C"}
|
|
@@ -1,18 +1,52 @@
|
|
|
1
|
-
/* Copyright(C) 2024-2026, donavanbecker (https://github.com/donavanbecker). All rights reserved.
|
|
2
|
-
*
|
|
3
|
-
* devices/wo-relay-switch-1.ts: SwitchBot v4.0.0 - Relay Switch 1 Device
|
|
4
|
-
*/
|
|
5
1
|
import { Buffer } from 'node:buffer';
|
|
6
2
|
import { DEVICE_COMMANDS } from '../settings.js';
|
|
3
|
+
import { validateResponseLength } from '../utils/index.js';
|
|
4
|
+
import { encryptRelayCommandIfNeeded } from '../utils/relay-encryption.js';
|
|
7
5
|
import { SequenceDevice } from './sequence-device.js';
|
|
8
6
|
/**
|
|
9
7
|
* Relay Switch 1 Device (1-channel)
|
|
10
8
|
*/
|
|
11
9
|
export class WoRelaySwitch1 extends SequenceDevice {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
10
|
+
/**
|
|
11
|
+
* Returns true if this relay switch requires BLE encryption (encryptionKey present)
|
|
12
|
+
*/
|
|
13
|
+
needsEncryption() {
|
|
14
|
+
return !!this.info.encryptionKey;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Encrypts a command if encryption is required for this device
|
|
18
|
+
*/
|
|
19
|
+
maybeEncryptCommand(cmd) {
|
|
20
|
+
// Convert readonly arrays to mutable arrays for compatibility
|
|
21
|
+
const arr = Buffer.isBuffer(cmd) ? cmd : Buffer.from([...cmd]);
|
|
22
|
+
if (!this.needsEncryption()) {
|
|
23
|
+
return arr;
|
|
24
|
+
}
|
|
25
|
+
return encryptRelayCommandIfNeeded(arr, this.info.encryptionKey, this.info.encryptionIV);
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Verifies the BLE encryption key by attempting a status read with encryption.
|
|
29
|
+
* Throws an error if the key is invalid or the device rejects the command.
|
|
30
|
+
*/
|
|
31
|
+
async verifyEncryptionKey() {
|
|
32
|
+
if (!this.needsEncryption()) {
|
|
33
|
+
throw new Error('No encryptionKey set for this device');
|
|
15
34
|
}
|
|
35
|
+
try {
|
|
36
|
+
// Try to get status with encryption; if the key is wrong, device will reject or return invalid data
|
|
37
|
+
const command = this.maybeEncryptCommand([...DEVICE_COMMANDS.COMMON.POWER_ON]);
|
|
38
|
+
const result = await this.sendCommand(command, 'verifyEncryptionKey');
|
|
39
|
+
if (!result.success) {
|
|
40
|
+
throw new Error('Encryption key verification failed: device did not accept encrypted command');
|
|
41
|
+
}
|
|
42
|
+
return true;
|
|
43
|
+
}
|
|
44
|
+
catch (err) {
|
|
45
|
+
throw new Error(`Encryption key verification failed: ${err?.message || err}`);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
parseRelayPowerResponse(buffer) {
|
|
49
|
+
validateResponseLength(buffer, 11, 'WoRelaySwitch1:parseRelayPowerResponse');
|
|
16
50
|
// Best-effort parsing aligned with relay basic-info responses.
|
|
17
51
|
const voltageRaw = buffer.readUInt16BE(5);
|
|
18
52
|
const currentRaw = buffer.readUInt16BE(7);
|
|
@@ -37,21 +71,24 @@ export class WoRelaySwitch1 extends SequenceDevice {
|
|
|
37
71
|
* Turn on
|
|
38
72
|
*/
|
|
39
73
|
async turnOn() {
|
|
40
|
-
const
|
|
74
|
+
const command = this.maybeEncryptCommand([...DEVICE_COMMANDS.COMMON.POWER_ON]);
|
|
75
|
+
const result = await this.sendCommand(command, 'turnOn');
|
|
41
76
|
return result.success;
|
|
42
77
|
}
|
|
43
78
|
/**
|
|
44
79
|
* Turn off
|
|
45
80
|
*/
|
|
46
81
|
async turnOff() {
|
|
47
|
-
const
|
|
82
|
+
const command = this.maybeEncryptCommand([...DEVICE_COMMANDS.COMMON.POWER_OFF]);
|
|
83
|
+
const result = await this.sendCommand(command, 'turnOff');
|
|
48
84
|
return result.success;
|
|
49
85
|
}
|
|
50
86
|
/**
|
|
51
87
|
* Toggle power
|
|
52
88
|
*/
|
|
53
89
|
async toggle() {
|
|
54
|
-
const
|
|
90
|
+
const command = this.maybeEncryptCommand([...DEVICE_COMMANDS.PLUG.TOGGLE]);
|
|
91
|
+
const result = await this.sendCommand(command, 'toggle');
|
|
55
92
|
return result.success;
|
|
56
93
|
}
|
|
57
94
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wo-relay-switch-1.js","sourceRoot":"","sources":["../../src/devices/wo-relay-switch-1.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"wo-relay-switch-1.js","sourceRoot":"","sources":["../../src/devices/wo-relay-switch-1.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAChD,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAA;AAC1D,OAAO,EAAE,2BAA2B,EAAE,MAAM,8BAA8B,CAAA;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAErD;;GAEG;AACH,MAAM,OAAO,cAAe,SAAQ,cAAc;IAChD;;OAEG;IACK,eAAe;QACrB,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAA;IAClC,CAAC;IAED;;OAEG;IACO,mBAAmB,CAAC,GAA+B;QAC3D,8DAA8D;QAC9D,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAA;QAC9D,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC;YAC5B,OAAO,GAAG,CAAA;QACZ,CAAC;QACD,OAAO,2BAA2B,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,aAAc,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;IAC3F,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,mBAAmB;QACvB,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAA;QACzD,CAAC;QACD,IAAI,CAAC;YACH,oGAAoG;YACpG,MAAM,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC,CAAC,GAAG,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAA;YAC9E,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,qBAAqB,CAAC,CAAA;YACrE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACpB,MAAM,IAAI,KAAK,CAAC,6EAA6E,CAAC,CAAA;YAChG,CAAC;YACD,OAAO,IAAI,CAAA;QACb,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,uCAAuC,GAAG,EAAE,OAAO,IAAI,GAAG,EAAE,CAAC,CAAA;QAC/E,CAAC;IACH,CAAC;IAEO,uBAAuB,CAAC,MAAc;QAK5C,sBAAsB,CAAC,MAAM,EAAE,EAAE,EAAE,wCAAwC,CAAC,CAAA;QAE5E,+DAA+D;QAC/D,MAAM,UAAU,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA;QACzC,MAAM,UAAU,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA;QACzC,MAAM,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA;QAExC,OAAO;YACL,OAAO,EAAE,UAAU,GAAG,EAAE;YACxB,eAAe,EAAE,UAAU,GAAG,GAAG;YACjC,gBAAgB,EAAE,SAAS,GAAG,GAAG;SAClC,CAAA;IACH,CAAC;IAEO,KAAK,CAAC,uBAAuB;QAKnC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;YACnB,OAAO,EAAE,CAAA;QACX,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,KAAK,CAAC,cAAc,CAAC,CAAA;QAC9E,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YACrE,OAAO,EAAE,CAAA;QACX,CAAC;QAED,OAAO,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IAClD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM;QACV,MAAM,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC,CAAC,GAAG,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAA;QAC9E,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;QACxD,OAAO,MAAM,CAAC,OAAO,CAAA;IACvB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO;QACX,MAAM,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC,CAAC,GAAG,eAAe,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAA;QAC/E,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,SAAS,CAAC,CAAA;QACzD,OAAO,MAAM,CAAC,OAAO,CAAA;IACvB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM;QACV,MAAM,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC,CAAC,GAAG,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAA;QAC1E,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;QACxD,OAAO,MAAM,CAAC,OAAO,CAAA;IACvB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,SAAS;QACb,IAAI,CAAC;YACH,6BAA6B;YAC7B,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;gBAClB,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,CAAA;gBAC3C,OAAO;oBACL,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE;oBACtB,cAAc,EAAE,KAAK;oBACrB,KAAK,EAAE,SAAS,CAAC,KAAK,IAAI,KAAK;oBAC/B,OAAO,EAAE,SAAS,CAAC,OAAO;oBAC1B,eAAe,EAAE,SAAS,CAAC,eAAe;oBAC1C,gBAAgB,EAAE,SAAS,CAAC,gBAAgB;oBAC5C,OAAO,EAAE,SAAS,CAAC,OAAO;oBAC1B,SAAS,EAAE,IAAI,IAAI,EAAE;iBACtB,CAAA;YACH,CAAC;YAED,kBAAkB;YAClB,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;gBAClB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC,CAAA;gBAC7F,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,uBAAuB,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;oBAC9D,OAAO,EAAE,SAAS;oBAClB,eAAe,EAAE,SAAS;oBAC1B,gBAAgB,EAAE,SAAS;iBAC5B,CAAC,CAAC,CAAA;gBACH,OAAO;oBACL,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE;oBACtB,cAAc,EAAE,KAAK;oBACrB,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK;oBACnC,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO;oBACzC,eAAe,EAAE,KAAK,CAAC,eAAe;oBACtC,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;oBACxC,SAAS,EAAE,IAAI,IAAI,EAAE;iBACtB,CAAA;YACH,CAAC;YAED,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAA;QACnD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,sBAAsB,EAAE,KAAK,CAAC,CAAA;YAChD,MAAM,KAAK,CAAA;QACb,CAAC;IACH,CAAC;CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wo-relay-switch-2pm.d.ts","sourceRoot":"","sources":["../../src/devices/wo-relay-switch-2pm.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,0BAA0B,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAGvF,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAEvD;;;GAGG;AACH,qBAAa,gBAAiB,SAAQ,cAAe,YAAW,0BAA0B;IACxF;;OAEG;IACG,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"wo-relay-switch-2pm.d.ts","sourceRoot":"","sources":["../../src/devices/wo-relay-switch-2pm.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,0BAA0B,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAGvF,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAEvD;;;GAGG;AACH,qBAAa,gBAAiB,SAAQ,cAAe,YAAW,0BAA0B;IACxF;;OAEG;IACG,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAOnD;;OAEG;IACG,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAOnD;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,iBAAiB,CAAC;CAG9C"}
|
|
@@ -13,9 +13,8 @@ export class WoRelaySwitch2PM extends WoRelaySwitch1 {
|
|
|
13
13
|
* Set channel 1 state
|
|
14
14
|
*/
|
|
15
15
|
async setChannel1(state) {
|
|
16
|
-
const
|
|
17
|
-
|
|
18
|
-
: DEVICE_COMMANDS.RELAY.CHANNEL1_OFF;
|
|
16
|
+
const raw = state ? DEVICE_COMMANDS.RELAY.CHANNEL1_ON : DEVICE_COMMANDS.RELAY.CHANNEL1_OFF;
|
|
17
|
+
const command = this.maybeEncryptCommand([...raw]);
|
|
19
18
|
const result = await this.sendCommand(command, `setChannel1:${state}`);
|
|
20
19
|
return result.success;
|
|
21
20
|
}
|
|
@@ -23,9 +22,8 @@ export class WoRelaySwitch2PM extends WoRelaySwitch1 {
|
|
|
23
22
|
* Set channel 2 state
|
|
24
23
|
*/
|
|
25
24
|
async setChannel2(state) {
|
|
26
|
-
const
|
|
27
|
-
|
|
28
|
-
: DEVICE_COMMANDS.RELAY.CHANNEL2_OFF;
|
|
25
|
+
const raw = state ? DEVICE_COMMANDS.RELAY.CHANNEL2_ON : DEVICE_COMMANDS.RELAY.CHANNEL2_OFF;
|
|
26
|
+
const command = this.maybeEncryptCommand([...raw]);
|
|
29
27
|
const result = await this.sendCommand(command, `setChannel2:${state}`);
|
|
30
28
|
return result.success;
|
|
31
29
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wo-relay-switch-2pm.js","sourceRoot":"","sources":["../../src/devices/wo-relay-switch-2pm.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAEvD;;;GAGG;AACH,MAAM,OAAO,gBAAiB,SAAQ,cAAc;IAClD;;OAEG;IACH,KAAK,CAAC,WAAW,CAAC,KAAc;QAC9B,MAAM,
|
|
1
|
+
{"version":3,"file":"wo-relay-switch-2pm.js","sourceRoot":"","sources":["../../src/devices/wo-relay-switch-2pm.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAEvD;;;GAGG;AACH,MAAM,OAAO,gBAAiB,SAAQ,cAAc;IAClD;;OAEG;IACH,KAAK,CAAC,WAAW,CAAC,KAAc;QAC9B,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,YAAY,CAAA;QAC1F,MAAM,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAA;QAClD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,eAAe,KAAK,EAAE,CAAC,CAAA;QACtE,OAAO,MAAM,CAAC,OAAO,CAAA;IACvB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW,CAAC,KAAc;QAC9B,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,YAAY,CAAA;QAC1F,MAAM,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAA;QAClD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,eAAe,KAAK,EAAE,CAAC,CAAA;QACtE,OAAO,MAAM,CAAC,OAAO,CAAA;IACvB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,SAAS;QACb,OAAO,KAAK,CAAC,SAAS,EAAE,CAAA;IAC1B,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wo-remote-with-screen.d.ts","sourceRoot":"","sources":["../../src/devices/wo-remote-with-screen.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAE3C,qBAAa,kBAAmB,SAAQ,eAAe;IAC/C,SAAS,IAAI,OAAO,CAAC,YAAY,CAAC;CAGzC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wo-remote-with-screen.js","sourceRoot":"","sources":["../../src/devices/wo-remote-with-screen.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAE3C,MAAM,OAAO,kBAAmB,SAAQ,eAAe;IACrD,KAAK,CAAC,SAAS;QACb,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAA;IACjE,CAAC;CACF"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { DeviceStatus } from '../types/index.js';
|
|
2
|
+
import { SwitchBotDevice } from './base.js';
|
|
3
|
+
export declare class WoRGBICNeonWireRopeLight extends SwitchBotDevice {
|
|
4
|
+
getStatus(): Promise<DeviceStatus>;
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=wo-rgbic-neon-wire-rope-light.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wo-rgbic-neon-wire-rope-light.d.ts","sourceRoot":"","sources":["../../src/devices/wo-rgbic-neon-wire-rope-light.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAE3C,qBAAa,wBAAyB,SAAQ,eAAe;IACrD,SAAS,IAAI,OAAO,CAAC,YAAY,CAAC;CAGzC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { SwitchBotDevice } from './base.js';
|
|
2
|
+
export class WoRGBICNeonWireRopeLight extends SwitchBotDevice {
|
|
3
|
+
async getStatus() {
|
|
4
|
+
throw new Error('WoRGBICNeonWireRopeLight.getStatus not implemented');
|
|
5
|
+
}
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=wo-rgbic-neon-wire-rope-light.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wo-rgbic-neon-wire-rope-light.js","sourceRoot":"","sources":["../../src/devices/wo-rgbic-neon-wire-rope-light.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAE3C,MAAM,OAAO,wBAAyB,SAAQ,eAAe;IAC3D,KAAK,CAAC,SAAS;QACb,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAA;IACvE,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wo-water-detector.d.ts","sourceRoot":"","sources":["../../src/devices/wo-water-detector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAE3C,qBAAa,eAAgB,SAAQ,eAAe;IAC5C,SAAS,IAAI,OAAO,CAAC,YAAY,CAAC;CAGzC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wo-water-detector.js","sourceRoot":"","sources":["../../src/devices/wo-water-detector.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAE3C,MAAM,OAAO,eAAgB,SAAQ,eAAe;IAClD,KAAK,CAAC,SAAS;QACb,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAA;IAC9D,CAAC;CACF"}
|
package/dist/errors.d.ts
CHANGED
|
@@ -5,6 +5,26 @@ export declare class SwitchBotError extends Error {
|
|
|
5
5
|
readonly code?: string | undefined;
|
|
6
6
|
constructor(message: string, code?: string | undefined);
|
|
7
7
|
}
|
|
8
|
+
/**
|
|
9
|
+
* Error thrown for generic BLE operation failures
|
|
10
|
+
*/
|
|
11
|
+
export declare class SwitchbotOperationError extends SwitchBotError {
|
|
12
|
+
readonly originalError?: Error | undefined;
|
|
13
|
+
constructor(message: string, originalError?: Error | undefined);
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Error thrown for BLE authentication failures (e.g., encryption key invalid)
|
|
17
|
+
*/
|
|
18
|
+
export declare class SwitchbotAuthenticationError extends SwitchBotError {
|
|
19
|
+
readonly originalError?: Error | undefined;
|
|
20
|
+
constructor(message: string, originalError?: Error | undefined);
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Error thrown when a required BLE characteristic is missing
|
|
24
|
+
*/
|
|
25
|
+
export declare class CharacteristicMissingError extends SwitchBotError {
|
|
26
|
+
constructor(characteristic: string);
|
|
27
|
+
}
|
|
8
28
|
/**
|
|
9
29
|
* Error thrown when BLE is not available or supported
|
|
10
30
|
*/
|