node-switchbot 2.5.0-beta.3 → 2.5.0-beta.30

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 (397) hide show
  1. package/.github/workflows/beta-release.yml +25 -2
  2. package/.github/workflows/release.yml +13 -0
  3. package/BLE.md +1109 -0
  4. package/CHANGELOG.md +14 -0
  5. package/OpenAPI.md +172 -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 +31 -20
  11. package/dist/advertising.d.ts.map +1 -1
  12. package/dist/advertising.js +72 -75
  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 +39 -98
  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 +71 -127
  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 +94 -169
  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 +22 -21
  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 +68 -102
  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 +54 -88
  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 +20 -28
  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 +51 -82
  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 +24 -28
  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 +69 -75
  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 +20 -26
  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 +32 -48
  61. package/dist/device/wosensorth.js.map +1 -1
  62. package/dist/device/wosmartlock.d.ts +56 -13
  63. package/dist/device/wosmartlock.d.ts.map +1 -1
  64. package/dist/device/wosmartlock.js +106 -194
  65. package/dist/device/wosmartlock.js.map +1 -1
  66. package/dist/device/wosmartlockpro.d.ts +61 -18
  67. package/dist/device/wosmartlockpro.d.ts.map +1 -1
  68. package/dist/device/wosmartlockpro.js +114 -203
  69. package/dist/device/wosmartlockpro.js.map +1 -1
  70. package/dist/device/wostrip.d.ts +37 -18
  71. package/dist/device/wostrip.d.ts.map +1 -1
  72. package/dist/device/wostrip.js +78 -124
  73. package/dist/device/wostrip.js.map +1 -1
  74. package/dist/device.d.ts +85 -222
  75. package/dist/device.d.ts.map +1 -1
  76. package/dist/device.js +123 -407
  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 +79 -19
  83. package/dist/parameter-checker.d.ts.map +1 -1
  84. package/dist/parameter-checker.js +140 -335
  85. package/dist/parameter-checker.js.map +1 -1
  86. package/dist/settings.d.ts +46 -0
  87. package/dist/settings.d.ts.map +1 -1
  88. package/dist/settings.js +46 -2
  89. package/dist/settings.js.map +1 -1
  90. package/dist/{switchbot.d.ts → switchbot-ble.d.ts} +7 -8
  91. package/dist/switchbot-ble.d.ts.map +1 -0
  92. package/dist/switchbot-ble.js +412 -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 +96 -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 +60 -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 +34 -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 +48 -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 +95 -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 +97 -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 +104 -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 +95 -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 +38 -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 +76 -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 +76 -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/{device/wohand2.test.js → test/wohub2.test.js} +10 -8
  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/{device → test}/wohumi.test.js +5 -2
  150. package/dist/test/wohumi.test.js.map +1 -0
  151. package/dist/test/woiosensorth.test.d.ts.map +1 -0
  152. package/dist/{device → test}/woiosensorth.test.js +11 -9
  153. package/dist/test/woiosensorth.test.js.map +1 -0
  154. package/dist/test/woplugmini.test.d.ts.map +1 -0
  155. package/dist/{device → test}/woplugmini.test.js +10 -5
  156. package/dist/test/woplugmini.test.js.map +1 -0
  157. package/dist/test/wopresence.test.d.ts.map +1 -0
  158. package/dist/{device → test}/wopresence.test.js +5 -1
  159. package/dist/test/wopresence.test.js.map +1 -0
  160. package/dist/test/wosensorth.test.d.ts.map +1 -0
  161. package/dist/{device → test}/wosensorth.test.js +5 -14
  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 +147 -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/{device → test}/wosmartlockpro.test.js +30 -26
  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/{device → test}/wostrip.test.js +18 -19
  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 +61 -120
  188. package/dist/types/types.d.ts.map +1 -1
  189. package/dist/types/types.js +10 -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 +61 -0
  196. package/docs/classes/SwitchBotOpenAPI.html +47 -0
  197. package/docs/classes/SwitchbotDevice.html +28 -33
  198. package/docs/enums/LogLevel.html +6 -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 +172 -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 +8 -6
  341. package/dist/device/woblindtilt.test.d.ts.map +0 -1
  342. package/dist/device/woblindtilt.test.js +0 -26
  343. package/dist/device/woblindtilt.test.js.map +0 -1
  344. package/dist/device/wobulb.test.js +0 -52
  345. package/dist/device/wobulb.test.js.map +0 -1
  346. package/dist/device/woceilinglight.test.d.ts.map +0 -1
  347. package/dist/device/woceilinglight.test.js +0 -63
  348. package/dist/device/woceilinglight.test.js.map +0 -1
  349. package/dist/device/wocontact.test.d.ts.map +0 -1
  350. package/dist/device/wocontact.test.js +0 -34
  351. package/dist/device/wocontact.test.js.map +0 -1
  352. package/dist/device/wocurtain.test.d.ts.map +0 -1
  353. package/dist/device/wocurtain.test.js +0 -33
  354. package/dist/device/wocurtain.test.js.map +0 -1
  355. package/dist/device/wohand.test.js +0 -62
  356. package/dist/device/wohand.test.js.map +0 -1
  357. package/dist/device/wohand2.test.d.ts +0 -2
  358. package/dist/device/wohand2.test.d.ts.map +0 -1
  359. package/dist/device/wohand2.test.js.map +0 -1
  360. package/dist/device/wohumi.test.js.map +0 -1
  361. package/dist/device/woiosensorth.test.d.ts.map +0 -1
  362. package/dist/device/woiosensorth.test.js.map +0 -1
  363. package/dist/device/woplugmini.test.d.ts.map +0 -1
  364. package/dist/device/woplugmini.test.js.map +0 -1
  365. package/dist/device/wopresence.test.d.ts.map +0 -1
  366. package/dist/device/wopresence.test.js.map +0 -1
  367. package/dist/device/wosensorth.test.d.ts.map +0 -1
  368. package/dist/device/wosensorth.test.js.map +0 -1
  369. package/dist/device/wosmartlock.test.d.ts.map +0 -1
  370. package/dist/device/wosmartlock.test.js +0 -84
  371. package/dist/device/wosmartlock.test.js.map +0 -1
  372. package/dist/device/wosmartlockpro.test.d.ts.map +0 -1
  373. package/dist/device/wosmartlockpro.test.js.map +0 -1
  374. package/dist/device/wostrip.test.js.map +0 -1
  375. package/dist/switchbot.d.ts.map +0 -1
  376. package/dist/switchbot.js +0 -259
  377. package/dist/switchbot.js.map +0 -1
  378. package/dist/types/pushbody.d.ts +0 -6
  379. package/dist/types/pushbody.d.ts.map +0 -1
  380. package/dist/types/pushbody.js +0 -2
  381. package/dist/types/pushbody.js.map +0 -1
  382. package/docs/classes/SwitchBot.html +0 -16
  383. package/docs/types/SwitchBotBLEDevice.html +0 -1
  384. /package/dist/{device → test}/woblindtilt.test.d.ts +0 -0
  385. /package/dist/{device → test}/wobulb.test.d.ts +0 -0
  386. /package/dist/{device → test}/woceilinglight.test.d.ts +0 -0
  387. /package/dist/{device → test}/wocontact.test.d.ts +0 -0
  388. /package/dist/{device → test}/wocurtain.test.d.ts +0 -0
  389. /package/dist/{device → test}/wohand.test.d.ts +0 -0
  390. /package/dist/{device → test}/wohumi.test.d.ts +0 -0
  391. /package/dist/{device → test}/woiosensorth.test.d.ts +0 -0
  392. /package/dist/{device → test}/woplugmini.test.d.ts +0 -0
  393. /package/dist/{device → test}/wopresence.test.d.ts +0 -0
  394. /package/dist/{device → test}/wosensorth.test.d.ts +0 -0
  395. /package/dist/{device → test}/wosmartlock.test.d.ts +0 -0
  396. /package/dist/{device → test}/wosmartlockpro.test.d.ts +0 -0
  397. /package/dist/{device → test}/wostrip.test.d.ts +0 -0
