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

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 (405) 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 +32 -21
  11. package/dist/advertising.d.ts.map +1 -1
  12. package/dist/advertising.js +72 -76
  13. package/dist/advertising.js.map +1 -1
  14. package/dist/device/woblindtilt.d.ts +21 -51
  15. package/dist/device/woblindtilt.d.ts.map +1 -1
  16. package/dist/device/woblindtilt.js +40 -103
  17. package/dist/device/woblindtilt.js.map +1 -1
  18. package/dist/device/wobulb.d.ts +42 -15
  19. package/dist/device/wobulb.d.ts.map +1 -1
  20. package/dist/device/wobulb.js +71 -131
  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 -174
  25. package/dist/device/woceilinglight.js.map +1 -1
  26. package/dist/device/wocontact.d.ts +12 -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 +40 -1
  31. package/dist/device/wocurtain.d.ts.map +1 -1
  32. package/dist/device/wocurtain.js +68 -106
  33. package/dist/device/wocurtain.js.map +1 -1
  34. package/dist/device/wohand.d.ts +38 -2
  35. package/dist/device/wohand.d.ts.map +1 -1
  36. package/dist/device/wohand.js +54 -92
  37. package/dist/device/wohand.js.map +1 -1
  38. package/dist/device/wohub2.d.ts +12 -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 +38 -2
  43. package/dist/device/wohumi.d.ts.map +1 -1
  44. package/dist/device/wohumi.js +51 -86
  45. package/dist/device/wohumi.js.map +1 -1
  46. package/dist/device/woiosensorth.d.ts +13 -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 +44 -12
  51. package/dist/device/woplugmini.d.ts.map +1 -1
  52. package/dist/device/woplugmini.js +68 -80
  53. package/dist/device/woplugmini.js.map +1 -1
  54. package/dist/device/wopresence.d.ts +12 -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 +33 -50
  61. package/dist/device/wosensorth.js.map +1 -1
  62. package/dist/device/wosmartlock.d.ts +58 -13
  63. package/dist/device/wosmartlock.d.ts.map +1 -1
  64. package/dist/device/wosmartlock.js +108 -195
  65. package/dist/device/wosmartlock.js.map +1 -1
  66. package/dist/device/wosmartlockpro.d.ts +63 -18
  67. package/dist/device/wosmartlockpro.d.ts.map +1 -1
  68. package/dist/device/wosmartlockpro.js +116 -204
  69. package/dist/device/wosmartlockpro.js.map +1 -1
  70. package/dist/device/wostrip.d.ts +38 -18
  71. package/dist/device/wostrip.d.ts.map +1 -1
  72. package/dist/device/wostrip.js +79 -125
  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} +14 -8
  91. package/dist/switchbot-ble.d.ts.map +1 -0
  92. package/dist/switchbot-ble.js +428 -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 +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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +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 +12 -10
  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 +0 -50
  360. package/dist/device/wohand2.test.js.map +0 -1
  361. package/dist/device/wohumi.test.js +0 -61
  362. package/dist/device/wohumi.test.js.map +0 -1
  363. package/dist/device/woiosensorth.test.d.ts.map +0 -1
  364. package/dist/device/woiosensorth.test.js +0 -39
  365. package/dist/device/woiosensorth.test.js.map +0 -1
  366. package/dist/device/woplugmini.test.d.ts.map +0 -1
  367. package/dist/device/woplugmini.test.js +0 -91
  368. package/dist/device/woplugmini.test.js.map +0 -1
  369. package/dist/device/wopresence.test.d.ts.map +0 -1
  370. package/dist/device/wopresence.test.js +0 -42
  371. package/dist/device/wopresence.test.js.map +0 -1
  372. package/dist/device/wosensorth.test.d.ts.map +0 -1
  373. package/dist/device/wosensorth.test.js +0 -59
  374. package/dist/device/wosensorth.test.js.map +0 -1
  375. package/dist/device/wosmartlock.test.d.ts.map +0 -1
  376. package/dist/device/wosmartlock.test.js +0 -84
  377. package/dist/device/wosmartlock.test.js.map +0 -1
  378. package/dist/device/wosmartlockpro.test.d.ts.map +0 -1
  379. package/dist/device/wosmartlockpro.test.js +0 -124
  380. package/dist/device/wosmartlockpro.test.js.map +0 -1
  381. package/dist/device/wostrip.test.js +0 -115
  382. package/dist/device/wostrip.test.js.map +0 -1
  383. package/dist/switchbot.d.ts.map +0 -1
  384. package/dist/switchbot.js +0 -259
  385. package/dist/switchbot.js.map +0 -1
  386. package/dist/types/pushbody.d.ts +0 -6
  387. package/dist/types/pushbody.d.ts.map +0 -1
  388. package/dist/types/pushbody.js +0 -2
  389. package/dist/types/pushbody.js.map +0 -1
  390. package/docs/classes/SwitchBot.html +0 -16
  391. package/docs/types/SwitchBotBLEDevice.html +0 -1
  392. /package/dist/{device → test}/woblindtilt.test.d.ts +0 -0
  393. /package/dist/{device → test}/wobulb.test.d.ts +0 -0
  394. /package/dist/{device → test}/woceilinglight.test.d.ts +0 -0
  395. /package/dist/{device → test}/wocontact.test.d.ts +0 -0
  396. /package/dist/{device → test}/wocurtain.test.d.ts +0 -0
  397. /package/dist/{device → test}/wohand.test.d.ts +0 -0
  398. /package/dist/{device → test}/wohumi.test.d.ts +0 -0
  399. /package/dist/{device → test}/woiosensorth.test.d.ts +0 -0
  400. /package/dist/{device → test}/woplugmini.test.d.ts +0 -0
  401. /package/dist/{device → test}/wopresence.test.d.ts +0 -0
  402. /package/dist/{device → test}/wosensorth.test.d.ts +0 -0
  403. /package/dist/{device → test}/wosmartlock.test.d.ts +0 -0
  404. /package/dist/{device → test}/wosmartlockpro.test.d.ts +0 -0
  405. /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';
