node-switchbot 4.0.0-beta.0 → 4.0.0-beta.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (247) hide show
  1. package/.github/copilot-instructions.md +19 -5
  2. package/BLE.md +117 -4
  3. package/CHANGELOG.md +45 -0
  4. package/README.md +7 -1
  5. package/dist/api.d.ts +3 -3
  6. package/dist/api.d.ts.map +1 -1
  7. package/dist/api.js +9 -6
  8. package/dist/api.js.map +1 -1
  9. package/dist/ble.d.ts +38 -4
  10. package/dist/ble.d.ts.map +1 -1
  11. package/dist/ble.js +409 -53
  12. package/dist/ble.js.map +1 -1
  13. package/dist/devices/base.d.ts +83 -5
  14. package/dist/devices/base.d.ts.map +1 -1
  15. package/dist/devices/base.js +371 -34
  16. package/dist/devices/base.js.map +1 -1
  17. package/dist/devices/device-override-state-during-connection.d.ts +27 -0
  18. package/dist/devices/device-override-state-during-connection.d.ts.map +1 -0
  19. package/dist/devices/device-override-state-during-connection.js +45 -0
  20. package/dist/devices/device-override-state-during-connection.js.map +1 -0
  21. package/dist/devices/index.d.ts +4 -0
  22. package/dist/devices/index.d.ts.map +1 -1
  23. package/dist/devices/index.js +4 -0
  24. package/dist/devices/index.js.map +1 -1
  25. package/dist/devices/sequence-device.d.ts +36 -0
  26. package/dist/devices/sequence-device.d.ts.map +1 -0
  27. package/dist/devices/sequence-device.js +75 -0
  28. package/dist/devices/sequence-device.js.map +1 -0
  29. package/dist/devices/wo-air-purifier.d.ts +2 -2
  30. package/dist/devices/wo-air-purifier.d.ts.map +1 -1
  31. package/dist/devices/wo-air-purifier.js +2 -2
  32. package/dist/devices/wo-air-purifier.js.map +1 -1
  33. package/dist/devices/wo-bulb.d.ts +10 -0
  34. package/dist/devices/wo-bulb.d.ts.map +1 -1
  35. package/dist/devices/wo-bulb.js +69 -0
  36. package/dist/devices/wo-bulb.js.map +1 -1
  37. package/dist/devices/wo-curtain.d.ts +3 -3
  38. package/dist/devices/wo-curtain.d.ts.map +1 -1
  39. package/dist/devices/wo-curtain.js +12 -9
  40. package/dist/devices/wo-curtain.js.map +1 -1
  41. package/dist/devices/wo-hand.d.ts +53 -2
  42. package/dist/devices/wo-hand.d.ts.map +1 -1
  43. package/dist/devices/wo-hand.js +121 -3
  44. package/dist/devices/wo-hand.js.map +1 -1
  45. package/dist/devices/wo-lock-pro.d.ts +11 -2
  46. package/dist/devices/wo-lock-pro.d.ts.map +1 -1
  47. package/dist/devices/wo-lock-pro.js +65 -3
  48. package/dist/devices/wo-lock-pro.js.map +1 -1
  49. package/dist/devices/wo-lock.d.ts +7 -2
  50. package/dist/devices/wo-lock.d.ts.map +1 -1
  51. package/dist/devices/wo-lock.js +58 -3
  52. package/dist/devices/wo-lock.js.map +1 -1
  53. package/dist/devices/wo-plug-mini-us.d.ts +2 -2
  54. package/dist/devices/wo-plug-mini-us.d.ts.map +1 -1
  55. package/dist/devices/wo-plug-mini-us.js +2 -2
  56. package/dist/devices/wo-plug-mini-us.js.map +1 -1
  57. package/dist/devices/wo-relay-switch-1.d.ts +4 -2
  58. package/dist/devices/wo-relay-switch-1.d.ts.map +1 -1
  59. package/dist/devices/wo-relay-switch-1.js +36 -4
  60. package/dist/devices/wo-relay-switch-1.js.map +1 -1
  61. package/dist/devices/wo-relay-switch-2pm.d.ts +21 -0
  62. package/dist/devices/wo-relay-switch-2pm.d.ts.map +1 -0
  63. package/dist/devices/wo-relay-switch-2pm.js +39 -0
  64. package/dist/devices/wo-relay-switch-2pm.js.map +1 -0
  65. package/dist/devices/wo-rgbic-bulb.d.ts +29 -0
  66. package/dist/devices/wo-rgbic-bulb.d.ts.map +1 -0
  67. package/dist/devices/wo-rgbic-bulb.js +84 -0
  68. package/dist/devices/wo-rgbic-bulb.js.map +1 -0
  69. package/dist/index.d.ts +2 -0
  70. package/dist/index.d.ts.map +1 -1
  71. package/dist/index.js +2 -0
  72. package/dist/index.js.map +1 -1
  73. package/dist/settings.d.ts +17 -0
  74. package/dist/settings.d.ts.map +1 -1
  75. package/dist/settings.js +18 -1
  76. package/dist/settings.js.map +1 -1
  77. package/dist/switchbot.d.ts +7 -0
  78. package/dist/switchbot.d.ts.map +1 -1
  79. package/dist/switchbot.js +109 -40
  80. package/dist/switchbot.js.map +1 -1
  81. package/dist/types/ble.d.ts +20 -1
  82. package/dist/types/ble.d.ts.map +1 -1
  83. package/dist/types/ble.js.map +1 -1
  84. package/dist/types/device.d.ts +30 -3
  85. package/dist/types/device.d.ts.map +1 -1
  86. package/dist/types/index.d.ts +22 -0
  87. package/dist/types/index.d.ts.map +1 -1
  88. package/dist/types/index.js.map +1 -1
  89. package/dist/utils/bot-ble.d.ts +36 -0
  90. package/dist/utils/bot-ble.d.ts.map +1 -0
  91. package/dist/utils/bot-ble.js +109 -0
  92. package/dist/utils/bot-ble.js.map +1 -0
  93. package/dist/utils/circuit-breaker.d.ts +98 -0
  94. package/dist/utils/circuit-breaker.d.ts.map +1 -0
  95. package/dist/utils/circuit-breaker.js +187 -0
  96. package/dist/utils/circuit-breaker.js.map +1 -0
  97. package/dist/utils/connection-tracker.d.ts +66 -0
  98. package/dist/utils/connection-tracker.d.ts.map +1 -0
  99. package/dist/utils/connection-tracker.js +184 -0
  100. package/dist/utils/connection-tracker.js.map +1 -0
  101. package/dist/utils/fallback-handler.d.ts +68 -0
  102. package/dist/utils/fallback-handler.d.ts.map +1 -0
  103. package/dist/utils/fallback-handler.js +131 -0
  104. package/dist/utils/fallback-handler.js.map +1 -0
  105. package/dist/utils/index.d.ts +10 -0
  106. package/dist/utils/index.d.ts.map +1 -1
  107. package/dist/utils/index.js +41 -4
  108. package/dist/utils/index.js.map +1 -1
  109. package/dist/utils/retry.d.ts +55 -0
  110. package/dist/utils/retry.d.ts.map +1 -0
  111. package/dist/utils/retry.js +95 -0
  112. package/dist/utils/retry.js.map +1 -0
  113. package/docs/assets/hierarchy.js +1 -1
  114. package/docs/assets/navigation.js +1 -1
  115. package/docs/assets/search.js +1 -1
  116. package/docs/classes/APIError.html +2 -2
  117. package/docs/classes/APINotAvailableError.html +2 -2
  118. package/docs/classes/BLEConnection.html +16 -10
  119. package/docs/classes/BLENotAvailableError.html +2 -2
  120. package/docs/classes/BLEScanner.html +11 -9
  121. package/docs/classes/CommandFailedError.html +2 -2
  122. package/docs/classes/ConnectionTimeoutError.html +2 -2
  123. package/docs/classes/DeviceManager.html +13 -13
  124. package/docs/classes/DeviceNotFoundError.html +2 -2
  125. package/docs/classes/DeviceOverrideStateDuringConnection.html +56 -0
  126. package/docs/classes/DiscoveryError.html +2 -2
  127. package/docs/classes/OpenAPIClient.html +24 -24
  128. package/docs/classes/SequenceDevice.html +58 -0
  129. package/docs/classes/SwitchBot.html +12 -11
  130. package/docs/classes/SwitchBotDevice.html +43 -15
  131. package/docs/classes/SwitchBotError.html +2 -2
  132. package/docs/classes/ValidationError.html +2 -2
  133. package/docs/classes/WoAirPurifier.html +48 -18
  134. package/docs/classes/WoAirPurifierTable.html +48 -18
  135. package/docs/classes/WoBlindTilt.html +48 -20
  136. package/docs/classes/WoBulb.html +52 -19
  137. package/docs/classes/WoCeilingLight.html +52 -19
  138. package/docs/classes/WoContact.html +42 -14
  139. package/docs/classes/WoCurtain.html +46 -18
  140. package/docs/classes/WoHand.html +63 -19
  141. package/docs/classes/WoHub2.html +42 -14
  142. package/docs/classes/WoHub3.html +42 -14
  143. package/docs/classes/WoHumi.html +46 -18
  144. package/docs/classes/WoHumi2.html +46 -18
  145. package/docs/classes/WoIOSensorTH.html +42 -14
  146. package/docs/classes/WoKeypad.html +42 -14
  147. package/docs/classes/WoLeak.html +42 -14
  148. package/docs/classes/WoPlugMiniJP.html +45 -17
  149. package/docs/classes/WoPlugMiniUS.html +45 -17
  150. package/docs/classes/WoPresence.html +42 -14
  151. package/docs/classes/WoRelaySwitch1.html +47 -17
  152. package/docs/classes/WoRelaySwitch1PM.html +47 -17
  153. package/docs/classes/WoRemote.html +42 -14
  154. package/docs/classes/WoSensorTH.html +42 -14
  155. package/docs/classes/WoSensorTHPlus.html +42 -14
  156. package/docs/classes/WoSensorTHPro.html +42 -14
  157. package/docs/classes/WoSensorTHProCO2.html +42 -14
  158. package/docs/classes/WoSmartLock.html +49 -16
  159. package/docs/classes/WoSmartLockPro.html +52 -17
  160. package/docs/classes/WoStrip.html +52 -19
  161. package/docs/enums/LogLevel.html +2 -2
  162. package/docs/enums/SwitchBotBLEModel.html +2 -2
  163. package/docs/enums/SwitchBotBLEModelName.html +2 -2
  164. package/docs/functions/updateBaseURL.html +1 -1
  165. package/docs/hierarchy.html +1 -1
  166. package/docs/index.html +2 -2
  167. package/docs/interfaces/APICommandRequest.html +2 -2
  168. package/docs/interfaces/APICommandResponse.html +2 -2
  169. package/docs/interfaces/APIDevice.html +2 -2
  170. package/docs/interfaces/APIDeviceStatus.html +2 -2
  171. package/docs/interfaces/APIErrorResponse.html +2 -2
  172. package/docs/interfaces/APIResponse.html +2 -2
  173. package/docs/interfaces/AirPurifierCommands.html +2 -2
  174. package/docs/interfaces/AirPurifierServiceData.html +20 -5
  175. package/docs/interfaces/AirPurifierStatus.html +7 -7
  176. package/docs/interfaces/BLEAdvertisement.html +3 -2
  177. package/docs/interfaces/BLEScanOptions.html +5 -5
  178. package/docs/interfaces/BLEServiceData.html +22 -5
  179. package/docs/interfaces/BlindTiltCommands.html +2 -2
  180. package/docs/interfaces/BlindTiltServiceData.html +21 -5
  181. package/docs/interfaces/BlindTiltStatus.html +6 -6
  182. package/docs/interfaces/BotCommands.html +6 -2
  183. package/docs/interfaces/BotServiceData.html +20 -5
  184. package/docs/interfaces/BotStatus.html +6 -6
  185. package/docs/interfaces/BulbCommands.html +4 -2
  186. package/docs/interfaces/BulbServiceData.html +21 -5
  187. package/docs/interfaces/BulbStatus.html +6 -6
  188. package/docs/interfaces/CeilingLightCommands.html +4 -2
  189. package/docs/interfaces/CeilingLightServiceData.html +21 -5
  190. package/docs/interfaces/CeilingLightStatus.html +6 -6
  191. package/docs/interfaces/CommandResult.html +6 -6
  192. package/docs/interfaces/ContactServiceData.html +22 -5
  193. package/docs/interfaces/ContactStatus.html +6 -6
  194. package/docs/interfaces/CurtainCommands.html +2 -2
  195. package/docs/interfaces/CurtainServiceData.html +22 -5
  196. package/docs/interfaces/CurtainStatus.html +6 -6
  197. package/docs/interfaces/DeviceInfo.html +23 -13
  198. package/docs/interfaces/DeviceListResponse.html +2 -2
  199. package/docs/interfaces/DeviceStatus.html +6 -6
  200. package/docs/interfaces/DiscoveryOptions.html +7 -7
  201. package/docs/interfaces/HubServiceData.html +22 -5
  202. package/docs/interfaces/HubStatus.html +6 -6
  203. package/docs/interfaces/HumidifierCommands.html +2 -2
  204. package/docs/interfaces/HumidifierServiceData.html +23 -6
  205. package/docs/interfaces/HumidifierStatus.html +6 -6
  206. package/docs/interfaces/KeypadStatus.html +6 -6
  207. package/docs/interfaces/LeakServiceData.html +22 -5
  208. package/docs/interfaces/LeakStatus.html +6 -6
  209. package/docs/interfaces/LockCommands.html +6 -2
  210. package/docs/interfaces/LockServiceData.html +20 -6
  211. package/docs/interfaces/LockStatus.html +6 -6
  212. package/docs/interfaces/MeterServiceData.html +22 -5
  213. package/docs/interfaces/MeterStatus.html +6 -6
  214. package/docs/interfaces/MotionServiceData.html +22 -5
  215. package/docs/interfaces/MotionStatus.html +6 -6
  216. package/docs/interfaces/PlugCommands.html +2 -2
  217. package/docs/interfaces/PlugServiceData.html +21 -5
  218. package/docs/interfaces/PlugStatus.html +6 -6
  219. package/docs/interfaces/PresenceServiceData.html +22 -5
  220. package/docs/interfaces/PresenceStatus.html +6 -6
  221. package/docs/interfaces/RelaySwitchCommands.html +2 -2
  222. package/docs/interfaces/RelaySwitchServiceData.html +21 -5
  223. package/docs/interfaces/RelaySwitchStatus.html +6 -6
  224. package/docs/interfaces/RemoteStatus.html +6 -6
  225. package/docs/interfaces/SceneListResponse.html +2 -2
  226. package/docs/interfaces/StripCommands.html +4 -2
  227. package/docs/interfaces/StripServiceData.html +21 -5
  228. package/docs/interfaces/StripStatus.html +6 -6
  229. package/docs/interfaces/SwitchBotConfig.html +21 -9
  230. package/docs/interfaces/WebhookConfig.html +2 -2
  231. package/docs/interfaces/WebhookDetails.html +2 -2
  232. package/docs/interfaces/WebhookQueryResponse.html +2 -2
  233. package/docs/interfaces/WebhookSetupResponse.html +2 -2
  234. package/docs/media/BLE.md +117 -4
  235. package/docs/modules.html +1 -1
  236. package/docs/types/ConnectionType.html +1 -1
  237. package/docs/types/PhysicalDeviceType.html +1 -1
  238. package/docs/types/VirtualDeviceType.html +1 -1
  239. package/docs/variables/urls.html +1 -1
  240. package/package.json +12 -8
  241. package/tmp-switchbot-scan.mjs +79 -0
  242. package/todo/PYSWITCHBOT_COMPARISON.md +484 -0
  243. package/todo/README.md +68 -0
  244. package/todo/completed.md +134 -0
  245. package/todo/todo.md +296 -0
  246. package/tsconfig.build.json +17 -0
  247. package/PRODUCTION_READY.md +0 -135
