node-switchbot 4.0.0-beta.10 → 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/dist/devices/index.d.ts +25 -0
- package/dist/devices/index.d.ts.map +1 -1
- package/dist/devices/index.js +25 -0
- package/dist/devices/index.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-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-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-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-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-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 +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/settings.d.ts +10 -0
- package/dist/settings.d.ts.map +1 -1
- package/dist/settings.js +58 -5
- package/dist/settings.js.map +1 -1
- package/dist/switchbot.d.ts.map +1 -1
- package/dist/switchbot.js +55 -1
- package/dist/switchbot.js.map +1 -1
- package/dist/types/device.d.ts +19 -0
- package/dist/types/device.d.ts.map +1 -1
- package/docs/assets/hierarchy.js +1 -1
- package/docs/assets/navigation.js +1 -1
- package/docs/assets/search.js +1 -1
- package/docs/classes/APIError.html +2 -2
- package/docs/classes/APINotAvailableError.html +2 -2
- package/docs/classes/BLEConnection.html +9 -9
- package/docs/classes/BLENotAvailableError.html +2 -2
- package/docs/classes/BLEScanner.html +9 -9
- package/docs/classes/CommandFailedError.html +2 -2
- package/docs/classes/ConnectionTimeoutError.html +2 -2
- package/docs/classes/DeviceManager.html +13 -13
- package/docs/classes/DeviceNotFoundError.html +2 -2
- package/docs/classes/DeviceOverrideStateDuringConnection.html +28 -28
- package/docs/classes/DiscoveryError.html +2 -2
- package/docs/classes/OpenAPIClient.html +24 -24
- package/docs/classes/SequenceDevice.html +29 -29
- package/docs/classes/SwitchBot.html +11 -11
- package/docs/classes/SwitchBotDevice.html +28 -28
- package/docs/classes/SwitchBotError.html +2 -2
- package/docs/classes/ValidationError.html +2 -2
- package/docs/classes/WoAirPurifier.html +33 -33
- package/docs/classes/WoAirPurifierTable.html +33 -33
- package/docs/classes/WoArtFrame.html +71 -0
- package/docs/classes/WoBlindTilt.html +34 -34
- package/docs/classes/WoBulb.html +35 -35
- package/docs/classes/WoCeilingLight.html +35 -35
- package/docs/classes/WoCirculatorFan.html +66 -0
- package/docs/classes/WoClimatePanel.html +66 -0
- package/docs/classes/WoContact.html +28 -28
- package/docs/classes/WoCurtain.html +32 -32
- package/docs/classes/WoFloorLamp.html +71 -0
- package/docs/classes/WoGarageDoorOpener.html +64 -0
- package/docs/classes/WoHand.html +38 -38
- package/docs/classes/WoHub2.html +28 -28
- package/docs/classes/WoHub3.html +28 -28
- package/docs/classes/WoHubMiniMatter.html +56 -0
- package/docs/classes/WoHumi.html +32 -32
- package/docs/classes/WoHumi2.html +38 -32
- package/docs/classes/WoIOSensorTH.html +28 -28
- package/docs/classes/WoKeypad.html +28 -28
- package/docs/classes/WoKeypadVision.html +56 -0
- package/docs/classes/WoKeypadVisionPro.html +56 -0
- package/docs/classes/WoLeak.html +28 -28
- package/docs/classes/WoPlugMiniJP.html +31 -31
- package/docs/classes/WoPlugMiniUS.html +31 -31
- package/docs/classes/WoPresence.html +28 -28
- package/docs/classes/WoRGBICBulb.html +82 -0
- package/docs/classes/WoRGBICWWFloorLamp.html +82 -0
- package/docs/classes/WoRGBICWWStripLight.html +82 -0
- package/docs/classes/WoRelaySwitch1.html +32 -32
- package/docs/classes/WoRelaySwitch1PM.html +32 -32
- package/docs/classes/WoRelaySwitch2PM.html +68 -0
- package/docs/classes/WoRemote.html +28 -28
- package/docs/classes/WoRollerShade.html +64 -0
- package/docs/classes/WoSensorTH.html +28 -28
- package/docs/classes/WoSensorTHPlus.html +28 -28
- package/docs/classes/WoSensorTHPro.html +28 -28
- package/docs/classes/WoSensorTHProCO2.html +28 -28
- package/docs/classes/WoSmartLock.html +31 -31
- package/docs/classes/WoSmartLockLite.html +64 -0
- package/docs/classes/WoSmartLockPro.html +33 -33
- 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 +35 -35
- 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/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 +14 -14
- package/docs/interfaces/AirPurifierStatus.html +7 -7
- package/docs/interfaces/BLEAdvertisement.html +2 -2
- package/docs/interfaces/BLEScanOptions.html +5 -5
- package/docs/interfaces/BLEServiceData.html +14 -14
- package/docs/interfaces/BlindTiltCommands.html +2 -2
- package/docs/interfaces/BlindTiltServiceData.html +14 -14
- package/docs/interfaces/BlindTiltStatus.html +6 -6
- package/docs/interfaces/BotCommands.html +2 -2
- package/docs/interfaces/BotServiceData.html +14 -14
- package/docs/interfaces/BotStatus.html +6 -6
- package/docs/interfaces/BulbCommands.html +2 -2
- package/docs/interfaces/BulbServiceData.html +14 -14
- package/docs/interfaces/BulbStatus.html +6 -6
- package/docs/interfaces/CeilingLightCommands.html +2 -2
- package/docs/interfaces/CeilingLightServiceData.html +14 -14
- package/docs/interfaces/CeilingLightStatus.html +6 -6
- package/docs/interfaces/CommandResult.html +6 -6
- package/docs/interfaces/ContactServiceData.html +14 -14
- package/docs/interfaces/ContactStatus.html +6 -6
- package/docs/interfaces/CurtainCommands.html +2 -2
- package/docs/interfaces/CurtainServiceData.html +14 -14
- package/docs/interfaces/CurtainStatus.html +6 -6
- package/docs/interfaces/DeviceInfo.html +18 -18
- package/docs/interfaces/DeviceListResponse.html +2 -2
- package/docs/interfaces/DeviceStatus.html +6 -6
- package/docs/interfaces/DiscoveryOptions.html +7 -7
- package/docs/interfaces/HubServiceData.html +14 -14
- package/docs/interfaces/HubStatus.html +6 -6
- package/docs/interfaces/HumidifierCommands.html +2 -2
- package/docs/interfaces/HumidifierServiceData.html +15 -15
- package/docs/interfaces/HumidifierStatus.html +6 -6
- package/docs/interfaces/KeypadStatus.html +6 -6
- package/docs/interfaces/LeakServiceData.html +14 -14
- package/docs/interfaces/LeakStatus.html +6 -6
- package/docs/interfaces/LockCommands.html +2 -2
- package/docs/interfaces/LockServiceData.html +15 -15
- package/docs/interfaces/LockStatus.html +6 -6
- package/docs/interfaces/MeterServiceData.html +14 -14
- package/docs/interfaces/MeterStatus.html +6 -6
- package/docs/interfaces/MotionServiceData.html +14 -14
- package/docs/interfaces/MotionStatus.html +6 -6
- package/docs/interfaces/PlugCommands.html +2 -2
- package/docs/interfaces/PlugServiceData.html +14 -14
- package/docs/interfaces/PlugStatus.html +6 -6
- package/docs/interfaces/PresenceServiceData.html +14 -14
- package/docs/interfaces/PresenceStatus.html +6 -6
- package/docs/interfaces/RelaySwitchCommands.html +2 -2
- package/docs/interfaces/RelaySwitchServiceData.html +14 -14
- package/docs/interfaces/RelaySwitchStatus.html +6 -6
- package/docs/interfaces/RemoteStatus.html +6 -6
- package/docs/interfaces/SceneListResponse.html +2 -2
- package/docs/interfaces/StripCommands.html +2 -2
- package/docs/interfaces/StripServiceData.html +14 -14
- package/docs/interfaces/StripStatus.html +6 -6
- package/docs/interfaces/SwitchBotConfig.html +15 -15
- package/docs/interfaces/VacuumCommands.html +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/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 +3 -3
- package/todo/PYSWITCHBOT_COMPARISON.md +52 -52
- package/todo/completed.md +175 -0
- package/todo/todo.md +38 -32
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
<!DOCTYPE html><html class="default" lang="en" data-base="../"><head><meta charset="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>ConnectionType | node-switchbot</title><meta name="description" content="Documentation for node-switchbot"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async src="../assets/icons.js" id="tsd-icons-script"></script><script async src="../assets/search.js" id="tsd-search-script"></script><script async src="../assets/navigation.js" id="tsd-nav-script"></script><script async src="../assets/hierarchy.js" id="tsd-hierarchy-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os";document.body.style.display="none";setTimeout(() => window.app?app.showPage():document.body.style.removeProperty("display"),500)</script><header class="tsd-page-toolbar"><div class="tsd-toolbar-contents container"><a href="../index.html" class="title">node-switchbot</a><div id="tsd-toolbar-links"></div><button id="tsd-search-trigger" class="tsd-widget" aria-label="Search"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-search"></use></svg></button><dialog id="tsd-search" aria-label="Search"><input role="combobox" id="tsd-search-input" aria-controls="tsd-search-results" aria-autocomplete="list" aria-expanded="true" autocapitalize="off" autocomplete="off" placeholder="Search the docs" maxLength="100"/><ul role="listbox" id="tsd-search-results"></ul><div id="tsd-search-status" aria-live="polite" aria-atomic="true"><div>Preparing search index...</div></div></dialog><a href="#" class="tsd-widget menu" id="tsd-toolbar-menu-trigger" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-menu"></use></svg></a></div></header><div class="container container-main"><div class="col-content"><div class="tsd-page-title"><ul class="tsd-breadcrumb" aria-label="Breadcrumb"><li><a href="" aria-current="page">ConnectionType</a></li></ul><h1>Type Alias ConnectionType</h1></div><div class="tsd-signature"><span class="tsd-kind-type-alias">ConnectionType</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">"ble"</span> <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">"api"</span> <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">"hybrid"</span></div><div class="tsd-comment tsd-typography"><p>Device connection type</p>
|
|
2
|
-
</div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/OpenWonderLabs/node-switchbot/blob/
|
|
2
|
+
</div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/OpenWonderLabs/node-switchbot/blob/4d519c7abbc4fb4e44f9ae1b58c53b18a14df244/src/types/index.ts#L20">types/index.ts:20</a></li></ul></aside></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-accordion"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg><h3>Settings</h3></summary><div class="tsd-accordion-details"><div class="tsd-filter-visibility"><span class="settings-label">Member Visibility</span><ul id="tsd-filter-options"><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li></ul></div><div class="tsd-theme-toggle"><label class="settings-label" for="tsd-theme">Theme</label><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div></div><div class="site-menu"><nav class="tsd-navigation"><a href="../modules.html">node-switchbot</a><ul class="tsd-small-nested-navigation" id="tsd-nav-container"><li>Loading...</li></ul></nav></div></div></div><footer></footer><div class="overlay"></div></body></html>
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
<!DOCTYPE html><html class="default" lang="en" data-base="../"><head><meta charset="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>PhysicalDeviceType | node-switchbot</title><meta name="description" content="Documentation for node-switchbot"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async src="../assets/icons.js" id="tsd-icons-script"></script><script async src="../assets/search.js" id="tsd-search-script"></script><script async src="../assets/navigation.js" id="tsd-nav-script"></script><script async src="../assets/hierarchy.js" id="tsd-hierarchy-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os";document.body.style.display="none";setTimeout(() => window.app?app.showPage():document.body.style.removeProperty("display"),500)</script><header class="tsd-page-toolbar"><div class="tsd-toolbar-contents container"><a href="../index.html" class="title">node-switchbot</a><div id="tsd-toolbar-links"></div><button id="tsd-search-trigger" class="tsd-widget" aria-label="Search"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-search"></use></svg></button><dialog id="tsd-search" aria-label="Search"><input role="combobox" id="tsd-search-input" aria-controls="tsd-search-results" aria-autocomplete="list" aria-expanded="true" autocapitalize="off" autocomplete="off" placeholder="Search the docs" maxLength="100"/><ul role="listbox" id="tsd-search-results"></ul><div id="tsd-search-status" aria-live="polite" aria-atomic="true"><div>Preparing search index...</div></div></dialog><a href="#" class="tsd-widget menu" id="tsd-toolbar-menu-trigger" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-menu"></use></svg></a></div></header><div class="container container-main"><div class="col-content"><div class="tsd-page-title"><ul class="tsd-breadcrumb" aria-label="Breadcrumb"><li><a href="" aria-current="page">PhysicalDeviceType</a></li></ul><h1>Type Alias PhysicalDeviceType</h1></div><div class="tsd-signature"><span class="tsd-kind-type-alias">PhysicalDeviceType</span><span class="tsd-signature-symbol">:</span><br/> <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">"Bot"</span><br/> <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">"Curtain"</span><br/> <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">"Curtain3"</span><br/> <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">"Plug"</span><br/> <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">"Plug Mini (US)"</span><br/> <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">"Plug Mini (JP)"</span><br/> <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">"Meter"</span><br/> <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">"Meter Plus"</span><br/> <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">"Meter Pro"</span><br/> <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">"Meter Pro (CO2)"</span><br/> <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">"Outdoor Meter"</span><br/> <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">"Lock"</span><br/> <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">"Lock Pro"</span><br/> <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">"Keypad"</span><br/> <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">"Keypad Touch"</span><br/> <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">"Motion Sensor"</span><br/> <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">"Contact Sensor"</span><br/> <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">"Ceiling Light"</span><br/> <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">"Ceiling Light Pro"</span><br/> <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">"Strip Light"</span><br/> <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">"Color Bulb"</span><br/> <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">"Robot Vacuum Cleaner S1"</span><br/> <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">"Robot Vacuum Cleaner S1 Plus"</span><br/> <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">"Robot Vacuum Cleaner K10 Plus"</span><br/> <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">"Humidifier"</span><br/> <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">"Humidifier 2"</span><br/> <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">"Blind Tilt"</span><br/> <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">"Hub 2"</span><br/> <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">"Hub Mini"</span><br/> <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">"Hub Plus"</span><br/> <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">"Remote"</span><br/> <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">"Battery Circulator Fan"</span><br/> <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">"Air Purifier"</span><br/> <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">"Air Purifier Table"</span><br/> <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">"Water Leak Detector"</span><br/> <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">"Presence Sensor"</span><br/> <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">"Relay Switch 1PM"</span><br/> <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">"Relay Switch 1"</span><br/> <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">"K10+ Pro Combo"</span></div><div class="tsd-comment tsd-typography"><p>Physical device types supported by OpenAPI</p>
|
|
2
|
-
</div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/OpenWonderLabs/node-switchbot/blob/
|
|
2
|
+
</div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/OpenWonderLabs/node-switchbot/blob/4d519c7abbc4fb4e44f9ae1b58c53b18a14df244/src/types/api.ts#L213">types/api.ts:213</a></li></ul></aside></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-accordion"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg><h3>Settings</h3></summary><div class="tsd-accordion-details"><div class="tsd-filter-visibility"><span class="settings-label">Member Visibility</span><ul id="tsd-filter-options"><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li></ul></div><div class="tsd-theme-toggle"><label class="settings-label" for="tsd-theme">Theme</label><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div></div><div class="site-menu"><nav class="tsd-navigation"><a href="../modules.html">node-switchbot</a><ul class="tsd-small-nested-navigation" id="tsd-nav-container"><li>Loading...</li></ul></nav></div></div></div><footer></footer><div class="overlay"></div></body></html>
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
<!DOCTYPE html><html class="default" lang="en" data-base="../"><head><meta charset="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>VirtualDeviceType | node-switchbot</title><meta name="description" content="Documentation for node-switchbot"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async src="../assets/icons.js" id="tsd-icons-script"></script><script async src="../assets/search.js" id="tsd-search-script"></script><script async src="../assets/navigation.js" id="tsd-nav-script"></script><script async src="../assets/hierarchy.js" id="tsd-hierarchy-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os";document.body.style.display="none";setTimeout(() => window.app?app.showPage():document.body.style.removeProperty("display"),500)</script><header class="tsd-page-toolbar"><div class="tsd-toolbar-contents container"><a href="../index.html" class="title">node-switchbot</a><div id="tsd-toolbar-links"></div><button id="tsd-search-trigger" class="tsd-widget" aria-label="Search"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-search"></use></svg></button><dialog id="tsd-search" aria-label="Search"><input role="combobox" id="tsd-search-input" aria-controls="tsd-search-results" aria-autocomplete="list" aria-expanded="true" autocapitalize="off" autocomplete="off" placeholder="Search the docs" maxLength="100"/><ul role="listbox" id="tsd-search-results"></ul><div id="tsd-search-status" aria-live="polite" aria-atomic="true"><div>Preparing search index...</div></div></dialog><a href="#" class="tsd-widget menu" id="tsd-toolbar-menu-trigger" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-menu"></use></svg></a></div></header><div class="container container-main"><div class="col-content"><div class="tsd-page-title"><ul class="tsd-breadcrumb" aria-label="Breadcrumb"><li><a href="" aria-current="page">VirtualDeviceType</a></li></ul><h1>Type Alias VirtualDeviceType</h1></div><div class="tsd-signature"><span class="tsd-kind-type-alias">VirtualDeviceType</span><span class="tsd-signature-symbol">:</span><br/> <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">"Air Conditioner"</span><br/> <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">"TV"</span><br/> <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">"Light"</span><br/> <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">"IPTV/Streamer"</span><br/> <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">"Set Top Box"</span><br/> <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">"DVD"</span><br/> <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">"Fan"</span><br/> <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">"Projector"</span><br/> <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">"Camera"</span><br/> <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">"Air Purifier"</span><br/> <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">"Speaker"</span><br/> <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">"Water Heater"</span><br/> <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">"Vacuum Cleaner"</span><br/> <span class="tsd-signature-symbol">|</span> <span class="tsd-signature-type">"Others"</span></div><div class="tsd-comment tsd-typography"><p>Virtual/Infrared device types</p>
|
|
2
|
-
</div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/OpenWonderLabs/node-switchbot/blob/
|
|
2
|
+
</div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/OpenWonderLabs/node-switchbot/blob/4d519c7abbc4fb4e44f9ae1b58c53b18a14df244/src/types/api.ts#L257">types/api.ts:257</a></li></ul></aside></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-accordion"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg><h3>Settings</h3></summary><div class="tsd-accordion-details"><div class="tsd-filter-visibility"><span class="settings-label">Member Visibility</span><ul id="tsd-filter-options"><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li></ul></div><div class="tsd-theme-toggle"><label class="settings-label" for="tsd-theme">Theme</label><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div></div><div class="site-menu"><nav class="tsd-navigation"><a href="../modules.html">node-switchbot</a><ul class="tsd-small-nested-navigation" id="tsd-nav-container"><li>Loading...</li></ul></nav></div></div></div><footer></footer><div class="overlay"></div></body></html>
|
package/docs/variables/urls.html
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html class="default" lang="en" data-base="../"><head><meta charset="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>urls | node-switchbot</title><meta name="description" content="Documentation for node-switchbot"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async src="../assets/icons.js" id="tsd-icons-script"></script><script async src="../assets/search.js" id="tsd-search-script"></script><script async src="../assets/navigation.js" id="tsd-nav-script"></script><script async src="../assets/hierarchy.js" id="tsd-hierarchy-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os";document.body.style.display="none";setTimeout(() => window.app?app.showPage():document.body.style.removeProperty("display"),500)</script><header class="tsd-page-toolbar"><div class="tsd-toolbar-contents container"><a href="../index.html" class="title">node-switchbot</a><div id="tsd-toolbar-links"></div><button id="tsd-search-trigger" class="tsd-widget" aria-label="Search"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-search"></use></svg></button><dialog id="tsd-search" aria-label="Search"><input role="combobox" id="tsd-search-input" aria-controls="tsd-search-results" aria-autocomplete="list" aria-expanded="true" autocapitalize="off" autocomplete="off" placeholder="Search the docs" maxLength="100"/><ul role="listbox" id="tsd-search-results"></ul><div id="tsd-search-status" aria-live="polite" aria-atomic="true"><div>Preparing search index...</div></div></dialog><a href="#" class="tsd-widget menu" id="tsd-toolbar-menu-trigger" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-menu"></use></svg></a></div></header><div class="container container-main"><div class="col-content"><div class="tsd-page-title"><ul class="tsd-breadcrumb" aria-label="Breadcrumb"><li><a href="" aria-current="page">urls</a></li></ul><h1>Variable urls<code class="tsd-tag">Const</code></h1></div><div class="tsd-signature"><span class="tsd-kind-variable">urls</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">{</span> <span class="tsd-kind-property">base</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">;</span> <span class="tsd-kind-property">devices</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">;</span> <span class="tsd-kind-property">scenes</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">;</span> <span class="tsd-kind-property">webhook</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span> <span class="tsd-signature-symbol">}</span><span class="tsd-signature-symbol"> = ...</span></div><div class="tsd-type-declaration"><h4>Type Declaration</h4><ul class="tsd-parameters"><li class="tsd-parameter"><h5 id="base"><span class="tsd-kind-property">base</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span></h5></li><li class="tsd-parameter"><h5 id="devices"><span class="tsd-kind-property">devices</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span></h5></li><li class="tsd-parameter"><h5 id="scenes"><span class="tsd-kind-property">scenes</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span></h5></li><li class="tsd-parameter"><h5 id="webhook"><span class="tsd-kind-property">webhook</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span></h5></li></ul></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/OpenWonderLabs/node-switchbot/blob/
|
|
1
|
+
<!DOCTYPE html><html class="default" lang="en" data-base="../"><head><meta charset="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>urls | node-switchbot</title><meta name="description" content="Documentation for node-switchbot"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async src="../assets/icons.js" id="tsd-icons-script"></script><script async src="../assets/search.js" id="tsd-search-script"></script><script async src="../assets/navigation.js" id="tsd-nav-script"></script><script async src="../assets/hierarchy.js" id="tsd-hierarchy-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os";document.body.style.display="none";setTimeout(() => window.app?app.showPage():document.body.style.removeProperty("display"),500)</script><header class="tsd-page-toolbar"><div class="tsd-toolbar-contents container"><a href="../index.html" class="title">node-switchbot</a><div id="tsd-toolbar-links"></div><button id="tsd-search-trigger" class="tsd-widget" aria-label="Search"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-search"></use></svg></button><dialog id="tsd-search" aria-label="Search"><input role="combobox" id="tsd-search-input" aria-controls="tsd-search-results" aria-autocomplete="list" aria-expanded="true" autocapitalize="off" autocomplete="off" placeholder="Search the docs" maxLength="100"/><ul role="listbox" id="tsd-search-results"></ul><div id="tsd-search-status" aria-live="polite" aria-atomic="true"><div>Preparing search index...</div></div></dialog><a href="#" class="tsd-widget menu" id="tsd-toolbar-menu-trigger" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-menu"></use></svg></a></div></header><div class="container container-main"><div class="col-content"><div class="tsd-page-title"><ul class="tsd-breadcrumb" aria-label="Breadcrumb"><li><a href="" aria-current="page">urls</a></li></ul><h1>Variable urls<code class="tsd-tag">Const</code></h1></div><div class="tsd-signature"><span class="tsd-kind-variable">urls</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">{</span> <span class="tsd-kind-property">base</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">;</span> <span class="tsd-kind-property">devices</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">;</span> <span class="tsd-kind-property">scenes</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">;</span> <span class="tsd-kind-property">webhook</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span> <span class="tsd-signature-symbol">}</span><span class="tsd-signature-symbol"> = ...</span></div><div class="tsd-type-declaration"><h4>Type Declaration</h4><ul class="tsd-parameters"><li class="tsd-parameter"><h5 id="base"><span class="tsd-kind-property">base</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span></h5></li><li class="tsd-parameter"><h5 id="devices"><span class="tsd-kind-property">devices</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span></h5></li><li class="tsd-parameter"><h5 id="scenes"><span class="tsd-kind-property">scenes</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span></h5></li><li class="tsd-parameter"><h5 id="webhook"><span class="tsd-kind-property">webhook</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span></h5></li></ul></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/OpenWonderLabs/node-switchbot/blob/4d519c7abbc4fb4e44f9ae1b58c53b18a14df244/src/settings.ts#L14">settings.ts:14</a></li></ul></aside></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-accordion"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg><h3>Settings</h3></summary><div class="tsd-accordion-details"><div class="tsd-filter-visibility"><span class="settings-label">Member Visibility</span><ul id="tsd-filter-options"><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li></ul></div><div class="tsd-theme-toggle"><label class="settings-label" for="tsd-theme">Theme</label><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div></div><div class="site-menu"><nav class="tsd-navigation"><a href="../modules.html">node-switchbot</a><ul class="tsd-small-nested-navigation" id="tsd-nav-container"><li>Loading...</li></ul></nav></div></div></div><footer></footer><div class="overlay"></div></body></html>
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "node-switchbot",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "4.0.0-beta.
|
|
4
|
+
"version": "4.0.0-beta.11",
|
|
5
5
|
"description": "The node-switchbot is a Node.js module which allows you to control your Switchbot Devices through Bluetooth (BLE) with automatic OpenAPI fallback.",
|
|
6
6
|
"author": "OpenWonderLabs (https://github.com/OpenWonderLabs)",
|
|
7
7
|
"license": "MIT",
|
|
@@ -36,7 +36,8 @@
|
|
|
36
36
|
},
|
|
37
37
|
"scripts": {
|
|
38
38
|
"check": "npm install && npm outdated",
|
|
39
|
-
"
|
|
39
|
+
"type-check": "tsc --noEmit",
|
|
40
|
+
"lint": "eslint src/**/*.ts test/**/*.ts && npm run type-check",
|
|
40
41
|
"lint:fix": "eslint src/**/*.ts test/**/*.ts --fix",
|
|
41
42
|
"lint:src": "eslint src/**/*.ts",
|
|
42
43
|
"lint:test": "eslint test/**/*.ts",
|
|
@@ -48,7 +49,6 @@
|
|
|
48
49
|
"test": "vitest run",
|
|
49
50
|
"test:watch": "vitest watch",
|
|
50
51
|
"test-coverage": "npm run test -- --coverage",
|
|
51
|
-
"type-check": "tsc --noEmit",
|
|
52
52
|
"ble:scan": "node tmp-switchbot-scan.mjs",
|
|
53
53
|
"docs": "typedoc",
|
|
54
54
|
"lint-docs": "typedoc --emit none --treatWarningsAsErrors"
|
|
@@ -44,16 +44,16 @@ Comprehensive comparison between pySwitchBot (Python) and node-switchbot (TypeSc
|
|
|
44
44
|
### Bot (WoHand) Commands
|
|
45
45
|
|
|
46
46
|
#### High Priority
|
|
47
|
-
- [
|
|
47
|
+
- [x] **Task 2.1**: Add `setMode(mode: 'switch' | 'press')` command ✅
|
|
48
48
|
- Switch mode: Toggle on/off
|
|
49
49
|
- Press mode: Momentary press
|
|
50
50
|
- Command: `0x57 0x0F 0x47 0x01 MODE` (MODE: 0x00=press, 0x01=switch)
|
|
51
51
|
|
|
52
|
-
- [
|
|
52
|
+
- [x] **Task 2.2**: Add `setLongPress(duration: number)` command ✅
|
|
53
53
|
- Configure press duration (1-255 deciseconds)
|
|
54
54
|
- Command: `0x57 0x0F 0x47 0x03 DURATION`
|
|
55
55
|
|
|
56
|
-
- [
|
|
56
|
+
- [x] **Task 2.3**: Add direct arm control ✅
|
|
57
57
|
- `handUp()` - Raise arm
|
|
58
58
|
- `handDown()` - Lower arm
|
|
59
59
|
- More precise than toggle
|
|
@@ -61,7 +61,7 @@ Comprehensive comparison between pySwitchBot (Python) and node-switchbot (TypeSc
|
|
|
61
61
|
### Curtain Commands
|
|
62
62
|
|
|
63
63
|
#### High Priority
|
|
64
|
-
- [
|
|
64
|
+
- [x] **Task 3.1**: Add speed parameter to movement commands ✅
|
|
65
65
|
- `open(speed?: number)` - Speed 1-255 (default: 255)
|
|
66
66
|
- `close(speed?: number)` - Speed 1-255
|
|
67
67
|
- `setPosition(position: number, speed?: number)` - Position with speed
|
|
@@ -81,23 +81,23 @@ Comprehensive comparison between pySwitchBot (Python) and node-switchbot (TypeSc
|
|
|
81
81
|
### Lock Commands
|
|
82
82
|
|
|
83
83
|
#### High Priority
|
|
84
|
-
- [
|
|
84
|
+
- [x] **Task 4.1**: Add `unlockWithoutUnlatch()` command ✅
|
|
85
85
|
- EU firmware feature
|
|
86
86
|
- Unlocks without unlatching door
|
|
87
87
|
- Command: Different from standard unlock
|
|
88
88
|
|
|
89
|
-
- [
|
|
89
|
+
- [x] **Task 4.2**: Implement notification handling ✅
|
|
90
90
|
- Subscribe to lock notifications
|
|
91
91
|
- Real-time status updates
|
|
92
92
|
- Handle unsolicited notifications
|
|
93
93
|
|
|
94
|
-
- [
|
|
94
|
+
- [x] **Task 4.3**: Add smart lock state detection ✅
|
|
95
95
|
- Check current state before sending command
|
|
96
96
|
- Avoid unnecessary unlock/lock commands
|
|
97
97
|
- Return early if already in target state
|
|
98
98
|
|
|
99
99
|
#### Medium Priority
|
|
100
|
-
- [
|
|
100
|
+
- [x] **Task 4.4**: Add `getLockInfo()` command ✅
|
|
101
101
|
- Get detailed lock configuration
|
|
102
102
|
- Battery, firmware, settings
|
|
103
103
|
- Command: `0x57 0x02`
|
|
@@ -105,16 +105,16 @@ Comprehensive comparison between pySwitchBot (Python) and node-switchbot (TypeSc
|
|
|
105
105
|
### Relay Switch (1PM/2PM) Commands
|
|
106
106
|
|
|
107
107
|
#### High Priority
|
|
108
|
-
- [
|
|
108
|
+
- [x] **Task 5.1**: Add `toggle()` command ✅
|
|
109
109
|
- Toggle current state
|
|
110
110
|
- Command: `0x57 0x0F 0x50 0x01 0x01 0x02`
|
|
111
111
|
|
|
112
|
-
- [
|
|
112
|
+
- [x] **Task 5.2**: Implement power monitoring ✅
|
|
113
113
|
- `getBasicInfo()` - Returns voltage, current, power, energy
|
|
114
114
|
- Parse response: 11 bytes with power data at specific offsets
|
|
115
115
|
- Command: `0x57 0x02`
|
|
116
116
|
|
|
117
|
-
- [
|
|
117
|
+
- [x] **Task 5.3**: Add channel-specific control (2PM model) ✅
|
|
118
118
|
- `setChannel1(state: boolean)`
|
|
119
119
|
- `setChannel2(state: boolean)`
|
|
120
120
|
- Detect 2PM vs 1PM model
|
|
@@ -132,19 +132,19 @@ Comprehensive comparison between pySwitchBot (Python) and node-switchbot (TypeSc
|
|
|
132
132
|
### Light (Bulb/Strip) Commands
|
|
133
133
|
|
|
134
134
|
#### High Priority
|
|
135
|
-
- [
|
|
135
|
+
- [x] **Task 6.1**: Add effect presets (20+ effects) ✅
|
|
136
136
|
- Christmas, Halloween, Sunset, Rainbow, etc.
|
|
137
137
|
- Command: `0x57 0x0F 0x47 0x01 EFFECT_ID 0xFF SPEED 0x00 0x00 0x00`
|
|
138
138
|
- Effect IDs: 0x00-0x13 (20 effects)
|
|
139
139
|
- Speed: 0x01 (slow) to 0x64 (fast)
|
|
140
140
|
|
|
141
|
-
- [
|
|
141
|
+
- [x] **Task 6.2**: Add RGBIC segmented control ✅
|
|
142
142
|
- Control individual LED segments
|
|
143
143
|
- RGBIC-specific effects
|
|
144
144
|
- Multi-zone color control
|
|
145
145
|
|
|
146
146
|
#### Medium Priority
|
|
147
|
-
- [
|
|
147
|
+
- [x] **Task 6.3**: Add color temperature with min/max ✅
|
|
148
148
|
- `setColorTemp(minTemp: number, maxTemp: number, temp: number)`
|
|
149
149
|
- Command: `0x57 0x0F 0x47 0x01 0x17 BRIGHTNESS MIN_KEL MAX_KEL TEMP`
|
|
150
150
|
|
|
@@ -181,17 +181,17 @@ Comprehensive comparison between pySwitchBot (Python) and node-switchbot (TypeSc
|
|
|
181
181
|
### Vacuum Commands
|
|
182
182
|
|
|
183
183
|
#### High Priority
|
|
184
|
-
- [
|
|
184
|
+
- [x] **Task 9.1**: Implement vacuum device classes ✅
|
|
185
185
|
- K10+, K10+ Pro, K10+ Pro Combo
|
|
186
186
|
- K11+, K20
|
|
187
187
|
- S10, S20
|
|
188
188
|
|
|
189
|
-
- [
|
|
189
|
+
- [x] **Task 9.2**: Add basic vacuum commands ✅
|
|
190
190
|
- `cleanUp(protocolVersion: number)` - Start cleaning
|
|
191
191
|
- `returnToDock(protocolVersion: number)` - Return to base
|
|
192
192
|
- Support protocol versions 1 and 2
|
|
193
193
|
|
|
194
|
-
- [
|
|
194
|
+
- [x] **Task 9.3**: Add vacuum status getters ✅
|
|
195
195
|
- Battery level
|
|
196
196
|
- Work status (cleaning, returning, docked, etc.)
|
|
197
197
|
- Dustbin status
|
|
@@ -202,12 +202,12 @@ Comprehensive comparison between pySwitchBot (Python) and node-switchbot (TypeSc
|
|
|
202
202
|
### Advertisement-Based Status (No Connection Required)
|
|
203
203
|
|
|
204
204
|
#### High Priority
|
|
205
|
-
- [
|
|
205
|
+
- [x] **Task 10.1**: Implement passive status from advertisements ✅
|
|
206
206
|
- Parse device state from BLE advertisements
|
|
207
207
|
- No connection needed for basic status
|
|
208
208
|
- Cache last known state
|
|
209
209
|
|
|
210
|
-
- [
|
|
210
|
+
- [x] **Task 10.2**: Add sequence number tracking ✅
|
|
211
211
|
- Monitor `sequence_number` in advertisements
|
|
212
212
|
- Auto-trigger status update when sequence changes
|
|
213
213
|
- Implement for: locks, relay switches, vacuums, air purifiers
|
|
@@ -231,7 +231,7 @@ Comprehensive comparison between pySwitchBot (Python) and node-switchbot (TypeSc
|
|
|
231
231
|
- Validate specific byte positions
|
|
232
232
|
- Compare against expected value sets: `{1}`, `{1, 5}`, `{1, 6}`
|
|
233
233
|
|
|
234
|
-
- [
|
|
234
|
+
- [x] **Task 11.2**: Implement password detection ✅
|
|
235
235
|
- Check for `0x07` (password required)
|
|
236
236
|
- Check for `0x09` (password incorrect)
|
|
237
237
|
- Throw specific authentication errors
|
|
@@ -241,46 +241,46 @@ Comprehensive comparison between pySwitchBot (Python) and node-switchbot (TypeSc
|
|
|
241
241
|
### High Priority Devices
|
|
242
242
|
|
|
243
243
|
#### Vacuum Cleaners
|
|
244
|
-
- [
|
|
245
|
-
- [
|
|
246
|
-
- [
|
|
247
|
-
- [
|
|
248
|
-
- [
|
|
249
|
-
- [
|
|
250
|
-
- [
|
|
244
|
+
- [x] **Task 12.1**: K10+ Vacuum ✅
|
|
245
|
+
- [x] **Task 12.2**: K10+ Pro Vacuum ✅
|
|
246
|
+
- [x] **Task 12.3**: K10+ Pro Combo Vacuum ✅
|
|
247
|
+
- [x] **Task 12.4**: K11+ Vacuum ✅
|
|
248
|
+
- [x] **Task 12.5**: K20 Vacuum ✅
|
|
249
|
+
- [x] **Task 12.6**: S10 Vacuum ✅
|
|
250
|
+
- [x] **Task 12.7**: S20 Vacuum ✅
|
|
251
251
|
|
|
252
252
|
#### Lock Variants
|
|
253
|
-
- [
|
|
254
|
-
- [
|
|
255
|
-
- [
|
|
256
|
-
- [
|
|
253
|
+
- [x] **Task 13.1**: Lock Lite ✅
|
|
254
|
+
- [x] **Task 13.2**: Lock Vision ✅
|
|
255
|
+
- [x] **Task 13.3**: Lock Vision Pro ✅
|
|
256
|
+
- [x] **Task 13.4**: Lock Pro WiFi ✅
|
|
257
257
|
|
|
258
258
|
#### Relay Switches
|
|
259
|
-
- [
|
|
260
|
-
- [
|
|
259
|
+
- [x] **Task 14.1**: Relay Switch 2PM ✅
|
|
260
|
+
- [x] **Task 14.2**: Garage Door Opener (relay variant) ✅
|
|
261
261
|
|
|
262
262
|
### Medium Priority Devices
|
|
263
263
|
|
|
264
264
|
#### Climate Control
|
|
265
|
-
- [
|
|
266
|
-
- [
|
|
267
|
-
- [
|
|
268
|
-
- [
|
|
265
|
+
- [x] **Task 15.1**: Evaporative Humidifier (WoHumi2) - Already exists, enhance ✅
|
|
266
|
+
- [x] **Task 15.2**: Circulator Fan (Battery/USB) ✅
|
|
267
|
+
- [x] **Task 15.3**: Smart Thermostat Radiator ✅
|
|
268
|
+
- [x] **Task 15.4**: Climate Panel ✅
|
|
269
269
|
|
|
270
270
|
#### Lighting
|
|
271
|
-
- [
|
|
272
|
-
- [
|
|
273
|
-
- [
|
|
274
|
-
- [
|
|
275
|
-
- [
|
|
271
|
+
- [x] **Task 16.1**: Strip Light 3 ✅
|
|
272
|
+
- [x] **Task 16.2**: Floor Lamp ✅
|
|
273
|
+
- [x] **Task 16.3**: RGBICWW Strip Light ✅
|
|
274
|
+
- [x] **Task 16.4**: RGBICWW Floor Lamp ✅
|
|
275
|
+
- [x] **Task 16.5**: Art Frame ✅
|
|
276
276
|
|
|
277
277
|
#### Other
|
|
278
|
-
- [
|
|
279
|
-
- [
|
|
280
|
-
- [
|
|
281
|
-
- [
|
|
282
|
-
- [
|
|
283
|
-
- [
|
|
278
|
+
- [x] **Task 17.1**: Plug Mini EU - Already exists, verify ✅
|
|
279
|
+
- [x] **Task 17.2**: Roller Shade ✅
|
|
280
|
+
- [x] **Task 17.3**: Keypad Vision ✅
|
|
281
|
+
- [x] **Task 17.4**: Keypad Vision Pro ✅
|
|
282
|
+
- [x] **Task 17.5**: Hub3 - Already exists, enhance ✅
|
|
283
|
+
- [x] **Task 17.6**: HubMini Matter ✅
|
|
284
284
|
|
|
285
285
|
**Total New Devices:** ~30+ device types/variants to add or enhance
|
|
286
286
|
|
|
@@ -363,12 +363,12 @@ Comprehensive comparison between pySwitchBot (Python) and node-switchbot (TypeSc
|
|
|
363
363
|
|
|
364
364
|
### High Priority
|
|
365
365
|
|
|
366
|
-
- [
|
|
366
|
+
- [x] **Task 20.1**: Implement persistent connection with timer ✅
|
|
367
367
|
- Keep connection open for 8.5 seconds after last command
|
|
368
368
|
- Reset timer on each command
|
|
369
369
|
- Allows command batching without reconnecting
|
|
370
370
|
|
|
371
|
-
- [
|
|
371
|
+
- [x] **Task 20.2**: Add operation lock ✅
|
|
372
372
|
- Prevent concurrent BLE operations
|
|
373
373
|
- `_operation_lock` async lock
|
|
374
374
|
- Wait for operations to complete before disconnecting
|
|
@@ -399,13 +399,13 @@ Comprehensive comparison between pySwitchBot (Python) and node-switchbot (TypeSc
|
|
|
399
399
|
|
|
400
400
|
### High Priority
|
|
401
401
|
|
|
402
|
-
- [
|
|
402
|
+
- [x] **Task 21.1**: Implement sequence device pattern ✅
|
|
403
403
|
- `SequenceDevice` base class
|
|
404
404
|
- Monitor `sequence_number` from advertisements
|
|
405
405
|
- Auto-trigger `update()` when sequence changes
|
|
406
406
|
- Use for: locks, relay switches, vacuums, air purifiers
|
|
407
407
|
|
|
408
|
-
- [
|
|
408
|
+
- [x] **Task 21.2**: Add override state during connection pattern ✅
|
|
409
409
|
- `DeviceOverrideStateDuringConnection` base class
|
|
410
410
|
- Ignore advertisement data while connected
|
|
411
411
|
- Prevents stale data issues
|
package/todo/completed.md
CHANGED
|
@@ -6,6 +6,48 @@ Last Updated: March 7, 2026
|
|
|
6
6
|
|
|
7
7
|
---
|
|
8
8
|
|
|
9
|
+
## Phase 3: New Devices - Other Devices Block (March 7, 2026)
|
|
10
|
+
|
|
11
|
+
### Task 17.6: HubMini Matter ✅
|
|
12
|
+
**Implementation Details:**
|
|
13
|
+
- Created `WoHubMiniMatter` class extending `WoHub2` in `src/devices/wo-hubmini-matter.ts`
|
|
14
|
+
- Inherits all hub functionality: `getStatus()` returning sensor data (temperature, humidity, lightLevel)
|
|
15
|
+
- Wired through 3-layer export chain (device → devices/index.ts → src/index.ts)
|
|
16
|
+
- Added to runtime registry: `DEVICE_CLASSES['WoHubMiniMatter']` in `src/switchbot.ts`
|
|
17
|
+
- Added device-type mappings in `src/settings.ts`: "HubMini Matter", "SwitchBot HubMini Matter"
|
|
18
|
+
- Created `test/hubmini-matter.test.ts` with 3 tests validating device-type mappings and method inheritance from WoHub2
|
|
19
|
+
- Full validation passed: build ✅ tests ✅ (233 passing) lint ✅ type-check ✅
|
|
20
|
+
|
|
21
|
+
### Task 17.5: Hub3 Enhancement ✅
|
|
22
|
+
**Implementation Details:**
|
|
23
|
+
- Enhanced existing `WoHub3` class (extends `WoHub2` in `src/devices/wo-hub3.ts`)
|
|
24
|
+
- Added device-type alias in `src/settings.ts`: "SwitchBot Hub 3" (in addition to existing "Hub 3")
|
|
25
|
+
- Created `test/hub3.test.ts` with 3 tests validating device-type mappings and method inheritance from WoHub2
|
|
26
|
+
- Verified inheritance: `getStatus()` method returns hub sensor data (temperature, humidity, lightLevel)
|
|
27
|
+
- Full validation passed: build ✅ tests ✅ (230 passing) lint ✅ type-check ✅
|
|
28
|
+
|
|
29
|
+
### Task 17.4: Keypad Vision Pro ✅
|
|
30
|
+
**Implementation Details:**
|
|
31
|
+
- Created `WoKeypadVisionPro` class extending `WoKeypad` in `src/devices/wo-keypad-vision-pro.ts`
|
|
32
|
+
- Inherits all keypad functionality: `getStatus()` methods
|
|
33
|
+
- Wired through 3-layer export chain (device → devices/index.ts → src/index.ts)
|
|
34
|
+
- Added to runtime registry: `DEVICE_CLASSES['WoKeypadVisionPro']` in `src/switchbot.ts`
|
|
35
|
+
- Added device-type mappings in `src/settings.ts`: "Keypad Vision Pro", "SwitchBot Keypad Vision Pro"
|
|
36
|
+
- Created `test/keypad-vision-pro.test.ts` with 3 tests validating device-type mapping and method inheritance
|
|
37
|
+
- Full validation passed: build ✅ tests ✅ (227 passing) lint ✅ type-check ✅
|
|
38
|
+
|
|
39
|
+
### Task 17.3: Keypad Vision ✅
|
|
40
|
+
**Implementation Details:**
|
|
41
|
+
- Created `WoKeypadVision` class extending `WoKeypad` in `src/devices/wo-keypad-vision.ts`
|
|
42
|
+
- Inherits all keypad functionality: `getStatus()` methods
|
|
43
|
+
- Wired through 3-layer export chain (device → devices/index.ts → src/index.ts)
|
|
44
|
+
- Added to runtime registry: `DEVICE_CLASSES['WoKeypadVision']` in `src/switchbot.ts`
|
|
45
|
+
- Added device-type mappings in `src/settings.ts`: "Keypad Vision", "SwitchBot Keypad Vision"
|
|
46
|
+
- Created `test/keypad-vision.test.ts` with 3 tests validating device-type mapping and method inheritance
|
|
47
|
+
- Full validation passed: build ✅ tests ✅ (224 passing) lint ✅ type-check ✅
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
9
51
|
## Phase 0: Foundation & Preparation ✅
|
|
10
52
|
|
|
11
53
|
### BLE Infrastructure Hardening (Completed March 6, 2026)
|
|
@@ -123,6 +165,139 @@ Last Updated: March 7, 2026
|
|
|
123
165
|
|
|
124
166
|
---
|
|
125
167
|
|
|
168
|
+
## Phase 3: New Device Types (Vacuum Variants) ✅
|
|
169
|
+
|
|
170
|
+
### Completed March 7, 2026
|
|
171
|
+
- [x] K10+ / K10+ Pro / K10+ Pro Combo vacuum variants (Tasks 12.1-12.3)
|
|
172
|
+
- Added `WoVacuumK10Plus`, `WoVacuumK10Pro`, and `WoVacuumK10ProCombo` classes
|
|
173
|
+
- Reused shared `WoVacuum` command/status behavior to avoid duplication
|
|
174
|
+
- Wired `DEVICE_CLASS_MAP` routing for K10 family API/BLE names
|
|
175
|
+
|
|
176
|
+
- [x] K11+ / K20 / S10 / S20 vacuum variants (Tasks 12.4-12.7)
|
|
177
|
+
- Added `WoVacuumK11Plus`, `WoVacuumK20`, `WoVacuumS10`, and `WoVacuumS20` classes
|
|
178
|
+
- Updated `SwitchBot` runtime device registry and package exports
|
|
179
|
+
- Added regression coverage in `test/vacuum-variants.test.ts` for class mapping
|
|
180
|
+
|
|
181
|
+
- [x] Lock Lite / Lock Vision variants (Tasks 13.1-13.2)
|
|
182
|
+
- Added `WoSmartLockLite` and `WoSmartLockVision` classes extending `WoSmartLock`
|
|
183
|
+
- Both variants use base lock functionality without unlatch support
|
|
184
|
+
- Wired `DEVICE_CLASS_MAP` routing for lock variant API/BLE names
|
|
185
|
+
|
|
186
|
+
- [x] Lock Vision Pro / Lock Pro WiFi variants (Tasks 13.3-13.4)
|
|
187
|
+
- Added `WoSmartLockVisionPro` and `WoSmartLockProWiFi` classes extending `WoSmartLockPro`
|
|
188
|
+
- Both variants inherit pro lock features including unlatch support
|
|
189
|
+
- Updated `SwitchBot` runtime device registry and package exports
|
|
190
|
+
- Added regression coverage in `test/lock-variants.test.ts` for class mapping and method inheritance
|
|
191
|
+
|
|
192
|
+
---
|
|
193
|
+
|
|
194
|
+
## Phase 3: New Device Types (Relay Variants) ✅
|
|
195
|
+
|
|
196
|
+
### Completed March 7, 2026
|
|
197
|
+
- [x] Relay Switch 2PM wiring completion (Task 14.1)
|
|
198
|
+
- WoRelaySwitch2PM class already existed from Phase 2
|
|
199
|
+
- Completed wiring through src/index.ts exports
|
|
200
|
+
- Added to src/switchbot.ts DEVICE_CLASSES registry
|
|
201
|
+
- Added 'Relay Switch 2PM' mapping to DEVICE_CLASS_MAP in src/settings.ts
|
|
202
|
+
|
|
203
|
+
- [x] Garage Door Opener relay variant (Task 14.2)
|
|
204
|
+
- Added WoGarageDoorOpener class extending WoRelaySwitch1
|
|
205
|
+
- Lightweight variant reuses relay switch control methods (turnOn/turnOff/toggle)
|
|
206
|
+
- Wired through exports, registry, and DEVICE_CLASS_MAP
|
|
207
|
+
- Added regression coverage in test/relay-variants.test.ts (4 tests)
|
|
208
|
+
- Tests verify: 2PM class mapping, Garage Door Opener mapping, channel methods on 2PM, relay methods on opener
|
|
209
|
+
|
|
210
|
+
---
|
|
211
|
+
|
|
212
|
+
## Phase 3: New Device Types (Climate Enhancements) ✅
|
|
213
|
+
|
|
214
|
+
### Completed March 7, 2026
|
|
215
|
+
- [x] Evaporative Humidifier (WoHumi2) enhancement (Task 15.1)
|
|
216
|
+
- Enhanced WoHumi2 with convenience methods: setAuto(), setManual(), setLevel(level)
|
|
217
|
+
- Added evaporative humidifier API aliases in DEVICE_CLASS_MAP to map to WoHumi2
|
|
218
|
+
- Added regression coverage in test/humidifier2-enhancement.test.ts (4 tests)
|
|
219
|
+
- Tests verify WoHumi2 method delegation and evaporative humidifier device-type mapping
|
|
220
|
+
|
|
221
|
+
- [x] Circulator Fan (Battery/USB) variant (Task 15.2)
|
|
222
|
+
- Added WoCirculatorFan class extending WoAirPurifier
|
|
223
|
+
- Wired fan class through exports and SwitchBot runtime DEVICE_CLASSES registry
|
|
224
|
+
- Added device-type aliases in DEVICE_CLASS_MAP for Battery/USB fan names
|
|
225
|
+
- Added regression coverage in test/circulator-fan-variants.test.ts (4 tests)
|
|
226
|
+
- Tests verify model mapping and inherited control methods (turnOn/turnOff/setFanSpeed)
|
|
227
|
+
|
|
228
|
+
- [x] Smart Thermostat Radiator variant (Task 15.3)
|
|
229
|
+
- Added WoSmartThermostatRadiator class extending WoAirPurifier
|
|
230
|
+
- Wired class through exports and SwitchBot runtime DEVICE_CLASSES registry
|
|
231
|
+
- Added device-type aliases in DEVICE_CLASS_MAP for thermostat radiator names
|
|
232
|
+
- Added regression coverage in test/thermostat-radiator-variants.test.ts (4 tests)
|
|
233
|
+
- Tests verify model mapping and inherited climate control methods (turnOn/turnOff/setMode)
|
|
234
|
+
|
|
235
|
+
- [x] Climate Panel variant (Task 15.4)
|
|
236
|
+
- Added WoClimatePanel class extending WoAirPurifier
|
|
237
|
+
- Wired class through exports and SwitchBot runtime DEVICE_CLASSES registry
|
|
238
|
+
- Added climate panel aliases in DEVICE_CLASS_MAP
|
|
239
|
+
- Added regression coverage in test/climate-panel-variants.test.ts (3 tests)
|
|
240
|
+
- Tests verify model mapping and inherited climate control methods (turnOn/turnOff/setMode)
|
|
241
|
+
|
|
242
|
+
## Phase 3: New Device Types (Lighting Variants) ⏳
|
|
243
|
+
|
|
244
|
+
### Completed March 7, 2026
|
|
245
|
+
- [x] Strip Light 3 (Task 16.1)
|
|
246
|
+
- Added WoStripLight3 class extending WoBulb for color control
|
|
247
|
+
- Wired class through exports and SwitchBot runtime DEVICE_CLASSES registry
|
|
248
|
+
- Added device-type mappings: "Strip Light 3", "SwitchBot Strip Light 3"
|
|
249
|
+
- Added regression coverage in test/strip-light-3.test.ts (3 tests)
|
|
250
|
+
- Tests verify device-type mapping for both aliases and inherited color control methods
|
|
251
|
+
|
|
252
|
+
- [x] Floor Lamp (Task 16.2)
|
|
253
|
+
- Added WoFloorLamp class extending WoBulb for color control
|
|
254
|
+
- Wired class through exports and SwitchBot runtime DEVICE_CLASSES registry
|
|
255
|
+
- Added device-type mappings: "Floor Lamp", "SwitchBot Floor Lamp"
|
|
256
|
+
- Added regression coverage in test/floor-lamp.test.ts (3 tests)
|
|
257
|
+
- Tests verify device-type mapping for both aliases and inherited color control methods
|
|
258
|
+
|
|
259
|
+
- [x] RGBICWW Strip Light (Task 16.3)
|
|
260
|
+
- Added WoRGBICWWStripLight class extending WoRGBICBulb for segmented control
|
|
261
|
+
- Wired class through exports and SwitchBot runtime DEVICE_CLASSES registry
|
|
262
|
+
- Added device-type mappings: "RGBICWW Strip Light", "SwitchBot RGBICWW Strip Light"
|
|
263
|
+
- Added regression coverage in test/rgbicww-strip-light.test.ts (3 tests)
|
|
264
|
+
- Tests verify device-type mapping and inherited RGBIC methods (setSegmentColor, setSegmentEffect)
|
|
265
|
+
- Note: Also wired WoRGBICBulb through exports for completeness
|
|
266
|
+
|
|
267
|
+
- [x] RGBICWW Floor Lamp (Task 16.4)
|
|
268
|
+
- Added WoRGBICWWFloorLamp class extending WoRGBICBulb for segmented control
|
|
269
|
+
- Wired class through exports and SwitchBot runtime DEVICE_CLASSES registry
|
|
270
|
+
- Added device-type mappings: "RGBICWW Floor Lamp", "SwitchBot RGBICWW Floor Lamp"
|
|
271
|
+
- Added regression coverage in test/rgbicww-floor-lamp.test.ts (3 tests)
|
|
272
|
+
- Tests verify device-type mapping and inherited RGBIC methods (setSegmentColor, setSegmentEffect)
|
|
273
|
+
|
|
274
|
+
- [x] Art Frame (Task 16.5)
|
|
275
|
+
- Added WoArtFrame class extending WoBulb for color control
|
|
276
|
+
- Wired class through exports and SwitchBot runtime DEVICE_CLASSES registry
|
|
277
|
+
- Added device-type mappings: "Art Frame", "SwitchBot Art Frame"
|
|
278
|
+
- Added regression coverage in test/art-frame.test.ts (3 tests)
|
|
279
|
+
- Tests verify device-type mapping for both aliases and inherited color control methods
|
|
280
|
+
- **Lighting variants block (Tasks 16.1-16.5) complete!** ✅
|
|
281
|
+
|
|
282
|
+
## Phase 3: New Device Types (Other Devices) ⏳
|
|
283
|
+
|
|
284
|
+
### Completed March 7, 2026
|
|
285
|
+
- [x] Plug Mini EU verification (Task 17.1)
|
|
286
|
+
- Verified WoPlugMiniEU exists in runtime registry (aliased to WoPlugMiniUS)
|
|
287
|
+
- Verified device-type mapping: "Plug Mini (EU)" → WoPlugMiniEU
|
|
288
|
+
- Added regression coverage in test/plug-mini-eu.test.ts (2 tests)
|
|
289
|
+
- Tests verify EU variant maps to WoPlugMiniUS class and inherits plug control methods
|
|
290
|
+
- Note: WoPlugMiniEU shares implementation with WoPlugMiniUS (regional variant)
|
|
291
|
+
|
|
292
|
+
- [x] Roller Shade (Task 17.2)
|
|
293
|
+
- Added WoRollerShade class extending WoCurtain for motorized window covering control
|
|
294
|
+
- Wired class through exports and SwitchBot runtime DEVICE_CLASSES registry
|
|
295
|
+
- Added device-type mappings: "Roller Shade", "SwitchBot Roller Shade"
|
|
296
|
+
- Added regression coverage in test/roller-shade.test.ts (3 tests)
|
|
297
|
+
- Tests verify device-type mapping and inherited curtain control methods (open, close, pause, setPosition)
|
|
298
|
+
|
|
299
|
+
---
|
|
300
|
+
|
|
126
301
|
## Notes
|
|
127
302
|
|
|
128
303
|
When moving a task from todo.md to this file:
|