node-switchbot 2.5.0-beta.8 → 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 (406) 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.d.ts.map +1 -0
  127. package/dist/test/woblindtilt.test.js +76 -0
  128. package/dist/test/woblindtilt.test.js.map +1 -0
  129. package/dist/{device → test}/wobulb.test.d.ts.map +1 -1
  130. package/dist/test/wobulb.test.js +95 -0
  131. package/dist/test/wobulb.test.js.map +1 -0
  132. package/dist/test/woceilinglight.test.d.ts.map +1 -0
  133. package/dist/test/woceilinglight.test.js +81 -0
  134. package/dist/test/woceilinglight.test.js.map +1 -0
  135. package/dist/test/wocontact.test.d.ts.map +1 -0
  136. package/dist/test/wocontact.test.js +65 -0
  137. package/dist/test/wocontact.test.js.map +1 -0
  138. package/dist/test/wocurtain.test.d.ts.map +1 -0
  139. package/dist/test/wocurtain.test.js +75 -0
  140. package/dist/test/wocurtain.test.js.map +1 -0
  141. package/dist/{device → test}/wohand.test.d.ts.map +1 -1
  142. package/dist/test/wohand.test.js +56 -0
  143. package/dist/test/wohand.test.js.map +1 -0
  144. package/dist/test/wohub2.test.d.ts +2 -0
  145. package/dist/test/wohub2.test.d.ts.map +1 -0
  146. package/dist/test/wohub2.test.js +80 -0
  147. package/dist/test/wohub2.test.js.map +1 -0
  148. package/dist/{device → test}/wohumi.test.d.ts.map +1 -1
  149. package/dist/test/wohumi.test.js +82 -0
  150. package/dist/test/wohumi.test.js.map +1 -0
  151. package/dist/test/woiosensorth.test.d.ts.map +1 -0
  152. package/dist/test/woiosensorth.test.js +40 -0
  153. package/dist/test/woiosensorth.test.js.map +1 -0
  154. package/dist/test/woplugmini.test.d.ts.map +1 -0
  155. package/dist/test/woplugmini.test.js +114 -0
  156. package/dist/test/woplugmini.test.js.map +1 -0
  157. package/dist/test/wopresence.test.d.ts.map +1 -0
  158. package/dist/test/wopresence.test.js +68 -0
  159. package/dist/test/wopresence.test.js.map +1 -0
  160. package/dist/test/wosensorth.test.d.ts.map +1 -0
  161. package/dist/test/wosensorth.test.js +51 -0
  162. package/dist/test/wosensorth.test.js.map +1 -0
  163. package/dist/test/wosmartlock.test.d.ts.map +1 -0
  164. package/dist/test/wosmartlock.test.js +151 -0
  165. package/dist/test/wosmartlock.test.js.map +1 -0
  166. package/dist/test/wosmartlockpro.test.d.ts.map +1 -0
  167. package/dist/test/wosmartlockpro.test.js +151 -0
  168. package/dist/test/wosmartlockpro.test.js.map +1 -0
  169. package/dist/{device → test}/wostrip.test.d.ts.map +1 -1
  170. package/dist/test/wostrip.test.js +102 -0
  171. package/dist/test/wostrip.test.js.map +1 -0
  172. package/dist/types/bledevicestatus.d.ts +4 -12
  173. package/dist/types/bledevicestatus.d.ts.map +1 -1
  174. package/dist/types/devicelist.d.ts.map +1 -1
  175. package/dist/types/devicelist.js +0 -4
  176. package/dist/types/devicelist.js.map +1 -1
  177. package/dist/types/devicepush.d.ts +13 -0
  178. package/dist/types/devicepush.d.ts.map +1 -0
  179. package/dist/types/devicepush.js +2 -0
  180. package/dist/types/devicepush.js.map +1 -0
  181. package/dist/types/deviceresponse.d.ts +2 -3
  182. package/dist/types/deviceresponse.d.ts.map +1 -1
  183. package/dist/types/devicestatus.d.ts.map +1 -1
  184. package/dist/types/devicewebhookstatus.d.ts +32 -0
  185. package/dist/types/devicewebhookstatus.d.ts.map +1 -1
  186. package/dist/types/irdevicelist.d.ts.map +1 -1
  187. package/dist/types/types.d.ts +23 -0
  188. package/dist/types/types.d.ts.map +1 -1
  189. package/dist/types/types.js +14 -0
  190. package/dist/types/types.js.map +1 -1
  191. package/docs/assets/highlight.css +12 -47
  192. package/docs/assets/main.js +1 -1
  193. package/docs/assets/navigation.js +1 -1
  194. package/docs/assets/search.js +1 -1
  195. package/docs/classes/SwitchBotBLE.html +64 -0
  196. package/docs/classes/SwitchBotOpenAPI.html +47 -0
  197. package/docs/classes/SwitchbotDevice.html +32 -33
  198. package/docs/enums/LogLevel.html +10 -0
  199. package/docs/enums/SwitchBotBLEModel.html +2 -2
  200. package/docs/enums/SwitchBotBLEModelFriendlyName.html +2 -2
  201. package/docs/enums/SwitchBotBLEModelName.html +2 -2
  202. package/docs/enums/SwitchBotModel.html +2 -2
  203. package/docs/hierarchy.html +1 -0
  204. package/docs/index.html +16 -993
  205. package/docs/interfaces/Ad-1.html +5 -0
  206. package/docs/interfaces/AdvertisementData.html +3 -0
  207. package/docs/interfaces/Chars.html +4 -0
  208. package/docs/interfaces/ErrorObject.html +3 -0
  209. package/docs/interfaces/Params.html +6 -0
  210. package/docs/interfaces/ServiceData.html +2 -0
  211. package/docs/interfaces/SwitchBotBLEDevice.html +21 -0
  212. package/docs/interfaces/WebhookDetail.html +6 -0
  213. package/docs/interfaces/ad.html +5 -0
  214. package/docs/interfaces/body.html +3 -0
  215. package/docs/interfaces/bodyChange.html +4 -0
  216. package/docs/interfaces/deleteWebhookResponse.html +4 -0
  217. package/docs/interfaces/device.html +7 -0
  218. package/docs/interfaces/deviceList.html +2 -0
  219. package/docs/interfaces/deviceStatus.html +7 -0
  220. package/docs/interfaces/deviceStatusRequest.html +4 -0
  221. package/docs/interfaces/deviceWebhook.html +4 -0
  222. package/docs/interfaces/deviceWebhookContext.html +4 -0
  223. package/docs/interfaces/devices.html +4 -0
  224. package/docs/interfaces/infraredRemoteList.html +2 -0
  225. package/docs/interfaces/irdevice.html +5 -0
  226. package/docs/interfaces/pushResponse.html +4 -0
  227. package/docs/interfaces/queryWebhookResponse.html +4 -0
  228. package/docs/interfaces/setupWebhookResponse.html +4 -0
  229. package/docs/interfaces/switchbot.html +3 -0
  230. package/docs/interfaces/updateWebhookResponse.html +4 -0
  231. package/docs/interfaces/webhookRequest.html +4 -0
  232. package/docs/media/BLE.md +1109 -0
  233. package/docs/media/OpenAPI.md +185 -0
  234. package/docs/modules.html +136 -3
  235. package/docs/types/MacAddress.html +1 -0
  236. package/docs/types/batteryCirculatorFan.html +1 -0
  237. package/docs/types/batteryCirculatorFanServiceData.html +1 -0
  238. package/docs/types/batteryCirculatorFanStatus.html +1 -0
  239. package/docs/types/batteryCirculatorFanWebhookContext.html +1 -0
  240. package/docs/types/blindTilt.html +1 -0
  241. package/docs/types/blindTiltServiceData.html +1 -0
  242. package/docs/types/blindTiltStatus.html +1 -0
  243. package/docs/types/blindTiltWebhookContext.html +1 -0
  244. package/docs/types/bot.html +1 -0
  245. package/docs/types/botServiceData.html +1 -0
  246. package/docs/types/botStatus.html +1 -0
  247. package/docs/types/botWebhookContext.html +1 -0
  248. package/docs/types/ceilingLight.html +1 -0
  249. package/docs/types/ceilingLightPro.html +1 -0
  250. package/docs/types/ceilingLightProServiceData.html +1 -0
  251. package/docs/types/ceilingLightProStatus.html +1 -0
  252. package/docs/types/ceilingLightProWebhookContext.html +1 -0
  253. package/docs/types/ceilingLightServiceData.html +1 -0
  254. package/docs/types/ceilingLightStatus.html +1 -0
  255. package/docs/types/ceilingLightWebhookContext.html +1 -0
  256. package/docs/types/colorBulb.html +1 -0
  257. package/docs/types/colorBulbServiceData.html +1 -0
  258. package/docs/types/colorBulbStatus.html +1 -0
  259. package/docs/types/colorBulbWebhookContext.html +1 -0
  260. package/docs/types/contactSensor.html +1 -0
  261. package/docs/types/contactSensorServiceData.html +1 -0
  262. package/docs/types/contactSensorStatus.html +1 -0
  263. package/docs/types/contactSensorWebhookContext.html +1 -0
  264. package/docs/types/curtain.html +1 -0
  265. package/docs/types/curtain3.html +1 -0
  266. package/docs/types/curtain3ServiceData.html +1 -0
  267. package/docs/types/curtain3WebhookContext.html +1 -0
  268. package/docs/types/curtainServiceData.html +1 -0
  269. package/docs/types/curtainStatus.html +1 -0
  270. package/docs/types/curtainWebhookContext.html +1 -0
  271. package/docs/types/floorCleaningRobotS10.html +1 -0
  272. package/docs/types/floorCleaningRobotS10Status.html +1 -0
  273. package/docs/types/floorCleaningRobotS10WebhookContext.html +1 -0
  274. package/docs/types/hub2.html +1 -0
  275. package/docs/types/hub2ServiceData.html +1 -0
  276. package/docs/types/hub2Status.html +1 -0
  277. package/docs/types/hub2WebhookContext.html +1 -0
  278. package/docs/types/humidifier.html +1 -0
  279. package/docs/types/humidifierServiceData.html +1 -0
  280. package/docs/types/humidifierStatus.html +1 -0
  281. package/docs/types/humidifierWebhookContext.html +1 -0
  282. package/docs/types/indoorCam.html +1 -0
  283. package/docs/types/indoorCameraWebhookContext.html +1 -0
  284. package/docs/types/keypad.html +1 -0
  285. package/docs/types/keypadTouch.html +1 -0
  286. package/docs/types/keypadTouchWebhookContext.html +1 -0
  287. package/docs/types/keypadWebhookContext.html +1 -0
  288. package/docs/types/lock.html +1 -0
  289. package/docs/types/lockPro.html +1 -0
  290. package/docs/types/lockProServiceData.html +1 -0
  291. package/docs/types/lockProStatus.html +1 -0
  292. package/docs/types/lockProWebhookContext.html +1 -0
  293. package/docs/types/lockServiceData.html +1 -0
  294. package/docs/types/lockStatus.html +1 -0
  295. package/docs/types/lockWebhookContext.html +1 -0
  296. package/docs/types/meter.html +1 -0
  297. package/docs/types/meterPlus.html +1 -0
  298. package/docs/types/meterPlusServiceData.html +1 -0
  299. package/docs/types/meterPlusStatus.html +1 -0
  300. package/docs/types/meterPlusWebhookContext.html +1 -0
  301. package/docs/types/meterServiceData.html +1 -0
  302. package/docs/types/meterStatus.html +1 -0
  303. package/docs/types/meterWebhookContext.html +1 -0
  304. package/docs/types/motionSensor.html +1 -0
  305. package/docs/types/motionSensorServiceData.html +1 -0
  306. package/docs/types/motionSensorStatus.html +1 -0
  307. package/docs/types/motionSensorWebhookContext.html +1 -0
  308. package/docs/types/outdoorMeter.html +1 -0
  309. package/docs/types/outdoorMeterServiceData.html +1 -0
  310. package/docs/types/outdoorMeterStatus.html +1 -0
  311. package/docs/types/outdoorMeterWebhookContext.html +1 -0
  312. package/docs/types/panTiltCamWebhookContext.html +1 -0
  313. package/docs/types/pantiltCam.html +1 -0
  314. package/docs/types/pantiltCam2k.html +1 -0
  315. package/docs/types/plug.html +1 -0
  316. package/docs/types/plugMini.html +1 -0
  317. package/docs/types/plugMiniJPServiceData.html +1 -0
  318. package/docs/types/plugMiniJPWebhookContext.html +1 -0
  319. package/docs/types/plugMiniStatus.html +1 -0
  320. package/docs/types/plugMiniUSServiceData.html +1 -0
  321. package/docs/types/plugMiniUSWebhookContext.html +1 -0
  322. package/docs/types/plugStatus.html +1 -0
  323. package/docs/types/plugWebhookContext.html +1 -0
  324. package/docs/types/remote.html +1 -0
  325. package/docs/types/robotVacuumCleanerS1.html +1 -0
  326. package/docs/types/robotVacuumCleanerS1Plus.html +1 -0
  327. package/docs/types/robotVacuumCleanerS1PlusStatus.html +1 -0
  328. package/docs/types/robotVacuumCleanerS1PlusWebhookContext.html +1 -0
  329. package/docs/types/robotVacuumCleanerS1Status.html +1 -0
  330. package/docs/types/robotVacuumCleanerS1WebhookContext.html +1 -0
  331. package/docs/types/robotVacuumCleanerServiceData.html +1 -0
  332. package/docs/types/stripLight.html +1 -0
  333. package/docs/types/stripLightServiceData.html +1 -0
  334. package/docs/types/stripLightStatus.html +1 -0
  335. package/docs/types/stripLightWebhookContext.html +1 -0
  336. package/docs/types/waterLeakDetector.html +1 -0
  337. package/docs/types/waterLeakDetectorServiceData.html +1 -0
  338. package/docs/types/waterLeakDetectorStatus.html +1 -0
  339. package/docs/types/waterLeakDetectorWebhookContext.html +1 -0
  340. package/package.json +13 -11
  341. package/.github/npm-version-script.cjs +0 -81
  342. package/dist/device/woblindtilt.test.d.ts.map +0 -1
  343. package/dist/device/woblindtilt.test.js +0 -26
  344. package/dist/device/woblindtilt.test.js.map +0 -1
  345. package/dist/device/wobulb.test.js +0 -52
  346. package/dist/device/wobulb.test.js.map +0 -1
  347. package/dist/device/woceilinglight.test.d.ts.map +0 -1
  348. package/dist/device/woceilinglight.test.js +0 -63
  349. package/dist/device/woceilinglight.test.js.map +0 -1
  350. package/dist/device/wocontact.test.d.ts.map +0 -1
  351. package/dist/device/wocontact.test.js +0 -34
  352. package/dist/device/wocontact.test.js.map +0 -1
  353. package/dist/device/wocurtain.test.d.ts.map +0 -1
  354. package/dist/device/wocurtain.test.js +0 -33
  355. package/dist/device/wocurtain.test.js.map +0 -1
  356. package/dist/device/wohand.test.js +0 -62
  357. package/dist/device/wohand.test.js.map +0 -1
  358. package/dist/device/wohand2.test.d.ts +0 -2
  359. package/dist/device/wohand2.test.d.ts.map +0 -1
  360. package/dist/device/wohand2.test.js +0 -50
  361. package/dist/device/wohand2.test.js.map +0 -1
  362. package/dist/device/wohumi.test.js +0 -61
  363. package/dist/device/wohumi.test.js.map +0 -1
  364. package/dist/device/woiosensorth.test.d.ts.map +0 -1
  365. package/dist/device/woiosensorth.test.js +0 -39
  366. package/dist/device/woiosensorth.test.js.map +0 -1
  367. package/dist/device/woplugmini.test.d.ts.map +0 -1
  368. package/dist/device/woplugmini.test.js +0 -91
  369. package/dist/device/woplugmini.test.js.map +0 -1
  370. package/dist/device/wopresence.test.d.ts.map +0 -1
  371. package/dist/device/wopresence.test.js +0 -42
  372. package/dist/device/wopresence.test.js.map +0 -1
  373. package/dist/device/wosensorth.test.d.ts.map +0 -1
  374. package/dist/device/wosensorth.test.js +0 -59
  375. package/dist/device/wosensorth.test.js.map +0 -1
  376. package/dist/device/wosmartlock.test.d.ts.map +0 -1
  377. package/dist/device/wosmartlock.test.js +0 -84
  378. package/dist/device/wosmartlock.test.js.map +0 -1
  379. package/dist/device/wosmartlockpro.test.d.ts.map +0 -1
  380. package/dist/device/wosmartlockpro.test.js +0 -124
  381. package/dist/device/wosmartlockpro.test.js.map +0 -1
  382. package/dist/device/wostrip.test.js +0 -115
  383. package/dist/device/wostrip.test.js.map +0 -1
  384. package/dist/switchbot.d.ts.map +0 -1
  385. package/dist/switchbot.js +0 -259
  386. package/dist/switchbot.js.map +0 -1
  387. package/dist/types/pushbody.d.ts +0 -6
  388. package/dist/types/pushbody.d.ts.map +0 -1
  389. package/dist/types/pushbody.js +0 -2
  390. package/dist/types/pushbody.js.map +0 -1
  391. package/docs/classes/SwitchBot.html +0 -16
  392. package/docs/types/SwitchBotBLEDevice.html +0 -1
  393. /package/dist/{device → test}/woblindtilt.test.d.ts +0 -0
  394. /package/dist/{device → test}/wobulb.test.d.ts +0 -0
  395. /package/dist/{device → test}/woceilinglight.test.d.ts +0 -0
  396. /package/dist/{device → test}/wocontact.test.d.ts +0 -0
  397. /package/dist/{device → test}/wocurtain.test.d.ts +0 -0
  398. /package/dist/{device → test}/wohand.test.d.ts +0 -0
  399. /package/dist/{device → test}/wohumi.test.d.ts +0 -0
  400. /package/dist/{device → test}/woiosensorth.test.d.ts +0 -0
  401. /package/dist/{device → test}/woplugmini.test.d.ts +0 -0
  402. /package/dist/{device → test}/wopresence.test.d.ts +0 -0
  403. /package/dist/{device → test}/wosensorth.test.d.ts +0 -0
  404. /package/dist/{device → test}/wosmartlock.test.d.ts +0 -0
  405. /package/dist/{device → test}/wosmartlockpro.test.d.ts +0 -0
  406. /package/dist/{device → test}/wostrip.test.d.ts +0 -0