@@ -21,11 +21,25 @@ Always reference these instructions first and fallback to search or bash command
21
21
  - **Use lint:fix for automatic fixes**: `npm run lint:fix` to automatically fix ESLint issues
22
22
 
23
23
  ### Platform Requirements and Constraints
24
- - **BLE functionality requires Linux-based OS only** (Raspbian, Ubuntu, etc.)
25
- - **Windows and macOS are NOT supported** for BLE operations (use OpenAPI instead)
24
+ - **BLE functionality requires Linux or macOS** (Raspbian, Ubuntu, macOS, etc.)
25
+ - **Windows is NOT supported** for BLE operations (use OpenAPI instead)
26
26
  - **Node.js versions**: Must use ^20, ^22, or ^24 (currently using v20.19.4)
27
27
  - **ES Modules**: This project uses `"type": "module"` - always use ES import/export syntax
28
28
 
29
+ #### BLE Prerequisites
30
+
31
+ **macOS:**
32
+ - Xcode installed
33
+ - Bluetooth permissions enabled for terminal app in System Preferences
34
+
35
+ **Linux (Ubuntu/Debian/Raspbian):**
36
+ - Required packages: `sudo apt-get install bluetooth bluez libbluetooth-dev libudev-dev`
37
+ - For non-root access: `sudo setcap cap_net_raw+eip $(eval readlink -f \`which node\`)`
38
+ - Raspberry Pi: May need to disable pnat plugin in `/etc/bluetooth/main.conf`
39
+
40
+ **Linux (Fedora/RPM):**
41
+ - Required packages: `sudo yum install bluez bluez-libs bluez-libs-devel`
42
+
29
43
  ### Testing and Validation
