node-switchbot 2.5.0-beta.9 → 3.0.1

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 (341) hide show
  1. package/.github/workflows/beta-release.yml +25 -2
  2. package/.github/workflows/release.yml +13 -0
  3. package/BLE.md +1144 -0
  4. package/CHANGELOG.md +22 -0
  5. package/OpenAPI.md +185 -0
  6. package/README.md +20 -1189
  7. package/branding/Node_x_SwitchBot.svg +9 -0
  8. package/branding/icon.png +0 -0
  9. package/branding/switchbot.png +0 -0
  10. package/dist/advertising.d.ts +3 -3
  11. package/dist/advertising.d.ts.map +1 -1
  12. package/dist/advertising.js +26 -26
  13. package/dist/advertising.js.map +1 -1
  14. package/dist/device/woblindtilt.d.ts +19 -50
  15. package/dist/device/woblindtilt.d.ts.map +1 -1
  16. package/dist/device/woblindtilt.js +41 -100
  17. package/dist/device/woblindtilt.js.map +1 -1
  18. package/dist/device/wobulb.d.ts +41 -15
  19. package/dist/device/wobulb.d.ts.map +1 -1
  20. package/dist/device/wobulb.js +72 -128
  21. package/dist/device/wobulb.js.map +1 -1
  22. package/dist/device/woceilinglight.d.ts +47 -21
  23. package/dist/device/woceilinglight.d.ts.map +1 -1
  24. package/dist/device/woceilinglight.js +96 -171
  25. package/dist/device/woceilinglight.js.map +1 -1
  26. package/dist/device/wocontact.d.ts +11 -1
  27. package/dist/device/wocontact.d.ts.map +1 -1
  28. package/dist/device/wocontact.js +23 -22
  29. package/dist/device/wocontact.js.map +1 -1
  30. package/dist/device/wocurtain.d.ts +39 -1
  31. package/dist/device/wocurtain.d.ts.map +1 -1
  32. package/dist/device/wocurtain.js +69 -103
  33. package/dist/device/wocurtain.js.map +1 -1
  34. package/dist/device/wohand.d.ts +37 -2
  35. package/dist/device/wohand.d.ts.map +1 -1
  36. package/dist/device/wohand.js +55 -89
  37. package/dist/device/wohand.js.map +1 -1
  38. package/dist/device/wohub2.d.ts +11 -1
  39. package/dist/device/wohub2.d.ts.map +1 -1
  40. package/dist/device/wohub2.js +21 -29
  41. package/dist/device/wohub2.js.map +1 -1
  42. package/dist/device/wohumi.d.ts +37 -2
  43. package/dist/device/wohumi.d.ts.map +1 -1
  44. package/dist/device/wohumi.js +52 -83
  45. package/dist/device/wohumi.js.map +1 -1
  46. package/dist/device/woiosensorth.d.ts +12 -1
  47. package/dist/device/woiosensorth.d.ts.map +1 -1
  48. package/dist/device/woiosensorth.js +25 -29
  49. package/dist/device/woiosensorth.js.map +1 -1
  50. package/dist/device/woplugmini.d.ts +45 -12
  51. package/dist/device/woplugmini.d.ts.map +1 -1
  52. package/dist/device/woplugmini.js +71 -77
  53. package/dist/device/woplugmini.js.map +1 -1
  54. package/dist/device/wopresence.d.ts +11 -1
  55. package/dist/device/wopresence.d.ts.map +1 -1
  56. package/dist/device/wopresence.js +21 -27
  57. package/dist/device/wopresence.js.map +1 -1
  58. package/dist/device/wosensorth.d.ts +18 -2
  59. package/dist/device/wosensorth.d.ts.map +1 -1
  60. package/dist/device/wosensorth.js +34 -50
  61. package/dist/device/wosensorth.js.map +1 -1
  62. package/dist/device/wosmartlock.d.ts +63 -13
  63. package/dist/device/wosmartlock.d.ts.map +1 -1
  64. package/dist/device/wosmartlock.js +114 -195
  65. package/dist/device/wosmartlock.js.map +1 -1
  66. package/dist/device/wosmartlockpro.d.ts +16 -12
  67. package/dist/device/wosmartlockpro.d.ts.map +1 -1
  68. package/dist/device/wosmartlockpro.js +34 -29
  69. package/dist/device/wosmartlockpro.js.map +1 -1
  70. package/dist/device/wostrip.d.ts +4 -3
  71. package/dist/device/wostrip.d.ts.map +1 -1
  72. package/dist/device/wostrip.js +5 -4
  73. package/dist/device/wostrip.js.map +1 -1
  74. package/dist/device.d.ts +13 -5
  75. package/dist/device.d.ts.map +1 -1
  76. package/dist/device.js +13 -2
  77. package/dist/device.js.map +1 -1
  78. package/dist/index.d.ts +9 -1
  79. package/dist/index.d.ts.map +1 -1
  80. package/dist/index.js +9 -1
  81. package/dist/index.js.map +1 -1
  82. package/dist/parameter-checker.d.ts +10 -13
  83. package/dist/parameter-checker.d.ts.map +1 -1
  84. package/dist/parameter-checker.js +16 -1
  85. package/dist/parameter-checker.js.map +1 -1
  86. package/dist/settings.d.ts +47 -0
  87. package/dist/settings.d.ts.map +1 -1
  88. package/dist/settings.js +49 -0
  89. package/dist/settings.js.map +1 -1
  90. package/dist/{switchbot.d.ts → switchbot-ble.d.ts} +12 -9
  91. package/dist/switchbot-ble.d.ts.map +1 -0
  92. package/dist/switchbot-ble.js +426 -0
  93. package/dist/switchbot-ble.js.map +1 -0
  94. package/dist/switchbot-openapi.d.ts +131 -0
  95. package/dist/switchbot-openapi.d.ts.map +1 -0
  96. package/dist/switchbot-openapi.js +311 -0
  97. package/dist/switchbot-openapi.js.map +1 -0
  98. package/dist/test/advertising.test.d.ts +2 -0
  99. package/dist/test/advertising.test.d.ts.map +1 -0
  100. package/dist/test/advertising.test.js +99 -0
  101. package/dist/test/advertising.test.js.map +1 -0
  102. package/dist/test/device.test.d.ts +2 -0
  103. package/dist/test/device.test.d.ts.map +1 -0
  104. package/dist/test/device.test.js +38 -0
  105. package/dist/test/device.test.js.map +1 -0
  106. package/dist/test/index.test.d.ts +2 -0
  107. package/dist/test/index.test.d.ts.map +1 -0
  108. package/dist/test/index.test.js +35 -0
  109. package/dist/test/index.test.js.map +1 -0
  110. package/dist/test/parameter-checker.test.d.ts +2 -0
  111. package/dist/test/parameter-checker.test.d.ts.map +1 -0
  112. package/dist/test/parameter-checker.test.js +108 -0
  113. package/dist/test/parameter-checker.test.js.map +1 -0
  114. package/dist/test/settings.test.d.ts +2 -0
  115. package/dist/test/settings.test.d.ts.map +1 -0
  116. package/dist/test/settings.test.js +49 -0
  117. package/dist/test/settings.test.js.map +1 -0
  118. package/dist/test/switchbot-openapi.test.d.ts +2 -0
  119. package/dist/test/switchbot-openapi.test.d.ts.map +1 -0
  120. package/dist/test/switchbot-openapi.test.js +96 -0
  121. package/dist/test/switchbot-openapi.test.js.map +1 -0
  122. package/dist/test/switchbot.test.d.ts +2 -0
  123. package/dist/test/switchbot.test.d.ts.map +1 -0
  124. package/dist/test/switchbot.test.js +106 -0
  125. package/dist/test/switchbot.test.js.map +1 -0
  126. package/dist/test/woblindtilt.test.js +70 -20
  127. package/dist/test/woblindtilt.test.js.map +1 -1
  128. package/dist/test/wobulb.test.js +87 -44
  129. package/dist/test/wobulb.test.js.map +1 -1
  130. package/dist/test/woceilinglight.test.js +72 -54
  131. package/dist/test/woceilinglight.test.js.map +1 -1
  132. package/dist/test/wocontact.test.js +51 -20
  133. package/dist/test/wocontact.test.js.map +1 -1
  134. package/dist/test/wocurtain.test.js +65 -23
  135. package/dist/test/wocurtain.test.js.map +1 -1
  136. package/dist/test/wohand.test.js +34 -40
  137. package/dist/test/wohand.test.js.map +1 -1
  138. package/dist/test/wohub2.test.d.ts +2 -0
  139. package/dist/test/wohub2.test.d.ts.map +1 -0
  140. package/dist/test/wohub2.test.js +80 -0
  141. package/dist/test/wohub2.test.js.map +1 -0
  142. package/dist/test/wohumi.test.js +70 -49
  143. package/dist/test/wohumi.test.js.map +1 -1
  144. package/dist/test/woiosensorth.test.js +33 -32
  145. package/dist/test/woiosensorth.test.js.map +1 -1
  146. package/dist/test/woplugmini.test.js +80 -57
  147. package/dist/test/woplugmini.test.js.map +1 -1
  148. package/dist/test/wopresence.test.js +44 -18
  149. package/dist/test/wopresence.test.js.map +1 -1
  150. package/dist/test/wosensorth.test.js +44 -52
  151. package/dist/test/wosensorth.test.js.map +1 -1
  152. package/dist/test/wosmartlock.test.js +126 -59
  153. package/dist/test/wosmartlock.test.js.map +1 -1
  154. package/dist/test/wosmartlockpro.test.js +96 -69
  155. package/dist/test/wosmartlockpro.test.js.map +1 -1
  156. package/dist/test/wostrip.test.js +70 -83
  157. package/dist/test/wostrip.test.js.map +1 -1
  158. package/dist/types/bledevicestatus.d.ts +4 -12
  159. package/dist/types/bledevicestatus.d.ts.map +1 -1
  160. package/dist/types/devicelist.d.ts.map +1 -1
  161. package/dist/types/devicelist.js +0 -4
  162. package/dist/types/devicelist.js.map +1 -1
  163. package/dist/types/devicepush.d.ts +13 -0
  164. package/dist/types/devicepush.d.ts.map +1 -0
  165. package/dist/types/devicepush.js +2 -0
  166. package/dist/types/devicepush.js.map +1 -0
  167. package/dist/types/deviceresponse.d.ts +2 -3
  168. package/dist/types/deviceresponse.d.ts.map +1 -1
  169. package/dist/types/devicestatus.d.ts.map +1 -1
  170. package/dist/types/devicewebhookstatus.d.ts +32 -0
  171. package/dist/types/devicewebhookstatus.d.ts.map +1 -1
  172. package/dist/types/irdevicelist.d.ts.map +1 -1
  173. package/dist/types/types.d.ts +24 -1
  174. package/dist/types/types.d.ts.map +1 -1
  175. package/dist/types/types.js +14 -0
  176. package/dist/types/types.js.map +1 -1
  177. package/docs/assets/highlight.css +12 -47
  178. package/docs/assets/main.js +1 -1
  179. package/docs/assets/navigation.js +1 -1
  180. package/docs/assets/search.js +1 -1
  181. package/docs/classes/SwitchBotBLE.html +62 -0
  182. package/docs/classes/SwitchBotOpenAPI.html +47 -0
  183. package/docs/classes/SwitchbotDevice.html +32 -33
  184. package/docs/enums/LogLevel.html +10 -0
  185. package/docs/enums/SwitchBotBLEModel.html +2 -2
  186. package/docs/enums/SwitchBotBLEModelFriendlyName.html +2 -2
  187. package/docs/enums/SwitchBotBLEModelName.html +2 -2
  188. package/docs/enums/SwitchBotModel.html +2 -2
  189. package/docs/hierarchy.html +1 -0
  190. package/docs/index.html +16 -993
  191. package/docs/interfaces/Ad-1.html +5 -0
  192. package/docs/interfaces/AdvertisementData.html +3 -0
  193. package/docs/interfaces/Chars.html +4 -0
  194. package/docs/interfaces/ErrorObject.html +3 -0
  195. package/docs/interfaces/Params.html +6 -0
  196. package/docs/interfaces/Rule.html +9 -0
  197. package/docs/interfaces/ServiceData.html +2 -0
  198. package/docs/interfaces/SwitchBotBLEDevice.html +21 -0
  199. package/docs/interfaces/WebhookDetail.html +6 -0
  200. package/docs/interfaces/ad.html +5 -0
  201. package/docs/interfaces/body.html +3 -0
  202. package/docs/interfaces/bodyChange.html +4 -0
  203. package/docs/interfaces/deleteWebhookResponse.html +4 -0
  204. package/docs/interfaces/device.html +7 -0
  205. package/docs/interfaces/deviceList.html +2 -0
  206. package/docs/interfaces/deviceStatus.html +7 -0
  207. package/docs/interfaces/deviceStatusRequest.html +4 -0
  208. package/docs/interfaces/deviceWebhook.html +4 -0
  209. package/docs/interfaces/deviceWebhookContext.html +4 -0
  210. package/docs/interfaces/devices.html +4 -0
  211. package/docs/interfaces/infraredRemoteList.html +2 -0
  212. package/docs/interfaces/irdevice.html +5 -0
  213. package/docs/interfaces/pushResponse.html +4 -0
  214. package/docs/interfaces/queryWebhookResponse.html +4 -0
  215. package/docs/interfaces/setupWebhookResponse.html +4 -0
  216. package/docs/interfaces/switchbot.html +3 -0
  217. package/docs/interfaces/updateWebhookResponse.html +4 -0
  218. package/docs/interfaces/webhookRequest.html +4 -0
  219. package/docs/media/BLE.md +1144 -0
  220. package/docs/media/OpenAPI.md +185 -0
  221. package/docs/modules.html +137 -3
  222. package/docs/types/MacAddress.html +1 -0
  223. package/docs/types/batteryCirculatorFan.html +1 -0
  224. package/docs/types/batteryCirculatorFanServiceData.html +1 -0
  225. package/docs/types/batteryCirculatorFanStatus.html +1 -0
  226. package/docs/types/batteryCirculatorFanWebhookContext.html +1 -0
  227. package/docs/types/blindTilt.html +1 -0
  228. package/docs/types/blindTiltServiceData.html +1 -0
  229. package/docs/types/blindTiltStatus.html +1 -0
  230. package/docs/types/blindTiltWebhookContext.html +1 -0
  231. package/docs/types/bot.html +1 -0
  232. package/docs/types/botServiceData.html +1 -0
  233. package/docs/types/botStatus.html +1 -0
  234. package/docs/types/botWebhookContext.html +1 -0
  235. package/docs/types/ceilingLight.html +1 -0
  236. package/docs/types/ceilingLightPro.html +1 -0
  237. package/docs/types/ceilingLightProServiceData.html +1 -0
  238. package/docs/types/ceilingLightProStatus.html +1 -0
  239. package/docs/types/ceilingLightProWebhookContext.html +1 -0
  240. package/docs/types/ceilingLightServiceData.html +1 -0
  241. package/docs/types/ceilingLightStatus.html +1 -0
  242. package/docs/types/ceilingLightWebhookContext.html +1 -0
  243. package/docs/types/colorBulb.html +1 -0
  244. package/docs/types/colorBulbServiceData.html +1 -0
  245. package/docs/types/colorBulbStatus.html +1 -0
  246. package/docs/types/colorBulbWebhookContext.html +1 -0
  247. package/docs/types/contactSensor.html +1 -0
  248. package/docs/types/contactSensorServiceData.html +1 -0
  249. package/docs/types/contactSensorStatus.html +1 -0
  250. package/docs/types/contactSensorWebhookContext.html +1 -0
  251. package/docs/types/curtain.html +1 -0
  252. package/docs/types/curtain3.html +1 -0
  253. package/docs/types/curtain3ServiceData.html +1 -0
  254. package/docs/types/curtain3WebhookContext.html +1 -0
  255. package/docs/types/curtainServiceData.html +1 -0
  256. package/docs/types/curtainStatus.html +1 -0
  257. package/docs/types/curtainWebhookContext.html +1 -0
  258. package/docs/types/floorCleaningRobotS10.html +1 -0
  259. package/docs/types/floorCleaningRobotS10Status.html +1 -0
  260. package/docs/types/floorCleaningRobotS10WebhookContext.html +1 -0
  261. package/docs/types/hub2.html +1 -0
  262. package/docs/types/hub2ServiceData.html +1 -0
  263. package/docs/types/hub2Status.html +1 -0
  264. package/docs/types/hub2WebhookContext.html +1 -0
  265. package/docs/types/humidifier.html +1 -0
  266. package/docs/types/humidifierServiceData.html +1 -0
  267. package/docs/types/humidifierStatus.html +1 -0
  268. package/docs/types/humidifierWebhookContext.html +1 -0
  269. package/docs/types/indoorCam.html +1 -0
  270. package/docs/types/indoorCameraWebhookContext.html +1 -0
  271. package/docs/types/keypad.html +1 -0
  272. package/docs/types/keypadTouch.html +1 -0
  273. package/docs/types/keypadTouchWebhookContext.html +1 -0
  274. package/docs/types/keypadWebhookContext.html +1 -0
  275. package/docs/types/lock.html +1 -0
  276. package/docs/types/lockPro.html +1 -0
  277. package/docs/types/lockProServiceData.html +1 -0
  278. package/docs/types/lockProStatus.html +1 -0
  279. package/docs/types/lockProWebhookContext.html +1 -0
  280. package/docs/types/lockServiceData.html +1 -0
  281. package/docs/types/lockStatus.html +1 -0
  282. package/docs/types/lockWebhookContext.html +1 -0
  283. package/docs/types/meter.html +1 -0
  284. package/docs/types/meterPlus.html +1 -0
  285. package/docs/types/meterPlusServiceData.html +1 -0
  286. package/docs/types/meterPlusStatus.html +1 -0
  287. package/docs/types/meterPlusWebhookContext.html +1 -0
  288. package/docs/types/meterServiceData.html +1 -0
  289. package/docs/types/meterStatus.html +1 -0
  290. package/docs/types/meterWebhookContext.html +1 -0
  291. package/docs/types/motionSensor.html +1 -0
  292. package/docs/types/motionSensorServiceData.html +1 -0
  293. package/docs/types/motionSensorStatus.html +1 -0
  294. package/docs/types/motionSensorWebhookContext.html +1 -0
  295. package/docs/types/outdoorMeter.html +1 -0
  296. package/docs/types/outdoorMeterServiceData.html +1 -0
  297. package/docs/types/outdoorMeterStatus.html +1 -0
  298. package/docs/types/outdoorMeterWebhookContext.html +1 -0
  299. package/docs/types/panTiltCamWebhookContext.html +1 -0
  300. package/docs/types/pantiltCam.html +1 -0
  301. package/docs/types/pantiltCam2k.html +1 -0
  302. package/docs/types/plug.html +1 -0
  303. package/docs/types/plugMini.html +1 -0
  304. package/docs/types/plugMiniJPServiceData.html +1 -0
  305. package/docs/types/plugMiniJPWebhookContext.html +1 -0
  306. package/docs/types/plugMiniStatus.html +1 -0
  307. package/docs/types/plugMiniUSServiceData.html +1 -0
  308. package/docs/types/plugMiniUSWebhookContext.html +1 -0
  309. package/docs/types/plugStatus.html +1 -0
  310. package/docs/types/plugWebhookContext.html +1 -0
  311. package/docs/types/remote.html +1 -0
  312. package/docs/types/robotVacuumCleanerS1.html +1 -0
  313. package/docs/types/robotVacuumCleanerS1Plus.html +1 -0
  314. package/docs/types/robotVacuumCleanerS1PlusStatus.html +1 -0
  315. package/docs/types/robotVacuumCleanerS1PlusWebhookContext.html +1 -0
  316. package/docs/types/robotVacuumCleanerS1Status.html +1 -0
  317. package/docs/types/robotVacuumCleanerS1WebhookContext.html +1 -0
  318. package/docs/types/robotVacuumCleanerServiceData.html +1 -0
  319. package/docs/types/stripLight.html +1 -0
  320. package/docs/types/stripLightServiceData.html +1 -0
  321. package/docs/types/stripLightStatus.html +1 -0
  322. package/docs/types/stripLightWebhookContext.html +1 -0
  323. package/docs/types/waterLeakDetector.html +1 -0
  324. package/docs/types/waterLeakDetectorServiceData.html +1 -0
  325. package/docs/types/waterLeakDetectorStatus.html +1 -0
  326. package/docs/types/waterLeakDetectorWebhookContext.html +1 -0
  327. package/package.json +15 -13
  328. package/.github/npm-version-script.cjs +0 -81
  329. package/dist/switchbot.d.ts.map +0 -1
  330. package/dist/switchbot.js +0 -259
  331. package/dist/switchbot.js.map +0 -1
  332. package/dist/test/wohand2.test.d.ts +0 -2
  333. package/dist/test/wohand2.test.d.ts.map +0 -1
  334. package/dist/test/wohand2.test.js +0 -50
  335. package/dist/test/wohand2.test.js.map +0 -1
  336. package/dist/types/pushbody.d.ts +0 -6
  337. package/dist/types/pushbody.d.ts.map +0 -1
  338. package/dist/types/pushbody.js +0 -2
  339. package/dist/types/pushbody.js.map +0 -1
  340. package/docs/classes/SwitchBot.html +0 -16
  341. package/docs/types/SwitchBotBLEDevice.html +0 -1