@@ -1,148 +1,114 @@
1
- import { Buffer } from 'node:buffer';
2
1
  /* Copyright(C) 2024, donavanbecker (https://github.com/donavanbecker). All rights reserved.
3
2
  *
4
3
  * wocurtain.ts: Switchbot BLE API registration.
5
4
  */
5
+ import { Buffer } from 'node:buffer';
6
6
  import { SwitchbotDevice } from '../device.js';
7
7
  import { SwitchBotBLEModelFriendlyName, SwitchBotBLEModelName } from '../types/types.js';
8
+ /**
9
+ * Class representing a WoCurtain device.
10
+ * @see https://github.com/OpenWonderLabs/SwitchBotAPI-BLE/blob/latest/devicetypes/curtain.md
11
+ * @see https://github.com/OpenWonderLabs/SwitchBotAPI-BLE/blob/latest/devicetypes/curtain3.md
12
+ */
8
13
  export class WoCurtain extends SwitchbotDevice {
9
- static async parseServiceData(serviceData, manufacturerData, onlog, reverse = false) {
10
- if (serviceData.length !== 5 && serviceData.length !== 6) {
11
- if (onlog && typeof onlog === 'function') {
12
- onlog(`[parseServiceDataForWoCurtain] Buffer length ${serviceData.length} !== 5 or 6!`);
13
- }
14
+ /**
15
+ * Parses the service data for WoCurtain.
16
+ * @param {Buffer} serviceData - The service data buffer.
17
+ * @param {Buffer} manufacturerData - The manufacturer data buffer.
18
+ * @param {Function} emitLog - The function to emit log messages.
19
+ * @param {boolean} [reverse] - Whether to reverse the position.
20
+ * @returns {Promise<object | null>} - Parsed service data or null if invalid.
21
+ */
22
+ static async parseServiceData(serviceData, manufacturerData, emitLog, reverse = false) {
23
+ if (![5, 6].includes(serviceData.length)) {
24
+ emitLog('debugerror', `[parseServiceDataForWoCurtain] Buffer length ${serviceData.length} !== 5 or 6!`);
14
25
  return null;
15
26
  }
16
27
  const byte1 = serviceData.readUInt8(1);
17
28
  const byte2 = serviceData.readUInt8(2);
18
- // const byte3 = serviceData.readUInt8(3)
19
- // const byte4 = serviceData.readUInt8(4)
20
29
  let deviceData;
21
30
  let batteryData = null;
22
- if (manufacturerData && manufacturerData.length >= 13) { // Curtain 3
31
+ if (manufacturerData.length >= 13) {
23
32
  deviceData = manufacturerData.subarray(8, 11);
24
33
  batteryData = manufacturerData.readUInt8(12);
25
34
  }
26
- else if (manufacturerData && manufacturerData.length >= 11) {
35
+ else if (manufacturerData.length >= 11) {
27
36
  deviceData = manufacturerData.subarray(8, 11);
28
- batteryData = serviceData ? byte2 : null;
29
- }
30
- else if (serviceData) {
31
- deviceData = serviceData.subarray(3, 6);
32
37
  batteryData = byte2;
33
38
  }
34
39
  else {
35
- return {};
40
+ deviceData = serviceData.subarray(3, 6);
41
+ batteryData = byte2;
36
42
  }
37
43
  const model = serviceData.subarray(0, 1).toString('utf8');
38
44
  const modelName = model === 'c' ? SwitchBotBLEModelName.Curtain : SwitchBotBLEModelName.Curtain3;
39
45
  const modelFriendlyName = model === 'c' ? SwitchBotBLEModelFriendlyName.Curtain : SwitchBotBLEModelFriendlyName.Curtain3;
40
- const calibration = serviceData ? Boolean(byte1 & 0b01000000) : null; // Whether the calibration is compconsted /*OLD*/ const calibration = !!(byte1 & 0b01000000)
41
- const position = Math.max(Math.min(deviceData.readUInt8(0) & 0b01111111, 100), 0); // current positon % /*OLD*/ const currPosition = byte3 & 0b01111111 // current positon %
42
- const inMotion = Boolean(deviceData.readUInt8(0) & 0b10000000); //* OLD*/ const inMotion = !!(byte3 & 0b10000000)
43
- const lightLevel = (deviceData.readUInt8(1) >> 4) & 0b00001111; // light sensor level (1-10) /*OLD*/ const lightLevel = (byte4 >> 4) & 0b00001111
44
- const deviceChain = deviceData.readUInt8(1) & 0b00000111; //* OLD*/ const deviceChain = byte4 & 0b00000111
45
- const battery = batteryData !== null ? batteryData & 0b01111111 : null; //* OLD*/ const battery = byte2 & 0b01111111 // %
46
- const data = {
46
+ const calibration = Boolean(byte1 & 0b01000000);
47
+ const position = Math.max(Math.min(deviceData.readUInt8(0) & 0b01111111, 100), 0);
48
+ const inMotion = Boolean(deviceData.readUInt8(0) & 0b10000000);
49
+ const lightLevel = (deviceData.readUInt8(1) >> 4) & 0b00001111;
50
+ const deviceChain = deviceData.readUInt8(1) & 0b00000111;
51
+ const battery = batteryData !== null ? batteryData & 0b01111111 : null;
52
+ return {
47
53
  model,
48
54
  modelName,
49
55
  modelFriendlyName,
50
56
  calibration,
51
57
  battery,
52
58
  inMotion,
53
- position: reverse ? 100 - position : position, //* OLD*/ currPosition,
59
+ position: reverse ? 100 - position : position,
54
60
  lightLevel,
55
61
  deviceChain,
56
62
  };
57
- return data;
58
63
  }
59
- /* ------------------------------------------------------------------
60
- * open()
61
- * - Open the curtain
62
- *
63
- * [Arguments]
64
- * - mode | number | Optional | runing mode (0x01 = QuietDrift, 0xff = Default)
65
- *
66
- * [Return value]
67
- * - Promise object
68
- * Nothing will be passed to the `resolve()`.
69
- * ---------------------------------------------------------------- */
70
- async open(mode) {
71
- return await this.runToPos(0, mode);
64
+ /**
65
+ * Opens the curtain.
66
+ * @param {number} [mode] - Running mode (0x01 = QuietDrift, 0xFF = Default).
67
+ * @returns {Promise<void>}
68
+ */
69
+ async open(mode = 0xFF) {
70
+ await this.runToPos(0, mode);
72
71
  }
73
- /* ------------------------------------------------------------------
74
- * close()
75
- * - close the curtain
76
- *
77
- * [Arguments]
78
- * - mode | number | Optional | runing mode (0x01 = QuietDrift, 0xff = Default)
79
- *
80
- * [Return value]
81
- * - Promise object
82
- * Nothing will be passed to the `resolve()`.
83
- * ---------------------------------------------------------------- */
84
- async close(mode) {
85
- return await this.runToPos(100, mode);
72
+ /**
73
+ * Closes the curtain.
74
+ * @param {number} [mode] - Running mode (0x01 = QuietDrift, 0xFF = Default).
75
+ * @returns {Promise<void>}
76
+ */
77
+ async close(mode = 0xFF) {
78
+ await this.runToPos(100, mode);
86
79
  }
87
- /* ------------------------------------------------------------------
88
- * pause()
89
- * - pause the curtain
90
- *
91
- * [Arguments]
92
- * - none
93
- *
94
- * [Return value]
95
- * - Promise object
96
- * Nothing will be passed to the `resolve()`.
97
- * ---------------------------------------------------------------- */
80
+ /**
81
+ * Pauses the curtain.
82
+ * @returns {Promise<void>}
83
+ */
98
84
  async pause() {
99
- return await this.operateCurtain([0x57, 0x0F, 0x45, 0x01, 0x00, 0xFF]);
85
+ await this.operateCurtain([0x57, 0x0F, 0x45, 0x01, 0x00, 0xFF]);
100
86
  }
101
- /* ------------------------------------------------------------------
102
- * runToPos()
103
- * - run to the target position
104
- *
105
- * [Arguments]
106
- * - percent | number | Required | the percentage of target position
107
- * - mode | number | Optional | runing mode (0x01 = QuietDrift, 0xff = Default)
108
- *
109
- * [Return value]
110
- * - Promise object
111
- * Nothing will be passed to the `resolve()`.
112
- * ---------------------------------------------------------------- */
87
+ /**
88
+ * Runs the curtain to the target position.
89
+ * @param {number} percent - The percentage of the target position.
90
+ * @param {number} [mode] - Running mode (0x01 = QuietDrift, 0xFF = Default).
91
+ * @returns {Promise<void>}
92
+ */
113
93
  async runToPos(percent, mode = 0xFF) {
114
- if (typeof percent !== 'number') {
115
- throw new TypeError(`The type of target position percentage is incorrect: ${typeof percent}`);
116
- }
117
- if (typeof mode !== 'number') {
118
- throw new TypeError(`The type of running mode is incorrect: ${typeof mode}`);
119
- }
120
- if (mode > 1) {
121
- mode = 0xFF;
94
+ if (typeof percent !== 'number' || typeof mode !== 'number') {
95
+ throw new TypeError('Invalid type for percent or mode');
122
96
  }
123
- if (percent > 100) {
124
- percent = 100;
125
- }
126
- else if (percent < 0) {
127
- percent = 0;
128
- }
129
- return await this.operateCurtain([0x57, 0x0F, 0x45, 0x01, 0x05, mode, percent]);
97
+ percent = Math.max(0, Math.min(100, percent));
98
+ await this.operateCurtain([0x57, 0x0F, 0x45, 0x01, 0x05, mode, percent]);
130
99
  }
100
+ /**
101
+ * Sends a command to the curtain.
102
+ * @param {number[]} bytes - The command bytes.
103
+ * @returns {Promise<void>}
104
+ */
131
105
  async operateCurtain(bytes) {
132
- const req_buf = Buffer.from(bytes);
133
- await this.command(req_buf)
134
- .then((res_buf) => {
135
- const code = res_buf.readUInt8(0);
136
- if (res_buf.length === 3 && code === 0x01) {
137
- // Intentionally left empty
138
- }
139
- else {
140
- throw new Error(`The device returned an error: 0x${res_buf.toString('hex')}`);
141
- }
142
- })
143
- .catch((error) => {
144
- throw error;
145
- });
106
+ const reqBuf = Buffer.from(bytes);
107
+ const resBuf = await this.command(reqBuf);
108
+ const code = resBuf.readUInt8(0);
109
+ if (resBuf.length !== 3 || code !== 0x01) {
110
+ throw new Error(`The device returned an error: 0x${resBuf.toString('hex')}`);
111
+ }
146
112
  }
147
113
  }
148
114
  //# sourceMappingURL=wocurtain.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"wocurtain.js","sourceRoot":"","sources":["../../src/device/wocurtain.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"wocurtain.js","sourceRoot":"","sources":["../../src/device/wocurtain.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,47 @@
1
1
  import { Buffer } from 'node:buffer';
2
2
  import { SwitchbotDevice } from '../device.js';
3
+ /**
4
+ * Class representing a WoHand device.
5
+ * @see https://github.com/OpenWonderLabs/SwitchBotAPI-BLE/blob/latest/devicetypes/bot.md
6
+ */
3
7
  export declare class WoHand extends SwitchbotDevice {
4
- static parseServiceData(serviceData: Buffer, onlog: ((message: string) => void) | undefined): Promise<object | null>;
8
+ /**
9
+ * Parses the service data for WoHand.
10
+ * @param {Buffer} serviceData - The service data buffer.
11
+ * @param {Function} emitLog - The function to emit log messages.
12
+ * @returns {Promise<object | null>} - Parsed service data or null if invalid.
13
+ */
14
+ static parseServiceData(serviceData: Buffer, emitLog: (level: string, message: string) => void): Promise<object | null>;
15
+ /**
16
+ * Sends a command to the bot.
17
+ * @param {number[]} bytes - The command bytes.
18
+ * @returns {Promise<void>}
19
+ */
20
+ private operateBot;
21
+ /**
22
+ * Presses the bot.
23
+ * @returns {Promise<void>}
24
+ */
5
25
  press(): Promise<void>;
26
+ /**
27
+ * Turns on the bot.
28
+ * @returns {Promise<void>}
29
+ */
6
30
  turnOn(): Promise<void>;
31
+ /**
32
+ * Turns off the bot.
33
+ * @returns {Promise<void>}
34
+ */
7
35
  turnOff(): Promise<void>;
36
+ /**
37
+ * Moves the bot down.
38
+ * @returns {Promise<void>}
39
+ */
8
40
  down(): Promise<void>;
41
+ /**
42
+ * Moves the bot up.
43
+ * @returns {Promise<void>}
44
+ */
9
45
  up(): Promise<void>;
10
- operateBot(bytes: number[]): Promise<void>;
11
46
  }
12
47
  //# sourceMappingURL=wohand.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"wohand.d.ts","sourceRoot":"","sources":["../../src/device/wohand.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAMpC,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAG9C,qBAAa,MAAO,SAAQ,eAAe;WAC5B,gBAAgB,CAC3B,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,GAC7C,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAoCnB,KAAK;IAeL,MAAM;IAeN,OAAO;IAeP,IAAI;IAeJ,EAAE;IAIF,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE;CAejC"}
1
+ {"version":3,"file":"wohand.d.ts","sourceRoot":"","sources":["../../src/device/wohand.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEpC,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAG9C;;;GAGG;AACH,qBAAa,MAAO,SAAQ,eAAe;IACzC;;;;;OAKG;WACU,gBAAgB,CAC3B,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,GAChD,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAmBzB;;;;OAIG;YACW,UAAU;IAUxB;;;OAGG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5B;;;OAGG;IACG,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAI7B;;;OAGG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAI9B;;;OAGG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAI3B;;;OAGG;IACG,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC;CAG1B"}
@@ -1,118 +1,84 @@
1
- import { Buffer } from 'node:buffer';
2
1
  /* Copyright(C) 2024, donavanbecker (https://github.com/donavanbecker). All rights reserved.
3
2
  *
4
3
  * wohand.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 WoHand device.
10
+ * @see https://github.com/OpenWonderLabs/SwitchBotAPI-BLE/blob/latest/devicetypes/bot.md
11
+ */
8
12
  export class WoHand extends SwitchbotDevice {
9
- static async parseServiceData(serviceData, onlog) {
13
+ /**
14
+ * Parses the service data for WoHand.
15
+ * @param {Buffer} serviceData - The service data buffer.
16
+ * @param {Function} emitLog - The function to emit log messages.
17
+ * @returns {Promise<object | null>} - Parsed service data or null if invalid.
18
+ */
19
+ static async parseServiceData(serviceData, emitLog) {
10
20
  if (serviceData.length !== 3) {
11
- if (onlog && typeof onlog === 'function') {
12
- onlog(`[parseServiceData] Buffer length ${serviceData.length} !== 3!`);
13
- }
21
+ emitLog('debugerror', `[parseServiceData] Buffer length ${serviceData.length} !== 3!`);
14
22
  return null;
15
23
  }
16
24
  const byte1 = serviceData.readUInt8(1);
17
25
  const byte2 = serviceData.readUInt8(2);
18
- const mode = !!(byte1 & 0b10000000); // Whether the light switch Add-on is used or not. 0 = press, 1 = switch
19
- const state = !(byte1 & 0b01000000); // Whether the switch status is ON or OFF. 0 = on, 1 = off
20
- const battery = byte2 & 0b01111111; // %
21
- const data = {
26
+ return {
22
27
  model: SwitchBotBLEModel.Bot,
23
28
  modelName: SwitchBotBLEModelName.Bot,
24
29
  modelFriendlyName: SwitchBotBLEModelFriendlyName.Bot,
25
- mode,
26
- state,
27
- battery,
30
+ mode: !!(byte1 & 0b10000000), // Whether the light switch Add-on is used or not. 0 = press, 1 = switch
31
+ state: !(byte1 & 0b01000000), // Whether the switch status is ON or OFF. 0 = on, 1 = off
32
+ battery: byte2 & 0b01111111, // %
28
33
  };
29
- return data;
30
34
  }
31
- /* ------------------------------------------------------------------
32
- * press()
33
- * - Press
34
- *
35
- * [Arguments]
36
- * - none
37
- *
38
- * [Return value]
39
- * - Promise object
40
- * Nothing will be passed to the `resolve()`.
41
- * ---------------------------------------------------------------- */
35
+ /**
36
+ * Sends a command to the bot.
37
+ * @param {number[]} bytes - The command bytes.
38
+ * @returns {Promise<void>}
39
+ */
40
+ async operateBot(bytes) {
41
+ const reqBuf = Buffer.from(bytes);
42
+ const resBuf = await this.command(reqBuf);
43
+ const code = resBuf.readUInt8(0);
44
+ if (resBuf.length !== 3 || (code !== 0x01 && code !== 0x05)) {
45
+ throw new Error(`The device returned an error: 0x${resBuf.toString('hex')}`);
46
+ }
47
+ }
48
+ /**
49
+ * Presses the bot.
50
+ * @returns {Promise<void>}
51
+ */
42
52
  async press() {
43
- return await this.operateBot([0x57, 0x01, 0x00]);
53
+ await this.operateBot([0x57, 0x01, 0x00]);
44
54
  }
45
- /* ------------------------------------------------------------------
46
- * turnOn()
47
- * - Turn on
48
- *
49
- * [Arguments]
50
- * - none
51
- *
52
- * [Return value]
53
- * - Promise object
54
- * Nothing will be passed to the `resolve()`.
55
- * ---------------------------------------------------------------- */
55
+ /**
56
+ * Turns on the bot.
57
+ * @returns {Promise<void>}
58
+ */
56
59
  async turnOn() {
57
- return await this.operateBot([0x57, 0x01, 0x01]);
60
+ await this.operateBot([0x57, 0x01, 0x01]);
58
61
  }
59
- /* ------------------------------------------------------------------
60
- * turnOff()
61
- * - Turn off
62
- *
63
- * [Arguments]
64
- * - none
65
- *
66
- * [Return value]
67
- * - Promise object
68
- * Nothing will be passed to the `resolve()`.
69
- * ---------------------------------------------------------------- */
62
+ /**
63
+ * Turns off the bot.
64
+ * @returns {Promise<void>}
65
+ */
70
66
  async turnOff() {
71
- return await this.operateBot([0x57, 0x01, 0x02]);
67
+ await this.operateBot([0x57, 0x01, 0x02]);
72
68
  }
73
- /* ------------------------------------------------------------------
74
- * down()
75
- * - Down
76
- *
77
- * [Arguments]
78
- * - none
79
- *
80
- * [Return value]
81
- * - Promise object
82
- * Nothing will be passed to the `resolve()`.
83
- * ---------------------------------------------------------------- */
69
+ /**
70
+ * Moves the bot down.
71
+ * @returns {Promise<void>}
72
+ */
84
73
  async down() {
85
- return await this.operateBot([0x57, 0x01, 0x03]);
74
+ await this.operateBot([0x57, 0x01, 0x03]);
86
75
  }
87
- /* ------------------------------------------------------------------
88
- * up()
89
- * - Up
90
- *
91
- * [Arguments]
92
- * - none
93
- *
94
- * [Return value]
95
- * - Promise object
96
- * Nothing will be passed to the `resolve()`.
97
- * ---------------------------------------------------------------- */
76
+ /**
77
+ * Moves the bot up.
78
+ * @returns {Promise<void>}
79
+ */
98
80
  async up() {
99
- return await this.operateBot([0x57, 0x01, 0x04]);
100
- }
101
- async operateBot(bytes) {
102
- const req_buf = Buffer.from(bytes);
103
- await this.command(req_buf)
104
- .then((res_buf) => {
105
- const code = res_buf.readUInt8(0);
106
- if (res_buf.length === 3 && (code === 0x01 || code === 0x05)) {
107
- // Successful operation, no further action needed
108
- }
109
- else {
110
- throw new Error(`The device returned an error: 0x${res_buf.toString('hex')}`);
111
- }
112
- })
113
- .catch((error) => {
114
- throw error;
115
- });
81
+ await this.operateBot([0x57, 0x01, 0x04]);
116
82
  }
117
83
  }
118
84
  //# sourceMappingURL=wohand.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"wohand.js","sourceRoot":"","sources":["../../src/device/wohand.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"wohand.js","sourceRoot":"","sources":["../../src/device/wohand.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEpC,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAC9C,OAAO,EAAE,iBAAiB,EAAE,6BAA6B,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAA;AAE3G;;;GAGG;AACH,MAAM,OAAO,MAAO,SAAQ,eAAe;IACzC;;;;;OAKG;IACH,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAC3B,WAAmB,EACnB,OAAiD;QAEjD,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7B,OAAO,CAAC,YAAY,EAAE,oCAAoC,WAAW,CAAC,MAAM,SAAS,CAAC,CAAA;YACtF,OAAO,IAAI,CAAA;QACb,CAAC;QAED,MAAM,KAAK,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;QACtC,MAAM,KAAK,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;QAEtC,OAAO;YACL,KAAK,EAAE,iBAAiB,CAAC,GAAG;YAC5B,SAAS,EAAE,qBAAqB,CAAC,GAAG;YACpC,iBAAiB,EAAE,6BAA6B,CAAC,GAAG;YACpD,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,UAAU,CAAC,EAAE,wEAAwE;YACtG,KAAK,EAAE,CAAC,CAAC,KAAK,GAAG,UAAU,CAAC,EAAE,0DAA0D;YACxF,OAAO,EAAE,KAAK,GAAG,UAAU,EAAE,IAAI;SAClC,CAAA;IACH,CAAC;IAED;;;;OAIG;IACK,KAAK,CAAC,UAAU,CAAC,KAAe;QACtC,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACjC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;QACzC,MAAM,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;QAEhC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;YAC5D,MAAM,IAAI,KAAK,CAAC,mCAAmC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;QAC9E,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAA;IAC3C,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,MAAM;QACV,MAAM,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAA;IAC3C,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,OAAO;QACX,MAAM,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAA;IAC3C,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,IAAI;QACR,MAAM,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAA;IAC3C,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,EAAE;QACN,MAAM,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAA;IAC3C,CAAC;CACF"}
@@ -1,6 +1,16 @@
1
1
  import type { Buffer } from 'node:buffer';
2
2
  import { SwitchbotDevice } from '../device.js';
3
+ /**
4
+ * Class representing a WoHub2 device.
5
+ * @see https://github.com/OpenWonderLabs/SwitchBotAPI-BLE/blob/latest/devicetypes/meter.md
6
+ */
3
7
  export declare class WoHub2 extends SwitchbotDevice {
4
- static parseServiceData(manufacturerData: Buffer, onlog: ((message: string) => void) | undefined): Promise<object | null>;
8
+ /**
9
+ * Parses the service data for WoHub2.
10
+ * @param {Buffer} manufacturerData - The manufacturer data buffer.
11
+ * @param {Function} emitLog - The function to emit log messages.
12
+ * @returns {Promise<object | null>} - Parsed service data or null if invalid.
13
+ */
14
+ static parseServiceData(manufacturerData: Buffer, emitLog: (level: string, message: string) => void): Promise<object | null>;
5
15
  }
6
16
  //# sourceMappingURL=wohub2.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"wohub2.d.ts","sourceRoot":"","sources":["../../src/device/wohub2.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAMzC,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAG9C,qBAAa,MAAO,SAAQ,eAAe;WAC5B,gBAAgB,CAC3B,gBAAgB,EAAE,MAAM,EACxB,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,GAC7C,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;CAsC1B"}
1
+ {"version":3,"file":"wohub2.d.ts","sourceRoot":"","sources":["../../src/device/wohub2.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEzC,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAG9C;;;GAGG;AACH,qBAAa,MAAO,SAAQ,eAAe;IACzC;;;;;OAKG;WACU,gBAAgB,CAC3B,gBAAgB,EAAE,MAAM,EACxB,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,GAChD,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;CAwB1B"}
@@ -1,44 +1,36 @@
1
- /* Copyright(C) 2024, donavanbecker (https://github.com/donavanbecker). All rights reserved.
2
- *
3
- * wohub2.ts: Switchbot BLE API registration.
4
- */
5
1
  import { SwitchbotDevice } from '../device.js';
6
2
  import { SwitchBotBLEModel, SwitchBotBLEModelFriendlyName, SwitchBotBLEModelName } from '../types/types.js';
3
+ /**
4
+ * Class representing a WoHub2 device.
5
+ * @see https://github.com/OpenWonderLabs/SwitchBotAPI-BLE/blob/latest/devicetypes/meter.md
6
+ */
7
7
  export class WoHub2 extends SwitchbotDevice {
8
- static async parseServiceData(manufacturerData, onlog) {
8
+ /**
9
+ * Parses the service data for WoHub2.
10
+ * @param {Buffer} manufacturerData - The manufacturer data buffer.
11
+ * @param {Function} emitLog - The function to emit log messages.
12
+ * @returns {Promise<object | null>} - Parsed service data or null if invalid.
13
+ */
14
+ static async parseServiceData(manufacturerData, emitLog) {
9
15
  if (manufacturerData.length !== 16) {
10
- if (onlog && typeof onlog === 'function') {
11
- onlog(`[parseServiceDataForWoSensorTH] Buffer length ${manufacturerData.length} !== 16!`);
12
- }
16
+ emitLog('debugerror', `[parseServiceDataForWoHub2] Buffer length ${manufacturerData.length} !== 16!`);
13
17
  return null;
14
18
  }
15
- const byte0 = manufacturerData.readUInt8(0);
16
- const byte1 = manufacturerData.readUInt8(1);
17
- const byte2 = manufacturerData.readUInt8(2);
18
- const byte12 = manufacturerData.readUInt8(12);
19
- const temp_sign = byte1 & 0b10000000 ? 1 : -1;
20
- const temp_c = temp_sign * ((byte1 & 0b01111111) + (byte0 & 0b00001111) / 10);
21
- const temp_f = Math.round(((temp_c * 9 / 5) + 32) * 10) / 10;
22
- const light_level = byte12 & 0b11111;
23
- const data = {
19
+ const [byte0, byte1, byte2, , , , , , , , , , byte12] = manufacturerData;
20
+ const tempSign = byte1 & 0b10000000 ? 1 : -1;
21
+ const tempC = tempSign * ((byte1 & 0b01111111) + (byte0 & 0b00001111) / 10);
22
+ const tempF = Math.round(((tempC * 9) / 5 + 32) * 10) / 10;
23
+ const lightLevel = byte12 & 0b11111;
24
+ return {
24
25
  model: SwitchBotBLEModel.Hub2,
25
26
  modelName: SwitchBotBLEModelName.Hub2,
26
27
  modelFriendlyName: SwitchBotBLEModelFriendlyName.Hub2,
27
- /**
28
- * @deprecated The `temperature` object is deprecated and will be removed in future versions.
29
- * Use the `celsius` and `fahrenheit` properties directly instead.
30
- */
31
- temperature: {
32
- c: temp_c,
33
- f: temp_f,
34
- },
35
- celsius: temp_c,
36
- fahrenheit: temp_f,
28
+ celsius: tempC,
29
+ fahrenheit: tempF,
37
30
  fahrenheit_mode: !!(byte2 & 0b10000000),
38
31
  humidity: byte2 & 0b01111111,
39
- lightLevel: light_level,
32
+ lightLevel,
40
33
  };
41
- return data;
42
34
  }
43
35
  }
44
36
  //# sourceMappingURL=wohub2.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"wohub2.js","sourceRoot":"","sources":["../../src/device/wohub2.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAC9C,OAAO,EAAE,iBAAiB,EAAE,6BAA6B,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAA;AAE3G,MAAM,OAAO,MAAO,SAAQ,eAAe;IACzC,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAC3B,gBAAwB,EACxB,KAA8C;QAE9C,IAAI,gBAAgB,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;YACnC,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE,CAAC;gBACzC,KAAK,CAAC,iDAAiD,gBAAgB,CAAC,MAAM,UAAU,CAAC,CAAA;YAC3F,CAAC;YACD,OAAO,IAAI,CAAA;QACb,CAAC;QACD,MAAM,KAAK,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;QAC3C,MAAM,KAAK,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;QAC3C,MAAM,KAAK,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;QAC3C,MAAM,MAAM,GAAG,gBAAgB,CAAC,SAAS,CAAC,EAAE,CAAC,CAAA;QAE7C,MAAM,SAAS,GAAG,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QAC7C,MAAM,MAAM,GAAG,SAAS,GAAG,CAAC,CAAC,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,CAAA;QAC7E,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAA;QAC5D,MAAM,WAAW,GAAG,MAAM,GAAG,OAAO,CAAA;QAEpC,MAAM,IAAI,GAAG;YACX,KAAK,EAAE,iBAAiB,CAAC,IAAI;YAC7B,SAAS,EAAE,qBAAqB,CAAC,IAAI;YACrC,iBAAiB,EAAE,6BAA6B,CAAC,IAAI;YACrD;;;eAGG;YACH,WAAW,EAAE;gBACX,CAAC,EAAE,MAAM;gBACT,CAAC,EAAE,MAAM;aACV;YACD,OAAO,EAAE,MAAM;YACf,UAAU,EAAE,MAAM;YAClB,eAAe,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,UAAU,CAAC;YACvC,QAAQ,EAAE,KAAK,GAAG,UAAU;YAC5B,UAAU,EAAE,WAAW;SACxB,CAAA;QAED,OAAO,IAAI,CAAA;IACb,CAAC;CACF"}
1
+ {"version":3,"file":"wohub2.js","sourceRoot":"","sources":["../../src/device/wohub2.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAC9C,OAAO,EAAE,iBAAiB,EAAE,6BAA6B,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAA;AAE3G;;;GAGG;AACH,MAAM,OAAO,MAAO,SAAQ,eAAe;IACzC;;;;;OAKG;IACH,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAC3B,gBAAwB,EACxB,OAAiD;QAEjD,IAAI,gBAAgB,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;YACnC,OAAO,CAAC,YAAY,EAAE,6CAA6C,gBAAgB,CAAC,MAAM,UAAU,CAAC,CAAA;YACrG,OAAO,IAAI,CAAA;QACb,CAAC;QAED,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,AAAD,EAAG,AAAD,EAAG,AAAD,EAAG,AAAD,EAAG,AAAD,EAAG,AAAD,EAAG,AAAD,EAAG,AAAD,EAAG,AAAD,EAAG,MAAM,CAAC,GAAG,gBAAgB,CAAA;QAExE,MAAM,QAAQ,GAAG,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QAC5C,MAAM,KAAK,GAAG,QAAQ,GAAG,CAAC,CAAC,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,CAAA;QAC3E,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAA;QAC1D,MAAM,UAAU,GAAG,MAAM,GAAG,OAAO,CAAA;QAEnC,OAAO;YACL,KAAK,EAAE,iBAAiB,CAAC,IAAI;YAC7B,SAAS,EAAE,qBAAqB,CAAC,IAAI;YACrC,iBAAiB,EAAE,6BAA6B,CAAC,IAAI;YACrD,OAAO,EAAE,KAAK;YACd,UAAU,EAAE,KAAK;YACjB,eAAe,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,UAAU,CAAC;YACvC,QAAQ,EAAE,KAAK,GAAG,UAAU;YAC5B,UAAU;SACX,CAAA;IACH,CAAC;CACF"}
@@ -1,12 +1,47 @@
1
1
  import { Buffer } from 'node:buffer';
2
2
  import { SwitchbotDevice } from '../device.js';
3
+ /**
4
+ * Class representing a WoHumi device.
5
+ * @see https://github.com/OpenWonderLabs/SwitchBotAPI-BLE/tree/latest/devicetypes
6
+ */
3
7
  export declare class WoHumi extends SwitchbotDevice {
4
- static parseServiceData(serviceData: Buffer, onlog: ((message: string) => void) | undefined): Promise<object | null>;
8
+ /**
9
+ * Parses the service data for WoHumi.
10
+ * @param {Buffer} serviceData - The service data buffer.
11
+ * @param {Function} emitLog - The function to emit log messages.
12
+ * @returns {Promise<object | null>} - Parsed service data or null if invalid.
13
+ */
14
+ static parseServiceData(serviceData: Buffer, emitLog: (level: string, message: string) => void): Promise<object | null>;
15
+ /**
16
+ * Sends a command to the humidifier.
17
+ * @param {number[]} bytes - The command bytes.
18
+ * @returns {Promise<void>}
19
+ */
20
+ operateHumi(bytes: number[]): Promise<void>;
21
+ /**
22
+ * Presses the humidifier button.
23
+ * @returns {Promise<void>}
24
+ */
5
25
  press(): Promise<void>;
26
+ /**
27
+ * Turns on the humidifier.
28
+ * @returns {Promise<void>}
29
+ */
6
30
  turnOn(): Promise<void>;
31
+ /**
32
+ * Turns off the humidifier.
33
+ * @returns {Promise<void>}
34
+ */
7
35
  turnOff(): Promise<void>;
36
+ /**
37
+ * Decreases the humidifier setting.
38
+ * @returns {Promise<void>}
39
+ */
8
40
  down(): Promise<void>;
41
+ /**
42
+ * Increases the humidifier setting.
43
+ * @returns {Promise<void>}
44
+ */
9
45
  up(): Promise<void>;
10
- operateHumi(bytes: number[]): Promise<void>;
11
46
  }
12
47
  //# sourceMappingURL=wohumi.d.ts.map