@@ -1,3 +1,31 @@
1
+ /**
2
+ * Switchbot BLE API registration settings.
3
+ *
4
+ * © 2024, donavanbecker (https://github.com/donavanbecker). All rights reserved.
5
+ */
6
+ /**
7
+ * This is the main url used to access SwitchBot API
8
+ */
9
+ export declare const Devices = "https://api.switch-bot.com/v1.1/devices";
10
+ /**
11
+ * This is the updateWebhook url used to access SwitchBot API
12
+ */
13
+ export declare const setupWebhook = "https://api.switch-bot.com/v1.1/webhook/setupWebhook";
14
+ /**
15
+ * This is the updateWebhook url used to access SwitchBot API
16
+ */
17
+ export declare const queryWebhook = "https://api.switch-bot.com/v1.1/webhook/queryWebhook";
18
+ /**
19
+ * This is the updateWebhook url used to access SwitchBot API
20
+ */
21
+ export declare const updateWebhook = "https://api.switch-bot.com/v1.1/webhook/updateWebhook";
22
+ /**
23
+ * This is the deleteWebhook url used to access SwitchBot API
24
+ */
25
+ export declare const deleteWebhook = "https://api.switch-bot.com/v1.1/webhook/deleteWebhook";
26
+ /**
27
+ * constants used to access SwitchBot BLE API
28
+ */
1
29
  export declare const SERV_UUID_PRIMARY = "cba20d00224d11e69fb80002a5d5c51b";
2
30
  export declare const CHAR_UUID_WRITE = "cba20002224d11e69fb80002a5d5c51b";
3
31
  export declare const CHAR_UUID_NOTIFY = "cba20003224d11e69fb80002a5d5c51b";
