node-switchbot 4.0.0-beta.0 → 4.0.0-beta.10
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/copilot-instructions.md +19 -5
- package/BLE.md +117 -4
- package/CHANGELOG.md +45 -0
- package/README.md +7 -1
- package/dist/api.d.ts +3 -3
- package/dist/api.d.ts.map +1 -1
- package/dist/api.js +9 -6
- package/dist/api.js.map +1 -1
- package/dist/ble.d.ts +38 -4
- package/dist/ble.d.ts.map +1 -1
- package/dist/ble.js +409 -53
- package/dist/ble.js.map +1 -1
- package/dist/devices/base.d.ts +83 -5
- package/dist/devices/base.d.ts.map +1 -1
- package/dist/devices/base.js +371 -34
- package/dist/devices/base.js.map +1 -1
- package/dist/devices/device-override-state-during-connection.d.ts +27 -0
- package/dist/devices/device-override-state-during-connection.d.ts.map +1 -0
- package/dist/devices/device-override-state-during-connection.js +45 -0
- package/dist/devices/device-override-state-during-connection.js.map +1 -0
- package/dist/devices/index.d.ts +4 -0
- package/dist/devices/index.d.ts.map +1 -1
- package/dist/devices/index.js +4 -0
- package/dist/devices/index.js.map +1 -1
- package/dist/devices/sequence-device.d.ts +36 -0
- package/dist/devices/sequence-device.d.ts.map +1 -0
- package/dist/devices/sequence-device.js +75 -0
- package/dist/devices/sequence-device.js.map +1 -0
- package/dist/devices/wo-air-purifier.d.ts +2 -2
- package/dist/devices/wo-air-purifier.d.ts.map +1 -1
- package/dist/devices/wo-air-purifier.js +2 -2
- package/dist/devices/wo-air-purifier.js.map +1 -1
- package/dist/devices/wo-bulb.d.ts +10 -0
- package/dist/devices/wo-bulb.d.ts.map +1 -1
- package/dist/devices/wo-bulb.js +69 -0
- package/dist/devices/wo-bulb.js.map +1 -1
- package/dist/devices/wo-curtain.d.ts +3 -3
- package/dist/devices/wo-curtain.d.ts.map +1 -1
- package/dist/devices/wo-curtain.js +12 -9
- package/dist/devices/wo-curtain.js.map +1 -1
- package/dist/devices/wo-hand.d.ts +53 -2
- package/dist/devices/wo-hand.d.ts.map +1 -1
- package/dist/devices/wo-hand.js +121 -3
- package/dist/devices/wo-hand.js.map +1 -1
- package/dist/devices/wo-lock-pro.d.ts +11 -2
- package/dist/devices/wo-lock-pro.d.ts.map +1 -1
- package/dist/devices/wo-lock-pro.js +65 -3
- package/dist/devices/wo-lock-pro.js.map +1 -1
- package/dist/devices/wo-lock.d.ts +7 -2
- package/dist/devices/wo-lock.d.ts.map +1 -1
- package/dist/devices/wo-lock.js +58 -3
- package/dist/devices/wo-lock.js.map +1 -1
- package/dist/devices/wo-plug-mini-us.d.ts +2 -2
- package/dist/devices/wo-plug-mini-us.d.ts.map +1 -1
- package/dist/devices/wo-plug-mini-us.js +2 -2
- package/dist/devices/wo-plug-mini-us.js.map +1 -1
- package/dist/devices/wo-relay-switch-1.d.ts +4 -2
- package/dist/devices/wo-relay-switch-1.d.ts.map +1 -1
- package/dist/devices/wo-relay-switch-1.js +36 -4
- package/dist/devices/wo-relay-switch-1.js.map +1 -1
- package/dist/devices/wo-relay-switch-2pm.d.ts +21 -0
- package/dist/devices/wo-relay-switch-2pm.d.ts.map +1 -0
- package/dist/devices/wo-relay-switch-2pm.js +39 -0
- package/dist/devices/wo-relay-switch-2pm.js.map +1 -0
- package/dist/devices/wo-rgbic-bulb.d.ts +29 -0
- package/dist/devices/wo-rgbic-bulb.d.ts.map +1 -0
- package/dist/devices/wo-rgbic-bulb.js +84 -0
- package/dist/devices/wo-rgbic-bulb.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/settings.d.ts +17 -0
- package/dist/settings.d.ts.map +1 -1
- package/dist/settings.js +18 -1
- package/dist/settings.js.map +1 -1
- package/dist/switchbot.d.ts +7 -0
- package/dist/switchbot.d.ts.map +1 -1
- package/dist/switchbot.js +109 -40
- package/dist/switchbot.js.map +1 -1
- package/dist/types/ble.d.ts +20 -1
- package/dist/types/ble.d.ts.map +1 -1
- package/dist/types/ble.js.map +1 -1
- package/dist/types/device.d.ts +30 -3
- package/dist/types/device.d.ts.map +1 -1
- package/dist/types/index.d.ts +22 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/utils/bot-ble.d.ts +36 -0
- package/dist/utils/bot-ble.d.ts.map +1 -0
- package/dist/utils/bot-ble.js +109 -0
- package/dist/utils/bot-ble.js.map +1 -0
- package/dist/utils/circuit-breaker.d.ts +98 -0
- package/dist/utils/circuit-breaker.d.ts.map +1 -0
- package/dist/utils/circuit-breaker.js +187 -0
- package/dist/utils/circuit-breaker.js.map +1 -0
- package/dist/utils/connection-tracker.d.ts +66 -0
- package/dist/utils/connection-tracker.d.ts.map +1 -0
- package/dist/utils/connection-tracker.js +184 -0
- package/dist/utils/connection-tracker.js.map +1 -0
- package/dist/utils/fallback-handler.d.ts +68 -0
- package/dist/utils/fallback-handler.d.ts.map +1 -0
- package/dist/utils/fallback-handler.js +131 -0
- package/dist/utils/fallback-handler.js.map +1 -0
- package/dist/utils/index.d.ts +10 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +41 -4
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/retry.d.ts +55 -0
- package/dist/utils/retry.d.ts.map +1 -0
- package/dist/utils/retry.js +95 -0
- package/dist/utils/retry.js.map +1 -0
- 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 +16 -10
- package/docs/classes/BLENotAvailableError.html +2 -2
- package/docs/classes/BLEScanner.html +11 -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 +56 -0
- package/docs/classes/DiscoveryError.html +2 -2
- package/docs/classes/OpenAPIClient.html +24 -24
- package/docs/classes/SequenceDevice.html +58 -0
- package/docs/classes/SwitchBot.html +12 -11
- package/docs/classes/SwitchBotDevice.html +43 -15
- package/docs/classes/SwitchBotError.html +2 -2
- package/docs/classes/ValidationError.html +2 -2
- package/docs/classes/WoAirPurifier.html +48 -18
- package/docs/classes/WoAirPurifierTable.html +48 -18
- package/docs/classes/WoBlindTilt.html +48 -20
- package/docs/classes/WoBulb.html +52 -19
- package/docs/classes/WoCeilingLight.html +52 -19
- package/docs/classes/WoContact.html +42 -14
- package/docs/classes/WoCurtain.html +46 -18
- package/docs/classes/WoHand.html +63 -19
- package/docs/classes/WoHub2.html +42 -14
- package/docs/classes/WoHub3.html +42 -14
- package/docs/classes/WoHumi.html +46 -18
- package/docs/classes/WoHumi2.html +46 -18
- package/docs/classes/WoIOSensorTH.html +42 -14
- package/docs/classes/WoKeypad.html +42 -14
- package/docs/classes/WoLeak.html +42 -14
- package/docs/classes/WoPlugMiniJP.html +45 -17
- package/docs/classes/WoPlugMiniUS.html +45 -17
- package/docs/classes/WoPresence.html +42 -14
- package/docs/classes/WoRelaySwitch1.html +47 -17
- package/docs/classes/WoRelaySwitch1PM.html +47 -17
- package/docs/classes/WoRemote.html +42 -14
- package/docs/classes/WoSensorTH.html +42 -14
- package/docs/classes/WoSensorTHPlus.html +42 -14
- package/docs/classes/WoSensorTHPro.html +42 -14
- package/docs/classes/WoSensorTHProCO2.html +42 -14
- package/docs/classes/WoSmartLock.html +49 -16
- package/docs/classes/WoSmartLockPro.html +52 -17
- package/docs/classes/WoStrip.html +52 -19
- 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/index.html +2 -2
- 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 +2 -2
- package/docs/interfaces/AirPurifierServiceData.html +20 -5
- package/docs/interfaces/AirPurifierStatus.html +7 -7
- package/docs/interfaces/BLEAdvertisement.html +3 -2
- package/docs/interfaces/BLEScanOptions.html +5 -5
- package/docs/interfaces/BLEServiceData.html +22 -5
- package/docs/interfaces/BlindTiltCommands.html +2 -2
- package/docs/interfaces/BlindTiltServiceData.html +21 -5
- package/docs/interfaces/BlindTiltStatus.html +6 -6
- package/docs/interfaces/BotCommands.html +6 -2
- package/docs/interfaces/BotServiceData.html +20 -5
- package/docs/interfaces/BotStatus.html +6 -6
- package/docs/interfaces/BulbCommands.html +4 -2
- package/docs/interfaces/BulbServiceData.html +21 -5
- package/docs/interfaces/BulbStatus.html +6 -6
- package/docs/interfaces/CeilingLightCommands.html +4 -2
- package/docs/interfaces/CeilingLightServiceData.html +21 -5
- package/docs/interfaces/CeilingLightStatus.html +6 -6
- package/docs/interfaces/CommandResult.html +6 -6
- package/docs/interfaces/ContactServiceData.html +22 -5
- package/docs/interfaces/ContactStatus.html +6 -6
- package/docs/interfaces/CurtainCommands.html +2 -2
- package/docs/interfaces/CurtainServiceData.html +22 -5
- package/docs/interfaces/CurtainStatus.html +6 -6
- package/docs/interfaces/DeviceInfo.html +23 -13
- 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 +22 -5
- package/docs/interfaces/HubStatus.html +6 -6
- package/docs/interfaces/HumidifierCommands.html +2 -2
- package/docs/interfaces/HumidifierServiceData.html +23 -6
- package/docs/interfaces/HumidifierStatus.html +6 -6
- package/docs/interfaces/KeypadStatus.html +6 -6
- package/docs/interfaces/LeakServiceData.html +22 -5
- package/docs/interfaces/LeakStatus.html +6 -6
- package/docs/interfaces/LockCommands.html +6 -2
- package/docs/interfaces/LockServiceData.html +20 -6
- package/docs/interfaces/LockStatus.html +6 -6
- package/docs/interfaces/MeterServiceData.html +22 -5
- package/docs/interfaces/MeterStatus.html +6 -6
- package/docs/interfaces/MotionServiceData.html +22 -5
- package/docs/interfaces/MotionStatus.html +6 -6
- package/docs/interfaces/PlugCommands.html +2 -2
- package/docs/interfaces/PlugServiceData.html +21 -5
- package/docs/interfaces/PlugStatus.html +6 -6
- package/docs/interfaces/PresenceServiceData.html +22 -5
- package/docs/interfaces/PresenceStatus.html +6 -6
- package/docs/interfaces/RelaySwitchCommands.html +2 -2
- package/docs/interfaces/RelaySwitchServiceData.html +21 -5
- 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 +21 -5
- package/docs/interfaces/StripStatus.html +6 -6
- package/docs/interfaces/SwitchBotConfig.html +21 -9
- 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/media/BLE.md +117 -4
- 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 +12 -8
- package/tmp-switchbot-scan.mjs +79 -0
- package/todo/PYSWITCHBOT_COMPARISON.md +484 -0
- package/todo/README.md +68 -0
- package/todo/completed.md +134 -0
- package/todo/todo.md +296 -0
- package/tsconfig.build.json +17 -0
- package/PRODUCTION_READY.md +0 -135
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/* Copyright(C) 2024-2026, donavanbecker (https://github.com/donavanbecker). All rights reserved.
|
|
2
|
+
*
|
|
3
|
+
* devices/device-override-state-during-connection.ts: SwitchBot v4.0.0 - Device Override State During Connection Base Class
|
|
4
|
+
*/
|
|
5
|
+
import { SwitchBotDevice } from './base.js';
|
|
6
|
+
/**
|
|
7
|
+
* Base class for devices that should ignore advertisement state while connected.
|
|
8
|
+
* Prevents stale BLE advertisement data from overriding active connection state.
|
|
9
|
+
*/
|
|
10
|
+
export class DeviceOverrideStateDuringConnection extends SwitchBotDevice {
|
|
11
|
+
constructor(info, options = {}) {
|
|
12
|
+
super(info, options);
|
|
13
|
+
}
|
|
14
|
+
updateInfo(newInfo) {
|
|
15
|
+
if (!this.isBLEConnected()) {
|
|
16
|
+
super.updateInfo(newInfo);
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
const filtered = { ...newInfo };
|
|
20
|
+
delete filtered.bleServiceData;
|
|
21
|
+
delete filtered.battery;
|
|
22
|
+
delete filtered.rssi;
|
|
23
|
+
super.updateInfo(filtered);
|
|
24
|
+
}
|
|
25
|
+
normalizeBLEStatusData(data) {
|
|
26
|
+
if (data && typeof data === 'object') {
|
|
27
|
+
return super.normalizeBLEStatusData(data);
|
|
28
|
+
}
|
|
29
|
+
if (this.isBLEConnected()) {
|
|
30
|
+
return {};
|
|
31
|
+
}
|
|
32
|
+
return super.normalizeBLEStatusData(data);
|
|
33
|
+
}
|
|
34
|
+
isBLEConnected() {
|
|
35
|
+
if (!this.bleConnection?.isConnected) {
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
const macOrBleId = this.info.mac ?? (this.info.bleId ? `id:${this.info.bleId}` : undefined);
|
|
39
|
+
if (!macOrBleId) {
|
|
40
|
+
return false;
|
|
41
|
+
}
|
|
42
|
+
return this.bleConnection.isConnected(macOrBleId);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=device-override-state-during-connection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"device-override-state-during-connection.js","sourceRoot":"","sources":["../../src/devices/device-override-state-during-connection.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAE3C;;;GAGG;AACH,MAAM,OAAgB,mCAAoC,SAAQ,eAAe;IAC/E,YACE,IAAgB,EAChB,UAWI,EAAE;QAEN,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IACtB,CAAC;IAEQ,UAAU,CAAC,OAA4B;QAC9C,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;YAC3B,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAA;YACzB,OAAM;QACR,CAAC;QAED,MAAM,QAAQ,GAAwB,EAAE,GAAG,OAAO,EAAE,CAAA;QACpD,OAAO,QAAQ,CAAC,cAAc,CAAA;QAC9B,OAAO,QAAQ,CAAC,OAAO,CAAA;QACvB,OAAO,QAAQ,CAAC,IAAI,CAAA;QAEpB,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAA;IAC5B,CAAC;IAEkB,sBAAsB,CAAC,IAAS;QACjD,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YACrC,OAAO,KAAK,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAA;QAC3C,CAAC;QAED,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;YAC1B,OAAO,EAAE,CAAA;QACX,CAAC;QAED,OAAO,KAAK,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAA;IAC3C,CAAC;IAES,cAAc;QACtB,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,WAAW,EAAE,CAAC;YACrC,OAAO,KAAK,CAAA;QACd,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;QAC3F,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO,KAAK,CAAA;QACd,CAAC;QAED,OAAO,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,UAAU,CAAC,CAAA;IACnD,CAAC;CACF"}
|
package/dist/devices/index.d.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
export { DeviceManager, SwitchBotDevice } from './base.js';
|
|
2
|
+
export { DeviceOverrideStateDuringConnection } from './device-override-state-during-connection.js';
|
|
3
|
+
export { SequenceDevice } from './sequence-device.js';
|
|
2
4
|
export { WoAirPurifierTable } from './wo-air-purifier-table.js';
|
|
3
5
|
export { WoAirPurifier } from './wo-air-purifier.js';
|
|
4
6
|
export { WoBlindTilt } from './wo-blind-tilt.js';
|
|
@@ -21,7 +23,9 @@ export { WoPlugMiniUS } from './wo-plug-mini-us.js';
|
|
|
21
23
|
export { WoPresence } from './wo-presence.js';
|
|
22
24
|
export { WoRelaySwitch1 } from './wo-relay-switch-1.js';
|
|
23
25
|
export { WoRelaySwitch1PM } from './wo-relay-switch-1pm.js';
|
|
26
|
+
export { WoRelaySwitch2PM } from './wo-relay-switch-2pm.js';
|
|
24
27
|
export { WoRemote } from './wo-remote.js';
|
|
28
|
+
export { WoRGBICBulb } from './wo-rgbic-bulb.js';
|
|
25
29
|
export { WoSensorTHPlus } from './wo-sensor-th-plus.js';
|
|
26
30
|
export { WoSensorTHProCO2 } from './wo-sensor-th-pro-co2.js';
|
|
27
31
|
export { WoSensorTHPro } from './wo-sensor-th-pro.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/devices/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAA;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AACrC,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AACrC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/devices/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAC1D,OAAO,EAAE,mCAAmC,EAAE,MAAM,8CAA8C,CAAA;AAClG,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAA;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AACrC,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AACrC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA"}
|
package/dist/devices/index.js
CHANGED
|
@@ -3,6 +3,8 @@
|
|
|
3
3
|
* devices/index.ts: SwitchBot v4.0.0 - Device Exports
|
|
4
4
|
*/
|
|
5
5
|
export { DeviceManager, SwitchBotDevice } from './base.js';
|
|
6
|
+
export { DeviceOverrideStateDuringConnection } from './device-override-state-during-connection.js';
|
|
7
|
+
export { SequenceDevice } from './sequence-device.js';
|
|
6
8
|
export { WoAirPurifierTable } from './wo-air-purifier-table.js';
|
|
7
9
|
export { WoAirPurifier } from './wo-air-purifier.js';
|
|
8
10
|
export { WoBlindTilt } from './wo-blind-tilt.js';
|
|
@@ -25,7 +27,9 @@ export { WoPlugMiniUS } from './wo-plug-mini-us.js';
|
|
|
25
27
|
export { WoPresence } from './wo-presence.js';
|
|
26
28
|
export { WoRelaySwitch1 } from './wo-relay-switch-1.js';
|
|
27
29
|
export { WoRelaySwitch1PM } from './wo-relay-switch-1pm.js';
|
|
30
|
+
export { WoRelaySwitch2PM } from './wo-relay-switch-2pm.js';
|
|
28
31
|
export { WoRemote } from './wo-remote.js';
|
|
32
|
+
export { WoRGBICBulb } from './wo-rgbic-bulb.js';
|
|
29
33
|
export { WoSensorTHPlus } from './wo-sensor-th-plus.js';
|
|
30
34
|
export { WoSensorTHProCO2 } from './wo-sensor-th-pro-co2.js';
|
|
31
35
|
export { WoSensorTHPro } from './wo-sensor-th-pro.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/devices/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAA;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AACrC,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AACrC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/devices/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAC1D,OAAO,EAAE,mCAAmC,EAAE,MAAM,8CAA8C,CAAA;AAClG,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAA;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AACrC,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AACrC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { OpenAPIClient } from '../api.js';
|
|
2
|
+
import type { BLEConnection } from '../ble.js';
|
|
3
|
+
import type { ConnectionType, DeviceInfo, DeviceStatus } from '../types/index.js';
|
|
4
|
+
import type { CircuitBreakerConfig, RetryConfig } from '../utils/index.js';
|
|
5
|
+
import { SwitchBotDevice } from './base.js';
|
|
6
|
+
/**
|
|
7
|
+
* Base class for devices that expose an advertisement sequence number.
|
|
8
|
+
* Automatically triggers a status refresh when the sequence number changes.
|
|
9
|
+
*/
|
|
10
|
+
export declare abstract class SequenceDevice extends SwitchBotDevice {
|
|
11
|
+
private lastSequenceNumber;
|
|
12
|
+
private sequenceUpdateInFlight;
|
|
13
|
+
constructor(info: DeviceInfo, options?: {
|
|
14
|
+
bleConnection?: BLEConnection;
|
|
15
|
+
apiClient?: OpenAPIClient;
|
|
16
|
+
enableFallback?: boolean;
|
|
17
|
+
preferredConnection?: ConnectionType;
|
|
18
|
+
enableConnectionIntelligence?: boolean;
|
|
19
|
+
enableCircuitBreaker?: boolean;
|
|
20
|
+
enableRetry?: boolean;
|
|
21
|
+
retryConfig?: RetryConfig;
|
|
22
|
+
circuitBreakerConfig?: CircuitBreakerConfig;
|
|
23
|
+
logLevel?: number;
|
|
24
|
+
});
|
|
25
|
+
/**
|
|
26
|
+
* Refresh status for this device. Called automatically after sequence changes.
|
|
27
|
+
*/
|
|
28
|
+
update(): Promise<DeviceStatus>;
|
|
29
|
+
/**
|
|
30
|
+
* Update device information and react to sequence number changes.
|
|
31
|
+
*/
|
|
32
|
+
updateInfo(newInfo: Partial<DeviceInfo>): void;
|
|
33
|
+
private getSequenceNumberFromInfo;
|
|
34
|
+
private triggerSequenceUpdate;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=sequence-device.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sequence-device.d.ts","sourceRoot":"","sources":["../../src/devices/sequence-device.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AAC9C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AAC9C,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AACjF,OAAO,KAAK,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAE1E,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAE3C;;;GAGG;AACH,8BAAsB,cAAe,SAAQ,eAAe;IAC1D,OAAO,CAAC,kBAAkB,CAAoB;IAC9C,OAAO,CAAC,sBAAsB,CAAQ;gBAGpC,IAAI,EAAE,UAAU,EAChB,OAAO,GAAE;QACP,aAAa,CAAC,EAAE,aAAa,CAAA;QAC7B,SAAS,CAAC,EAAE,aAAa,CAAA;QACzB,cAAc,CAAC,EAAE,OAAO,CAAA;QACxB,mBAAmB,CAAC,EAAE,cAAc,CAAA;QACpC,4BAA4B,CAAC,EAAE,OAAO,CAAA;QACtC,oBAAoB,CAAC,EAAE,OAAO,CAAA;QAC9B,WAAW,CAAC,EAAE,OAAO,CAAA;QACrB,WAAW,CAAC,EAAE,WAAW,CAAA;QACzB,oBAAoB,CAAC,EAAE,oBAAoB,CAAA;QAC3C,QAAQ,CAAC,EAAE,MAAM,CAAA;KACb;IAMR;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,YAAY,CAAC;IAIrC;;OAEG;IACM,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,IAAI;IA6BvD,OAAO,CAAC,yBAAyB;YAMnB,qBAAqB;CAmBpC"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/* Copyright(C) 2024-2026, donavanbecker (https://github.com/donavanbecker). All rights reserved.
|
|
2
|
+
*
|
|
3
|
+
* devices/sequence-device.ts: SwitchBot v4.0.0 - Sequence Aware Device Base Class
|
|
4
|
+
*/
|
|
5
|
+
import { SwitchBotDevice } from './base.js';
|
|
6
|
+
/**
|
|
7
|
+
* Base class for devices that expose an advertisement sequence number.
|
|
8
|
+
* Automatically triggers a status refresh when the sequence number changes.
|
|
9
|
+
*/
|
|
10
|
+
export class SequenceDevice extends SwitchBotDevice {
|
|
11
|
+
lastSequenceNumber;
|
|
12
|
+
sequenceUpdateInFlight = false;
|
|
13
|
+
constructor(info, options = {}) {
|
|
14
|
+
super(info, options);
|
|
15
|
+
this.lastSequenceNumber = this.getSequenceNumberFromInfo(info);
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Refresh status for this device. Called automatically after sequence changes.
|
|
19
|
+
*/
|
|
20
|
+
async update() {
|
|
21
|
+
return this.getStatus();
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Update device information and react to sequence number changes.
|
|
25
|
+
*/
|
|
26
|
+
updateInfo(newInfo) {
|
|
27
|
+
const previousSequenceNumber = this.lastSequenceNumber;
|
|
28
|
+
super.updateInfo(newInfo);
|
|
29
|
+
const nextSequenceNumber = this.getSequenceNumberFromInfo(this.info);
|
|
30
|
+
if (nextSequenceNumber === undefined) {
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
if (previousSequenceNumber === undefined) {
|
|
34
|
+
this.lastSequenceNumber = nextSequenceNumber;
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
if (nextSequenceNumber === previousSequenceNumber) {
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
this.lastSequenceNumber = nextSequenceNumber;
|
|
41
|
+
this.emit('sequence-changed', {
|
|
42
|
+
deviceId: this.info.id,
|
|
43
|
+
previousSequenceNumber,
|
|
44
|
+
sequenceNumber: nextSequenceNumber,
|
|
45
|
+
updatedAt: new Date(),
|
|
46
|
+
});
|
|
47
|
+
void this.triggerSequenceUpdate();
|
|
48
|
+
}
|
|
49
|
+
getSequenceNumberFromInfo(info) {
|
|
50
|
+
const raw = (info.bleServiceData ?? {});
|
|
51
|
+
const sequenceNumber = raw.sequenceNumber;
|
|
52
|
+
return typeof sequenceNumber === 'number' ? sequenceNumber : undefined;
|
|
53
|
+
}
|
|
54
|
+
async triggerSequenceUpdate() {
|
|
55
|
+
if (this.sequenceUpdateInFlight) {
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
this.sequenceUpdateInFlight = true;
|
|
59
|
+
try {
|
|
60
|
+
const status = await this.update();
|
|
61
|
+
this.emit('status-updated', {
|
|
62
|
+
deviceId: this.info.id,
|
|
63
|
+
status,
|
|
64
|
+
updatedAt: new Date(),
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
catch (error) {
|
|
68
|
+
this.logger.debug('Sequence-triggered update failed', error);
|
|
69
|
+
}
|
|
70
|
+
finally {
|
|
71
|
+
this.sequenceUpdateInFlight = false;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=sequence-device.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sequence-device.js","sourceRoot":"","sources":["../../src/devices/sequence-device.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAE3C;;;GAGG;AACH,MAAM,OAAgB,cAAe,SAAQ,eAAe;IAClD,kBAAkB,CAAoB;IACtC,sBAAsB,GAAG,KAAK,CAAA;IAEtC,YACE,IAAgB,EAChB,UAWI,EAAE;QAEN,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;QACpB,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAA;IAChE,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM;QACV,OAAO,IAAI,CAAC,SAAS,EAAE,CAAA;IACzB,CAAC;IAED;;OAEG;IACM,UAAU,CAAC,OAA4B;QAC9C,MAAM,sBAAsB,GAAG,IAAI,CAAC,kBAAkB,CAAA;QACtD,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAA;QAEzB,MAAM,kBAAkB,GAAG,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACpE,IAAI,kBAAkB,KAAK,SAAS,EAAE,CAAC;YACrC,OAAM;QACR,CAAC;QAED,IAAI,sBAAsB,KAAK,SAAS,EAAE,CAAC;YACzC,IAAI,CAAC,kBAAkB,GAAG,kBAAkB,CAAA;YAC5C,OAAM;QACR,CAAC;QAED,IAAI,kBAAkB,KAAK,sBAAsB,EAAE,CAAC;YAClD,OAAM;QACR,CAAC;QAED,IAAI,CAAC,kBAAkB,GAAG,kBAAkB,CAAA;QAC5C,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;YAC5B,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE;YACtB,sBAAsB;YACtB,cAAc,EAAE,kBAAkB;YAClC,SAAS,EAAE,IAAI,IAAI,EAAE;SACtB,CAAC,CAAA;QAEF,KAAK,IAAI,CAAC,qBAAqB,EAAE,CAAA;IACnC,CAAC;IAEO,yBAAyB,CAAC,IAAgB;QAChD,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,cAAc,IAAI,EAAE,CAA4B,CAAA;QAClE,MAAM,cAAc,GAAG,GAAG,CAAC,cAAc,CAAA;QACzC,OAAO,OAAO,cAAc,KAAK,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,CAAA;IACxE,CAAC;IAEO,KAAK,CAAC,qBAAqB;QACjC,IAAI,IAAI,CAAC,sBAAsB,EAAE,CAAC;YAChC,OAAM;QACR,CAAC;QAED,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAA;QAClC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,EAAE,CAAA;YAClC,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;gBAC1B,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE;gBACtB,MAAM;gBACN,SAAS,EAAE,IAAI,IAAI,EAAE;aACtB,CAAC,CAAA;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,kCAAkC,EAAE,KAAK,CAAC,CAAA;QAC9D,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,sBAAsB,GAAG,KAAK,CAAA;QACrC,CAAC;IACH,CAAC;CACF"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import type { AirPurifierCommands, AirPurifierStatus } from '../types/device.js';
|
|
2
|
-
import {
|
|
2
|
+
import { SequenceDevice } from './sequence-device.js';
|
|
3
3
|
/**
|
|
4
4
|
* Air Purifier Device
|
|
5
5
|
*/
|
|
6
|
-
export declare class WoAirPurifier extends
|
|
6
|
+
export declare class WoAirPurifier extends SequenceDevice implements AirPurifierCommands {
|
|
7
7
|
/**
|
|
8
8
|
* Turn on
|
|
9
9
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wo-air-purifier.d.ts","sourceRoot":"","sources":["../../src/devices/wo-air-purifier.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAIhF,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"wo-air-purifier.d.ts","sourceRoot":"","sources":["../../src/devices/wo-air-purifier.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAIhF,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAErD;;GAEG;AACH,qBAAa,aAAc,SAAQ,cAAe,YAAW,mBAAmB;IAC9E;;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,GAAG,OAAO,CAAC,OAAO,CAAC;IAiBlE;;OAEG;IACG,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAalD;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,iBAAiB,CAAC;CAqD9C"}
|
|
@@ -4,11 +4,11 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import { DEVICE_COMMANDS } from '../settings.js';
|
|
6
6
|
import { clamp } from '../utils/index.js';
|
|
7
|
-
import {
|
|
7
|
+
import { SequenceDevice } from './sequence-device.js';
|
|
8
8
|
/**
|
|
9
9
|
* Air Purifier Device
|
|
10
10
|
*/
|
|
11
|
-
export class WoAirPurifier extends
|
|
11
|
+
export class WoAirPurifier extends SequenceDevice {
|
|
12
12
|
/**
|
|
13
13
|
* Turn on
|
|
14
14
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wo-air-purifier.js","sourceRoot":"","sources":["../../src/devices/wo-air-purifier.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAChD,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AACzC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"wo-air-purifier.js","sourceRoot":"","sources":["../../src/devices/wo-air-purifier.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,7 @@ import { SwitchBotDevice } from './base.js';
|
|
|
4
4
|
* Color Bulb Device
|
|
5
5
|
*/
|
|
6
6
|
export declare class WoBulb extends SwitchBotDevice implements BulbCommands {
|
|
7
|
+
private static readonly EFFECTS;
|
|
7
8
|
/**
|
|
8
9
|
* Turn on
|
|
9
10
|
*/
|
|
@@ -20,10 +21,19 @@ export declare class WoBulb extends SwitchBotDevice implements BulbCommands {
|
|
|
20
21
|
* Set color temperature (2700-6500K)
|
|
21
22
|
*/
|
|
22
23
|
setColorTemperature(temperature: number): Promise<boolean>;
|
|
24
|
+
/**
|
|
25
|
+
* Set color temperature with min/max bounds
|
|
26
|
+
* For advanced bulbs that support color temperature range control
|
|
27
|
+
*/
|
|
28
|
+
setColorTemp(minTemp: number, maxTemp: number, temp: number): Promise<boolean>;
|
|
23
29
|
/**
|
|
24
30
|
* Set RGB color
|
|
25
31
|
*/
|
|
26
32
|
setColor(red: number, green: number, blue: number): Promise<boolean>;
|
|
33
|
+
/**
|
|
34
|
+
* Set preset light effect
|
|
35
|
+
*/
|
|
36
|
+
setEffect(effectName: string, speed?: number): Promise<boolean>;
|
|
27
37
|
/**
|
|
28
38
|
* Get device status
|
|
29
39
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wo-bulb.d.ts","sourceRoot":"","sources":["../../src/devices/wo-bulb.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAIlE,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAE3C;;GAEG;AACH,qBAAa,MAAO,SAAQ,eAAgB,YAAW,YAAY;IACjE;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC;IAQhC;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;IAQjC;;OAEG;IACG,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAazD;;OAEG;IACG,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAehE;;OAEG;IACG,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAe1E;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,UAAU,CAAC;CAmDvC"}
|
|
1
|
+
{"version":3,"file":"wo-bulb.d.ts","sourceRoot":"","sources":["../../src/devices/wo-bulb.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAIlE,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAE3C;;GAEG;AACH,qBAAa,MAAO,SAAQ,eAAgB,YAAW,YAAY;IACjE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAqB9B;IAED;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC;IAQhC;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;IAQjC;;OAEG;IACG,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAazD;;OAEG;IACG,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAehE;;;OAGG;IACG,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAuCpF;;OAEG;IACG,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAe1E;;OAEG;IACG,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,SAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAiBlE;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,UAAU,CAAC;CAmDvC"}
|
package/dist/devices/wo-bulb.js
CHANGED
|
@@ -9,6 +9,28 @@ import { SwitchBotDevice } from './base.js';
|
|
|
9
9
|
* Color Bulb Device
|
|
10
10
|
*/
|
|
11
11
|
export class WoBulb extends SwitchBotDevice {
|
|
12
|
+
static EFFECTS = {
|
|
13
|
+
christmas: 0x00,
|
|
14
|
+
candle: 0x01,
|
|
15
|
+
halloween: 0x02,
|
|
16
|
+
sunset: 0x03,
|
|
17
|
+
party: 0x04,
|
|
18
|
+
reading: 0x05,
|
|
19
|
+
rainbow: 0x06,
|
|
20
|
+
forest: 0x07,
|
|
21
|
+
ocean: 0x08,
|
|
22
|
+
spring: 0x09,
|
|
23
|
+
summer: 0x0A,
|
|
24
|
+
autumn: 0x0B,
|
|
25
|
+
winter: 0x0C,
|
|
26
|
+
aurora: 0x0D,
|
|
27
|
+
meteor: 0x0E,
|
|
28
|
+
firework: 0x0F,
|
|
29
|
+
breathe: 0x10,
|
|
30
|
+
pulse: 0x11,
|
|
31
|
+
flicker: 0x12,
|
|
32
|
+
pet: 0x13,
|
|
33
|
+
};
|
|
12
34
|
/**
|
|
13
35
|
* Turn on
|
|
14
36
|
*/
|
|
@@ -43,6 +65,40 @@ export class WoBulb extends SwitchBotDevice {
|
|
|
43
65
|
const result = await this.sendCommand(bleCommand, 'setColorTemperature', clampedTemp);
|
|
44
66
|
return result.success;
|
|
45
67
|
}
|
|
68
|
+
/**
|
|
69
|
+
* Set color temperature with min/max bounds
|
|
70
|
+
* For advanced bulbs that support color temperature range control
|
|
71
|
+
*/
|
|
72
|
+
async setColorTemp(minTemp, maxTemp, temp) {
|
|
73
|
+
// Validate and clamp temperatures
|
|
74
|
+
const clampedMinTemp = clamp(minTemp, 2700, 6500);
|
|
75
|
+
const clampedMaxTemp = clamp(maxTemp, 2700, 6500);
|
|
76
|
+
const clampedTemp = clamp(temp, clampedMinTemp, clampedMaxTemp);
|
|
77
|
+
// Ensure min <= max
|
|
78
|
+
const finalMinTemp = Math.min(clampedMinTemp, clampedMaxTemp);
|
|
79
|
+
const finalMaxTemp = Math.max(clampedMinTemp, clampedMaxTemp);
|
|
80
|
+
// Build command: 0x57 0x0F 0x47 0x01 0x17 BRIGHTNESS MIN_KEL MAX_KEL TEMP
|
|
81
|
+
// Note: Brightness is required but not specified, use default 100 (0x64)
|
|
82
|
+
const minTempBytes = [
|
|
83
|
+
(finalMinTemp >> 8) & 0xFF,
|
|
84
|
+
finalMinTemp & 0xFF,
|
|
85
|
+
];
|
|
86
|
+
const maxTempBytes = [
|
|
87
|
+
(finalMaxTemp >> 8) & 0xFF,
|
|
88
|
+
finalMaxTemp & 0xFF,
|
|
89
|
+
];
|
|
90
|
+
const tempBytes = [(clampedTemp >> 8) & 0xFF, clampedTemp & 0xFF];
|
|
91
|
+
const bleCommand = [
|
|
92
|
+
...DEVICE_COMMANDS.BULB.BASE,
|
|
93
|
+
0x17,
|
|
94
|
+
0x64, // brightness (default: 100/255)
|
|
95
|
+
...minTempBytes,
|
|
96
|
+
...maxTempBytes,
|
|
97
|
+
...tempBytes,
|
|
98
|
+
];
|
|
99
|
+
const result = await this.sendCommand(bleCommand, 'setColorTemp', `${finalMinTemp}-${finalMaxTemp}:${clampedTemp}`);
|
|
100
|
+
return result.success;
|
|
101
|
+
}
|
|
46
102
|
/**
|
|
47
103
|
* Set RGB color
|
|
48
104
|
*/
|
|
@@ -54,6 +110,19 @@ export class WoBulb extends SwitchBotDevice {
|
|
|
54
110
|
const result = await this.sendCommand(bleCommand, 'setColor', `${r}:${g}:${b}`);
|
|
55
111
|
return result.success;
|
|
56
112
|
}
|
|
113
|
+
/**
|
|
114
|
+
* Set preset light effect
|
|
115
|
+
*/
|
|
116
|
+
async setEffect(effectName, speed = 100) {
|
|
117
|
+
const effectId = WoBulb.EFFECTS[effectName.toLowerCase()];
|
|
118
|
+
if (effectId === undefined) {
|
|
119
|
+
throw new Error(`Unsupported effect: ${effectName}`);
|
|
120
|
+
}
|
|
121
|
+
const effectSpeed = clamp(speed, 1, 100);
|
|
122
|
+
const bleCommand = [...DEVICE_COMMANDS.BULB.BASE, effectId, 0xFF, effectSpeed, 0x00, 0x00, 0x00];
|
|
123
|
+
const result = await this.sendCommand(bleCommand, 'setEffect', `${effectName}:${effectSpeed}`);
|
|
124
|
+
return result.success;
|
|
125
|
+
}
|
|
57
126
|
/**
|
|
58
127
|
* Get device status
|
|
59
128
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wo-bulb.js","sourceRoot":"","sources":["../../src/devices/wo-bulb.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,MAAO,SAAQ,eAAe;
|
|
1
|
+
{"version":3,"file":"wo-bulb.js","sourceRoot":"","sources":["../../src/devices/wo-bulb.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,11 +7,11 @@ export declare class WoCurtain extends SwitchBotDevice implements CurtainCommand
|
|
|
7
7
|
/**
|
|
8
8
|
* Open curtain (position 0%)
|
|
9
9
|
*/
|
|
10
|
-
open(): Promise<boolean>;
|
|
10
|
+
open(speed?: number): Promise<boolean>;
|
|
11
11
|
/**
|
|
12
12
|
* Close curtain (position 100%)
|
|
13
13
|
*/
|
|
14
|
-
close(): Promise<boolean>;
|
|
14
|
+
close(speed?: number): Promise<boolean>;
|
|
15
15
|
/**
|
|
16
16
|
* Pause curtain movement
|
|
17
17
|
*/
|
|
@@ -19,7 +19,7 @@ export declare class WoCurtain extends SwitchBotDevice implements CurtainCommand
|
|
|
19
19
|
/**
|
|
20
20
|
* Set curtain position (0-100%)
|
|
21
21
|
*/
|
|
22
|
-
setPosition(position: number): Promise<boolean>;
|
|
22
|
+
setPosition(position: number, speed?: number): Promise<boolean>;
|
|
23
23
|
/**
|
|
24
24
|
* Get device status
|
|
25
25
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wo-curtain.d.ts","sourceRoot":"","sources":["../../src/devices/wo-curtain.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAIxE,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAE3C;;GAEG;AACH,qBAAa,SAAU,SAAQ,eAAgB,YAAW,eAAe;IACvE;;OAEG;IACG,IAAI,
|
|
1
|
+
{"version":3,"file":"wo-curtain.d.ts","sourceRoot":"","sources":["../../src/devices/wo-curtain.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAIxE,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAE3C;;GAEG;AACH,qBAAa,SAAU,SAAQ,eAAgB,YAAW,eAAe;IACvE;;OAEG;IACG,IAAI,CAAC,KAAK,SAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAUzC;;OAEG;IACG,KAAK,CAAC,KAAK,SAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAU1C;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,OAAO,CAAC;IAQ/B;;OAEG;IACG,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,SAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAelE;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,aAAa,CAAC;CAoC1C"}
|
|
@@ -12,15 +12,17 @@ export class WoCurtain extends SwitchBotDevice {
|
|
|
12
12
|
/**
|
|
13
13
|
* Open curtain (position 0%)
|
|
14
14
|
*/
|
|
15
|
-
async open() {
|
|
16
|
-
const
|
|
15
|
+
async open(speed = 255) {
|
|
16
|
+
const clampedSpeed = clamp(speed, 1, 255);
|
|
17
|
+
const result = await this.sendCommand([...DEVICE_COMMANDS.CURTAIN.POSITION, clampedSpeed, 0], 'setPosition', `0,${clampedSpeed.toString(16).padStart(2, '0')},0`);
|
|
17
18
|
return result.success;
|
|
18
19
|
}
|
|
19
20
|
/**
|
|
20
21
|
* Close curtain (position 100%)
|
|
21
22
|
*/
|
|
22
|
-
async close() {
|
|
23
|
-
const
|
|
23
|
+
async close(speed = 255) {
|
|
24
|
+
const clampedSpeed = clamp(speed, 1, 255);
|
|
25
|
+
const result = await this.sendCommand([...DEVICE_COMMANDS.CURTAIN.POSITION, clampedSpeed, 100], 'setPosition', `0,${clampedSpeed.toString(16).padStart(2, '0')},100`);
|
|
24
26
|
return result.success;
|
|
25
27
|
}
|
|
26
28
|
/**
|
|
@@ -33,11 +35,12 @@ export class WoCurtain extends SwitchBotDevice {
|
|
|
33
35
|
/**
|
|
34
36
|
* Set curtain position (0-100%)
|
|
35
37
|
*/
|
|
36
|
-
async setPosition(position) {
|
|
38
|
+
async setPosition(position, speed = 255) {
|
|
37
39
|
const clampedPosition = clamp(position, 0, 100);
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
const
|
|
40
|
+
const clampedSpeed = clamp(speed, 1, 255);
|
|
41
|
+
// BLE command with speed and position bytes
|
|
42
|
+
const bleCommand = [...DEVICE_COMMANDS.CURTAIN.POSITION, clampedSpeed, clampedPosition];
|
|
43
|
+
const result = await this.sendCommand(bleCommand, 'setPosition', `0,${clampedSpeed.toString(16).padStart(2, '0')},${clampedPosition}`);
|
|
41
44
|
return result.success;
|
|
42
45
|
}
|
|
43
46
|
/**
|
|
@@ -61,7 +64,7 @@ export class WoCurtain extends SwitchBotDevice {
|
|
|
61
64
|
}
|
|
62
65
|
// Fallback to BLE
|
|
63
66
|
if (this.hasBLE()) {
|
|
64
|
-
const bleData = await this.getBLEStatus();
|
|
67
|
+
const bleData = await this.getBLEStatus().catch(() => this.normalizeBLEStatusData(undefined));
|
|
65
68
|
return {
|
|
66
69
|
deviceId: this.info.id,
|
|
67
70
|
connectionType: 'ble',
|
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"wo-curtain.js","sourceRoot":"","sources":["../../src/devices/wo-curtain.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,25 @@
|
|
|
1
|
+
import type { OpenAPIClient } from '../api.js';
|
|
2
|
+
import type { BLEConnection } from '../ble.js';
|
|
1
3
|
import type { BotCommands, BotStatus } from '../types/device.js';
|
|
2
|
-
import {
|
|
4
|
+
import type { DeviceInfo } from '../types/index.js';
|
|
5
|
+
import { DeviceOverrideStateDuringConnection } from './device-override-state-during-connection.js';
|
|
3
6
|
/**
|
|
4
7
|
* Bot (WoHand) Device - Press or switch button device
|
|
8
|
+
* Supports optional BLE password protection
|
|
5
9
|
*/
|
|
6
|
-
export declare class WoHand extends
|
|
10
|
+
export declare class WoHand extends DeviceOverrideStateDuringConnection implements BotCommands {
|
|
11
|
+
private password?;
|
|
12
|
+
constructor(info: DeviceInfo, options?: {
|
|
13
|
+
bleConnection?: BLEConnection;
|
|
14
|
+
apiClient?: OpenAPIClient;
|
|
15
|
+
enableFallback?: boolean;
|
|
16
|
+
preferredConnection?: 'ble' | 'api';
|
|
17
|
+
enableConnectionIntelligence?: boolean;
|
|
18
|
+
enableCircuitBreaker?: boolean;
|
|
19
|
+
enableRetry?: boolean;
|
|
20
|
+
password?: string;
|
|
21
|
+
logLevel?: number;
|
|
22
|
+
});
|
|
7
23
|
/**
|
|
8
24
|
* Turn on (switch mode)
|
|
9
25
|
*/
|
|
@@ -16,6 +32,41 @@ export declare class WoHand extends SwitchBotDevice implements BotCommands {
|
|
|
16
32
|
* Press (press mode)
|
|
17
33
|
*/
|
|
18
34
|
press(): Promise<boolean>;
|
|
35
|
+
/**
|
|
36
|
+
* Set Bot mode
|
|
37
|
+
*/
|
|
38
|
+
setMode(mode: 'press' | 'switch'): Promise<boolean>;
|
|
39
|
+
/**
|
|
40
|
+
* Set Bot long-press duration (1-255 deciseconds)
|
|
41
|
+
*/
|
|
42
|
+
setLongPress(duration: number): Promise<boolean>;
|
|
43
|
+
/**
|
|
44
|
+
* Raise Bot arm
|
|
45
|
+
*/
|
|
46
|
+
handUp(): Promise<boolean>;
|
|
47
|
+
/**
|
|
48
|
+
* Lower Bot arm
|
|
49
|
+
*/
|
|
50
|
+
handDown(): Promise<boolean>;
|
|
51
|
+
/**
|
|
52
|
+
* Execute password-protected Bot command
|
|
53
|
+
* @param action - Bot action to perform
|
|
54
|
+
* @returns True if command was successful
|
|
55
|
+
*/
|
|
56
|
+
private executePasswordCommand;
|
|
57
|
+
/**
|
|
58
|
+
* Set or update Bot password
|
|
59
|
+
* @param password - 4-character alphanumeric password (case-sensitive)
|
|
60
|
+
*/
|
|
61
|
+
setPassword(password: string): void;
|
|
62
|
+
/**
|
|
63
|
+
* Clear Bot password
|
|
64
|
+
*/
|
|
65
|
+
clearPassword(): void;
|
|
66
|
+
/**
|
|
67
|
+
* Check if password is configured
|
|
68
|
+
*/
|
|
69
|
+
hasPassword(): boolean;
|
|
19
70
|
/**
|
|
20
71
|
* Get device status
|
|
21
72
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wo-hand.d.ts","sourceRoot":"","sources":["../../src/devices/wo-hand.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"wo-hand.d.ts","sourceRoot":"","sources":["../../src/devices/wo-hand.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AAC9C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AAC9C,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAChE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAInD,OAAO,EAAE,mCAAmC,EAAE,MAAM,8CAA8C,CAAA;AAElG;;;GAGG;AACH,qBAAa,MAAO,SAAQ,mCAAoC,YAAW,WAAW;IACpF,OAAO,CAAC,QAAQ,CAAC,CAAQ;gBAGvB,IAAI,EAAE,UAAU,EAChB,OAAO,GAAE;QACP,aAAa,CAAC,EAAE,aAAa,CAAA;QAC7B,SAAS,CAAC,EAAE,aAAa,CAAA;QACzB,cAAc,CAAC,EAAE,OAAO,CAAA;QACxB,mBAAmB,CAAC,EAAE,KAAK,GAAG,KAAK,CAAA;QACnC,4BAA4B,CAAC,EAAE,OAAO,CAAA;QACtC,oBAAoB,CAAC,EAAE,OAAO,CAAA;QAC9B,WAAW,CAAC,EAAE,OAAO,CAAA;QACrB,QAAQ,CAAC,EAAE,MAAM,CAAA;QACjB,QAAQ,CAAC,EAAE,MAAM,CAAA;KACb;IAiBR;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC;IAchC;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;IAcjC;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,OAAO,CAAC;IAc/B;;OAEG;IACG,OAAO,CAAC,IAAI,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;IAUzD;;OAEG;IACG,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAUtD;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC;IAQhC;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,OAAO,CAAC;IAQlC;;;;OAIG;YACW,sBAAsB;IAmCpC;;;OAGG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAMnC;;OAEG;IACH,aAAa,IAAI,IAAI;IAKrB;;OAEG;IACH,WAAW,IAAI,OAAO;IAItB;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,SAAS,CAAC;CAmCtC"}
|