node-switchbot 2.5.0-beta.9 → 3.0.0

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 (340) hide show
  1. package/.github/workflows/beta-release.yml +25 -2
  2. package/.github/workflows/release.yml +13 -0
  3. package/BLE.md +1144 -0
  4. package/CHANGELOG.md +14 -0
  5. package/OpenAPI.md +185 -0
  6. package/README.md +20 -1189
  7. package/branding/Node_x_SwitchBot.svg +9 -0
  8. package/branding/icon.png +0 -0
  9. package/branding/switchbot.png +0 -0
  10. package/dist/advertising.d.ts +3 -3
  11. package/dist/advertising.d.ts.map +1 -1
  12. package/dist/advertising.js +26 -26
  13. package/dist/advertising.js.map +1 -1
  14. package/dist/device/woblindtilt.d.ts +19 -50
  15. package/dist/device/woblindtilt.d.ts.map +1 -1
  16. package/dist/device/woblindtilt.js +41 -100
  17. package/dist/device/woblindtilt.js.map +1 -1
  18. package/dist/device/wobulb.d.ts +41 -15
  19. package/dist/device/wobulb.d.ts.map +1 -1
  20. package/dist/device/wobulb.js +72 -128
  21. package/dist/device/wobulb.js.map +1 -1
  22. package/dist/device/woceilinglight.d.ts +47 -21
  23. package/dist/device/woceilinglight.d.ts.map +1 -1
  24. package/dist/device/woceilinglight.js +96 -171
  25. package/dist/device/woceilinglight.js.map +1 -1
  26. package/dist/device/wocontact.d.ts +11 -1
  27. package/dist/device/wocontact.d.ts.map +1 -1
  28. package/dist/device/wocontact.js +23 -22
  29. package/dist/device/wocontact.js.map +1 -1
  30. package/dist/device/wocurtain.d.ts +39 -1
  31. package/dist/device/wocurtain.d.ts.map +1 -1
  32. package/dist/device/wocurtain.js +69 -103
  33. package/dist/device/wocurtain.js.map +1 -1
  34. package/dist/device/wohand.d.ts +37 -2
  35. package/dist/device/wohand.d.ts.map +1 -1
  36. package/dist/device/wohand.js +55 -89
  37. package/dist/device/wohand.js.map +1 -1
  38. package/dist/device/wohub2.d.ts +11 -1
  39. package/dist/device/wohub2.d.ts.map +1 -1
  40. package/dist/device/wohub2.js +21 -29
  41. package/dist/device/wohub2.js.map +1 -1
  42. package/dist/device/wohumi.d.ts +37 -2
  43. package/dist/device/wohumi.d.ts.map +1 -1
  44. package/dist/device/wohumi.js +52 -83
  45. package/dist/device/wohumi.js.map +1 -1
  46. package/dist/device/woiosensorth.d.ts +12 -1
  47. package/dist/device/woiosensorth.d.ts.map +1 -1
  48. package/dist/device/woiosensorth.js +25 -29
  49. package/dist/device/woiosensorth.js.map +1 -1
  50. package/dist/device/woplugmini.d.ts +45 -12
  51. package/dist/device/woplugmini.d.ts.map +1 -1
  52. package/dist/device/woplugmini.js +71 -77
  53. package/dist/device/woplugmini.js.map +1 -1
  54. package/dist/device/wopresence.d.ts +11 -1
  55. package/dist/device/wopresence.d.ts.map +1 -1
  56. package/dist/device/wopresence.js +21 -27
  57. package/dist/device/wopresence.js.map +1 -1
  58. package/dist/device/wosensorth.d.ts +18 -2
  59. package/dist/device/wosensorth.d.ts.map +1 -1
  60. package/dist/device/wosensorth.js +34 -50
  61. package/dist/device/wosensorth.js.map +1 -1
  62. package/dist/device/wosmartlock.d.ts +63 -13
  63. package/dist/device/wosmartlock.d.ts.map +1 -1
  64. package/dist/device/wosmartlock.js +114 -195
  65. package/dist/device/wosmartlock.js.map +1 -1
  66. package/dist/device/wosmartlockpro.d.ts +16 -12
  67. package/dist/device/wosmartlockpro.d.ts.map +1 -1
  68. package/dist/device/wosmartlockpro.js +34 -29
  69. package/dist/device/wosmartlockpro.js.map +1 -1
  70. package/dist/device/wostrip.d.ts +4 -3
  71. package/dist/device/wostrip.d.ts.map +1 -1
  72. package/dist/device/wostrip.js +5 -4
  73. package/dist/device/wostrip.js.map +1 -1
  74. package/dist/device.d.ts +13 -5
  75. package/dist/device.d.ts.map +1 -1
  76. package/dist/device.js +13 -2
  77. package/dist/device.js.map +1 -1
  78. package/dist/index.d.ts +9 -1
  79. package/dist/index.d.ts.map +1 -1
  80. package/dist/index.js +9 -1
  81. package/dist/index.js.map +1 -1
  82. package/dist/parameter-checker.d.ts +10 -13
  83. package/dist/parameter-checker.d.ts.map +1 -1
  84. package/dist/parameter-checker.js +16 -1
  85. package/dist/parameter-checker.js.map +1 -1
  86. package/dist/settings.d.ts +41 -0
  87. package/dist/settings.d.ts.map +1 -1
  88. package/dist/settings.js +43 -0
  89. package/dist/settings.js.map +1 -1
  90. package/dist/{switchbot.d.ts → switchbot-ble.d.ts} +13 -8
  91. package/dist/switchbot-ble.d.ts.map +1 -0
  92. package/dist/switchbot-ble.js +427 -0
  93. package/dist/switchbot-ble.js.map +1 -0
  94. package/dist/switchbot-openapi.d.ts +131 -0
  95. package/dist/switchbot-openapi.d.ts.map +1 -0
  96. package/dist/switchbot-openapi.js +311 -0
  97. package/dist/switchbot-openapi.js.map +1 -0
  98. package/dist/test/advertising.test.d.ts +2 -0
  99. package/dist/test/advertising.test.d.ts.map +1 -0
  100. package/dist/test/advertising.test.js +99 -0
  101. package/dist/test/advertising.test.js.map +1 -0
  102. package/dist/test/device.test.d.ts +2 -0
  103. package/dist/test/device.test.d.ts.map +1 -0
  104. package/dist/test/device.test.js +38 -0
  105. package/dist/test/device.test.js.map +1 -0
  106. package/dist/test/index.test.d.ts +2 -0
  107. package/dist/test/index.test.d.ts.map +1 -0
  108. package/dist/test/index.test.js +35 -0
  109. package/dist/test/index.test.js.map +1 -0
  110. package/dist/test/parameter-checker.test.d.ts +2 -0
  111. package/dist/test/parameter-checker.test.d.ts.map +1 -0
  112. package/dist/test/parameter-checker.test.js +108 -0
  113. package/dist/test/parameter-checker.test.js.map +1 -0
  114. package/dist/test/settings.test.d.ts +2 -0
  115. package/dist/test/settings.test.d.ts.map +1 -0
  116. package/dist/test/settings.test.js +49 -0
  117. package/dist/test/settings.test.js.map +1 -0
  118. package/dist/test/switchbot-openapi.test.d.ts +2 -0
  119. package/dist/test/switchbot-openapi.test.d.ts.map +1 -0
  120. package/dist/test/switchbot-openapi.test.js +96 -0
  121. package/dist/test/switchbot-openapi.test.js.map +1 -0
  122. package/dist/test/switchbot.test.d.ts +2 -0
  123. package/dist/test/switchbot.test.d.ts.map +1 -0
  124. package/dist/test/switchbot.test.js +106 -0
  125. package/dist/test/switchbot.test.js.map +1 -0
  126. package/dist/test/woblindtilt.test.js +70 -20
  127. package/dist/test/woblindtilt.test.js.map +1 -1
  128. package/dist/test/wobulb.test.js +87 -44
  129. package/dist/test/wobulb.test.js.map +1 -1
  130. package/dist/test/woceilinglight.test.js +72 -54
  131. package/dist/test/woceilinglight.test.js.map +1 -1
  132. package/dist/test/wocontact.test.js +51 -20
  133. package/dist/test/wocontact.test.js.map +1 -1
  134. package/dist/test/wocurtain.test.js +65 -23
  135. package/dist/test/wocurtain.test.js.map +1 -1
  136. package/dist/test/wohand.test.js +34 -40
  137. package/dist/test/wohand.test.js.map +1 -1
  138. package/dist/test/wohub2.test.d.ts +2 -0
  139. package/dist/test/wohub2.test.d.ts.map +1 -0
  140. package/dist/test/wohub2.test.js +80 -0
  141. package/dist/test/wohub2.test.js.map +1 -0
  142. package/dist/test/wohumi.test.js +70 -49
  143. package/dist/test/wohumi.test.js.map +1 -1
  144. package/dist/test/woiosensorth.test.js +33 -32
  145. package/dist/test/woiosensorth.test.js.map +1 -1
  146. package/dist/test/woplugmini.test.js +80 -57
  147. package/dist/test/woplugmini.test.js.map +1 -1
  148. package/dist/test/wopresence.test.js +44 -18
  149. package/dist/test/wopresence.test.js.map +1 -1
  150. package/dist/test/wosensorth.test.js +44 -52
  151. package/dist/test/wosensorth.test.js.map +1 -1
  152. package/dist/test/wosmartlock.test.js +126 -59
  153. package/dist/test/wosmartlock.test.js.map +1 -1
  154. package/dist/test/wosmartlockpro.test.js +96 -69
  155. package/dist/test/wosmartlockpro.test.js.map +1 -1
  156. package/dist/test/wostrip.test.js +70 -83
  157. package/dist/test/wostrip.test.js.map +1 -1
  158. package/dist/types/bledevicestatus.d.ts +4 -12
  159. package/dist/types/bledevicestatus.d.ts.map +1 -1
  160. package/dist/types/devicelist.d.ts.map +1 -1
  161. package/dist/types/devicelist.js +0 -4
  162. package/dist/types/devicelist.js.map +1 -1
  163. package/dist/types/devicepush.d.ts +13 -0
  164. package/dist/types/devicepush.d.ts.map +1 -0
  165. package/dist/types/devicepush.js +2 -0
  166. package/dist/types/devicepush.js.map +1 -0
  167. package/dist/types/deviceresponse.d.ts +2 -3
  168. package/dist/types/deviceresponse.d.ts.map +1 -1
  169. package/dist/types/devicestatus.d.ts.map +1 -1
  170. package/dist/types/devicewebhookstatus.d.ts +32 -0
  171. package/dist/types/devicewebhookstatus.d.ts.map +1 -1
  172. package/dist/types/irdevicelist.d.ts.map +1 -1
  173. package/dist/types/types.d.ts +23 -0
  174. package/dist/types/types.d.ts.map +1 -1
  175. package/dist/types/types.js +14 -0
  176. package/dist/types/types.js.map +1 -1
  177. package/docs/assets/highlight.css +12 -47
  178. package/docs/assets/main.js +1 -1
  179. package/docs/assets/navigation.js +1 -1
  180. package/docs/assets/search.js +1 -1
  181. package/docs/classes/SwitchBotBLE.html +64 -0
  182. package/docs/classes/SwitchBotOpenAPI.html +47 -0
  183. package/docs/classes/SwitchbotDevice.html +32 -33
  184. package/docs/enums/LogLevel.html +10 -0
  185. package/docs/enums/SwitchBotBLEModel.html +2 -2
  186. package/docs/enums/SwitchBotBLEModelFriendlyName.html +2 -2
  187. package/docs/enums/SwitchBotBLEModelName.html +2 -2
  188. package/docs/enums/SwitchBotModel.html +2 -2
  189. package/docs/hierarchy.html +1 -0
  190. package/docs/index.html +16 -993
  191. package/docs/interfaces/Ad-1.html +5 -0
  192. package/docs/interfaces/AdvertisementData.html +3 -0
  193. package/docs/interfaces/Chars.html +4 -0
  194. package/docs/interfaces/ErrorObject.html +3 -0
  195. package/docs/interfaces/Params.html +6 -0
  196. package/docs/interfaces/ServiceData.html +2 -0
  197. package/docs/interfaces/SwitchBotBLEDevice.html +21 -0
  198. package/docs/interfaces/WebhookDetail.html +6 -0
  199. package/docs/interfaces/ad.html +5 -0
  200. package/docs/interfaces/body.html +3 -0
  201. package/docs/interfaces/bodyChange.html +4 -0
  202. package/docs/interfaces/deleteWebhookResponse.html +4 -0
  203. package/docs/interfaces/device.html +7 -0
  204. package/docs/interfaces/deviceList.html +2 -0
  205. package/docs/interfaces/deviceStatus.html +7 -0
  206. package/docs/interfaces/deviceStatusRequest.html +4 -0
  207. package/docs/interfaces/deviceWebhook.html +4 -0
  208. package/docs/interfaces/deviceWebhookContext.html +4 -0
  209. package/docs/interfaces/devices.html +4 -0
  210. package/docs/interfaces/infraredRemoteList.html +2 -0
  211. package/docs/interfaces/irdevice.html +5 -0
  212. package/docs/interfaces/pushResponse.html +4 -0
  213. package/docs/interfaces/queryWebhookResponse.html +4 -0
  214. package/docs/interfaces/setupWebhookResponse.html +4 -0
  215. package/docs/interfaces/switchbot.html +3 -0
  216. package/docs/interfaces/updateWebhookResponse.html +4 -0
  217. package/docs/interfaces/webhookRequest.html +4 -0
  218. package/docs/media/BLE.md +1109 -0
  219. package/docs/media/OpenAPI.md +185 -0
  220. package/docs/modules.html +136 -3
  221. package/docs/types/MacAddress.html +1 -0
  222. package/docs/types/batteryCirculatorFan.html +1 -0
  223. package/docs/types/batteryCirculatorFanServiceData.html +1 -0
  224. package/docs/types/batteryCirculatorFanStatus.html +1 -0
  225. package/docs/types/batteryCirculatorFanWebhookContext.html +1 -0
  226. package/docs/types/blindTilt.html +1 -0
  227. package/docs/types/blindTiltServiceData.html +1 -0
  228. package/docs/types/blindTiltStatus.html +1 -0
  229. package/docs/types/blindTiltWebhookContext.html +1 -0
  230. package/docs/types/bot.html +1 -0
  231. package/docs/types/botServiceData.html +1 -0
  232. package/docs/types/botStatus.html +1 -0
  233. package/docs/types/botWebhookContext.html +1 -0
  234. package/docs/types/ceilingLight.html +1 -0
  235. package/docs/types/ceilingLightPro.html +1 -0
  236. package/docs/types/ceilingLightProServiceData.html +1 -0
  237. package/docs/types/ceilingLightProStatus.html +1 -0
  238. package/docs/types/ceilingLightProWebhookContext.html +1 -0
  239. package/docs/types/ceilingLightServiceData.html +1 -0
  240. package/docs/types/ceilingLightStatus.html +1 -0
  241. package/docs/types/ceilingLightWebhookContext.html +1 -0
  242. package/docs/types/colorBulb.html +1 -0
  243. package/docs/types/colorBulbServiceData.html +1 -0
  244. package/docs/types/colorBulbStatus.html +1 -0
  245. package/docs/types/colorBulbWebhookContext.html +1 -0
  246. package/docs/types/contactSensor.html +1 -0
  247. package/docs/types/contactSensorServiceData.html +1 -0
  248. package/docs/types/contactSensorStatus.html +1 -0
  249. package/docs/types/contactSensorWebhookContext.html +1 -0
  250. package/docs/types/curtain.html +1 -0
  251. package/docs/types/curtain3.html +1 -0
  252. package/docs/types/curtain3ServiceData.html +1 -0
  253. package/docs/types/curtain3WebhookContext.html +1 -0
  254. package/docs/types/curtainServiceData.html +1 -0
  255. package/docs/types/curtainStatus.html +1 -0
  256. package/docs/types/curtainWebhookContext.html +1 -0
  257. package/docs/types/floorCleaningRobotS10.html +1 -0
  258. package/docs/types/floorCleaningRobotS10Status.html +1 -0
  259. package/docs/types/floorCleaningRobotS10WebhookContext.html +1 -0
  260. package/docs/types/hub2.html +1 -0
  261. package/docs/types/hub2ServiceData.html +1 -0
  262. package/docs/types/hub2Status.html +1 -0
  263. package/docs/types/hub2WebhookContext.html +1 -0
  264. package/docs/types/humidifier.html +1 -0
  265. package/docs/types/humidifierServiceData.html +1 -0
  266. package/docs/types/humidifierStatus.html +1 -0
  267. package/docs/types/humidifierWebhookContext.html +1 -0
  268. package/docs/types/indoorCam.html +1 -0
  269. package/docs/types/indoorCameraWebhookContext.html +1 -0
  270. package/docs/types/keypad.html +1 -0
  271. package/docs/types/keypadTouch.html +1 -0
  272. package/docs/types/keypadTouchWebhookContext.html +1 -0
  273. package/docs/types/keypadWebhookContext.html +1 -0
  274. package/docs/types/lock.html +1 -0
  275. package/docs/types/lockPro.html +1 -0
  276. package/docs/types/lockProServiceData.html +1 -0
  277. package/docs/types/lockProStatus.html +1 -0
  278. package/docs/types/lockProWebhookContext.html +1 -0
  279. package/docs/types/lockServiceData.html +1 -0
  280. package/docs/types/lockStatus.html +1 -0
  281. package/docs/types/lockWebhookContext.html +1 -0
  282. package/docs/types/meter.html +1 -0
  283. package/docs/types/meterPlus.html +1 -0
  284. package/docs/types/meterPlusServiceData.html +1 -0
  285. package/docs/types/meterPlusStatus.html +1 -0
  286. package/docs/types/meterPlusWebhookContext.html +1 -0
  287. package/docs/types/meterServiceData.html +1 -0
  288. package/docs/types/meterStatus.html +1 -0
  289. package/docs/types/meterWebhookContext.html +1 -0
  290. package/docs/types/motionSensor.html +1 -0
  291. package/docs/types/motionSensorServiceData.html +1 -0
  292. package/docs/types/motionSensorStatus.html +1 -0
  293. package/docs/types/motionSensorWebhookContext.html +1 -0
  294. package/docs/types/outdoorMeter.html +1 -0
  295. package/docs/types/outdoorMeterServiceData.html +1 -0
  296. package/docs/types/outdoorMeterStatus.html +1 -0
  297. package/docs/types/outdoorMeterWebhookContext.html +1 -0
  298. package/docs/types/panTiltCamWebhookContext.html +1 -0
  299. package/docs/types/pantiltCam.html +1 -0
  300. package/docs/types/pantiltCam2k.html +1 -0
  301. package/docs/types/plug.html +1 -0
  302. package/docs/types/plugMini.html +1 -0
  303. package/docs/types/plugMiniJPServiceData.html +1 -0
  304. package/docs/types/plugMiniJPWebhookContext.html +1 -0
  305. package/docs/types/plugMiniStatus.html +1 -0
  306. package/docs/types/plugMiniUSServiceData.html +1 -0
  307. package/docs/types/plugMiniUSWebhookContext.html +1 -0
  308. package/docs/types/plugStatus.html +1 -0
  309. package/docs/types/plugWebhookContext.html +1 -0
  310. package/docs/types/remote.html +1 -0
  311. package/docs/types/robotVacuumCleanerS1.html +1 -0
  312. package/docs/types/robotVacuumCleanerS1Plus.html +1 -0
  313. package/docs/types/robotVacuumCleanerS1PlusStatus.html +1 -0
  314. package/docs/types/robotVacuumCleanerS1PlusWebhookContext.html +1 -0
  315. package/docs/types/robotVacuumCleanerS1Status.html +1 -0
  316. package/docs/types/robotVacuumCleanerS1WebhookContext.html +1 -0
  317. package/docs/types/robotVacuumCleanerServiceData.html +1 -0
  318. package/docs/types/stripLight.html +1 -0
  319. package/docs/types/stripLightServiceData.html +1 -0
  320. package/docs/types/stripLightStatus.html +1 -0
  321. package/docs/types/stripLightWebhookContext.html +1 -0
  322. package/docs/types/waterLeakDetector.html +1 -0
  323. package/docs/types/waterLeakDetectorServiceData.html +1 -0
  324. package/docs/types/waterLeakDetectorStatus.html +1 -0
  325. package/docs/types/waterLeakDetectorWebhookContext.html +1 -0
  326. package/package.json +13 -11
  327. package/.github/npm-version-script.cjs +0 -81
  328. package/dist/switchbot.d.ts.map +0 -1
  329. package/dist/switchbot.js +0 -259
  330. package/dist/switchbot.js.map +0 -1
  331. package/dist/test/wohand2.test.d.ts +0 -2
  332. package/dist/test/wohand2.test.d.ts.map +0 -1
  333. package/dist/test/wohand2.test.js +0 -50
  334. package/dist/test/wohand2.test.js.map +0 -1
  335. package/dist/types/pushbody.d.ts +0 -6
  336. package/dist/types/pushbody.d.ts.map +0 -1
  337. package/dist/types/pushbody.js +0 -2
  338. package/dist/types/pushbody.js.map +0 -1
  339. package/docs/classes/SwitchBot.html +0 -16
  340. package/docs/types/SwitchBotBLEDevice.html +0 -1