30
44
  - **Basic functionality test**: After any changes to core classes, run this validation:
31
45
  ```javascript
@@ -116,9 +130,9 @@ Always reference these instructions first and fallback to search or bash command
116
130
  ## Troubleshooting Common Issues
117
131
 
118
132
  ### BLE Not Working
119
- - **Check OS**: BLE only works on Linux-based systems
133
+ - **Check OS**: BLE works on Linux and macOS systems only
120
134
  - **Install noble prerequisites**: May need additional system libraries for @stoprocent/noble
121
- - **Use OpenAPI instead**: For Windows/macOS development, use SwitchBotOpenAPI class
135
+ - **Use OpenAPI instead**: For Windows development, use SwitchBotOpenAPI class
122
136
 
123
137
  ### Build Failures
124
138
  - **Check Node.js version**: Must be ^20, ^22, or ^24
@@ -156,7 +170,7 @@ npm run watch # Build and link for development
156
170
  - **Type definitions**: All device status and response types
157
171
 
158
172
  ### Dependencies Summary
159
- - **@stoprocent/noble**: BLE functionality (Linux only)
173
+ - **@stoprocent/noble**: BLE functionality (Linux/macOS)
160
174
  - **undici**: HTTP client for API requests
161
175
  - **async-mutex**: Concurrency control
162
176
  - **TypeScript**: Language and compilation
package/BLE.md CHANGED
@@ -59,13 +59,61 @@ The `SwitchBot` class allows you to interact with SwitchBot devices using the Sw
59
59
 
60
60
  ### Supported OS
61
61
 
62
- The node-switchbot supports only Linux-based OSes, such as Raspbian, Ubuntu, and so on. This module does not support Windows and macOS for now. (If [@stoprocent/noble](https://github.com/stoprocent/noble#readme) is installed properly, this module might work well on such OSes.)
62
+ The node-switchbot supports Linux-based OSes (such as Raspbian, Ubuntu) and macOS. Windows is not currently supported. BLE functionality requires [@stoprocent/noble](https://github.com/stoprocent/noble#readme) which works natively on Linux and macOS.
63
63
 
64
64
  ### Dependencies
65
65
 
66
- - [Node.js](https://nodejs.org/en/): ^20
67
- - [@stoprocent/noble](https://github.com/stoprocent/noble)
68
- - Included as a dependency so no need to install manually however if for some reason your OS requires addtional libaries, see `@stoprocent/noble` [prerequisites](https://github.com/stoprocent/noble?tab=readme-ov-file#prerequisites), you will then need to reinstall `node-switchbot` or the package that you have `node-swtichbot` as a dependency.
66
+ - [Node.js](https://nodejs.org/en/): ^20 || ^22 || ^24
67
+ - [@stoprocent/noble](https://github.com/stoprocent/noble) - Included as a dependency
68
+
69
+ ### Prerequisites
70
+
71
+ #### macOS
72
+
73
+ - **Xcode**: Install from the App Store
74
+ - **Bluetooth Permissions**: On newer versions of macOS, allow Bluetooth access for your terminal app:
75
+ 1. Open "System Preferences" → "Security & Privacy" → "Privacy" → "Bluetooth"
76
+ 2. Add and enable your terminal application (Terminal.app, iTerm.app, etc.)
77
+
78
+ #### Linux (Ubuntu, Debian, Raspbian)
79
+
80
+ - **Kernel**: Version 3.6 or above
81
+ - **Required Packages**:
82
+
83
+ ```bash
84
+ sudo apt-get install bluetooth bluez libbluetooth-dev libudev-dev
85
+ ```
86
+
87
+ - **Node Path**: Ensure `node` is on your PATH
88
+
89
+ ```bash
90
+ # If needed, symlink nodejs to node
91
+ sudo ln -s /usr/bin/nodejs /usr/bin/node
92
+ ```
93
+
94
+ - **Running without sudo** (Recommended):
95
+
96
+ ```bash
97
+ sudo setcap cap_net_raw+eip $(eval readlink -f `which node`)
98
+ ```
99
+
100
+ This grants the `node` binary `cap_net_raw` privileges for BLE operations.
101
+
102
+ Required package: `sudo apt-get install libcap2-bin`
103
+
104
+ - **Raspberry Pi Specific**: If having trouble connecting to BLE devices, disable the `pnat` plugin by adding this line to `/etc/bluetooth/main.conf`:
105
+ ```
106
+ DisablePlugins=pnat
107
+ ```
108
+ Then restart the system.
109
+
110
+ #### Linux (Fedora and RPM-based)
111
+
112
+ ```bash
113
+ sudo yum install bluez bluez-libs bluez-libs-devel
114
+ ```
115
+
116
+ See [@stoprocent/noble prerequisites](https://github.com/stoprocent/noble?tab=readme-ov-file#prerequisites) for more detailed platform-specific instructions.
69
117
 
70
118
  ### Importing and Setting Up
71
119
 
@@ -587,6 +635,71 @@ switchbot
587
635
  });
588
636
  ```
