@switchbot/homebridge-switchbot 5.0.0-beta.1 → 5.0.0-beta.100

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 (448) hide show
  1. package/.github/ISSUE_TEMPLATE/e2e-verification.md +36 -0
  2. package/.github/workflows/ci.yml +32 -0
  3. package/.github/workflows/manual-e2e.yml +115 -0
  4. package/.github/workflows/release.yml +0 -4
  5. package/CHANGELOG.md +35 -0
  6. package/E2E-VERIFICATION.md +121 -0
  7. package/MIGRATION.md +44 -0
  8. package/README.md +56 -3
  9. package/config.schema.json +91 -14787
  10. package/dist/deviceFactory.d.ts +13 -0
  11. package/dist/deviceFactory.d.ts.map +1 -0
  12. package/dist/deviceFactory.js +81 -0
  13. package/dist/deviceFactory.js.map +1 -0
  14. package/dist/devices/deviceBase.d.ts +50 -0
  15. package/dist/devices/deviceBase.d.ts.map +1 -0
  16. package/dist/devices/deviceBase.js +119 -0
  17. package/dist/devices/deviceBase.js.map +1 -0
  18. package/dist/devices/genericDevice.d.ts +298 -0
  19. package/dist/devices/genericDevice.d.ts.map +1 -0
  20. package/dist/devices/genericDevice.js +1065 -0
  21. package/dist/devices/genericDevice.js.map +1 -0
  22. package/dist/homebridge-ui/public/index.html +636 -246
  23. package/dist/homebridge-ui/server.d.ts +3 -1
  24. package/dist/homebridge-ui/server.d.ts.map +1 -1
  25. package/dist/homebridge-ui/server.js +467 -36
  26. package/dist/homebridge-ui/server.js.map +1 -1
  27. package/dist/index.d.ts.map +1 -1
  28. package/dist/index.js +4 -7
  29. package/dist/index.js.map +1 -1
  30. package/dist/platform.d.ts +35 -0
  31. package/dist/platform.d.ts.map +1 -0
  32. package/dist/platform.js +1562 -0
  33. package/dist/platform.js.map +1 -0
  34. package/dist/settings.d.ts +10 -249
  35. package/dist/settings.d.ts.map +1 -1
  36. package/dist/settings.js +5 -30
  37. package/dist/settings.js.map +1 -1
  38. package/dist/switchbotClient.d.ts +32 -0
  39. package/dist/switchbotClient.d.ts.map +1 -0
  40. package/dist/switchbotClient.js +194 -0
  41. package/dist/switchbotClient.js.map +1 -0
  42. package/dist/utils.d.ts +39 -50
  43. package/dist/utils.d.ts.map +1 -1
  44. package/dist/utils.js +39 -688
  45. package/dist/utils.js.map +1 -1
  46. package/docs/assets/highlight.css +14 -0
  47. package/docs/assets/icons.js +1 -1
  48. package/docs/assets/icons.svg +1 -1
  49. package/docs/assets/main.js +2 -2
  50. package/docs/assets/style.css +3 -3
  51. package/docs/index.html +77 -13
  52. package/docs/variables/default.html +1 -1
  53. package/eslint.config.js +2 -8
  54. package/package.json +21 -28
  55. package/scripts/e2e/README.md +25 -0
  56. package/scripts/e2e/curtain-e2e.sh +70 -0
  57. package/scripts/e2e/fan-e2e.sh +75 -0
  58. package/scripts/e2e/light-advanced-e2e.sh +97 -0
  59. package/scripts/e2e/light-e2e.sh +75 -0
  60. package/scripts/e2e/list-accessories.sh +19 -0
  61. package/scripts/e2e/lock-e2e.sh +65 -0
  62. package/scripts/generate-matter-maps.js +60 -0
  63. package/scripts/run-e2e-local.sh +14 -0
  64. package/src/deviceFactory.ts +122 -0
  65. package/src/devices/deviceBase.ts +141 -0
  66. package/src/devices/genericDevice.ts +995 -0
  67. package/src/homebridge-ui/public/index.html +636 -246
  68. package/src/homebridge-ui/server.ts +552 -41
  69. package/src/index.ts +4 -7
  70. package/src/platform.ts +1561 -0
  71. package/src/settings.ts +12 -277
  72. package/src/switchbotClient.ts +203 -0
  73. package/src/utils.ts +45 -713
  74. package/test/accessory-restore.spec.ts +73 -0
  75. package/test/device-mapping.spec.ts +37 -0
  76. package/test/deviceFactory.spec.ts +18 -0
  77. package/test/e2e/run-e2e.spec.ts +50 -0
  78. package/test/fan-swing.spec.ts +29 -0
  79. package/test/helpers/matter-harness.ts +53 -0
  80. package/test/lock-users.spec.ts +44 -0
  81. package/test/matter-childbridge.spec.ts +55 -0
  82. package/test/matter-descriptors.spec.ts +97 -0
  83. package/test/matter-device-state.spec.ts +101 -0
  84. package/test/matter-integration.spec.ts +70 -0
  85. package/test/platform.integration.spec.ts +55 -0
  86. package/test/switchbot-client-debounce.spec.ts +131 -0
  87. package/test/switchbot-client-openapi.spec.ts +56 -0
  88. package/test/switchbotClient.spec.ts +10 -0
  89. package/test/utils.spec.ts +20 -0
  90. package/vitest.config.ts +7 -0
  91. package/coverage/base.css +0 -224
  92. package/coverage/block-navigation.js +0 -87
  93. package/coverage/clover.xml +0 -15847
  94. package/coverage/coverage-final.json +0 -42
  95. package/coverage/docs/assets/dmt/dmt-component-data.js.html +0 -85
  96. package/coverage/docs/assets/dmt/dmt-components.js.html +0 -286
  97. package/coverage/docs/assets/dmt/index.html +0 -131
  98. package/coverage/docs/assets/hierarchy.js.html +0 -85
  99. package/coverage/docs/assets/icons.js.html +0 -136
  100. package/coverage/docs/assets/index.html +0 -146
  101. package/coverage/docs/assets/main.js.html +0 -265
  102. package/coverage/favicon.png +0 -0
  103. package/coverage/index.html +0 -191
  104. package/coverage/prettify.css +0 -1
  105. package/coverage/prettify.js +0 -2
  106. package/coverage/sort-arrow-sprite.png +0 -0
  107. package/coverage/sorter.js +0 -196
  108. package/coverage/src/device/blindtilt.ts.html +0 -3238
  109. package/coverage/src/device/bot.ts.html +0 -2803
  110. package/coverage/src/device/ceilinglight.ts.html +0 -2338
  111. package/coverage/src/device/colorbulb.ts.html +0 -2824
  112. package/coverage/src/device/contact.ts.html +0 -1465
  113. package/coverage/src/device/curtain.ts.html +0 -2869
  114. package/coverage/src/device/device.ts.html +0 -2500
  115. package/coverage/src/device/fan.ts.html +0 -2242
  116. package/coverage/src/device/hub.ts.html +0 -1408
  117. package/coverage/src/device/humidifier.ts.html +0 -2116
  118. package/coverage/src/device/index.html +0 -416
  119. package/coverage/src/device/iosensor.ts.html +0 -1375
  120. package/coverage/src/device/lightstrip.ts.html +0 -2617
  121. package/coverage/src/device/lock.ts.html +0 -1963
  122. package/coverage/src/device/meter.ts.html +0 -1372
  123. package/coverage/src/device/meterplus.ts.html +0 -1384
  124. package/coverage/src/device/meterpro.ts.html +0 -1618
  125. package/coverage/src/device/motion.ts.html +0 -1264
  126. package/coverage/src/device/plug.ts.html +0 -1372
  127. package/coverage/src/device/relayswitch.ts.html +0 -2284
  128. package/coverage/src/device/robotvacuumcleaner.ts.html +0 -1810
  129. package/coverage/src/device/waterdetector.ts.html +0 -1294
  130. package/coverage/src/homebridge-ui/index.html +0 -116
  131. package/coverage/src/homebridge-ui/server.ts.html +0 -229
  132. package/coverage/src/index.html +0 -161
  133. package/coverage/src/index.ts.html +0 -124
  134. package/coverage/src/irdevice/airconditioner.ts.html +0 -1687
  135. package/coverage/src/irdevice/airpurifier.ts.html +0 -844
  136. package/coverage/src/irdevice/camera.ts.html +0 -475
  137. package/coverage/src/irdevice/fan.ts.html +0 -766
  138. package/coverage/src/irdevice/index.html +0 -251
  139. package/coverage/src/irdevice/irdevice.ts.html +0 -1117
  140. package/coverage/src/irdevice/light.ts.html +0 -826
  141. package/coverage/src/irdevice/other.ts.html +0 -2458
  142. package/coverage/src/irdevice/tv.ts.html +0 -1222
  143. package/coverage/src/irdevice/vacuumcleaner.ts.html +0 -466
  144. package/coverage/src/irdevice/waterheater.ts.html +0 -469
  145. package/coverage/src/platform.ts.html +0 -8776
  146. package/coverage/src/settings.ts.html +0 -934
  147. package/coverage/src/utils.ts.html +0 -2092
  148. package/dist/devices-hap/airpurifier.d.ts +0 -54
  149. package/dist/devices-hap/airpurifier.d.ts.map +0 -1
  150. package/dist/devices-hap/airpurifier.js +0 -527
  151. package/dist/devices-hap/airpurifier.js.map +0 -1
  152. package/dist/devices-hap/blindtilt.d.ts +0 -90
  153. package/dist/devices-hap/blindtilt.d.ts.map +0 -1
  154. package/dist/devices-hap/blindtilt.js +0 -974
  155. package/dist/devices-hap/blindtilt.js.map +0 -1
  156. package/dist/devices-hap/bot.d.ts +0 -102
  157. package/dist/devices-hap/bot.d.ts.map +0 -1
  158. package/dist/devices-hap/bot.js +0 -811
  159. package/dist/devices-hap/bot.js.map +0 -1
  160. package/dist/devices-hap/ceilinglight.d.ts +0 -85
  161. package/dist/devices-hap/ceilinglight.d.ts.map +0 -1
  162. package/dist/devices-hap/ceilinglight.js +0 -701
  163. package/dist/devices-hap/ceilinglight.js.map +0 -1
  164. package/dist/devices-hap/colorbulb.d.ts +0 -88
  165. package/dist/devices-hap/colorbulb.d.ts.map +0 -1
  166. package/dist/devices-hap/colorbulb.js +0 -881
  167. package/dist/devices-hap/colorbulb.js.map +0 -1
  168. package/dist/devices-hap/contact.d.ts +0 -44
  169. package/dist/devices-hap/contact.d.ts.map +0 -1
  170. package/dist/devices-hap/contact.js +0 -409
  171. package/dist/devices-hap/contact.js.map +0 -1
  172. package/dist/devices-hap/curtain.d.ts +0 -73
  173. package/dist/devices-hap/curtain.d.ts.map +0 -1
  174. package/dist/devices-hap/curtain.js +0 -869
  175. package/dist/devices-hap/curtain.js.map +0 -1
  176. package/dist/devices-hap/device.d.ts +0 -98
  177. package/dist/devices-hap/device.d.ts.map +0 -1
  178. package/dist/devices-hap/device.js +0 -749
  179. package/dist/devices-hap/device.js.map +0 -1
  180. package/dist/devices-hap/fan.d.ts +0 -69
  181. package/dist/devices-hap/fan.d.ts.map +0 -1
  182. package/dist/devices-hap/fan.js +0 -649
  183. package/dist/devices-hap/fan.js.map +0 -1
  184. package/dist/devices-hap/hub.d.ts +0 -37
  185. package/dist/devices-hap/hub.d.ts.map +0 -1
  186. package/dist/devices-hap/hub.js +0 -392
  187. package/dist/devices-hap/hub.js.map +0 -1
  188. package/dist/devices-hap/humidifier.d.ts +0 -68
  189. package/dist/devices-hap/humidifier.d.ts.map +0 -1
  190. package/dist/devices-hap/humidifier.js +0 -628
  191. package/dist/devices-hap/humidifier.js.map +0 -1
  192. package/dist/devices-hap/iosensor.d.ts +0 -42
  193. package/dist/devices-hap/iosensor.d.ts.map +0 -1
  194. package/dist/devices-hap/iosensor.js +0 -382
  195. package/dist/devices-hap/iosensor.js.map +0 -1
  196. package/dist/devices-hap/lightstrip.d.ts +0 -79
  197. package/dist/devices-hap/lightstrip.d.ts.map +0 -1
  198. package/dist/devices-hap/lightstrip.js +0 -797
  199. package/dist/devices-hap/lightstrip.js.map +0 -1
  200. package/dist/devices-hap/lock.d.ts +0 -53
  201. package/dist/devices-hap/lock.d.ts.map +0 -1
  202. package/dist/devices-hap/lock.js +0 -561
  203. package/dist/devices-hap/lock.js.map +0 -1
  204. package/dist/devices-hap/meter.d.ts +0 -37
  205. package/dist/devices-hap/meter.d.ts.map +0 -1
  206. package/dist/devices-hap/meter.js +0 -379
  207. package/dist/devices-hap/meter.js.map +0 -1
  208. package/dist/devices-hap/meterplus.d.ts +0 -42
  209. package/dist/devices-hap/meterplus.d.ts.map +0 -1
  210. package/dist/devices-hap/meterplus.js +0 -384
  211. package/dist/devices-hap/meterplus.js.map +0 -1
  212. package/dist/devices-hap/meterpro.d.ts +0 -43
  213. package/dist/devices-hap/meterpro.d.ts.map +0 -1
  214. package/dist/devices-hap/meterpro.js +0 -468
  215. package/dist/devices-hap/meterpro.js.map +0 -1
  216. package/dist/devices-hap/motion.d.ts +0 -42
  217. package/dist/devices-hap/motion.d.ts.map +0 -1
  218. package/dist/devices-hap/motion.js +0 -345
  219. package/dist/devices-hap/motion.js.map +0 -1
  220. package/dist/devices-hap/plug.d.ts +0 -49
  221. package/dist/devices-hap/plug.d.ts.map +0 -1
  222. package/dist/devices-hap/plug.js +0 -395
  223. package/dist/devices-hap/plug.js.map +0 -1
  224. package/dist/devices-hap/relayswitch.d.ts +0 -96
  225. package/dist/devices-hap/relayswitch.d.ts.map +0 -1
  226. package/dist/devices-hap/relayswitch.js +0 -642
  227. package/dist/devices-hap/relayswitch.js.map +0 -1
  228. package/dist/devices-hap/robotvacuumcleaner.d.ts +0 -54
  229. package/dist/devices-hap/robotvacuumcleaner.d.ts.map +0 -1
  230. package/dist/devices-hap/robotvacuumcleaner.js +0 -523
  231. package/dist/devices-hap/robotvacuumcleaner.js.map +0 -1
  232. package/dist/devices-hap/waterdetector.d.ts +0 -41
  233. package/dist/devices-hap/waterdetector.d.ts.map +0 -1
  234. package/dist/devices-hap/waterdetector.js +0 -356
  235. package/dist/devices-hap/waterdetector.js.map +0 -1
  236. package/dist/devices-matter/BaseMatterAccessory.d.ts +0 -63
  237. package/dist/devices-matter/BaseMatterAccessory.d.ts.map +0 -1
  238. package/dist/devices-matter/BaseMatterAccessory.js +0 -100
  239. package/dist/devices-matter/BaseMatterAccessory.js.map +0 -1
  240. package/dist/devices-matter/ColorLightAccessory.d.ts +0 -18
  241. package/dist/devices-matter/ColorLightAccessory.d.ts.map +0 -1
  242. package/dist/devices-matter/ColorLightAccessory.js +0 -96
  243. package/dist/devices-matter/ColorLightAccessory.js.map +0 -1
  244. package/dist/devices-matter/ColorTemperatureLightAccessory.d.ts +0 -16
  245. package/dist/devices-matter/ColorTemperatureLightAccessory.d.ts.map +0 -1
  246. package/dist/devices-matter/ColorTemperatureLightAccessory.js +0 -83
  247. package/dist/devices-matter/ColorTemperatureLightAccessory.js.map +0 -1
  248. package/dist/devices-matter/ContactSensorAccessory.d.ts +0 -10
  249. package/dist/devices-matter/ContactSensorAccessory.d.ts.map +0 -1
  250. package/dist/devices-matter/ContactSensorAccessory.js +0 -31
  251. package/dist/devices-matter/ContactSensorAccessory.js.map +0 -1
  252. package/dist/devices-matter/DimmableLightAccessory.d.ts +0 -56
  253. package/dist/devices-matter/DimmableLightAccessory.d.ts.map +0 -1
  254. package/dist/devices-matter/DimmableLightAccessory.js +0 -170
  255. package/dist/devices-matter/DimmableLightAccessory.js.map +0 -1
  256. package/dist/devices-matter/DoorLockAccessory.d.ts +0 -12
  257. package/dist/devices-matter/DoorLockAccessory.d.ts.map +0 -1
  258. package/dist/devices-matter/DoorLockAccessory.js +0 -47
  259. package/dist/devices-matter/DoorLockAccessory.js.map +0 -1
  260. package/dist/devices-matter/ExtendedColorLightAccessory.d.ts +0 -19
  261. package/dist/devices-matter/ExtendedColorLightAccessory.d.ts.map +0 -1
  262. package/dist/devices-matter/ExtendedColorLightAccessory.js +0 -108
  263. package/dist/devices-matter/ExtendedColorLightAccessory.js.map +0 -1
  264. package/dist/devices-matter/FanAccessory.d.ts +0 -14
  265. package/dist/devices-matter/FanAccessory.d.ts.map +0 -1
  266. package/dist/devices-matter/FanAccessory.js +0 -73
  267. package/dist/devices-matter/FanAccessory.js.map +0 -1
  268. package/dist/devices-matter/HumiditySensorAccessory.d.ts +0 -10
  269. package/dist/devices-matter/HumiditySensorAccessory.d.ts.map +0 -1
  270. package/dist/devices-matter/HumiditySensorAccessory.js +0 -33
  271. package/dist/devices-matter/HumiditySensorAccessory.js.map +0 -1
  272. package/dist/devices-matter/LeakSensorAccessory.d.ts +0 -10
  273. package/dist/devices-matter/LeakSensorAccessory.d.ts.map +0 -1
  274. package/dist/devices-matter/LeakSensorAccessory.js +0 -30
  275. package/dist/devices-matter/LeakSensorAccessory.js.map +0 -1
  276. package/dist/devices-matter/LightSensorAccessory.d.ts +0 -10
  277. package/dist/devices-matter/LightSensorAccessory.d.ts.map +0 -1
  278. package/dist/devices-matter/LightSensorAccessory.js +0 -33
  279. package/dist/devices-matter/LightSensorAccessory.js.map +0 -1
  280. package/dist/devices-matter/OccupancySensorAccessory.d.ts +0 -10
  281. package/dist/devices-matter/OccupancySensorAccessory.d.ts.map +0 -1
  282. package/dist/devices-matter/OccupancySensorAccessory.js +0 -43
  283. package/dist/devices-matter/OccupancySensorAccessory.js.map +0 -1
  284. package/dist/devices-matter/OnOffLightAccessory.d.ts +0 -36
  285. package/dist/devices-matter/OnOffLightAccessory.d.ts.map +0 -1
  286. package/dist/devices-matter/OnOffLightAccessory.js +0 -117
  287. package/dist/devices-matter/OnOffLightAccessory.js.map +0 -1
  288. package/dist/devices-matter/OnOffOutletAccessory.d.ts +0 -12
  289. package/dist/devices-matter/OnOffOutletAccessory.d.ts.map +0 -1
  290. package/dist/devices-matter/OnOffOutletAccessory.js +0 -43
  291. package/dist/devices-matter/OnOffOutletAccessory.js.map +0 -1
  292. package/dist/devices-matter/OnOffSwitchAccessory.d.ts +0 -12
  293. package/dist/devices-matter/OnOffSwitchAccessory.d.ts.map +0 -1
  294. package/dist/devices-matter/OnOffSwitchAccessory.js +0 -43
  295. package/dist/devices-matter/OnOffSwitchAccessory.js.map +0 -1
  296. package/dist/devices-matter/RoboticVacuumAccessory.d.ts +0 -66
  297. package/dist/devices-matter/RoboticVacuumAccessory.d.ts.map +0 -1
  298. package/dist/devices-matter/RoboticVacuumAccessory.js +0 -402
  299. package/dist/devices-matter/RoboticVacuumAccessory.js.map +0 -1
  300. package/dist/devices-matter/SmokeCOAlarmAccessory.d.ts +0 -11
  301. package/dist/devices-matter/SmokeCOAlarmAccessory.d.ts.map +0 -1
  302. package/dist/devices-matter/SmokeCOAlarmAccessory.js +0 -49
  303. package/dist/devices-matter/SmokeCOAlarmAccessory.js.map +0 -1
  304. package/dist/devices-matter/TemperatureSensorAccessory.d.ts +0 -10
  305. package/dist/devices-matter/TemperatureSensorAccessory.d.ts.map +0 -1
  306. package/dist/devices-matter/TemperatureSensorAccessory.js +0 -33
  307. package/dist/devices-matter/TemperatureSensorAccessory.js.map +0 -1
  308. package/dist/devices-matter/ThermostatAccessory.d.ts +0 -17
  309. package/dist/devices-matter/ThermostatAccessory.d.ts.map +0 -1
  310. package/dist/devices-matter/ThermostatAccessory.js +0 -87
  311. package/dist/devices-matter/ThermostatAccessory.js.map +0 -1
  312. package/dist/devices-matter/VenetianBlindAccessory.d.ts +0 -17
  313. package/dist/devices-matter/VenetianBlindAccessory.d.ts.map +0 -1
  314. package/dist/devices-matter/VenetianBlindAccessory.js +0 -100
  315. package/dist/devices-matter/VenetianBlindAccessory.js.map +0 -1
  316. package/dist/devices-matter/WindowBlindAccessory.d.ts +0 -15
  317. package/dist/devices-matter/WindowBlindAccessory.d.ts.map +0 -1
  318. package/dist/devices-matter/WindowBlindAccessory.js +0 -81
  319. package/dist/devices-matter/WindowBlindAccessory.js.map +0 -1
  320. package/dist/devices-matter/custom/PowerStripAccessory.d.ts +0 -97
  321. package/dist/devices-matter/custom/PowerStripAccessory.d.ts.map +0 -1
  322. package/dist/devices-matter/custom/PowerStripAccessory.js +0 -265
  323. package/dist/devices-matter/custom/PowerStripAccessory.js.map +0 -1
  324. package/dist/devices-matter/custom/index.d.ts +0 -8
  325. package/dist/devices-matter/custom/index.d.ts.map +0 -1
  326. package/dist/devices-matter/custom/index.js +0 -8
  327. package/dist/devices-matter/custom/index.js.map +0 -1
  328. package/dist/devices-matter/index.d.ts +0 -29
  329. package/dist/devices-matter/index.d.ts.map +0 -1
  330. package/dist/devices-matter/index.js +0 -28
  331. package/dist/devices-matter/index.js.map +0 -1
  332. package/dist/index.test.d.ts +0 -2
  333. package/dist/index.test.d.ts.map +0 -1
  334. package/dist/index.test.js +0 -14
  335. package/dist/index.test.js.map +0 -1
  336. package/dist/irdevice/airconditioner.d.ts +0 -61
  337. package/dist/irdevice/airconditioner.d.ts.map +0 -1
  338. package/dist/irdevice/airconditioner.js +0 -472
  339. package/dist/irdevice/airconditioner.js.map +0 -1
  340. package/dist/irdevice/airpurifier.d.ts +0 -50
  341. package/dist/irdevice/airpurifier.d.ts.map +0 -1
  342. package/dist/irdevice/airpurifier.js +0 -213
  343. package/dist/irdevice/airpurifier.js.map +0 -1
  344. package/dist/irdevice/camera.d.ts +0 -32
  345. package/dist/irdevice/camera.d.ts.map +0 -1
  346. package/dist/irdevice/camera.js +0 -107
  347. package/dist/irdevice/camera.js.map +0 -1
  348. package/dist/irdevice/fan.d.ts +0 -36
  349. package/dist/irdevice/fan.d.ts.map +0 -1
  350. package/dist/irdevice/fan.js +0 -200
  351. package/dist/irdevice/fan.js.map +0 -1
  352. package/dist/irdevice/irdevice.d.ts +0 -68
  353. package/dist/irdevice/irdevice.d.ts.map +0 -1
  354. package/dist/irdevice/irdevice.js +0 -298
  355. package/dist/irdevice/irdevice.js.map +0 -1
  356. package/dist/irdevice/light.d.ts +0 -36
  357. package/dist/irdevice/light.d.ts.map +0 -1
  358. package/dist/irdevice/light.js +0 -206
  359. package/dist/irdevice/light.js.map +0 -1
  360. package/dist/irdevice/other.d.ts +0 -57
  361. package/dist/irdevice/other.d.ts.map +0 -1
  362. package/dist/irdevice/other.js +0 -778
  363. package/dist/irdevice/other.js.map +0 -1
  364. package/dist/irdevice/tv.d.ts +0 -45
  365. package/dist/irdevice/tv.d.ts.map +0 -1
  366. package/dist/irdevice/tv.js +0 -327
  367. package/dist/irdevice/tv.js.map +0 -1
  368. package/dist/irdevice/vacuumcleaner.d.ts +0 -28
  369. package/dist/irdevice/vacuumcleaner.d.ts.map +0 -1
  370. package/dist/irdevice/vacuumcleaner.js +0 -104
  371. package/dist/irdevice/vacuumcleaner.js.map +0 -1
  372. package/dist/irdevice/waterheater.d.ts +0 -30
  373. package/dist/irdevice/waterheater.d.ts.map +0 -1
  374. package/dist/irdevice/waterheater.js +0 -105
  375. package/dist/irdevice/waterheater.js.map +0 -1
  376. package/dist/platform-hap.d.ts +0 -149
  377. package/dist/platform-hap.d.ts.map +0 -1
  378. package/dist/platform-hap.js +0 -2849
  379. package/dist/platform-hap.js.map +0 -1
  380. package/dist/platform-matter.d.ts +0 -75
  381. package/dist/platform-matter.d.ts.map +0 -1
  382. package/dist/platform-matter.js +0 -379
  383. package/dist/platform-matter.js.map +0 -1
  384. package/dist/verifyconfig.test.d.ts +0 -2
  385. package/dist/verifyconfig.test.d.ts.map +0 -1
  386. package/dist/verifyconfig.test.js +0 -167
  387. package/dist/verifyconfig.test.js.map +0 -1
  388. package/src/custom.d.ts +0 -7
  389. package/src/devices-hap/airpurifier.ts +0 -563
  390. package/src/devices-hap/blindtilt.ts +0 -1049
  391. package/src/devices-hap/bot.ts +0 -900
  392. package/src/devices-hap/ceilinglight.ts +0 -742
  393. package/src/devices-hap/colorbulb.ts +0 -904
  394. package/src/devices-hap/contact.ts +0 -457
  395. package/src/devices-hap/curtain.ts +0 -944
  396. package/src/devices-hap/device.ts +0 -811
  397. package/src/devices-hap/fan.ts +0 -711
  398. package/src/devices-hap/hub.ts +0 -439
  399. package/src/devices-hap/humidifier.ts +0 -669
  400. package/src/devices-hap/iosensor.ts +0 -427
  401. package/src/devices-hap/lightstrip.ts +0 -836
  402. package/src/devices-hap/lock.ts +0 -620
  403. package/src/devices-hap/meter.ts +0 -426
  404. package/src/devices-hap/meterplus.ts +0 -430
  405. package/src/devices-hap/meterpro.ts +0 -522
  406. package/src/devices-hap/motion.ts +0 -390
  407. package/src/devices-hap/plug.ts +0 -423
  408. package/src/devices-hap/relayswitch.ts +0 -727
  409. package/src/devices-hap/robotvacuumcleaner.ts +0 -568
  410. package/src/devices-hap/waterdetector.ts +0 -400
  411. package/src/devices-matter/BaseMatterAccessory.ts +0 -131
  412. package/src/devices-matter/ColorLightAccessory.ts +0 -113
  413. package/src/devices-matter/ColorTemperatureLightAccessory.ts +0 -98
  414. package/src/devices-matter/ContactSensorAccessory.ts +0 -37
  415. package/src/devices-matter/DimmableLightAccessory.ts +0 -196
  416. package/src/devices-matter/DoorLockAccessory.ts +0 -56
  417. package/src/devices-matter/ExtendedColorLightAccessory.ts +0 -127
  418. package/src/devices-matter/FanAccessory.ts +0 -87
  419. package/src/devices-matter/HumiditySensorAccessory.ts +0 -39
  420. package/src/devices-matter/LeakSensorAccessory.ts +0 -36
  421. package/src/devices-matter/LightSensorAccessory.ts +0 -39
  422. package/src/devices-matter/OccupancySensorAccessory.ts +0 -52
  423. package/src/devices-matter/OnOffLightAccessory.ts +0 -133
  424. package/src/devices-matter/OnOffOutletAccessory.ts +0 -52
  425. package/src/devices-matter/OnOffSwitchAccessory.ts +0 -52
  426. package/src/devices-matter/RoboticVacuumAccessory.ts +0 -484
  427. package/src/devices-matter/SmokeCOAlarmAccessory.ts +0 -59
  428. package/src/devices-matter/TemperatureSensorAccessory.ts +0 -39
  429. package/src/devices-matter/ThermostatAccessory.ts +0 -105
  430. package/src/devices-matter/VenetianBlindAccessory.ts +0 -118
  431. package/src/devices-matter/WindowBlindAccessory.ts +0 -94
  432. package/src/devices-matter/custom/PowerStripAccessory.ts +0 -309
  433. package/src/devices-matter/custom/index.ts +0 -8
  434. package/src/devices-matter/index.ts +0 -29
  435. package/src/index.test.ts +0 -19
  436. package/src/irdevice/airconditioner.ts +0 -533
  437. package/src/irdevice/airpurifier.ts +0 -252
  438. package/src/irdevice/camera.ts +0 -129
  439. package/src/irdevice/fan.ts +0 -226
  440. package/src/irdevice/irdevice.ts +0 -344
  441. package/src/irdevice/light.ts +0 -246
  442. package/src/irdevice/other.ts +0 -790
  443. package/src/irdevice/tv.ts +0 -378
  444. package/src/irdevice/vacuumcleaner.ts +0 -126
  445. package/src/irdevice/waterheater.ts +0 -127
  446. package/src/platform-hap.ts +0 -2986
  447. package/src/platform-matter.ts +0 -465
  448. package/src/verifyconfig.test.ts +0 -197
