@switchbot/homebridge-switchbot 5.0.0-beta.7 → 5.0.0-beta.71

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 (446) hide show
  1. package/.github/ISSUE_TEMPLATE/e2e-verification.md +36 -0
  2. package/.github/workflows/ci.yml +61 -0
  3. package/.github/workflows/manual-e2e.yml +103 -0
  4. package/CHANGELOG.md +35 -0
  5. package/E2E-VERIFICATION.md +121 -0
  6. package/MIGRATION.md +44 -0
  7. package/README.md +56 -3
  8. package/config.schema.json +99 -14823
  9. package/dist/deviceFactory.d.ts +13 -0
  10. package/dist/deviceFactory.d.ts.map +1 -0
  11. package/dist/deviceFactory.js +81 -0
  12. package/dist/deviceFactory.js.map +1 -0
  13. package/dist/devices/deviceBase.d.ts +50 -0
  14. package/dist/devices/deviceBase.d.ts.map +1 -0
  15. package/dist/devices/deviceBase.js +119 -0
  16. package/dist/devices/deviceBase.js.map +1 -0
  17. package/dist/devices/genericDevice.d.ts +283 -0
  18. package/dist/devices/genericDevice.d.ts.map +1 -0
  19. package/dist/devices/genericDevice.js +1035 -0
  20. package/dist/devices/genericDevice.js.map +1 -0
  21. package/dist/homebridge-ui/public/index.html +77 -245
  22. package/dist/homebridge-ui/server.d.ts +3 -1
  23. package/dist/homebridge-ui/server.d.ts.map +1 -1
  24. package/dist/homebridge-ui/server.js +42 -36
  25. package/dist/homebridge-ui/server.js.map +1 -1
  26. package/dist/index.d.ts.map +1 -1
  27. package/dist/index.js +5 -12
  28. package/dist/index.js.map +1 -1
  29. package/dist/platform.d.ts +27 -0
  30. package/dist/platform.d.ts.map +1 -0
  31. package/dist/platform.js +404 -0
  32. package/dist/platform.js.map +1 -0
  33. package/dist/settings.d.ts +10 -249
  34. package/dist/settings.d.ts.map +1 -1
  35. package/dist/settings.js +5 -30
  36. package/dist/settings.js.map +1 -1
  37. package/dist/switchbotClient.d.ts +32 -0
  38. package/dist/switchbotClient.d.ts.map +1 -0
  39. package/dist/switchbotClient.js +259 -0
  40. package/dist/switchbotClient.js.map +1 -0
  41. package/dist/utils.d.ts +39 -50
  42. package/dist/utils.d.ts.map +1 -1
  43. package/dist/utils.js +39 -688
  44. package/dist/utils.js.map +1 -1
  45. package/docs/assets/highlight.css +14 -0
  46. package/docs/assets/icons.js +1 -1
  47. package/docs/assets/icons.svg +1 -1
  48. package/docs/assets/main.js +2 -2
  49. package/docs/assets/style.css +3 -3
  50. package/docs/index.html +77 -13
  51. package/docs/variables/default.html +1 -1
  52. package/package.json +22 -21
  53. package/scripts/e2e/README.md +25 -0
  54. package/scripts/e2e/curtain-e2e.sh +70 -0
  55. package/scripts/e2e/fan-e2e.sh +75 -0
  56. package/scripts/e2e/light-advanced-e2e.sh +97 -0
  57. package/scripts/e2e/light-e2e.sh +75 -0
  58. package/scripts/e2e/list-accessories.sh +19 -0
  59. package/scripts/e2e/lock-e2e.sh +65 -0
  60. package/scripts/generate-matter-maps.js +60 -0
  61. package/scripts/run-e2e-local.sh +14 -0
  62. package/src/deviceFactory.ts +122 -0
  63. package/src/devices/deviceBase.ts +141 -0
  64. package/src/devices/genericDevice.ts +965 -0
  65. package/src/homebridge-ui/public/index.html +77 -245
  66. package/src/homebridge-ui/server.ts +49 -41
  67. package/src/index.ts +5 -13
  68. package/src/platform.ts +395 -0
  69. package/src/settings.ts +12 -277
  70. package/src/switchbotClient.ts +266 -0
  71. package/src/utils.ts +45 -713
  72. package/test/accessory-restore.spec.ts +73 -0
  73. package/test/device-mapping.spec.ts +37 -0
  74. package/test/deviceFactory.spec.ts +18 -0
  75. package/test/e2e/run-e2e.spec.ts +50 -0
  76. package/test/fan-swing.spec.ts +29 -0
  77. package/test/helpers/matter-harness.ts +53 -0
  78. package/test/lock-users.spec.ts +44 -0
  79. package/test/matter-childbridge.spec.ts +55 -0
  80. package/test/matter-descriptors.spec.ts +97 -0
  81. package/test/matter-device-state.spec.ts +101 -0
  82. package/test/matter-integration.spec.ts +70 -0
  83. package/test/platform.integration.spec.ts +55 -0
  84. package/test/switchbot-client-debounce.spec.ts +131 -0
  85. package/test/switchbot-client-openapi.spec.ts +56 -0
  86. package/test/switchbotClient.spec.ts +10 -0
  87. package/test/utils.spec.ts +20 -0
  88. package/vitest.config.ts +7 -0
  89. package/coverage/base.css +0 -224
  90. package/coverage/block-navigation.js +0 -87
  91. package/coverage/clover.xml +0 -15847
  92. package/coverage/coverage-final.json +0 -42
  93. package/coverage/docs/assets/dmt/dmt-component-data.js.html +0 -85
  94. package/coverage/docs/assets/dmt/dmt-components.js.html +0 -286
  95. package/coverage/docs/assets/dmt/index.html +0 -131
  96. package/coverage/docs/assets/hierarchy.js.html +0 -85
  97. package/coverage/docs/assets/icons.js.html +0 -136
  98. package/coverage/docs/assets/index.html +0 -146
  99. package/coverage/docs/assets/main.js.html +0 -265
  100. package/coverage/favicon.png +0 -0
  101. package/coverage/index.html +0 -191
  102. package/coverage/prettify.css +0 -1
  103. package/coverage/prettify.js +0 -2
  104. package/coverage/sort-arrow-sprite.png +0 -0
  105. package/coverage/sorter.js +0 -196
  106. package/coverage/src/device/blindtilt.ts.html +0 -3238
  107. package/coverage/src/device/bot.ts.html +0 -2803
  108. package/coverage/src/device/ceilinglight.ts.html +0 -2338
  109. package/coverage/src/device/colorbulb.ts.html +0 -2824
  110. package/coverage/src/device/contact.ts.html +0 -1465
  111. package/coverage/src/device/curtain.ts.html +0 -2869
  112. package/coverage/src/device/device.ts.html +0 -2500
  113. package/coverage/src/device/fan.ts.html +0 -2242
  114. package/coverage/src/device/hub.ts.html +0 -1408
  115. package/coverage/src/device/humidifier.ts.html +0 -2116
  116. package/coverage/src/device/index.html +0 -416
  117. package/coverage/src/device/iosensor.ts.html +0 -1375
  118. package/coverage/src/device/lightstrip.ts.html +0 -2617
  119. package/coverage/src/device/lock.ts.html +0 -1963
  120. package/coverage/src/device/meter.ts.html +0 -1372
  121. package/coverage/src/device/meterplus.ts.html +0 -1384
  122. package/coverage/src/device/meterpro.ts.html +0 -1618
  123. package/coverage/src/device/motion.ts.html +0 -1264
  124. package/coverage/src/device/plug.ts.html +0 -1372
  125. package/coverage/src/device/relayswitch.ts.html +0 -2284
  126. package/coverage/src/device/robotvacuumcleaner.ts.html +0 -1810
  127. package/coverage/src/device/waterdetector.ts.html +0 -1294
  128. package/coverage/src/homebridge-ui/index.html +0 -116
  129. package/coverage/src/homebridge-ui/server.ts.html +0 -229
  130. package/coverage/src/index.html +0 -161
  131. package/coverage/src/index.ts.html +0 -124
  132. package/coverage/src/irdevice/airconditioner.ts.html +0 -1687
  133. package/coverage/src/irdevice/airpurifier.ts.html +0 -844
  134. package/coverage/src/irdevice/camera.ts.html +0 -475
  135. package/coverage/src/irdevice/fan.ts.html +0 -766
  136. package/coverage/src/irdevice/index.html +0 -251
  137. package/coverage/src/irdevice/irdevice.ts.html +0 -1117
  138. package/coverage/src/irdevice/light.ts.html +0 -826
  139. package/coverage/src/irdevice/other.ts.html +0 -2458
  140. package/coverage/src/irdevice/tv.ts.html +0 -1222
  141. package/coverage/src/irdevice/vacuumcleaner.ts.html +0 -466
  142. package/coverage/src/irdevice/waterheater.ts.html +0 -469
  143. package/coverage/src/platform.ts.html +0 -8776
  144. package/coverage/src/settings.ts.html +0 -934
  145. package/coverage/src/utils.ts.html +0 -2092
  146. package/dist/devices-hap/airpurifier.d.ts +0 -54
  147. package/dist/devices-hap/airpurifier.d.ts.map +0 -1
  148. package/dist/devices-hap/airpurifier.js +0 -527
  149. package/dist/devices-hap/airpurifier.js.map +0 -1
  150. package/dist/devices-hap/blindtilt.d.ts +0 -90
  151. package/dist/devices-hap/blindtilt.d.ts.map +0 -1
  152. package/dist/devices-hap/blindtilt.js +0 -974
  153. package/dist/devices-hap/blindtilt.js.map +0 -1
  154. package/dist/devices-hap/bot.d.ts +0 -102
  155. package/dist/devices-hap/bot.d.ts.map +0 -1
  156. package/dist/devices-hap/bot.js +0 -811
  157. package/dist/devices-hap/bot.js.map +0 -1
  158. package/dist/devices-hap/ceilinglight.d.ts +0 -85
  159. package/dist/devices-hap/ceilinglight.d.ts.map +0 -1
  160. package/dist/devices-hap/ceilinglight.js +0 -701
  161. package/dist/devices-hap/ceilinglight.js.map +0 -1
  162. package/dist/devices-hap/colorbulb.d.ts +0 -88
  163. package/dist/devices-hap/colorbulb.d.ts.map +0 -1
  164. package/dist/devices-hap/colorbulb.js +0 -881
  165. package/dist/devices-hap/colorbulb.js.map +0 -1
  166. package/dist/devices-hap/contact.d.ts +0 -44
  167. package/dist/devices-hap/contact.d.ts.map +0 -1
  168. package/dist/devices-hap/contact.js +0 -409
  169. package/dist/devices-hap/contact.js.map +0 -1
  170. package/dist/devices-hap/curtain.d.ts +0 -73
  171. package/dist/devices-hap/curtain.d.ts.map +0 -1
  172. package/dist/devices-hap/curtain.js +0 -869
  173. package/dist/devices-hap/curtain.js.map +0 -1
  174. package/dist/devices-hap/device.d.ts +0 -98
  175. package/dist/devices-hap/device.d.ts.map +0 -1
  176. package/dist/devices-hap/device.js +0 -749
  177. package/dist/devices-hap/device.js.map +0 -1
  178. package/dist/devices-hap/fan.d.ts +0 -69
  179. package/dist/devices-hap/fan.d.ts.map +0 -1
  180. package/dist/devices-hap/fan.js +0 -649
  181. package/dist/devices-hap/fan.js.map +0 -1
  182. package/dist/devices-hap/hub.d.ts +0 -37
  183. package/dist/devices-hap/hub.d.ts.map +0 -1
  184. package/dist/devices-hap/hub.js +0 -392
  185. package/dist/devices-hap/hub.js.map +0 -1
  186. package/dist/devices-hap/humidifier.d.ts +0 -68
  187. package/dist/devices-hap/humidifier.d.ts.map +0 -1
  188. package/dist/devices-hap/humidifier.js +0 -628
  189. package/dist/devices-hap/humidifier.js.map +0 -1
  190. package/dist/devices-hap/iosensor.d.ts +0 -42
  191. package/dist/devices-hap/iosensor.d.ts.map +0 -1
  192. package/dist/devices-hap/iosensor.js +0 -382
  193. package/dist/devices-hap/iosensor.js.map +0 -1
  194. package/dist/devices-hap/lightstrip.d.ts +0 -79
  195. package/dist/devices-hap/lightstrip.d.ts.map +0 -1
  196. package/dist/devices-hap/lightstrip.js +0 -797
  197. package/dist/devices-hap/lightstrip.js.map +0 -1
  198. package/dist/devices-hap/lock.d.ts +0 -53
  199. package/dist/devices-hap/lock.d.ts.map +0 -1
  200. package/dist/devices-hap/lock.js +0 -561
  201. package/dist/devices-hap/lock.js.map +0 -1
  202. package/dist/devices-hap/meter.d.ts +0 -37
  203. package/dist/devices-hap/meter.d.ts.map +0 -1
  204. package/dist/devices-hap/meter.js +0 -379
  205. package/dist/devices-hap/meter.js.map +0 -1
  206. package/dist/devices-hap/meterplus.d.ts +0 -42
  207. package/dist/devices-hap/meterplus.d.ts.map +0 -1
  208. package/dist/devices-hap/meterplus.js +0 -384
  209. package/dist/devices-hap/meterplus.js.map +0 -1
  210. package/dist/devices-hap/meterpro.d.ts +0 -43
  211. package/dist/devices-hap/meterpro.d.ts.map +0 -1
  212. package/dist/devices-hap/meterpro.js +0 -468
  213. package/dist/devices-hap/meterpro.js.map +0 -1
  214. package/dist/devices-hap/motion.d.ts +0 -42
  215. package/dist/devices-hap/motion.d.ts.map +0 -1
  216. package/dist/devices-hap/motion.js +0 -345
  217. package/dist/devices-hap/motion.js.map +0 -1
  218. package/dist/devices-hap/plug.d.ts +0 -49
  219. package/dist/devices-hap/plug.d.ts.map +0 -1
  220. package/dist/devices-hap/plug.js +0 -395
  221. package/dist/devices-hap/plug.js.map +0 -1
  222. package/dist/devices-hap/relayswitch.d.ts +0 -96
  223. package/dist/devices-hap/relayswitch.d.ts.map +0 -1
  224. package/dist/devices-hap/relayswitch.js +0 -642
  225. package/dist/devices-hap/relayswitch.js.map +0 -1
  226. package/dist/devices-hap/robotvacuumcleaner.d.ts +0 -54
  227. package/dist/devices-hap/robotvacuumcleaner.d.ts.map +0 -1
  228. package/dist/devices-hap/robotvacuumcleaner.js +0 -523
  229. package/dist/devices-hap/robotvacuumcleaner.js.map +0 -1
  230. package/dist/devices-hap/waterdetector.d.ts +0 -41
  231. package/dist/devices-hap/waterdetector.d.ts.map +0 -1
  232. package/dist/devices-hap/waterdetector.js +0 -356
  233. package/dist/devices-hap/waterdetector.js.map +0 -1
  234. package/dist/devices-matter/BaseMatterAccessory.d.ts +0 -63
  235. package/dist/devices-matter/BaseMatterAccessory.d.ts.map +0 -1
  236. package/dist/devices-matter/BaseMatterAccessory.js +0 -100
  237. package/dist/devices-matter/BaseMatterAccessory.js.map +0 -1
  238. package/dist/devices-matter/ColorLightAccessory.d.ts +0 -20
  239. package/dist/devices-matter/ColorLightAccessory.d.ts.map +0 -1
  240. package/dist/devices-matter/ColorLightAccessory.js +0 -95
  241. package/dist/devices-matter/ColorLightAccessory.js.map +0 -1
  242. package/dist/devices-matter/ColorTemperatureLightAccessory.d.ts +0 -18
  243. package/dist/devices-matter/ColorTemperatureLightAccessory.d.ts.map +0 -1
  244. package/dist/devices-matter/ColorTemperatureLightAccessory.js +0 -78
  245. package/dist/devices-matter/ColorTemperatureLightAccessory.js.map +0 -1
  246. package/dist/devices-matter/ContactSensorAccessory.d.ts +0 -12
  247. package/dist/devices-matter/ContactSensorAccessory.d.ts.map +0 -1
  248. package/dist/devices-matter/ContactSensorAccessory.js +0 -34
  249. package/dist/devices-matter/ContactSensorAccessory.js.map +0 -1
  250. package/dist/devices-matter/DimmableLightAccessory.d.ts +0 -58
  251. package/dist/devices-matter/DimmableLightAccessory.d.ts.map +0 -1
  252. package/dist/devices-matter/DimmableLightAccessory.js +0 -167
  253. package/dist/devices-matter/DimmableLightAccessory.js.map +0 -1
  254. package/dist/devices-matter/DoorLockAccessory.d.ts +0 -14
  255. package/dist/devices-matter/DoorLockAccessory.d.ts.map +0 -1
  256. package/dist/devices-matter/DoorLockAccessory.js +0 -50
  257. package/dist/devices-matter/DoorLockAccessory.js.map +0 -1
  258. package/dist/devices-matter/ExtendedColorLightAccessory.d.ts +0 -21
  259. package/dist/devices-matter/ExtendedColorLightAccessory.d.ts.map +0 -1
  260. package/dist/devices-matter/ExtendedColorLightAccessory.js +0 -107
  261. package/dist/devices-matter/ExtendedColorLightAccessory.js.map +0 -1
  262. package/dist/devices-matter/FanAccessory.d.ts +0 -16
  263. package/dist/devices-matter/FanAccessory.d.ts.map +0 -1
  264. package/dist/devices-matter/FanAccessory.js +0 -81
  265. package/dist/devices-matter/FanAccessory.js.map +0 -1
  266. package/dist/devices-matter/HumiditySensorAccessory.d.ts +0 -12
  267. package/dist/devices-matter/HumiditySensorAccessory.d.ts.map +0 -1
  268. package/dist/devices-matter/HumiditySensorAccessory.js +0 -34
  269. package/dist/devices-matter/HumiditySensorAccessory.js.map +0 -1
  270. package/dist/devices-matter/LeakSensorAccessory.d.ts +0 -12
  271. package/dist/devices-matter/LeakSensorAccessory.d.ts.map +0 -1
  272. package/dist/devices-matter/LeakSensorAccessory.js +0 -33
  273. package/dist/devices-matter/LeakSensorAccessory.js.map +0 -1
  274. package/dist/devices-matter/LightSensorAccessory.d.ts +0 -12
  275. package/dist/devices-matter/LightSensorAccessory.d.ts.map +0 -1
  276. package/dist/devices-matter/LightSensorAccessory.js +0 -34
  277. package/dist/devices-matter/LightSensorAccessory.js.map +0 -1
  278. package/dist/devices-matter/OccupancySensorAccessory.d.ts +0 -12
  279. package/dist/devices-matter/OccupancySensorAccessory.d.ts.map +0 -1
  280. package/dist/devices-matter/OccupancySensorAccessory.js +0 -39
  281. package/dist/devices-matter/OccupancySensorAccessory.js.map +0 -1
  282. package/dist/devices-matter/OnOffLightAccessory.d.ts +0 -38
  283. package/dist/devices-matter/OnOffLightAccessory.d.ts.map +0 -1
  284. package/dist/devices-matter/OnOffLightAccessory.js +0 -118
  285. package/dist/devices-matter/OnOffLightAccessory.js.map +0 -1
  286. package/dist/devices-matter/OnOffOutletAccessory.d.ts +0 -12
  287. package/dist/devices-matter/OnOffOutletAccessory.d.ts.map +0 -1
  288. package/dist/devices-matter/OnOffOutletAccessory.js +0 -40
  289. package/dist/devices-matter/OnOffOutletAccessory.js.map +0 -1
  290. package/dist/devices-matter/OnOffSwitchAccessory.d.ts +0 -14
  291. package/dist/devices-matter/OnOffSwitchAccessory.d.ts.map +0 -1
  292. package/dist/devices-matter/OnOffSwitchAccessory.js +0 -42
  293. package/dist/devices-matter/OnOffSwitchAccessory.js.map +0 -1
  294. package/dist/devices-matter/RoboticVacuumAccessory.d.ts +0 -68
  295. package/dist/devices-matter/RoboticVacuumAccessory.d.ts.map +0 -1
  296. package/dist/devices-matter/RoboticVacuumAccessory.js +0 -334
  297. package/dist/devices-matter/RoboticVacuumAccessory.js.map +0 -1
  298. package/dist/devices-matter/SmokeCOAlarmAccessory.d.ts +0 -11
  299. package/dist/devices-matter/SmokeCOAlarmAccessory.d.ts.map +0 -1
  300. package/dist/devices-matter/SmokeCOAlarmAccessory.js +0 -49
  301. package/dist/devices-matter/SmokeCOAlarmAccessory.js.map +0 -1
  302. package/dist/devices-matter/TemperatureSensorAccessory.d.ts +0 -12
  303. package/dist/devices-matter/TemperatureSensorAccessory.d.ts.map +0 -1
  304. package/dist/devices-matter/TemperatureSensorAccessory.js +0 -36
  305. package/dist/devices-matter/TemperatureSensorAccessory.js.map +0 -1
  306. package/dist/devices-matter/ThermostatAccessory.d.ts +0 -19
  307. package/dist/devices-matter/ThermostatAccessory.d.ts.map +0 -1
  308. package/dist/devices-matter/ThermostatAccessory.js +0 -95
  309. package/dist/devices-matter/ThermostatAccessory.js.map +0 -1
  310. package/dist/devices-matter/VenetianBlindAccessory.d.ts +0 -19
  311. package/dist/devices-matter/VenetianBlindAccessory.d.ts.map +0 -1
  312. package/dist/devices-matter/VenetianBlindAccessory.js +0 -99
  313. package/dist/devices-matter/VenetianBlindAccessory.js.map +0 -1
  314. package/dist/devices-matter/WindowBlindAccessory.d.ts +0 -17
  315. package/dist/devices-matter/WindowBlindAccessory.d.ts.map +0 -1
  316. package/dist/devices-matter/WindowBlindAccessory.js +0 -80
  317. package/dist/devices-matter/WindowBlindAccessory.js.map +0 -1
  318. package/dist/devices-matter/custom/PowerStripAccessory.d.ts +0 -97
  319. package/dist/devices-matter/custom/PowerStripAccessory.d.ts.map +0 -1
  320. package/dist/devices-matter/custom/PowerStripAccessory.js +0 -265
  321. package/dist/devices-matter/custom/PowerStripAccessory.js.map +0 -1
  322. package/dist/devices-matter/custom/index.d.ts +0 -8
  323. package/dist/devices-matter/custom/index.d.ts.map +0 -1
  324. package/dist/devices-matter/custom/index.js +0 -8
  325. package/dist/devices-matter/custom/index.js.map +0 -1
  326. package/dist/devices-matter/index.d.ts +0 -29
  327. package/dist/devices-matter/index.d.ts.map +0 -1
  328. package/dist/devices-matter/index.js +0 -28
  329. package/dist/devices-matter/index.js.map +0 -1
  330. package/dist/index.test.d.ts +0 -2
  331. package/dist/index.test.d.ts.map +0 -1
  332. package/dist/index.test.js +0 -14
  333. package/dist/index.test.js.map +0 -1
  334. package/dist/irdevice/airconditioner.d.ts +0 -61
  335. package/dist/irdevice/airconditioner.d.ts.map +0 -1
  336. package/dist/irdevice/airconditioner.js +0 -472
  337. package/dist/irdevice/airconditioner.js.map +0 -1
  338. package/dist/irdevice/airpurifier.d.ts +0 -50
  339. package/dist/irdevice/airpurifier.d.ts.map +0 -1
  340. package/dist/irdevice/airpurifier.js +0 -213
  341. package/dist/irdevice/airpurifier.js.map +0 -1
  342. package/dist/irdevice/camera.d.ts +0 -32
  343. package/dist/irdevice/camera.d.ts.map +0 -1
  344. package/dist/irdevice/camera.js +0 -107
  345. package/dist/irdevice/camera.js.map +0 -1
  346. package/dist/irdevice/fan.d.ts +0 -36
  347. package/dist/irdevice/fan.d.ts.map +0 -1
  348. package/dist/irdevice/fan.js +0 -200
  349. package/dist/irdevice/fan.js.map +0 -1
  350. package/dist/irdevice/irdevice.d.ts +0 -68
  351. package/dist/irdevice/irdevice.d.ts.map +0 -1
  352. package/dist/irdevice/irdevice.js +0 -298
  353. package/dist/irdevice/irdevice.js.map +0 -1
  354. package/dist/irdevice/light.d.ts +0 -36
  355. package/dist/irdevice/light.d.ts.map +0 -1
  356. package/dist/irdevice/light.js +0 -206
  357. package/dist/irdevice/light.js.map +0 -1
  358. package/dist/irdevice/other.d.ts +0 -57
  359. package/dist/irdevice/other.d.ts.map +0 -1
  360. package/dist/irdevice/other.js +0 -778
  361. package/dist/irdevice/other.js.map +0 -1
  362. package/dist/irdevice/tv.d.ts +0 -45
  363. package/dist/irdevice/tv.d.ts.map +0 -1
  364. package/dist/irdevice/tv.js +0 -327
  365. package/dist/irdevice/tv.js.map +0 -1
  366. package/dist/irdevice/vacuumcleaner.d.ts +0 -28
  367. package/dist/irdevice/vacuumcleaner.d.ts.map +0 -1
  368. package/dist/irdevice/vacuumcleaner.js +0 -104
  369. package/dist/irdevice/vacuumcleaner.js.map +0 -1
  370. package/dist/irdevice/waterheater.d.ts +0 -30
  371. package/dist/irdevice/waterheater.d.ts.map +0 -1
  372. package/dist/irdevice/waterheater.js +0 -105
  373. package/dist/irdevice/waterheater.js.map +0 -1
  374. package/dist/platform-hap.d.ts +0 -149
  375. package/dist/platform-hap.d.ts.map +0 -1
  376. package/dist/platform-hap.js +0 -2861
  377. package/dist/platform-hap.js.map +0 -1
  378. package/dist/platform-matter.d.ts +0 -101
  379. package/dist/platform-matter.d.ts.map +0 -1
  380. package/dist/platform-matter.js +0 -896
  381. package/dist/platform-matter.js.map +0 -1
  382. package/dist/verifyconfig.test.d.ts +0 -2
  383. package/dist/verifyconfig.test.d.ts.map +0 -1
  384. package/dist/verifyconfig.test.js +0 -167
  385. package/dist/verifyconfig.test.js.map +0 -1
  386. package/src/custom.d.ts +0 -7
  387. package/src/devices-hap/airpurifier.ts +0 -563
  388. package/src/devices-hap/blindtilt.ts +0 -1049
  389. package/src/devices-hap/bot.ts +0 -900
  390. package/src/devices-hap/ceilinglight.ts +0 -742
  391. package/src/devices-hap/colorbulb.ts +0 -904
  392. package/src/devices-hap/contact.ts +0 -457
  393. package/src/devices-hap/curtain.ts +0 -944
  394. package/src/devices-hap/device.ts +0 -811
  395. package/src/devices-hap/fan.ts +0 -711
  396. package/src/devices-hap/hub.ts +0 -439
  397. package/src/devices-hap/humidifier.ts +0 -669
  398. package/src/devices-hap/iosensor.ts +0 -427
  399. package/src/devices-hap/lightstrip.ts +0 -836
  400. package/src/devices-hap/lock.ts +0 -620
  401. package/src/devices-hap/meter.ts +0 -426
  402. package/src/devices-hap/meterplus.ts +0 -430
  403. package/src/devices-hap/meterpro.ts +0 -522
  404. package/src/devices-hap/motion.ts +0 -390
  405. package/src/devices-hap/plug.ts +0 -423
  406. package/src/devices-hap/relayswitch.ts +0 -727
  407. package/src/devices-hap/robotvacuumcleaner.ts +0 -568
  408. package/src/devices-hap/waterdetector.ts +0 -400
  409. package/src/devices-matter/BaseMatterAccessory.ts +0 -131
  410. package/src/devices-matter/ColorLightAccessory.ts +0 -110
  411. package/src/devices-matter/ColorTemperatureLightAccessory.ts +0 -92
  412. package/src/devices-matter/ContactSensorAccessory.ts +0 -41
  413. package/src/devices-matter/DimmableLightAccessory.ts +0 -192
  414. package/src/devices-matter/DoorLockAccessory.ts +0 -60
  415. package/src/devices-matter/ExtendedColorLightAccessory.ts +0 -123
  416. package/src/devices-matter/FanAccessory.ts +0 -95
  417. package/src/devices-matter/HumiditySensorAccessory.ts +0 -41
  418. package/src/devices-matter/LeakSensorAccessory.ts +0 -40
  419. package/src/devices-matter/LightSensorAccessory.ts +0 -41
  420. package/src/devices-matter/OccupancySensorAccessory.ts +0 -48
  421. package/src/devices-matter/OnOffLightAccessory.ts +0 -133
  422. package/src/devices-matter/OnOffOutletAccessory.ts +0 -46
  423. package/src/devices-matter/OnOffSwitchAccessory.ts +0 -51
  424. package/src/devices-matter/RoboticVacuumAccessory.ts +0 -407
  425. package/src/devices-matter/SmokeCOAlarmAccessory.ts +0 -59
  426. package/src/devices-matter/TemperatureSensorAccessory.ts +0 -43
  427. package/src/devices-matter/ThermostatAccessory.ts +0 -110
  428. package/src/devices-matter/VenetianBlindAccessory.ts +0 -115
  429. package/src/devices-matter/WindowBlindAccessory.ts +0 -92
  430. package/src/devices-matter/custom/PowerStripAccessory.ts +0 -309
  431. package/src/devices-matter/custom/index.ts +0 -8
  432. package/src/devices-matter/index.ts +0 -29
  433. package/src/index.test.ts +0 -19
  434. package/src/irdevice/airconditioner.ts +0 -533
  435. package/src/irdevice/airpurifier.ts +0 -252
  436. package/src/irdevice/camera.ts +0 -129
  437. package/src/irdevice/fan.ts +0 -226
  438. package/src/irdevice/irdevice.ts +0 -344
  439. package/src/irdevice/light.ts +0 -246
  440. package/src/irdevice/other.ts +0 -790
  441. package/src/irdevice/tv.ts +0 -378
  442. package/src/irdevice/vacuumcleaner.ts +0 -126
  443. package/src/irdevice/waterheater.ts +0 -127
  444. package/src/platform-hap.ts +0 -2997
  445. package/src/platform-matter.ts +0 -1010
  446. package/src/verifyconfig.test.ts +0 -197