589
637
 
638
+ #### Password Protection
639
+
640
+ The Bot (WoHand) supports password protection via BLE to prevent unauthorized control. When a password is set, all BLE commands (press, turnOn, turnOff, up, down) will be automatically encrypted.
641
+
642
+ **Password Requirements:**
643
+
644
+ - Exactly 4 characters
645
+ - Alphanumeric only (letters and numbers)
646
+ - Case-sensitive
647
+
648
+ **Setting a Password:**
649
+
650
+ ```typescript
651
+ // Using device options during construction
652
+ const bot = new WoHand({
653
+ id: 'c1:2e:45:3e:20:08',
654
+ password: 'A1b2' // Your 4-character password
655
+ })
656
+
657
+ // Or set/change password on existing device
658
+ await bot.setPassword('A1b2')
659
+ ```
660
+
661
+ **Clearing a Password:**
662
+
663
+ ```typescript
664
+ // Remove password protection
665
+ await bot.clearPassword()
666
+ ```
667
+
668
+ **Checking Password Status:**
669
+
670
+ ```typescript
671
+ // Check if device has password configured
672
+ if (bot.hasPassword()) {
673
+ console.log('Device is password protected')
674
+ }
675
+ ```
676
+
677
+ **Example with Password:**
678
+
679
+ ```typescript
680
+ switchbot
681
+ .discover({ model: 'H', quick: true })
682
+ .then((device_list) => {
683
+ const bot = device_list[0]
684
+ // Set password for protected Bot
685
+ bot.setPassword('MyP4')
686
+ return bot.press()
687
+ })
688
+ .then(() => {
689
+ console.log('Password-protected Bot pressed successfully')
690
+ })
691
+ .catch((error) => {
692
+ console.error(error)
693
+ })
694
+ ```
695
+
696
+ **Notes:**
697
+
698
+ - Password encryption uses CRC32 checksums for secure command transmission
699
+ - All control methods (press, turnOn, turnOff, up, down) automatically use encrypted commands when password is set
700
+ - Password is stored in memory only and must be set each time the application starts
701
+ - If the wrong password is configured, BLE commands will fail silently (Bot will not respond)
702
+
590
703
  ### `WoCurtain` Object