@@ -5,4 +33,22 @@ export declare const CHAR_UUID_DEVICE = "2a00";
5
33
  export declare const READ_TIMEOUT_MSEC = 3000;
6
34
  export declare const WRITE_TIMEOUT_MSEC = 3000;
7
35
  export declare const COMMAND_TIMEOUT_MSEC = 3000;
36
+ export declare enum WoSmartLockProCommands {
37
+ GET_CKIV = "570f2103",
38
+ LOCK_INFO = "570f4f8102",
39
+ UNLOCK = "570f4e0101000080",
40
+ UNLOCK_NO_UNLATCH = "570f4e01010000a0",
41
+ LOCK = "570f4e0101000000",
42
+ ENABLE_NOTIFICATIONS = "570e01001e00008101",
43
+ DISABLE_NOTIFICATIONS = "570e00"
44
+ }
45
+ export declare enum WoSmartLockCommands {
46
+ GET_CKIV = "570f2103",
47
+ LOCK_INFO = "570f4f8101",
48
+ UNLOCK = "570f4e01011080",
49
+ UNLOCK_NO_UNLATCH = "570f4e010110a0",
50
+ LOCK = "570f4e01011000",
51
+ ENABLE_NOTIFICATIONS = "570e01001e00008101",
52
+ DISABLE_NOTIFICATIONS = "570e00"
53
+ }
8
54
  //# sourceMappingURL=settings.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,iBAAiB,qCAAqC,CAAA;AACnE,eAAO,MAAM,eAAe,qCAAqC,CAAA;AACjE,eAAO,MAAM,gBAAgB,qCAAqC,CAAA;AAClE,eAAO,MAAM,gBAAgB,SAAS,CAAA;AACtC,eAAO,MAAM,iBAAiB,OAAO,CAAA;AACrC,eAAO,MAAM,kBAAkB,OAAO,CAAA;AACtC,eAAO,MAAM,oBAAoB,OAAO,CAAA"}
1
+ {"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,eAAO,MAAM,OAAO,4CAA4C,CAAA;AAEhE;;GAEG;AACH,eAAO,MAAM,YAAY,yDAAyD,CAAA;AAElF;;GAEG;AACH,eAAO,MAAM,YAAY,yDAAyD,CAAA;AAElF;;GAEG;AACH,eAAO,MAAM,aAAa,0DAA0D,CAAA;AAEpF;;GAEG;AACH,eAAO,MAAM,aAAa,0DAA0D,CAAA;AAEpF;;GAEG;AACH,eAAO,MAAM,iBAAiB,qCAAqC,CAAA;AACnE,eAAO,MAAM,eAAe,qCAAqC,CAAA;AACjE,eAAO,MAAM,gBAAgB,qCAAqC,CAAA;AAClE,eAAO,MAAM,gBAAgB,SAAS,CAAA;AAEtC,eAAO,MAAM,iBAAiB,OAAO,CAAA;AACrC,eAAO,MAAM,kBAAkB,OAAO,CAAA;AACtC,eAAO,MAAM,oBAAoB,OAAO,CAAA;AAExC,oBAAY,sBAAsB;IAChC,QAAQ,aAAa;IACrB,SAAS,eAAe;IACxB,MAAM,qBAAqB;IAC3B,iBAAiB,qBAAqB;IACtC,IAAI,qBAAqB;IACzB,oBAAoB,uBAAuB;IAC3C,qBAAqB,WAAW;CACjC;AAED,oBAAY,mBAAmB;IAC7B,QAAQ,aAAa;IACrB,SAAS,eAAe;IACxB,MAAM,mBAAmB;IACzB,iBAAiB,mBAAmB;IACpC,IAAI,mBAAmB;IACvB,oBAAoB,uBAAuB;IAC3C,qBAAqB,WAAW;CACjC"}
package/dist/settings.js CHANGED
@@ -1,6 +1,30 @@
1
- /* Copyright(C) 2024, donavanbecker (https://github.com/donavanbecker). All rights reserved.
1
+ /**
2
+ * Switchbot BLE API registration settings.
2
3
  *
3
- * settings.ts: Switchbot BLE API registration.
4
+ * © 2024, donavanbecker (https://github.com/donavanbecker). All rights reserved.
5
+ */
6
+ /**
7
+ * This is the main url used to access SwitchBot API
8
+ */
9
+ export const Devices = 'https://api.switch-bot.com/v1.1/devices';
10
+ /**
11
+ * This is the updateWebhook url used to access SwitchBot API
12
+ */
13
+ export const setupWebhook = 'https://api.switch-bot.com/v1.1/webhook/setupWebhook';
14
+ /**
15
+ * This is the updateWebhook url used to access SwitchBot API
16
+ */
17
+ export const queryWebhook = 'https://api.switch-bot.com/v1.1/webhook/queryWebhook';
18
+ /**
19
+ * This is the updateWebhook url used to access SwitchBot API
20
+ */
21
+ export const updateWebhook = 'https://api.switch-bot.com/v1.1/webhook/updateWebhook';
22
+ /**
23
+ * This is the deleteWebhook url used to access SwitchBot API
24
+ */
25
+ export const deleteWebhook = 'https://api.switch-bot.com/v1.1/webhook/deleteWebhook';
26
+ /**
27
+ * constants used to access SwitchBot BLE API
4
28
  */