@@ -1,98 +0,0 @@
1
- /**
2
- * Color Temperature Light Accessory Class
3
- */
4
-
5
- import type { API, Logger, MatterRequests } from 'homebridge'
6
-
7
- import { BaseMatterAccessory } from './BaseMatterAccessory.js'
8
-
9
- export class ColorTemperatureLightAccessory extends BaseMatterAccessory {
10
- constructor(api: API, log: Logger) {
11
- const serialNumber = 'LIGHT-003'
12
- super(api, log, {
13
- uuid: api.matter.uuid.generate(serialNumber),
14
- displayName: 'Colour Temperature Light',
15
- deviceType: api.matter.deviceTypes.ColorTemperatureLight,
16
- serialNumber,
17
- manufacturer: 'Homebridge Matter',
18
- model: 'HB-MATTER-LIGHT-COLOUR-TEMP',
19
- firmwareRevision: '2.0.0',
20
- hardwareRevision: '1.0.0',
21
-
22
- clusters: {
23
- onOff: {
24
- onOff: false,
25
- },
26
- levelControl: {
27
- currentLevel: 127,
28
- minLevel: 1,
29
- maxLevel: 254,
30
- },
31
- colorControl: {
32
- colorMode: api.matter.types.ColorControl.ColorMode.ColorTemperatureMireds,
33
- colorTemperatureMireds: 250,
34
- colorTempPhysicalMinMireds: 147,
35
- colorTempPhysicalMaxMireds: 454,
36
- coupleColorTempToLevelMinMireds: 147,
37
- },
38
- },
39
-
40
- handlers: {
41
- onOff: {
42
- on: async () => this.handleOn(),
43
- off: async () => this.handleOff(),
44
- },
45
- levelControl: {
46
- moveToLevelWithOnOff: async (request: MatterRequests.MoveToLevel) =>
47
- this.handleSetLevel(request),
48
- },
49
- colorControl: {
50
- moveToColorTemperatureLogic: async (request: MatterRequests.MoveToColorTemperature) =>
51
- this.handleSetColorTemperature(request),
52
- },
53
- },
54
- })
55
-
56
- this.logInfo('initialized.')
57
- }
58
-
59
- private async handleOn(): Promise<void> {
60
- this.logInfo('turning on.')
61
- // TODO: await myLightAPI.turnOn()
62
- }
63
-
64
- private async handleOff(): Promise<void> {
65
- this.logInfo('turning off.')
66
- // TODO: await myLightAPI.turnOff()
67
- }
68
-
69
- private async handleSetLevel(request: MatterRequests.MoveToLevel): Promise<void> {
70
- this.logInfo(`MoveToLevel request: ${JSON.stringify(request)}`)
71
- const { level } = request
72
- const brightnessPercent = Math.round((level / 254) * 100)
73
- this.logInfo(`setting brightness to ${brightnessPercent}% (level: ${level}).`)
74
- // TODO: await myLightAPI.setBrightness(brightnessPercent)
75
- }
76
-
77
- private async handleSetColorTemperature(request: MatterRequests.MoveToColorTemperature): Promise<void> {
78
- this.logInfo(`MoveToColorTemperature request: ${JSON.stringify(request)}`)
79
- const { colorTemperatureMireds, transitionTime } = request
80
- const kelvin = Math.round(1000000 / colorTemperatureMireds)
81
- this.logInfo(`setting color temp to ${kelvin}k (${colorTemperatureMireds} mireds) with transitionTime=${transitionTime}.`)
82
- // TODO: await myLightAPI.setColorTemperature(kelvin, transitionTime)
83
- }
84
-
85
- public updateOnOffState(isOn: boolean): void {
86
- this.updateState(this.api.matter.clusterNames.OnOff, { onOff: isOn })
87
- }
88
-
89
- public updateBrightness(percent: number): void {
90
- const matterLevel = Math.max(1, Math.round((percent / 100) * 254))
91
- this.updateState(this.api.matter.clusterNames.LevelControl, { currentLevel: matterLevel })
92
- }
93
-
94
- public updateColorTemperature(kelvin: number): void {
95
- const mireds = Math.round(1000000 / kelvin)
96
- this.updateState(this.api.matter.clusterNames.ColorControl, { colorTemperatureMireds: mireds })
97
- }
98
- }
@@ -1,37 +0,0 @@
1
- /**
2
- * Contact Sensor Accessory Class
3
- */
4
-
5
- import type { API, Logger } from 'homebridge'
6
-
7
- import { BaseMatterAccessory } from './BaseMatterAccessory.js'
8
-
9
- export class ContactSensorAccessory extends BaseMatterAccessory {
10
- constructor(api: API, log: Logger) {
11
- const serialNumber = 'SENSOR-001'
12
- super(api, log, {
13
- uuid: api.matter.uuid.generate(serialNumber),
14
- displayName: 'Contact Sensor',
15
- deviceType: api.matter.deviceTypes.ContactSensor,
16
- serialNumber,
17
- manufacturer: 'Homebridge Matter',
18
- model: 'HB-MATTER-SENSOR-CONTACT',
19
- firmwareRevision: '2.0.0',
20
- hardwareRevision: '1.0.0',
21
-
22
- clusters: {
23
- booleanState: {
24
- stateValue: true, // matter: true = closed/normal, false = open/triggered
25
- },
26
- },
27
- })
28
-
29
- this.logInfo('initialized.')
30
- }
31
-
32
- public updateContactState(isOpen: boolean): void {
33
- // Matter BooleanState: false = open/triggered, true = closed/normal (inverted!)
34
- this.updateState(this.api.matter.clusterNames.BooleanState, { stateValue: !isOpen })
35
- this.logInfo(`contact state: ${isOpen ? 'OPEN' : 'CLOSED'}.`)
36
- }
37
- }
@@ -1,196 +0,0 @@
1
- /**
2
- * Dimmable Light Accessory Class
3
- *
4
- * Example of a more complex device with multiple clusters.
5
- * Shows how to handle devices with on/off + level control.
6
- */
7
-
8
- import type { API, Logger, MatterRequests } from 'homebridge'
9
-
10
- import { BaseMatterAccessory } from './BaseMatterAccessory.js'
11
-
12
- /**
13
- * Dimmable Light Device Class
14
- *
15
- * Demonstrates:
16
- * - Multiple clusters (OnOff + LevelControl)
17
- * - Type-safe request handlers
18
- * - Value conversion (Matter level ↔ percentage)
19
- * - Custom public methods for external control
20
- */
21
- export class DimmableLightAccessory extends BaseMatterAccessory {
22
- // Track current state
23
- private currentLevel: number = 127 // 50% brightness
24
-
25
- constructor(api: API, log: Logger) {
26
- const serialNumber = 'LIGHT-002'
27
- const displayName = 'Dimmable Light'
28
- const manufacturer = 'Homebridge Matter'
29
- const model = 'HB-MATTER-LIGHT-DIMMABLE'
30
- const firmwareRevision = '2.0.0'
31
- const hardwareRevision = '1.0.0'
32
-
33
- super(api, log, {
34
- uuid: api.matter.uuid.generate(serialNumber),
35
- displayName,
36
- deviceType: api.matter.deviceTypes.DimmableLight,
37
- serialNumber,
38
- manufacturer,
39
- model,
40
- firmwareRevision,
41
- hardwareRevision,
42
-
43
- clusters: {
44
- onOff: {
45
- onOff: false,
46
- },
47
- levelControl: {
48
- currentLevel: 127, // 50% brightness (range 1-254)
49
- minLevel: 1,
50
- maxLevel: 254,
51
- },
52
- },
53
-
54
- handlers: {
55
- onOff: {
56
- on: async () => this.handleOn(),
57
- off: async () => this.handleOff(),
58
- },
59
- levelControl: {
60
- moveToLevelWithOnOff: async (request: MatterRequests.MoveToLevel) =>
61
- this.handleSetLevel(request),
62
- },
63
- },
64
- })
65
-
66
- this.logInfo('initialized.')
67
- }
68
-
69
- /**
70
- * Handle the "on" command
71
- */
72
- private async handleOn(): Promise<void> {
73
- this.logInfo('turning on.')
74
-
75
- try {
76
- // TODO: Control your physical device
77
- // await myLightAPI.turnOn()
78
-
79
- this.logInfo('physical device turned on.')
80
- } catch (error) {
81
- this.logError('failed to turn on:', error)
82
- throw error
83
- }
84
- }
85
-
86
- /**
87
- * Handle the "off" command
88
- */
89
- private async handleOff(): Promise<void> {
90
- this.logInfo('turning off.')
91
-
92
- try {
93
- // TODO: Control your physical device
94
- // await myLightAPI.turnOff()
95
-
96
- this.logInfo('physical device turned off.')
97
- } catch (error) {
98
- this.logError('failed to turn off:', error)
99
- throw error
100
- }
101
- }
102
-
103
- /**
104
- * Handle brightness level changes
105
- */
106
- private async handleSetLevel(request: MatterRequests.MoveToLevel): Promise<void> {
107
- this.logInfo(`MoveToLevel request: ${JSON.stringify(request)}`)
108
- const { level, transitionTime } = request
109
-
110
- // Convert Matter level (1-254) to percentage (0-100%)
111
- const brightnessPercent = Math.round((level / 254) * 100)
112
- this.currentLevel = level
113
-
114
- this.logInfo(`setting brightness to ${brightnessPercent}% (level: ${level}), transitionTime: ${transitionTime}.`)
115
-
116
- try {
117
- // TODO: Control your physical device
118
- // await myLightAPI.setBrightness(brightnessPercent, transitionTime)
119
-
120
- this.logInfo(`physical device brightness set to ${brightnessPercent}%.`)
121
- } catch (error) {
122
- this.logError('Failed to set brightness:', error)
123
- throw error
124
- }
125
- }
126
-
127
- /**
128
- * Update on/off state from external source
129
- */
130
- public updateOnOffState(isOn: boolean): void {
131
- this.updateState(this.api.matter.clusterNames.OnOff, { onOff: isOn })
132
- this.logInfo(`state synced: ${isOn ? 'ON' : 'OFF'}.`)
133
- }
134
-
135
- /**
136
- * Update brightness level from external source
137
- * @param percent - Brightness percentage (0-100)
138
- */
139
- public updateBrightness(percent: number): void {
140
- // Validate input
141
- if (percent < 0 || percent > 100) {
142
- this.logWarn(`Invalid brightness percentage: ${percent}. Must be 0-100.`)
143
- return
144
- }
145
-
146
- // Convert percent to Matter level (1-254)
147
- const matterLevel = Math.max(1, Math.round((percent / 100) * 254))
148
- this.currentLevel = matterLevel
149
-
150
- this.updateState(this.api.matter.clusterNames.LevelControl, {
151
- currentLevel: matterLevel,
152
- })
153
-
154
- this.logInfo(`brightness synced: ${percent}% (level: ${matterLevel}).`)
155
- }
156
-
157
- /**
158
- * Get current brightness as percentage
159
- */
160
- public getBrightness(): number {
161
- return Math.round((this.currentLevel / 254) * 100)
162
- }
163
-
164
- /**
165
- * Set brightness and power state together
166
- * Useful for syncing complete state from external source
167
- */
168
- public updateFullState(isOn: boolean, percent: number): void {
169
- this.updateOnOffState(isOn)
170
- if (isOn) {
171
- this.updateBrightness(percent)
172
- }
173
- }
174
-
175
- /**
176
- * Example monitoring setup
177
- */
178
- public startMonitoring(): void {
179
- // Example: MQTT listener
180
- // mqttClient.on('message', (topic, message) => {
181
- // const { state, brightness } = JSON.parse(message.toString())
182
- // this.updateFullState(state === 'ON', brightness)
183
- // })
184
-
185
- // Example: Polling
186
- // setInterval(async () => {
187
- // try {
188
- // const response = await fetch('https://api.mydevice.com/light/state')
189
- // const data = await response.json()
190
- // this.updateFullState(data.power === 'on', data.brightness)
191
- // } catch (error) {
192
- // this.logError('Polling error:', error)
193
- // }
194
- // }, 5000)
195
- }
196
- }
@@ -1,56 +0,0 @@
1
- /**
2
- * Door Lock Accessory Class
3
- */
4
-
5
- import type { API, Logger } from 'homebridge'
6
-
7
- import { BaseMatterAccessory } from './BaseMatterAccessory.js'
8
-
9
- export class DoorLockAccessory extends BaseMatterAccessory {
10
- constructor(api: API, log: Logger) {
11
- const serialNumber = 'LOCK-001'
12
- super(api, log, {
13
- uuid: api.matter.uuid.generate(serialNumber),
14
- displayName: 'Door Lock',
15
- deviceType: api.matter.deviceTypes.DoorLock,
16
- serialNumber,
17
- manufacturer: 'Homebridge Matter',
18
- model: 'HB-MATTER-LOCK-DOOR',
19
- firmwareRevision: '2.0.0',
20
- hardwareRevision: '1.0.0',
21
-
22
- clusters: {
23
- doorLock: {
24
- lockState: api.matter.types.DoorLock.LockState.Unlocked,
25
- lockType: api.matter.types.DoorLock.LockType.DeadBolt,
26
- actuatorEnabled: true,
27
- operatingMode: api.matter.types.DoorLock.OperatingMode.Normal,
28
- },
29
- },
30
-
31
- handlers: {
32
- doorLock: {
33
- lockDoor: async () => this.handleLock(),
34
- unlockDoor: async () => this.handleUnlock(),
35
- },
36
- },
37
- })
38
-
39
- this.logInfo('initialized.')
40
- }
41
-
42
- private async handleLock(): Promise<void> {
43
- this.logInfo('locked.')
44
- }
45
-
46
- private async handleUnlock(): Promise<void> {
47
- this.logInfo('unlocked.')
48
- }
49
-
50
- public updateLockState(state: 0 | 1 | 2): void {
51
- // 0 = Not fully locked, 1 = Locked, 2 = Unlocked
52
- this.updateState('doorLock', { lockState: state })
53
- const stateStr = ['Not Fully Locked', 'Locked', 'Unlocked'][state]
54
- this.logInfo(`lock state: ${stateStr}.`)
55
- }
56
- }
@@ -1,127 +0,0 @@
1
- /**
2
- * Extended Color Light Accessory Class (HS+CCT)
3
- * Hue, Saturation, and Color Temperature control
4
- */
5
-
6
- import type { API, Logger, MatterRequests } from 'homebridge'
7
-
8
- import { BaseMatterAccessory } from './BaseMatterAccessory.js'
9
-
10
- export class ExtendedColorLightAccessory extends BaseMatterAccessory {
11
- constructor(api: API, log: Logger) {
12
- const serialNumber = 'LIGHT-005'
13
- super(api, log, {
14
- uuid: api.matter.uuid.generate(serialNumber),
15
- displayName: 'Extended Colour Light (HS+CCT)',
16
- deviceType: api.matter.deviceTypes.ExtendedColorLight,
17
- serialNumber,
18
- manufacturer: 'Homebridge Matter',
19
- model: 'HB-MATTER-LIGHT-EXTENDED-COLOUR',
20
- firmwareRevision: '2.0.0',
21
- hardwareRevision: '1.0.0',
22
-
23
- clusters: {
24
- onOff: { onOff: false },
25
- levelControl: {
26
- currentLevel: 127,
27
- minLevel: 1,
28
- maxLevel: 254,
29
- },
30
- colorControl: {
31
- colorMode: api.matter.types.ColorControl.ColorMode.CurrentHueAndCurrentSaturation,
32
- currentHue: 0,
33
- currentSaturation: 254,
34
- currentX: 41942,
35
- currentY: 21626,
36
- colorTemperatureMireds: 250,
37
- colorTempPhysicalMinMireds: 147,
38
- colorTempPhysicalMaxMireds: 454,
39
- coupleColorTempToLevelMinMireds: 147,
40
- },
41
- },
42
-
43
- handlers: {
44
- onOff: {
45
- on: async () => this.handleOn(),
46
- off: async () => this.handleOff(),
47
- },
48
- levelControl: {
49
- moveToLevelWithOnOff: async (request: MatterRequests.MoveToLevel) =>
50
- this.handleSetLevel(request),
51
- },
52
- colorControl: {
53
- moveToColorLogic: async (request: MatterRequests.MoveToColor) =>
54
- this.handleSetColor(request),
55
- moveToHueAndSaturationLogic: async (request: MatterRequests.MoveToHueAndSaturation) =>
56
- this.handleSetHueSaturation(request),
57
- moveToColorTemperatureLogic: async (request: MatterRequests.MoveToColorTemperature) =>
58
- this.handleSetColorTemperature(request),
59
- },
60
- },
61
- })
62
-
63
- this.logInfo('initialized.')
64
- }
65
-
66
- private async handleOn(): Promise<void> {
67
- this.logInfo('turning on.')
68
- // TODO: await myLightAPI.turnOn()
69
- }
70
-
71
- private async handleOff(): Promise<void> {
72
- this.logInfo('turning off.')
73
- // TODO: await myLightAPI.turnOff()
74
- }
75
-
76
- private async handleSetLevel(request: MatterRequests.MoveToLevel): Promise<void> {
77
- this.logInfo(`MoveToLevel request: ${JSON.stringify(request)}`)
78
- const { level } = request
79
- const brightnessPercent = Math.round((level / 254) * 100)
80
- this.logInfo(`setting brightness to ${brightnessPercent}%.`)
81
- // TODO: await myLightAPI.setBrightness(brightnessPercent)
82
- }
83
-
84
- private async handleSetColor(request: MatterRequests.MoveToColor): Promise<void> {
85
- this.logInfo(`MoveToColor request: ${JSON.stringify(request)}`)
86
- const { colorX, colorY, transitionTime } = request
87
- const xFloat = (colorX / 65535).toFixed(4)
88
- const yFloat = (colorY / 65535).toFixed(4)
89
- this.logInfo(`setting xy color to (${xFloat}, ${yFloat}), ${transitionTime}ms.`)
90
- // TODO: await myLightAPI.setXY(xFloat, yFloat, transitionTime)
91
- }
92
-
93
- private async handleSetHueSaturation(request: MatterRequests.MoveToHueAndSaturation): Promise<void> {
94
- this.logInfo(`MoveToHueAndSaturation request: ${JSON.stringify(request)}`)
95
- const { hue, saturation, transitionTime } = request
96
- const hueDegrees = Math.round((hue / 254) * 360)
97
- const saturationPercent = Math.round((saturation / 254) * 100)
98
- this.logInfo(`setting color to ${hueDegrees}°, ${saturationPercent}%, ${transitionTime}ms.`)
99
- // TODO: await myLightAPI.setColor(hueDegrees, saturationPercent, transitionTime)
100
- }
101
-
102
- private async handleSetColorTemperature(request: MatterRequests.MoveToColorTemperature): Promise<void> {
103
- this.logInfo(`MoveToColorTemperature request: ${JSON.stringify(request)}`)
104
- const { colorTemperatureMireds, transitionTime } = request
105
- const kelvin = Math.round(1000000 / colorTemperatureMireds)
106
- this.logInfo(`setting color temp to ${kelvin}k, ${transitionTime}ms.`)
107
- // TODO: await myLightAPI.setColorTemperature(kelvin, transitionTime)
108
- }
109
-
110
- public updateOnOffState(isOn: boolean): void {
111
- this.updateState(this.api.matter.clusterNames.OnOff, { onOff: isOn })
112
- }
113
-
114
- public updateBrightness(percent: number): void {
115
- const matterLevel = Math.max(1, Math.round((percent / 100) * 254))
116
- this.updateState(this.api.matter.clusterNames.LevelControl, { currentLevel: matterLevel })
117
- }
118
-
119
- public updateHueSaturation(hue: number, saturation: number): void {
120
- const matterHue = Math.round((hue / 360) * 254)
121
- const matterSat = Math.round((saturation / 100) * 254)
122
- this.updateState(this.api.matter.clusterNames.ColorControl, {
123
- currentHue: matterHue,
124
- currentSaturation: matterSat,
125
- })
126
- }
127
- }
@@ -1,87 +0,0 @@
1
- /**
2
- * Fan Accessory Class
3
- */
4
-
5
- import type { API, Logger, MatterRequests } from 'homebridge'
6
-
7
- import { BaseMatterAccessory } from './BaseMatterAccessory.js'
8
-
9
- export class FanAccessory extends BaseMatterAccessory {
10
- constructor(api: API, log: Logger) {
11
- const serialNumber = 'FAN-001'
12
- super(api, log, {
13
- uuid: api.matter.uuid.generate(serialNumber),
14
- displayName: 'Fan',
15
- deviceType: api.matter.deviceTypes.Fan,
16
- serialNumber,
17
- manufacturer: 'Homebridge Matter',
18
- model: 'HB-MATTER-FAN',
19
- firmwareRevision: '2.0.0',
20
- hardwareRevision: '1.0.0',
21
-
22
- clusters: {
23
- fanControl: {
24
- fanMode: api.matter.types.FanControl.FanMode.Off,
25
- fanModeSequence: api.matter.types.FanControl.FanModeSequence.OffLowMedHigh,
26
- percentSetting: 0,
27
- percentCurrent: 0,
28
- },
29
- },
30
-
31
- handlers: {
32
- fanControl: {
33
- step: async (request: MatterRequests.FanStep) => this.handleStep(request),
34
- fanModeChange: async (request: { fanMode: number, oldFanMode: number }) => this.handleFanModeChange(request),
35
- percentSettingChange: async (request: { percentSetting: number | null, oldPercentSetting: number | null }) =>
36
- this.handlePercentSettingChange(request),
37
- },
38
- },
39
- })
40
-
41
- this.logInfo('initialized.')
42
- }
43
-
44
- private async handleStep(request: MatterRequests.FanStep): Promise<void> {
45
- this.logInfo(`FanStep request: ${JSON.stringify(request)}`)
46
- const { direction, wrap, lowestOff } = request
47
- const dirStr = direction === 0 ? 'increase' : 'decrease'
48
- this.logInfo(`step ${dirStr} (wrap: ${wrap}, lowestoff: ${lowestOff}).`)
49
- // TODO: await myFanAPI.step(direction, wrap, lowestOff)
50
- }
51
-
52
- private async handleFanModeChange(request: { fanMode: number, oldFanMode: number }): Promise<void> {
53
- this.logInfo(`FanMode change: ${JSON.stringify(request)}`)
54
- const modeNames = ['Off', 'Low', 'Medium', 'High', 'On', 'Auto', 'Smart']
55
- const modeName = modeNames[request.fanMode] || `Unknown (${request.fanMode})`
56
- this.logInfo(`fan mode changed to: ${modeName}.`)
57
- // TODO: await myFanAPI.setMode(request.fanMode)
58
- }
59
-
60
- private async handlePercentSettingChange(request: { percentSetting: number | null, oldPercentSetting: number | null }): Promise<void> {
61
- this.logInfo(`PercentSetting change: ${JSON.stringify(request)}`)
62
- const percent = request.percentSetting ?? 0
63
- const isOff = percent === 0
64
- const wasOff = (request.oldPercentSetting ?? 0) === 0
65
-
66
- if (isOff !== wasOff) {
67
- this.logInfo(`fan turned ${isOff ? 'off' : 'on'}.`)
68
- }
69
-
70
- if (!isOff) {
71
- this.logInfo(`fan speed changed to: ${percent}%.`)
72
- }
73
- // TODO: await myFanAPI.setSpeed(percent)
74
- }
75
-
76
- public updateFanMode(mode: number): void {
77
- this.updateState(this.api.matter.clusterNames.FanControl, { fanMode: mode })
78
- }
79
-
80
- public updateFanSpeed(percent: number): void {
81
- this.updateState(this.api.matter.clusterNames.FanControl, {
82
- percentSetting: percent,
83
- percentCurrent: percent,
84
- })
85
- this.logInfo(`fan speed: ${percent}%.`)
86
- }
87
- }
@@ -1,39 +0,0 @@
1
- /**
2
- * Humidity Sensor Accessory Class
3
- */
4
-
5
- import type { API, Logger } from 'homebridge'
6
-
7
- import { BaseMatterAccessory } from './BaseMatterAccessory.js'
8
-
9
- export class HumiditySensorAccessory extends BaseMatterAccessory {
10
- constructor(api: API, log: Logger) {
11
- const serialNumber = 'SENSOR-005'
12
- super(api, log, {
13
- uuid: api.matter.uuid.generate(serialNumber),
14
- displayName: 'Humidity Sensor',
15
- deviceType: api.matter.deviceTypes.HumiditySensor,
16
- serialNumber,
17
- manufacturer: 'Homebridge Matter',
18
- model: 'HB-MATTER-SENSOR-HUMIDITY',
19
- firmwareRevision: '2.0.0',
20
- hardwareRevision: '1.0.0',
21
-
22
- clusters: {
23
- relativeHumidityMeasurement: {
24
- measuredValue: 5500, // 55% (in hundredths of a percent)
25
- minMeasuredValue: 0,
26
- maxMeasuredValue: 10000,
27
- },
28
- },
29
- })
30
-
31
- this.logInfo('initialized.')
32
- }
33
-
34
- public updateHumidity(percent: number): void {
35
- const value = Math.round(percent * 100) // convert to hundredths
36
- this.updateState('relativeHumidityMeasurement', { measuredValue: value })
37
- this.logInfo(`humidity: ${percent}%.`)
38
- }
39
- }
@@ -1,36 +0,0 @@
1
- /**
2
- * Leak Sensor Accessory Class
3
- */
4
-
5
- import type { API, Logger } from 'homebridge'
6
-
7
- import { BaseMatterAccessory } from './BaseMatterAccessory.js'
8
-
9
- export class LeakSensorAccessory extends BaseMatterAccessory {
10
- constructor(api: API, log: Logger) {
11
- const serialNumber = 'SENSOR-007'
12
- super(api, log, {
13
- uuid: api.matter.uuid.generate(serialNumber),
14
- displayName: 'Leak Sensor',
15
- deviceType: api.matter.deviceTypes.LeakSensor,
16
- serialNumber,
17
- manufacturer: 'Homebridge Matter',
18
- model: 'HB-MATTER-SENSOR-LEAK',
19
- firmwareRevision: '2.0.0',
20
- hardwareRevision: '1.0.0',
21
-
22
- clusters: {
23
- booleanState: {
24
- stateValue: false, // false = dry, true = leak
25
- },
26
- },
27
- })
28
-
29
- this.logInfo('initialized.')
30
- }
31
-
32
- public updateLeakState(leakDetected: boolean): void {
33
- this.updateState(this.api.matter.clusterNames.BooleanState, { stateValue: leakDetected })
34
- this.logInfo(`leak: ${leakDetected ? 'detected' : 'none'}.`)
35
- }
36
- }