591
704
 
592
705
  The `WoCurtain` object represents a Curtain, which is created through the discovery process triggered by the [`switchBotBLE.discover()`](#discover-method) method.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,51 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file. This project uses [Semantic Versioning](https://semver.org/)
4
4
 
5
+ ## [Unreleased]
6
+
7
+ ### Features
8
+
9
+ * **macOS BLE Support**: Enabled BLE functionality on macOS in addition to Linux
10
+ * Platform detection now includes macOS (darwin) using @stoprocent/noble
11
+ * BLE now works on Linux and macOS systems
12
+ * Windows remains unsupported for BLE operations
13
+
14
+ * **Bot Password Protection**: Added BLE password support for Bot (WoHand) devices
15
+ * Password encryption using CRC32 checksums
16
+ * Password validation (4 alphanumeric characters, case-sensitive)
17
+ * Methods: `setPassword()`, `clearPassword()`, `hasPassword()`
18
+ * Automatic encrypted command execution when password is set
19
+ * Example: `examples/bot-password.js`
20
+ * Based on [homebridge-switchbot PR #1337](https://github.com/OpenWonderLabs/homebridge-switchbot/pull/1337)
21
+
22
+ * **Advanced Resilience Features**: Enterprise-grade reliability enhancements
23
+ * Retry logic with exponential backoff and jitter (RetryExecutor)
24
+ * Circuit breaker pattern to prevent cascading failures (CLOSED/OPEN/HALF_OPEN states)
25
+ * Connection intelligence tracking per-device success/failure rates
26
+ * Custom fallback handler system with built-in logging, metrics, and alerting handlers
27
+ * Intelligent connection selection based on historical performance
28
+
29
+ ### Documentation
30
+
31
+ * Added password protection section to [BLE.md](BLE.md)
32
+ * Updated [README.md](README.md) with password examples
33
+ * Created comprehensive password protection example
34
+ * Updated examples index with bot-password.js
35
+ * Updated platform support documentation to reflect macOS BLE support
36
+ * Updated all "Linux-only" references to "Linux/macOS"
37
+ * **Added comprehensive prerequisites section** for BLE setup on macOS and Linux
38
+ * macOS: Xcode and Bluetooth permissions requirements
39
+ * Linux: System packages, non-root setup, and Raspberry Pi specific notes
40
+ * Based on [@stoprocent/noble prerequisites](https://github.com/stoprocent/noble?tab=readme-ov-file#prerequisites)
41
+
42
+ ### Tests
43
+
44
+ * Added 14 comprehensive password protection tests
45
+ * All 54 tests passing (up from 40 in v4.0.0)
46
+ * Validation of CRC32 encryption, command building, and response parsing
47
+
48
+ ---
49
+
5
50
  ## [4.0.0](https://github.com/OpenWonderLabs/node-switchbot/compare/v3.6.6...v4.0.0) (2026-03-03)
6
51
 
7
52
  ### ⚠ BREAKING CHANGES
package/README.md CHANGED
@@ -39,7 +39,7 @@ import { SwitchBot } from 'node-switchbot'
39
39
  const switchbot = new SwitchBot({
40
40
  token: 'YOUR_TOKEN', // OpenAPI token (optional for BLE-only)
41
41
  secret: 'YOUR_SECRET', // OpenAPI secret (optional for BLE-only)
42
- enableBLE: true, // Enable BLE discovery (Linux only)
42
+ enableBLE: true, // Enable BLE discovery (Linux/macOS)
43
43
  enableFallback: true, // Auto-fallback between BLE/API
44
44
  })
45
45
 
@@ -66,6 +66,12 @@ await bot.turnOn()
66
66
  await bot.turnOff()
67
67
  await bot.press()
68
68
 
69
+ // Bot with Password Protection (BLE only)
70
+ const protectedBot = new WoHand({ id: 'YOUR_BOT_ID', password: 'A1b2' })
71
+ await protectedBot.setPassword('A1b2') // Set 4-char alphanumeric password
72
+ await protectedBot.press() // Commands are automatically encrypted
73
+ await protectedBot.clearPassword() // Remove password protection
74
+
69
75
  // Curtain - Position control
70
76
  await curtain.open()
71
77
  await curtain.close()
package/dist/api.d.ts CHANGED
@@ -73,10 +73,10 @@ export declare class OpenAPIClient {
73
73
  /**
74
74
  * Curtain-specific commands
75
75
  */
76
- curtainOpen(deviceId: string): Promise<APICommandResponse>;
77
- curtainClose(deviceId: string): Promise<APICommandResponse>;
76
+ curtainOpen(deviceId: string, speed?: number): Promise<APICommandResponse>;
77
+ curtainClose(deviceId: string, speed?: number): Promise<APICommandResponse>;
78
78
  curtainPause(deviceId: string): Promise<APICommandResponse>;
79
- curtainSetPosition(deviceId: string, position: number): Promise<APICommandResponse>;
79
+ curtainSetPosition(deviceId: string, position: number, speed?: number): Promise<APICommandResponse>;
80
80
  /**
81
81
  * Lock-specific commands
82
82
  */
package/dist/api.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
package/dist/api.js CHANGED
@@ -176,17 +176,20 @@ export class OpenAPIClient {
176
176
  /**
177
177
  * Curtain-specific commands
178
178
  */
179
- async curtainOpen(deviceId) {
180
- return this.sendCommand(deviceId, 'setPosition', '0,ff,0');
179
+ async curtainOpen(deviceId, speed = 255) {
180
+ const clampedSpeed = Math.min(255, Math.max(1, speed));
181
+ return this.sendCommand(deviceId, 'setPosition', `0,${clampedSpeed.toString(16).padStart(2, '0')},0`);
181
182
  }
182
- async curtainClose(deviceId) {
183
- return this.sendCommand(deviceId, 'setPosition', '0,ff,100');
183
+ async curtainClose(deviceId, speed = 255) {
184
+ const clampedSpeed = Math.min(255, Math.max(1, speed));
185
+ return this.sendCommand(deviceId, 'setPosition', `0,${clampedSpeed.toString(16).padStart(2, '0')},100`);
184
186
  }
185
187
  async curtainPause(deviceId) {
186
188
  return this.sendCommand(deviceId, 'pause');
187
189
  }
188
- async curtainSetPosition(deviceId, position) {
189
- return this.sendCommand(deviceId, 'setPosition', `0,ff,${position}`);
190
+ async curtainSetPosition(deviceId, position, speed = 255) {
191
+ const clampedSpeed = Math.min(255, Math.max(1, speed));
192
+ return this.sendCommand(deviceId, 'setPosition', `0,${clampedSpeed.toString(16).padStart(2, '0')},${position}`);
190
193
  }
191
194
  /**
192
195
  * Lock-specific commands
package/dist/api.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
package/dist/ble.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type { Buffer } from 'node:buffer';
1
+ import { Buffer } from 'node:buffer';
2
2
  import type { BLEAdvertisement, BLEScanOptions } from './types/ble.js';
3
3
  import { EventEmitter } from 'node:events';
4
4
  /**
@@ -9,6 +9,11 @@ export declare class BLEScanner extends EventEmitter {
9
9
  private logger;
10
10
  private scanning;
11
11
  private discoveredDevices;
12
+ private discoveredModelCache;
13
+ private nobleStateHandler?;
14
+ private nobleDiscoverHandler?;
15
+ private nobleScanStartHandler?;
16
+ private nobleScanStopHandler?;
12
17
  private noblePromise;
13
18
  constructor(options?: {
14
19
  noble?: any;
@@ -26,6 +31,10 @@ export declare class BLEScanner extends EventEmitter {
26
31
  * Setup Noble event handlers
27
32
  */
28
33
  private setupNobleHandlers;
34
+ /**
35
+ * Remove Noble event handlers
36
+ */
37
+ private removeNobleHandlers;
29
38
  /**
30
39
  * Handle device discovery
31
40
  */
@@ -42,14 +51,18 @@ export declare class BLEScanner extends EventEmitter {
42
51
  * Stop scanning
43
52
  */
44
53
  stopScan(): void;
54
+ /**
55
+ * Cleanup all resources
56
+ */
57
+ destroy(): void;
45
58
  /**
46
59
  * Get all discovered devices
47
60
  */
48
61
  getDiscoveredDevices(): BLEAdvertisement[];
49
62
  /**
50
- * Get discovered device by MAC
63
+ * Get discovered device by MAC or BLE ID
51
64
  */
52
- getDevice(mac: string): BLEAdvertisement | undefined;
65
+ getDevice(mac: string, bleId?: string): BLEAdvertisement | undefined;
53
66
  /**
54
67
  * Check if currently scanning
55
68
  */
@@ -57,7 +70,7 @@ export declare class BLEScanner extends EventEmitter {
57
70
  /**
58
71
  * Wait for specific device
59
72
  */
60
- waitForDevice(mac: string, timeoutMs?: number): Promise<BLEAdvertisement>;
73
+ waitForDevice(mac: string, timeoutMs?: number, bleId?: string): Promise<BLEAdvertisement>;
61
74
  }
62
75
  /**
63
76
  * BLE Connection for communicating with SwitchBot devices
@@ -67,6 +80,11 @@ export declare class BLEConnection {
67
80
  private logger;
68
81
  private connections;
69
82
  private characteristics;
83
+ private disconnectTimers;
84
+ private operationLocks;
85
+ private encryptionConfig;
86
+ private notificationHandlers;
87
+ private persistentConnectionMs;
70
88
  private noblePromise;
71
89
  constructor(options?: {
72
90
  noble?: any;
@@ -80,6 +98,22 @@ export declare class BLEConnection {
80
98
  * Ensure Noble is loaded before operations
81
99
  */
82
100
  private ensureNoble;
101
+ private withMacLock;
102
+ private clearDisconnectTimer;
103
+ private scheduleDisconnect;
104
+ setPersistentConnectionTimeout(timeoutMs: number): void;
105
+ setEncryption(mac: string, keyHex: string, ivHex: string, mode?: 'auto' | 'ctr' | 'gcm'): void;
106
+ clearEncryption(mac: string): void;
107
+ private incrementIv;
108
+ private encryptIfConfigured;
109
+ private validateCommandResult;
110
+ sendCommand(mac: string, data: Buffer, options?: {
111
+ expectResponse?: boolean;
112
+ validateResponse?: boolean;
113
+ responseTimeoutMs?: number;
114
+ }): Promise<Buffer | undefined>;
115
+ subscribeNotifications(mac: string, handler: (payload: Buffer) => void): Promise<void>;
116
+ unsubscribeNotifications(mac: string, handler: (payload: Buffer) => void): void;
83
117
  /**
84
118
  * Connect to a device
85
119
  */
package/dist/ble.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"ble.d.ts","sourceRoot":"","sources":["../src/ble.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEzC,OAAO,KAAK,EAAE,gBAAgB,EAAE,cAAc,EAAkB,MAAM,gBAAgB,CAAA;AAEtF,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAM1C;;GAEG;AACH,qBAAa,UAAW,SAAQ,YAAY;IAC1C,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,QAAQ,CAAQ;IACxB,OAAO,CAAC,iBAAiB,CAA2C;IACpE,OAAO,CAAC,YAAY,CAA4B;gBAEpC,OAAO,GAAE;QAAE,KAAK,CAAC,EAAE,GAAG,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAO;IAc5D;;OAEG;YACW,eAAe;IAwB7B;;OAEG;YACW,WAAW;IAMzB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA2B1B;;OAEG;IACH,OAAO,CAAC,eAAe;IAsCvB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAiCxB;;OAEG;IACG,SAAS,CAAC,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAkC5D;;OAEG;IACH,QAAQ,IAAI,IAAI;IAMhB;;OAEG;IACH,oBAAoB,IAAI,gBAAgB,EAAE;IAI1C;;OAEG;IACH,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS;IAIpD;;OAEG;IACH,UAAU,IAAI,OAAO;IAIrB;;OAEG;IACG,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,SAAmB,GAAG,OAAO,CAAC,gBAAgB,CAAC;CAwB1F;AAED;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,WAAW,CAA8B;IACjD,OAAO,CAAC,eAAe,CAAsD;IAC7E,OAAO,CAAC,YAAY,CAA4B;gBAEpC,OAAO,GAAE;QAAE,KAAK,CAAC,EAAE,GAAG,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAO;IAW5D;;OAEG;YACW,eAAe;IAuB7B;;OAEG;YACW,WAAW;IAMzB;;OAEG;IACG,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA0CzC;;OAEG;YACW,uBAAuB;IA8BrC;;OAEG;IACG,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkB5C;;OAEG;IACG,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA8BrD;;OAEG;IACG,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA8BxC;;OAEG;IACH,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIjC;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAKpC;;OAEG;IACH,kBAAkB,IAAI,MAAM;CAG7B"}
1
+ {"version":3,"file":"ble.d.ts","sourceRoot":"","sources":["../src/ble.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEpC,OAAO,KAAK,EAAE,gBAAgB,EAAE,cAAc,EAAkB,MAAM,gBAAgB,CAAA;AAGtF,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAM1C;;GAEG;AACH,qBAAa,UAAW,SAAQ,YAAY;IAC1C,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,QAAQ,CAAQ;IACxB,OAAO,CAAC,iBAAiB,CAA2C;IACpE,OAAO,CAAC,oBAAoB,CAAiC;IAC7D,OAAO,CAAC,iBAAiB,CAAC,CAAyB;IACnD,OAAO,CAAC,oBAAoB,CAAC,CAA2B;IACxD,OAAO,CAAC,qBAAqB,CAAC,CAAY;IAC1C,OAAO,CAAC,oBAAoB,CAAC,CAAY;IACzC,OAAO,CAAC,YAAY,CAA4B;gBAEpC,OAAO,GAAE;QAAE,KAAK,CAAC,EAAE,GAAG,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAO;IAc5D;;OAEG;YACW,eAAe;IA4B7B;;OAEG;YACW,WAAW;IAUzB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAoC1B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAoB3B;;OAEG;IACH,OAAO,CAAC,eAAe;IAyFvB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IA4ExB;;OAEG;IACG,SAAS,CAAC,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAwC5D;;OAEG;IACH,QAAQ,IAAI,IAAI;IAMhB;;OAEG;IACH,OAAO,IAAI,IAAI;IAOf;;OAEG;IACH,oBAAoB,IAAI,gBAAgB,EAAE;IAI1C;;OAEG;IACH,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS;IAepE;;OAEG;IACH,UAAU,IAAI,OAAO;IAIrB;;OAEG;IACG,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,SAAmB,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;CA2B1G;AAED;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,WAAW,CAA8B;IACjD,OAAO,CAAC,eAAe,CAAsD;IAC7E,OAAO,CAAC,gBAAgB,CAAyC;IACjE,OAAO,CAAC,cAAc,CAAwC;IAC9D,OAAO,CAAC,gBAAgB,CAA2E;IACnG,OAAO,CAAC,oBAAoB,CAAyD;IACrF,OAAO,CAAC,sBAAsB,CAAO;IACrC,OAAO,CAAC,YAAY,CAA4B;gBAEpC,OAAO,GAAE;QAAE,KAAK,CAAC,EAAE,GAAG,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAO;IAW5D;;OAEG;YACW,eAAe;IA2B7B;;OAEG;YACW,WAAW;YAUX,WAAW;IAsBzB,OAAO,CAAC,oBAAoB;IAQ5B,OAAO,CAAC,kBAAkB;IAU1B,8BAA8B,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAIvD,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE,MAAM,GAAG,KAAK,GAAG,KAAc,GAAG,IAAI;IAqBtG,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAIlC,OAAO,CAAC,WAAW;IAanB,OAAO,CAAC,mBAAmB;IAuB3B,OAAO,CAAC,qBAAqB;IAmBvB,WAAW,CACf,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE;QACP,cAAc,CAAC,EAAE,OAAO,CAAA;QACxB,gBAAgB,CAAC,EAAE,OAAO,CAAA;QAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAA;KACtB,GACL,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IA8BxB,sBAAsB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IA2C5F,wBAAwB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI;IAa/E;;OAEG;IACG,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAoEzC;;OAEG;YACW,uBAAuB;IA8BrC;;OAEG;IACG,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAqB5C;;OAEG;IACG,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA+BrD;;OAEG;IACG,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA+BxC;;OAEG;IACH,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIjC;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAKpC;;OAEG;IACH,kBAAkB,IAAI,MAAM;CAG7B"}