@switchbot/homebridge-switchbot 5.0.0-beta.13 → 5.0.0-beta.130

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 (593) hide show
  1. package/.github/ISSUE_TEMPLATE/e2e-verification.md +36 -0
  2. package/.github/copilot-instructions.md +39 -0
  3. package/.github/workflows/ci.yml +32 -0
  4. package/.github/workflows/manual-e2e.yml +115 -0
  5. package/.github/workflows/release.yml +0 -4
  6. package/CHANGELOG.md +35 -0
  7. package/E2E-VERIFICATION.md +121 -0
  8. package/MIGRATION.md +54 -0
  9. package/README.md +99 -3
  10. package/TODO.md +263 -0
  11. package/config.schema.json +198 -14787
  12. package/dist/device-types.d.ts +31 -0
  13. package/dist/device-types.d.ts.map +1 -0
  14. package/dist/device-types.js +246 -0
  15. package/dist/device-types.js.map +1 -0
  16. package/dist/deviceFactory.d.ts +13 -0
  17. package/dist/deviceFactory.d.ts.map +1 -0
  18. package/dist/deviceFactory.js +146 -0
  19. package/dist/deviceFactory.js.map +1 -0
  20. package/dist/devices/deviceBase.d.ts +50 -0
  21. package/dist/devices/deviceBase.d.ts.map +1 -0
  22. package/dist/devices/deviceBase.js +119 -0
  23. package/dist/devices/deviceBase.js.map +1 -0
  24. package/dist/devices/genericDevice.d.ts +277 -0
  25. package/dist/devices/genericDevice.d.ts.map +1 -0
  26. package/dist/devices/genericDevice.js +1383 -0
  27. package/dist/devices/genericDevice.js.map +1 -0
  28. package/dist/errors.d.ts +5 -0
  29. package/dist/errors.d.ts.map +1 -0
  30. package/dist/errors.js +51 -0
  31. package/dist/errors.js.map +1 -0
  32. package/dist/homebridge-ui/endpoints/config.d.ts +3 -0
  33. package/dist/homebridge-ui/endpoints/config.d.ts.map +1 -0
  34. package/dist/homebridge-ui/endpoints/config.js +107 -0
  35. package/dist/homebridge-ui/endpoints/config.js.map +1 -0
  36. package/dist/homebridge-ui/endpoints/credentials.d.ts +6 -0
  37. package/dist/homebridge-ui/endpoints/credentials.d.ts.map +1 -0
  38. package/dist/homebridge-ui/endpoints/credentials.js +65 -0
  39. package/dist/homebridge-ui/endpoints/credentials.js.map +1 -0
  40. package/dist/homebridge-ui/endpoints/devices.d.ts +6 -0
  41. package/dist/homebridge-ui/endpoints/devices.d.ts.map +1 -0
  42. package/dist/homebridge-ui/endpoints/devices.js +430 -0
  43. package/dist/homebridge-ui/endpoints/devices.js.map +1 -0
  44. package/dist/homebridge-ui/endpoints/discovery.d.ts +7 -0
  45. package/dist/homebridge-ui/endpoints/discovery.d.ts.map +1 -0
  46. package/dist/homebridge-ui/endpoints/discovery.js +212 -0
  47. package/dist/homebridge-ui/endpoints/discovery.js.map +1 -0
  48. package/dist/homebridge-ui/public/css/styles.css +447 -0
  49. package/dist/homebridge-ui/public/index.html +144 -248
  50. package/dist/homebridge-ui/public/js/api.d.ts +62 -0
  51. package/dist/homebridge-ui/public/js/api.d.ts.map +1 -0
  52. package/dist/homebridge-ui/public/js/api.js +225 -0
  53. package/dist/homebridge-ui/public/js/api.js.map +1 -0
  54. package/dist/homebridge-ui/public/js/api.ts +279 -0
  55. package/dist/homebridge-ui/public/js/app.d.ts +2 -0
  56. package/dist/homebridge-ui/public/js/app.d.ts.map +1 -0
  57. package/dist/homebridge-ui/public/js/app.js +3600 -0
  58. package/dist/homebridge-ui/public/js/app.js.map +7 -0
  59. package/dist/homebridge-ui/public/js/app.ts +23 -0
  60. package/dist/homebridge-ui/public/js/constants.d.ts +2 -0
  61. package/dist/homebridge-ui/public/js/constants.d.ts.map +1 -0
  62. package/dist/homebridge-ui/public/js/constants.js +2 -0
  63. package/dist/homebridge-ui/public/js/constants.js.map +1 -0
  64. package/dist/homebridge-ui/public/js/constants.ts +1 -0
  65. package/dist/homebridge-ui/public/js/credentials.d.ts +3 -0
  66. package/dist/homebridge-ui/public/js/credentials.d.ts.map +1 -0
  67. package/dist/homebridge-ui/public/js/credentials.js +96 -0
  68. package/dist/homebridge-ui/public/js/credentials.js.map +1 -0
  69. package/dist/homebridge-ui/public/js/credentials.ts +100 -0
  70. package/dist/homebridge-ui/public/js/devices-delete.d.ts +3 -0
  71. package/dist/homebridge-ui/public/js/devices-delete.d.ts.map +1 -0
  72. package/dist/homebridge-ui/public/js/devices-delete.js +206 -0
  73. package/dist/homebridge-ui/public/js/devices-delete.js.map +1 -0
  74. package/dist/homebridge-ui/public/js/devices-delete.ts +236 -0
  75. package/dist/homebridge-ui/public/js/devices.d.ts +9 -0
  76. package/dist/homebridge-ui/public/js/devices.d.ts.map +1 -0
  77. package/dist/homebridge-ui/public/js/devices.js +94 -0
  78. package/dist/homebridge-ui/public/js/devices.js.map +1 -0
  79. package/dist/homebridge-ui/public/js/devices.ts +114 -0
  80. package/dist/homebridge-ui/public/js/discovery.d.ts +4 -0
  81. package/dist/homebridge-ui/public/js/discovery.d.ts.map +1 -0
  82. package/dist/homebridge-ui/public/js/discovery.js +1364 -0
  83. package/dist/homebridge-ui/public/js/discovery.js.map +1 -0
  84. package/dist/homebridge-ui/public/js/discovery.ts +1492 -0
  85. package/dist/homebridge-ui/public/js/logger.d.ts +6 -0
  86. package/dist/homebridge-ui/public/js/logger.d.ts.map +1 -0
  87. package/dist/homebridge-ui/public/js/logger.js +12 -0
  88. package/dist/homebridge-ui/public/js/logger.js.map +1 -0
  89. package/dist/homebridge-ui/public/js/logger.ts +11 -0
  90. package/dist/homebridge-ui/public/js/modal.d.ts +5 -0
  91. package/dist/homebridge-ui/public/js/modal.d.ts.map +1 -0
  92. package/dist/homebridge-ui/public/js/modal.js +26 -0
  93. package/dist/homebridge-ui/public/js/modal.js.map +1 -0
  94. package/dist/homebridge-ui/public/js/modal.ts +28 -0
  95. package/dist/homebridge-ui/public/js/modals.d.ts +7 -0
  96. package/dist/homebridge-ui/public/js/modals.d.ts.map +1 -0
  97. package/dist/homebridge-ui/public/js/modals.js +494 -0
  98. package/dist/homebridge-ui/public/js/modals.js.map +1 -0
  99. package/dist/homebridge-ui/public/js/modals.ts +546 -0
  100. package/dist/homebridge-ui/public/js/render.d.ts +68 -0
  101. package/dist/homebridge-ui/public/js/render.d.ts.map +1 -0
  102. package/dist/homebridge-ui/public/js/render.js +914 -0
  103. package/dist/homebridge-ui/public/js/render.js.map +1 -0
  104. package/dist/homebridge-ui/public/js/render.ts +1026 -0
  105. package/dist/homebridge-ui/public/js/toast.d.ts +6 -0
  106. package/dist/homebridge-ui/public/js/toast.d.ts.map +1 -0
  107. package/dist/homebridge-ui/public/js/toast.js +29 -0
  108. package/dist/homebridge-ui/public/js/toast.js.map +1 -0
  109. package/dist/homebridge-ui/public/js/toast.ts +37 -0
  110. package/dist/homebridge-ui/public/js/types.d.ts +23 -0
  111. package/dist/homebridge-ui/public/js/types.d.ts.map +1 -0
  112. package/dist/homebridge-ui/public/js/types.js +2 -0
  113. package/dist/homebridge-ui/public/js/types.js.map +1 -0
  114. package/dist/homebridge-ui/public/js/types.ts +26 -0
  115. package/dist/homebridge-ui/server.js +11 -41
  116. package/dist/homebridge-ui/server.js.map +1 -1
  117. package/dist/homebridge-ui/utils/config-parser.d.ts +35 -0
  118. package/dist/homebridge-ui/utils/config-parser.d.ts.map +1 -0
  119. package/dist/homebridge-ui/utils/config-parser.js +87 -0
  120. package/dist/homebridge-ui/utils/config-parser.js.map +1 -0
  121. package/dist/homebridge-ui/utils/device-migration.d.ts +35 -0
  122. package/dist/homebridge-ui/utils/device-migration.d.ts.map +1 -0
  123. package/dist/homebridge-ui/utils/device-migration.js +111 -0
  124. package/dist/homebridge-ui/utils/device-migration.js.map +1 -0
  125. package/dist/homebridge-ui/utils/logger.d.ts +7 -0
  126. package/dist/homebridge-ui/utils/logger.d.ts.map +1 -0
  127. package/dist/homebridge-ui/utils/logger.js +17 -0
  128. package/dist/homebridge-ui/utils/logger.js.map +1 -0
  129. package/dist/index.d.ts.map +1 -1
  130. package/dist/index.js +1 -3
  131. package/dist/index.js.map +1 -1
  132. package/dist/platform.d.ts +39 -0
  133. package/dist/platform.d.ts.map +1 -0
  134. package/dist/platform.js +1570 -0
  135. package/dist/platform.js.map +1 -0
  136. package/dist/settings.d.ts +10 -249
  137. package/dist/settings.d.ts.map +1 -1
  138. package/dist/settings.js +5 -30
  139. package/dist/settings.js.map +1 -1
  140. package/dist/switchbotClient.d.ts +32 -0
  141. package/dist/switchbotClient.d.ts.map +1 -0
  142. package/dist/switchbotClient.js +253 -0
  143. package/dist/switchbotClient.js.map +1 -0
  144. package/dist/utils.d.ts +36 -82
  145. package/dist/utils.d.ts.map +1 -1
  146. package/dist/utils.js +40 -786
  147. package/dist/utils.js.map +1 -1
  148. package/docs/assets/highlight.css +21 -0
  149. package/docs/assets/icons.js +1 -1
  150. package/docs/assets/icons.svg +1 -1
  151. package/docs/assets/main.js +2 -2
  152. package/docs/assets/style.css +3 -3
  153. package/docs/index.html +103 -13
  154. package/docs/variables/default.html +1 -1
  155. package/eslint.config.js +7 -8
  156. package/nodemon.json +2 -2
  157. package/package.json +36 -32
  158. package/scripts/build-ui.js +36 -0
  159. package/scripts/e2e/README.md +25 -0
  160. package/scripts/e2e/curtain-e2e.sh +70 -0
  161. package/scripts/e2e/fan-e2e.sh +75 -0
  162. package/scripts/e2e/light-advanced-e2e.sh +97 -0
  163. package/scripts/e2e/light-e2e.sh +75 -0
  164. package/scripts/e2e/list-accessories.sh +19 -0
  165. package/scripts/e2e/lock-e2e.sh +65 -0
  166. package/scripts/free-dev-ports.mjs +105 -0
  167. package/scripts/generate-matter-maps.js +60 -0
  168. package/scripts/run-e2e-local.sh +14 -0
  169. package/scripts/sync-device-types.mjs +28 -0
  170. package/src/device-types.ts +261 -0
  171. package/src/deviceFactory.ts +190 -0
  172. package/src/devices/deviceBase.ts +141 -0
  173. package/src/devices/genericDevice.ts +1333 -0
  174. package/src/errors.ts +43 -0
  175. package/src/homebridge-ui/endpoints/config.ts +126 -0
  176. package/src/homebridge-ui/endpoints/credentials.ts +74 -0
  177. package/src/homebridge-ui/endpoints/devices.ts +464 -0
  178. package/src/homebridge-ui/endpoints/discovery.ts +233 -0
  179. package/src/homebridge-ui/public/css/styles.css +447 -0
  180. package/src/homebridge-ui/public/index.html +144 -248
  181. package/src/homebridge-ui/public/js/api.ts +279 -0
  182. package/src/homebridge-ui/public/js/app.ts +23 -0
  183. package/src/homebridge-ui/public/js/constants.ts +1 -0
  184. package/src/homebridge-ui/public/js/credentials.ts +100 -0
  185. package/src/homebridge-ui/public/js/devices-delete.ts +236 -0
  186. package/src/homebridge-ui/public/js/devices.ts +114 -0
  187. package/src/homebridge-ui/public/js/discovery.ts +1492 -0
  188. package/src/homebridge-ui/public/js/logger.ts +11 -0
  189. package/src/homebridge-ui/public/js/modal.ts +28 -0
  190. package/src/homebridge-ui/public/js/modals.ts +546 -0
  191. package/src/homebridge-ui/public/js/render.ts +1026 -0
  192. package/src/homebridge-ui/public/js/toast.ts +37 -0
  193. package/src/homebridge-ui/public/js/types.ts +26 -0
  194. package/src/homebridge-ui/server.ts +11 -43
  195. package/src/homebridge-ui/utils/config-parser.ts +108 -0
  196. package/src/homebridge-ui/utils/device-migration.ts +144 -0
  197. package/src/homebridge-ui/utils/logger.ts +17 -0
  198. package/src/index.ts +1 -3
  199. package/src/platform.ts +1585 -0
  200. package/src/settings.ts +12 -277
  201. package/src/switchbotClient.ts +251 -0
  202. package/src/utils.ts +48 -812
  203. package/test/accessory-restore.spec.ts +73 -0
  204. package/test/device-mapping.spec.ts +37 -0
  205. package/test/deviceFactory.spec.ts +18 -0
  206. package/test/e2e/run-e2e.spec.ts +52 -0
  207. package/test/fan-swing.spec.ts +29 -0
  208. package/test/helpers/matter-harness.ts +53 -0
  209. package/test/lock-users.spec.ts +44 -0
  210. package/test/matter-childbridge.spec.ts +59 -0
  211. package/test/matter-descriptors.spec.ts +97 -0
  212. package/test/matter-device-state.spec.ts +101 -0
  213. package/test/matter-integration.spec.ts +136 -0
  214. package/test/platform.integration.spec.ts +55 -0
  215. package/test/switchbot-client-debounce.spec.ts +131 -0
  216. package/test/switchbot-client-openapi.spec.ts +56 -0
  217. package/test/switchbotClient.spec.ts +10 -0
  218. package/test/utils.spec.ts +36 -0
  219. package/todo/COMPLETED.md +542 -0
  220. package/todo/README.md +59 -0
  221. package/todo/TODO.md +190 -0
  222. package/todo/mockups/filtering-sorting.svg +112 -0
  223. package/todo/mockups/modal-switchbot-theme.svg +66 -0
  224. package/todo/mockups/signal-strength-visualization.svg +94 -0
  225. package/vitest.config.ts +7 -0
  226. package/coverage/base.css +0 -224
  227. package/coverage/block-navigation.js +0 -87
  228. package/coverage/clover.xml +0 -15847
  229. package/coverage/coverage-final.json +0 -42
  230. package/coverage/docs/assets/dmt/dmt-component-data.js.html +0 -85
  231. package/coverage/docs/assets/dmt/dmt-components.js.html +0 -286
  232. package/coverage/docs/assets/dmt/index.html +0 -131
  233. package/coverage/docs/assets/hierarchy.js.html +0 -85
  234. package/coverage/docs/assets/icons.js.html +0 -136
  235. package/coverage/docs/assets/index.html +0 -146
  236. package/coverage/docs/assets/main.js.html +0 -265
  237. package/coverage/favicon.png +0 -0
  238. package/coverage/index.html +0 -191
  239. package/coverage/prettify.css +0 -1
  240. package/coverage/prettify.js +0 -2
  241. package/coverage/sort-arrow-sprite.png +0 -0
  242. package/coverage/sorter.js +0 -196
  243. package/coverage/src/device/blindtilt.ts.html +0 -3238
  244. package/coverage/src/device/bot.ts.html +0 -2803
  245. package/coverage/src/device/ceilinglight.ts.html +0 -2338
  246. package/coverage/src/device/colorbulb.ts.html +0 -2824
  247. package/coverage/src/device/contact.ts.html +0 -1465
  248. package/coverage/src/device/curtain.ts.html +0 -2869
  249. package/coverage/src/device/device.ts.html +0 -2500
  250. package/coverage/src/device/fan.ts.html +0 -2242
  251. package/coverage/src/device/hub.ts.html +0 -1408
  252. package/coverage/src/device/humidifier.ts.html +0 -2116
  253. package/coverage/src/device/index.html +0 -416
  254. package/coverage/src/device/iosensor.ts.html +0 -1375
  255. package/coverage/src/device/lightstrip.ts.html +0 -2617
  256. package/coverage/src/device/lock.ts.html +0 -1963
  257. package/coverage/src/device/meter.ts.html +0 -1372
  258. package/coverage/src/device/meterplus.ts.html +0 -1384
  259. package/coverage/src/device/meterpro.ts.html +0 -1618
  260. package/coverage/src/device/motion.ts.html +0 -1264
  261. package/coverage/src/device/plug.ts.html +0 -1372
  262. package/coverage/src/device/relayswitch.ts.html +0 -2284
  263. package/coverage/src/device/robotvacuumcleaner.ts.html +0 -1810
  264. package/coverage/src/device/waterdetector.ts.html +0 -1294
  265. package/coverage/src/homebridge-ui/index.html +0 -116
  266. package/coverage/src/homebridge-ui/server.ts.html +0 -229
  267. package/coverage/src/index.html +0 -161
  268. package/coverage/src/index.ts.html +0 -124
  269. package/coverage/src/irdevice/airconditioner.ts.html +0 -1687
  270. package/coverage/src/irdevice/airpurifier.ts.html +0 -844
  271. package/coverage/src/irdevice/camera.ts.html +0 -475
  272. package/coverage/src/irdevice/fan.ts.html +0 -766
  273. package/coverage/src/irdevice/index.html +0 -251
  274. package/coverage/src/irdevice/irdevice.ts.html +0 -1117
  275. package/coverage/src/irdevice/light.ts.html +0 -826
  276. package/coverage/src/irdevice/other.ts.html +0 -2458
  277. package/coverage/src/irdevice/tv.ts.html +0 -1222
  278. package/coverage/src/irdevice/vacuumcleaner.ts.html +0 -466
  279. package/coverage/src/irdevice/waterheater.ts.html +0 -469
  280. package/coverage/src/platform.ts.html +0 -8776
  281. package/coverage/src/settings.ts.html +0 -934
  282. package/coverage/src/utils.ts.html +0 -2092
  283. package/dist/baseMatterAccessory.test.d.ts +0 -2
  284. package/dist/baseMatterAccessory.test.d.ts.map +0 -1
  285. package/dist/baseMatterAccessory.test.js +0 -71
  286. package/dist/baseMatterAccessory.test.js.map +0 -1
  287. package/dist/devices-hap/airpurifier.d.ts +0 -54
  288. package/dist/devices-hap/airpurifier.d.ts.map +0 -1
  289. package/dist/devices-hap/airpurifier.js +0 -527
  290. package/dist/devices-hap/airpurifier.js.map +0 -1
  291. package/dist/devices-hap/blindtilt.d.ts +0 -90
  292. package/dist/devices-hap/blindtilt.d.ts.map +0 -1
  293. package/dist/devices-hap/blindtilt.js +0 -974
  294. package/dist/devices-hap/blindtilt.js.map +0 -1
  295. package/dist/devices-hap/bot.d.ts +0 -102
  296. package/dist/devices-hap/bot.d.ts.map +0 -1
  297. package/dist/devices-hap/bot.js +0 -811
  298. package/dist/devices-hap/bot.js.map +0 -1
  299. package/dist/devices-hap/ceilinglight.d.ts +0 -85
  300. package/dist/devices-hap/ceilinglight.d.ts.map +0 -1
  301. package/dist/devices-hap/ceilinglight.js +0 -701
  302. package/dist/devices-hap/ceilinglight.js.map +0 -1
  303. package/dist/devices-hap/colorbulb.d.ts +0 -88
  304. package/dist/devices-hap/colorbulb.d.ts.map +0 -1
  305. package/dist/devices-hap/colorbulb.js +0 -881
  306. package/dist/devices-hap/colorbulb.js.map +0 -1
  307. package/dist/devices-hap/contact.d.ts +0 -44
  308. package/dist/devices-hap/contact.d.ts.map +0 -1
  309. package/dist/devices-hap/contact.js +0 -409
  310. package/dist/devices-hap/contact.js.map +0 -1
  311. package/dist/devices-hap/curtain.d.ts +0 -73
  312. package/dist/devices-hap/curtain.d.ts.map +0 -1
  313. package/dist/devices-hap/curtain.js +0 -869
  314. package/dist/devices-hap/curtain.js.map +0 -1
  315. package/dist/devices-hap/device.d.ts +0 -98
  316. package/dist/devices-hap/device.d.ts.map +0 -1
  317. package/dist/devices-hap/device.js +0 -749
  318. package/dist/devices-hap/device.js.map +0 -1
  319. package/dist/devices-hap/fan.d.ts +0 -69
  320. package/dist/devices-hap/fan.d.ts.map +0 -1
  321. package/dist/devices-hap/fan.js +0 -649
  322. package/dist/devices-hap/fan.js.map +0 -1
  323. package/dist/devices-hap/hub.d.ts +0 -37
  324. package/dist/devices-hap/hub.d.ts.map +0 -1
  325. package/dist/devices-hap/hub.js +0 -392
  326. package/dist/devices-hap/hub.js.map +0 -1
  327. package/dist/devices-hap/humidifier.d.ts +0 -68
  328. package/dist/devices-hap/humidifier.d.ts.map +0 -1
  329. package/dist/devices-hap/humidifier.js +0 -628
  330. package/dist/devices-hap/humidifier.js.map +0 -1
  331. package/dist/devices-hap/iosensor.d.ts +0 -42
  332. package/dist/devices-hap/iosensor.d.ts.map +0 -1
  333. package/dist/devices-hap/iosensor.js +0 -382
  334. package/dist/devices-hap/iosensor.js.map +0 -1
  335. package/dist/devices-hap/lightstrip.d.ts +0 -79
  336. package/dist/devices-hap/lightstrip.d.ts.map +0 -1
  337. package/dist/devices-hap/lightstrip.js +0 -797
  338. package/dist/devices-hap/lightstrip.js.map +0 -1
  339. package/dist/devices-hap/lock.d.ts +0 -53
  340. package/dist/devices-hap/lock.d.ts.map +0 -1
  341. package/dist/devices-hap/lock.js +0 -561
  342. package/dist/devices-hap/lock.js.map +0 -1
  343. package/dist/devices-hap/meter.d.ts +0 -37
  344. package/dist/devices-hap/meter.d.ts.map +0 -1
  345. package/dist/devices-hap/meter.js +0 -379
  346. package/dist/devices-hap/meter.js.map +0 -1
  347. package/dist/devices-hap/meterplus.d.ts +0 -42
  348. package/dist/devices-hap/meterplus.d.ts.map +0 -1
  349. package/dist/devices-hap/meterplus.js +0 -384
  350. package/dist/devices-hap/meterplus.js.map +0 -1
  351. package/dist/devices-hap/meterpro.d.ts +0 -43
  352. package/dist/devices-hap/meterpro.d.ts.map +0 -1
  353. package/dist/devices-hap/meterpro.js +0 -468
  354. package/dist/devices-hap/meterpro.js.map +0 -1
  355. package/dist/devices-hap/motion.d.ts +0 -42
  356. package/dist/devices-hap/motion.d.ts.map +0 -1
  357. package/dist/devices-hap/motion.js +0 -345
  358. package/dist/devices-hap/motion.js.map +0 -1
  359. package/dist/devices-hap/plug.d.ts +0 -49
  360. package/dist/devices-hap/plug.d.ts.map +0 -1
  361. package/dist/devices-hap/plug.js +0 -395
  362. package/dist/devices-hap/plug.js.map +0 -1
  363. package/dist/devices-hap/relayswitch.d.ts +0 -96
  364. package/dist/devices-hap/relayswitch.d.ts.map +0 -1
  365. package/dist/devices-hap/relayswitch.js +0 -642
  366. package/dist/devices-hap/relayswitch.js.map +0 -1
  367. package/dist/devices-hap/robotvacuumcleaner.d.ts +0 -54
  368. package/dist/devices-hap/robotvacuumcleaner.d.ts.map +0 -1
  369. package/dist/devices-hap/robotvacuumcleaner.js +0 -523
  370. package/dist/devices-hap/robotvacuumcleaner.js.map +0 -1
  371. package/dist/devices-hap/waterdetector.d.ts +0 -41
  372. package/dist/devices-hap/waterdetector.d.ts.map +0 -1
  373. package/dist/devices-hap/waterdetector.js +0 -356
  374. package/dist/devices-hap/waterdetector.js.map +0 -1
  375. package/dist/devices-matter/BaseMatterAccessory.d.ts +0 -78
  376. package/dist/devices-matter/BaseMatterAccessory.d.ts.map +0 -1
  377. package/dist/devices-matter/BaseMatterAccessory.js +0 -220
  378. package/dist/devices-matter/BaseMatterAccessory.js.map +0 -1
  379. package/dist/devices-matter/ColorLightAccessory.d.ts +0 -20
  380. package/dist/devices-matter/ColorLightAccessory.d.ts.map +0 -1
  381. package/dist/devices-matter/ColorLightAccessory.js +0 -95
  382. package/dist/devices-matter/ColorLightAccessory.js.map +0 -1
  383. package/dist/devices-matter/ColorTemperatureLightAccessory.d.ts +0 -18
  384. package/dist/devices-matter/ColorTemperatureLightAccessory.d.ts.map +0 -1
  385. package/dist/devices-matter/ColorTemperatureLightAccessory.js +0 -76
  386. package/dist/devices-matter/ColorTemperatureLightAccessory.js.map +0 -1
  387. package/dist/devices-matter/ContactSensorAccessory.d.ts +0 -12
  388. package/dist/devices-matter/ContactSensorAccessory.d.ts.map +0 -1
  389. package/dist/devices-matter/ContactSensorAccessory.js +0 -34
  390. package/dist/devices-matter/ContactSensorAccessory.js.map +0 -1
  391. package/dist/devices-matter/DimmableLightAccessory.d.ts +0 -58
  392. package/dist/devices-matter/DimmableLightAccessory.d.ts.map +0 -1
  393. package/dist/devices-matter/DimmableLightAccessory.js +0 -167
  394. package/dist/devices-matter/DimmableLightAccessory.js.map +0 -1
  395. package/dist/devices-matter/DoorLockAccessory.d.ts +0 -14
  396. package/dist/devices-matter/DoorLockAccessory.d.ts.map +0 -1
  397. package/dist/devices-matter/DoorLockAccessory.js +0 -50
  398. package/dist/devices-matter/DoorLockAccessory.js.map +0 -1
  399. package/dist/devices-matter/ExtendedColorLightAccessory.d.ts +0 -21
  400. package/dist/devices-matter/ExtendedColorLightAccessory.d.ts.map +0 -1
  401. package/dist/devices-matter/ExtendedColorLightAccessory.js +0 -106
  402. package/dist/devices-matter/ExtendedColorLightAccessory.js.map +0 -1
  403. package/dist/devices-matter/FanAccessory.d.ts +0 -16
  404. package/dist/devices-matter/FanAccessory.d.ts.map +0 -1
  405. package/dist/devices-matter/FanAccessory.js +0 -81
  406. package/dist/devices-matter/FanAccessory.js.map +0 -1
  407. package/dist/devices-matter/HumiditySensorAccessory.d.ts +0 -12
  408. package/dist/devices-matter/HumiditySensorAccessory.d.ts.map +0 -1
  409. package/dist/devices-matter/HumiditySensorAccessory.js +0 -34
  410. package/dist/devices-matter/HumiditySensorAccessory.js.map +0 -1
  411. package/dist/devices-matter/LeakSensorAccessory.d.ts +0 -12
  412. package/dist/devices-matter/LeakSensorAccessory.d.ts.map +0 -1
  413. package/dist/devices-matter/LeakSensorAccessory.js +0 -33
  414. package/dist/devices-matter/LeakSensorAccessory.js.map +0 -1
  415. package/dist/devices-matter/LightSensorAccessory.d.ts +0 -12
  416. package/dist/devices-matter/LightSensorAccessory.d.ts.map +0 -1
  417. package/dist/devices-matter/LightSensorAccessory.js +0 -34
  418. package/dist/devices-matter/LightSensorAccessory.js.map +0 -1
  419. package/dist/devices-matter/OccupancySensorAccessory.d.ts +0 -12
  420. package/dist/devices-matter/OccupancySensorAccessory.d.ts.map +0 -1
  421. package/dist/devices-matter/OccupancySensorAccessory.js +0 -39
  422. package/dist/devices-matter/OccupancySensorAccessory.js.map +0 -1
  423. package/dist/devices-matter/OnOffLightAccessory.d.ts +0 -38
  424. package/dist/devices-matter/OnOffLightAccessory.d.ts.map +0 -1
  425. package/dist/devices-matter/OnOffLightAccessory.js +0 -110
  426. package/dist/devices-matter/OnOffLightAccessory.js.map +0 -1
  427. package/dist/devices-matter/OnOffOutletAccessory.d.ts +0 -14
  428. package/dist/devices-matter/OnOffOutletAccessory.d.ts.map +0 -1
  429. package/dist/devices-matter/OnOffOutletAccessory.js +0 -43
  430. package/dist/devices-matter/OnOffOutletAccessory.js.map +0 -1
  431. package/dist/devices-matter/OnOffSwitchAccessory.d.ts +0 -14
  432. package/dist/devices-matter/OnOffSwitchAccessory.d.ts.map +0 -1
  433. package/dist/devices-matter/OnOffSwitchAccessory.js +0 -42
  434. package/dist/devices-matter/OnOffSwitchAccessory.js.map +0 -1
  435. package/dist/devices-matter/RoboticVacuumAccessory.d.ts +0 -68
  436. package/dist/devices-matter/RoboticVacuumAccessory.d.ts.map +0 -1
  437. package/dist/devices-matter/RoboticVacuumAccessory.js +0 -334
  438. package/dist/devices-matter/RoboticVacuumAccessory.js.map +0 -1
  439. package/dist/devices-matter/SmokeCOAlarmAccessory.d.ts +0 -11
  440. package/dist/devices-matter/SmokeCOAlarmAccessory.d.ts.map +0 -1
  441. package/dist/devices-matter/SmokeCOAlarmAccessory.js +0 -49
  442. package/dist/devices-matter/SmokeCOAlarmAccessory.js.map +0 -1
  443. package/dist/devices-matter/TemperatureSensorAccessory.d.ts +0 -12
  444. package/dist/devices-matter/TemperatureSensorAccessory.d.ts.map +0 -1
  445. package/dist/devices-matter/TemperatureSensorAccessory.js +0 -36
  446. package/dist/devices-matter/TemperatureSensorAccessory.js.map +0 -1
  447. package/dist/devices-matter/ThermostatAccessory.d.ts +0 -19
  448. package/dist/devices-matter/ThermostatAccessory.d.ts.map +0 -1
  449. package/dist/devices-matter/ThermostatAccessory.js +0 -95
  450. package/dist/devices-matter/ThermostatAccessory.js.map +0 -1
  451. package/dist/devices-matter/VenetianBlindAccessory.d.ts +0 -19
  452. package/dist/devices-matter/VenetianBlindAccessory.d.ts.map +0 -1
  453. package/dist/devices-matter/VenetianBlindAccessory.js +0 -99
  454. package/dist/devices-matter/VenetianBlindAccessory.js.map +0 -1
  455. package/dist/devices-matter/WindowBlindAccessory.d.ts +0 -17
  456. package/dist/devices-matter/WindowBlindAccessory.d.ts.map +0 -1
  457. package/dist/devices-matter/WindowBlindAccessory.js +0 -80
  458. package/dist/devices-matter/WindowBlindAccessory.js.map +0 -1
  459. package/dist/devices-matter/custom/PowerStripAccessory.d.ts +0 -97
  460. package/dist/devices-matter/custom/PowerStripAccessory.d.ts.map +0 -1
  461. package/dist/devices-matter/custom/PowerStripAccessory.js +0 -265
  462. package/dist/devices-matter/custom/PowerStripAccessory.js.map +0 -1
  463. package/dist/devices-matter/custom/index.d.ts +0 -8
  464. package/dist/devices-matter/custom/index.d.ts.map +0 -1
  465. package/dist/devices-matter/custom/index.js +0 -8
  466. package/dist/devices-matter/custom/index.js.map +0 -1
  467. package/dist/devices-matter/index.d.ts +0 -29
  468. package/dist/devices-matter/index.d.ts.map +0 -1
  469. package/dist/devices-matter/index.js +0 -28
  470. package/dist/devices-matter/index.js.map +0 -1
  471. package/dist/index.test.d.ts +0 -2
  472. package/dist/index.test.d.ts.map +0 -1
  473. package/dist/index.test.js +0 -19
  474. package/dist/index.test.js.map +0 -1
  475. package/dist/irdevice/airconditioner.d.ts +0 -61
  476. package/dist/irdevice/airconditioner.d.ts.map +0 -1
  477. package/dist/irdevice/airconditioner.js +0 -472
  478. package/dist/irdevice/airconditioner.js.map +0 -1
  479. package/dist/irdevice/airpurifier.d.ts +0 -50
  480. package/dist/irdevice/airpurifier.d.ts.map +0 -1
  481. package/dist/irdevice/airpurifier.js +0 -213
  482. package/dist/irdevice/airpurifier.js.map +0 -1
  483. package/dist/irdevice/camera.d.ts +0 -32
  484. package/dist/irdevice/camera.d.ts.map +0 -1
  485. package/dist/irdevice/camera.js +0 -107
  486. package/dist/irdevice/camera.js.map +0 -1
  487. package/dist/irdevice/fan.d.ts +0 -36
  488. package/dist/irdevice/fan.d.ts.map +0 -1
  489. package/dist/irdevice/fan.js +0 -200
  490. package/dist/irdevice/fan.js.map +0 -1
  491. package/dist/irdevice/irdevice.d.ts +0 -68
  492. package/dist/irdevice/irdevice.d.ts.map +0 -1
  493. package/dist/irdevice/irdevice.js +0 -298
  494. package/dist/irdevice/irdevice.js.map +0 -1
  495. package/dist/irdevice/light.d.ts +0 -36
  496. package/dist/irdevice/light.d.ts.map +0 -1
  497. package/dist/irdevice/light.js +0 -206
  498. package/dist/irdevice/light.js.map +0 -1
  499. package/dist/irdevice/other.d.ts +0 -57
  500. package/dist/irdevice/other.d.ts.map +0 -1
  501. package/dist/irdevice/other.js +0 -778
  502. package/dist/irdevice/other.js.map +0 -1
  503. package/dist/irdevice/tv.d.ts +0 -45
  504. package/dist/irdevice/tv.d.ts.map +0 -1
  505. package/dist/irdevice/tv.js +0 -327
  506. package/dist/irdevice/tv.js.map +0 -1
  507. package/dist/irdevice/vacuumcleaner.d.ts +0 -28
  508. package/dist/irdevice/vacuumcleaner.d.ts.map +0 -1
  509. package/dist/irdevice/vacuumcleaner.js +0 -104
  510. package/dist/irdevice/vacuumcleaner.js.map +0 -1
  511. package/dist/irdevice/waterheater.d.ts +0 -30
  512. package/dist/irdevice/waterheater.d.ts.map +0 -1
  513. package/dist/irdevice/waterheater.js +0 -105
  514. package/dist/irdevice/waterheater.js.map +0 -1
  515. package/dist/platform-hap.d.ts +0 -149
  516. package/dist/platform-hap.d.ts.map +0 -1
  517. package/dist/platform-hap.js +0 -2861
  518. package/dist/platform-hap.js.map +0 -1
  519. package/dist/platform-matter.d.ts +0 -120
  520. package/dist/platform-matter.d.ts.map +0 -1
  521. package/dist/platform-matter.js +0 -999
  522. package/dist/platform-matter.js.map +0 -1
  523. package/dist/utils.test.d.ts +0 -2
  524. package/dist/utils.test.d.ts.map +0 -1
  525. package/dist/utils.test.js +0 -95
  526. package/dist/utils.test.js.map +0 -1
  527. package/dist/verifyconfig.test.d.ts +0 -2
  528. package/dist/verifyconfig.test.d.ts.map +0 -1
  529. package/dist/verifyconfig.test.js +0 -167
  530. package/dist/verifyconfig.test.js.map +0 -1
  531. package/src/baseMatterAccessory.test.ts +0 -88
  532. package/src/custom.d.ts +0 -7
  533. package/src/devices-hap/airpurifier.ts +0 -563
  534. package/src/devices-hap/blindtilt.ts +0 -1049
  535. package/src/devices-hap/bot.ts +0 -900
  536. package/src/devices-hap/ceilinglight.ts +0 -742
  537. package/src/devices-hap/colorbulb.ts +0 -904
  538. package/src/devices-hap/contact.ts +0 -457
  539. package/src/devices-hap/curtain.ts +0 -944
  540. package/src/devices-hap/device.ts +0 -811
  541. package/src/devices-hap/fan.ts +0 -711
  542. package/src/devices-hap/hub.ts +0 -439
  543. package/src/devices-hap/humidifier.ts +0 -669
  544. package/src/devices-hap/iosensor.ts +0 -427
  545. package/src/devices-hap/lightstrip.ts +0 -836
  546. package/src/devices-hap/lock.ts +0 -620
  547. package/src/devices-hap/meter.ts +0 -426
  548. package/src/devices-hap/meterplus.ts +0 -430
  549. package/src/devices-hap/meterpro.ts +0 -522
  550. package/src/devices-hap/motion.ts +0 -390
  551. package/src/devices-hap/plug.ts +0 -423
  552. package/src/devices-hap/relayswitch.ts +0 -727
  553. package/src/devices-hap/robotvacuumcleaner.ts +0 -568
  554. package/src/devices-hap/waterdetector.ts +0 -400
  555. package/src/devices-matter/BaseMatterAccessory.ts +0 -249
  556. package/src/devices-matter/ColorLightAccessory.ts +0 -110
  557. package/src/devices-matter/ColorTemperatureLightAccessory.ts +0 -90
  558. package/src/devices-matter/ContactSensorAccessory.ts +0 -41
  559. package/src/devices-matter/DimmableLightAccessory.ts +0 -192
  560. package/src/devices-matter/DoorLockAccessory.ts +0 -60
  561. package/src/devices-matter/ExtendedColorLightAccessory.ts +0 -122
  562. package/src/devices-matter/FanAccessory.ts +0 -95
  563. package/src/devices-matter/HumiditySensorAccessory.ts +0 -41
  564. package/src/devices-matter/LeakSensorAccessory.ts +0 -40
  565. package/src/devices-matter/LightSensorAccessory.ts +0 -41
  566. package/src/devices-matter/OccupancySensorAccessory.ts +0 -48
  567. package/src/devices-matter/OnOffLightAccessory.ts +0 -125
  568. package/src/devices-matter/OnOffOutletAccessory.ts +0 -51
  569. package/src/devices-matter/OnOffSwitchAccessory.ts +0 -51
  570. package/src/devices-matter/RoboticVacuumAccessory.ts +0 -407
  571. package/src/devices-matter/SmokeCOAlarmAccessory.ts +0 -59
  572. package/src/devices-matter/TemperatureSensorAccessory.ts +0 -43
  573. package/src/devices-matter/ThermostatAccessory.ts +0 -110
  574. package/src/devices-matter/VenetianBlindAccessory.ts +0 -115
  575. package/src/devices-matter/WindowBlindAccessory.ts +0 -92
  576. package/src/devices-matter/custom/PowerStripAccessory.ts +0 -309
  577. package/src/devices-matter/custom/index.ts +0 -8
  578. package/src/devices-matter/index.ts +0 -29
  579. package/src/index.test.ts +0 -24
  580. package/src/irdevice/airconditioner.ts +0 -533
  581. package/src/irdevice/airpurifier.ts +0 -252
  582. package/src/irdevice/camera.ts +0 -129
  583. package/src/irdevice/fan.ts +0 -226
  584. package/src/irdevice/irdevice.ts +0 -344
  585. package/src/irdevice/light.ts +0 -246
  586. package/src/irdevice/other.ts +0 -790
  587. package/src/irdevice/tv.ts +0 -378
  588. package/src/irdevice/vacuumcleaner.ts +0 -126
  589. package/src/irdevice/waterheater.ts +0 -127
  590. package/src/platform-hap.ts +0 -2997
  591. package/src/platform-matter.ts +0 -1124
  592. package/src/utils.test.ts +0 -96
  593. package/src/verifyconfig.test.ts +0 -197