5
29
  export const SERV_UUID_PRIMARY = 'cba20d00224d11e69fb80002a5d5c51b';
6
30
  export const CHAR_UUID_WRITE = 'cba20002224d11e69fb80002a5d5c51b';
@@ -9,4 +33,24 @@ export const CHAR_UUID_DEVICE = '2a00';
9
33
  export const READ_TIMEOUT_MSEC = 3000;
10
34
  export const WRITE_TIMEOUT_MSEC = 3000;
11
35
  export const COMMAND_TIMEOUT_MSEC = 3000;
36
+ export var WoSmartLockProCommands;
37
+ (function (WoSmartLockProCommands) {
38
+ WoSmartLockProCommands["GET_CKIV"] = "570f2103";
39
+ WoSmartLockProCommands["LOCK_INFO"] = "570f4f8102";
40
+ WoSmartLockProCommands["UNLOCK"] = "570f4e0101000080";
41
+ WoSmartLockProCommands["UNLOCK_NO_UNLATCH"] = "570f4e01010000a0";
42
+ WoSmartLockProCommands["LOCK"] = "570f4e0101000000";
43
+ WoSmartLockProCommands["ENABLE_NOTIFICATIONS"] = "570e01001e00008101";
44
+ WoSmartLockProCommands["DISABLE_NOTIFICATIONS"] = "570e00";
45
+ })(WoSmartLockProCommands || (WoSmartLockProCommands = {}));
46
+ export var WoSmartLockCommands;
47
+ (function (WoSmartLockCommands) {
48
+ WoSmartLockCommands["GET_CKIV"] = "570f2103";
49
+ WoSmartLockCommands["LOCK_INFO"] = "570f4f8101";
50
+ WoSmartLockCommands["UNLOCK"] = "570f4e01011080";
51
+ WoSmartLockCommands["UNLOCK_NO_UNLATCH"] = "570f4e010110a0";
52
+ WoSmartLockCommands["LOCK"] = "570f4e01011000";
53
+ WoSmartLockCommands["ENABLE_NOTIFICATIONS"] = "570e01001e00008101";
54
+ WoSmartLockCommands["DISABLE_NOTIFICATIONS"] = "570e00";
55
+ })(WoSmartLockCommands || (WoSmartLockCommands = {}));
12
56
  //# sourceMappingURL=settings.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"settings.js","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,kCAAkC,CAAA;AACnE,MAAM,CAAC,MAAM,eAAe,GAAG,kCAAkC,CAAA;AACjE,MAAM,CAAC,MAAM,gBAAgB,GAAG,kCAAkC,CAAA;AAClE,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAA;AACtC,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,CAAA;AACrC,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,CAAA;AACtC,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,CAAA"}
1
+ {"version":3,"file":"settings.js","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,yCAAyC,CAAA;AAEhE;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,sDAAsD,CAAA;AAElF;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,sDAAsD,CAAA;AAElF;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,uDAAuD,CAAA;AAEpF;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,uDAAuD,CAAA;AAEpF;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,kCAAkC,CAAA;AACnE,MAAM,CAAC,MAAM,eAAe,GAAG,kCAAkC,CAAA;AACjE,MAAM,CAAC,MAAM,gBAAgB,GAAG,kCAAkC,CAAA;AAClE,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAA;AAEtC,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,CAAA;AACrC,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,CAAA;AACtC,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,CAAA;AAExC,MAAM,CAAN,IAAY,sBAQX;AARD,WAAY,sBAAsB;IAChC,+CAAqB,CAAA;IACrB,kDAAwB,CAAA;IACxB,qDAA2B,CAAA;IAC3B,gEAAsC,CAAA;IACtC,mDAAyB,CAAA;IACzB,qEAA2C,CAAA;IAC3C,0DAAgC,CAAA;AAClC,CAAC,EARW,sBAAsB,KAAtB,sBAAsB,QAQjC;AAED,MAAM,CAAN,IAAY,mBAQX;AARD,WAAY,mBAAmB;IAC7B,4CAAqB,CAAA;IACrB,+CAAwB,CAAA;IACxB,gDAAyB,CAAA;IACzB,2DAAoC,CAAA;IACpC,8CAAuB,CAAA;IACvB,kEAA2C,CAAA;IAC3C,uDAAgC,CAAA;AAClC,CAAC,EARW,mBAAmB,KAAnB,mBAAmB,QAQ9B"}
@@ -1,18 +1,17 @@
1
- import type { Ad } from './advertising.js';
2
- import type { Params } from './types/types.js';
3
- import * as Noble from '@stoprocent/noble';
1
+ import type * as Noble from '@stoprocent/noble';
2
+ import type { Ad, Params } from './types/types.js';
4
3
  import { SwitchbotDevice } from './device.js';