@@ -0,0 +1,9 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!-- Generated by Pixelmator Pro 3.6.9 -->
3
+ <svg width="600" height="450" viewBox="0 0 600 450" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
4
+ <g id="Switchbot">
5
+ <image id="image1" x="149" y="25" width="302" height="301" xlink:href="data:image/png;base64, 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"/>
6
+ </g>
7
+ <text id="Node-SwitchBot" xml:space="preserve" x="10.70752" y="402" font-family="Kefa" font-size="75" font-weight="700" fill="#d13939">Node-SwitchBot</text>
8
+ <text id="Text" xml:space="preserve" x="304" y="244" font-family="Kefa" font-size="75" font-weight="700" fill="#d13939">T</text>
9
+ </svg>
Binary file
Binary file
@@ -12,10 +12,10 @@ export declare class Advertising {
12
12
  * and extracts relevant information based on the device type.
13
13
  *
14
14
  * @param {Noble.Peripheral} peripheral - The peripheral device object from noble.
15
- * @param {(message: string) => void} [onlog] - A logging function for debugging purposes.
15
+ * @param {Function} emitLog - The function to emit log messages.
16
16
  * @returns {Promise<Ad | null>} - An object containing parsed data specific to the SwitchBot device type, or `null` if the device is not recognized.
17
17
  */
18
- static parse(peripheral: Noble.Peripheral, onlog?: (message: string) => void): Promise<Ad | null>;
18
+ static parse(peripheral: Noble.Peripheral, emitLog: (level: string, message: string) => void): Promise<Ad | null>;
19
19
  /**
20
20
  * Validates if the buffer is a valid Buffer object with a minimum length.
21
21
  *
@@ -29,7 +29,7 @@ export declare class Advertising {
29
29
  * @param {string} model - The device model.
30
30
  * @param {Buffer} serviceData - The service data buffer.
31
31
  * @param {Buffer} manufacturerData - The manufacturer data buffer.
32
- * @param {(message: string) => void} [onlog] - A logging function for debugging purposes.
32
+ * @param {Function} emitLog - The function to emit log messages.
33
33
  * @returns {Promise<any>} - The parsed service data.
34
34
  */
35
35
  private static parseServiceData;
@@ -1 +1 @@
1
- {"version":3,"file":"advertising.d.ts","sourceRoot":"","sources":["../src/advertising.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,KAAK,KAAK,MAAM,mBAAmB,CAAA;AAE/C,OAAO,KAAK,EAAE,EAAE,EAAe,MAAM,kBAAkB,CAAA;AAqBvD;;GAEG;AACH,qBAAa,WAAW;;IAGtB;;;;;;;;;OASG;WACU,KAAK,CAChB,UAAU,EAAE,KAAK,CAAC,UAAU,EAC5B,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,GAChC,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC;IAgCrB;;;;;OAKG;IACH,OAAO,CAAC,MAAM,CAAC,cAAc;IAI7B;;;;;;;;OAQG;mBACkB,gBAAgB;IAkDrC;;;;;OAKG;IACH,OAAO,CAAC,MAAM,CAAC,aAAa;CAY7B"}
1
+ {"version":3,"file":"advertising.d.ts","sourceRoot":"","sources":["../src/advertising.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,KAAK,KAAK,MAAM,mBAAmB,CAAA;AAE/C,OAAO,KAAK,EAAE,EAAE,EAAe,MAAM,kBAAkB,CAAA;AAqBvD;;GAEG;AACH,qBAAa,WAAW;;IAGtB;;;;;;;;;OASG;WACU,KAAK,CAChB,UAAU,EAAE,KAAK,CAAC,UAAU,EAC5B,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,GAChD,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC;IAgCrB;;;;;OAKG;IACH,OAAO,CAAC,MAAM,CAAC,cAAc;IAI7B;;;;;;;;OAQG;mBACkB,gBAAgB;IAkDrC;;;;;OAKG;IACH,OAAO,CAAC,MAAM,CAAC,aAAa;CAY7B"}
@@ -27,10 +27,10 @@ export class Advertising {
27
27
  * and extracts relevant information based on the device type.
28
28
  *
29
29
  * @param {Noble.Peripheral} peripheral - The peripheral device object from noble.
30
- * @param {(message: string) => void} [onlog] - A logging function for debugging purposes.
30
+ * @param {Function} emitLog - The function to emit log messages.
31
31
  * @returns {Promise<Ad | null>} - An object containing parsed data specific to the SwitchBot device type, or `null` if the device is not recognized.
32
32
  */
33
- static async parse(peripheral, onlog) {
33
+ static async parse(peripheral, emitLog) {
34
34
  const ad = peripheral.advertisement;
35
35
  if (!ad || !ad.serviceData) {
36
36
  return null;
@@ -41,9 +41,9 @@ export class Advertising {
41
41
  return null;
42
42
  }
43
43
  const model = serviceData.subarray(0, 1).toString('utf8');
44
- const sd = await Advertising.parseServiceData(model, serviceData, manufacturerData, onlog);
44
+ const sd = await Advertising.parseServiceData(model, serviceData, manufacturerData, emitLog);
45
45
  if (!sd) {
46
- onlog?.(`[parseAdvertising.${peripheral.id}.${model}] return null, parsed serviceData empty!`);
46
+ emitLog('debugerror', `[parseAdvertising.${peripheral.id}.${model}] return null, parsed serviceData empty!`);
47
47
  return null;
48
48
  }
49
49
  const address = Advertising.formatAddress(peripheral);
@@ -53,7 +53,7 @@ export class Advertising {
53
53
  rssi: peripheral.rssi,
54
54
  serviceData: { model, ...sd },
55
55
  };
56
- onlog?.(`[parseAdvertising.${peripheral.id}.${model}] return ${JSON.stringify(data)}`);
56
+ emitLog('debug', `[parseAdvertising.${peripheral.id}.${model}] return ${JSON.stringify(data)}`);
57
57
  return data;
58
58
  }
59
59
  /**
@@ -71,50 +71,50 @@ export class Advertising {
71
71
  * @param {string} model - The device model.
72
72
  * @param {Buffer} serviceData - The service data buffer.
73
73
  * @param {Buffer} manufacturerData - The manufacturer data buffer.
74
- * @param {(message: string) => void} [onlog] - A logging function for debugging purposes.
74
+ * @param {Function} emitLog - The function to emit log messages.
75
75
  * @returns {Promise<any>} - The parsed service data.
76
76
  */
77
- static async parseServiceData(model, serviceData, manufacturerData, onlog) {
77
+ static async parseServiceData(model, serviceData, manufacturerData, emitLog) {
78
78
  switch (model) {
79
79
  case SwitchBotBLEModel.Bot:
80
- return WoHand.parseServiceData(serviceData, onlog);
80
+ return WoHand.parseServiceData(serviceData, emitLog);
81
81
  case SwitchBotBLEModel.Curtain:
82
82
  case SwitchBotBLEModel.Curtain3:
83
- return WoCurtain.parseServiceData(serviceData, manufacturerData, onlog);
83
+ return WoCurtain.parseServiceData(serviceData, manufacturerData, emitLog);
84
84
  case SwitchBotBLEModel.Humidifier:
85
- return WoHumi.parseServiceData(serviceData, onlog);
85
+ return WoHumi.parseServiceData(serviceData, emitLog);
86
86
  case SwitchBotBLEModel.Meter:
87
- return WoSensorTH.parseServiceData(serviceData, onlog);
87
+ return WoSensorTH.parseServiceData(serviceData, emitLog);
88
88
  case SwitchBotBLEModel.MeterPlus:
89
- return WoSensorTH.parseServiceData_Plus(serviceData, onlog);
89
+ return WoSensorTH.parseServiceData_Plus(serviceData, emitLog);
90
90
  case SwitchBotBLEModel.Hub2:
91
- return WoHub2.parseServiceData(manufacturerData, onlog);
91
+ return WoHub2.parseServiceData(manufacturerData, emitLog);
92
92
  case SwitchBotBLEModel.OutdoorMeter:
93
- return WoIOSensorTH.parseServiceData(serviceData, manufacturerData, onlog);
93
+ return WoIOSensorTH.parseServiceData(serviceData, manufacturerData, emitLog);
94
94
  case SwitchBotBLEModel.MotionSensor:
95
- return WoPresence.parseServiceData(serviceData, onlog);
95
+ return WoPresence.parseServiceData(serviceData, emitLog);
96
96
  case SwitchBotBLEModel.ContactSensor:
97
- return WoContact.parseServiceData(serviceData, onlog);
97
+ return WoContact.parseServiceData(serviceData, emitLog);
98
98
  case SwitchBotBLEModel.ColorBulb:
99
- return WoBulb.parseServiceData(serviceData, manufacturerData, onlog);
99
+ return WoBulb.parseServiceData(serviceData, manufacturerData, emitLog);
100
100
  case SwitchBotBLEModel.CeilingLight:
101
- return WoCeilingLight.parseServiceData(manufacturerData, onlog);
101
+ return WoCeilingLight.parseServiceData(manufacturerData, emitLog);
102
102
  case SwitchBotBLEModel.CeilingLightPro:
103
- return WoCeilingLight.parseServiceData_Pro(manufacturerData, onlog);
103
+ return WoCeilingLight.parseServiceData_Pro(manufacturerData, emitLog);
104
104
  case SwitchBotBLEModel.StripLight:
105
- return WoStrip.parseServiceData(serviceData, onlog);
105
+ return WoStrip.parseServiceData(serviceData, emitLog);
106
106
  case SwitchBotBLEModel.PlugMiniUS:
107
- return WoPlugMini.parseServiceData_US(manufacturerData, onlog);
107
+ return WoPlugMini.parseServiceData_US(manufacturerData, emitLog);
108
108
  case SwitchBotBLEModel.PlugMiniJP:
109
- return WoPlugMini.parseServiceData_JP(manufacturerData, onlog);
109
+ return WoPlugMini.parseServiceData_JP(manufacturerData, emitLog);
110
110
  case SwitchBotBLEModel.Lock:
111
- return WoSmartLock.parseServiceData(serviceData, manufacturerData, onlog);
111
+ return WoSmartLock.parseServiceData(serviceData, manufacturerData, emitLog);
112
112
  case SwitchBotBLEModel.LockPro:
113
- return WoSmartLockPro.parseServiceData(serviceData, manufacturerData, onlog);
113
+ return WoSmartLockPro.parseServiceData(serviceData, manufacturerData, emitLog);
114
114
  case SwitchBotBLEModel.BlindTilt:
115
- return WoBlindTilt.parseServiceData(serviceData, manufacturerData, onlog);
115
+ return WoBlindTilt.parseServiceData(serviceData, manufacturerData, emitLog);
116
116
  default:
117
- onlog?.(`[parseAdvertising.${model}] return null, model "${model}" not available!`);
117
+ emitLog('debug', `[parseAdvertising.${model}] return null, model "${model}" not available!`);
118
118
  return null;
119
119
  }
120
120
  }
@@ -1 +1 @@
1
- {"version":3,"file":"advertising.js","sourceRoot":"","sources":["../src/advertising.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"advertising.js","sourceRoot":"","sources":["../src/advertising.ts"],"names":[],"mappings":"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"}
@@ -1,105 +1,74 @@
1
1
  import { Buffer } from 'node:buffer';
2
2
  import { SwitchbotDevice } from '../device.js';
3
+ /**
4
+ * Class representing a WoBlindTilt device.
5
+ * @see https://github.com/OpenWonderLabs/SwitchBotAPI-BLE/blob/latest/devicetypes/curtain.md
6
+ */
3
7
  export declare class WoBlindTilt extends SwitchbotDevice {
4
8
  private _reverse;
5
9
  /**
6
10
  * Parses the service data and manufacturer data for the WoBlindTilt device.
7
- *
8
11
  * @param {Buffer} serviceData - The service data buffer.
9
12
  * @param {Buffer} manufacturerData - The manufacturer data buffer.
10
- * @param {(message: string) => void} [onlog] - Optional logging function.
13
+ * @param {Function} emitLog - The function to emit log messages.
11
14
  * @param {boolean} [reverse] - Whether to reverse the tilt percentage.
12
- * @returns {object | null} The parsed data object or null if the data is invalid.
15
+ * @returns {Promise<object | null>} - The parsed data object or null if the data is invalid.
13
16
  */
14
- static parseServiceData(serviceData: Buffer, manufacturerData: Buffer, onlog: ((message: string) => void) | undefined, reverse?: boolean): Promise<object | null>;
17
+ static parseServiceData(serviceData: Buffer, manufacturerData: Buffer, emitLog: (level: string, message: string) => void, reverse?: boolean): Promise<object | null>;
15
18
  /**
16
- * open
17
- *
18
19
  * Opens the blind tilt to the fully open position.
19
- *
20
- * @returns {Promise<void>} - A promise that resolves when the operation is complete. Nothing will be passed to the `resolve()`.
20
+ * @returns {Promise<void>}
21
21
  */
22
22
  open(): Promise<void>;
23
23
  /**
24
- * closeUp
25
- *
26
24
  * Closes the blind tilt up to the nearest endpoint.
27
- *
28
- * @returns {Promise<void>} - A promise that resolves when the operation is complete. Nothing will be passed to the `resolve()`.
25
+ * @returns {Promise<void>}
29
26
  */
30
27
  closeUp(): Promise<void>;
31
28
  /**
32
- * closeDown
33
- *
34
29
  * Closes the blind tilt down to the nearest endpoint.
35
- *
36
- * @returns {Promise<void>} - A promise that resolves when the operation is complete. Nothing will be passed to the `resolve()`.
30
+ * @returns {Promise<void>}
37
31
  */
38
32
  closeDown(): Promise<void>;
39
33
  /**
40
- * close
41
- *
42
34
  * Closes the blind tilt to the nearest endpoint.
43
- *
44
- * @returns {Promise<void>} - A promise that resolves when the operation is complete. Nothing will be passed to the `resolve()`.
35
+ * @returns {Promise<void>}
45
36
  */
46
37
  close(): Promise<void>;
47
38
  /**
48
- * getPosition
49
- *
50
39
  * Retrieves the current position of the blind tilt.
51
- *
52
- * @returns {number} - The current position of the blind tilt (0-100).
40
+ * @returns {Promise<number>} - The current position of the blind tilt (0-100).
53
41
  */
54
42
  getPosition(): Promise<number>;
55
43
  /**
56
- * _getAdvValue
57
- *
58
44
  * Retrieves the advertised value for a given key.
59
- *
60
45
  * @param {string} key - The key for the advertised value.
61
46
  * @returns {Promise<number>} - The advertised value.
47
+ * @private
62
48
  */
63
49
  private _getAdvValue;
64
50
  /**
65
- * getBasicInfo
66
- *
67
51
  * Retrieves the basic information of the blind tilt.
68
- *
69
- * @returns {Promise<object>} - A promise that resolves to an object containing the basic information of the blind tilt.
52
+ * @returns {Promise<object | null>} - A promise that resolves to an object containing the basic information of the blind tilt.
70
53
  */
71
54
  getBasicInfo(): Promise<object | null>;
72
55
  /**
73
56
  * Pauses the blind tilt operation.
74
- *
75
- * This method sends a command to pause the current operation of the blind tilt.
76
- *
77
- * @returns {Promise<void>} A promise that resolves when the operation is complete.
78
- * No value is passed to the `resolve()` function.
57
+ * @returns {Promise<void>}
79
58
  */
80
59
  pause(): Promise<void>;
81
60
  /**
82
- * runToPos the blind tilt operation.
83
- *
84
- * This method sends a command to run the blind tilt to the specified position.
85
- *
61
+ * Runs the blind tilt to the specified position.
86
62
  * @param {number} percent - The target position percentage (0-100).
87
63
  * @param {number} mode - The running mode (0 or 1).
88
- * @returns {Promise<void>} - A promise that resolves when the operation is complete.
64
+ * @returns {Promise<void>}
89
65
  */
90
66
  runToPos(percent: number, mode: number): Promise<void>;
91
67
  /**
92
68
  * Sends a command to operate the blind tilt and handles the response.
93
- *
94
- * This method constructs a buffer from the provided byte array and sends it as a command to the device.
95
- * It returns a promise that resolves if the device responds with a success code (0x01) and rejects if the device
96
- * returns an error or if the command fails.
97
- *
98
69
  * @param {number[]} bytes - The byte array representing the command to be sent to the device.
99
- * @returns {Promise<void>} A promise that resolves when the command is successfully executed or rejects with an
100
- * error if the command fails.
101
- *
102
- * @throws {Error} Throws an error if the device returns an error code or if the command fails.
70
+ * @returns {Promise<void>}
71
+ * @private
103
72
  */
104
73
  operateBlindTilt(bytes: number[]): Promise<void>;
105
74
  }
@@ -1 +1 @@
1
- {"version":3,"file":"woblindtilt.d.ts","sourceRoot":"","sources":["../../src/device/woblindtilt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAMpC,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAG9C,qBAAa,WAAY,SAAQ,eAAe;IAC9C,OAAO,CAAC,QAAQ,CAAiB;IACjC;;;;;;;;OAQG;WACU,gBAAgB,CAC3B,WAAW,EAAE,MAAM,EACnB,gBAAgB,EAAE,MAAM,EACxB,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,EAC9C,OAAO,GAAE,OAAe,GACvB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAkCzB;;;;;;OAMG;IACG,IAAI;IAIV;;;;;;OAMG;IACG,OAAO;IAIb;;;;;;OAMG;IACG,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAIhC;;;;;;OAMG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAS5B;;;;;;OAMG;IACG,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC;IAQpC;;;;;;;OAOG;YACW,YAAY;IAQ1B;;;;;;OAMG;IACG,YAAY,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IA2C5C;;;;;;;OAOG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5B;;;;;;;;OAQG;IACG,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAsB5D;;;;;;;;;;;;OAYG;IACG,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CAavD"}
1
+ {"version":3,"file":"woblindtilt.d.ts","sourceRoot":"","sources":["../../src/device/woblindtilt.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEpC,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAG9C;;;GAGG;AACH,qBAAa,WAAY,SAAQ,eAAe;IAC9C,OAAO,CAAC,QAAQ,CAAiB;IAEjC;;;;;;;OAOG;WACU,gBAAgB,CAC3B,WAAW,EAAE,MAAM,EACnB,gBAAgB,EAAE,MAAM,EACxB,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,EACjD,OAAO,GAAE,OAAe,GACvB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IA6BzB;;;OAGG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAI3B;;;OAGG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAI9B;;;OAGG;IACG,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAIhC;;;OAGG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAS5B;;;OAGG;IACG,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC;IAKpC;;;;;OAKG;YACW,YAAY;IAO1B;;;OAGG;IACG,YAAY,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IA2C5C;;;OAGG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5B;;;;;OAKG;IACG,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAU5D;;;;;OAKG;IACU,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CAO9D"}
@@ -1,130 +1,106 @@
1
- import { Buffer } from 'node:buffer';
2
1
  /* Copyright(C) 2024, donavanbecker (https://github.com/donavanbecker). All rights reserved.
3
2
  *
4
3
  * woblindtilt.ts: Switchbot BLE API registration.
5
4
  */
5
+ import { Buffer } from 'node:buffer';
6
6
  import { SwitchbotDevice } from '../device.js';
7
7
  import { SwitchBotBLEModel, SwitchBotBLEModelFriendlyName, SwitchBotBLEModelName } from '../types/types.js';
8
+ /**
9
+ * Class representing a WoBlindTilt device.
10
+ * @see https://github.com/OpenWonderLabs/SwitchBotAPI-BLE/blob/latest/devicetypes/curtain.md
11
+ */
8
12
  export class WoBlindTilt extends SwitchbotDevice {
9
13
  _reverse = false;
10
14
  /**
11
15
  * Parses the service data and manufacturer data for the WoBlindTilt device.
12
- *
13
16
  * @param {Buffer} serviceData - The service data buffer.
14
17
  * @param {Buffer} manufacturerData - The manufacturer data buffer.
15
- * @param {(message: string) => void} [onlog] - Optional logging function.
18
+ * @param {Function} emitLog - The function to emit log messages.
16
19
  * @param {boolean} [reverse] - Whether to reverse the tilt percentage.
17
- * @returns {object | null} The parsed data object or null if the data is invalid.
20
+ * @returns {Promise<object | null>} - The parsed data object or null if the data is invalid.
18
21
  */
19
- static async parseServiceData(serviceData, manufacturerData, onlog, reverse = false) {
20
- if (manufacturerData.length !== 5 && manufacturerData.length !== 6) {
21
- if (onlog && typeof onlog === 'function') {
22
- onlog(`[parseServiceDataForWoBlindTilt] Buffer length ${manufacturerData.length} !== 5 or 6!`);
23
- }
22
+ static async parseServiceData(serviceData, manufacturerData, emitLog, reverse = false) {
23
+ if (![5, 6].includes(manufacturerData.length)) {
24
+ emitLog('debugerror', `[parseServiceDataForWoBlindTilt] Buffer length ${manufacturerData.length} !== 5 or 6!`);
24
25
  return null;
25
26
  }
26
- // const byte1 = serviceData.readUInt8(1)
27
27
  const byte2 = serviceData.readUInt8(2);
28
28
  const byte6 = manufacturerData.subarray(6);
29
- const tilt = Math.max(Math.min(byte6.readUInt8(2) & 0b01111111, 100), 0); // current tilt % (100 - _tilt) if reverse else _tilt,
29
+ const tilt = Math.max(Math.min(byte6.readUInt8(2) & 0b01111111, 100), 0);
30
30
  const inMotion = !!(byte2 & 0b10000000);
31
- const lightLevel = (byte6.readUInt8(1) >> 4) & 0b00001111; // light sensor level (1-10)
32
- const calibration = !!(byte6.readUInt8(1) & 0b00000001); // Whether the calibration is completed
31
+ const lightLevel = (byte6.readUInt8(1) >> 4) & 0b00001111;
32
+ const calibration = !!(byte6.readUInt8(1) & 0b00000001);
33
33
  const sequenceNumber = byte6.readUInt8(0);
34
34
  const battery = serviceData.length > 2 ? byte2 & 0b01111111 : null;
35
- const data = {
35
+ return {
36
36
  model: SwitchBotBLEModel.BlindTilt,
37
37
  modelName: SwitchBotBLEModelName.BlindTilt,
38
38
  modelFriendlyName: SwitchBotBLEModelFriendlyName.BlindTilt,
39
39
  calibration,
40
40
  battery,
41
41
  inMotion,
42
- tilt: reverse ? (100 - tilt) : tilt,
42
+ tilt: reverse ? 100 - tilt : tilt,
43
43
  lightLevel,
44
44
  sequenceNumber,
45
45
  };
46
- return data;
47
46
  }
48
47
  /**
49
- * open
50
- *
51
48
  * Opens the blind tilt to the fully open position.
52
- *
53
- * @returns {Promise<void>} - A promise that resolves when the operation is complete. Nothing will be passed to the `resolve()`.
49
+ * @returns {Promise<void>}
54
50
  */
55
51
  async open() {
56
- return await this.operateBlindTilt([0x57, 0x0F, 0x45, 0x01, 0x05, 0xFF, 0x32]);
52
+ await this.operateBlindTilt([0x57, 0x0F, 0x45, 0x01, 0x05, 0xFF, 0x32]);
57
53
  }
58
54
  /**
59
- * closeUp
60
- *
61
55
  * Closes the blind tilt up to the nearest endpoint.
62
- *
63
- * @returns {Promise<void>} - A promise that resolves when the operation is complete. Nothing will be passed to the `resolve()`.
56
+ * @returns {Promise<void>}
64
57
  */
65
58
  async closeUp() {
66
- return await this.operateBlindTilt([0x57, 0x0F, 0x45, 0x01, 0x05, 0xFF, 0x64]);
59
+ await this.operateBlindTilt([0x57, 0x0F, 0x45, 0x01, 0x05, 0xFF, 0x64]);
67
60
  }
68
61
  /**
69
- * closeDown
70
- *
71
62
  * Closes the blind tilt down to the nearest endpoint.
72
- *
73
- * @returns {Promise<void>} - A promise that resolves when the operation is complete. Nothing will be passed to the `resolve()`.
63
+ * @returns {Promise<void>}
74
64
  */
75
65
  async closeDown() {
76
- return await this.operateBlindTilt([0x57, 0x0F, 0x45, 0x01, 0x05, 0xFF, 0x00]);
66
+ await this.operateBlindTilt([0x57, 0x0F, 0x45, 0x01, 0x05, 0xFF, 0x00]);
77
67
  }
78
68
  /**
79
- * close
80
- *
81
69
  * Closes the blind tilt to the nearest endpoint.
82
- *
83
- * @returns {Promise<void>} - A promise that resolves when the operation is complete. Nothing will be passed to the `resolve()`.
70
+ * @returns {Promise<void>}
84
71
  */
85
72
  async close() {
86
73
  const position = await this.getPosition();
87
74
  if (position > 50) {
88
- return await this.closeUp();
75
+ await this.closeUp();
89
76
  }
90
77
  else {
91
- return await this.closeDown();
78
+ await this.closeDown();
92
79
  }
93
80
  }
94
81
  /**
95
- * getPosition
96
- *
97
82
  * Retrieves the current position of the blind tilt.
98
- *
99
- * @returns {number} - The current position of the blind tilt (0-100).
83
+ * @returns {Promise<number>} - The current position of the blind tilt (0-100).
100
84
  */
101
85
  async getPosition() {
102
- // Retrieve the current tilt position using the _getAdvValue method
103
86
  const tiltPosition = await this._getAdvValue('tilt');
104
- // Ensure the tilt position is within the valid range (0-100)
105
87
  return Math.max(0, Math.min(tiltPosition, 100));
106
88
  }
107
89
  /**
108
- * _getAdvValue
109
- *
110
90
  * Retrieves the advertised value for a given key.
111
- *
112
91
  * @param {string} key - The key for the advertised value.
113
92
  * @returns {Promise<number>} - The advertised value.
93
+ * @private
114
94
  */
115
95
  async _getAdvValue(key) {
116
- // Mock implementation, replace with actual logic to retrieve the advertised value
117
96
  if (key === 'tilt') {
118
97
  return 50; // Example value
119
98
  }
120
99
  throw new Error(`Unknown key: ${key}`);
121
100
  }
122
101
  /**
123
- * getBasicInfo
124
- *
125
102
  * Retrieves the basic information of the blind tilt.
126
- *
127
- * @returns {Promise<object>} - A promise that resolves to an object containing the basic information of the blind tilt.
103
+ * @returns {Promise<object | null>} - A promise that resolves to an object containing the basic information of the blind tilt.
128
104
  */
129
105
  async getBasicInfo() {
130
106
  const data = await this.getBasicInfo();
@@ -168,73 +144,38 @@ export class WoBlindTilt extends SwitchbotDevice {
168
144
  }
169
145
  /**
170
146
  * Pauses the blind tilt operation.
171
- *
172
- * This method sends a command to pause the current operation of the blind tilt.
173
- *
174
- * @returns {Promise<void>} A promise that resolves when the operation is complete.
175
- * No value is passed to the `resolve()` function.
147
+ * @returns {Promise<void>}
176
148
  */
177
149
  async pause() {
178
150
  await this.operateBlindTilt([0x57, 0x0F, 0x45, 0x01, 0x00, 0xFF]);
179
151
  }
180
152
  /**
181
- * runToPos the blind tilt operation.
182
- *
183
- * This method sends a command to run the blind tilt to the specified position.
184
- *
153
+ * Runs the blind tilt to the specified position.
185
154
  * @param {number} percent - The target position percentage (0-100).
186
155
  * @param {number} mode - The running mode (0 or 1).
187
- * @returns {Promise<void>} - A promise that resolves when the operation is complete.
156
+ * @returns {Promise<void>}
188
157
  */
189
158
  async runToPos(percent, mode) {
190
- if (typeof percent !== 'number') {
191
- throw new TypeError(`The type of target position percentage is incorrect: ${typeof percent}`);
159
+ if (typeof percent !== 'number' || percent < 0 || percent > 100) {
160
+ throw new RangeError('Percent must be a number between 0 and 100');
192
161
  }
193
- if (mode === null) {
194
- mode = 0xFF;
195
- }
196
- else {
197
- if (typeof mode !== 'number') {
198
- throw new TypeError(`The type of running mode is incorrect: ${typeof mode}`);
199
- }
200
- if (mode > 1) {
201
- mode = 0xFF;
202
- }
203
- }
204
- if (percent > 100) {
205
- percent = 100;
206
- }
207
- else if (percent < 0) {
208
- percent = 0;
162
+ if (typeof mode !== 'number' || mode < 0 || mode > 1) {
163
+ throw new RangeError('Mode must be a number between 0 and 1');
209
164
  }
210
165
  await this.operateBlindTilt([0x57, 0x0F, 0x45, 0x01, 0x05, mode, percent]);
211
166
  }
212
167
  /**
213
168
  * Sends a command to operate the blind tilt and handles the response.
214
- *
215
- * This method constructs a buffer from the provided byte array and sends it as a command to the device.
216
- * It returns a promise that resolves if the device responds with a success code (0x01) and rejects if the device
217
- * returns an error or if the command fails.
218
- *
219
169
  * @param {number[]} bytes - The byte array representing the command to be sent to the device.
220
- * @returns {Promise<void>} A promise that resolves when the command is successfully executed or rejects with an
221
- * error if the command fails.
222
- *
223
- * @throws {Error} Throws an error if the device returns an error code or if the command fails.
170
+ * @returns {Promise<void>}
171
+ * @private
224
172
  */
225
173
  async operateBlindTilt(bytes) {
226
- const req_buf = Buffer.from(bytes);
227
- this.command(req_buf).then((res_buf) => {
228
- const code = res_buf.readUInt8(0);
229
- if (res_buf.length === 3 && code === 0x01) {
230
- // Success: No action needed
231
- }
232
- else {
233
- throw new Error(`The device returned an error: 0x${res_buf.toString('hex')}`);
234
- }
235
- }).catch((error) => {
236
- throw error;
237
- });
174
+ const reqBuf = Buffer.from(bytes);
175
+ const resBuf = await this.command(reqBuf);
176
+ if (resBuf.length !== 3 || resBuf.readUInt8(0) !== 0x01) {
177
+ throw new Error(`The device returned an error: 0x${resBuf.toString('hex')}`);
178
+ }
238
179
  }
239
180
  }
240
181
  //# sourceMappingURL=woblindtilt.js.map