@@ -1,235 +1,160 @@
1
- import { Buffer } from 'node:buffer';
2
1
  /* Copyright(C) 2024, donavanbecker (https://github.com/donavanbecker). All rights reserved.
3
2
  *
4
3
  * woceilinglight.ts: Switchbot BLE API registration.
5
4
  */
5
+ import { Buffer } from 'node:buffer';
6
6
  import { SwitchbotDevice } from '../device.js';
7
7
  import { SwitchBotBLEModel, SwitchBotBLEModelFriendlyName, SwitchBotBLEModelName } from '../types/types.js';
8
8
  /**
9
+ * Class representing a WoCeilingLight device.
9
10
  * @see https://github.com/OpenWonderLabs/SwitchBotAPI-BLE/blob/latest/devicetypes/colorbulb.md
10
11
  */
11
12
  export class WoCeilingLight extends SwitchbotDevice {
12
- static async parseServiceData(manufacturerData, onlog) {
13
+ /**
14
+ * Parses the service data for WoCeilingLight.
15
+ * @param {Buffer} manufacturerData - The manufacturer data buffer.
16
+ * @param {Function} emitLog - The function to emit log messages.
17
+ * @returns {Promise<object | null>} - Parsed service data or null if invalid.
18
+ */
19
+ static async parseServiceData(manufacturerData, emitLog) {
13
20
  if (manufacturerData.length !== 13) {
14
- if (onlog && typeof onlog === 'function') {
15
- onlog(`[parseServiceDataForWoCeilingLight] Buffer length ${manufacturerData.length} !== 13!`);
16
- }
21
+ emitLog('debugerror', `[parseServiceDataForWoCeilingLight] Buffer length ${manufacturerData.length} !== 13!`);
17
22
  return null;
18
23
  }
19
- const byte1 = manufacturerData.readUInt8(1); // power and light status
20
- // const byte2 = manufacturerData.readUInt8(2);//bulb brightness
21
- const byte3 = manufacturerData.readUInt8(3); // bulb R
22
- const byte4 = manufacturerData.readUInt8(4); // bulb G
23
- const byte5 = manufacturerData.readUInt8(5); // bulb B
24
- const byte6 = manufacturerData.readUInt8(6); // bulb temperature
25
- const byte7 = manufacturerData.readUInt8(7);
26
- const byte8 = manufacturerData.readUInt8(8);
27
- const byte9 = manufacturerData.readUInt8(9);
28
- const byte10 = manufacturerData.readUInt8(10); // bulb mode
29
- const power = byte1;
30
- const red = byte3;
31
- const green = byte4;
32
- const blue = byte5;
33
- const color_temperature = byte6;
34
- const state = !!(byte7 & 0b01111111);
35
- const brightness = byte7 & 0b01111111;
36
- const delay = byte8 & 0b10000000;
37
- const preset = byte8 & 0b00001000;
38
- const color_mode = byte8 & 0b00000111;
39
- const speed = byte9 & 0b01111111;
40
- const loop_index = byte10 & 0b11111110;
41
- const data = {
24
+ const [, byte1, , byte3, byte4, byte5, byte6, byte7, byte8, byte9, byte10,] = manufacturerData;
25
+ return {
42
26
  model: SwitchBotBLEModel.CeilingLight,
43
27
  modelName: SwitchBotBLEModelName.CeilingLight,
44
28
  modelFriendlyName: SwitchBotBLEModelFriendlyName.CeilingLight,
45
- color_temperature,
46
- power,
47
- state,
48
- red,
49
- green,
50
- blue,
51
- brightness,
52
- delay,
53
- preset,
54
- color_mode,
55
- speed,
56
- loop_index,
29
+ power: byte1,
30
+ red: byte3,
31
+ green: byte4,
32
+ blue: byte5,
33
+ color_temperature: byte6,
34
+ state: !!(byte7 & 0b01111111),
35
+ brightness: byte7 & 0b01111111,
36
+ delay: !!(byte8 & 0b10000000),
37
+ preset: !!(byte8 & 0b00001000),
38
+ color_mode: byte8 & 0b00000111,
39
+ speed: byte9 & 0b01111111,
40
+ loop_index: byte10 & 0b11111110,
57
41
  };
58
- return data;
59
42
  }
60
- static async parseServiceData_Pro(manufacturerData, onlog) {
43
+ /**
44
+ * Parses the service data for WoCeilingLight Pro.
45
+ * @param {Buffer} manufacturerData - The manufacturer data buffer.
46
+ * @param {Function} emitLog - The function to emit log messages.
47
+ * @returns {Promise<object | null>} - Parsed service data or null if invalid.
48
+ */
49
+ static async parseServiceData_Pro(manufacturerData, emitLog) {
61
50
  if (manufacturerData.length !== 13) {
62
- if (onlog && typeof onlog === 'function') {
63
- onlog(`[parseServiceDataForWoCeilingLightPro] Buffer length ${manufacturerData.length} !== 13!`);
64
- }
51
+ emitLog('debugerror', `[parseServiceDataForWoCeilingLightPro] Buffer length ${manufacturerData.length} !== 13!`);
65
52
  return null;
66
53
  }
67
- const byte1 = manufacturerData.readUInt8(1); // power and light status
68
- // const byte2 = manufacturerData.readUInt8(2);//bulb brightness
69
- const byte3 = manufacturerData.readUInt8(3); // bulb R
70
- const byte4 = manufacturerData.readUInt8(4); // bulb G
71
- const byte5 = manufacturerData.readUInt8(5); // bulb B
72
- const byte6 = manufacturerData.readUInt8(6); // bulb temperature
73
- const byte7 = manufacturerData.readUInt8(7);
74
- const byte8 = manufacturerData.readUInt8(8);
75
- const byte9 = manufacturerData.readUInt8(9);
76
- const byte10 = manufacturerData.readUInt8(10); // bulb mode
77
- const power = byte1;
78
- const red = byte3;
79
- const green = byte4;
80
- const blue = byte5;
81
- const color_temperature = byte6;
82
- const state = !!(byte7 & 0b01111111);
83
- const brightness = byte7 & 0b01111111;
84
- const delay = byte8 & 0b10000000;
85
- const preset = byte8 & 0b00001000;
86
- const color_mode = byte8 & 0b00000111;
87
- const speed = byte9 & 0b01111111;
88
- const loop_index = byte10 & 0b11111110;
89
- const data = {
54
+ const [, byte1, , byte3, byte4, byte5, byte6, byte7, byte8, byte9, byte10,] = manufacturerData;
55
+ return {
90
56
  model: SwitchBotBLEModel.CeilingLightPro,
91
57
  modelName: SwitchBotBLEModelName.CeilingLightPro,
92
58
  modelFriendlyName: SwitchBotBLEModelFriendlyName.CeilingLightPro,
93
- color_temperature,
94
- power,
95
- state,
96
- red,
97
- green,
98
- blue,
99
- brightness,
100
- delay,
101
- preset,
102
- color_mode,
103
- speed,
104
- loop_index,
59
+ power: byte1,
60
+ red: byte3,
61
+ green: byte4,
62
+ blue: byte5,
63
+ color_temperature: byte6,
64
+ state: !!(byte7 & 0b01111111),
65
+ brightness: byte7 & 0b01111111,
66
+ delay: !!(byte8 & 0b10000000),
67
+ preset: !!(byte8 & 0b00001000),
68
+ color_mode: byte8 & 0b00000111,
69
+ speed: byte9 & 0b01111111,
70
+ loop_index: byte10 & 0b11111110,
105
71
  };
106
- return data;
107
72
  }
108
73
  /**
109
- * @returns resolves with a boolean that tells whether the plug in ON(true) or OFF(false)
74
+ * Reads the state of the ceiling light.
75
+ * @returns {Promise<boolean>} - Resolves with a boolean indicating whether the light is ON (true) or OFF (false).
110
76
  */
111
77
  async readState() {
112
- return await this.operateBot([0x57, 0x0F, 0x48, 0x01]);
78
+ return this.operateCeilingLight([0x57, 0x0F, 0x48, 0x01]);
113
79
  }
114
80
  /**
115
- *
81
+ * Sets the state of the ceiling light.
82
+ * @param {number[]} reqByteArray - The request byte array.
83
+ * @returns {Promise<boolean>} - Resolves with a boolean indicating whether the operation was successful.
116
84
  */
117
85
  async setState(reqByteArray) {
118
86
  const base = [0x57, 0x0F, 0x47, 0x01];
119
- return await this.operateBot(base.concat(reqByteArray));
87
+ return this.operateCeilingLight(base.concat(reqByteArray));
120
88
  }
121
89
  /**
122
- * @returns resolves with a boolean that tells whether the plug in ON(true) or OFF(false)
90
+ * Turns on the ceiling light.
91
+ * @returns {Promise<boolean>} - Resolves with a boolean indicating whether the light is ON (true).
123
92
  */
124
93
  async turnOn() {
125
- return await this.setState([0x01, 0x01]);
94
+ return this.setState([0x01, 0x01]);
126
95
  }
127
96
  /**
128
- * @returns resolves with a boolean that tells whether the plug in ON(true) or OFF(false)
97
+ * Turns off the ceiling light.
98
+ * @returns {Promise<boolean>} - Resolves with a boolean indicating whether the light is OFF (false).
129
99
  */
130
100
  async turnOff() {
131
- return await this.setState([0x01, 0x02]);
101
+ return this.setState([0x01, 0x02]);
132
102
  }
133
103
  /**
134
- * @param brightness
104
+ * Sets the brightness of the ceiling light.
105
+ * @param {number} brightness - The brightness percentage (0-100).
106
+ * @returns {Promise<boolean>} - Resolves with a boolean indicating whether the operation was successful.
135
107
  */
136
108
  async setBrightness(brightness) {
137
- if (typeof brightness !== 'number') {
138
- throw new TypeError(`The type of target brightness percentage is incorrect: ${typeof brightness}`);
139
- }
140
- if (brightness > 100) {
141
- brightness = 100;
142
- }
143
- else if (brightness < 0) {
144
- brightness = 0;
109
+ if (typeof brightness !== 'number' || brightness < 0 || brightness > 100) {
110
+ throw new TypeError(`Invalid brightness value: ${brightness}`);
145
111
  }
146
- return await this.setState([0x02, 0x14]);
112
+ return this.setState([0x02, 0x14, brightness]);
147
113
  }
148
114
  /**
149
- * @returns resolves with color_temperature percent
115
+ * Sets the color temperature of the ceiling light.
116
+ * @param {number} color_temperature - The color temperature percentage (0-100).
117
+ * @returns {Promise<boolean>} - Resolves with a boolean indicating whether the operation was successful.
150
118
  */
151
119
  async setColorTemperature(color_temperature) {
152
- if (typeof color_temperature !== 'number') {
153
- throw new TypeError(`The type of target color_temperature percentage is incorrect: ${typeof color_temperature}`);
120
+ if (typeof color_temperature !== 'number' || color_temperature < 0 || color_temperature > 100) {
121
+ throw new TypeError(`Invalid color temperature value: ${color_temperature}`);
154
122
  }
155
- if (color_temperature > 100) {
156
- color_temperature = 100;
157
- }
158
- else if (color_temperature < 0) {
159
- color_temperature = 0;
160
- }
161
- return await this.setState([0x02, 0x17, color_temperature]);
123
+ return this.setState([0x02, 0x17, color_temperature]);
162
124
  }
163
125
  /**
164
- * @param brightness
165
- * @param red
166
- * @param green
167
- * @param blue
126
+ * Sets the RGB color of the ceiling light.
127
+ * @param {number} brightness - The brightness percentage (0-100).
128
+ * @param {number} red - The red color value (0-255).
129
+ * @param {number} green - The green color value (0-255).
130
+ * @param {number} blue - The blue color value (0-255).
131
+ * @returns {Promise<boolean>} - Resolves with a boolean indicating whether the operation was successful.
168
132
  */
169
133
  async setRGB(brightness, red, green, blue) {
170
- if (typeof brightness !== 'number') {
171
- throw new TypeError(`The type of target brightness percentage is incorrect: ${typeof brightness}`);
172
- }
173
- if (typeof red !== 'number') {
174
- throw new TypeError(`The type of target red is incorrect: ${typeof red}`);
134
+ if (typeof brightness !== 'number' || brightness < 0 || brightness > 100
135
+ || typeof red !== 'number' || red < 0 || red > 255
136
+ || typeof green !== 'number' || green < 0 || green > 255
137
+ || typeof blue !== 'number' || blue < 0 || blue > 255) {
138
+ throw new TypeError('Invalid RGB or brightness values');
175
139
  }
176
- if (typeof green !== 'number') {
177
- throw new TypeError(`The type of target green is incorrect: ${typeof green}`);
178
- }
179
- if (typeof blue !== 'number') {
180
- throw new TypeError(`The type of target blue is incorrect: ${typeof blue}`);
181
- }
182
- if (brightness > 100) {
183
- brightness = 100;
184
- }
185
- else if (brightness < 0) {
186
- brightness = 0;
187
- }
188
- if (red > 255) {
189
- red = 255;
190
- }
191
- else if (red < 0) {
192
- red = 0;
193
- }
194
- if (green > 255) {
195
- green = 255;
196
- }
197
- else if (green < 0) {
198
- green = 0;
199
- }
200
- if (blue > 255) {
201
- blue = 255;
202
- }
203
- else if (blue < 0) {
204
- blue = 0;
205
- }
206
- return await this.setState([0x02, 0x12, brightness, red, green, blue]);
140
+ return this.setState([0x02, 0x12, brightness, red, green, blue]);
207
141
  }
208
142
  /**
209
- * @param bytes
143
+ * Sends a command to the ceiling light.
144
+ * @param {number[]} bytes - The command bytes.
145
+ * @returns {Promise<boolean>} - Resolves with a boolean indicating whether the operation was successful.
210
146
  */
211
- async operateBot(bytes) {
212
- const req_buf = Buffer.from(bytes);
213
- await this.command(req_buf)
214
- .then((res_bytes) => {
215
- const res_buf = Buffer.from(res_bytes);
216
- if (res_buf.length === 2) {
217
- const code = res_buf.readUInt8(1);
218
- if (code === 0x00 || code === 0x80) {
219
- const is_on = code === 0x80;
220
- return is_on;
221
- }
222
- else {
223
- throw new Error(`The device returned an error: 0x${res_buf.toString('hex')}`);
224
- }
225
- }
226
- else {
227
- throw new Error(`Expecting a 2-byte response, got instead: 0x${res_buf.toString('hex')}`);
147
+ async operateCeilingLight(bytes) {
148
+ const reqBuf = Buffer.from(bytes);
149
+ const resBuf = await this.command(reqBuf);
150
+ if (resBuf.length === 2) {
151
+ const code = resBuf.readUInt8(1);
152
+ if (code === 0x00 || code === 0x80) {
153
+ return code === 0x80;
228
154
  }
229
- })
230
- .catch((error) => {
231
- throw error;
232
- });
155
+ throw new Error(`The device returned an error: 0x${resBuf.toString('hex')}`);
156
+ }
157
+ throw new Error(`Expecting a 2-byte response, got instead: 0x${resBuf.toString('hex')}`);
233
158
  }
234
159
  }
235
160
  //# sourceMappingURL=woceilinglight.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"woceilinglight.js","sourceRoot":"","sources":["../../src/device/woceilinglight.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"woceilinglight.js","sourceRoot":"","sources":["../../src/device/woceilinglight.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,16 @@
1
1
  import type { Buffer } from 'node:buffer';
2
2
  import { SwitchbotDevice } from '../device.js';
3
+ /**
4
+ * Class representing a WoContact device.
5
+ * @see https://github.com/OpenWonderLabs/SwitchBotAPI-BLE/blob/latest/devicetypes/contactsensor.md
6
+ */
3
7
  export declare class WoContact extends SwitchbotDevice {
4
- static parseServiceData(serviceData: Buffer, onlog: ((message: string) => void) | undefined): Promise<object | null>;
8
+ /**
9
+ * Parses the service data for WoContact.
10
+ * @param {Buffer} serviceData - The service data buffer.
11
+ * @param {Function} emitLog - The function to emit log messages.
12
+ * @returns {Promise<object | null>} - Parsed service data or null if invalid.
13
+ */
14
+ static parseServiceData(serviceData: Buffer, emitLog: (level: string, message: string) => void): Promise<object | null>;
5
15
  }
6
16
  //# sourceMappingURL=wocontact.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"wocontact.d.ts","sourceRoot":"","sources":["../../src/device/wocontact.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAMzC,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAG9C,qBAAa,SAAU,SAAQ,eAAe;WAC/B,gBAAgB,CAC3B,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,GAC7C,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;CAsC1B"}
1
+ {"version":3,"file":"wocontact.d.ts","sourceRoot":"","sources":["../../src/device/wocontact.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEzC,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAG9C;;;GAGG;AACH,qBAAa,SAAU,SAAQ,eAAe;IAC5C;;;;;OAKG;WACU,gBAAgB,CAC3B,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,GAChD,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;CAgC1B"}
@@ -1,30 +1,32 @@
1
- /* Copyright(C) 2024, donavanbecker (https://github.com/donavanbecker). All rights reserved.
2
- *
3
- * wocontact.ts: Switchbot BLE API registration.
4
- */
5
1
  import { SwitchbotDevice } from '../device.js';
6
2
  import { SwitchBotBLEModel, SwitchBotBLEModelFriendlyName, SwitchBotBLEModelName } from '../types/types.js';
3
+ /**
4
+ * Class representing a WoContact device.
5
+ * @see https://github.com/OpenWonderLabs/SwitchBotAPI-BLE/blob/latest/devicetypes/contactsensor.md
6
+ */
7
7
  export class WoContact extends SwitchbotDevice {
8
- static async parseServiceData(serviceData, onlog) {
8
+ /**
9
+ * Parses the service data for WoContact.
10
+ * @param {Buffer} serviceData - The service data buffer.
11
+ * @param {Function} emitLog - The function to emit log messages.
12
+ * @returns {Promise<object | null>} - Parsed service data or null if invalid.
13
+ */
14
+ static async parseServiceData(serviceData, emitLog) {
9
15
  if (serviceData.length !== 9) {
10
- if (onlog && typeof onlog === 'function') {
11
- onlog(`[parseServiceDataForWoContact] Buffer length ${serviceData.length} !== 9!`);
12
- }
16
+ emitLog('debugerror', `[parseServiceDataForWoContact] Buffer length ${serviceData.length} !== 9!`);
13
17
  return null;
14
18
  }
15
- const byte1 = serviceData.readUInt8(1);
16
- const byte2 = serviceData.readUInt8(2);
17
- const byte3 = serviceData.readUInt8(3);
18
- const byte8 = serviceData.readUInt8(8);
19
+ const [byte1, byte2, byte3, , , , , , byte8] = serviceData;
19
20
  const hallState = (byte3 >> 1) & 0b00000011;
20
- const tested = byte1 & 0b10000000;
21
- const movement = !!(byte1 & 0b01000000); // 1 - Movement detected
22
- const battery = byte2 & 0b01111111; // %
23
- const contact_open = (byte3 & 0b00000010) === 0b00000010;
24
- const contact_timeout = (byte3 & 0b00000100) === 0b00000100;
25
- const lightLevel = byte3 & 0b00000001;
21
+ const tested = Boolean(byte1 & 0b10000000);
22
+ const movement = Boolean(byte1 & 0b01000000);
23
+ const battery = byte2 & 0b01111111;
24
+ const contact_open = Boolean(byte3 & 0b00000010);
25
+ const contact_timeout = Boolean(byte3 & 0b00000100);
26
+ const lightLevel = byte3 & 0b00000001 ? 'bright' : 'dark';
26
27
  const button_count = byte8 & 0b00001111;
27
- const data = {
28
+ const doorState = hallState === 0 ? 'close' : hallState === 1 ? 'open' : 'timeout no closed';
29
+ return {
28
30
  model: SwitchBotBLEModel.ContactSensor,
29
31
  modelName: SwitchBotBLEModelName.ContactSensor,
30
32
  modelFriendlyName: SwitchBotBLEModelFriendlyName.ContactSensor,
@@ -33,11 +35,10 @@ export class WoContact extends SwitchbotDevice {
33
35
  battery,
34
36
  contact_open,
35
37
  contact_timeout,
36
- lightLevel: lightLevel === 0 ? 'dark' : 'bright',
38
+ lightLevel,
37
39
  button_count,
38
- doorState: hallState === 0 ? 'close' : hallState === 1 ? 'open' : 'timeout no closed',
40
+ doorState,
39
41
  };
40
- return data;
41
42
  }
42
43
  }
43
44
  //# sourceMappingURL=wocontact.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"wocontact.js","sourceRoot":"","sources":["../../src/device/wocontact.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAC9C,OAAO,EAAE,iBAAiB,EAAE,6BAA6B,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAA;AAE3G,MAAM,OAAO,SAAU,SAAQ,eAAe;IAC5C,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAC3B,WAAmB,EACnB,KAA8C;QAE9C,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7B,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE,CAAC;gBACzC,KAAK,CAAC,gDAAgD,WAAW,CAAC,MAAM,SAAS,CAAC,CAAA;YACpF,CAAC;YACD,OAAO,IAAI,CAAA;QACb,CAAC;QAED,MAAM,KAAK,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;QACtC,MAAM,KAAK,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;QACtC,MAAM,KAAK,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;QACtC,MAAM,KAAK,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;QAEtC,MAAM,SAAS,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,UAAU,CAAA;QAC3C,MAAM,MAAM,GAAG,KAAK,GAAG,UAAU,CAAA;QACjC,MAAM,QAAQ,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,UAAU,CAAC,CAAA,CAAC,wBAAwB;QAChE,MAAM,OAAO,GAAG,KAAK,GAAG,UAAU,CAAA,CAAC,IAAI;QACvC,MAAM,YAAY,GAAG,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,UAAU,CAAA;QACxD,MAAM,eAAe,GAAG,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,UAAU,CAAA;QAC3D,MAAM,UAAU,GAAG,KAAK,GAAG,UAAU,CAAA;QACrC,MAAM,YAAY,GAAG,KAAK,GAAG,UAAU,CAAA;QAEvC,MAAM,IAAI,GAAG;YACX,KAAK,EAAE,iBAAiB,CAAC,aAAa;YACtC,SAAS,EAAE,qBAAqB,CAAC,aAAa;YAC9C,iBAAiB,EAAE,6BAA6B,CAAC,aAAa;YAC9D,QAAQ;YACR,MAAM;YACN,OAAO;YACP,YAAY;YACZ,eAAe;YACf,UAAU,EAAE,UAAU,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ;YAChD,YAAY;YACZ,SAAS,EAAE,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB;SACtF,CAAA;QAED,OAAO,IAAI,CAAA;IACb,CAAC;CACF"}
1
+ {"version":3,"file":"wocontact.js","sourceRoot":"","sources":["../../src/device/wocontact.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAC9C,OAAO,EAAE,iBAAiB,EAAE,6BAA6B,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAA;AAE3G;;;GAGG;AACH,MAAM,OAAO,SAAU,SAAQ,eAAe;IAC5C;;;;;OAKG;IACH,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAC3B,WAAmB,EACnB,OAAiD;QAEjD,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7B,OAAO,CAAC,YAAY,EAAE,gDAAgD,WAAW,CAAC,MAAM,SAAS,CAAC,CAAA;YAClG,OAAO,IAAI,CAAA;QACb,CAAC;QAED,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,AAAD,EAAG,AAAD,EAAG,AAAD,EAAG,AAAD,EAAG,AAAD,EAAG,KAAK,CAAC,GAAG,WAAW,CAAA;QAE1D,MAAM,SAAS,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,UAAU,CAAA;QAC3C,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,GAAG,UAAU,CAAC,CAAA;QAC1C,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,GAAG,UAAU,CAAC,CAAA;QAC5C,MAAM,OAAO,GAAG,KAAK,GAAG,UAAU,CAAA;QAClC,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,GAAG,UAAU,CAAC,CAAA;QAChD,MAAM,eAAe,GAAG,OAAO,CAAC,KAAK,GAAG,UAAU,CAAC,CAAA;QACnD,MAAM,UAAU,GAAG,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAA;QACzD,MAAM,YAAY,GAAG,KAAK,GAAG,UAAU,CAAA;QACvC,MAAM,SAAS,GAAG,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAA;QAE5F,OAAO;YACL,KAAK,EAAE,iBAAiB,CAAC,aAAa;YACtC,SAAS,EAAE,qBAAqB,CAAC,aAAa;YAC9C,iBAAiB,EAAE,6BAA6B,CAAC,aAAa;YAC9D,QAAQ;YACR,MAAM;YACN,OAAO;YACP,YAAY;YACZ,eAAe;YACf,UAAU;YACV,YAAY;YACZ,SAAS;SACV,CAAA;IACH,CAAC;CACF"}
@@ -1,11 +1,49 @@
1
1
  import { Buffer } from 'node:buffer';
2
2
  import { SwitchbotDevice } from '../device.js';
3
+ /**
4
+ * Class representing a WoCurtain device.
5
+ * @see https://github.com/OpenWonderLabs/SwitchBotAPI-BLE/blob/latest/devicetypes/curtain.md
6
+ * @see https://github.com/OpenWonderLabs/SwitchBotAPI-BLE/blob/latest/devicetypes/curtain3.md
7
+ */
3
8
  export declare class WoCurtain extends SwitchbotDevice {
4
- static parseServiceData(serviceData: Buffer, manufacturerData: Buffer, onlog: ((message: string) => void) | undefined, reverse?: boolean): Promise<object | null>;
9
+ /**
10
+ * Parses the service data for WoCurtain.
11
+ * @param {Buffer} serviceData - The service data buffer.
12
+ * @param {Buffer} manufacturerData - The manufacturer data buffer.
13
+ * @param {Function} emitLog - The function to emit log messages.
14
+ * @param {boolean} [reverse] - Whether to reverse the position.
15
+ * @returns {Promise<object | null>} - Parsed service data or null if invalid.
16
+ */
17
+ static parseServiceData(serviceData: Buffer, manufacturerData: Buffer, emitLog: (level: string, message: string) => void, reverse?: boolean): Promise<object | null>;
18
+ /**
19
+ * Opens the curtain.
20
+ * @param {number} [mode] - Running mode (0x01 = QuietDrift, 0xFF = Default).
21
+ * @returns {Promise<void>}
22
+ */
5
23
  open(mode?: number): Promise<void>;
24
+ /**
25
+ * Closes the curtain.
26
+ * @param {number} [mode] - Running mode (0x01 = QuietDrift, 0xFF = Default).
27
+ * @returns {Promise<void>}
28
+ */
6
29
  close(mode?: number): Promise<void>;
30
+ /**
31
+ * Pauses the curtain.
32
+ * @returns {Promise<void>}
33
+ */
7
34
  pause(): Promise<void>;
35
+ /**
36
+ * Runs the curtain to the target position.
37
+ * @param {number} percent - The percentage of the target position.
38
+ * @param {number} [mode] - Running mode (0x01 = QuietDrift, 0xFF = Default).
39
+ * @returns {Promise<void>}
40
+ */
8
41
  runToPos(percent: number, mode?: number): Promise<void>;
42
+ /**
43
+ * Sends a command to the curtain.
44
+ * @param {number[]} bytes - The command bytes.
45
+ * @returns {Promise<void>}
46
+ */
9
47
  operateCurtain(bytes: number[]): Promise<void>;
10
48
  }
11
49
  //# sourceMappingURL=wocurtain.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"wocurtain.d.ts","sourceRoot":"","sources":["../../src/device/wocurtain.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAMpC,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAG9C,qBAAa,SAAU,SAAQ,eAAe;WAC/B,gBAAgB,CAC3B,WAAW,EAAE,MAAM,EACnB,gBAAgB,EAAE,MAAM,EACxB,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,EAClD,OAAO,GAAE,OAAe,GACnB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAiEnB,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM;IAelB,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM;IAenB,KAAK;IAgBL,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,SAAO;IAkBrC,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE;CAerC"}
1
+ {"version":3,"file":"wocurtain.d.ts","sourceRoot":"","sources":["../../src/device/wocurtain.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEpC,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAG9C;;;;GAIG;AACH,qBAAa,SAAU,SAAQ,eAAe;IAC5C;;;;;;;OAOG;WACU,gBAAgB,CAC3B,WAAW,EAAE,MAAM,EACnB,gBAAgB,EAAE,MAAM,EACxB,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,EACjD,OAAO,GAAE,OAAe,GACvB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IA8CzB;;;;OAIG;IACG,IAAI,CAAC,IAAI,GAAE,MAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAI9C;;;;OAIG;IACG,KAAK,CAAC,IAAI,GAAE,MAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAI/C;;;OAGG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5B;;;;;OAKG;IACG,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,MAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAQnE;;;;OAIG;IACU,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CAS5D"}