5
4
  /**
6
5
  * SwitchBot class to interact with SwitchBot devices.
7
6
  */
8
- export declare class SwitchBot {
7
+ export declare class SwitchBotBLE {
9
8
  private ready;
10
9
  noble: typeof Noble;
11
10
  ondiscover?: (device: SwitchbotDevice) => void;
12
11
  onadvertisement?: (ad: Ad) => void;
13
- onlog?: (message: string) => void;
12
+ onlog: ((message: string) => void) | undefined;
14
13
  DEFAULT_DISCOVERY_DURATION: number;
15
- PRIMARY_SERVICE_UUID_LIST: string[];
14
+ PRIMARY_SERVICE_UUID_LIST: never[];
16
15
  /**
17
16
  * Constructor
18
17
  *
@@ -58,7 +57,7 @@ export declare class SwitchBot {
58
57
  * @param {string} model - The device model.
59
58
  * @returns {boolean} - True if the advertising data matches the id and model, false otherwise.
60
59
  */
61
- filterAdvertising(ad: Ad, id: string, model: string): boolean;
60
+ filterAdvertising(ad: Ad, id: string, model: string): Promise<boolean>;
62
61
  /**
63
62
  * Starts scanning for SwitchBot devices.
64
63
  *
@@ -81,4 +80,4 @@ export declare class SwitchBot {
81
80
  wait(msec: number): Promise<void>;
82
81
  }
83
82
  export { SwitchbotDevice };
84
- //# sourceMappingURL=switchbot.d.ts.map
83
+ //# sourceMappingURL=switchbot-ble.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"switchbot-ble.d.ts","sourceRoot":"","sources":["../src/switchbot-ble.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,KAAK,KAAK,MAAM,mBAAmB,CAAA;AAE/C,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAGlD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAmB7C;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,KAAK,CAAe;IAC5B,KAAK,EAAG,OAAO,KAAK,CAAA;IACpB,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,IAAI,CAAA;IAC9C,eAAe,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,IAAI,CAAA;IAClC,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAAA;IAC9C,0BAA0B,SAAO;IACjC,yBAAyB,UAAK;IAE9B;;;;;OAKG;gBACS,MAAM,CAAC,EAAE,MAAM;IAI3B;;;;;;OAMG;IACG,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAY1C;;;;;OAKG;IACG,QAAQ,CAAC,MAAM,GAAE,MAAW,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAmH/D;;;;OAIG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAuC5B;;;;;;;OAOG;IACG,eAAe,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;IAqE/G;;;;;;;OAOG;IACG,iBAAiB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAmB5E;;;;;OAKG;IACG,SAAS,CAAC,MAAM,GAAE,MAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAkFnD;;;;OAIG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAS/B;;;;;OAKG;IACG,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAqBxC;AAED,OAAO,EAAE,eAAe,EAAE,CAAA"}
@@ -0,0 +1,412 @@
1
+ import { Advertising } from './advertising.js';
2
+ import { SwitchbotDevice } from './device.js';
3
+ import { WoBlindTilt } from './device/woblindtilt.js';
4
+ import { WoBulb } from './device/wobulb.js';
5
+ import { WoCeilingLight } from './device/woceilinglight.js';
6
+ import { WoContact } from './device/wocontact.js';
7
+ import { WoCurtain } from './device/wocurtain.js';
8
+ import { WoHand } from './device/wohand.js';
9
+ import { WoHub2 } from './device/wohub2.js';
10
+ import { WoHumi } from './device/wohumi.js';
11
+ import { WoIOSensorTH } from './device/woiosensorth.js';
12
+ import { WoPlugMini } from './device/woplugmini.js';
13
+ import { WoPresence } from './device/wopresence.js';
14
+ import { WoSensorTH } from './device/wosensorth.js';
15
+ import { WoSmartLock } from './device/wosmartlock.js';
16
+ import { WoSmartLockPro } from './device/wosmartlockpro.js';
17
+ import { WoStrip } from './device/wostrip.js';
18
+ import { parameterChecker } from './parameter-checker.js';
19
+ import { SwitchBotBLEModel } from './types/types.js';
20
+ /**
21
+ * SwitchBot class to interact with SwitchBot devices.
22
+ */
23
+ export class SwitchBotBLE {
24
+ ready;
25
+ noble;
26
+ ondiscover;
27
+ onadvertisement;
28
+ onlog;
29
+ DEFAULT_DISCOVERY_DURATION = 5000;
30
+ PRIMARY_SERVICE_UUID_LIST = [];
31
+ /**
32
+ * Constructor
33
+ *
34
+ * @param {Params} [params] - Optional parameters
35
+ * @param {typeof Noble} [params.noble] - Optional noble instance
36
+ */
37
+ constructor(params) {
38
+ this.ready = this.init(params);
39
+ }
40
+ /**
41
+ * Initializes the noble object.
42
+ *
43
+ * @param {Params} [params] - Optional parameters
44
+ * @param {typeof Noble} [params.noble] - Optional noble instance
45
+ * @returns {Promise<void>} - Resolves when initialization is complete
46
+ */
47
+ async init(params) {
48
+ let noble;
49
+ if (params && params.noble) {
50
+ noble = params.noble;
51
+ }
52
+ else {
53
+ noble = (await import('@stoprocent/noble')).default;
54
+ }
55
+ // Public properties
56
+ this.noble = noble;
57
+ }
58
+ /**
59
+ * Discover SwitchBot devices based on the provided parameters.
60
+ *
61
+ * @param {Params} params - The parameters for discovery.
62
+ * @returns {Promise<SwitchbotDevice[]>} - A promise that resolves with a list of discovered devices.
63
+ */
64
+ async discover(params = {}) {
65
+ const promise = new Promise((resolve, reject) => {
66
+ // Check the parameters
67
+ const valid = parameterChecker.check(params, {
68
+ duration: { required: false, type: 'integer', min: 1, max: 60000 },
69
+ model: {
70
+ required: false,
71
+ type: 'string',
72
+ enum: [
73
+ SwitchBotBLEModel.Bot,
74
+ SwitchBotBLEModel.Curtain,
75
+ SwitchBotBLEModel.Curtain3,
76
+ SwitchBotBLEModel.Humidifier,
77
+ SwitchBotBLEModel.Meter,
78
+ SwitchBotBLEModel.MeterPlus,
79
+ SwitchBotBLEModel.Hub2,
80
+ SwitchBotBLEModel.OutdoorMeter,
81
+ SwitchBotBLEModel.MotionSensor,
82
+ SwitchBotBLEModel.ContactSensor,
83
+ SwitchBotBLEModel.ColorBulb,
84
+ SwitchBotBLEModel.CeilingLight,
85
+ SwitchBotBLEModel.CeilingLightPro,
86
+ SwitchBotBLEModel.StripLight,
87
+ SwitchBotBLEModel.PlugMiniUS,
88
+ SwitchBotBLEModel.PlugMiniJP,
89
+ SwitchBotBLEModel.Lock,
90
+ SwitchBotBLEModel.LockPro,
91
+ SwitchBotBLEModel.BlindTilt,
92
+ ],
93
+ },
94
+ id: { required: false, type: 'string', min: 12, max: 17 },
95
+ quick: { required: false, type: 'boolean' },
96
+ }, false);
97
+ if (!valid) {
98
+ reject(new Error(parameterChecker.error.message));
99
+ return;
100
+ }
101
+ if (!params) {
102
+ params = {};
103
+ }
104
+ // Determine the values of the parameters
105
+ const p = {
106
+ duration: params.duration || this.DEFAULT_DISCOVERY_DURATION,
107
+ model: params.model || '',
108
+ id: params.id || '',
109
+ quick: !!params.quick,
110
+ };
111
+ // Initialize the noble object
112
+ this._init()
113
+ .then(() => {
114
+ if (this.noble === null) {
115
+ return reject(new Error('noble failed to initialize'));
116
+ }
117
+ const peripherals = {};
118
+ let timer = setTimeout(() => { }, 0);
119
+ const finishDiscovery = () => {
120
+ if (timer) {
121
+ clearTimeout(timer);
122
+ }
123
+ this.noble.removeAllListeners('discover');
124
+ this.noble.stopScanningAsync();
125
+ const device_list = [];
126
+ for (const addr in peripherals) {
127
+ device_list.push(peripherals[addr]);
128
+ }
129
+ resolve(device_list);
130
+ };
131
+ // Set a handler for the 'discover' event
132
+ this.noble.on('discover', async (peripheral) => {
133
+ const device = await this.getDeviceObject(peripheral, p.id, p.model);
134
+ if (!device) {
135
+ return;
136
+ }
137
+ const id = device.id;
138
+ peripherals[id] = device;
139
+ if (this.ondiscover && typeof this.ondiscover === 'function') {
140
+ this.ondiscover(device);
141
+ }
142
+ if (p.quick) {
143
+ finishDiscovery();
144
+ }
145
+ });
146
+ // Start scanning
147
+ this.noble.startScanningAsync(this.PRIMARY_SERVICE_UUID_LIST, false).then(() => {
148
+ timer = setTimeout(() => {
149
+ finishDiscovery();
150
+ }, p.duration);
151
+ }).catch((error) => {
152
+ reject(error);
153
+ });
154
+ })
155
+ .catch((error) => {
156
+ reject(error);
157
+ });
158
+ });
159
+ return promise;
160
+ }
161
+ /**
162
+ * Initializes the noble object and waits for it to be powered on.
163
+ *
164
+ * @returns {Promise<void>} - Resolves when the noble object is powered on.
165
+ */
166
+ async _init() {
167
+ await this.ready;
168
+ const promise = new Promise((resolve, reject) => {
169
+ let err;
170
+ if (this.noble._state === 'poweredOn') {
171
+ resolve();
172
+ return;
173
+ }
174
+ this.noble.once('stateChange', (state) => {
175
+ switch (state) {
176
+ case 'unsupported':
177
+ case 'unauthorized':
178
+ case 'poweredOff':
179
+ err = new Error(`Failed to initialize the Noble object: ${this.noble._state}`);
180
+ reject(err);
181
+ return;
182
+ case 'resetting':
183
+ case 'unknown':
184
+ err = new Error(`Adapter is not ready: ${this.noble._state}`);
185
+ reject(err);
186
+ return;
187
+ case 'poweredOn':
188
+ resolve();
189
+ return;
190
+ default:
191
+ err = new Error(`Unknown state: ${this.noble._state}`);
192
+ reject(err);
193
+ }
194
+ });
195
+ });
196
+ return promise;
197
+ }
198
+ /**
199
+ * Gets the device object based on the peripheral, id, and model.
200
+ *
201
+ * @param {Noble.Peripheral} peripheral - The peripheral object.
202
+ * @param {string} id - The device id.
203
+ * @param {string} model - The device model.
204
+ * @returns {Promise<SwitchbotDevice | null>} - The device object or null.
205
+ */
206
+ async getDeviceObject(peripheral, id, model) {
207
+ const ad = await Advertising.parse(peripheral, this.onlog);
208
+ if (ad && await this.filterAdvertising(ad, id, model)) {
209
+ let device;
210
+ if (ad && ad.serviceData && ad.serviceData.model) {
211
+ switch (ad.serviceData.model) {
212
+ case SwitchBotBLEModel.Bot:
213
+ device = new WoHand(peripheral, this.noble);
214
+ break;
215
+ case SwitchBotBLEModel.Curtain:
216
+ case SwitchBotBLEModel.Curtain3:
217
+ device = new WoCurtain(peripheral, this.noble);
218
+ break;
219
+ case SwitchBotBLEModel.Humidifier:
220
+ device = new WoHumi(peripheral, this.noble);
221
+ break;
222
+ case SwitchBotBLEModel.Meter:
223
+ device = new WoSensorTH(peripheral, this.noble);
224
+ break;
225
+ case SwitchBotBLEModel.MeterPlus:
226
+ device = new WoSensorTH(peripheral, this.noble);
227
+ break;
228
+ case SwitchBotBLEModel.Hub2:
229
+ device = new WoHub2(peripheral, this.noble);
230
+ break;
231
+ case SwitchBotBLEModel.OutdoorMeter:
232
+ device = new WoIOSensorTH(peripheral, this.noble);
233
+ break;
234
+ case SwitchBotBLEModel.MotionSensor:
235
+ device = new WoPresence(peripheral, this.noble);
236
+ break;
237
+ case SwitchBotBLEModel.ContactSensor:
238
+ device = new WoContact(peripheral, this.noble);
239
+ break;
240
+ case SwitchBotBLEModel.ColorBulb:
241
+ device = new WoBulb(peripheral, this.noble);
242
+ break;
243
+ case SwitchBotBLEModel.CeilingLight:
244
+ device = new WoCeilingLight(peripheral, this.noble);
245
+ break;
246
+ case SwitchBotBLEModel.CeilingLightPro:
247
+ device = new WoCeilingLight(peripheral, this.noble);
248
+ break;
249
+ case SwitchBotBLEModel.StripLight:
250
+ device = new WoStrip(peripheral, this.noble);
251
+ break;
252
+ case SwitchBotBLEModel.PlugMiniUS:
253
+ case SwitchBotBLEModel.PlugMiniJP:
254
+ device = new WoPlugMini(peripheral, this.noble);
255
+ break;
256
+ case SwitchBotBLEModel.Lock:
257
+ device = new WoSmartLock(peripheral, this.noble);
258
+ break;
259
+ case SwitchBotBLEModel.LockPro:
260
+ device = new WoSmartLockPro(peripheral, this.noble);
261
+ break;
262
+ case SwitchBotBLEModel.BlindTilt:
263
+ device = new WoBlindTilt(peripheral, this.noble);
264
+ break;
265
+ default: // 'resetting', 'unknown'
266
+ device = new SwitchbotDevice(peripheral, this.noble);
267
+ }
268
+ }
269
+ return device || null;
270
+ }
271
+ else {
272
+ return null;
273
+ }
274
+ }
275
+ /**
276
+ * Filters advertising data based on id and model.
277
+ *
278
+ * @param {Ad} ad - The advertising data.
279
+ * @param {string} id - The device id.
280
+ * @param {string} model - The device model.
281
+ * @returns {boolean} - True if the advertising data matches the id and model, false otherwise.
282
+ */
283
+ async filterAdvertising(ad, id, model) {
284
+ if (!ad) {
285
+ return false;
286
+ }
287
+ if (id) {
288
+ id = id.toLowerCase().replace(/:/g, '');
289
+ const ad_id = ad.address.toLowerCase().replace(/[^a-z0-9]/g, '');
290
+ if (ad_id !== id) {
291
+ return false;
292
+ }
293
+ }
294
+ if (model) {
295
+ if (ad.serviceData.model !== model) {
296
+ return false;
297
+ }
298
+ }
299
+ return true;
300
+ }
301
+ /**
302
+ * Starts scanning for SwitchBot devices.
303
+ *
304
+ * @param {Params} [params] - Optional parameters.
305
+ * @returns {Promise<void>} - Resolves when scanning starts successfully.
306
+ */
307
+ async startScan(params = {}) {
308
+ const promise = new Promise((resolve, reject) => {
309
+ // Check the parameters
310
+ const valid = parameterChecker.check(params, {
311
+ model: {
312
+ required: false,
313
+ type: 'string',
314
+ enum: [
315
+ SwitchBotBLEModel.Bot,
316
+ SwitchBotBLEModel.Curtain,
317
+ SwitchBotBLEModel.Curtain3,
318
+ SwitchBotBLEModel.Humidifier,
319
+ SwitchBotBLEModel.Meter,
320
+ SwitchBotBLEModel.MeterPlus,
321
+ SwitchBotBLEModel.Hub2,
322
+ SwitchBotBLEModel.OutdoorMeter,
323
+ SwitchBotBLEModel.MotionSensor,
324
+ SwitchBotBLEModel.ContactSensor,
325
+ SwitchBotBLEModel.ColorBulb,
326
+ SwitchBotBLEModel.CeilingLight,
327
+ SwitchBotBLEModel.CeilingLightPro,
328
+ SwitchBotBLEModel.StripLight,
329
+ SwitchBotBLEModel.PlugMiniUS,
330
+ SwitchBotBLEModel.PlugMiniJP,
331
+ SwitchBotBLEModel.Lock,
332
+ SwitchBotBLEModel.LockPro,
333
+ SwitchBotBLEModel.BlindTilt,
334
+ ],
335
+ },
336
+ id: { required: false, type: 'string', min: 12, max: 17 },
337
+ }, false);
338
+ if (!valid) {
339
+ reject(new Error(parameterChecker.error.message));
340
+ return;
341
+ }
342
+ // Initialize the noble object
343
+ this._init()
344
+ .then(() => {
345
+ if (this.noble === null) {
346
+ return reject(new Error('noble object failed to initialize'));
347
+ }
348
+ // Determine the values of the parameters
349
+ const p = {
350
+ model: params.model || '',
351
+ id: params.id || '',
352
+ };
353
+ // Set a handler for the 'discover' event
354
+ this.noble.on('discover', async (peripheral) => {
355
+ const ad = await Advertising.parse(peripheral, this.onlog);
356
+ if (ad && await this.filterAdvertising(ad, p.id, p.model)) {
357
+ if (this.onadvertisement
358
+ && typeof this.onadvertisement === 'function') {
359
+ this.onadvertisement(ad);
360
+ }
361
+ }
362
+ });
363
+ // Start scanning
364
+ this.noble.startScanningAsync(this.PRIMARY_SERVICE_UUID_LIST, true).then(() => {
365
+ resolve();
366
+ }).catch((error) => {
367
+ reject(error);
368
+ });
369
+ })
370
+ .catch((error) => {
371
+ reject(error);
372
+ });
373
+ });
374
+ return promise;
375
+ }
376
+ /**
377
+ * Stops scanning for SwitchBot devices.
378
+ *
379
+ * @returns {Promise<void>} - Resolves when scanning stops successfully.
380
+ */
381
+ async stopScan() {
382
+ if (this.noble === null) {
383
+ return;
384
+ }
385
+ this.noble.removeAllListeners('discover');
386
+ this.noble.stopScanningAsync();
387
+ }
388
+ /**
389
+ * Waits for the specified time.
390
+ *
391
+ * @param {number} msec - The time to wait in milliseconds.
392
+ * @returns {Promise<void>} - Resolves after the specified time.
393
+ */
394
+ async wait(msec) {
395
+ return new Promise((resolve, reject) => {
396
+ // Check the parameters
397
+ const valid = parameterChecker.check({
398
+ msec,
399
+ }, {
400
+ msec: { required: true, type: 'integer', min: 0 },
401
+ }, true);
402
+ if (!valid) {
403
+ reject(new Error(parameterChecker.error.message));
404
+ return;
405
+ }
406
+ // Set a timer
407
+ setTimeout(resolve, msec);
408
+ });
409
+ }
410
+ }
411
+ export { SwitchbotDevice };
412
+ //# sourceMappingURL=switchbot-ble.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"switchbot-ble.js","sourceRoot":"","sources":["../src/switchbot-ble.ts"],"names":[],"mappings":"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"}