3
+ import { EventEmitter } from 'node:events';
4
4
  import { SwitchbotDevice } from './device.js';
5
5
  /**
6
6
  * SwitchBot class to interact with SwitchBot devices.
7
7
  */
8
- export declare class SwitchBot {
8
+ export declare class SwitchBotBLE extends EventEmitter {
9
9
  private ready;
10
10
  noble: typeof Noble;
11
11
  ondiscover?: (device: SwitchbotDevice) => void;
12
12
  onadvertisement?: (ad: Ad) => void;
13
- onlog?: (message: string) => void;
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
  *
@@ -20,6 +19,13 @@ export declare class SwitchBot {
20
19
  * @param {typeof Noble} [params.noble] - Optional noble instance
21
20
  */
22
21
  constructor(params?: Params);
22
+ /**
23
+ * Emits a log event with the specified log level and message.
24
+ *
25
+ * @param level - The severity level of the log (e.g., 'info', 'warn', 'error').
26
+ * @param message - The log message to be emitted.
27
+ */
28
+ emitLog(level: string, message: string): Promise<void>;
23
29
  /**
24
30
  * Initializes the noble object.
25
31
  *
@@ -58,7 +64,7 @@ export declare class SwitchBot {
58
64
  * @param {string} model - The device model.
59
65
  * @returns {boolean} - True if the advertising data matches the id and model, false otherwise.
60
66
  */
61
- filterAdvertising(ad: Ad, id: string, model: string): boolean;
67
+ filterAdvertising(ad: Ad, id: string, model: string): Promise<boolean>;
62
68
  /**
63
69
  * Starts scanning for SwitchBot devices.
64
70
  *
@@ -81,4 +87,4 @@ export declare class SwitchBot {
81
87
  wait(msec: number): Promise<void>;
82
88
  }
83
89
  export { SwitchbotDevice };
84
- //# sourceMappingURL=switchbot.d.ts.map
90
+ //# 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,YAAY,EAAE,MAAM,aAAa,CAAA;AAG1C,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAkB7C;;GAEG;AACH,qBAAa,YAAa,SAAQ,YAAY;IAC5C,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,0BAA0B,SAAO;IACjC,yBAAyB,UAAK;IAE9B;;;;;OAKG;gBACS,MAAM,CAAC,EAAE,MAAM;IAK3B;;;;;OAKG;IACU,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAInE;;;;;;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;IAoH/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;IAqFnD;;;;OAIG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAU/B;;;;;OAKG;IACG,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAsBxC;AAED,OAAO,EAAE,eAAe,EAAE,CAAA"}
@@ -0,0 +1,428 @@
1
+ import { EventEmitter } from 'node:events';
2
+ import { Advertising } from './advertising.js';
3
+ import { SwitchbotDevice } from './device.js';
4
+ import { WoBlindTilt } from './device/woblindtilt.js';
5
+ import { WoBulb } from './device/wobulb.js';
6
+ import { WoCeilingLight } from './device/woceilinglight.js';
7
+ import { WoContact } from './device/wocontact.js';
8
+ import { WoCurtain } from './device/wocurtain.js';
9
+ import { WoHand } from './device/wohand.js';
10
+ import { WoHub2 } from './device/wohub2.js';
11
+ import { WoHumi } from './device/wohumi.js';
12
+ import { WoIOSensorTH } from './device/woiosensorth.js';
13
+ import { WoPlugMini } from './device/woplugmini.js';
14
+ import { WoPresence } from './device/wopresence.js';
15
+ import { WoSensorTH } from './device/wosensorth.js';
16
+ import { WoSmartLock } from './device/wosmartlock.js';
17
+ import { WoSmartLockPro } from './device/wosmartlockpro.js';
18
+ import { WoStrip } from './device/wostrip.js';
19
+ import { parameterChecker } from './parameter-checker.js';
20
+ import { SwitchBotBLEModel } from './types/types.js';
21
+ /**
22
+ * SwitchBot class to interact with SwitchBot devices.
23
+ */
24
+ export class SwitchBotBLE extends EventEmitter {
25
+ ready;
26
+ noble;
27
+ ondiscover;
28
+ onadvertisement;
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
+ super();
39
+ this.ready = this.init(params);
40
+ }
41
+ /**
42
+ * Emits a log event with the specified log level and message.
43
+ *
44
+ * @param level - The severity level of the log (e.g., 'info', 'warn', 'error').
45
+ * @param message - The log message to be emitted.
46
+ */
47
+ async emitLog(level, message) {
48
+ this.emit('log', { level, message });
49
+ }
50
+ /**
51
+ * Initializes the noble object.
52
+ *
53
+ * @param {Params} [params] - Optional parameters
54
+ * @param {typeof Noble} [params.noble] - Optional noble instance
55
+ * @returns {Promise<void>} - Resolves when initialization is complete
56
+ */
57
+ async init(params) {
58
+ let noble;
59
+ if (params && params.noble) {
60
+ noble = params.noble;
61
+ }
62
+ else {
63
+ noble = (await import('@stoprocent/noble')).default;
64
+ }
65
+ // Public properties
66
+ this.noble = noble;
67
+ }
68
+ /**
69
+ * Discover SwitchBot devices based on the provided parameters.
70
+ *
71
+ * @param {Params} params - The parameters for discovery.
72
+ * @returns {Promise<SwitchbotDevice[]>} - A promise that resolves with a list of discovered devices.
73
+ */
74
+ async discover(params = {}) {
75
+ const promise = new Promise((resolve, reject) => {
76
+ // Check the parameters
77
+ const valid = parameterChecker.check(params, {
78
+ duration: { required: false, type: 'integer', min: 1, max: 60000 },
79
+ model: {
80
+ required: false,
81
+ type: 'string',
82
+ enum: [
83
+ SwitchBotBLEModel.Bot,
84
+ SwitchBotBLEModel.Curtain,
85
+ SwitchBotBLEModel.Curtain3,
86
+ SwitchBotBLEModel.Humidifier,
87
+ SwitchBotBLEModel.Meter,
88
+ SwitchBotBLEModel.MeterPlus,
89
+ SwitchBotBLEModel.Hub2,
90
+ SwitchBotBLEModel.OutdoorMeter,
91
+ SwitchBotBLEModel.MotionSensor,
92
+ SwitchBotBLEModel.ContactSensor,
93
+ SwitchBotBLEModel.ColorBulb,
94
+ SwitchBotBLEModel.CeilingLight,
95
+ SwitchBotBLEModel.CeilingLightPro,
96
+ SwitchBotBLEModel.StripLight,
97
+ SwitchBotBLEModel.PlugMiniUS,
98
+ SwitchBotBLEModel.PlugMiniJP,
99
+ SwitchBotBLEModel.Lock,
100
+ SwitchBotBLEModel.LockPro,
101
+ SwitchBotBLEModel.BlindTilt,
102
+ ],
103
+ },
104
+ id: { required: false, type: 'string', min: 12, max: 17 },
105
+ quick: { required: false, type: 'boolean' },
106
+ }, false);
107
+ if (!valid) {
108
+ this.emitLog('error', `parameterChecker: ${JSON.stringify(parameterChecker.error.message)}`);
109
+ reject(new Error(parameterChecker.error.message));
110
+ return;
111
+ }
112
+ if (!params) {
113
+ params = {};
114
+ }
115
+ // Determine the values of the parameters
116
+ const p = {
117
+ duration: params.duration || this.DEFAULT_DISCOVERY_DURATION,
118
+ model: params.model || '',
119
+ id: params.id || '',
120
+ quick: !!params.quick,
121
+ };
122
+ // Initialize the noble object
123
+ this._init()
124
+ .then(() => {
125
+ if (this.noble === null) {
126
+ return reject(new Error('noble failed to initialize'));
127
+ }
128
+ const peripherals = {};
129
+ let timer = setTimeout(() => { }, 0);
130
+ const finishDiscovery = () => {
131
+ if (timer) {
132
+ clearTimeout(timer);
133
+ }
134
+ this.noble.removeAllListeners('discover');
135
+ this.noble.stopScanningAsync();
136
+ const device_list = [];
137
+ for (const addr in peripherals) {
138
+ device_list.push(peripherals[addr]);
139
+ }
140
+ resolve(device_list);
141
+ };
142
+ // Set a handler for the 'discover' event
143
+ this.noble.on('discover', async (peripheral) => {
144
+ const device = await this.getDeviceObject(peripheral, p.id, p.model);
145
+ if (!device) {
146
+ return;
147
+ }
148
+ const id = device.id;
149
+ peripherals[id] = device;
150
+ if (this.ondiscover && typeof this.ondiscover === 'function') {
151
+ this.ondiscover(device);
152
+ }
153
+ if (p.quick) {
154
+ finishDiscovery();
155
+ }
156
+ });
157
+ // Start scanning
158
+ this.noble.startScanningAsync(this.PRIMARY_SERVICE_UUID_LIST, false).then(() => {
159
+ timer = setTimeout(() => {
160
+ finishDiscovery();
161
+ }, p.duration);
162
+ }).catch((error) => {
163
+ reject(error);
164
+ });
165
+ })
166
+ .catch((error) => {
167
+ reject(error);
168
+ });
169
+ });
170
+ return promise;
171
+ }
172
+ /**
173
+ * Initializes the noble object and waits for it to be powered on.
174
+ *
175
+ * @returns {Promise<void>} - Resolves when the noble object is powered on.
176
+ */
177
+ async _init() {
178
+ await this.ready;
179
+ const promise = new Promise((resolve, reject) => {
180
+ let err;
181
+ if (this.noble._state === 'poweredOn') {
182
+ resolve();
183
+ return;
184
+ }
185
+ this.noble.once('stateChange', (state) => {
186
+ switch (state) {
187
+ case 'unsupported':
188
+ case 'unauthorized':
189
+ case 'poweredOff':
190
+ err = new Error(`Failed to initialize the Noble object: ${this.noble._state}`);
191
+ reject(err);
192
+ return;
193
+ case 'resetting':
194
+ case 'unknown':
195
+ err = new Error(`Adapter is not ready: ${this.noble._state}`);
196
+ reject(err);
197
+ return;
198
+ case 'poweredOn':
199
+ resolve();
200
+ return;
201
+ default:
202
+ err = new Error(`Unknown state: ${this.noble._state}`);
203
+ reject(err);
204
+ }
205
+ });
206
+ });
207
+ return promise;
208
+ }
209
+ /**
210
+ * Gets the device object based on the peripheral, id, and model.
211
+ *
212
+ * @param {Noble.Peripheral} peripheral - The peripheral object.
213
+ * @param {string} id - The device id.
214
+ * @param {string} model - The device model.
215
+ * @returns {Promise<SwitchbotDevice | null>} - The device object or null.
216
+ */
217
+ async getDeviceObject(peripheral, id, model) {
218
+ const ad = await Advertising.parse(peripheral);
219
+ if (ad && await this.filterAdvertising(ad, id, model)) {
220
+ let device;
221
+ if (ad && ad.serviceData && ad.serviceData.model) {
222
+ switch (ad.serviceData.model) {
223
+ case SwitchBotBLEModel.Bot:
224
+ device = new WoHand(peripheral, this.noble);
225
+ break;
226
+ case SwitchBotBLEModel.Curtain:
227
+ case SwitchBotBLEModel.Curtain3:
228
+ device = new WoCurtain(peripheral, this.noble);
229
+ break;
230
+ case SwitchBotBLEModel.Humidifier:
231
+ device = new WoHumi(peripheral, this.noble);
232
+ break;
233
+ case SwitchBotBLEModel.Meter:
234
+ device = new WoSensorTH(peripheral, this.noble);
235
+ break;
236
+ case SwitchBotBLEModel.MeterPlus:
237
+ device = new WoSensorTH(peripheral, this.noble);
238
+ break;
239
+ case SwitchBotBLEModel.Hub2:
240
+ device = new WoHub2(peripheral, this.noble);
241
+ break;
242
+ case SwitchBotBLEModel.OutdoorMeter:
243
+ device = new WoIOSensorTH(peripheral, this.noble);
244
+ break;
245
+ case SwitchBotBLEModel.MotionSensor:
246
+ device = new WoPresence(peripheral, this.noble);
247
+ break;
248
+ case SwitchBotBLEModel.ContactSensor:
249
+ device = new WoContact(peripheral, this.noble);
250
+ break;
251
+ case SwitchBotBLEModel.ColorBulb:
252
+ device = new WoBulb(peripheral, this.noble);
253
+ break;
254
+ case SwitchBotBLEModel.CeilingLight:
255
+ device = new WoCeilingLight(peripheral, this.noble);
256
+ break;
257
+ case SwitchBotBLEModel.CeilingLightPro:
258
+ device = new WoCeilingLight(peripheral, this.noble);
259
+ break;
260
+ case SwitchBotBLEModel.StripLight:
261
+ device = new WoStrip(peripheral, this.noble);
262
+ break;
263
+ case SwitchBotBLEModel.PlugMiniUS:
264
+ case SwitchBotBLEModel.PlugMiniJP:
265
+ device = new WoPlugMini(peripheral, this.noble);
266
+ break;
267
+ case SwitchBotBLEModel.Lock:
268
+ device = new WoSmartLock(peripheral, this.noble);
269
+ break;
270
+ case SwitchBotBLEModel.LockPro:
271
+ device = new WoSmartLockPro(peripheral, this.noble);
272
+ break;
273
+ case SwitchBotBLEModel.BlindTilt:
274
+ device = new WoBlindTilt(peripheral, this.noble);
275
+ break;
276
+ default: // 'resetting', 'unknown'
277
+ device = new SwitchbotDevice(peripheral, this.noble);
278
+ }
279
+ }
280
+ return device || null;
281
+ }
282
+ else {
283
+ return null;
284
+ }
285
+ }
286
+ /**
287
+ * Filters advertising data based on id and model.
288
+ *
289
+ * @param {Ad} ad - The advertising data.
290
+ * @param {string} id - The device id.
291
+ * @param {string} model - The device model.
292
+ * @returns {boolean} - True if the advertising data matches the id and model, false otherwise.
293
+ */
294
+ async filterAdvertising(ad, id, model) {
295
+ if (!ad) {
296
+ return false;
297
+ }
298
+ if (id) {
299
+ id = id.toLowerCase().replace(/:/g, '');
300
+ const ad_id = ad.address.toLowerCase().replace(/[^a-z0-9]/g, '');
301
+ if (ad_id !== id) {
302
+ return false;
303
+ }
304
+ }
305
+ if (model) {
306
+ if (ad.serviceData.model !== model) {
307
+ return false;
308
+ }
309
+ }
310
+ return true;
311
+ }
312
+ /**
313
+ * Starts scanning for SwitchBot devices.
314
+ *
315
+ * @param {Params} [params] - Optional parameters.
316
+ * @returns {Promise<void>} - Resolves when scanning starts successfully.
317
+ */
318
+ async startScan(params = {}) {
319
+ const promise = new Promise((resolve, reject) => {
320
+ // Check the parameters
321
+ const valid = parameterChecker.check(params, {
322
+ model: {
323
+ required: false,
324
+ type: 'string',
325
+ enum: [
326
+ SwitchBotBLEModel.Bot,
327
+ SwitchBotBLEModel.Curtain,
328
+ SwitchBotBLEModel.Curtain3,
329
+ SwitchBotBLEModel.Humidifier,
330
+ SwitchBotBLEModel.Meter,
331
+ SwitchBotBLEModel.MeterPlus,
332
+ SwitchBotBLEModel.Hub2,
333
+ SwitchBotBLEModel.OutdoorMeter,
334
+ SwitchBotBLEModel.MotionSensor,
335
+ SwitchBotBLEModel.ContactSensor,
336
+ SwitchBotBLEModel.ColorBulb,
337
+ SwitchBotBLEModel.CeilingLight,
338
+ SwitchBotBLEModel.CeilingLightPro,
339
+ SwitchBotBLEModel.StripLight,
340
+ SwitchBotBLEModel.PlugMiniUS,
341
+ SwitchBotBLEModel.PlugMiniJP,
342
+ SwitchBotBLEModel.Lock,
343
+ SwitchBotBLEModel.LockPro,
344
+ SwitchBotBLEModel.BlindTilt,
345
+ ],
346
+ },
347
+ id: { required: false, type: 'string', min: 12, max: 17 },
348
+ }, false);
349
+ if (!valid) {
350
+ this.emitLog('error', `parameterChecker: ${JSON.stringify(parameterChecker.error.message)}`);
351
+ reject(new Error(parameterChecker.error.message));
352
+ return;
353
+ }
354
+ // Initialize the noble object
355
+ this._init()
356
+ .then(() => {
357
+ if (this.noble === null) {
358
+ return reject(new Error('noble object failed to initialize'));
359
+ }
360
+ // Determine the values of the parameters
361
+ const p = {
362
+ model: params.model || '',
363
+ id: params.id || '',
364
+ };
365
+ // Set a handler for the 'discover' event
366
+ this.noble.on('discover', async (peripheral) => {
367
+ const ad = await Advertising.parse(peripheral);
368
+ if (ad && await this.filterAdvertising(ad, p.id, p.model)) {
369
+ if (this.onadvertisement
370
+ && typeof this.onadvertisement === 'function') {
371
+ this.onadvertisement(ad);
372
+ }
373
+ }
374
+ });
375
+ // Start scanning
376
+ this.noble.startScanningAsync(this.PRIMARY_SERVICE_UUID_LIST, true).then(() => {
377
+ resolve();
378
+ }).catch((error) => {
379
+ this.emitLog('error', `startScanning error: ${JSON.stringify(error.message)}`);
380
+ reject(error);
381
+ });
382
+ })
383
+ .catch((error) => {
384
+ this.emitLog('error', `startScanning error: ${JSON.stringify(error.message)}`);
385
+ reject(error);
386
+ });
387
+ });
388
+ return promise;
389
+ }
390
+ /**
391
+ * Stops scanning for SwitchBot devices.
392
+ *
393
+ * @returns {Promise<void>} - Resolves when scanning stops successfully.
394
+ */
395
+ async stopScan() {
396
+ if (this.noble === null) {
397
+ return;
398
+ }
399
+ this.noble.removeAllListeners('discover');
400
+ this.noble.stopScanningAsync();
401
+ this.emitLog('debug', 'Stops scanning for SwitchBot BLE devices.');
402
+ }
403
+ /**
404
+ * Waits for the specified time.
405
+ *
406
+ * @param {number} msec - The time to wait in milliseconds.
407
+ * @returns {Promise<void>} - Resolves after the specified time.
408
+ */
409
+ async wait(msec) {
410
+ return new Promise((resolve, reject) => {
411
+ // Check the parameters
412
+ const valid = parameterChecker.check({
413
+ msec,
414
+ }, {
415
+ msec: { required: true, type: 'integer', min: 0 },
416
+ }, true);
417
+ if (!valid) {
418
+ this.emitLog('error', `parameterChecker: ${JSON.stringify(parameterChecker.error.message)}`);
419
+ reject(new Error(parameterChecker.error.message));
420
+ return;
421
+ }
422
+ // Set a timer
423
+ setTimeout(resolve, msec);
424
+ });
425
+ }
426
+ }
427
+ export { SwitchbotDevice };
428
+ //# 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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"}