@@ -1,749 +0,0 @@
1
- /* Copyright(C) 2021-2024, donavanbecker (https://github.com/donavanbecker). All rights reserved.
2
- *
3
- * device.ts: @switchbot/homebridge-switchbot.
4
- */
5
- import { hostname } from 'node:os';
6
- import { SwitchBotBLEModel, SwitchBotBLEModelFriendlyName, SwitchBotBLEModelName, SwitchBotModel } from 'node-switchbot';
7
- import { formatDeviceIdAsMac, safeStringify, sleep } from '../utils.js';
8
- export class deviceBase {
9
- platform;
10
- accessory;
11
- device;
12
- api;
13
- log;
14
- config;
15
- hap;
16
- // Config
17
- deviceLogging;
18
- deviceRefreshRate;
19
- deviceUpdateRate;
20
- devicePushRate;
21
- deviceMaxRetries;
22
- deviceDelayBetweenRetries;
23
- // Connection
24
- BLE;
25
- OpenAPI;
26
- // Accsrroy Information
27
- deviceModel;
28
- deviceBLEModel;
29
- // MQTT
30
- deviceMqttURL;
31
- deviceMqttOptions;
32
- deviceMqttPubOptions;
33
- // BLE
34
- scanDuration;
35
- // EVE history service handler
36
- historyService = null;
37
- // MQTT stuff
38
- mqttClient = null;
39
- constructor(platform, accessory, device) {
40
- this.platform = platform;
41
- this.accessory = accessory;
42
- this.device = device;
43
- this.api = this.platform.api;
44
- this.log = this.platform.log;
45
- this.config = this.platform.config;
46
- this.hap = this.api.hap;
47
- // Connection
48
- this.BLE = this.device.connectionType === 'BLE' || this.device.connectionType === 'BLE/OpenAPI';
49
- this.OpenAPI = this.device.connectionType === 'OpenAPI' || this.device.connectionType === 'BLE/OpenAPI';
50
- this.getDeviceLogSettings(device);
51
- this.getDeviceRateSettings(device);
52
- this.getDeviceConfigSettings(device);
53
- this.getDeviceContext(accessory, device);
54
- this.getMqttSettings(device);
55
- // Set accessory information
56
- accessory
57
- .getService(this.hap.Service.AccessoryInformation)
58
- .setCharacteristic(this.hap.Characteristic.Manufacturer, 'SwitchBot')
59
- .setCharacteristic(this.hap.Characteristic.AppMatchingIdentifier, 'id1087374760')
60
- .setCharacteristic(this.hap.Characteristic.Name, accessory.displayName)
61
- .setCharacteristic(this.hap.Characteristic.ConfiguredName, accessory.displayName)
62
- .setCharacteristic(this.hap.Characteristic.Model, device.model)
63
- .setCharacteristic(this.hap.Characteristic.ProductData, device.deviceId)
64
- .setCharacteristic(this.hap.Characteristic.SerialNumber, device.deviceId);
65
- }
66
- async getDeviceLogSettings(device) {
67
- this.deviceLogging = this.platform.debugMode ? 'debugMode' : device.logging ?? this.platform.platformLogging ?? 'standard';
68
- const logging = this.platform.debugMode ? 'Debug Mode' : device.logging ? 'Device Config' : this.platform.platformLogging ? 'Platform Config' : 'Default';
69
- this.debugLog(`Using ${logging} Logging: ${this.deviceLogging}`);
70
- }
71
- async getDeviceRateSettings(device) {
72
- // refreshRate
73
- this.deviceRefreshRate = device.refreshRate ?? this.platform.platformRefreshRate ?? 300;
74
- const refreshRate = device.refreshRate ? 'Device Config' : this.platform.platformRefreshRate ? 'Platform Config' : 'Default';
75
- this.accessory.context.refreshRate = this.deviceRefreshRate;
76
- // updateRate
77
- this.deviceUpdateRate = device.updateRate ?? this.platform.platformUpdateRate ?? 5;
78
- const updateRate = device.updateRate ? 'Device Config' : this.platform.platformUpdateRate ? 'Platform Config' : 'Default';
79
- this.accessory.context.updateRate = this.deviceUpdateRate;
80
- // pushRate
81
- this.devicePushRate = device.pushRate ?? this.platform.platformPushRate ?? 0.1;
82
- const pushRate = device.pushRate ? 'Device Config' : this.platform.platformPushRate ? 'Platform Config' : 'Default';
83
- this.accessory.context.pushRate = this.devicePushRate;
84
- this.debugLog(`Using ${refreshRate} refreshRate: ${this.deviceRefreshRate}, ${updateRate} updateRate: ${this.deviceUpdateRate}, ${pushRate} pushRate: ${this.devicePushRate}`);
85
- // maxRetries
86
- this.deviceMaxRetries = device.maxRetries ?? this.platform.platformMaxRetries ?? 2;
87
- const maxRetries = device.maxRetries ? 'Device' : this.platform.platformMaxRetries ? 'Platform' : 'Default';
88
- this.debugLog(`Using ${maxRetries} Max Retries: ${this.deviceMaxRetries}`);
89
- // delayBetweenRetries
90
- this.deviceDelayBetweenRetries = device.delayBetweenRetries ? (device.delayBetweenRetries * 1000) : this.platform.platformDelayBetweenRetries ?? 3000;
91
- const delayBetweenRetries = device.delayBetweenRetries ? 'Device' : this.platform.platformDelayBetweenRetries ? 'Platform' : 'Default';
92
- this.debugLog(`Using ${delayBetweenRetries} Delay Between Retries: ${this.deviceDelayBetweenRetries}`);
93
- // scanDuration
94
- this.scanDuration = Math.max(device.scanDuration ?? 1, this.deviceUpdateRate > 1 ? this.deviceUpdateRate : 1);
95
- if (this.BLE) {
96
- this.debugLog(`Using ${device.scanDuration ? 'Device Config' : 'Default'} scanDuration: ${this.scanDuration}`);
97
- if (device.scanDuration && this.deviceUpdateRate > device.scanDuration) {
98
- this.warnLog('scanDuration is less than updateRate, overriding scanDuration with updateRate');
99
- }
100
- }
101
- }
102
- async retryBLE({ max, fn }) {
103
- return fn().catch(async (e) => {
104
- if (max === 0) {
105
- throw e;
106
- }
107
- this.warnLog(e);
108
- this.infoLog('Retrying');
109
- await sleep(1000);
110
- return this.retryBLE({ max: max - 1, fn });
111
- });
112
- }
113
- maxRetryBLE() {
114
- return this.device.maxRetry !== undefined ? this.device.maxRetry : 5;
115
- }
116
- async getDeviceConfigSettings(device) {
117
- const deviceConfig = Object.assign({}, device.logging !== 'standard' && { logging: device.logging }, device.refreshRate !== 0 && { refreshRate: device.refreshRate }, device.updateRate !== 0 && { updateRate: device.updateRate }, device.scanDuration !== 0 && { scanDuration: device.scanDuration }, device.offline === true && { offline: device.offline }, device.maxRetry !== 0 && { maxRetry: device.maxRetry }, device.webhook === true && { webhook: device.webhook }, device.connectionType !== '' && { connectionType: device.connectionType }, device.disablePlatformBLE !== false && { disablePlatformBLE: device.disablePlatformBLE }, device.external === true && { external: device.external }, device.mqttURL !== '' && { mqttURL: device.mqttURL }, device.mqttOptions && { mqttOptions: device.mqttOptions }, device.mqttPubOptions && { mqttPubOptions: device.mqttPubOptions }, device.maxRetries !== 0 && { maxRetries: device.maxRetries }, device.delayBetweenRetries !== 0 && { delayBetweenRetries: device.delayBetweenRetries });
118
- let deviceSpecificConfig = {};
119
- switch (device.configDeviceType) {
120
- case 'Bot':
121
- deviceSpecificConfig = device;
122
- break;
123
- case 'Relay Switch 1':
124
- deviceSpecificConfig = device;
125
- break;
126
- case 'Relay Switch 1PM':
127
- deviceSpecificConfig = device;
128
- break;
129
- case 'Meter':
130
- case 'MeterPlus':
131
- deviceSpecificConfig = device;
132
- break;
133
- case 'WoIOSensor':
134
- deviceSpecificConfig = device;
135
- break;
136
- case 'Humidifier':
137
- case 'Humidifier2':
138
- deviceSpecificConfig = device;
139
- break;
140
- case 'Curtain':
141
- case 'Curtain3':
142
- deviceSpecificConfig = device;
143
- break;
144
- case 'Blind Tilt':
145
- deviceSpecificConfig = device;
146
- break;
147
- case 'Contact Sensor':
148
- deviceSpecificConfig = device;
149
- break;
150
- case 'Motion Sensor':
151
- deviceSpecificConfig = device;
152
- break;
153
- case 'Water Detector':
154
- deviceSpecificConfig = device;
155
- break;
156
- case 'Plug':
157
- case 'Plug Mini (US)':
158
- case 'Plug Mini (JP)':
159
- deviceSpecificConfig = device;
160
- break;
161
- case 'Color Bulb':
162
- deviceSpecificConfig = device;
163
- break;
164
- case 'Strip Light':
165
- deviceSpecificConfig = device;
166
- break;
167
- case 'Ceiling Light':
168
- case 'Ceiling Light Pro':
169
- deviceSpecificConfig = device;
170
- break;
171
- case 'Smart Lock':
172
- case 'Smart Lock Pro':
173
- deviceSpecificConfig = device;
174
- break;
175
- case 'Hub 2':
176
- deviceSpecificConfig = device;
177
- break;
178
- default:
179
- }
180
- const config = Object.assign({}, deviceConfig, deviceSpecificConfig);
181
- if (Object.keys(config).length !== 0) {
182
- this.debugSuccessLog(`Config: ${JSON.stringify(config)}`);
183
- }
184
- }
185
- /**
186
- * Get the current ambient light level based on the light level, set_minLux, set_maxLux, and spaceBetweenLevels.
187
- * @param lightLevel number
188
- * @param set_minLux number
189
- * @param set_maxLux number
190
- * @param spaceBetweenLevels number
191
- * @returns CurrentAmbientLightLevel
192
- */
193
- getLightLevel(lightLevel, set_minLux, set_maxLux, spaceBetweenLevels) {
194
- const numberOfLevels = spaceBetweenLevels + 1;
195
- this.debugLog(`LightLevel: ${lightLevel}, set_minLux: ${set_minLux}, set_maxLux: ${set_maxLux}, spaceBetweenLevels: ${spaceBetweenLevels}, numberOfLevels: ${numberOfLevels}`);
196
- const CurrentAmbientLightLevel = lightLevel === 1
197
- ? set_minLux
198
- : lightLevel === numberOfLevels
199
- ? set_maxLux
200
- : ((set_maxLux - set_minLux) / spaceBetweenLevels) * (Number(lightLevel) - 1);
201
- this.debugLog(`CurrentAmbientLightLevel: ${CurrentAmbientLightLevel}, LightLevel: ${lightLevel}, set_minLux: ${set_minLux}, set_maxLux: ${set_maxLux}`);
202
- return CurrentAmbientLightLevel;
203
- }
204
- /*
205
- * Publish MQTT message for topics of
206
- * 'homebridge-switchbot/${this.device.deviceType}/xx:xx:xx:xx:xx:xx'
207
- */
208
- async mqttPublish(message, topic) {
209
- const mac = this.device.deviceId?.toLowerCase().match(/[\s\S]{1,2}/g)?.join(':');
210
- const options = this.deviceMqttPubOptions ?? {};
211
- const mqttTopic = topic ? `/${topic}` : '';
212
- const mqttMessageTopic = topic ? `${topic}/` : '';
213
- this.mqttClient?.publish(`homebridge-switchbot/${this.device.deviceType}/${mac}${mqttTopic}`, `${message}`, options);
214
- this.debugLog(`MQTT message: ${mqttMessageTopic}${message} options:${JSON.stringify(options)}`);
215
- }
216
- /*
217
- * MQTT Settings
218
- */
219
- async getMqttSettings(device) {
220
- // mqttURL
221
- this.deviceMqttURL = device.mqttURL ?? this.config.options?.mqttURL ?? '';
222
- const mqttURL = device.mqttURL ? 'Device Config' : this.config.options?.mqttURL ? 'Platform Config' : 'Default';
223
- // mqttOptions
224
- this.deviceMqttOptions = device.mqttOptions ?? this.config.options?.mqttOptions ?? {};
225
- const mqttOptions = device.mqttOptions ? 'Device Config' : this.config.options?.mqttOptions ? 'Platform Config' : 'Default';
226
- // mqttPubOptions
227
- this.deviceMqttPubOptions = device.mqttPubOptions ?? this.config.options?.mqttPubOptions ?? {};
228
- const mqttPubOptions = device.mqttPubOptions ? 'Device Config' : this.config.options?.mqttPubOptions ? 'Platform Config' : 'Default';
229
- this.debugLog(`Using ${mqttURL} MQTT URL: ${this.deviceMqttURL}, ${mqttOptions} mqttOptions: ${JSON.stringify(this.deviceMqttOptions)}, ${mqttPubOptions} mqttPubOptions: ${JSON.stringify(this.deviceMqttPubOptions)}`);
230
- }
231
- /*
232
- * Setup EVE history graph feature if enabled.
233
- */
234
- async setupHistoryService(accessory, device) {
235
- try {
236
- const formattedDeviceId = formatDeviceIdAsMac(this.device.deviceId);
237
- this.device.bleMac = formattedDeviceId;
238
- this.debugLog(`bleMac: ${this.device.bleMac}`);
239
- this.historyService = device.history
240
- ? new this.platform.fakegatoAPI('room', accessory, {
241
- log: this.platform.log,
242
- storage: 'fs',
243
- filename: `${hostname().split('.')[0]}_${this.device.bleMac}_persist.json`,
244
- })
245
- : null;
246
- }
247
- catch (error) {
248
- this.errorLog(`failed to format device ID as MAC, Error: ${error}`);
249
- }
250
- }
251
- async switchbotBLE() {
252
- const switchBotBLE = await this.platform.connectBLE(this.accessory, this.device);
253
- // Convert to BLE Address
254
- try {
255
- const formattedDeviceId = formatDeviceIdAsMac(this.device.deviceId);
256
- this.device.bleMac = formattedDeviceId;
257
- await this.getCustomBLEAddress(switchBotBLE);
258
- this.debugLog(`bleMac: ${this.device.bleMac}`);
259
- return switchBotBLE;
260
- }
261
- catch (error) {
262
- this.errorLog(`failed to format device ID as MAC, Error: ${error}`);
263
- }
264
- }
265
- async monitorAdvertisementPackets(switchbot) {
266
- this.debugLog(`Scanning for deviceID: ${this.device.bleMac} Model: ${this.device.bleModel} ModelName: ${this.device.bleModelName}...`);
267
- try {
268
- await switchbot.startScan({ model: this.device.bleModel, id: this.device.bleMac });
269
- }
270
- catch (e) {
271
- this.errorLog(`Failed to start BLE scanning. Error: ${e.message ?? e}`);
272
- }
273
- // Set an event handler
274
- let serviceData = { model: this.device.bleModel, modelName: this.device.bleModelName };
275
- switchbot.onadvertisement = (ad) => {
276
- if (ad.address === this.device.bleMac && ad.serviceData.model === this.device.bleModel) {
277
- this.debugLog(`ad: ${safeStringify(ad)}`);
278
- this.debugLog(`${JSON.stringify(ad, null, ' ')}`);
279
- this.debugLog(`address: ${ad.address}, model: ${ad.serviceData.model}`);
280
- this.debugLog(`serviceData: ${JSON.stringify(ad.serviceData)}`);
281
- serviceData = ad.serviceData;
282
- }
283
- };
284
- // Wait
285
- await switchbot.wait(this.scanDuration * 1000);
286
- // Stop to monitor
287
- try {
288
- await switchbot.stopScan();
289
- }
290
- catch (e) {
291
- this.errorLog(`Failed to stop BLE scanning. Error: ${e.message ?? e}`);
292
- }
293
- return serviceData;
294
- }
295
- async getCustomBLEAddress(switchbot) {
296
- if (this.device.customBLEaddress && this.deviceLogging.includes('debug')) {
297
- this.debugLog(`customBLEaddress: ${this.device.customBLEaddress}`);
298
- (async () => {
299
- // Start to monitor advertisement packets
300
- try {
301
- await switchbot.startScan({ model: this.device.bleModel });
302
- }
303
- catch (e) {
304
- this.errorLog(`Failed to start BLE scanning. Error: ${e.message ?? e}`);
305
- }
306
- // Set an event handler
307
- switchbot.onadvertisement = (ad) => {
308
- this.warnLog(`ad: ${JSON.stringify(ad, null, ' ')}`);
309
- };
310
- await sleep(10000);
311
- // Stop to monitor
312
- try {
313
- switchbot.stopScan();
314
- }
315
- catch (e) {
316
- this.errorLog(`Failed to stop BLE scanning. Error: ${e.message ?? e}`);
317
- }
318
- })();
319
- }
320
- }
321
- async pushChangeRequest(bodyChange) {
322
- const { response, statusCode } = await this.platform.retryCommand(this.device, bodyChange, this.deviceMaxRetries, this.deviceDelayBetweenRetries);
323
- return { body: response, statusCode };
324
- }
325
- async deviceRefreshStatus() {
326
- const { response, statusCode } = await this.platform.retryRequest(this.device, this.deviceMaxRetries, this.deviceDelayBetweenRetries);
327
- return { body: response, statusCode };
328
- }
329
- async successfulStatusCodes(deviceStatus) {
330
- return (deviceStatus.statusCode === 200 || deviceStatus.statusCode === 100);
331
- }
332
- /**
333
- * Update the characteristic value and log the change.
334
- *
335
- * @param Service Service
336
- * @param Characteristic Characteristic
337
- * @param CharacteristicValue CharacteristicValue | undefined
338
- * @param CharacteristicName string
339
- * @param history object
340
- * @return: void
341
- *
342
- */
343
- async updateCharacteristic(Service, Characteristic, CharacteristicValue, CharacteristicName, history) {
344
- if (CharacteristicValue === undefined || CharacteristicValue === null) {
345
- this.debugLog(`${CharacteristicName}: ${CharacteristicValue}`);
346
- }
347
- else {
348
- await this.mqtt(CharacteristicName, CharacteristicValue);
349
- if (this.device.history) {
350
- this.historyService?.addEntry(history);
351
- }
352
- Service.updateCharacteristic(Characteristic, CharacteristicValue);
353
- this.debugLog(`updateCharacteristic ${CharacteristicName}: ${CharacteristicValue}`);
354
- this.debugWarnLog(`${CharacteristicName} context before: ${this.accessory.context[CharacteristicName]}`);
355
- this.accessory.context[CharacteristicName] = CharacteristicValue;
356
- this.debugWarnLog(`${CharacteristicName} context after: ${this.accessory.context[CharacteristicName]}`);
357
- }
358
- }
359
- async mqtt(CharacteristicName, CharacteristicValue) {
360
- if (this.device.mqttURL) {
361
- this.mqttPublish(CharacteristicName, CharacteristicValue.toString());
362
- }
363
- }
364
- async getDeviceContext(accessory, device) {
365
- const deviceMapping = {
366
- 'Humidifier': {
367
- model: SwitchBotModel.Humidifier,
368
- bleModel: SwitchBotBLEModel.Humidifier,
369
- bleModelName: SwitchBotBLEModelName.Humidifier,
370
- bleModelFriendlyName: SwitchBotBLEModelFriendlyName.Humidifier,
371
- },
372
- 'Humidifier2': {
373
- model: SwitchBotModel.Humidifier2,
374
- bleModel: SwitchBotBLEModel.Humidifier2,
375
- bleModelName: SwitchBotBLEModelName.Humidifier2,
376
- bleModelFriendlyName: SwitchBotBLEModelFriendlyName.Humidifier2,
377
- },
378
- 'Hub Mini': {
379
- model: SwitchBotModel.HubMini,
380
- bleModel: SwitchBotBLEModel.Unknown,
381
- bleModelName: SwitchBotBLEModelName.Unknown,
382
- bleModelFriendlyName: SwitchBotBLEModelFriendlyName.Unknown,
383
- },
384
- 'Hub Plus': {
385
- model: SwitchBotModel.HubPlus,
386
- bleModel: SwitchBotBLEModel.Unknown,
387
- bleModelName: SwitchBotBLEModelName.Unknown,
388
- bleModelFriendlyName: SwitchBotBLEModelFriendlyName.Unknown,
389
- },
390
- 'Hub 2': {
391
- model: SwitchBotModel.Hub2,
392
- bleModel: SwitchBotBLEModel.Hub2,
393
- bleModelName: SwitchBotBLEModelName.Hub2,
394
- bleModelFriendlyName: SwitchBotBLEModelFriendlyName.Hub2,
395
- },
396
- 'Hub 3': {
397
- model: SwitchBotModel.Hub3,
398
- bleModel: SwitchBotBLEModel.Hub3,
399
- bleModelName: SwitchBotBLEModelName.Hub3,
400
- bleModelFriendlyName: SwitchBotBLEModelFriendlyName.Hub3,
401
- },
402
- 'Bot': {
403
- model: SwitchBotModel.Bot,
404
- bleModel: SwitchBotBLEModel.Bot,
405
- bleModelName: SwitchBotBLEModelName.Bot,
406
- bleModelFriendlyName: SwitchBotBLEModelFriendlyName.Bot,
407
- },
408
- 'Relay Switch 1': {
409
- model: SwitchBotModel.RelaySwitch1,
410
- bleModel: SwitchBotBLEModel.RelaySwitch1,
411
- bleModelName: SwitchBotBLEModelName.RelaySwitch1,
412
- bleModelFriendlyName: SwitchBotBLEModelFriendlyName.RelaySwitch1,
413
- },
414
- 'Relay Switch 1PM': {
415
- model: SwitchBotModel.RelaySwitch1PM,
416
- bleModel: SwitchBotBLEModel.RelaySwitch1PM,
417
- bleModelName: SwitchBotBLEModelName.RelaySwitch1PM,
418
- bleModelFriendlyName: SwitchBotBLEModelFriendlyName.RelaySwitch1PM,
419
- },
420
- 'Meter': {
421
- model: SwitchBotModel.Meter,
422
- bleModel: SwitchBotBLEModel.Meter,
423
- bleModelName: SwitchBotBLEModelName.Meter,
424
- bleModelFriendlyName: SwitchBotBLEModelFriendlyName.Meter,
425
- },
426
- 'MeterPlus': {
427
- model: SwitchBotModel.MeterPlusUS,
428
- bleModel: SwitchBotBLEModel.MeterPlus,
429
- bleModelName: SwitchBotBLEModelName.MeterPlus,
430
- bleModelFriendlyName: SwitchBotBLEModelFriendlyName.MeterPlus,
431
- },
432
- 'Meter Plus (JP)': {
433
- model: SwitchBotModel.MeterPlusJP,
434
- bleModel: SwitchBotBLEModel.MeterPlus,
435
- bleModelName: SwitchBotBLEModelName.MeterPlus,
436
- bleModelFriendlyName: SwitchBotBLEModelFriendlyName.MeterPlus,
437
- },
438
- 'MeterPro': {
439
- model: SwitchBotModel.MeterPro,
440
- bleModel: SwitchBotBLEModel.MeterPro,
441
- bleModelName: SwitchBotBLEModelName.MeterPro,
442
- bleModelFriendlyName: SwitchBotBLEModelFriendlyName.MeterPro,
443
- },
444
- 'MeterPro(CO2)': {
445
- model: SwitchBotModel.MeterProCO2,
446
- bleModel: SwitchBotBLEModel.MeterProCO2,
447
- bleModelName: SwitchBotBLEModelName.MeterProCO2,
448
- bleModelFriendlyName: SwitchBotBLEModelFriendlyName.MeterProCO2,
449
- },
450
- 'WoIOSensor': {
451
- model: SwitchBotModel.OutdoorMeter,
452
- bleModel: SwitchBotBLEModel.OutdoorMeter,
453
- bleModelName: SwitchBotBLEModelName.OutdoorMeter,
454
- bleModelFriendlyName: SwitchBotBLEModelFriendlyName.OutdoorMeter,
455
- },
456
- 'Water Detector': {
457
- model: SwitchBotModel.WaterDetector,
458
- bleModel: SwitchBotBLEModel.Leak,
459
- bleModelName: SwitchBotBLEModelName.Leak,
460
- bleModelFriendlyName: SwitchBotBLEModelFriendlyName.Leak,
461
- },
462
- 'Motion Sensor': {
463
- model: SwitchBotModel.MotionSensor,
464
- bleModel: SwitchBotBLEModel.MotionSensor,
465
- bleModelName: SwitchBotBLEModelName.MotionSensor,
466
- bleModelFriendlyName: SwitchBotBLEModelFriendlyName.MotionSensor,
467
- },
468
- 'Contact Sensor': {
469
- model: SwitchBotModel.ContactSensor,
470
- bleModel: SwitchBotBLEModel.ContactSensor,
471
- bleModelName: SwitchBotBLEModelName.ContactSensor,
472
- bleModelFriendlyName: SwitchBotBLEModelFriendlyName.ContactSensor,
473
- },
474
- 'Curtain': {
475
- model: SwitchBotModel.Curtain,
476
- bleModel: SwitchBotBLEModel.Curtain,
477
- bleModelName: SwitchBotBLEModelName.Curtain,
478
- bleModelFriendlyName: SwitchBotBLEModelFriendlyName.Curtain,
479
- },
480
- 'Curtain3': {
481
- model: SwitchBotModel.Curtain3,
482
- bleModel: SwitchBotBLEModel.Curtain3,
483
- bleModelName: SwitchBotBLEModelName.Curtain3,
484
- bleModelFriendlyName: SwitchBotBLEModelFriendlyName.Curtain3,
485
- },
486
- 'WoRollerShade': {
487
- model: SwitchBotModel.Curtain3,
488
- bleModel: SwitchBotBLEModel.Curtain3,
489
- bleModelName: SwitchBotBLEModelName.Curtain3,
490
- bleModelFriendlyName: SwitchBotBLEModelFriendlyName.Curtain3,
491
- },
492
- 'Roller Shade': {
493
- model: SwitchBotModel.Curtain3,
494
- bleModel: SwitchBotBLEModel.Curtain3,
495
- bleModelName: SwitchBotBLEModelName.Curtain3,
496
- bleModelFriendlyName: SwitchBotBLEModelFriendlyName.Curtain3,
497
- },
498
- 'Blind Tilt': {
499
- model: SwitchBotModel.BlindTilt,
500
- bleModel: SwitchBotBLEModel.BlindTilt,
501
- bleModelName: SwitchBotBLEModelName.BlindTilt,
502
- bleModelFriendlyName: SwitchBotBLEModelFriendlyName.BlindTilt,
503
- },
504
- 'Plug': {
505
- model: SwitchBotModel.Plug,
506
- bleModel: SwitchBotBLEModel.PlugMiniUS,
507
- bleModelName: SwitchBotBLEModelName.PlugMini,
508
- bleModelFriendlyName: SwitchBotBLEModelFriendlyName.PlugMini,
509
- },
510
- 'Plug Mini (US)': {
511
- model: SwitchBotModel.PlugMiniUS,
512
- bleModel: SwitchBotBLEModel.PlugMiniUS,
513
- bleModelName: SwitchBotBLEModelName.PlugMini,
514
- bleModelFriendlyName: SwitchBotBLEModelFriendlyName.PlugMini,
515
- },
516
- 'Plug Mini (JP)': {
517
- model: SwitchBotModel.PlugMiniJP,
518
- bleModel: SwitchBotBLEModel.PlugMiniJP,
519
- bleModelName: SwitchBotBLEModelName.PlugMini,
520
- bleModelFriendlyName: SwitchBotBLEModelFriendlyName.PlugMini,
521
- },
522
- 'Smart Lock': {
523
- model: SwitchBotModel.Lock,
524
- bleModel: SwitchBotBLEModel.Lock,
525
- bleModelName: SwitchBotBLEModelName.Lock,
526
- bleModelFriendlyName: SwitchBotBLEModelFriendlyName.Lock,
527
- },
528
- 'Smart Lock Pro': {
529
- model: SwitchBotModel.LockPro,
530
- bleModel: SwitchBotBLEModel.LockPro,
531
- bleModelName: SwitchBotBLEModelName.LockPro,
532
- bleModelFriendlyName: SwitchBotBLEModelFriendlyName.LockPro,
533
- },
534
- 'Color Bulb': {
535
- model: SwitchBotModel.ColorBulb,
536
- bleModel: SwitchBotBLEModel.ColorBulb,
537
- bleModelName: SwitchBotBLEModelName.ColorBulb,
538
- bleModelFriendlyName: SwitchBotBLEModelFriendlyName.ColorBulb,
539
- },
540
- 'K10+': {
541
- model: SwitchBotModel.K10,
542
- bleModel: SwitchBotBLEModel.Unknown,
543
- bleModelName: SwitchBotBLEModelName.Unknown,
544
- bleModelFriendlyName: SwitchBotBLEModelFriendlyName.Unknown,
545
- },
546
- 'K10+ Pro': {
547
- model: SwitchBotModel.K10Pro,
548
- bleModel: SwitchBotBLEModel.Unknown,
549
- bleModelName: SwitchBotBLEModelName.Unknown,
550
- bleModelFriendlyName: SwitchBotBLEModelFriendlyName.Unknown,
551
- },
552
- 'WoSweeper': {
553
- model: SwitchBotModel.WoSweeper,
554
- bleModel: SwitchBotBLEModel.Unknown,
555
- bleModelName: SwitchBotBLEModelName.Unknown,
556
- bleModelFriendlyName: SwitchBotBLEModelFriendlyName.Unknown,
557
- },
558
- 'WoSweeperMini': {
559
- model: SwitchBotModel.WoSweeperMini,
560
- bleModel: SwitchBotBLEModel.Unknown,
561
- bleModelName: SwitchBotBLEModelName.Unknown,
562
- bleModelFriendlyName: SwitchBotBLEModelFriendlyName.Unknown,
563
- },
564
- 'Robot Vacuum Cleaner S1': {
565
- model: SwitchBotModel.RobotVacuumCleanerS1,
566
- bleModel: SwitchBotBLEModel.Unknown,
567
- bleModelName: SwitchBotBLEModelName.Unknown,
568
- bleModelFriendlyName: SwitchBotBLEModelFriendlyName.Unknown,
569
- },
570
- 'Robot Vacuum Cleaner S1 Plus': {
571
- model: SwitchBotModel.RobotVacuumCleanerS1Plus,
572
- bleModel: SwitchBotBLEModel.Unknown,
573
- bleModelName: SwitchBotBLEModelName.Unknown,
574
- bleModelFriendlyName: SwitchBotBLEModelFriendlyName.Unknown,
575
- },
576
- 'Robot Vacuum Cleaner S10': {
577
- model: SwitchBotModel.RobotVacuumCleanerS10,
578
- bleModel: SwitchBotBLEModel.Unknown,
579
- bleModelName: SwitchBotBLEModelName.Unknown,
580
- bleModelFriendlyName: SwitchBotBLEModelFriendlyName.Unknown,
581
- },
582
- 'Ceiling Light': {
583
- model: SwitchBotModel.CeilingLight,
584
- bleModel: SwitchBotBLEModel.CeilingLight,
585
- bleModelName: SwitchBotBLEModelName.CeilingLight,
586
- bleModelFriendlyName: SwitchBotBLEModelFriendlyName.CeilingLight,
587
- },
588
- 'Ceiling Light Pro': {
589
- model: SwitchBotModel.CeilingLightPro,
590
- bleModel: SwitchBotBLEModel.CeilingLightPro,
591
- bleModelName: SwitchBotBLEModelName.CeilingLightPro,
592
- bleModelFriendlyName: SwitchBotBLEModelFriendlyName.CeilingLightPro,
593
- },
594
- 'Strip Light': {
595
- model: SwitchBotModel.StripLight,
596
- bleModel: SwitchBotBLEModel.StripLight,
597
- bleModelName: SwitchBotBLEModelName.StripLight,
598
- bleModelFriendlyName: SwitchBotBLEModelFriendlyName.StripLight,
599
- },
600
- 'Indoor Cam': {
601
- model: SwitchBotModel.IndoorCam,
602
- bleModel: SwitchBotBLEModel.Unknown,
603
- bleModelName: SwitchBotBLEModelName.Unknown,
604
- bleModelFriendlyName: SwitchBotBLEModelFriendlyName.Unknown,
605
- },
606
- 'Remote': {
607
- model: SwitchBotModel.Remote,
608
- bleModel: SwitchBotBLEModel.Unknown,
609
- bleModelName: SwitchBotBLEModelName.Unknown,
610
- bleModelFriendlyName: SwitchBotBLEModelFriendlyName.Unknown,
611
- },
612
- 'remote with screen+': {
613
- model: SwitchBotModel.UniversalRemote,
614
- bleModel: SwitchBotBLEModel.Unknown,
615
- bleModelName: SwitchBotBLEModelName.Unknown,
616
- bleModelFriendlyName: SwitchBotBLEModelFriendlyName.Unknown,
617
- },
618
- 'Battery Circulator Fan': {
619
- model: SwitchBotModel.BatteryCirculatorFan,
620
- bleModel: SwitchBotBLEModel.Unknown,
621
- bleModelName: SwitchBotBLEModelName.Unknown,
622
- bleModelFriendlyName: SwitchBotBLEModelFriendlyName.Unknown,
623
- },
624
- };
625
- const defaultDevice = {
626
- model: SwitchBotModel.Unknown,
627
- bleModel: SwitchBotBLEModel.Unknown,
628
- bleModelName: SwitchBotBLEModelName.Unknown,
629
- bleModelFriendlyName: SwitchBotBLEModelFriendlyName.Unknown,
630
- };
631
- const deviceConfig = deviceMapping[device.deviceType] || defaultDevice;
632
- device.model = deviceConfig.model;
633
- device.bleModel = deviceConfig.bleModel;
634
- device.bleModelName = deviceConfig.bleModelName;
635
- device.bleModelFriednlyName = deviceConfig.bleModelFriednlyName;
636
- this.debugLog(`Model: ${device.model}, BLE Model: ${device.bleModel}, BLE Model Name: ${device.bleModelName}, BLE Model Friendly Name: ${device.bleModelFriednlyName}`);
637
- const deviceFirmwareVersion = device.firmware ?? device.version ?? accessory.context.version ?? this.platform.version ?? '0.0.0';
638
- const version = deviceFirmwareVersion.toString();
639
- this.debugLog(`Firmware Version: ${version.replace(/^V|-.*$/g, '')}`);
640
- let deviceVersion;
641
- if (version?.includes('.') === false) {
642
- const replace = version?.replace(/^V|-.*$/g, '');
643
- const match = replace?.match(/./g);
644
- const validVersion = match?.join('.');
645
- deviceVersion = validVersion ?? '0.0.0';
646
- }
647
- else {
648
- deviceVersion = version.replace(/^V|-.*$/g, '') ?? '0.0.0';
649
- }
650
- accessory
651
- .getService(this.hap.Service.AccessoryInformation)
652
- .setCharacteristic(this.hap.Characteristic.HardwareRevision, deviceVersion)
653
- .setCharacteristic(this.hap.Characteristic.SoftwareRevision, deviceVersion)
654
- .setCharacteristic(this.hap.Characteristic.FirmwareRevision, deviceVersion)
655
- .getCharacteristic(this.hap.Characteristic.FirmwareRevision)
656
- .updateValue(deviceVersion);
657
- accessory.context.version = deviceVersion;
658
- this.debugSuccessLog(`version: ${accessory.context.version}`);
659
- }
660
- async statusCode(statusCode) {
661
- const statusMessages = {
662
- 151: 'Command not supported by this deviceType',
663
- 152: 'Device not found',
664
- 160: 'Command is not supported',
665
- 161: 'Device is offline',
666
- 171: `Hub Device is offline. Hub: ${this.device.hubDeviceId}`,
667
- 190: 'Device internal error due to device states not synchronized with server, or command format is invalid',
668
- 100: 'Command successfully sent',
669
- 200: 'Request successful',
670
- 400: 'Bad Request, an invalid payload request',
671
- 401: 'Unauthorized, Authorization for the API is required, but the request has not been authenticated',
672
- 403: 'Forbidden, The request has been authenticated but does not have appropriate permissions, or a requested resource is not found',
673
- 404: 'Not Found, Specifies the requested path does not exist',
674
- 406: 'Not Acceptable, a MIME type has been requested via the Accept header for a value not supported by the server',
675
- 415: 'Unsupported Media Type, a contentType header has been defined that is not supported by the server',
676
- 422: 'Unprocessable Entity: The server cannot process the request, often due to exceeded API limits.',
677
- 429: 'Too Many Requests, exceeded the number of requests allowed for a given time window',
678
- 500: 'Internal Server Error, An unexpected error occurred. These errors should be rare',
679
- };
680
- if (statusCode === 171 && (this.device.hubDeviceId === this.device.deviceId || this.device.hubDeviceId === '000000000000')) {
681
- this.debugErrorLog(`statusCode 171 changed to 161: hubDeviceId ${this.device.hubDeviceId} matches deviceId ${this.device.deviceId}, device is its own hub.`);
682
- statusCode = 161;
683
- }
684
- const logMessage = statusMessages[statusCode] || `Unknown statusCode: ${statusCode}, Submit Bugs Here: https://tinyurl.com/SwitchBotBug`;
685
- const logMethod = [100, 200].includes(statusCode) ? 'debugLog' : statusMessages[statusCode] ? 'errorLog' : 'infoLog';
686
- this[logMethod](`${logMessage}, statusCode: ${statusCode}`);
687
- }
688
- /**
689
- * Logging for Device
690
- */
691
- infoLog(...log) {
692
- if (this.enablingDeviceLogging()) {
693
- this.log.info(`${this.device.deviceType}: ${this.accessory.displayName}`, String(...log));
694
- }
695
- }
696
- successLog(...log) {
697
- if (this.enablingDeviceLogging()) {
698
- this.log.success(`${this.device.deviceType}: ${this.accessory.displayName}`, String(...log));
699
- }
700
- }
701
- debugSuccessLog(...log) {
702
- if (this.enablingDeviceLogging()) {
703
- if (this.loggingIsDebug()) {
704
- this.log.success(`[DEBUG] ${this.device.deviceType}: ${this.accessory.displayName}`, String(...log));
705
- }
706
- }
707
- }
708
- warnLog(...log) {
709
- if (this.enablingDeviceLogging()) {
710
- this.log.warn(`${this.device.deviceType}: ${this.accessory.displayName}`, String(...log));
711
- }
712
- }
713
- debugWarnLog(...log) {
714
- if (this.enablingDeviceLogging()) {
715
- if (this.loggingIsDebug()) {
716
- this.log.warn(`[DEBUG] ${this.device.deviceType}: ${this.accessory.displayName}`, String(...log));
717
- }
718
- }
719
- }
720
- errorLog(...log) {
721
- if (this.enablingDeviceLogging()) {
722
- this.log.error(`${this.device.deviceType}: ${this.accessory.displayName}`, String(...log));
723
- }
724
- }
725
- debugErrorLog(...log) {
726
- if (this.enablingDeviceLogging()) {
727
- if (this.loggingIsDebug()) {
728
- this.log.error(`[DEBUG] ${this.device.deviceType}: ${this.accessory.displayName}`, String(...log));
729
- }
730
- }
731
- }
732
- debugLog(...log) {
733
- if (this.enablingDeviceLogging()) {
734
- if (this.deviceLogging === 'debug') {
735
- this.log.info(`[DEBUG] ${this.device.deviceType}: ${this.accessory.displayName}`, String(...log));
736
- }
737
- else if (this.deviceLogging === 'debugMode') {
738
- this.log.debug(`${this.device.deviceType}: ${this.accessory.displayName}`, String(...log));
739
- }
740
- }
741
- }
742
- loggingIsDebug() {
743
- return this.deviceLogging === 'debugMode' || this.deviceLogging === 'debug';
744
- }
745
- enablingDeviceLogging() {
746
- return this.deviceLogging === 'debugMode' || this.deviceLogging === 'debug' || this.deviceLogging === 'standard';
747
- }
748
- }
749
- //# sourceMappingURL=device.js.map