@switchbot/homebridge-switchbot 4.3.2-beta.9 → 5.0.0-beta.0

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 (410) hide show
  1. package/.github/copilot-instructions.md +328 -0
  2. package/.github/workflows/beta-release.yml +8 -12
  3. package/.github/workflows/release.yml +57 -21
  4. package/README.md +13 -10
  5. package/config.schema.json +1 -12
  6. package/coverage/base.css +224 -0
  7. package/coverage/block-navigation.js +87 -0
  8. package/coverage/clover.xml +15847 -0
  9. package/coverage/coverage-final.json +42 -0
  10. package/coverage/docs/assets/dmt/dmt-component-data.js.html +85 -0
  11. package/coverage/docs/assets/dmt/dmt-components.js.html +286 -0
  12. package/coverage/docs/assets/dmt/index.html +131 -0
  13. package/coverage/docs/assets/hierarchy.js.html +85 -0
  14. package/coverage/docs/assets/icons.js.html +136 -0
  15. package/coverage/docs/assets/index.html +146 -0
  16. package/coverage/docs/assets/main.js.html +265 -0
  17. package/coverage/favicon.png +0 -0
  18. package/coverage/index.html +191 -0
  19. package/coverage/prettify.css +1 -0
  20. package/coverage/prettify.js +2 -0
  21. package/coverage/sort-arrow-sprite.png +0 -0
  22. package/coverage/sorter.js +196 -0
  23. package/coverage/src/device/blindtilt.ts.html +3238 -0
  24. package/coverage/src/device/bot.ts.html +2803 -0
  25. package/coverage/src/device/ceilinglight.ts.html +2338 -0
  26. package/coverage/src/device/colorbulb.ts.html +2824 -0
  27. package/coverage/src/device/contact.ts.html +1465 -0
  28. package/coverage/src/device/curtain.ts.html +2869 -0
  29. package/coverage/src/device/device.ts.html +2500 -0
  30. package/coverage/src/device/fan.ts.html +2242 -0
  31. package/coverage/src/device/hub.ts.html +1408 -0
  32. package/coverage/src/device/humidifier.ts.html +2116 -0
  33. package/coverage/src/device/index.html +416 -0
  34. package/coverage/src/device/iosensor.ts.html +1375 -0
  35. package/coverage/src/device/lightstrip.ts.html +2617 -0
  36. package/coverage/src/device/lock.ts.html +1963 -0
  37. package/coverage/src/device/meter.ts.html +1372 -0
  38. package/coverage/src/device/meterplus.ts.html +1384 -0
  39. package/coverage/src/device/meterpro.ts.html +1618 -0
  40. package/coverage/src/device/motion.ts.html +1264 -0
  41. package/coverage/src/device/plug.ts.html +1372 -0
  42. package/coverage/src/device/relayswitch.ts.html +2284 -0
  43. package/coverage/src/device/robotvacuumcleaner.ts.html +1810 -0
  44. package/coverage/src/device/waterdetector.ts.html +1294 -0
  45. package/coverage/src/homebridge-ui/index.html +116 -0
  46. package/coverage/src/homebridge-ui/server.ts.html +229 -0
  47. package/coverage/src/index.html +161 -0
  48. package/coverage/src/index.ts.html +124 -0
  49. package/coverage/src/irdevice/airconditioner.ts.html +1687 -0
  50. package/coverage/src/irdevice/airpurifier.ts.html +844 -0
  51. package/coverage/src/irdevice/camera.ts.html +475 -0
  52. package/coverage/src/irdevice/fan.ts.html +766 -0
  53. package/coverage/src/irdevice/index.html +251 -0
  54. package/coverage/src/irdevice/irdevice.ts.html +1117 -0
  55. package/coverage/src/irdevice/light.ts.html +826 -0
  56. package/coverage/src/irdevice/other.ts.html +2458 -0
  57. package/coverage/src/irdevice/tv.ts.html +1222 -0
  58. package/coverage/src/irdevice/vacuumcleaner.ts.html +466 -0
  59. package/coverage/src/irdevice/waterheater.ts.html +469 -0
  60. package/coverage/src/platform.ts.html +8776 -0
  61. package/coverage/src/settings.ts.html +934 -0
  62. package/coverage/src/utils.ts.html +2092 -0
  63. package/dist/{device → devices-hap}/airpurifier.d.ts +3 -3
  64. package/dist/devices-hap/airpurifier.d.ts.map +1 -0
  65. package/dist/devices-hap/airpurifier.js.map +1 -0
  66. package/dist/{device → devices-hap}/blindtilt.d.ts +3 -3
  67. package/dist/devices-hap/blindtilt.d.ts.map +1 -0
  68. package/dist/{device → devices-hap}/blindtilt.js +6 -1
  69. package/dist/devices-hap/blindtilt.js.map +1 -0
  70. package/dist/{device → devices-hap}/bot.d.ts +3 -3
  71. package/dist/devices-hap/bot.d.ts.map +1 -0
  72. package/dist/devices-hap/bot.js.map +1 -0
  73. package/dist/{device → devices-hap}/ceilinglight.d.ts +3 -3
  74. package/dist/devices-hap/ceilinglight.d.ts.map +1 -0
  75. package/dist/devices-hap/ceilinglight.js.map +1 -0
  76. package/dist/{device → devices-hap}/colorbulb.d.ts +3 -3
  77. package/dist/devices-hap/colorbulb.d.ts.map +1 -0
  78. package/dist/devices-hap/colorbulb.js.map +1 -0
  79. package/dist/{device → devices-hap}/contact.d.ts +3 -3
  80. package/dist/devices-hap/contact.d.ts.map +1 -0
  81. package/dist/devices-hap/contact.js.map +1 -0
  82. package/dist/{device → devices-hap}/curtain.d.ts +3 -3
  83. package/dist/devices-hap/curtain.d.ts.map +1 -0
  84. package/dist/{device → devices-hap}/curtain.js +32 -8
  85. package/dist/devices-hap/curtain.js.map +1 -0
  86. package/dist/{device → devices-hap}/device.d.ts +3 -3
  87. package/dist/devices-hap/device.d.ts.map +1 -0
  88. package/dist/{device → devices-hap}/device.js +10 -4
  89. package/dist/devices-hap/device.js.map +1 -0
  90. package/dist/{device → devices-hap}/fan.d.ts +3 -3
  91. package/dist/devices-hap/fan.d.ts.map +1 -0
  92. package/dist/devices-hap/fan.js.map +1 -0
  93. package/dist/{device → devices-hap}/hub.d.ts +5 -5
  94. package/dist/devices-hap/hub.d.ts.map +1 -0
  95. package/dist/{device → devices-hap}/hub.js +2 -1
  96. package/dist/devices-hap/hub.js.map +1 -0
  97. package/dist/{device → devices-hap}/humidifier.d.ts +3 -3
  98. package/dist/devices-hap/humidifier.d.ts.map +1 -0
  99. package/dist/devices-hap/humidifier.js.map +1 -0
  100. package/dist/{device → devices-hap}/iosensor.d.ts +3 -3
  101. package/dist/devices-hap/iosensor.d.ts.map +1 -0
  102. package/dist/devices-hap/iosensor.js.map +1 -0
  103. package/dist/{device → devices-hap}/lightstrip.d.ts +3 -3
  104. package/dist/devices-hap/lightstrip.d.ts.map +1 -0
  105. package/dist/devices-hap/lightstrip.js.map +1 -0
  106. package/dist/{device → devices-hap}/lock.d.ts +3 -3
  107. package/dist/devices-hap/lock.d.ts.map +1 -0
  108. package/dist/devices-hap/lock.js.map +1 -0
  109. package/dist/{device → devices-hap}/meter.d.ts +3 -3
  110. package/dist/devices-hap/meter.d.ts.map +1 -0
  111. package/dist/devices-hap/meter.js.map +1 -0
  112. package/dist/{device → devices-hap}/meterplus.d.ts +3 -3
  113. package/dist/devices-hap/meterplus.d.ts.map +1 -0
  114. package/dist/devices-hap/meterplus.js.map +1 -0
  115. package/dist/{device → devices-hap}/meterpro.d.ts +3 -3
  116. package/dist/devices-hap/meterpro.d.ts.map +1 -0
  117. package/dist/{device → devices-hap}/meterpro.js +16 -3
  118. package/dist/devices-hap/meterpro.js.map +1 -0
  119. package/dist/{device → devices-hap}/motion.d.ts +3 -3
  120. package/dist/devices-hap/motion.d.ts.map +1 -0
  121. package/dist/devices-hap/motion.js.map +1 -0
  122. package/dist/{device → devices-hap}/plug.d.ts +3 -3
  123. package/dist/devices-hap/plug.d.ts.map +1 -0
  124. package/dist/devices-hap/plug.js.map +1 -0
  125. package/dist/{device → devices-hap}/relayswitch.d.ts +3 -3
  126. package/dist/devices-hap/relayswitch.d.ts.map +1 -0
  127. package/dist/devices-hap/relayswitch.js.map +1 -0
  128. package/dist/{device → devices-hap}/robotvacuumcleaner.d.ts +3 -3
  129. package/dist/devices-hap/robotvacuumcleaner.d.ts.map +1 -0
  130. package/dist/devices-hap/robotvacuumcleaner.js.map +1 -0
  131. package/dist/{device → devices-hap}/waterdetector.d.ts +3 -3
  132. package/dist/devices-hap/waterdetector.d.ts.map +1 -0
  133. package/dist/devices-hap/waterdetector.js.map +1 -0
  134. package/dist/devices-matter/BaseMatterAccessory.d.ts +63 -0
  135. package/dist/devices-matter/BaseMatterAccessory.d.ts.map +1 -0
  136. package/dist/devices-matter/BaseMatterAccessory.js +100 -0
  137. package/dist/devices-matter/BaseMatterAccessory.js.map +1 -0
  138. package/dist/devices-matter/ColorLightAccessory.d.ts +18 -0
  139. package/dist/devices-matter/ColorLightAccessory.d.ts.map +1 -0
  140. package/dist/devices-matter/ColorLightAccessory.js +96 -0
  141. package/dist/devices-matter/ColorLightAccessory.js.map +1 -0
  142. package/dist/devices-matter/ColorTemperatureLightAccessory.d.ts +16 -0
  143. package/dist/devices-matter/ColorTemperatureLightAccessory.d.ts.map +1 -0
  144. package/dist/devices-matter/ColorTemperatureLightAccessory.js +83 -0
  145. package/dist/devices-matter/ColorTemperatureLightAccessory.js.map +1 -0
  146. package/dist/devices-matter/ContactSensorAccessory.d.ts +10 -0
  147. package/dist/devices-matter/ContactSensorAccessory.d.ts.map +1 -0
  148. package/dist/devices-matter/ContactSensorAccessory.js +31 -0
  149. package/dist/devices-matter/ContactSensorAccessory.js.map +1 -0
  150. package/dist/devices-matter/DimmableLightAccessory.d.ts +56 -0
  151. package/dist/devices-matter/DimmableLightAccessory.d.ts.map +1 -0
  152. package/dist/devices-matter/DimmableLightAccessory.js +170 -0
  153. package/dist/devices-matter/DimmableLightAccessory.js.map +1 -0
  154. package/dist/devices-matter/DoorLockAccessory.d.ts +12 -0
  155. package/dist/devices-matter/DoorLockAccessory.d.ts.map +1 -0
  156. package/dist/devices-matter/DoorLockAccessory.js +47 -0
  157. package/dist/devices-matter/DoorLockAccessory.js.map +1 -0
  158. package/dist/devices-matter/ExtendedColorLightAccessory.d.ts +19 -0
  159. package/dist/devices-matter/ExtendedColorLightAccessory.d.ts.map +1 -0
  160. package/dist/devices-matter/ExtendedColorLightAccessory.js +108 -0
  161. package/dist/devices-matter/ExtendedColorLightAccessory.js.map +1 -0
  162. package/dist/devices-matter/FanAccessory.d.ts +14 -0
  163. package/dist/devices-matter/FanAccessory.d.ts.map +1 -0
  164. package/dist/devices-matter/FanAccessory.js +73 -0
  165. package/dist/devices-matter/FanAccessory.js.map +1 -0
  166. package/dist/devices-matter/HumiditySensorAccessory.d.ts +10 -0
  167. package/dist/devices-matter/HumiditySensorAccessory.d.ts.map +1 -0
  168. package/dist/devices-matter/HumiditySensorAccessory.js +33 -0
  169. package/dist/devices-matter/HumiditySensorAccessory.js.map +1 -0
  170. package/dist/devices-matter/LeakSensorAccessory.d.ts +10 -0
  171. package/dist/devices-matter/LeakSensorAccessory.d.ts.map +1 -0
  172. package/dist/devices-matter/LeakSensorAccessory.js +30 -0
  173. package/dist/devices-matter/LeakSensorAccessory.js.map +1 -0
  174. package/dist/devices-matter/LightSensorAccessory.d.ts +10 -0
  175. package/dist/devices-matter/LightSensorAccessory.d.ts.map +1 -0
  176. package/dist/devices-matter/LightSensorAccessory.js +33 -0
  177. package/dist/devices-matter/LightSensorAccessory.js.map +1 -0
  178. package/dist/devices-matter/OccupancySensorAccessory.d.ts +10 -0
  179. package/dist/devices-matter/OccupancySensorAccessory.d.ts.map +1 -0
  180. package/dist/devices-matter/OccupancySensorAccessory.js +43 -0
  181. package/dist/devices-matter/OccupancySensorAccessory.js.map +1 -0
  182. package/dist/devices-matter/OnOffLightAccessory.d.ts +36 -0
  183. package/dist/devices-matter/OnOffLightAccessory.d.ts.map +1 -0
  184. package/dist/devices-matter/OnOffLightAccessory.js +117 -0
  185. package/dist/devices-matter/OnOffLightAccessory.js.map +1 -0
  186. package/dist/devices-matter/OnOffOutletAccessory.d.ts +12 -0
  187. package/dist/devices-matter/OnOffOutletAccessory.d.ts.map +1 -0
  188. package/dist/devices-matter/OnOffOutletAccessory.js +43 -0
  189. package/dist/devices-matter/OnOffOutletAccessory.js.map +1 -0
  190. package/dist/devices-matter/OnOffSwitchAccessory.d.ts +12 -0
  191. package/dist/devices-matter/OnOffSwitchAccessory.d.ts.map +1 -0
  192. package/dist/devices-matter/OnOffSwitchAccessory.js +43 -0
  193. package/dist/devices-matter/OnOffSwitchAccessory.js.map +1 -0
  194. package/dist/devices-matter/RoboticVacuumAccessory.d.ts +66 -0
  195. package/dist/devices-matter/RoboticVacuumAccessory.d.ts.map +1 -0
  196. package/dist/devices-matter/RoboticVacuumAccessory.js +402 -0
  197. package/dist/devices-matter/RoboticVacuumAccessory.js.map +1 -0
  198. package/dist/devices-matter/SmokeCOAlarmAccessory.d.ts +11 -0
  199. package/dist/devices-matter/SmokeCOAlarmAccessory.d.ts.map +1 -0
  200. package/dist/devices-matter/SmokeCOAlarmAccessory.js +49 -0
  201. package/dist/devices-matter/SmokeCOAlarmAccessory.js.map +1 -0
  202. package/dist/devices-matter/TemperatureSensorAccessory.d.ts +10 -0
  203. package/dist/devices-matter/TemperatureSensorAccessory.d.ts.map +1 -0
  204. package/dist/devices-matter/TemperatureSensorAccessory.js +33 -0
  205. package/dist/devices-matter/TemperatureSensorAccessory.js.map +1 -0
  206. package/dist/devices-matter/ThermostatAccessory.d.ts +17 -0
  207. package/dist/devices-matter/ThermostatAccessory.d.ts.map +1 -0
  208. package/dist/devices-matter/ThermostatAccessory.js +87 -0
  209. package/dist/devices-matter/ThermostatAccessory.js.map +1 -0
  210. package/dist/devices-matter/VenetianBlindAccessory.d.ts +17 -0
  211. package/dist/devices-matter/VenetianBlindAccessory.d.ts.map +1 -0
  212. package/dist/devices-matter/VenetianBlindAccessory.js +100 -0
  213. package/dist/devices-matter/VenetianBlindAccessory.js.map +1 -0
  214. package/dist/devices-matter/WindowBlindAccessory.d.ts +15 -0
  215. package/dist/devices-matter/WindowBlindAccessory.d.ts.map +1 -0
  216. package/dist/devices-matter/WindowBlindAccessory.js +81 -0
  217. package/dist/devices-matter/WindowBlindAccessory.js.map +1 -0
  218. package/dist/devices-matter/custom/PowerStripAccessory.d.ts +97 -0
  219. package/dist/devices-matter/custom/PowerStripAccessory.d.ts.map +1 -0
  220. package/dist/devices-matter/custom/PowerStripAccessory.js +265 -0
  221. package/dist/devices-matter/custom/PowerStripAccessory.js.map +1 -0
  222. package/dist/devices-matter/custom/index.d.ts +8 -0
  223. package/dist/devices-matter/custom/index.d.ts.map +1 -0
  224. package/dist/devices-matter/custom/index.js +8 -0
  225. package/dist/devices-matter/custom/index.js.map +1 -0
  226. package/dist/devices-matter/index.d.ts +29 -0
  227. package/dist/devices-matter/index.d.ts.map +1 -0
  228. package/dist/devices-matter/index.js +28 -0
  229. package/dist/devices-matter/index.js.map +1 -0
  230. package/dist/homebridge-ui/public/index.html +1 -1
  231. package/dist/index.d.ts.map +1 -1
  232. package/dist/index.js +7 -2
  233. package/dist/index.js.map +1 -1
  234. package/dist/index.test.js +2 -2
  235. package/dist/index.test.js.map +1 -1
  236. package/dist/irdevice/airconditioner.d.ts +3 -3
  237. package/dist/irdevice/airconditioner.d.ts.map +1 -1
  238. package/dist/irdevice/airconditioner.js.map +1 -1
  239. package/dist/irdevice/airpurifier.d.ts +3 -3
  240. package/dist/irdevice/airpurifier.d.ts.map +1 -1
  241. package/dist/irdevice/airpurifier.js.map +1 -1
  242. package/dist/irdevice/camera.d.ts +3 -3
  243. package/dist/irdevice/camera.d.ts.map +1 -1
  244. package/dist/irdevice/camera.js.map +1 -1
  245. package/dist/irdevice/fan.d.ts +3 -3
  246. package/dist/irdevice/fan.d.ts.map +1 -1
  247. package/dist/irdevice/fan.js.map +1 -1
  248. package/dist/irdevice/irdevice.d.ts +3 -3
  249. package/dist/irdevice/irdevice.d.ts.map +1 -1
  250. package/dist/irdevice/irdevice.js.map +1 -1
  251. package/dist/irdevice/light.d.ts +3 -3
  252. package/dist/irdevice/light.d.ts.map +1 -1
  253. package/dist/irdevice/light.js.map +1 -1
  254. package/dist/irdevice/other.d.ts +3 -3
  255. package/dist/irdevice/other.d.ts.map +1 -1
  256. package/dist/irdevice/other.js.map +1 -1
  257. package/dist/irdevice/tv.d.ts +3 -3
  258. package/dist/irdevice/tv.d.ts.map +1 -1
  259. package/dist/irdevice/tv.js.map +1 -1
  260. package/dist/irdevice/vacuumcleaner.d.ts +3 -3
  261. package/dist/irdevice/vacuumcleaner.d.ts.map +1 -1
  262. package/dist/irdevice/vacuumcleaner.js.map +1 -1
  263. package/dist/irdevice/waterheater.d.ts +3 -3
  264. package/dist/irdevice/waterheater.d.ts.map +1 -1
  265. package/dist/irdevice/waterheater.js.map +1 -1
  266. package/dist/{platform.d.ts → platform-hap.d.ts} +2 -2
  267. package/dist/platform-hap.d.ts.map +1 -0
  268. package/dist/{platform.js → platform-hap.js} +32 -31
  269. package/dist/{platform.js.map → platform-hap.js.map} +1 -1
  270. package/dist/platform-matter.d.ts +75 -0
  271. package/dist/platform-matter.d.ts.map +1 -0
  272. package/dist/platform-matter.js +362 -0
  273. package/dist/platform-matter.js.map +1 -0
  274. package/dist/verifyconfig.test.d.ts +2 -0
  275. package/dist/verifyconfig.test.d.ts.map +1 -0
  276. package/dist/verifyconfig.test.js +167 -0
  277. package/dist/verifyconfig.test.js.map +1 -0
  278. package/docs/index.html +20 -11
  279. package/docs/variables/default.html +1 -1
  280. package/package.json +7 -7
  281. package/src/{device → devices-hap}/airpurifier.ts +2 -2
  282. package/src/{device → devices-hap}/blindtilt.ts +7 -3
  283. package/src/{device → devices-hap}/bot.ts +2 -2
  284. package/src/{device → devices-hap}/ceilinglight.ts +2 -2
  285. package/src/{device → devices-hap}/colorbulb.ts +2 -2
  286. package/src/{device → devices-hap}/contact.ts +2 -2
  287. package/src/{device → devices-hap}/curtain.ts +32 -10
  288. package/src/{device → devices-hap}/device.ts +12 -6
  289. package/src/{device → devices-hap}/fan.ts +2 -2
  290. package/src/{device → devices-hap}/hub.ts +7 -6
  291. package/src/{device → devices-hap}/humidifier.ts +2 -2
  292. package/src/{device → devices-hap}/iosensor.ts +2 -2
  293. package/src/{device → devices-hap}/lightstrip.ts +2 -2
  294. package/src/{device → devices-hap}/lock.ts +2 -2
  295. package/src/{device → devices-hap}/meter.ts +2 -2
  296. package/src/{device → devices-hap}/meterplus.ts +2 -2
  297. package/src/{device → devices-hap}/meterpro.ts +18 -5
  298. package/src/{device → devices-hap}/motion.ts +2 -2
  299. package/src/{device → devices-hap}/plug.ts +2 -2
  300. package/src/{device → devices-hap}/relayswitch.ts +2 -2
  301. package/src/{device → devices-hap}/robotvacuumcleaner.ts +2 -2
  302. package/src/{device → devices-hap}/waterdetector.ts +2 -2
  303. package/src/devices-matter/BaseMatterAccessory.ts +131 -0
  304. package/src/devices-matter/ColorLightAccessory.ts +113 -0
  305. package/src/devices-matter/ColorTemperatureLightAccessory.ts +98 -0
  306. package/src/devices-matter/ContactSensorAccessory.ts +37 -0
  307. package/src/devices-matter/DimmableLightAccessory.ts +196 -0
  308. package/src/devices-matter/DoorLockAccessory.ts +56 -0
  309. package/src/devices-matter/ExtendedColorLightAccessory.ts +127 -0
  310. package/src/devices-matter/FanAccessory.ts +87 -0
  311. package/src/devices-matter/HumiditySensorAccessory.ts +39 -0
  312. package/src/devices-matter/LeakSensorAccessory.ts +36 -0
  313. package/src/devices-matter/LightSensorAccessory.ts +39 -0
  314. package/src/devices-matter/OccupancySensorAccessory.ts +52 -0
  315. package/src/devices-matter/OnOffLightAccessory.ts +133 -0
  316. package/src/devices-matter/OnOffOutletAccessory.ts +52 -0
  317. package/src/devices-matter/OnOffSwitchAccessory.ts +52 -0
  318. package/src/devices-matter/RoboticVacuumAccessory.ts +484 -0
  319. package/src/devices-matter/SmokeCOAlarmAccessory.ts +59 -0
  320. package/src/devices-matter/TemperatureSensorAccessory.ts +39 -0
  321. package/src/devices-matter/ThermostatAccessory.ts +105 -0
  322. package/src/devices-matter/VenetianBlindAccessory.ts +118 -0
  323. package/src/devices-matter/WindowBlindAccessory.ts +94 -0
  324. package/src/devices-matter/custom/PowerStripAccessory.ts +309 -0
  325. package/src/devices-matter/custom/index.ts +8 -0
  326. package/src/devices-matter/index.ts +29 -0
  327. package/src/homebridge-ui/public/index.html +1 -1
  328. package/src/index.test.ts +2 -2
  329. package/src/index.ts +7 -2
  330. package/src/irdevice/airconditioner.ts +2 -2
  331. package/src/irdevice/airpurifier.ts +2 -2
  332. package/src/irdevice/camera.ts +2 -2
  333. package/src/irdevice/fan.ts +2 -2
  334. package/src/irdevice/irdevice.ts +2 -2
  335. package/src/irdevice/light.ts +2 -2
  336. package/src/irdevice/other.ts +2 -2
  337. package/src/irdevice/tv.ts +2 -2
  338. package/src/irdevice/vacuumcleaner.ts +2 -2
  339. package/src/irdevice/waterheater.ts +2 -2
  340. package/src/{platform.ts → platform-hap.ts} +31 -30
  341. package/src/platform-matter.ts +450 -0
  342. package/src/verifyconfig.test.ts +197 -0
  343. package/tsconfig.json +2 -1
  344. package/typedoc.json +1 -0
  345. package/.github/workflows/build.yml +0 -18
  346. package/.github/workflows/changerelease.yml +0 -11
  347. package/.github/workflows/labeler.yml +0 -16
  348. package/.github/workflows/release-drafter.yml +0 -14
  349. package/dist/device/airpurifier.d.ts.map +0 -1
  350. package/dist/device/airpurifier.js.map +0 -1
  351. package/dist/device/blindtilt.d.ts.map +0 -1
  352. package/dist/device/blindtilt.js.map +0 -1
  353. package/dist/device/bot.d.ts.map +0 -1
  354. package/dist/device/bot.js.map +0 -1
  355. package/dist/device/ceilinglight.d.ts.map +0 -1
  356. package/dist/device/ceilinglight.js.map +0 -1
  357. package/dist/device/colorbulb.d.ts.map +0 -1
  358. package/dist/device/colorbulb.js.map +0 -1
  359. package/dist/device/contact.d.ts.map +0 -1
  360. package/dist/device/contact.js.map +0 -1
  361. package/dist/device/curtain.d.ts.map +0 -1
  362. package/dist/device/curtain.js.map +0 -1
  363. package/dist/device/device.d.ts.map +0 -1
  364. package/dist/device/device.js.map +0 -1
  365. package/dist/device/fan.d.ts.map +0 -1
  366. package/dist/device/fan.js.map +0 -1
  367. package/dist/device/hub.d.ts.map +0 -1
  368. package/dist/device/hub.js.map +0 -1
  369. package/dist/device/humidifier.d.ts.map +0 -1
  370. package/dist/device/humidifier.js.map +0 -1
  371. package/dist/device/iosensor.d.ts.map +0 -1
  372. package/dist/device/iosensor.js.map +0 -1
  373. package/dist/device/lightstrip.d.ts.map +0 -1
  374. package/dist/device/lightstrip.js.map +0 -1
  375. package/dist/device/lock.d.ts.map +0 -1
  376. package/dist/device/lock.js.map +0 -1
  377. package/dist/device/meter.d.ts.map +0 -1
  378. package/dist/device/meter.js.map +0 -1
  379. package/dist/device/meterplus.d.ts.map +0 -1
  380. package/dist/device/meterplus.js.map +0 -1
  381. package/dist/device/meterpro.d.ts.map +0 -1
  382. package/dist/device/meterpro.js.map +0 -1
  383. package/dist/device/motion.d.ts.map +0 -1
  384. package/dist/device/motion.js.map +0 -1
  385. package/dist/device/plug.d.ts.map +0 -1
  386. package/dist/device/plug.js.map +0 -1
  387. package/dist/device/relayswitch.d.ts.map +0 -1
  388. package/dist/device/relayswitch.js.map +0 -1
  389. package/dist/device/robotvacuumcleaner.d.ts.map +0 -1
  390. package/dist/device/robotvacuumcleaner.js.map +0 -1
  391. package/dist/device/waterdetector.d.ts.map +0 -1
  392. package/dist/device/waterdetector.js.map +0 -1
  393. package/dist/platform.d.ts.map +0 -1
  394. /package/dist/{device → devices-hap}/airpurifier.js +0 -0
  395. /package/dist/{device → devices-hap}/bot.js +0 -0
  396. /package/dist/{device → devices-hap}/ceilinglight.js +0 -0
  397. /package/dist/{device → devices-hap}/colorbulb.js +0 -0
  398. /package/dist/{device → devices-hap}/contact.js +0 -0
  399. /package/dist/{device → devices-hap}/fan.js +0 -0
  400. /package/dist/{device → devices-hap}/humidifier.js +0 -0
  401. /package/dist/{device → devices-hap}/iosensor.js +0 -0
  402. /package/dist/{device → devices-hap}/lightstrip.js +0 -0
  403. /package/dist/{device → devices-hap}/lock.js +0 -0
  404. /package/dist/{device → devices-hap}/meter.js +0 -0
  405. /package/dist/{device → devices-hap}/meterplus.js +0 -0
  406. /package/dist/{device → devices-hap}/motion.js +0 -0
  407. /package/dist/{device → devices-hap}/plug.js +0 -0
  408. /package/dist/{device → devices-hap}/relayswitch.js +0 -0
  409. /package/dist/{device → devices-hap}/robotvacuumcleaner.js +0 -0
  410. /package/dist/{device → devices-hap}/waterdetector.js +0 -0
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Door Lock Accessory Class
3
+ */
4
+ import { BaseMatterAccessory } from './BaseMatterAccessory.js';
5
+ export class DoorLockAccessory extends BaseMatterAccessory {
6
+ constructor(api, log) {
7
+ const serialNumber = 'LOCK-001';
8
+ super(api, log, {
9
+ uuid: api.matter.uuid.generate(serialNumber),
10
+ displayName: 'Door Lock',
11
+ deviceType: api.matter.deviceTypes.DoorLock,
12
+ serialNumber,
13
+ manufacturer: 'Homebridge Matter',
14
+ model: 'HB-MATTER-LOCK-DOOR',
15
+ firmwareRevision: '2.0.0',
16
+ hardwareRevision: '1.0.0',
17
+ clusters: {
18
+ doorLock: {
19
+ lockState: api.matter.types.DoorLock.LockState.Unlocked,
20
+ lockType: api.matter.types.DoorLock.LockType.DeadBolt,
21
+ actuatorEnabled: true,
22
+ operatingMode: api.matter.types.DoorLock.OperatingMode.Normal,
23
+ },
24
+ },
25
+ handlers: {
26
+ doorLock: {
27
+ lockDoor: async () => this.handleLock(),
28
+ unlockDoor: async () => this.handleUnlock(),
29
+ },
30
+ },
31
+ });
32
+ this.logInfo('initialized.');
33
+ }
34
+ async handleLock() {
35
+ this.logInfo('locked.');
36
+ }
37
+ async handleUnlock() {
38
+ this.logInfo('unlocked.');
39
+ }
40
+ updateLockState(state) {
41
+ // 0 = Not fully locked, 1 = Locked, 2 = Unlocked
42
+ this.updateState('doorLock', { lockState: state });
43
+ const stateStr = ['Not Fully Locked', 'Locked', 'Unlocked'][state];
44
+ this.logInfo(`lock state: ${stateStr}.`);
45
+ }
46
+ }
47
+ //# sourceMappingURL=DoorLockAccessory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DoorLockAccessory.js","sourceRoot":"","sources":["../../src/devices-matter/DoorLockAccessory.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAE9D,MAAM,OAAO,iBAAkB,SAAQ,mBAAmB;IACxD,YAAY,GAAQ,EAAE,GAAW;QAC/B,MAAM,YAAY,GAAG,UAAU,CAAA;QAC/B,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE;YACd,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;YAC5C,WAAW,EAAE,WAAW;YACxB,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ;YAC3C,YAAY;YACZ,YAAY,EAAE,mBAAmB;YACjC,KAAK,EAAE,qBAAqB;YAC5B,gBAAgB,EAAE,OAAO;YACzB,gBAAgB,EAAE,OAAO;YAEzB,QAAQ,EAAE;gBACR,QAAQ,EAAE;oBACR,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ;oBACvD,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ;oBACrD,eAAe,EAAE,IAAI;oBACrB,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,MAAM;iBAC9D;aACF;YAED,QAAQ,EAAE;gBACR,QAAQ,EAAE;oBACR,QAAQ,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE;oBACvC,UAAU,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,YAAY,EAAE;iBAC5C;aACF;SACF,CAAC,CAAA;QAEF,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAA;IAC9B,CAAC;IAEO,KAAK,CAAC,UAAU;QACtB,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;IACzB,CAAC;IAEO,KAAK,CAAC,YAAY;QACxB,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;IAC3B,CAAC;IAEM,eAAe,CAAC,KAAgB;QACrC,iDAAiD;QACjD,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAA;QAClD,MAAM,QAAQ,GAAG,CAAC,kBAAkB,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC,KAAK,CAAC,CAAA;QAClE,IAAI,CAAC,OAAO,CAAC,eAAe,QAAQ,GAAG,CAAC,CAAA;IAC1C,CAAC;CACF"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Extended Color Light Accessory Class (HS+CCT)
3
+ * Hue, Saturation, and Color Temperature control
4
+ */
5
+ import type { API, Logger } from 'homebridge';
6
+ import { BaseMatterAccessory } from './BaseMatterAccessory.js';
7
+ export declare class ExtendedColorLightAccessory extends BaseMatterAccessory {
8
+ constructor(api: API, log: Logger);
9
+ private handleOn;
10
+ private handleOff;
11
+ private handleSetLevel;
12
+ private handleSetColor;
13
+ private handleSetHueSaturation;
14
+ private handleSetColorTemperature;
15
+ updateOnOffState(isOn: boolean): void;
16
+ updateBrightness(percent: number): void;
17
+ updateHueSaturation(hue: number, saturation: number): void;
18
+ }
19
+ //# sourceMappingURL=ExtendedColorLightAccessory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExtendedColorLightAccessory.d.ts","sourceRoot":"","sources":["../../src/devices-matter/ExtendedColorLightAccessory.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,EAAkB,MAAM,YAAY,CAAA;AAE7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAE9D,qBAAa,2BAA4B,SAAQ,mBAAmB;gBACtD,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM;YAuDnB,QAAQ;YAKR,SAAS;YAKT,cAAc;YAQd,cAAc;YASd,sBAAsB;YAStB,yBAAyB;IAQhC,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAIrC,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAKvC,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;CAQlE"}
@@ -0,0 +1,108 @@
1
+ /**
2
+ * Extended Color Light Accessory Class (HS+CCT)
3
+ * Hue, Saturation, and Color Temperature control
4
+ */
5
+ import { BaseMatterAccessory } from './BaseMatterAccessory.js';
6
+ export class ExtendedColorLightAccessory extends BaseMatterAccessory {
7
+ constructor(api, log) {
8
+ const serialNumber = 'LIGHT-005';
9
+ super(api, log, {
10
+ uuid: api.matter.uuid.generate(serialNumber),
11
+ displayName: 'Extended Colour Light (HS+CCT)',
12
+ deviceType: api.matter.deviceTypes.ExtendedColorLight,
13
+ serialNumber,
14
+ manufacturer: 'Homebridge Matter',
15
+ model: 'HB-MATTER-LIGHT-EXTENDED-COLOUR',
16
+ firmwareRevision: '2.0.0',
17
+ hardwareRevision: '1.0.0',
18
+ clusters: {
19
+ onOff: { onOff: false },
20
+ levelControl: {
21
+ currentLevel: 127,
22
+ minLevel: 1,
23
+ maxLevel: 254,
24
+ },
25
+ colorControl: {
26
+ colorMode: api.matter.types.ColorControl.ColorMode.CurrentHueAndCurrentSaturation,
27
+ currentHue: 0,
28
+ currentSaturation: 254,
29
+ currentX: 41942,
30
+ currentY: 21626,
31
+ colorTemperatureMireds: 250,
32
+ colorTempPhysicalMinMireds: 147,
33
+ colorTempPhysicalMaxMireds: 454,
34
+ coupleColorTempToLevelMinMireds: 147,
35
+ },
36
+ },
37
+ handlers: {
38
+ onOff: {
39
+ on: async () => this.handleOn(),
40
+ off: async () => this.handleOff(),
41
+ },
42
+ levelControl: {
43
+ moveToLevelWithOnOff: async (request) => this.handleSetLevel(request),
44
+ },
45
+ colorControl: {
46
+ moveToColorLogic: async (request) => this.handleSetColor(request),
47
+ moveToHueAndSaturationLogic: async (request) => this.handleSetHueSaturation(request),
48
+ moveToColorTemperatureLogic: async (request) => this.handleSetColorTemperature(request),
49
+ },
50
+ },
51
+ });
52
+ this.logInfo('initialized.');
53
+ }
54
+ async handleOn() {
55
+ this.logInfo('turning on.');
56
+ // TODO: await myLightAPI.turnOn()
57
+ }
58
+ async handleOff() {
59
+ this.logInfo('turning off.');
60
+ // TODO: await myLightAPI.turnOff()
61
+ }
62
+ async handleSetLevel(request) {
63
+ this.logInfo(`MoveToLevel request: ${JSON.stringify(request)}`);
64
+ const { level } = request;
65
+ const brightnessPercent = Math.round((level / 254) * 100);
66
+ this.logInfo(`setting brightness to ${brightnessPercent}%.`);
67
+ // TODO: await myLightAPI.setBrightness(brightnessPercent)
68
+ }
69
+ async handleSetColor(request) {
70
+ this.logInfo(`MoveToColor request: ${JSON.stringify(request)}`);
71
+ const { colorX, colorY, transitionTime } = request;
72
+ const xFloat = (colorX / 65535).toFixed(4);
73
+ const yFloat = (colorY / 65535).toFixed(4);
74
+ this.logInfo(`setting xy color to (${xFloat}, ${yFloat}), ${transitionTime}ms.`);
75
+ // TODO: await myLightAPI.setXY(xFloat, yFloat, transitionTime)
76
+ }
77
+ async handleSetHueSaturation(request) {
78
+ this.logInfo(`MoveToHueAndSaturation request: ${JSON.stringify(request)}`);
79
+ const { hue, saturation, transitionTime } = request;
80
+ const hueDegrees = Math.round((hue / 254) * 360);
81
+ const saturationPercent = Math.round((saturation / 254) * 100);
82
+ this.logInfo(`setting color to ${hueDegrees}°, ${saturationPercent}%, ${transitionTime}ms.`);
83
+ // TODO: await myLightAPI.setColor(hueDegrees, saturationPercent, transitionTime)
84
+ }
85
+ async handleSetColorTemperature(request) {
86
+ this.logInfo(`MoveToColorTemperature request: ${JSON.stringify(request)}`);
87
+ const { colorTemperatureMireds, transitionTime } = request;
88
+ const kelvin = Math.round(1000000 / colorTemperatureMireds);
89
+ this.logInfo(`setting color temp to ${kelvin}k, ${transitionTime}ms.`);
90
+ // TODO: await myLightAPI.setColorTemperature(kelvin, transitionTime)
91
+ }
92
+ updateOnOffState(isOn) {
93
+ this.updateState(this.api.matter.clusterNames.OnOff, { onOff: isOn });
94
+ }
95
+ updateBrightness(percent) {
96
+ const matterLevel = Math.max(1, Math.round((percent / 100) * 254));
97
+ this.updateState(this.api.matter.clusterNames.LevelControl, { currentLevel: matterLevel });
98
+ }
99
+ updateHueSaturation(hue, saturation) {
100
+ const matterHue = Math.round((hue / 360) * 254);
101
+ const matterSat = Math.round((saturation / 100) * 254);
102
+ this.updateState(this.api.matter.clusterNames.ColorControl, {
103
+ currentHue: matterHue,
104
+ currentSaturation: matterSat,
105
+ });
106
+ }
107
+ }
108
+ //# sourceMappingURL=ExtendedColorLightAccessory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExtendedColorLightAccessory.js","sourceRoot":"","sources":["../../src/devices-matter/ExtendedColorLightAccessory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Fan Accessory Class
3
+ */
4
+ import type { API, Logger } from 'homebridge';
5
+ import { BaseMatterAccessory } from './BaseMatterAccessory.js';
6
+ export declare class FanAccessory extends BaseMatterAccessory {
7
+ constructor(api: API, log: Logger);
8
+ private handleStep;
9
+ private handleFanModeChange;
10
+ private handlePercentSettingChange;
11
+ updateFanMode(mode: number): void;
12
+ updateFanSpeed(percent: number): void;
13
+ }
14
+ //# sourceMappingURL=FanAccessory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FanAccessory.d.ts","sourceRoot":"","sources":["../../src/devices-matter/FanAccessory.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,EAAkB,MAAM,YAAY,CAAA;AAE7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAE9D,qBAAa,YAAa,SAAQ,mBAAmB;gBACvC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM;YAkCnB,UAAU;YAQV,mBAAmB;YAQnB,0BAA0B;IAgBjC,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIjC,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;CAO7C"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Fan Accessory Class
3
+ */
4
+ import { BaseMatterAccessory } from './BaseMatterAccessory.js';
5
+ export class FanAccessory extends BaseMatterAccessory {
6
+ constructor(api, log) {
7
+ const serialNumber = 'FAN-001';
8
+ super(api, log, {
9
+ uuid: api.matter.uuid.generate(serialNumber),
10
+ displayName: 'Fan',
11
+ deviceType: api.matter.deviceTypes.Fan,
12
+ serialNumber,
13
+ manufacturer: 'Homebridge Matter',
14
+ model: 'HB-MATTER-FAN',
15
+ firmwareRevision: '2.0.0',
16
+ hardwareRevision: '1.0.0',
17
+ clusters: {
18
+ fanControl: {
19
+ fanMode: api.matter.types.FanControl.FanMode.Off,
20
+ fanModeSequence: api.matter.types.FanControl.FanModeSequence.OffLowMedHigh,
21
+ percentSetting: 0,
22
+ percentCurrent: 0,
23
+ },
24
+ },
25
+ handlers: {
26
+ fanControl: {
27
+ step: async (request) => this.handleStep(request),
28
+ fanModeChange: async (request) => this.handleFanModeChange(request),
29
+ percentSettingChange: async (request) => this.handlePercentSettingChange(request),
30
+ },
31
+ },
32
+ });
33
+ this.logInfo('initialized.');
34
+ }
35
+ async handleStep(request) {
36
+ this.logInfo(`FanStep request: ${JSON.stringify(request)}`);
37
+ const { direction, wrap, lowestOff } = request;
38
+ const dirStr = direction === 0 ? 'increase' : 'decrease';
39
+ this.logInfo(`step ${dirStr} (wrap: ${wrap}, lowestoff: ${lowestOff}).`);
40
+ // TODO: await myFanAPI.step(direction, wrap, lowestOff)
41
+ }
42
+ async handleFanModeChange(request) {
43
+ this.logInfo(`FanMode change: ${JSON.stringify(request)}`);
44
+ const modeNames = ['Off', 'Low', 'Medium', 'High', 'On', 'Auto', 'Smart'];
45
+ const modeName = modeNames[request.fanMode] || `Unknown (${request.fanMode})`;
46
+ this.logInfo(`fan mode changed to: ${modeName}.`);
47
+ // TODO: await myFanAPI.setMode(request.fanMode)
48
+ }
49
+ async handlePercentSettingChange(request) {
50
+ this.logInfo(`PercentSetting change: ${JSON.stringify(request)}`);
51
+ const percent = request.percentSetting ?? 0;
52
+ const isOff = percent === 0;
53
+ const wasOff = (request.oldPercentSetting ?? 0) === 0;
54
+ if (isOff !== wasOff) {
55
+ this.logInfo(`fan turned ${isOff ? 'off' : 'on'}.`);
56
+ }
57
+ if (!isOff) {
58
+ this.logInfo(`fan speed changed to: ${percent}%.`);
59
+ }
60
+ // TODO: await myFanAPI.setSpeed(percent)
61
+ }
62
+ updateFanMode(mode) {
63
+ this.updateState(this.api.matter.clusterNames.FanControl, { fanMode: mode });
64
+ }
65
+ updateFanSpeed(percent) {
66
+ this.updateState(this.api.matter.clusterNames.FanControl, {
67
+ percentSetting: percent,
68
+ percentCurrent: percent,
69
+ });
70
+ this.logInfo(`fan speed: ${percent}%.`);
71
+ }
72
+ }
73
+ //# sourceMappingURL=FanAccessory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FanAccessory.js","sourceRoot":"","sources":["../../src/devices-matter/FanAccessory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Humidity Sensor Accessory Class
3
+ */
4
+ import type { API, Logger } from 'homebridge';
5
+ import { BaseMatterAccessory } from './BaseMatterAccessory.js';
6
+ export declare class HumiditySensorAccessory extends BaseMatterAccessory {
7
+ constructor(api: API, log: Logger);
8
+ updateHumidity(percent: number): void;
9
+ }
10
+ //# sourceMappingURL=HumiditySensorAccessory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HumiditySensorAccessory.d.ts","sourceRoot":"","sources":["../../src/devices-matter/HumiditySensorAccessory.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAE7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAE9D,qBAAa,uBAAwB,SAAQ,mBAAmB;gBAClD,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM;IAwB1B,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;CAK7C"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Humidity Sensor Accessory Class
3
+ */
4
+ import { BaseMatterAccessory } from './BaseMatterAccessory.js';
5
+ export class HumiditySensorAccessory extends BaseMatterAccessory {
6
+ constructor(api, log) {
7
+ const serialNumber = 'SENSOR-005';
8
+ super(api, log, {
9
+ uuid: api.matter.uuid.generate(serialNumber),
10
+ displayName: 'Humidity Sensor',
11
+ deviceType: api.matter.deviceTypes.HumiditySensor,
12
+ serialNumber,
13
+ manufacturer: 'Homebridge Matter',
14
+ model: 'HB-MATTER-SENSOR-HUMIDITY',
15
+ firmwareRevision: '2.0.0',
16
+ hardwareRevision: '1.0.0',
17
+ clusters: {
18
+ relativeHumidityMeasurement: {
19
+ measuredValue: 5500, // 55% (in hundredths of a percent)
20
+ minMeasuredValue: 0,
21
+ maxMeasuredValue: 10000,
22
+ },
23
+ },
24
+ });
25
+ this.logInfo('initialized.');
26
+ }
27
+ updateHumidity(percent) {
28
+ const value = Math.round(percent * 100); // convert to hundredths
29
+ this.updateState('relativeHumidityMeasurement', { measuredValue: value });
30
+ this.logInfo(`humidity: ${percent}%.`);
31
+ }
32
+ }
33
+ //# sourceMappingURL=HumiditySensorAccessory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HumiditySensorAccessory.js","sourceRoot":"","sources":["../../src/devices-matter/HumiditySensorAccessory.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAE9D,MAAM,OAAO,uBAAwB,SAAQ,mBAAmB;IAC9D,YAAY,GAAQ,EAAE,GAAW;QAC/B,MAAM,YAAY,GAAG,YAAY,CAAA;QACjC,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE;YACd,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;YAC5C,WAAW,EAAE,iBAAiB;YAC9B,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,cAAc;YACjD,YAAY;YACZ,YAAY,EAAE,mBAAmB;YACjC,KAAK,EAAE,2BAA2B;YAClC,gBAAgB,EAAE,OAAO;YACzB,gBAAgB,EAAE,OAAO;YAEzB,QAAQ,EAAE;gBACR,2BAA2B,EAAE;oBAC3B,aAAa,EAAE,IAAI,EAAE,mCAAmC;oBACxD,gBAAgB,EAAE,CAAC;oBACnB,gBAAgB,EAAE,KAAK;iBACxB;aACF;SACF,CAAC,CAAA;QAEF,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAA;IAC9B,CAAC;IAEM,cAAc,CAAC,OAAe;QACnC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG,CAAC,CAAA,CAAC,wBAAwB;QAChE,IAAI,CAAC,WAAW,CAAC,6BAA6B,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC,CAAA;QACzE,IAAI,CAAC,OAAO,CAAC,aAAa,OAAO,IAAI,CAAC,CAAA;IACxC,CAAC;CACF"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Leak Sensor Accessory Class
3
+ */
4
+ import type { API, Logger } from 'homebridge';
5
+ import { BaseMatterAccessory } from './BaseMatterAccessory.js';
6
+ export declare class LeakSensorAccessory extends BaseMatterAccessory {
7
+ constructor(api: API, log: Logger);
8
+ updateLeakState(leakDetected: boolean): void;
9
+ }
10
+ //# sourceMappingURL=LeakSensorAccessory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LeakSensorAccessory.d.ts","sourceRoot":"","sources":["../../src/devices-matter/LeakSensorAccessory.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAE7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAE9D,qBAAa,mBAAoB,SAAQ,mBAAmB;gBAC9C,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM;IAsB1B,eAAe,CAAC,YAAY,EAAE,OAAO,GAAG,IAAI;CAIpD"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Leak Sensor Accessory Class
3
+ */
4
+ import { BaseMatterAccessory } from './BaseMatterAccessory.js';
5
+ export class LeakSensorAccessory extends BaseMatterAccessory {
6
+ constructor(api, log) {
7
+ const serialNumber = 'SENSOR-007';
8
+ super(api, log, {
9
+ uuid: api.matter.uuid.generate(serialNumber),
10
+ displayName: 'Leak Sensor',
11
+ deviceType: api.matter.deviceTypes.LeakSensor,
12
+ serialNumber,
13
+ manufacturer: 'Homebridge Matter',
14
+ model: 'HB-MATTER-SENSOR-LEAK',
15
+ firmwareRevision: '2.0.0',
16
+ hardwareRevision: '1.0.0',
17
+ clusters: {
18
+ booleanState: {
19
+ stateValue: false, // false = dry, true = leak
20
+ },
21
+ },
22
+ });
23
+ this.logInfo('initialized.');
24
+ }
25
+ updateLeakState(leakDetected) {
26
+ this.updateState(this.api.matter.clusterNames.BooleanState, { stateValue: leakDetected });
27
+ this.logInfo(`leak: ${leakDetected ? 'detected' : 'none'}.`);
28
+ }
29
+ }
30
+ //# sourceMappingURL=LeakSensorAccessory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LeakSensorAccessory.js","sourceRoot":"","sources":["../../src/devices-matter/LeakSensorAccessory.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAE9D,MAAM,OAAO,mBAAoB,SAAQ,mBAAmB;IAC1D,YAAY,GAAQ,EAAE,GAAW;QAC/B,MAAM,YAAY,GAAG,YAAY,CAAA;QACjC,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE;YACd,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;YAC5C,WAAW,EAAE,aAAa;YAC1B,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,UAAU;YAC7C,YAAY;YACZ,YAAY,EAAE,mBAAmB;YACjC,KAAK,EAAE,uBAAuB;YAC9B,gBAAgB,EAAE,OAAO;YACzB,gBAAgB,EAAE,OAAO;YAEzB,QAAQ,EAAE;gBACR,YAAY,EAAE;oBACZ,UAAU,EAAE,KAAK,EAAE,2BAA2B;iBAC/C;aACF;SACF,CAAC,CAAA;QAEF,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAA;IAC9B,CAAC;IAEM,eAAe,CAAC,YAAqB;QAC1C,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,YAAY,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC,CAAA;QACzF,IAAI,CAAC,OAAO,CAAC,SAAS,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAA;IAC9D,CAAC;CACF"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Light Sensor Accessory Class
3
+ */
4
+ import type { API, Logger } from 'homebridge';
5
+ import { BaseMatterAccessory } from './BaseMatterAccessory.js';
6
+ export declare class LightSensorAccessory extends BaseMatterAccessory {
7
+ constructor(api: API, log: Logger);
8
+ updateIlluminance(lux: number): void;
9
+ }
10
+ //# sourceMappingURL=LightSensorAccessory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LightSensorAccessory.d.ts","sourceRoot":"","sources":["../../src/devices-matter/LightSensorAccessory.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAE7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAE9D,qBAAa,oBAAqB,SAAQ,mBAAmB;gBAC/C,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM;IAwB1B,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;CAK5C"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Light Sensor Accessory Class
3
+ */
4
+ import { BaseMatterAccessory } from './BaseMatterAccessory.js';
5
+ export class LightSensorAccessory extends BaseMatterAccessory {
6
+ constructor(api, log) {
7
+ const serialNumber = 'SENSOR-002';
8
+ super(api, log, {
9
+ uuid: api.matter.uuid.generate(serialNumber),
10
+ displayName: 'Light Sensor',
11
+ deviceType: api.matter.deviceTypes.LightSensor,
12
+ serialNumber,
13
+ manufacturer: 'Homebridge Matter',
14
+ model: 'HB-MATTER-SENSOR-LIGHT',
15
+ firmwareRevision: '2.0.0',
16
+ hardwareRevision: '1.0.0',
17
+ clusters: {
18
+ illuminanceMeasurement: {
19
+ measuredValue: 5000,
20
+ minMeasuredValue: 1,
21
+ maxMeasuredValue: 65534,
22
+ },
23
+ },
24
+ });
25
+ this.logInfo('initialized.');
26
+ }
27
+ updateIlluminance(lux) {
28
+ const value = Math.round(10000 * Math.log10(lux));
29
+ this.updateState('illuminanceMeasurement', { measuredValue: value });
30
+ this.logInfo(`illuminance: ${lux} lux.`);
31
+ }
32
+ }
33
+ //# sourceMappingURL=LightSensorAccessory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LightSensorAccessory.js","sourceRoot":"","sources":["../../src/devices-matter/LightSensorAccessory.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAE9D,MAAM,OAAO,oBAAqB,SAAQ,mBAAmB;IAC3D,YAAY,GAAQ,EAAE,GAAW;QAC/B,MAAM,YAAY,GAAG,YAAY,CAAA;QACjC,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE;YACd,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;YAC5C,WAAW,EAAE,cAAc;YAC3B,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,WAAW;YAC9C,YAAY;YACZ,YAAY,EAAE,mBAAmB;YACjC,KAAK,EAAE,wBAAwB;YAC/B,gBAAgB,EAAE,OAAO;YACzB,gBAAgB,EAAE,OAAO;YAEzB,QAAQ,EAAE;gBACR,sBAAsB,EAAE;oBACtB,aAAa,EAAE,IAAI;oBACnB,gBAAgB,EAAE,CAAC;oBACnB,gBAAgB,EAAE,KAAK;iBACxB;aACF;SACF,CAAC,CAAA;QAEF,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAA;IAC9B,CAAC;IAEM,iBAAiB,CAAC,GAAW;QAClC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAA;QACjD,IAAI,CAAC,WAAW,CAAC,wBAAwB,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC,CAAA;QACpE,IAAI,CAAC,OAAO,CAAC,gBAAgB,GAAG,OAAO,CAAC,CAAA;IAC1C,CAAC;CACF"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Occupancy Sensor Accessory Class
3
+ */
4
+ import type { API, Logger } from 'homebridge';
5
+ import { BaseMatterAccessory } from './BaseMatterAccessory.js';
6
+ export declare class OccupancySensorAccessory extends BaseMatterAccessory {
7
+ constructor(api: API, log: Logger);
8
+ updateOccupancyDetected(detected: boolean): void;
9
+ }
10
+ //# sourceMappingURL=OccupancySensorAccessory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OccupancySensorAccessory.d.ts","sourceRoot":"","sources":["../../src/devices-matter/OccupancySensorAccessory.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAE7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAE9D,qBAAa,wBAAyB,SAAQ,mBAAmB;gBACnD,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM;IAoC1B,uBAAuB,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI;CAMxD"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Occupancy Sensor Accessory Class
3
+ */
4
+ import { BaseMatterAccessory } from './BaseMatterAccessory.js';
5
+ export class OccupancySensorAccessory extends BaseMatterAccessory {
6
+ constructor(api, log) {
7
+ const serialNumber = 'SENSOR-003';
8
+ // Note: Matter.js API calls this "MotionSensor" but it's actually an Occupancy Sensor
9
+ const OccupancySensingServer = api.matter.deviceTypes.MotionSensor.requirements.OccupancySensingServer;
10
+ const OccupancySensorWithPIR = api.matter.deviceTypes.MotionSensor.with(OccupancySensingServer.with('PassiveInfrared'));
11
+ super(api, log, {
12
+ uuid: api.matter.uuid.generate(serialNumber),
13
+ displayName: 'Occupancy Sensor',
14
+ deviceType: OccupancySensorWithPIR,
15
+ serialNumber,
16
+ manufacturer: 'Homebridge Matter',
17
+ model: 'HB-MATTER-SENSOR-OCCUPANCY',
18
+ firmwareRevision: '2.0.0',
19
+ hardwareRevision: '1.0.0',
20
+ clusters: {
21
+ occupancySensing: {
22
+ occupancy: {
23
+ occupied: false,
24
+ },
25
+ occupancySensorType: 0,
26
+ occupancySensorTypeBitmap: {
27
+ pir: true,
28
+ ultrasonic: false,
29
+ physicalContact: false,
30
+ },
31
+ },
32
+ },
33
+ });
34
+ this.logInfo('initialized.');
35
+ }
36
+ updateOccupancyDetected(detected) {
37
+ this.updateState('occupancySensing', {
38
+ occupancy: { occupied: detected },
39
+ });
40
+ this.logInfo(`occupancy: ${detected ? 'detected' : 'clear'}.`);
41
+ }
42
+ }
43
+ //# sourceMappingURL=OccupancySensorAccessory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OccupancySensorAccessory.js","sourceRoot":"","sources":["../../src/devices-matter/OccupancySensorAccessory.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAE9D,MAAM,OAAO,wBAAyB,SAAQ,mBAAmB;IAC/D,YAAY,GAAQ,EAAE,GAAW;QAC/B,MAAM,YAAY,GAAG,YAAY,CAAA;QACjC,sFAAsF;QACtF,MAAM,sBAAsB,GAAG,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,YAAY,CAAC,sBAAsB,CAAA;QACtG,MAAM,sBAAsB,GAAG,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,CACrE,sBAAsB,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAC/C,CAAA;QAED,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE;YACd,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;YAC5C,WAAW,EAAE,kBAAkB;YAC/B,UAAU,EAAE,sBAAsB;YAClC,YAAY;YACZ,YAAY,EAAE,mBAAmB;YACjC,KAAK,EAAE,4BAA4B;YACnC,gBAAgB,EAAE,OAAO;YACzB,gBAAgB,EAAE,OAAO;YAEzB,QAAQ,EAAE;gBACR,gBAAgB,EAAE;oBAChB,SAAS,EAAE;wBACT,QAAQ,EAAE,KAAK;qBAChB;oBACD,mBAAmB,EAAE,CAAC;oBACtB,yBAAyB,EAAE;wBACzB,GAAG,EAAE,IAAI;wBACT,UAAU,EAAE,KAAK;wBACjB,eAAe,EAAE,KAAK;qBACvB;iBACF;aACF;SACF,CAAC,CAAA;QAEF,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAA;IAC9B,CAAC;IAEM,uBAAuB,CAAC,QAAiB;QAC9C,IAAI,CAAC,WAAW,CAAC,kBAAkB,EAAE;YACnC,SAAS,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE;SAClC,CAAC,CAAA;QACF,IAAI,CAAC,OAAO,CAAC,cAAc,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAA;IAChE,CAAC;CACF"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * On/Off Light Accessory Class
3
+ *
4
+ * Example implementation of a device class that extends BaseMatterAccessory.
5
+ * This shows the pattern for creating device-specific classes.
6
+ */
7
+ import type { API, Logger } from 'homebridge';
8
+ import { BaseMatterAccessory } from './BaseMatterAccessory.js';
9
+ /**
10
+ * On/Off Light Device Class
11
+ *
12
+ * This class represents an on/off light accessory.
13
+ * It extends BaseMatterAccessory to inherit common functionality.
14
+ */
15
+ export declare class OnOffLightAccessory extends BaseMatterAccessory {
16
+ constructor(api: API, log: Logger);
17
+ /**
18
+ * Handle the "on" command from Matter
19
+ */
20
+ private handleOnCommand;
21
+ /**
22
+ * Handle the "off" command from Matter
23
+ */
24
+ private handleOffCommand;
25
+ /**
26
+ * Update the on/off state from external source
27
+ * Call this when your physical device state changes externally
28
+ */
29
+ updateOnOffState(isOn: boolean): void;
30
+ /**
31
+ * Example: Start monitoring external state changes
32
+ * This shows how you might set up event listeners or polling
33
+ */
34
+ startMonitoring(): void;
35
+ }
36
+ //# sourceMappingURL=OnOffLightAccessory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OnOffLightAccessory.d.ts","sourceRoot":"","sources":["../../src/devices-matter/OnOffLightAccessory.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAE7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAE9D;;;;;GAKG;AACH,qBAAa,mBAAoB,SAAQ,mBAAmB;gBAC9C,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM;IAsCjC;;OAEG;YACW,eAAe;IAoB7B;;OAEG;YACW,gBAAgB;IAgB9B;;;OAGG;IACI,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAK5C;;;OAGG;IACI,eAAe,IAAI,IAAI;CAqB/B"}