node-switchbot 4.0.0-beta.1 → 4.0.0-beta.11
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 +29 -0
- package/dist/devices/index.d.ts.map +1 -1
- package/dist/devices/index.js +29 -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-art-frame.d.ts +8 -0
- package/dist/devices/wo-art-frame.d.ts.map +1 -0
- package/dist/devices/wo-art-frame.js +12 -0
- package/dist/devices/wo-art-frame.js.map +1 -0
- 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-circulator-fan.d.ts +8 -0
- package/dist/devices/wo-circulator-fan.d.ts.map +1 -0
- package/dist/devices/wo-circulator-fan.js +12 -0
- package/dist/devices/wo-circulator-fan.js.map +1 -0
- package/dist/devices/wo-climate-panel.d.ts +8 -0
- package/dist/devices/wo-climate-panel.d.ts.map +1 -0
- package/dist/devices/wo-climate-panel.js +12 -0
- package/dist/devices/wo-climate-panel.js.map +1 -0
- 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-floor-lamp.d.ts +8 -0
- package/dist/devices/wo-floor-lamp.d.ts.map +1 -0
- package/dist/devices/wo-floor-lamp.js +12 -0
- package/dist/devices/wo-floor-lamp.js.map +1 -0
- package/dist/devices/wo-garage-door-opener.d.ts +8 -0
- package/dist/devices/wo-garage-door-opener.d.ts.map +1 -0
- package/dist/devices/wo-garage-door-opener.js +12 -0
- package/dist/devices/wo-garage-door-opener.js.map +1 -0
- 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-hubmini-matter.d.ts +8 -0
- package/dist/devices/wo-hubmini-matter.d.ts.map +1 -0
- package/dist/devices/wo-hubmini-matter.js +12 -0
- package/dist/devices/wo-hubmini-matter.js.map +1 -0
- package/dist/devices/wo-humi2.d.ts +12 -0
- package/dist/devices/wo-humi2.d.ts.map +1 -1
- package/dist/devices/wo-humi2.js +18 -0
- package/dist/devices/wo-humi2.js.map +1 -1
- package/dist/devices/wo-keypad-vision-pro.d.ts +18 -0
- package/dist/devices/wo-keypad-vision-pro.d.ts.map +1 -0
- package/dist/devices/wo-keypad-vision-pro.js +15 -0
- package/dist/devices/wo-keypad-vision-pro.js.map +1 -0
- package/dist/devices/wo-keypad-vision.d.ts +8 -0
- package/dist/devices/wo-keypad-vision.d.ts.map +1 -0
- package/dist/devices/wo-keypad-vision.js +12 -0
- package/dist/devices/wo-keypad-vision.js.map +1 -0
- package/dist/devices/wo-lock-lite.d.ts +7 -0
- package/dist/devices/wo-lock-lite.d.ts.map +1 -0
- package/dist/devices/wo-lock-lite.js +11 -0
- package/dist/devices/wo-lock-lite.js.map +1 -0
- package/dist/devices/wo-lock-pro-wifi.d.ts +7 -0
- package/dist/devices/wo-lock-pro-wifi.d.ts.map +1 -0
- package/dist/devices/wo-lock-pro-wifi.js +11 -0
- package/dist/devices/wo-lock-pro-wifi.js.map +1 -0
- 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-vision-pro.d.ts +7 -0
- package/dist/devices/wo-lock-vision-pro.d.ts.map +1 -0
- package/dist/devices/wo-lock-vision-pro.js +11 -0
- package/dist/devices/wo-lock-vision-pro.js.map +1 -0
- package/dist/devices/wo-lock-vision.d.ts +7 -0
- package/dist/devices/wo-lock-vision.d.ts.map +1 -0
- package/dist/devices/wo-lock-vision.js +11 -0
- package/dist/devices/wo-lock-vision.js.map +1 -0
- 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/devices/wo-rgbicww-floor-lamp.d.ts +8 -0
- package/dist/devices/wo-rgbicww-floor-lamp.d.ts.map +1 -0
- package/dist/devices/wo-rgbicww-floor-lamp.js +12 -0
- package/dist/devices/wo-rgbicww-floor-lamp.js.map +1 -0
- package/dist/devices/wo-rgbicww-strip-light.d.ts +8 -0
- package/dist/devices/wo-rgbicww-strip-light.d.ts.map +1 -0
- package/dist/devices/wo-rgbicww-strip-light.js +12 -0
- package/dist/devices/wo-rgbicww-strip-light.js.map +1 -0
- package/dist/devices/wo-roller-shade.d.ts +8 -0
- package/dist/devices/wo-roller-shade.d.ts.map +1 -0
- package/dist/devices/wo-roller-shade.js +12 -0
- package/dist/devices/wo-roller-shade.js.map +1 -0
- package/dist/devices/wo-smart-thermostat-radiator.d.ts +8 -0
- package/dist/devices/wo-smart-thermostat-radiator.d.ts.map +1 -0
- package/dist/devices/wo-smart-thermostat-radiator.js +12 -0
- package/dist/devices/wo-smart-thermostat-radiator.js.map +1 -0
- package/dist/devices/wo-strip-light-3.d.ts +8 -0
- package/dist/devices/wo-strip-light-3.d.ts.map +1 -0
- package/dist/devices/wo-strip-light-3.js +12 -0
- package/dist/devices/wo-strip-light-3.js.map +1 -0
- package/dist/devices/wo-vacuum-k10-plus.d.ts +7 -0
- package/dist/devices/wo-vacuum-k10-plus.d.ts.map +1 -0
- package/dist/devices/wo-vacuum-k10-plus.js +11 -0
- package/dist/devices/wo-vacuum-k10-plus.js.map +1 -0
- package/dist/devices/wo-vacuum-k10-pro-combo.d.ts +7 -0
- package/dist/devices/wo-vacuum-k10-pro-combo.d.ts.map +1 -0
- package/dist/devices/wo-vacuum-k10-pro-combo.js +11 -0
- package/dist/devices/wo-vacuum-k10-pro-combo.js.map +1 -0
- package/dist/devices/wo-vacuum-k10-pro.d.ts +7 -0
- package/dist/devices/wo-vacuum-k10-pro.d.ts.map +1 -0
- package/dist/devices/wo-vacuum-k10-pro.js +11 -0
- package/dist/devices/wo-vacuum-k10-pro.js.map +1 -0
- package/dist/devices/wo-vacuum-k11-plus.d.ts +7 -0
- package/dist/devices/wo-vacuum-k11-plus.d.ts.map +1 -0
- package/dist/devices/wo-vacuum-k11-plus.js +11 -0
- package/dist/devices/wo-vacuum-k11-plus.js.map +1 -0
- package/dist/devices/wo-vacuum-k20.d.ts +7 -0
- package/dist/devices/wo-vacuum-k20.d.ts.map +1 -0
- package/dist/devices/wo-vacuum-k20.js +11 -0
- package/dist/devices/wo-vacuum-k20.js.map +1 -0
- package/dist/devices/wo-vacuum-s10.d.ts +7 -0
- package/dist/devices/wo-vacuum-s10.d.ts.map +1 -0
- package/dist/devices/wo-vacuum-s10.js +11 -0
- package/dist/devices/wo-vacuum-s10.js.map +1 -0
- package/dist/devices/wo-vacuum-s20.d.ts +7 -0
- package/dist/devices/wo-vacuum-s20.d.ts.map +1 -0
- package/dist/devices/wo-vacuum-s20.js +11 -0
- package/dist/devices/wo-vacuum-s20.js.map +1 -0
- package/dist/devices/wo-vacuum.d.ts +44 -0
- package/dist/devices/wo-vacuum.d.ts.map +1 -0
- package/dist/devices/wo-vacuum.js +117 -0
- package/dist/devices/wo-vacuum.js.map +1 -0
- package/dist/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/settings.d.ts +27 -0
- package/dist/settings.d.ts.map +1 -1
- package/dist/settings.js +76 -6
- package/dist/settings.js.map +1 -1
- package/dist/switchbot.d.ts.map +1 -1
- package/dist/switchbot.js +86 -9
- 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 +49 -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 +11 -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/WoArtFrame.html +71 -0
- package/docs/classes/WoBlindTilt.html +48 -20
- package/docs/classes/WoBulb.html +52 -19
- package/docs/classes/WoCeilingLight.html +52 -19
- package/docs/classes/WoCirculatorFan.html +66 -0
- package/docs/classes/WoClimatePanel.html +66 -0
- package/docs/classes/WoContact.html +42 -14
- package/docs/classes/WoCurtain.html +46 -18
- package/docs/classes/WoFloorLamp.html +71 -0
- package/docs/classes/WoGarageDoorOpener.html +64 -0
- package/docs/classes/WoHand.html +63 -19
- package/docs/classes/WoHub2.html +42 -14
- package/docs/classes/WoHub3.html +42 -14
- package/docs/classes/WoHubMiniMatter.html +56 -0
- package/docs/classes/WoHumi.html +46 -18
- package/docs/classes/WoHumi2.html +52 -18
- package/docs/classes/WoIOSensorTH.html +42 -14
- package/docs/classes/WoKeypad.html +42 -14
- package/docs/classes/WoKeypadVision.html +56 -0
- package/docs/classes/WoKeypadVisionPro.html +56 -0
- 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/WoRGBICBulb.html +82 -0
- package/docs/classes/WoRGBICWWFloorLamp.html +82 -0
- package/docs/classes/WoRGBICWWStripLight.html +82 -0
- package/docs/classes/WoRelaySwitch1.html +47 -17
- package/docs/classes/WoRelaySwitch1PM.html +47 -17
- package/docs/classes/WoRelaySwitch2PM.html +68 -0
- package/docs/classes/WoRemote.html +42 -14
- package/docs/classes/WoRollerShade.html +64 -0
- 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/WoSmartLockLite.html +64 -0
- package/docs/classes/WoSmartLockPro.html +52 -17
- package/docs/classes/WoSmartLockProWiFi.html +68 -0
- package/docs/classes/WoSmartLockVision.html +64 -0
- package/docs/classes/WoSmartLockVisionPro.html +68 -0
- package/docs/classes/WoSmartThermostatRadiator.html +66 -0
- package/docs/classes/WoStrip.html +52 -19
- package/docs/classes/WoStripLight3.html +71 -0
- package/docs/classes/WoVacuum.html +71 -0
- package/docs/classes/WoVacuumK10Plus.html +71 -0
- package/docs/classes/WoVacuumK10Pro.html +71 -0
- package/docs/classes/WoVacuumK10ProCombo.html +71 -0
- package/docs/classes/WoVacuumK11Plus.html +71 -0
- package/docs/classes/WoVacuumK20.html +71 -0
- package/docs/classes/WoVacuumS10.html +71 -0
- package/docs/classes/WoVacuumS20.html +71 -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/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/VacuumCommands.html +8 -0
- package/docs/interfaces/VacuumStatus.html +16 -0
- 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 +11 -7
- package/tmp-switchbot-scan.mjs +79 -0
- package/todo/PYSWITCHBOT_COMPARISON.md +484 -0
- package/todo/README.md +68 -0
- package/todo/completed.md +309 -0
- package/todo/todo.md +302 -0
- package/tsconfig.build.json +17 -0
- package/PRODUCTION_READY.md +0 -135
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/* Copyright(C) 2024-2026, donavanbecker (https://github.com/donavanbecker). All rights reserved.
|
|
2
|
+
*
|
|
3
|
+
* devices/wo-rgbic-bulb.ts: SwitchBot v4.0.0 - RGBIC Color Bulb with Segmented Control
|
|
4
|
+
*/
|
|
5
|
+
import { clamp } from '../utils/index.js';
|
|
6
|
+
import { WoBulb } from './wo-bulb.js';
|
|
7
|
+
/**
|
|
8
|
+
* RGBIC Bulb Device with segmented/multi-zone color control
|
|
9
|
+
* Supports individual LED segment control for addressable RGB+IC strips
|
|
10
|
+
*/
|
|
11
|
+
export class WoRGBICBulb extends WoBulb {
|
|
12
|
+
static RGBIC_EFFECTS = {
|
|
13
|
+
// Standard effects (compatible with WoBulb)
|
|
14
|
+
christmas: 0x00,
|
|
15
|
+
candle: 0x01,
|
|
16
|
+
halloween: 0x02,
|
|
17
|
+
sunset: 0x03,
|
|
18
|
+
party: 0x04,
|
|
19
|
+
reading: 0x05,
|
|
20
|
+
rainbow: 0x06,
|
|
21
|
+
forest: 0x07,
|
|
22
|
+
ocean: 0x08,
|
|
23
|
+
spring: 0x09,
|
|
24
|
+
summer: 0x0A,
|
|
25
|
+
autumn: 0x0B,
|
|
26
|
+
winter: 0x0C,
|
|
27
|
+
aurora: 0x0D,
|
|
28
|
+
meteor: 0x0E,
|
|
29
|
+
firework: 0x0F,
|
|
30
|
+
breathe: 0x10,
|
|
31
|
+
pulse: 0x11,
|
|
32
|
+
flicker: 0x12,
|
|
33
|
+
pet: 0x13,
|
|
34
|
+
// RGBIC-specific effects
|
|
35
|
+
segment_cycle: 0x20,
|
|
36
|
+
segment_wave: 0x21,
|
|
37
|
+
segment_chase: 0x22,
|
|
38
|
+
segment_strobe: 0x23,
|
|
39
|
+
segment_twinkle: 0x24,
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* Set color for individual LED segment
|
|
43
|
+
* @param segmentId - Segment identifier (0-based index)
|
|
44
|
+
* @param red - Red value (0-255)
|
|
45
|
+
* @param green - Green value (0-255)
|
|
46
|
+
* @param blue - Blue value (0-255)
|
|
47
|
+
*/
|
|
48
|
+
async setSegmentColor(segmentId, red, green, blue) {
|
|
49
|
+
const segId = clamp(segmentId, 0, 255);
|
|
50
|
+
const r = clamp(red, 0, 255);
|
|
51
|
+
const g = clamp(green, 0, 255);
|
|
52
|
+
const b = clamp(blue, 0, 255);
|
|
53
|
+
// Command format for segment color: varies by device
|
|
54
|
+
// Using extended command format: 0x57 0x0F 0x47 0x01 0x13 SEG_ID R G B
|
|
55
|
+
const bleCommand = [0x57, 0x0F, 0x47, 0x01, 0x13, segId, r, g, b];
|
|
56
|
+
const result = await this.sendCommand(bleCommand, 'setSegmentColor', `seg${segId}:${r}:${g}:${b}`);
|
|
57
|
+
return result.success;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Set effect for individual LED segment
|
|
61
|
+
* @param segmentId - Segment identifier (0-based index)
|
|
62
|
+
* @param effectName - Effect name from RGBIC_EFFECTS
|
|
63
|
+
* @param speed - Effect speed (1-100, default: 50)
|
|
64
|
+
*/
|
|
65
|
+
async setSegmentEffect(segmentId, effectName, speed = 50) {
|
|
66
|
+
const effectId = WoRGBICBulb.RGBIC_EFFECTS[effectName.toLowerCase()];
|
|
67
|
+
if (effectId === undefined) {
|
|
68
|
+
throw new Error(`Unsupported RGBIC effect: ${effectName}`);
|
|
69
|
+
}
|
|
70
|
+
const segId = clamp(segmentId, 0, 255);
|
|
71
|
+
const effectSpeed = clamp(speed, 1, 100);
|
|
72
|
+
// Command format for segment effect: 0x57 0x0F 0x47 0x01 0x14 SEG_ID EFFECT_ID SPEED
|
|
73
|
+
const bleCommand = [0x57, 0x0F, 0x47, 0x01, 0x14, segId, effectId, effectSpeed];
|
|
74
|
+
const result = await this.sendCommand(bleCommand, 'setSegmentEffect', `seg${segId}:${effectName}:${effectSpeed}`);
|
|
75
|
+
return result.success;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Get device status (inherited from WoBulb)
|
|
79
|
+
*/
|
|
80
|
+
async getStatus() {
|
|
81
|
+
return super.getStatus();
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=wo-rgbic-bulb.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wo-rgbic-bulb.js","sourceRoot":"","sources":["../../src/devices/wo-rgbic-bulb.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAErC;;;GAGG;AACH,MAAM,OAAO,WAAY,SAAQ,MAAM;IAC7B,MAAM,CAAU,aAAa,GAA2B;QAC9D,4CAA4C;QAC5C,SAAS,EAAE,IAAI;QACf,MAAM,EAAE,IAAI;QACZ,SAAS,EAAE,IAAI;QACf,MAAM,EAAE,IAAI;QACZ,KAAK,EAAE,IAAI;QACX,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,IAAI;QACb,MAAM,EAAE,IAAI;QACZ,KAAK,EAAE,IAAI;QACX,MAAM,EAAE,IAAI;QACZ,MAAM,EAAE,IAAI;QACZ,MAAM,EAAE,IAAI;QACZ,MAAM,EAAE,IAAI;QACZ,MAAM,EAAE,IAAI;QACZ,MAAM,EAAE,IAAI;QACZ,QAAQ,EAAE,IAAI;QACd,OAAO,EAAE,IAAI;QACb,KAAK,EAAE,IAAI;QACX,OAAO,EAAE,IAAI;QACb,GAAG,EAAE,IAAI;QACT,yBAAyB;QACzB,aAAa,EAAE,IAAI;QACnB,YAAY,EAAE,IAAI;QAClB,aAAa,EAAE,IAAI;QACnB,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,IAAI;KACtB,CAAA;IAED;;;;;;OAMG;IACH,KAAK,CAAC,eAAe,CAAC,SAAiB,EAAE,GAAW,EAAE,KAAa,EAAE,IAAY;QAC/E,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC,EAAE,GAAG,CAAC,CAAA;QACtC,MAAM,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,CAAA;QAC5B,MAAM,CAAC,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,CAAA;QAC9B,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,CAAA;QAE7B,qDAAqD;QACrD,uEAAuE;QACvE,MAAM,UAAU,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;QAEjE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CACnC,UAAU,EACV,iBAAiB,EACjB,MAAM,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC7B,CAAA;QACD,OAAO,MAAM,CAAC,OAAO,CAAA;IACvB,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,gBAAgB,CAAC,SAAiB,EAAE,UAAkB,EAAE,KAAK,GAAG,EAAE;QACtE,MAAM,QAAQ,GAAG,WAAW,CAAC,aAAa,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAAA;QACpE,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,6BAA6B,UAAU,EAAE,CAAC,CAAA;QAC5D,CAAC;QAED,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC,EAAE,GAAG,CAAC,CAAA;QACtC,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,CAAA;QAExC,qFAAqF;QACrF,MAAM,UAAU,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAA;QAE/E,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CACnC,UAAU,EACV,kBAAkB,EAClB,MAAM,KAAK,IAAI,UAAU,IAAI,WAAW,EAAE,CAC3C,CAAA;QACD,OAAO,MAAM,CAAC,OAAO,CAAA;IACvB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,SAAS;QACb,OAAO,KAAK,CAAC,SAAS,EAAE,CAAA;IAC1B,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { WoRGBICBulb } from './wo-rgbic-bulb.js';
|
|
2
|
+
/**
|
|
3
|
+
* RGBICWW Floor Lamp Device
|
|
4
|
+
* Uses same logic as RGBIC Bulb with segmented control
|
|
5
|
+
*/
|
|
6
|
+
export declare class WoRGBICWWFloorLamp extends WoRGBICBulb {
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=wo-rgbicww-floor-lamp.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wo-rgbicww-floor-lamp.d.ts","sourceRoot":"","sources":["../../src/devices/wo-rgbicww-floor-lamp.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAEhD;;;GAGG;AACH,qBAAa,kBAAmB,SAAQ,WAAW;CAAG"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/* Copyright(C) 2024-2026, donavanbecker (https://github.com/donavanbecker). All rights reserved.
|
|
2
|
+
*
|
|
3
|
+
* devices/wo-rgbicww-floor-lamp.ts: SwitchBot v4.0.0 - RGBICWW Floor Lamp
|
|
4
|
+
*/
|
|
5
|
+
import { WoRGBICBulb } from './wo-rgbic-bulb.js';
|
|
6
|
+
/**
|
|
7
|
+
* RGBICWW Floor Lamp Device
|
|
8
|
+
* Uses same logic as RGBIC Bulb with segmented control
|
|
9
|
+
*/
|
|
10
|
+
export class WoRGBICWWFloorLamp extends WoRGBICBulb {
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=wo-rgbicww-floor-lamp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wo-rgbicww-floor-lamp.js","sourceRoot":"","sources":["../../src/devices/wo-rgbicww-floor-lamp.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAEhD;;;GAGG;AACH,MAAM,OAAO,kBAAmB,SAAQ,WAAW;CAAG"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { WoRGBICBulb } from './wo-rgbic-bulb.js';
|
|
2
|
+
/**
|
|
3
|
+
* RGBICWW Strip Light Device
|
|
4
|
+
* Uses same logic as RGBIC Bulb with segmented control
|
|
5
|
+
*/
|
|
6
|
+
export declare class WoRGBICWWStripLight extends WoRGBICBulb {
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=wo-rgbicww-strip-light.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wo-rgbicww-strip-light.d.ts","sourceRoot":"","sources":["../../src/devices/wo-rgbicww-strip-light.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAEhD;;;GAGG;AACH,qBAAa,mBAAoB,SAAQ,WAAW;CAAG"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/* Copyright(C) 2024-2026, donavanbecker (https://github.com/donavanbecker). All rights reserved.
|
|
2
|
+
*
|
|
3
|
+
* devices/wo-rgbicww-strip-light.ts: SwitchBot v4.0.0 - RGBICWW Strip Light
|
|
4
|
+
*/
|
|
5
|
+
import { WoRGBICBulb } from './wo-rgbic-bulb.js';
|
|
6
|
+
/**
|
|
7
|
+
* RGBICWW Strip Light Device
|
|
8
|
+
* Uses same logic as RGBIC Bulb with segmented control
|
|
9
|
+
*/
|
|
10
|
+
export class WoRGBICWWStripLight extends WoRGBICBulb {
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=wo-rgbicww-strip-light.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wo-rgbicww-strip-light.js","sourceRoot":"","sources":["../../src/devices/wo-rgbicww-strip-light.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAEhD;;;GAGG;AACH,MAAM,OAAO,mBAAoB,SAAQ,WAAW;CAAG"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wo-roller-shade.d.ts","sourceRoot":"","sources":["../../src/devices/wo-roller-shade.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAE3C;;;GAGG;AACH,qBAAa,aAAc,SAAQ,SAAS;CAAG"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/* Copyright(C) 2024-2026, donavanbecker (https://github.com/donavanbecker). All rights reserved.
|
|
2
|
+
*
|
|
3
|
+
* devices/wo-roller-shade.ts: SwitchBot v4.0.0 - Roller Shade
|
|
4
|
+
*/
|
|
5
|
+
import { WoCurtain } from './wo-curtain.js';
|
|
6
|
+
/**
|
|
7
|
+
* Roller Shade Device
|
|
8
|
+
* Uses same logic as Curtain (motorized window covering)
|
|
9
|
+
*/
|
|
10
|
+
export class WoRollerShade extends WoCurtain {
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=wo-roller-shade.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wo-roller-shade.js","sourceRoot":"","sources":["../../src/devices/wo-roller-shade.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAE3C;;;GAGG;AACH,MAAM,OAAO,aAAc,SAAQ,SAAS;CAAG"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { WoAirPurifier } from './wo-air-purifier.js';
|
|
2
|
+
/**
|
|
3
|
+
* Smart Thermostat Radiator Device
|
|
4
|
+
* Reuses climate control behavior for power, mode, and speed-level style control.
|
|
5
|
+
*/
|
|
6
|
+
export declare class WoSmartThermostatRadiator extends WoAirPurifier {
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=wo-smart-thermostat-radiator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wo-smart-thermostat-radiator.d.ts","sourceRoot":"","sources":["../../src/devices/wo-smart-thermostat-radiator.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AAEpD;;;GAGG;AACH,qBAAa,yBAA0B,SAAQ,aAAa;CAAG"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/* Copyright(C) 2024-2026, donavanbecker (https://github.com/donavanbecker). All rights reserved.
|
|
2
|
+
*
|
|
3
|
+
* devices/wo-smart-thermostat-radiator.ts: SwitchBot v4.0.0 - Smart Thermostat Radiator Device
|
|
4
|
+
*/
|
|
5
|
+
import { WoAirPurifier } from './wo-air-purifier.js';
|
|
6
|
+
/**
|
|
7
|
+
* Smart Thermostat Radiator Device
|
|
8
|
+
* Reuses climate control behavior for power, mode, and speed-level style control.
|
|
9
|
+
*/
|
|
10
|
+
export class WoSmartThermostatRadiator extends WoAirPurifier {
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=wo-smart-thermostat-radiator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wo-smart-thermostat-radiator.js","sourceRoot":"","sources":["../../src/devices/wo-smart-thermostat-radiator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AAEpD;;;GAGG;AACH,MAAM,OAAO,yBAA0B,SAAQ,aAAa;CAAG"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wo-strip-light-3.d.ts","sourceRoot":"","sources":["../../src/devices/wo-strip-light-3.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAErC;;;GAGG;AACH,qBAAa,aAAc,SAAQ,MAAM;CAAG"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/* Copyright(C) 2024-2026, donavanbecker (https://github.com/donavanbecker). All rights reserved.
|
|
2
|
+
*
|
|
3
|
+
* devices/wo-strip-light-3.ts: SwitchBot v4.0.0 - Strip Light 3
|
|
4
|
+
*/
|
|
5
|
+
import { WoBulb } from './wo-bulb.js';
|
|
6
|
+
/**
|
|
7
|
+
* Strip Light 3 Device
|
|
8
|
+
* Uses same logic as Color Bulb
|
|
9
|
+
*/
|
|
10
|
+
export class WoStripLight3 extends WoBulb {
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=wo-strip-light-3.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wo-strip-light-3.js","sourceRoot":"","sources":["../../src/devices/wo-strip-light-3.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAErC;;;GAGG;AACH,MAAM,OAAO,aAAc,SAAQ,MAAM;CAAG"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wo-vacuum-k10-plus.d.ts","sourceRoot":"","sources":["../../src/devices/wo-vacuum-k10-plus.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAEzC;;GAEG;AACH,qBAAa,eAAgB,SAAQ,QAAQ;CAAG"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/* Copyright(C) 2024-2026, donavanbecker (https://github.com/donavanbecker). All rights reserved.
|
|
2
|
+
*
|
|
3
|
+
* devices/wo-vacuum-k10-plus.ts: SwitchBot v4.0.0 - K10+ Vacuum Device
|
|
4
|
+
*/
|
|
5
|
+
import { WoVacuum } from './wo-vacuum.js';
|
|
6
|
+
/**
|
|
7
|
+
* Robot Vacuum Cleaner K10+
|
|
8
|
+
*/
|
|
9
|
+
export class WoVacuumK10Plus extends WoVacuum {
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=wo-vacuum-k10-plus.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wo-vacuum-k10-plus.js","sourceRoot":"","sources":["../../src/devices/wo-vacuum-k10-plus.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAEzC;;GAEG;AACH,MAAM,OAAO,eAAgB,SAAQ,QAAQ;CAAG"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wo-vacuum-k10-pro-combo.d.ts","sourceRoot":"","sources":["../../src/devices/wo-vacuum-k10-pro-combo.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAEzC;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,QAAQ;CAAG"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/* Copyright(C) 2024-2026, donavanbecker (https://github.com/donavanbecker). All rights reserved.
|
|
2
|
+
*
|
|
3
|
+
* devices/wo-vacuum-k10-pro-combo.ts: SwitchBot v4.0.0 - K10+ Pro Combo Vacuum Device
|
|
4
|
+
*/
|
|
5
|
+
import { WoVacuum } from './wo-vacuum.js';
|
|
6
|
+
/**
|
|
7
|
+
* Robot Vacuum Cleaner K10+ Pro Combo
|
|
8
|
+
*/
|
|
9
|
+
export class WoVacuumK10ProCombo extends WoVacuum {
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=wo-vacuum-k10-pro-combo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wo-vacuum-k10-pro-combo.js","sourceRoot":"","sources":["../../src/devices/wo-vacuum-k10-pro-combo.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAEzC;;GAEG;AACH,MAAM,OAAO,mBAAoB,SAAQ,QAAQ;CAAG"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wo-vacuum-k10-pro.d.ts","sourceRoot":"","sources":["../../src/devices/wo-vacuum-k10-pro.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAEzC;;GAEG;AACH,qBAAa,cAAe,SAAQ,QAAQ;CAAG"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/* Copyright(C) 2024-2026, donavanbecker (https://github.com/donavanbecker). All rights reserved.
|
|
2
|
+
*
|
|
3
|
+
* devices/wo-vacuum-k10-pro.ts: SwitchBot v4.0.0 - K10+ Pro Vacuum Device
|
|
4
|
+
*/
|
|
5
|
+
import { WoVacuum } from './wo-vacuum.js';
|
|
6
|
+
/**
|
|
7
|
+
* Robot Vacuum Cleaner K10+ Pro
|
|
8
|
+
*/
|
|
9
|
+
export class WoVacuumK10Pro extends WoVacuum {
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=wo-vacuum-k10-pro.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wo-vacuum-k10-pro.js","sourceRoot":"","sources":["../../src/devices/wo-vacuum-k10-pro.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAEzC;;GAEG;AACH,MAAM,OAAO,cAAe,SAAQ,QAAQ;CAAG"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wo-vacuum-k11-plus.d.ts","sourceRoot":"","sources":["../../src/devices/wo-vacuum-k11-plus.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAEzC;;GAEG;AACH,qBAAa,eAAgB,SAAQ,QAAQ;CAAG"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/* Copyright(C) 2024-2026, donavanbecker (https://github.com/donavanbecker). All rights reserved.
|
|
2
|
+
*
|
|
3
|
+
* devices/wo-vacuum-k11-plus.ts: SwitchBot v4.0.0 - K11+ Vacuum Device
|
|
4
|
+
*/
|
|
5
|
+
import { WoVacuum } from './wo-vacuum.js';
|
|
6
|
+
/**
|
|
7
|
+
* Robot Vacuum Cleaner K11+
|
|
8
|
+
*/
|
|
9
|
+
export class WoVacuumK11Plus extends WoVacuum {
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=wo-vacuum-k11-plus.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wo-vacuum-k11-plus.js","sourceRoot":"","sources":["../../src/devices/wo-vacuum-k11-plus.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAEzC;;GAEG;AACH,MAAM,OAAO,eAAgB,SAAQ,QAAQ;CAAG"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wo-vacuum-k20.d.ts","sourceRoot":"","sources":["../../src/devices/wo-vacuum-k20.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAEzC;;GAEG;AACH,qBAAa,WAAY,SAAQ,QAAQ;CAAG"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/* Copyright(C) 2024-2026, donavanbecker (https://github.com/donavanbecker). All rights reserved.
|
|
2
|
+
*
|
|
3
|
+
* devices/wo-vacuum-k20.ts: SwitchBot v4.0.0 - K20 Vacuum Device
|
|
4
|
+
*/
|
|
5
|
+
import { WoVacuum } from './wo-vacuum.js';
|
|
6
|
+
/**
|
|
7
|
+
* Robot Vacuum Cleaner K20
|
|
8
|
+
*/
|
|
9
|
+
export class WoVacuumK20 extends WoVacuum {
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=wo-vacuum-k20.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wo-vacuum-k20.js","sourceRoot":"","sources":["../../src/devices/wo-vacuum-k20.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAEzC;;GAEG;AACH,MAAM,OAAO,WAAY,SAAQ,QAAQ;CAAG"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wo-vacuum-s10.d.ts","sourceRoot":"","sources":["../../src/devices/wo-vacuum-s10.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAEzC;;GAEG;AACH,qBAAa,WAAY,SAAQ,QAAQ;CAAG"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/* Copyright(C) 2024-2026, donavanbecker (https://github.com/donavanbecker). All rights reserved.
|
|
2
|
+
*
|
|
3
|
+
* devices/wo-vacuum-s10.ts: SwitchBot v4.0.0 - S10 Vacuum Device
|
|
4
|
+
*/
|
|
5
|
+
import { WoVacuum } from './wo-vacuum.js';
|
|
6
|
+
/**
|
|
7
|
+
* Robot Vacuum Cleaner S10
|
|
8
|
+
*/
|
|
9
|
+
export class WoVacuumS10 extends WoVacuum {
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=wo-vacuum-s10.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wo-vacuum-s10.js","sourceRoot":"","sources":["../../src/devices/wo-vacuum-s10.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAEzC;;GAEG;AACH,MAAM,OAAO,WAAY,SAAQ,QAAQ;CAAG"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wo-vacuum-s20.d.ts","sourceRoot":"","sources":["../../src/devices/wo-vacuum-s20.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAEzC;;GAEG;AACH,qBAAa,WAAY,SAAQ,QAAQ;CAAG"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/* Copyright(C) 2024-2026, donavanbecker (https://github.com/donavanbecker). All rights reserved.
|
|
2
|
+
*
|
|
3
|
+
* devices/wo-vacuum-s20.ts: SwitchBot v4.0.0 - S20 Vacuum Device
|
|
4
|
+
*/
|
|
5
|
+
import { WoVacuum } from './wo-vacuum.js';
|
|
6
|
+
/**
|
|
7
|
+
* Robot Vacuum Cleaner S20
|
|
8
|
+
*/
|
|
9
|
+
export class WoVacuumS20 extends WoVacuum {
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=wo-vacuum-s20.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wo-vacuum-s20.js","sourceRoot":"","sources":["../../src/devices/wo-vacuum-s20.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAEzC;;GAEG;AACH,MAAM,OAAO,WAAY,SAAQ,QAAQ;CAAG"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { VacuumCommands, VacuumStatus } from '../types/device.js';
|
|
2
|
+
import { SequenceDevice } from './sequence-device.js';
|
|
3
|
+
/**
|
|
4
|
+
* Vacuum Device
|
|
5
|
+
*/
|
|
6
|
+
export declare class WoVacuum extends SequenceDevice implements VacuumCommands {
|
|
7
|
+
/**
|
|
8
|
+
* Start cleaning
|
|
9
|
+
*/
|
|
10
|
+
cleanUp(protocolVersion: number): Promise<boolean>;
|
|
11
|
+
/**
|
|
12
|
+
* Return to dock
|
|
13
|
+
*/
|
|
14
|
+
returnToDock(protocolVersion: number): Promise<boolean>;
|
|
15
|
+
/**
|
|
16
|
+
* Return advertised battery value
|
|
17
|
+
*/
|
|
18
|
+
getBattery(): number | undefined;
|
|
19
|
+
/**
|
|
20
|
+
* Return advertised work status value
|
|
21
|
+
*/
|
|
22
|
+
getWorkStatus(): number | undefined;
|
|
23
|
+
/**
|
|
24
|
+
* Return advertised dustbin bound state
|
|
25
|
+
*/
|
|
26
|
+
getDustbinBoundStatus(): boolean | undefined;
|
|
27
|
+
/**
|
|
28
|
+
* Return advertised dustbin connected state
|
|
29
|
+
*/
|
|
30
|
+
getDustbinConnectedStatus(): boolean | undefined;
|
|
31
|
+
/**
|
|
32
|
+
* Return advertised network connected state
|
|
33
|
+
*/
|
|
34
|
+
getNetworkConnectedStatus(): boolean | undefined;
|
|
35
|
+
/**
|
|
36
|
+
* Get device status
|
|
37
|
+
*/
|
|
38
|
+
getStatus(): Promise<VacuumStatus>;
|
|
39
|
+
private getCommandForProtocol;
|
|
40
|
+
private getAdvertisementStatusData;
|
|
41
|
+
private asNumber;
|
|
42
|
+
private asBoolean;
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=wo-vacuum.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wo-vacuum.d.ts","sourceRoot":"","sources":["../../src/devices/wo-vacuum.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAGtE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAErD;;GAEG;AACH,qBAAa,QAAS,SAAQ,cAAe,YAAW,cAAc;IACpE;;OAEG;IACG,OAAO,CAAC,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAMxD;;OAEG;IACG,YAAY,CAAC,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAM7D;;OAEG;IACH,UAAU,IAAI,MAAM,GAAG,SAAS;IAKhC;;OAEG;IACH,aAAa,IAAI,MAAM,GAAG,SAAS;IAKnC;;OAEG;IACH,qBAAqB,IAAI,OAAO,GAAG,SAAS;IAK5C;;OAEG;IACH,yBAAyB,IAAI,OAAO,GAAG,SAAS;IAKhD;;OAEG;IACH,yBAAyB,IAAI,OAAO,GAAG,SAAS;IAKhD;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,YAAY,CAAC;IAsCxC,OAAO,CAAC,qBAAqB;IAW7B,OAAO,CAAC,0BAA0B;IAIlC,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,SAAS;CAGlB"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
/* Copyright(C) 2024-2026, donavanbecker (https://github.com/donavanbecker). All rights reserved.
|
|
2
|
+
*
|
|
3
|
+
* devices/wo-vacuum.ts: SwitchBot v4.0.0 - Vacuum Device
|
|
4
|
+
*/
|
|
5
|
+
import { DEVICE_COMMANDS } from '../settings.js';
|
|
6
|
+
import { SequenceDevice } from './sequence-device.js';
|
|
7
|
+
/**
|
|
8
|
+
* Vacuum Device
|
|
9
|
+
*/
|
|
10
|
+
export class WoVacuum extends SequenceDevice {
|
|
11
|
+
/**
|
|
12
|
+
* Start cleaning
|
|
13
|
+
*/
|
|
14
|
+
async cleanUp(protocolVersion) {
|
|
15
|
+
const command = this.getCommandForProtocol(DEVICE_COMMANDS.VACUUM.CLEAN_UP, protocolVersion);
|
|
16
|
+
const result = await this.sendCommand(command, 'start', { protocolVersion });
|
|
17
|
+
return result.success;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Return to dock
|
|
21
|
+
*/
|
|
22
|
+
async returnToDock(protocolVersion) {
|
|
23
|
+
const command = this.getCommandForProtocol(DEVICE_COMMANDS.VACUUM.RETURN_TO_DOCK, protocolVersion);
|
|
24
|
+
const result = await this.sendCommand(command, 'dock', { protocolVersion });
|
|
25
|
+
return result.success;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Return advertised battery value
|
|
29
|
+
*/
|
|
30
|
+
getBattery() {
|
|
31
|
+
const data = this.getAdvertisementStatusData();
|
|
32
|
+
return this.asNumber(data.battery);
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Return advertised work status value
|
|
36
|
+
*/
|
|
37
|
+
getWorkStatus() {
|
|
38
|
+
const data = this.getAdvertisementStatusData();
|
|
39
|
+
return this.asNumber(data.workStatus ?? data.work_status);
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Return advertised dustbin bound state
|
|
43
|
+
*/
|
|
44
|
+
getDustbinBoundStatus() {
|
|
45
|
+
const data = this.getAdvertisementStatusData();
|
|
46
|
+
return this.asBoolean(data.dustbinBound ?? data.dustbin_bound);
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Return advertised dustbin connected state
|
|
50
|
+
*/
|
|
51
|
+
getDustbinConnectedStatus() {
|
|
52
|
+
const data = this.getAdvertisementStatusData();
|
|
53
|
+
return this.asBoolean(data.dustbinConnected ?? data.dusbin_connected);
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Return advertised network connected state
|
|
57
|
+
*/
|
|
58
|
+
getNetworkConnectedStatus() {
|
|
59
|
+
const data = this.getAdvertisementStatusData();
|
|
60
|
+
return this.asBoolean(data.networkConnected ?? data.network_connected);
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Get device status
|
|
64
|
+
*/
|
|
65
|
+
async getStatus() {
|
|
66
|
+
try {
|
|
67
|
+
if (this.hasAPI()) {
|
|
68
|
+
const apiStatus = await this.getAPIStatus();
|
|
69
|
+
return {
|
|
70
|
+
deviceId: this.info.id,
|
|
71
|
+
connectionType: 'api',
|
|
72
|
+
battery: apiStatus.battery,
|
|
73
|
+
workStatus: apiStatus.workStatus ?? apiStatus.work_status,
|
|
74
|
+
dustbinBound: apiStatus.dustbinBound ?? apiStatus.dustbin_bound,
|
|
75
|
+
dustbinConnected: apiStatus.dustbinConnected ?? apiStatus.dusbin_connected,
|
|
76
|
+
networkConnected: apiStatus.networkConnected ?? apiStatus.network_connected,
|
|
77
|
+
version: apiStatus.version,
|
|
78
|
+
updatedAt: new Date(),
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
if (this.hasBLE()) {
|
|
82
|
+
const bleData = await this.getBLEStatus().catch(() => this.normalizeBLEStatusData(undefined));
|
|
83
|
+
return {
|
|
84
|
+
deviceId: this.info.id,
|
|
85
|
+
connectionType: 'ble',
|
|
86
|
+
battery: this.asNumber(bleData.battery),
|
|
87
|
+
workStatus: this.asNumber(bleData.workStatus ?? bleData.work_status),
|
|
88
|
+
dustbinBound: this.asBoolean(bleData.dustbinBound ?? bleData.dustbin_bound),
|
|
89
|
+
dustbinConnected: this.asBoolean(bleData.dustbinConnected ?? bleData.dusbin_connected),
|
|
90
|
+
networkConnected: this.asBoolean(bleData.networkConnected ?? bleData.network_connected),
|
|
91
|
+
updatedAt: new Date(),
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
throw new Error('No connection method available');
|
|
95
|
+
}
|
|
96
|
+
catch (error) {
|
|
97
|
+
this.logger.error('Failed to get status', error);
|
|
98
|
+
throw error;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
getCommandForProtocol(commands, protocolVersion) {
|
|
102
|
+
if (protocolVersion !== 1 && protocolVersion !== 2) {
|
|
103
|
+
throw new Error(`Unsupported vacuum protocol version: ${protocolVersion}`);
|
|
104
|
+
}
|
|
105
|
+
return commands[protocolVersion];
|
|
106
|
+
}
|
|
107
|
+
getAdvertisementStatusData() {
|
|
108
|
+
return this.normalizeBLEStatusData(undefined);
|
|
109
|
+
}
|
|
110
|
+
asNumber(value) {
|
|
111
|
+
return typeof value === 'number' ? value : undefined;
|
|
112
|
+
}
|
|
113
|
+
asBoolean(value) {
|
|
114
|
+
return typeof value === 'boolean' ? value : undefined;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=wo-vacuum.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wo-vacuum.js","sourceRoot":"","sources":["../../src/devices/wo-vacuum.ts"],"names":[],"mappings":"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"}
|