@@ -1,533 +0,0 @@
1
- /* Copyright(C) 2021-2024, donavanbecker (https://github.com/donavanbecker). All rights reserved.
2
- *
3
- * airconditioners.ts: @switchbot/homebridge-switchbot.
4
- */
5
- import type { CharacteristicValue, PlatformAccessory, Service } from 'homebridge'
6
- import type { bodyChange, irdevice } from 'node-switchbot'
7
-
8
- import type { SwitchBotHAPPlatform } from '../platform-hap.js'
9
- import type { irAirConfig, irDevicesConfig } from '../settings.js'
10
-
11
- import { irdeviceBase } from './irdevice.js'
12
-
13
- /**
14
- * Platform Accessory
15
- * An instance of this class is created for each accessory your platform registers
16
- * Each accessory may expose multiple services of different service types.
17
- */
18
- export class AirConditioner extends irdeviceBase {
19
- // Services
20
- private HeaterCooler: {
21
- Name: CharacteristicValue
22
- Service: Service
23
- Active: CharacteristicValue
24
- CurrentHeaterCoolerState: CharacteristicValue
25
- TargetHeaterCoolerState: CharacteristicValue
26
- CurrentTemperature: CharacteristicValue
27
- ThresholdTemperature: CharacteristicValue
28
- RotationSpeed: CharacteristicValue
29
- }
30
-
31
- meter?: PlatformAccessory
32
-
33
- private HumiditySensor?: {
34
- Name: CharacteristicValue
35
- Service: Service
36
- CurrentRelativeHumidity: CharacteristicValue
37
- }
38
-
39
- // Others
40
- state!: string
41
- Busy: any
42
- Timeout: any = null
43
- CurrentMode!: number
44
- ValidValues: number[]
45
- CurrentFanSpeed!: number
46
-
47
- // Config
48
- hide_automode?: boolean
49
- set_max_heat?: number
50
- set_min_heat?: number
51
- set_max_cool?: number
52
- set_min_cool?: number
53
-
54
- constructor(
55
- readonly platform: SwitchBotHAPPlatform,
56
- accessory: PlatformAccessory,
57
- device: irdevice & irDevicesConfig,
58
- ) {
59
- super(platform, accessory, device)
60
- // Set category
61
- accessory.category = this.hap.Categories.AIR_CONDITIONER
62
-
63
- // default placeholders
64
- this.getAirConditionerConfigSettings(accessory, device)
65
-
66
- this.ValidValues = this.hide_automode ? [1, 2] : [0, 1, 2]
67
-
68
- // Initialize HeaterCooler Service
69
- accessory.context.HeaterCooler = accessory.context.HeaterCooler ?? {}
70
- this.HeaterCooler = {
71
- Name: accessory.displayName,
72
- Service: accessory.getService(this.hap.Service.HeaterCooler) ?? accessory.addService(this.hap.Service.HeaterCooler) as Service,
73
- Active: accessory.context.Active ?? this.hap.Characteristic.Active.INACTIVE,
74
- CurrentHeaterCoolerState: accessory.context.CurrentHeaterCoolerState ?? this.hap.Characteristic.CurrentHeaterCoolerState.IDLE,
75
- TargetHeaterCoolerState: accessory.context.TargetHeaterCoolerState ?? this.hap.Characteristic.TargetHeaterCoolerState.AUTO,
76
- CurrentTemperature: accessory.context.CurrentTemperature ?? 24,
77
- ThresholdTemperature: accessory.context.ThresholdTemperature ?? 24,
78
- RotationSpeed: accessory.context.RotationSpeed ?? 4,
79
- }
80
- accessory.context.HeaterCooler = this.HeaterCooler as object
81
-
82
- this.HeaterCooler.Service.setCharacteristic(this.hap.Characteristic.Name, this.HeaterCooler.Name).getCharacteristic(this.hap.Characteristic.Active).onGet(() => {
83
- return this.HeaterCooler.Active
84
- }).onSet(this.ActiveSet.bind(this))
85
-
86
- this.HeaterCooler.Service.getCharacteristic(this.hap.Characteristic.CurrentTemperature).onGet(async () => {
87
- return await this.CurrentTemperatureGet()
88
- })
89
-
90
- this.HeaterCooler.Service.getCharacteristic(this.hap.Characteristic.TargetHeaterCoolerState).setProps({
91
- validValues: this.ValidValues,
92
- }).onGet(async () => {
93
- return await this.TargetHeaterCoolerStateGet()
94
- }).onSet(this.TargetHeaterCoolerStateSet.bind(this))
95
-
96
- this.HeaterCooler.Service.getCharacteristic(this.hap.Characteristic.CurrentHeaterCoolerState).onGet(async () => {
97
- return await this.CurrentHeaterCoolerStateGet()
98
- })
99
-
100
- this.HeaterCooler.Service.getCharacteristic(this.hap.Characteristic.HeatingThresholdTemperature).setProps({
101
- minValue: this.set_min_heat,
102
- maxValue: this.set_max_heat,
103
- minStep: 0.5,
104
- }).onGet(async () => {
105
- return await this.ThresholdTemperatureGet()
106
- }).onSet(this.ThresholdTemperatureSet.bind(this))
107
-
108
- this.HeaterCooler.Service.getCharacteristic(this.hap.Characteristic.CoolingThresholdTemperature).setProps({
109
- minValue: this.set_min_cool,
110
- maxValue: this.set_max_cool,
111
- minStep: 0.5,
112
- }).onGet(async () => {
113
- return await this.ThresholdTemperatureGet()
114
- }).onSet(this.ThresholdTemperatureSet.bind(this))
115
-
116
- this.HeaterCooler.Service.getCharacteristic(this.hap.Characteristic.RotationSpeed).setProps({
117
- format: 'int',
118
- minStep: 1,
119
- minValue: 1,
120
- maxValue: 4,
121
- }).onGet(async () => {
122
- return await this.RotationSpeedGet()
123
- }).onSet(this.RotationSpeedSet.bind(this))
124
-
125
- // Initialize HumiditySensor property
126
-
127
- if ((this.device as irAirConfig).meterType && (this.device as irAirConfig).meterId) {
128
- const meterUuid = this.platform.api.hap.uuid.generate(`${(device as irAirConfig).meterId}-${(device as irAirConfig).meterType}`)
129
- this.meter = this.platform.accessories.find(accessory => accessory.UUID === meterUuid)
130
- accessory.context.HumiditySensor = accessory.context.HumiditySensor ?? {}
131
- this.HumiditySensor = {
132
- Name: this.meter!.displayName,
133
- Service: this.meter!.getService(this.hap.Service.HumiditySensor) ?? this.meter!.addService(this.hap.Service.HumiditySensor) as Service,
134
- CurrentRelativeHumidity: this.meter!.context.CurrentRelativeHumidity || 0,
135
- }
136
- accessory.context.HumiditySensor = this.HumiditySensor as object
137
- }
138
-
139
- if ((this.device as irAirConfig).meterType && (this.device as irAirConfig).meterId) {
140
- const meterUuid = this.platform.api.hap.uuid.generate(`${(device as irAirConfig).meterId}-${(device as irAirConfig).meterType}`)
141
- this.meter = this.platform.accessories.find(accessory => accessory.UUID === meterUuid)
142
- }
143
-
144
- if (this.meter && this.HumiditySensor) {
145
- this.HumiditySensor.Service.setCharacteristic(this.hap.Characteristic.Name, this.HumiditySensor.Name).getCharacteristic(this.hap.Characteristic.CurrentRelativeHumidity).onGet(async () => {
146
- return await this.CurrentRelativeHumidityGet()
147
- })
148
- }
149
- }
150
-
151
- /**
152
- * Pushes the requested changes to the SwitchBot API
153
- * deviceType commandType Command command parameter Description
154
- * AirConditioner: "command" "swing" "default" = swing
155
- * AirConditioner: "command" "timer" "default" = timer
156
- * AirConditioner: "command" "lowSpeed" "default" = fan speed to low
157
- * AirConditioner: "command" "middleSpeed" "default" = fan speed to medium
158
- * AirConditioner: "command" "highSpeed" "default" = fan speed to high
159
- */
160
- async pushAirConditionerOnChanges(): Promise<void> {
161
- this.debugLog(`pushAirConditionerOnChanges Active: ${this.HeaterCooler.Active}, disablePushOn: ${this.deviceDisablePushOn}`)
162
- if (this.HeaterCooler.Active === this.hap.Characteristic.Active.ACTIVE && !this.deviceDisablePushOn) {
163
- const commandType: string = await this.commandType()
164
- const command: string = await this.commandOn()
165
- const bodyChange: bodyChange = {
166
- command,
167
- parameter: 'default',
168
- commandType,
169
- }
170
- await this.pushChanges(bodyChange)
171
- }
172
- }
173
-
174
- async pushAirConditionerOffChanges(): Promise<void> {
175
- this.debugLog(`pushAirConditionerOffChanges Active: ${this.HeaterCooler.Active}, disablePushOff: ${this.deviceDisablePushOff}`)
176
- if (this.HeaterCooler.Active === this.hap.Characteristic.Active.INACTIVE && !this.deviceDisablePushOff) {
177
- const commandType: string = await this.commandType()
178
- const command: string = await this.commandOff()
179
- const bodyChange: bodyChange = {
180
- command,
181
- parameter: 'default',
182
- commandType,
183
- }
184
- await this.pushChanges(bodyChange)
185
- }
186
- }
187
-
188
- async pushAirConditionerStatusChanges(): Promise<void> {
189
- this.debugLog(`pushAirConditionerStatusChanges Active: ${this.HeaterCooler.Active}, disablePushOff: ${this.deviceDisablePushOff}, disablePushOn: ${this.deviceDisablePushOn}`)
190
- if (!this.Busy) {
191
- this.Busy = true
192
- this.HeaterCooler.CurrentHeaterCoolerState = this.hap.Characteristic.CurrentHeaterCoolerState.IDLE
193
- }
194
- clearTimeout(this.Timeout)
195
-
196
- // Make a new Timeout set to go off in 1000ms (1 second)
197
- this.Timeout = setTimeout(this.pushAirConditionerDetailsChanges.bind(this), 1500)
198
- }
199
-
200
- async pushAirConditionerDetailsChanges(): Promise<void> {
201
- this.debugLog(`pushAirConditionerDetailsChanges Active: ${this.HeaterCooler.Active}, disablePushOff: ${this.deviceDisablePushOff}, disablePushOn: ${this.deviceDisablePushOn}`)
202
- // await this.deviceContext();
203
- if (this.CurrentMode === undefined) {
204
- this.CurrentMode = 1
205
- }
206
- if (this.CurrentFanSpeed === undefined) {
207
- this.CurrentFanSpeed = 1
208
- }
209
- if (this.HeaterCooler.Active === this.hap.Characteristic.Active.ACTIVE) {
210
- this.state = 'on'
211
- } else {
212
- this.state = 'off'
213
- }
214
- if (this.CurrentMode === 1) {
215
- // Remove or make configurable?
216
- this.HeaterCooler.ThresholdTemperature = 25
217
- this.debugLog(`CurrentMode: ${this.CurrentMode}, ThresholdTemperature: ${this.HeaterCooler.ThresholdTemperature}`)
218
- }
219
- const parameter = `${this.HeaterCooler.ThresholdTemperature},${this.CurrentMode},${this.CurrentFanSpeed},${this.state}`
220
-
221
- await this.UpdateCurrentHeaterCoolerState()
222
- const bodyChange: bodyChange = {
223
- command: 'setAll',
224
- parameter: `${parameter}`,
225
- commandType: 'command',
226
- }
227
- await this.pushChanges(bodyChange)
228
- }
229
-
230
- private async UpdateCurrentHeaterCoolerState() {
231
- if (this.HeaterCooler.Active === this.hap.Characteristic.Active.ACTIVE) {
232
- if (this.HeaterCooler.Active === undefined) {
233
- this.HeaterCooler.Active = this.hap.Characteristic.Active.INACTIVE
234
- } else {
235
- this.HeaterCooler.Active = this.HeaterCooler.Active ? this.HeaterCooler.Active : this.accessory.context.Active
236
- }
237
-
238
- if (this.HeaterCooler.CurrentTemperature === undefined && this.accessory.context.CurrentTemperature === undefined) {
239
- this.HeaterCooler.CurrentTemperature = 24
240
- } else {
241
- this.HeaterCooler.CurrentTemperature = this.HeaterCooler.CurrentTemperature || this.accessory.context.CurrentTemperature
242
- }
243
-
244
- if (this.HeaterCooler.ThresholdTemperature === undefined && this.accessory.context.ThresholdTemperature === undefined) {
245
- this.HeaterCooler.ThresholdTemperature = 24
246
- } else {
247
- this.HeaterCooler.ThresholdTemperature = this.HeaterCooler.ThresholdTemperature || this.accessory.context.ThresholdTemperature
248
- }
249
-
250
- if (this.HeaterCooler.RotationSpeed === undefined && this.accessory.context.RotationSpeed === undefined) {
251
- this.HeaterCooler.RotationSpeed = 4
252
- } else {
253
- this.HeaterCooler.RotationSpeed = this.HeaterCooler.RotationSpeed || this.accessory.context.RotationSpeed
254
- }
255
-
256
- if ((this.device as irAirConfig).hide_automode) {
257
- this.hide_automode = (this.device as irAirConfig).hide_automode
258
- this.accessory.context.hide_automode = this.hide_automode
259
- } else {
260
- this.hide_automode = (this.device as irAirConfig).hide_automode
261
- this.accessory.context.hide_automode = this.hide_automode
262
- }
263
-
264
- if ((this.device as irAirConfig).set_max_heat) {
265
- this.set_max_heat = (this.device as irAirConfig).set_max_heat
266
- this.accessory.context.set_max_heat = this.set_max_heat
267
- } else {
268
- this.set_max_heat = 35
269
- this.accessory.context.set_max_heat = this.set_max_heat
270
- }
271
- if ((this.device as irAirConfig).set_min_heat) {
272
- this.set_min_heat = (this.device as irAirConfig).set_min_heat
273
- this.accessory.context.set_min_heat = this.set_min_heat
274
- } else {
275
- this.set_min_heat = 0
276
- this.accessory.context.set_min_heat = this.set_min_heat
277
- }
278
-
279
- if ((this.device as irAirConfig).set_max_cool) {
280
- this.set_max_cool = (this.device as irAirConfig).set_max_cool
281
- this.accessory.context.set_max_cool = this.set_max_cool
282
- } else {
283
- this.set_max_cool = 35
284
- this.accessory.context.set_max_cool = this.set_max_cool
285
- }
286
- if ((this.device as irAirConfig).set_min_cool) {
287
- this.set_min_cool = (this.device as irAirConfig).set_min_cool
288
- this.accessory.context.set_min_cool = this.set_min_cool
289
- } else {
290
- this.set_min_cool = 0
291
- this.accessory.context.set_min_cool = this.set_min_cool
292
- }
293
-
294
- if (this.meter) {
295
- if (this.HumiditySensor!.CurrentRelativeHumidity === undefined && this.accessory.context.CurrentRelativeHumidity === undefined) {
296
- this.HumiditySensor!.CurrentRelativeHumidity = 0
297
- } else {
298
- this.HumiditySensor!.CurrentRelativeHumidity = this.HumiditySensor!.CurrentRelativeHumidity ?? this.accessory.context.CurrentRelativeHumidity
299
- }
300
- }
301
- if (this.HeaterCooler.ThresholdTemperature < this.HeaterCooler.CurrentTemperature
302
- && this.HeaterCooler.TargetHeaterCoolerState !== this.hap.Characteristic.TargetHeaterCoolerState.HEAT) {
303
- this.HeaterCooler.CurrentHeaterCoolerState = this.hap.Characteristic.CurrentHeaterCoolerState.COOLING
304
- } else if (this.HeaterCooler.ThresholdTemperature > this.HeaterCooler.CurrentTemperature && this.HeaterCooler.TargetHeaterCoolerState !== this.hap.Characteristic.TargetHeaterCoolerState.COOL) {
305
- this.HeaterCooler.CurrentHeaterCoolerState = this.hap.Characteristic.CurrentHeaterCoolerState.HEATING
306
- } else {
307
- this.HeaterCooler.CurrentHeaterCoolerState = this.hap.Characteristic.CurrentHeaterCoolerState.IDLE
308
- }
309
- } else {
310
- this.HeaterCooler.CurrentHeaterCoolerState = this.hap.Characteristic.CurrentHeaterCoolerState.INACTIVE
311
- }
312
- }
313
-
314
- async pushChanges(bodyChange: any): Promise<void> {
315
- this.debugLog('pushChanges')
316
- if (this.device.connectionType === 'OpenAPI' && !this.deviceDisablePushDetail) {
317
- this.infoLog(`Sending request to SwitchBot API, body: ${JSON.stringify(bodyChange)}`)
318
- try {
319
- const deviceStatus = await this.pushChangeRequest(bodyChange)
320
- await this.pushStatusCodes(deviceStatus)
321
- if (await this.successfulStatusCodes(deviceStatus)) {
322
- await this.successfulPushChange(deviceStatus, bodyChange)
323
- await this.updateHomeKitCharacteristics()
324
- } else {
325
- await this.statusCode(deviceStatus.statusCode)
326
- }
327
- } catch (e: any) {
328
- await this.apiError(e)
329
- await this.pushChangeError(e)
330
- }
331
- } else {
332
- this.warnLog(`Connection Type: ${this.device.connectionType}, commands will not be sent to OpenAPI`)
333
- this.debugLog(`Connection Type: ${this.device.connectionType}, disablePushDetails: ${this.deviceDisablePushDetail}`)
334
- await this.updateHomeKitCharacteristics()
335
- }
336
- }
337
-
338
- async CurrentTemperatureGet(): Promise<CharacteristicValue> {
339
- if (this.meter?.context?.CurrentTemperature) {
340
- this.accessory.context.CurrentTemperature = this.meter.context.CurrentTemperature
341
- this.debugLog(`Using CurrentTemperature from ${this.meter.context.deviceType} (${this.meter.context.deviceId})`)
342
- }
343
-
344
- this.HeaterCooler.CurrentTemperature = this.accessory.context.CurrentTemperature || 24
345
- this.debugLog(`Get CurrentTemperature: ${this.HeaterCooler.CurrentTemperature}`)
346
- return this.HeaterCooler.CurrentTemperature
347
- }
348
-
349
- async CurrentRelativeHumidityGet(): Promise<CharacteristicValue> {
350
- if (this.meter?.context?.CurrentRelativeHumidity) {
351
- this.accessory.context.CurrentRelativeHumidity = this.meter.context.CurrentRelativeHumidity
352
- this.debugLog(`Using CurrentRelativeHumidity from ${this.meter.context.deviceType} (${this.meter.context.deviceId})`)
353
- }
354
-
355
- this.HumiditySensor!.CurrentRelativeHumidity = this.accessory.context.CurrentRelativeHumidity || 0
356
- this.debugLog(`Get CurrentRelativeHumidity: ${this.HumiditySensor!.CurrentRelativeHumidity}`)
357
- return this.HumiditySensor!.CurrentRelativeHumidity as CharacteristicValue
358
- }
359
-
360
- async RotationSpeedGet(): Promise<number> {
361
- if (!this.CurrentFanSpeed || this.CurrentFanSpeed === 1) {
362
- this.HeaterCooler.RotationSpeed = 4
363
- } else {
364
- this.HeaterCooler.RotationSpeed = this.CurrentFanSpeed - 1
365
- }
366
- this.debugLog(`Get RotationSpeed: ${this.HeaterCooler.RotationSpeed}`)
367
- return this.HeaterCooler.RotationSpeed
368
- }
369
-
370
- async RotationSpeedSet(value: CharacteristicValue): Promise<void> {
371
- if (value === 4) {
372
- this.CurrentFanSpeed = 1
373
- } else {
374
- this.CurrentFanSpeed = Number(value) + 1
375
- }
376
- this.HeaterCooler.RotationSpeed = value
377
- this.debugLog(`Set RotationSpeed: ${this.HeaterCooler.RotationSpeed}, CurrentFanSpeed: ${this.CurrentFanSpeed}`)
378
- this.pushAirConditionerStatusChanges()
379
- }
380
-
381
- async ActiveSet(value: CharacteristicValue): Promise<void> {
382
- this.debugLog(`Set Active: ${value}`)
383
-
384
- this.HeaterCooler.Active = value
385
- if (this.HeaterCooler.Active === this.hap.Characteristic.Active.ACTIVE) {
386
- this.debugLog(`pushAirConditionerOnChanges, Active: ${this.HeaterCooler.Active}`)
387
- if (this.deviceDisablePushOn) {
388
- this.pushAirConditionerStatusChanges()
389
- } else {
390
- this.pushAirConditionerOnChanges()
391
- }
392
- } else {
393
- this.debugLog(`pushAirConditionerOffChanges, Active: ${this.HeaterCooler.Active}`)
394
- this.pushAirConditionerOffChanges()
395
- }
396
- }
397
-
398
- async TargetHeaterCoolerStateGet(): Promise<CharacteristicValue> {
399
- const targetState = this.HeaterCooler.TargetHeaterCoolerState || this.accessory.context.TargetHeaterCoolerState
400
- this.HeaterCooler.TargetHeaterCoolerState = this.ValidValues.includes(targetState) ? targetState : this.ValidValues[0]
401
- this.debugLog(`Get (${this.getTargetHeaterCoolerStateName()}) TargetHeaterCoolerState: ${this.HeaterCooler.TargetHeaterCoolerState}, ValidValues: ${this.ValidValues}, hide_automode: ${this.hide_automode}`)
402
- return this.HeaterCooler.TargetHeaterCoolerState
403
- }
404
-
405
- async TargetHeaterCoolerStateSet(value: CharacteristicValue): Promise<void> {
406
- if (!this.hide_automode && value === this.hap.Characteristic.TargetHeaterCoolerState.AUTO) {
407
- this.TargetHeaterCoolerStateAUTO()
408
- } else if (value === this.hap.Characteristic.TargetHeaterCoolerState.HEAT) {
409
- this.TargetHeaterCoolerStateHEAT()
410
- } else if (value === this.hap.Characteristic.TargetHeaterCoolerState.COOL) {
411
- this.TargetHeaterCoolerStateCOOL()
412
- } else {
413
- this.errorLog(`Set TargetHeaterCoolerState: ${this.HeaterCooler.TargetHeaterCoolerState}, hide_automode: ${this.hide_automode} `)
414
- }
415
- this.pushAirConditionerStatusChanges()
416
- }
417
-
418
- async TargetHeaterCoolerStateAUTO(): Promise<void> {
419
- this.HeaterCooler.TargetHeaterCoolerState = this.hap.Characteristic.TargetHeaterCoolerState.AUTO
420
- this.CurrentMode = 1
421
- this.debugLog(`Set (AUTO) TargetHeaterCoolerState: ${this.HeaterCooler.TargetHeaterCoolerState}`)
422
- this.debugLog(`Switchbot CurrentMode: ${this.CurrentMode}`)
423
- }
424
-
425
- async TargetHeaterCoolerStateCOOL(): Promise<void> {
426
- this.HeaterCooler.TargetHeaterCoolerState = this.hap.Characteristic.TargetHeaterCoolerState.COOL
427
- this.CurrentMode = 2
428
- this.debugLog(`Set (COOL) TargetHeaterCoolerState: ${this.HeaterCooler.TargetHeaterCoolerState}`)
429
- this.debugLog(`Switchbot CurrentMode: ${this.CurrentMode}`)
430
- }
431
-
432
- async TargetHeaterCoolerStateHEAT(): Promise<void> {
433
- this.HeaterCooler.TargetHeaterCoolerState = this.hap.Characteristic.TargetHeaterCoolerState.HEAT
434
- this.CurrentMode = 5
435
- this.debugLog(`Set (HEAT) TargetHeaterCoolerState: ${this.HeaterCooler.TargetHeaterCoolerState}`)
436
- this.debugLog(`Switchbot CurrentMode: ${this.CurrentMode}`)
437
- }
438
-
439
- async CurrentHeaterCoolerStateGet(): Promise<CharacteristicValue> {
440
- await this.UpdateCurrentHeaterCoolerState()
441
- this.debugLog(`Get (${this.getTargetHeaterCoolerStateName()}) CurrentHeaterCoolerState: ${this.HeaterCooler.CurrentHeaterCoolerState}`)
442
-
443
- return this.HeaterCooler.CurrentHeaterCoolerState
444
- }
445
-
446
- private getTargetHeaterCoolerStateName(): string {
447
- switch (this.HeaterCooler.TargetHeaterCoolerState) {
448
- case this.hap.Characteristic.TargetHeaterCoolerState.AUTO:
449
- return 'AUTO'
450
- case this.hap.Characteristic.TargetHeaterCoolerState.HEAT:
451
- return 'HEAT'
452
- case this.hap.Characteristic.TargetHeaterCoolerState.COOL:
453
- return 'COOL'
454
- default:
455
- return this.HeaterCooler.TargetHeaterCoolerState.toString()
456
- }
457
- }
458
-
459
- async ThresholdTemperatureGet(): Promise<CharacteristicValue> {
460
- this.HeaterCooler.Active = this.HeaterCooler.Active === undefined
461
- ? this.hap.Characteristic.Active.INACTIVE
462
- : this.HeaterCooler.Active ?? this.accessory.context.Active
463
-
464
- this.HeaterCooler.CurrentTemperature = (this.HeaterCooler.CurrentTemperature === undefined && this.accessory.context.CurrentTemperature === undefined)
465
- ? 24
466
- : this.HeaterCooler.CurrentTemperature ?? this.accessory.context.CurrentTemperature
467
-
468
- this.HeaterCooler.ThresholdTemperature = this.HeaterCooler.ThresholdTemperature === undefined
469
- ? 24
470
- : this.HeaterCooler.ThresholdTemperature ?? this.accessory.context.ThresholdTemperature
471
-
472
- this.HeaterCooler.RotationSpeed = (this.HeaterCooler.RotationSpeed === undefined && this.accessory.context.RotationSpeed === undefined)
473
- ? 4
474
- : this.HeaterCooler.RotationSpeed ?? this.accessory.context.RotationSpeed
475
-
476
- await this.getAirConditionerConfigSettings(this.accessory, this.device)
477
-
478
- if (this.meter && this.HumiditySensor?.Service) {
479
- this.HumiditySensor.CurrentRelativeHumidity = (this.HumiditySensor.CurrentRelativeHumidity === undefined && this.accessory.context.CurrentRelativeHumidity === undefined)
480
- ? 0
481
- : this.HumiditySensor.CurrentRelativeHumidity ?? this.accessory.context.CurrentRelativeHumidity
482
- }
483
- this.debugLog(`Get ThresholdTemperature: ${this.HeaterCooler.ThresholdTemperature}`)
484
- return this.HeaterCooler.ThresholdTemperature
485
- }
486
-
487
- async ThresholdTemperatureSet(value: CharacteristicValue): Promise<void> {
488
- this.HeaterCooler.ThresholdTemperature = value
489
- this.debugLog(`Set ThresholdTemperature: ${this.HeaterCooler.ThresholdTemperature}, ThresholdTemperatureCached: ${this.accessory.context.ThresholdTemperature}`)
490
- this.pushAirConditionerStatusChanges()
491
- }
492
-
493
- async updateHomeKitCharacteristics(): Promise<void> {
494
- this.debugLog('updateHomeKitCharacteristics')
495
- // Active
496
- await this.updateCharacteristic(this.HeaterCooler.Service, this.hap.Characteristic.Active, this.HeaterCooler.Active, 'Active')
497
- // RotationSpeed
498
- await this.updateCharacteristic(this.HeaterCooler.Service, this.hap.Characteristic.RotationSpeed, this.HeaterCooler.RotationSpeed, 'RotationSpeed')
499
- // CurrentTemperature
500
- await this.updateCharacteristic(this.HeaterCooler.Service, this.hap.Characteristic.CurrentTemperature, this.HeaterCooler.CurrentTemperature, 'CurrentTemperature')
501
- // TargetHeaterCoolerState
502
- await this.updateCharacteristic(this.HeaterCooler.Service, this.hap.Characteristic.TargetHeaterCoolerState, this.HeaterCooler.TargetHeaterCoolerState, 'TargetHeaterCoolerState')
503
- // CurrentHeaterCoolerState
504
- await this.updateCharacteristic(this.HeaterCooler.Service, this.hap.Characteristic.CurrentHeaterCoolerState, this.HeaterCooler.CurrentHeaterCoolerState, 'CurrentHeaterCoolerState')
505
- // HeatingThresholdTemperature
506
- await this.updateCharacteristic(this.HeaterCooler.Service, this.hap.Characteristic.HeatingThresholdTemperature, this.HeaterCooler.ThresholdTemperature, 'ThresholdTemperature')
507
- // CoolingThresholdTemperature
508
- await this.updateCharacteristic(this.HeaterCooler.Service, this.hap.Characteristic.CoolingThresholdTemperature, this.HeaterCooler.ThresholdTemperature, 'ThresholdTemperature')
509
- if (this.meter && this.HumiditySensor?.Service) {
510
- // CurrentRelativeHumidity
511
- await this.updateCharacteristic(this.HumiditySensor.Service, this.hap.Characteristic.CurrentRelativeHumidity, this.HumiditySensor.CurrentRelativeHumidity, 'CurrentRelativeHumidity')
512
- }
513
- }
514
-
515
- async apiError(e: any): Promise<void> {
516
- this.HeaterCooler.Service.updateCharacteristic(this.hap.Characteristic.Active, e)
517
- this.HeaterCooler.Service.updateCharacteristic(this.hap.Characteristic.RotationSpeed, e)
518
- this.HeaterCooler.Service.updateCharacteristic(this.hap.Characteristic.CurrentTemperature, e)
519
- this.HeaterCooler.Service.updateCharacteristic(this.hap.Characteristic.CurrentRelativeHumidity, e)
520
- this.HeaterCooler.Service.updateCharacteristic(this.hap.Characteristic.TargetHeaterCoolerState, e)
521
- this.HeaterCooler.Service.updateCharacteristic(this.hap.Characteristic.CurrentHeaterCoolerState, e)
522
- this.HeaterCooler.Service.updateCharacteristic(this.hap.Characteristic.HeatingThresholdTemperature, e)
523
- this.HeaterCooler.Service.updateCharacteristic(this.hap.Characteristic.CoolingThresholdTemperature, e)
524
- }
525
-
526
- async getAirConditionerConfigSettings(accessory: PlatformAccessory, device: irdevice & irDevicesConfig): Promise<void> {
527
- accessory.context.hide_automode = this.hide_automode = (device as irAirConfig).hide_automode
528
- accessory.context.set_max_heat = this.set_max_heat = (device as irAirConfig).set_max_heat ?? 35
529
- accessory.context.set_min_heat = this.set_min_heat = (device as irAirConfig).set_min_heat ?? 0
530
- accessory.context.set_max_cool = this.set_max_cool = (device as irAirConfig).set_max_cool ?? 35
531
- accessory.context.set_min_cool = this.set_min_cool = (device as irAirConfig).set_min_cool ?? 0
532
- }
533
- }