amaran-light-cli 1.10.0 → 1.12.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 (397) hide show
  1. package/README.md +154 -17
  2. package/dist/__tests__/autoCct.test.js +35 -4
  3. package/dist/__tests__/autoCct.test.js.map +1 -1
  4. package/dist/__tests__/autoCctMaxLux.test.js +11 -9
  5. package/dist/__tests__/autoCctMaxLux.test.js.map +1 -1
  6. package/dist/__tests__/autostart.test.js +18 -0
  7. package/dist/__tests__/autostart.test.js.map +1 -1
  8. package/dist/__tests__/bleHttpControl.test.d.ts +2 -0
  9. package/dist/__tests__/bleHttpControl.test.d.ts.map +1 -0
  10. package/dist/__tests__/bleHttpControl.test.js +230 -0
  11. package/dist/__tests__/bleHttpControl.test.js.map +1 -0
  12. package/dist/__tests__/bleStack.test.d.ts +2 -0
  13. package/dist/__tests__/bleStack.test.d.ts.map +1 -0
  14. package/dist/__tests__/bleStack.test.js +1239 -0
  15. package/dist/__tests__/bleStack.test.js.map +1 -0
  16. package/dist/__tests__/cctUtil.test.js +11 -5
  17. package/dist/__tests__/cctUtil.test.js.map +1 -1
  18. package/dist/__tests__/circadianDashboardSettings.test.d.ts +2 -0
  19. package/dist/__tests__/circadianDashboardSettings.test.d.ts.map +1 -0
  20. package/dist/__tests__/circadianDashboardSettings.test.js +82 -0
  21. package/dist/__tests__/circadianDashboardSettings.test.js.map +1 -0
  22. package/dist/__tests__/circadianIsolation.test.d.ts +2 -0
  23. package/dist/__tests__/circadianIsolation.test.d.ts.map +1 -0
  24. package/dist/__tests__/circadianIsolation.test.js +30 -0
  25. package/dist/__tests__/circadianIsolation.test.js.map +1 -0
  26. package/dist/__tests__/cli.config.test.d.ts +2 -0
  27. package/dist/__tests__/cli.config.test.d.ts.map +1 -0
  28. package/dist/__tests__/cli.config.test.js +114 -0
  29. package/dist/__tests__/cli.config.test.js.map +1 -0
  30. package/dist/__tests__/cli.smoke.test.js +70 -17
  31. package/dist/__tests__/cli.smoke.test.js.map +1 -1
  32. package/dist/__tests__/currentCct.test.d.ts +2 -0
  33. package/dist/__tests__/currentCct.test.d.ts.map +1 -0
  34. package/dist/__tests__/currentCct.test.js +29 -0
  35. package/dist/__tests__/currentCct.test.js.map +1 -0
  36. package/dist/__tests__/dashboard.test.d.ts +2 -0
  37. package/dist/__tests__/dashboard.test.d.ts.map +1 -0
  38. package/dist/__tests__/dashboard.test.js +126 -0
  39. package/dist/__tests__/dashboard.test.js.map +1 -0
  40. package/dist/__tests__/daylightSimulationParseUtils.test.d.ts +2 -0
  41. package/dist/__tests__/daylightSimulationParseUtils.test.d.ts.map +1 -0
  42. package/dist/__tests__/daylightSimulationParseUtils.test.js +16 -0
  43. package/dist/__tests__/daylightSimulationParseUtils.test.js.map +1 -0
  44. package/dist/__tests__/desktopImport.test.d.ts +2 -0
  45. package/dist/__tests__/desktopImport.test.d.ts.map +1 -0
  46. package/dist/__tests__/desktopImport.test.js +234 -0
  47. package/dist/__tests__/desktopImport.test.js.map +1 -0
  48. package/dist/__tests__/lightControl.basic.test.d.ts +2 -0
  49. package/dist/__tests__/lightControl.basic.test.d.ts.map +1 -0
  50. package/dist/__tests__/lightControl.basic.test.js +119 -0
  51. package/dist/__tests__/lightControl.basic.test.js.map +1 -0
  52. package/dist/__tests__/lightControl.colorEffects.test.d.ts +2 -0
  53. package/dist/__tests__/lightControl.colorEffects.test.d.ts.map +1 -0
  54. package/dist/__tests__/lightControl.colorEffects.test.js +170 -0
  55. package/dist/__tests__/lightControl.colorEffects.test.js.map +1 -0
  56. package/dist/__tests__/lightControl.management.test.d.ts +2 -0
  57. package/dist/__tests__/lightControl.management.test.d.ts.map +1 -0
  58. package/dist/__tests__/lightControl.management.test.js +90 -0
  59. package/dist/__tests__/lightControl.management.test.js.map +1 -0
  60. package/dist/__tests__/lightControlTestUtils.d.ts +10 -0
  61. package/dist/__tests__/lightControlTestUtils.d.ts.map +1 -0
  62. package/dist/__tests__/lightControlTestUtils.js +57 -0
  63. package/dist/__tests__/lightControlTestUtils.js.map +1 -0
  64. package/dist/__tests__/maxLuxInterpolation.test.js +4 -2
  65. package/dist/__tests__/maxLuxInterpolation.test.js.map +1 -1
  66. package/dist/__tests__/meshConfiguration.test.d.ts +2 -0
  67. package/dist/__tests__/meshConfiguration.test.d.ts.map +1 -0
  68. package/dist/__tests__/meshConfiguration.test.js +78 -0
  69. package/dist/__tests__/meshConfiguration.test.js.map +1 -0
  70. package/dist/__tests__/nativeGroups.test.d.ts +2 -0
  71. package/dist/__tests__/nativeGroups.test.d.ts.map +1 -0
  72. package/dist/__tests__/nativeGroups.test.js +104 -0
  73. package/dist/__tests__/nativeGroups.test.js.map +1 -0
  74. package/dist/__tests__/packageExports.test.d.ts +2 -0
  75. package/dist/__tests__/packageExports.test.d.ts.map +1 -0
  76. package/dist/__tests__/packageExports.test.js +33 -0
  77. package/dist/__tests__/packageExports.test.js.map +1 -0
  78. package/dist/__tests__/programApi.test.d.ts +2 -0
  79. package/dist/__tests__/programApi.test.d.ts.map +1 -0
  80. package/dist/__tests__/programApi.test.js +73 -0
  81. package/dist/__tests__/programApi.test.js.map +1 -0
  82. package/dist/__tests__/programs.test.d.ts +2 -0
  83. package/dist/__tests__/programs.test.d.ts.map +1 -0
  84. package/dist/__tests__/programs.test.js +176 -0
  85. package/dist/__tests__/programs.test.js.map +1 -0
  86. package/dist/__tests__/scheduleMaker.test.d.ts +2 -0
  87. package/dist/__tests__/scheduleMaker.test.d.ts.map +1 -0
  88. package/dist/__tests__/scheduleMaker.test.js +25 -0
  89. package/dist/__tests__/scheduleMaker.test.js.map +1 -0
  90. package/dist/__tests__/simulateSchedule.test.js +7 -3
  91. package/dist/__tests__/simulateSchedule.test.js.map +1 -1
  92. package/dist/ble/async.d.ts +2 -0
  93. package/dist/ble/async.d.ts.map +1 -0
  94. package/dist/ble/async.js +15 -0
  95. package/dist/ble/async.js.map +1 -0
  96. package/dist/ble/colors.d.ts +5 -0
  97. package/dist/ble/colors.d.ts.map +1 -0
  98. package/dist/ble/colors.js +44 -0
  99. package/dist/ble/colors.js.map +1 -0
  100. package/dist/ble/configuration.d.ts +22 -0
  101. package/dist/ble/configuration.d.ts.map +1 -0
  102. package/dist/ble/configuration.js +122 -0
  103. package/dist/ble/configuration.js.map +1 -0
  104. package/dist/ble/controller.d.ts +118 -0
  105. package/dist/ble/controller.d.ts.map +1 -0
  106. package/dist/ble/controller.js +931 -0
  107. package/dist/ble/controller.js.map +1 -0
  108. package/dist/ble/crypto.d.ts +34 -0
  109. package/dist/ble/crypto.d.ts.map +1 -0
  110. package/dist/ble/crypto.js +178 -0
  111. package/dist/ble/crypto.js.map +1 -0
  112. package/dist/ble/daemon.d.ts +2 -0
  113. package/dist/ble/daemon.d.ts.map +1 -0
  114. package/dist/ble/daemon.js +76 -0
  115. package/dist/ble/daemon.js.map +1 -0
  116. package/dist/ble/dashboard.d.ts +331 -0
  117. package/dist/ble/dashboard.d.ts.map +1 -0
  118. package/dist/ble/dashboard.js +280 -0
  119. package/dist/ble/dashboard.js.map +1 -0
  120. package/dist/ble/desktop.d.ts +4 -0
  121. package/dist/ble/desktop.d.ts.map +1 -0
  122. package/dist/ble/desktop.js +33 -0
  123. package/dist/ble/desktop.js.map +1 -0
  124. package/dist/ble/desktopLibrary.d.ts +12 -0
  125. package/dist/ble/desktopLibrary.d.ts.map +1 -0
  126. package/dist/ble/desktopLibrary.js +346 -0
  127. package/dist/ble/desktopLibrary.js.map +1 -0
  128. package/dist/ble/effects.d.ts +34 -0
  129. package/dist/ble/effects.d.ts.map +1 -0
  130. package/dist/ble/effects.js +138 -0
  131. package/dist/ble/effects.js.map +1 -0
  132. package/dist/ble/fan.d.ts +244 -0
  133. package/dist/ble/fan.d.ts.map +1 -0
  134. package/dist/ble/fan.js +46 -0
  135. package/dist/ble/fan.js.map +1 -0
  136. package/dist/ble/library.d.ts +341 -0
  137. package/dist/ble/library.d.ts.map +1 -0
  138. package/dist/ble/library.js +201 -0
  139. package/dist/ble/library.js.map +1 -0
  140. package/dist/ble/media.d.ts +133 -0
  141. package/dist/ble/media.d.ts.map +1 -0
  142. package/dist/ble/media.js +186 -0
  143. package/dist/ble/media.js.map +1 -0
  144. package/dist/ble/nativeGroups.d.ts +22 -0
  145. package/dist/ble/nativeGroups.d.ts.map +1 -0
  146. package/dist/ble/nativeGroups.js +114 -0
  147. package/dist/ble/nativeGroups.js.map +1 -0
  148. package/dist/ble/packets.d.ts +3 -0
  149. package/dist/ble/packets.d.ts.map +1 -0
  150. package/dist/ble/packets.js +15 -0
  151. package/dist/ble/packets.js.map +1 -0
  152. package/dist/ble/programs.d.ts +318 -0
  153. package/dist/ble/programs.d.ts.map +1 -0
  154. package/dist/ble/programs.js +329 -0
  155. package/dist/ble/programs.js.map +1 -0
  156. package/dist/ble/provisioning.d.ts +13 -0
  157. package/dist/ble/provisioning.d.ts.map +1 -0
  158. package/dist/ble/provisioning.js +39 -0
  159. package/dist/ble/provisioning.js.map +1 -0
  160. package/dist/ble/server.d.ts +18 -0
  161. package/dist/ble/server.d.ts.map +1 -0
  162. package/dist/ble/server.js +548 -0
  163. package/dist/ble/server.js.map +1 -0
  164. package/dist/ble/service.d.ts +2 -0
  165. package/dist/ble/service.d.ts.map +1 -0
  166. package/dist/ble/service.js +77 -0
  167. package/dist/ble/service.js.map +1 -0
  168. package/dist/ble/settings.d.ts +18 -0
  169. package/dist/ble/settings.d.ts.map +1 -0
  170. package/dist/ble/settings.js +25 -0
  171. package/dist/ble/settings.js.map +1 -0
  172. package/dist/ble/setup.d.ts +2 -0
  173. package/dist/ble/setup.d.ts.map +1 -0
  174. package/dist/ble/setup.js +31 -0
  175. package/dist/ble/setup.js.map +1 -0
  176. package/dist/ble/storage.d.ts +94 -0
  177. package/dist/ble/storage.d.ts.map +1 -0
  178. package/dist/ble/storage.js +132 -0
  179. package/dist/ble/storage.js.map +1 -0
  180. package/dist/ble/telink.d.ts +63 -0
  181. package/dist/ble/telink.d.ts.map +1 -0
  182. package/dist/ble/telink.js +108 -0
  183. package/dist/ble/telink.js.map +1 -0
  184. package/dist/ble/transitions.d.ts +3 -0
  185. package/dist/ble/transitions.d.ts.map +1 -0
  186. package/dist/ble/transitions.js +28 -0
  187. package/dist/ble/transitions.js.map +1 -0
  188. package/dist/ble/transport.d.ts +48 -0
  189. package/dist/ble/transport.d.ts.map +1 -0
  190. package/dist/ble/transport.js +370 -0
  191. package/dist/ble/transport.js.map +1 -0
  192. package/dist/circadian.d.ts +19 -0
  193. package/dist/circadian.d.ts.map +1 -0
  194. package/dist/circadian.js +13 -0
  195. package/dist/circadian.js.map +1 -0
  196. package/dist/cli.d.ts +5 -3
  197. package/dist/cli.d.ts.map +1 -1
  198. package/dist/cli.js +159 -33
  199. package/dist/cli.js.map +1 -1
  200. package/dist/commands/__tests__/integration.test.js +28 -0
  201. package/dist/commands/__tests__/integration.test.js.map +1 -1
  202. package/dist/commands/__tests__/newCommands.test.js +3 -4
  203. package/dist/commands/__tests__/newCommands.test.js.map +1 -1
  204. package/dist/commands/cmdUtils.d.ts +8 -2
  205. package/dist/commands/cmdUtils.d.ts.map +1 -1
  206. package/dist/commands/cmdUtils.js +40 -2
  207. package/dist/commands/cmdUtils.js.map +1 -1
  208. package/dist/commands/daylightSimulation/autoCct.d.ts.map +1 -1
  209. package/dist/commands/daylightSimulation/autoCct.js +74 -172
  210. package/dist/commands/daylightSimulation/autoCct.js.map +1 -1
  211. package/dist/commands/daylightSimulation/graphSchedule.d.ts +1 -1
  212. package/dist/commands/daylightSimulation/graphSchedule.d.ts.map +1 -1
  213. package/dist/commands/daylightSimulation/graphSchedule.js +2 -0
  214. package/dist/commands/daylightSimulation/graphSchedule.js.map +1 -1
  215. package/dist/commands/daylightSimulation/printSchedule.d.ts +1 -1
  216. package/dist/commands/daylightSimulation/printSchedule.d.ts.map +1 -1
  217. package/dist/commands/daylightSimulation/printSchedule.js +4 -2
  218. package/dist/commands/daylightSimulation/printSchedule.js.map +1 -1
  219. package/dist/commands/daylightSimulation/service.d.ts +1 -1
  220. package/dist/commands/daylightSimulation/service.d.ts.map +1 -1
  221. package/dist/commands/daylightSimulation/service.js +20 -10
  222. package/dist/commands/daylightSimulation/service.js.map +1 -1
  223. package/dist/commands/daylightSimulation/simulateSchedule.d.ts +1 -1
  224. package/dist/commands/daylightSimulation/simulateSchedule.d.ts.map +1 -1
  225. package/dist/commands/daylightSimulation/simulateSchedule.js +31 -13
  226. package/dist/commands/daylightSimulation/simulateSchedule.js.map +1 -1
  227. package/dist/commands/daylightSimulation/weather.d.ts.map +1 -1
  228. package/dist/commands/daylightSimulation/weather.js +19 -4
  229. package/dist/commands/daylightSimulation/weather.js.map +1 -1
  230. package/dist/commands/deviceControl/ble.d.ts +4 -0
  231. package/dist/commands/deviceControl/ble.d.ts.map +1 -0
  232. package/dist/commands/deviceControl/ble.js +214 -0
  233. package/dist/commands/deviceControl/ble.js.map +1 -0
  234. package/dist/commands/deviceControl/cct.d.ts.map +1 -1
  235. package/dist/commands/deviceControl/cct.js +47 -19
  236. package/dist/commands/deviceControl/cct.js.map +1 -1
  237. package/dist/commands/deviceControl/color.d.ts.map +1 -1
  238. package/dist/commands/deviceControl/color.js +16 -12
  239. package/dist/commands/deviceControl/color.js.map +1 -1
  240. package/dist/commands/deviceControl/config.d.ts.map +1 -1
  241. package/dist/commands/deviceControl/config.js +94 -58
  242. package/dist/commands/deviceControl/config.js.map +1 -1
  243. package/dist/commands/deviceControl/{discover.d.ts → desktop.d.ts} +3 -2
  244. package/dist/commands/deviceControl/desktop.d.ts.map +1 -0
  245. package/dist/commands/deviceControl/desktop.js +66 -0
  246. package/dist/commands/deviceControl/desktop.js.map +1 -0
  247. package/dist/commands/deviceControl/effect.d.ts.map +1 -1
  248. package/dist/commands/deviceControl/effect.js +90 -159
  249. package/dist/commands/deviceControl/effect.js.map +1 -1
  250. package/dist/commands/deviceControl/fan.d.ts.map +1 -1
  251. package/dist/commands/deviceControl/fan.js +77 -95
  252. package/dist/commands/deviceControl/fan.js.map +1 -1
  253. package/dist/commands/deviceControl/group.d.ts.map +1 -1
  254. package/dist/commands/deviceControl/group.js +43 -6
  255. package/dist/commands/deviceControl/group.js.map +1 -1
  256. package/dist/commands/deviceControl/hsi.d.ts.map +1 -1
  257. package/dist/commands/deviceControl/hsi.js +6 -10
  258. package/dist/commands/deviceControl/hsi.js.map +1 -1
  259. package/dist/commands/deviceControl/info.d.ts.map +1 -1
  260. package/dist/commands/deviceControl/info.js +0 -50
  261. package/dist/commands/deviceControl/info.js.map +1 -1
  262. package/dist/commands/deviceControl/intensity.d.ts.map +1 -1
  263. package/dist/commands/deviceControl/intensity.js +38 -16
  264. package/dist/commands/deviceControl/intensity.js.map +1 -1
  265. package/dist/commands/deviceControl/list.d.ts.map +1 -1
  266. package/dist/commands/deviceControl/list.js +21 -15
  267. package/dist/commands/deviceControl/list.js.map +1 -1
  268. package/dist/commands/deviceControl/power.d.ts.map +1 -1
  269. package/dist/commands/deviceControl/power.js +19 -28
  270. package/dist/commands/deviceControl/power.js.map +1 -1
  271. package/dist/commands/deviceControl/preset.d.ts.map +1 -1
  272. package/dist/commands/deviceControl/preset.js +56 -19
  273. package/dist/commands/deviceControl/preset.js.map +1 -1
  274. package/dist/commands/deviceControl/program.d.ts +4 -0
  275. package/dist/commands/deviceControl/program.d.ts.map +1 -0
  276. package/dist/commands/deviceControl/program.js +199 -0
  277. package/dist/commands/deviceControl/program.js.map +1 -0
  278. package/dist/commands/deviceControl/quickshot.d.ts.map +1 -1
  279. package/dist/commands/deviceControl/quickshot.js +75 -13
  280. package/dist/commands/deviceControl/quickshot.js.map +1 -1
  281. package/dist/commands/deviceControl/scene.d.ts.map +1 -1
  282. package/dist/commands/deviceControl/scene.js +72 -9
  283. package/dist/commands/deviceControl/scene.js.map +1 -1
  284. package/dist/commands/deviceControl/status.d.ts.map +1 -1
  285. package/dist/commands/deviceControl/status.js +29 -6
  286. package/dist/commands/deviceControl/status.js.map +1 -1
  287. package/dist/commands/parseUtils.d.ts +6 -0
  288. package/dist/commands/parseUtils.d.ts.map +1 -0
  289. package/dist/commands/parseUtils.js +32 -0
  290. package/dist/commands/parseUtils.js.map +1 -0
  291. package/dist/commands-api.d.ts +28 -0
  292. package/dist/commands-api.d.ts.map +1 -0
  293. package/dist/commands-api.js +27 -0
  294. package/dist/commands-api.js.map +1 -0
  295. package/dist/commands.d.ts.map +1 -1
  296. package/dist/commands.js +4 -2
  297. package/dist/commands.js.map +1 -1
  298. package/dist/config.d.ts +165 -0
  299. package/dist/config.d.ts.map +1 -0
  300. package/dist/config.js +125 -0
  301. package/dist/config.js.map +1 -0
  302. package/dist/daylightSimulation/cctUtil.d.ts.map +1 -1
  303. package/dist/daylightSimulation/cctUtil.js +23 -22
  304. package/dist/daylightSimulation/cctUtil.js.map +1 -1
  305. package/dist/daylightSimulation/constants.d.ts +10 -0
  306. package/dist/daylightSimulation/constants.d.ts.map +1 -1
  307. package/dist/daylightSimulation/constants.js +4 -0
  308. package/dist/daylightSimulation/constants.js.map +1 -1
  309. package/dist/daylightSimulation/currentCct.d.ts +42 -0
  310. package/dist/daylightSimulation/currentCct.d.ts.map +1 -0
  311. package/dist/daylightSimulation/currentCct.js +217 -0
  312. package/dist/daylightSimulation/currentCct.js.map +1 -0
  313. package/dist/daylightSimulation/curves/realistic.d.ts +6 -6
  314. package/dist/daylightSimulation/curves/realistic.d.ts.map +1 -1
  315. package/dist/daylightSimulation/curves/realistic.js +36 -6
  316. package/dist/daylightSimulation/curves/realistic.js.map +1 -1
  317. package/dist/daylightSimulation/dashboardSettings.d.ts +47 -0
  318. package/dist/daylightSimulation/dashboardSettings.d.ts.map +1 -0
  319. package/dist/daylightSimulation/dashboardSettings.js +95 -0
  320. package/dist/daylightSimulation/dashboardSettings.js.map +1 -0
  321. package/dist/daylightSimulation/dashboardStatus.d.ts +72 -0
  322. package/dist/daylightSimulation/dashboardStatus.d.ts.map +1 -0
  323. package/dist/daylightSimulation/dashboardStatus.js +191 -0
  324. package/dist/daylightSimulation/dashboardStatus.js.map +1 -0
  325. package/dist/daylightSimulation/mathUtil.d.ts.map +1 -1
  326. package/dist/daylightSimulation/mathUtil.js +6 -2
  327. package/dist/daylightSimulation/mathUtil.js.map +1 -1
  328. package/dist/daylightSimulation/parseUtils.d.ts +3 -0
  329. package/dist/daylightSimulation/parseUtils.d.ts.map +1 -0
  330. package/dist/daylightSimulation/parseUtils.js +25 -0
  331. package/dist/daylightSimulation/parseUtils.js.map +1 -0
  332. package/dist/daylightSimulation/scheduleMaker.d.ts +6 -2
  333. package/dist/daylightSimulation/scheduleMaker.d.ts.map +1 -1
  334. package/dist/daylightSimulation/scheduleMaker.js +9 -11
  335. package/dist/daylightSimulation/scheduleMaker.js.map +1 -1
  336. package/dist/daylightSimulation/types.d.ts +15 -2
  337. package/dist/daylightSimulation/types.d.ts.map +1 -1
  338. package/dist/daylightSimulation/types.js +0 -2
  339. package/dist/daylightSimulation/types.js.map +1 -1
  340. package/dist/daylightSimulation/weatherUtil.d.ts.map +1 -1
  341. package/dist/daylightSimulation/weatherUtil.js +31 -0
  342. package/dist/daylightSimulation/weatherUtil.js.map +1 -1
  343. package/dist/device-control.d.ts +8 -0
  344. package/dist/device-control.d.ts.map +1 -0
  345. package/dist/device-control.js +8 -0
  346. package/dist/device-control.js.map +1 -0
  347. package/dist/deviceControl/autostart.d.ts.map +1 -1
  348. package/dist/deviceControl/autostart.js +15 -16
  349. package/dist/deviceControl/autostart.js.map +1 -1
  350. package/dist/deviceControl/bleHttpControl.d.ts +129 -0
  351. package/dist/deviceControl/bleHttpControl.d.ts.map +1 -0
  352. package/dist/deviceControl/bleHttpControl.js +753 -0
  353. package/dist/deviceControl/bleHttpControl.js.map +1 -0
  354. package/dist/deviceControl/lightControl.d.ts +9 -68
  355. package/dist/deviceControl/lightControl.d.ts.map +1 -1
  356. package/dist/deviceControl/lightControl.js +25 -255
  357. package/dist/deviceControl/lightControl.js.map +1 -1
  358. package/dist/deviceControl/lightControlCommands.d.ts +68 -0
  359. package/dist/deviceControl/lightControlCommands.d.ts.map +1 -0
  360. package/dist/deviceControl/lightControlCommands.js +244 -0
  361. package/dist/deviceControl/lightControlCommands.js.map +1 -0
  362. package/dist/deviceControl/types.d.ts +83 -4
  363. package/dist/deviceControl/types.d.ts.map +1 -1
  364. package/dist/deviceControl/types.js +1 -0
  365. package/dist/deviceControl/types.js.map +1 -1
  366. package/dist/index.d.ts +12 -0
  367. package/dist/index.d.ts.map +1 -0
  368. package/dist/index.js +8 -0
  369. package/dist/index.js.map +1 -0
  370. package/dist/test/MockLightServer.d.ts +1 -0
  371. package/dist/test/MockLightServer.d.ts.map +1 -1
  372. package/dist/test/MockLightServer.js +5 -0
  373. package/dist/test/MockLightServer.js.map +1 -1
  374. package/docs/CHANGELOG.md +171 -0
  375. package/docs/DIRECT_BLE.md +359 -0
  376. package/package.json +39 -8
  377. package/scripts/ble-cli-check.ts +129 -0
  378. package/scripts/ble-config-probe.ts +109 -0
  379. package/scripts/ble-effects-check.ts +82 -0
  380. package/scripts/ble-extended-probe.ts +44 -0
  381. package/scripts/ble-fan-check.ts +129 -0
  382. package/scripts/ble-feature-probe.ts +37 -0
  383. package/scripts/ble-followup-check.ts +165 -0
  384. package/scripts/ble-hardware-check.ts +99 -0
  385. package/scripts/ble-live-extended-check.ts +205 -0
  386. package/scripts/ble-non-ota-check.ts +193 -0
  387. package/scripts/ble-probe.ts +45 -0
  388. package/scripts/calibrate-webcam.ts +152 -0
  389. package/scripts/desktop-reference.ts +85 -0
  390. package/scripts/webcam.ts +129 -0
  391. package/dist/__tests__/lightControl.test.d.ts +0 -2
  392. package/dist/__tests__/lightControl.test.d.ts.map +0 -1
  393. package/dist/__tests__/lightControl.test.js +0 -424
  394. package/dist/__tests__/lightControl.test.js.map +0 -1
  395. package/dist/commands/deviceControl/discover.d.ts.map +0 -1
  396. package/dist/commands/deviceControl/discover.js +0 -29
  397. package/dist/commands/deviceControl/discover.js.map +0 -1
@@ -0,0 +1,66 @@
1
+ import chalk from 'chalk';
2
+ import { discoverLocalWebSocket } from '../../deviceControl/discovery.js';
3
+ import { runDeviceAction } from '../cmdUtils.js';
4
+ export function registerDesktop(program, deps) {
5
+ const { asyncCommand } = deps;
6
+ const desktop = program.command('desktop').description('Amaran Desktop compatibility and vendor lifecycle commands');
7
+ registerDesktopDiscovery(desktop, deps);
8
+ const firmware = desktop.command('firmware').description('Amaran Desktop firmware management');
9
+ firmware
10
+ .command('update <device>')
11
+ .description('Start a vendor firmware update through Amaran Desktop')
12
+ .option('-u, --url <url>', 'Amaran Desktop WebSocket URL')
13
+ .option('-c, --client-id <id>', 'Client ID')
14
+ .option('-d, --debug', 'Enable debug mode')
15
+ .action(asyncCommand(handleFirmwareUpdate(deps)));
16
+ }
17
+ function registerDesktopDiscovery(parent, deps) {
18
+ parent
19
+ .command('discover')
20
+ .description('Discover and save the local Amaran Desktop WebSocket endpoint')
21
+ .option('-d, --debug', 'Enable debug output')
22
+ .action(deps.asyncCommand(handleDiscover(deps)));
23
+ }
24
+ export function registerDiscover(program, deps) {
25
+ registerDesktopDiscovery(program, deps);
26
+ }
27
+ function handleDiscover(deps) {
28
+ const { saveWsUrl } = deps;
29
+ return async (options) => {
30
+ const res = await discoverLocalWebSocket('127.0.0.1', !!options.debug);
31
+ if (res) {
32
+ console.log(chalk.green(`Found WebSocket: ${res.url} (process: ${res.process})`));
33
+ if (saveWsUrl) {
34
+ saveWsUrl(res.url);
35
+ console.log(chalk.green('Saved to configuration.'));
36
+ }
37
+ }
38
+ else {
39
+ console.log(chalk.yellow('No local Amaran Desktop WebSocket found via lsof'));
40
+ }
41
+ };
42
+ }
43
+ function handleFirmwareUpdate(deps) {
44
+ return async (deviceQuery, options) => {
45
+ return runDeviceAction({
46
+ deps,
47
+ options: { ...options, backend: 'desktop' },
48
+ deviceQuery,
49
+ actionName: 'update firmware through Amaran Desktop',
50
+ }, (device, controller) => {
51
+ return new Promise((resolve) => {
52
+ controller.updateFirmware(device.node_id, (success, message, data) => {
53
+ if (success) {
54
+ console.log(chalk.green('Firmware update started through Amaran Desktop:'), data);
55
+ }
56
+ else {
57
+ console.error(chalk.red(`Error starting firmware update through Amaran Desktop: ${message}`));
58
+ }
59
+ resolve();
60
+ });
61
+ });
62
+ }, () => Promise.resolve());
63
+ };
64
+ }
65
+ export default registerDesktop;
66
+ //# sourceMappingURL=desktop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"desktop.js","sourceRoot":"","sources":["../../../src/commands/deviceControl/desktop.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"effect.d.ts","sourceRoot":"","sources":["../../../src/commands/deviceControl/effect.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAA0B,MAAM,8BAA8B,CAAC;AAGxF,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,QA0BjE;AAmLD,eAAe,cAAc,CAAC"}
1
+ {"version":3,"file":"effect.d.ts","sourceRoot":"","sources":["../../../src/commands/deviceControl/effect.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGzC,OAAO,KAAK,EAAE,WAAW,EAAkB,MAAM,8BAA8B,CAAC;AAShF,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,QAoKjE;AAED,eAAe,cAAc,CAAC"}
@@ -1,172 +1,103 @@
1
1
  import chalk from 'chalk';
2
- import { addStandardOptions, runDeviceAction } from '../cmdUtils.js';
2
+ import { z } from 'zod';
3
+ import { numberInRange } from '../../ble/packets.js';
4
+ import { addStandardOptions, commandCallbackResult, getLightDevices, requireBleController, runDeviceAction, } from '../cmdUtils.js';
3
5
  export function registerEffect(program, deps) {
4
- const { asyncCommand } = deps;
5
- const effect = program.command('effect').description('Control effects');
6
- addStandardOptions(effect.command('list').description('List available system effects')).action(asyncCommand(handleEffectList(deps)));
6
+ const effect = program
7
+ .command('effect')
8
+ .description('Native lighting effects (flashing effects should be used cautiously)');
7
9
  addStandardOptions(effect
8
- .command('set <device> <effect_type>')
9
- .option('-i, --intensity <percent>', 'Intensity percentage')
10
- .description('Set a system effect')).action(asyncCommand(handleEffectSet(deps)));
11
- addStandardOptions(effect.command('custom <device> <effect_name>').description('Set a custom effect by name')).action(asyncCommand(handleEffectCustom(deps)));
12
- addStandardOptions(effect.command('speed <device> <speed>').description('Set effect speed')).action(asyncCommand(handleEffectSpeed(deps)));
13
- addStandardOptions(effect.command('intensity <device> <intensity>').description('Set effect intensity')).action(asyncCommand(handleEffectIntensity(deps)));
14
- }
15
- function handleEffectList(deps) {
16
- const { createController } = deps;
17
- return async (options) => {
18
- const controller = await createController(options.url, options.clientId, options.debug);
19
- controller.getSystemEffectList((success, message, data) => {
20
- if (success) {
21
- const effects = data.data;
22
- console.log(chalk.blue('System Effects:'));
23
- effects.forEach((eff) => {
24
- console.log(` - ${eff}`);
25
- });
26
- }
27
- else {
28
- console.error(chalk.red(`Error getting effect list: ${message}`));
29
- }
30
- controller.disconnect();
10
+ .command('trigger <device>')
11
+ .alias('retrigger')
12
+ .description('Send one native trigger request; fixture event acknowledgement is unavailable')).action(deps.asyncCommand(async (deviceQuery, options) => {
13
+ await runDeviceAction({ deps, options, deviceQuery, actionName: 'request effect trigger' }, async (device, controller) => {
14
+ await commandCallbackResult((cb) => requireBleController(controller).triggerEffect(device.node_id, cb));
15
+ }, async (controller) => {
16
+ await commandCallbackResult((cb) => requireBleController(controller).batch('all', 'effect-trigger', {}, false, cb));
31
17
  });
32
- };
33
- }
34
- function handleEffectSet(deps) {
35
- return async (deviceQuery, effectType, options) => {
36
- let intensity;
37
- if (options.intensity) {
38
- const p = parseFloat(options.intensity);
39
- if (!Number.isNaN(p)) {
40
- intensity = p * 10; // Convert to API scale
41
- }
18
+ console.log('Trigger request sent; settings readback verified. Physical trigger event is not acknowledged by the fixture.');
19
+ }));
20
+ addStandardOptions(effect.command('list').description('List native effects; availability varies by fixture')).action(deps.asyncCommand(async (options) => {
21
+ const controller = await deps.createController(options.url, options.clientId, options.debug, options.backend);
22
+ try {
23
+ console.log(JSON.stringify(await commandCallbackResult((callback) => controller.getSystemEffectList(callback)), null, 2));
42
24
  }
43
- // Special handling for "all" devices
44
- if (deviceQuery.toLowerCase() === 'all') {
45
- const { createController } = deps;
46
- const controller = await createController(options.url, options.clientId, options.debug);
47
- try {
48
- await controller.setSystemEffectForAllLights(effectType, intensity, (success, message) => {
49
- if (!success) {
50
- console.error(chalk.red(`Error setting effect for all lights: ${message}`));
51
- }
52
- });
53
- console.log(chalk.green(`Effect ${effectType} set for all lights`));
54
- }
55
- finally {
56
- await controller.disconnect();
57
- }
58
- return;
25
+ finally {
26
+ await controller.disconnect();
59
27
  }
60
- return runDeviceAction({
61
- deps,
62
- options,
63
- deviceQuery,
64
- actionName: `set effect ${effectType}`,
65
- }, (device, controller) => {
66
- return new Promise((resolve) => {
67
- controller.setSystemEffect(device.node_id, effectType, intensity, (success, message) => {
68
- if (success) {
69
- console.log(chalk.green(`✓ Effect ${effectType} set on ${device.device_name || 'device'}`));
70
- }
71
- else {
72
- console.error(chalk.red(`✗ Failed to set effect: ${message}`));
73
- }
74
- resolve();
75
- });
76
- });
77
- }, () => {
78
- console.log(chalk.yellow('Bulk effect set not supported.'));
79
- return Promise.resolve();
28
+ }));
29
+ addStandardOptions(effect
30
+ .command('set <device> <effect_type>')
31
+ .description('Start a native effect, optionally setting brightness in percent')
32
+ .option('-i, --intensity <percent>', 'Brightness 0-100; omitted preserves current output')).action(deps.asyncCommand(async (deviceQuery, name, options) => {
33
+ const intensity = options.intensity === undefined
34
+ ? undefined
35
+ : numberInRange(Number(options.intensity), 'brightness', 0, 100) * 10;
36
+ await runDeviceAction({ deps, options, deviceQuery, actionName: `set ${name}` }, async (device, controller) => {
37
+ await commandCallbackResult((callback) => controller.setSystemEffect(device.node_id, name, intensity, callback));
38
+ }, async (controller) => {
39
+ await commandCallbackResult((callback) => controller.setSystemEffectForAllLights(name, intensity, callback));
80
40
  });
81
- };
82
- }
83
- function handleEffectCustom(deps) {
84
- return async (deviceQuery, effectName, options) => {
85
- return runDeviceAction({
86
- deps,
87
- options,
88
- deviceQuery,
89
- actionName: `set custom effect ${effectName}`,
90
- }, (device, controller) => {
91
- return new Promise((resolve) => {
92
- controller.setEffect(device.node_id, effectName, {}, (success, message) => {
93
- if (success) {
94
- console.log(chalk.green(`✓ Custom effect ${effectName} set on ${device.device_name || 'device'}`));
95
- }
96
- else {
97
- console.error(chalk.red(`✗ Failed to set custom effect: ${message}`));
98
- }
99
- resolve();
100
- });
101
- });
102
- }, () => {
103
- console.log(chalk.yellow('Bulk custom effect not supported.'));
104
- return Promise.resolve();
41
+ console.log(chalk.green(`Effect ${name} set on ${deviceQuery}`));
42
+ }));
43
+ addStandardOptions(effect
44
+ .command('custom <device> <effect_name>')
45
+ .description('Start a native effect with validated effect-specific parameters')
46
+ .option('--params <json>', 'Effect parameters: brightness, frequency, speed, trigger, kelvin, gm, palette, hue, saturation', '{}')).action(deps.asyncCommand(async (deviceQuery, name, options) => {
47
+ const args = z.record(z.unknown()).parse(JSON.parse(String(options.params)));
48
+ await runDeviceAction({ deps, options, deviceQuery, actionName: `set ${name}` }, async (device, controller) => {
49
+ await commandCallbackResult((callback) => controller.setEffect(device.node_id, name, args, callback));
50
+ }, async (controller) => {
51
+ await commandCallbackResult((callback) => requireBleController(controller).batch('all', 'effect', { ...args, name }, false, callback));
105
52
  });
106
- };
107
- }
108
- function handleEffectSpeed(deps) {
109
- return async (deviceQuery, speedStr, options) => {
110
- const speed = parseInt(speedStr, 10);
111
- if (Number.isNaN(speed)) {
112
- console.error(chalk.red('Speed must be a number'));
113
- return;
114
- }
115
- return runDeviceAction({
116
- deps,
117
- options,
118
- deviceQuery,
119
- actionName: `set effect speed to ${speed}`,
120
- }, (device, controller) => {
121
- return new Promise((resolve) => {
122
- controller.setEffectSpeed(device.node_id, speed, (success, message) => {
123
- if (success) {
124
- console.log(chalk.green(`✓ Effect speed set to ${speed} on ${device.device_name || 'device'}`));
125
- }
126
- else {
127
- console.error(chalk.red(`✗ Failed to set effect speed: ${message}`));
128
- }
129
- resolve();
130
- });
131
- });
132
- }, () => {
133
- console.log(chalk.yellow('Bulk effect speed not supported.'));
134
- return Promise.resolve();
53
+ console.log(chalk.green(`Effect ${name} applied to ${deviceQuery}`));
54
+ }));
55
+ addStandardOptions(effect
56
+ .command('animation-speed <device> <value>')
57
+ .description('Set native animation speed (0-10) for lightning, faulty-bulb or pulsing')).action(deps.asyncCommand(async (deviceQuery, value, options) => {
58
+ const speed = numberInRange(Number(value), 'animation speed', 0, 10);
59
+ await runDeviceAction({ deps, options, deviceQuery, actionName: 'set effect animation speed' }, async (device, controller) => {
60
+ await commandCallbackResult((callback) => requireBleController(controller).setEffectAnimationSpeed(device.node_id, speed, callback));
61
+ }, async (controller) => {
62
+ for (const light of getLightDevices(controller.getDevices()))
63
+ await commandCallbackResult((callback) => requireBleController(controller).setEffectAnimationSpeed(light.node_id, speed, callback));
135
64
  });
136
- };
137
- }
138
- function handleEffectIntensity(deps) {
139
- return async (deviceQuery, valueStr, options) => {
140
- const value = parseInt(valueStr, 10);
141
- if (Number.isNaN(value)) {
142
- console.error(chalk.red('Intensity must be a number'));
143
- return;
144
- }
145
- // Note: The API usually expects 0-1000 range or similar. Check constants.
146
- // Assuming user inputs API value directly for this low-level command,
147
- // or we could map from percent. Let's assume input matches API expectation for now.
148
- return runDeviceAction({
149
- deps,
150
- options,
151
- deviceQuery,
152
- actionName: `set effect intensity to ${value}`,
153
- }, (device, controller) => {
154
- return new Promise((resolve) => {
155
- controller.setEffectIntensity(device.node_id, value, (success, message) => {
156
- if (success) {
157
- console.log(chalk.green(`✓ Effect intensity set to ${value} on ${device.device_name || 'device'}`));
158
- }
159
- else {
160
- console.error(chalk.red(`✗ Failed to set effect intensity: ${message}`));
161
- }
162
- resolve();
163
- });
65
+ console.log(chalk.green(`Effect animation speed applied to ${deviceQuery}`));
66
+ }));
67
+ for (const control of ['speed', 'intensity', 'stop']) {
68
+ const command = effect
69
+ .command(control === 'stop' ? 'stop <device>' : `${control} <device> <value>`)
70
+ .description(control === 'stop'
71
+ ? 'Restore pre-effect CCT/HSI, brightness and power (BLE)'
72
+ : control === 'speed'
73
+ ? 'Set native effect frequency (1-10)'
74
+ : 'Set effect intensity (legacy API units 0-1000)');
75
+ const run = async (deviceQuery, value, options) => {
76
+ const number = control === 'stop'
77
+ ? 0
78
+ : numberInRange(Number(value), control, control === 'speed' ? 1 : 0, control === 'speed' ? 10 : 1000);
79
+ const apply = async (id, controller) => {
80
+ await commandCallbackResult((callback) => control === 'stop'
81
+ ? requireBleController(controller).stopEffect(id, callback)
82
+ : control === 'speed'
83
+ ? controller.setEffectSpeed(id, number, callback)
84
+ : controller.setEffectIntensity(id, number, callback));
85
+ };
86
+ await runDeviceAction({ deps, options, deviceQuery, actionName: `effect ${control}` }, (device, controller) => apply(device.node_id, controller), async (controller) => {
87
+ if (control === 'stop') {
88
+ await commandCallbackResult((callback) => requireBleController(controller).batch('all', 'effect-stop', {}, false, callback));
89
+ return;
90
+ }
91
+ for (const light of getLightDevices(controller.getDevices()))
92
+ await apply(light.node_id, controller);
164
93
  });
165
- }, () => {
166
- console.log(chalk.yellow('Bulk effect intensity not supported.'));
167
- return Promise.resolve();
168
- });
169
- };
94
+ console.log(chalk.green(`Effect ${control} applied to ${deviceQuery}`));
95
+ };
96
+ if (control === 'stop')
97
+ addStandardOptions(command).action(deps.asyncCommand((device, options) => run(device, undefined, options)));
98
+ else
99
+ addStandardOptions(command).action(deps.asyncCommand(run));
100
+ }
170
101
  }
171
102
  export default registerEffect;
172
103
  //# sourceMappingURL=effect.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"effect.js","sourceRoot":"","sources":["../../../src/commands/deviceControl/effect.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"effect.js","sourceRoot":"","sources":["../../../src/commands/deviceControl/effect.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"fan.d.ts","sourceRoot":"","sources":["../../../src/commands/deviceControl/fan.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAA0B,MAAM,8BAA8B,CAAC;AAGxF,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,QAe9D;AA8GD,eAAe,WAAW,CAAC"}
1
+ {"version":3,"file":"fan.d.ts","sourceRoot":"","sources":["../../../src/commands/deviceControl/fan.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIzC,OAAO,KAAK,EAAE,WAAW,EAA2C,MAAM,8BAA8B,CAAC;AAGzG,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,QAuC9D;AAmED,eAAe,WAAW,CAAC"}
@@ -1,105 +1,87 @@
1
1
  import chalk from 'chalk';
2
- import { addStandardOptions, runDeviceAction } from '../cmdUtils.js';
2
+ import { FanStatesSchema } from '../../ble/fan.js';
3
+ import { FAN_MODES, parseFanMode, validateFanRpm } from '../../ble/telink.js';
4
+ import BleHttpController from '../../deviceControl/bleHttpControl.js';
5
+ import { addStandardOptions, commandCallbackResult, getLightDevices, runDeviceAction } from '../cmdUtils.js';
3
6
  export function registerFan(program, deps) {
4
- const { asyncCommand } = deps;
5
- const fan = program.command('fan').description('Control fan settings');
6
- addStandardOptions(fan.command('mode <device> <mode>').description('Set fan mode (e.g. 0=Auto, 1=Smart, 2=High, 3=Medium, 4=Silent)')).action(asyncCommand(handleFanMode(deps)));
7
- addStandardOptions(fan.command('speed <device> <speed>').description('Set fan speed')).action(asyncCommand(handleFanSpeed(deps)));
8
- addStandardOptions(fan.command('info <device>').description('Get fan status')).action(asyncCommand(handleFanInfo(deps)));
7
+ const fan = program
8
+ .command('fan')
9
+ .description('Native fan profiles and thermal telemetry for fixtures, groups or all');
10
+ addStandardOptions(fan
11
+ .command('mode <device> <mode>')
12
+ .description('manual=0, smart=1, max=2, off=3, high=4, medium=5, low=6, silent=7; requires advertised support')
13
+ .option('--rpm <rpm>', 'Required for manual mode: integer 0-65535; zero requires LEDs off')
14
+ .option('--json', 'Output keyed BLE fan states as JSON')).action(deps.asyncCommand(async (device, value, options) => {
15
+ const mode = parseFanMode(value);
16
+ const input = typeof options.rpm === 'string' && options.rpm.trim() ? Number(options.rpm) : options.rpm;
17
+ const rpm = validateFanRpm(mode, input);
18
+ await fanAction(deps, options, device, mode, rpm);
19
+ }));
20
+ addStandardOptions(fan
21
+ .command('info [device]')
22
+ .description('Read fan mode, reported RPM, temperature and protection status; defaults to all')
23
+ .option('--json', 'Output keyed BLE fan states as JSON')).action(deps.asyncCommand(async (device, options) => {
24
+ await fanAction(deps, options, device);
25
+ }));
26
+ addStandardOptions(fan
27
+ .command('speed <device> <speed>')
28
+ .description('Select manual mode with the requested RPM (0-65535); requires advertised manual support')
29
+ .option('--json', 'Output keyed BLE fan states as JSON')).action(deps.asyncCommand(async (device, value, options) => {
30
+ const rpm = validateFanRpm('manual', value.trim() ? Number(value) : NaN);
31
+ await fanAction(deps, options, device, 'manual', rpm);
32
+ }));
9
33
  }
10
- function handleFanMode(deps) {
11
- return async (deviceQuery, modeStr, options) => {
12
- const mode = parseInt(modeStr, 10);
13
- if (Number.isNaN(mode)) {
14
- console.error(chalk.red('Fan mode must be a number'));
15
- return;
16
- }
17
- return runDeviceAction({
18
- deps,
19
- options,
20
- deviceQuery,
21
- actionName: `set fan mode to ${mode}`,
22
- }, (device, controller) => {
23
- return new Promise((resolve) => {
24
- controller.setFanMode(device.node_id, mode, (success, message) => {
25
- if (success) {
26
- console.log(chalk.green(`✓ Fan mode set to ${mode} on ${device.device_name || 'device'}`));
27
- }
28
- else {
29
- console.error(chalk.red(`✗ Failed to set fan mode: ${message}`));
30
- }
31
- resolve();
32
- });
33
- });
34
- }, () => {
35
- console.log(chalk.yellow('Bulk fan control not supported.'));
36
- return Promise.resolve();
37
- });
38
- };
34
+ function printFan(name, state, desired) {
35
+ if (desired !== undefined)
36
+ console.log(chalk.green(`Fan mode set to ${state.mode} (${state.modeName ?? desired}) on ${name}`));
37
+ else
38
+ console.log(chalk.blue(`Fan Information for ${name}:`));
39
+ console.log(` Mode: ${state.modeName ?? 'unknown'} (${state.mode})`);
40
+ console.log(` Reported RPM: ${state.speed}${state.speed === 0 ? ' (zero reported; not a confirmed fan fault)' : ''}`);
41
+ console.log(` Reported temperature: ${state.temperature}`);
42
+ console.log(` Thermal protection: ${state.highTemperature ? chalk.red('ACTIVE - allow cooling; do not restart') : 'not active'}`);
43
+ console.log(` Available profiles: ${state.allowedModes?.join(', ') || 'none reported'}`);
44
+ const unsupported = Object.keys(FAN_MODES).filter((mode) => !state.supported[parseFanMode(mode)]);
45
+ if (unsupported.length)
46
+ console.log(` Not advertised by this fixture: ${unsupported.join(', ')}`);
39
47
  }
40
- function handleFanSpeed(deps) {
41
- return async (deviceQuery, speedStr, options) => {
42
- const speed = parseInt(speedStr, 10);
43
- if (Number.isNaN(speed)) {
44
- console.error(chalk.red('Fan speed must be a number'));
48
+ async function fanAction(deps, options, deviceQuery, desired, rpm) {
49
+ const work = async (controller, device) => {
50
+ if (controller instanceof BleHttpController) {
51
+ const result = FanStatesSchema.parse(await commandCallbackResult((callback) => controller.fanStates(device ? [device.node_id] : 'all', desired, callback, rpm)));
52
+ if (options.json)
53
+ console.log(JSON.stringify(result, null, 2));
54
+ else
55
+ for (const [key, state] of Object.entries(result.states)) {
56
+ const light = controller.getDevices().find((entry) => entry.node_id === key);
57
+ printFan(String(light?.device_name ?? key), state, desired);
58
+ }
45
59
  return;
46
60
  }
47
- return runDeviceAction({
48
- deps,
49
- options,
50
- deviceQuery,
51
- actionName: `set fan speed to ${speed}`,
52
- }, (device, controller) => {
53
- return new Promise((resolve) => {
54
- controller.setFanSpeed(device.node_id, speed, (success, message) => {
55
- if (success) {
56
- console.log(chalk.green(`✓ Fan speed set to ${speed} on ${device.device_name || 'device'}`));
57
- }
58
- else {
59
- console.error(chalk.red(`✗ Failed to set fan speed: ${message}`));
60
- }
61
- resolve();
62
- });
63
- });
64
- }, () => {
65
- console.log(chalk.yellow('Bulk fan control not supported.'));
66
- return Promise.resolve();
67
- });
68
- };
69
- }
70
- function handleFanInfo(deps) {
71
- return async (deviceQuery, options) => {
72
- return runDeviceAction({
73
- deps,
74
- options,
75
- deviceQuery,
76
- actionName: 'get fan status',
77
- }, (device, controller) => {
78
- return new Promise((resolve) => {
79
- const nodeId = device.node_id;
80
- controller.getFanMode(nodeId, (success, message, mode) => {
81
- if (success) {
82
- controller.getFanSpeed(nodeId, (successSpeed, _, speed) => {
83
- const displayName = device.device_name || device.name || 'Unknown';
84
- console.log(chalk.blue(`Fan Information for ${displayName}:`));
85
- console.log(` Mode: ${mode}`);
86
- if (successSpeed) {
87
- console.log(` Speed: ${speed}`);
88
- }
89
- resolve();
90
- });
91
- }
92
- else {
93
- console.error(chalk.red(`✗ Failed to get fan info: ${message}`));
94
- resolve();
95
- }
96
- });
97
- });
98
- }, () => {
99
- console.log(chalk.yellow('Bulk fan info not supported.'));
100
- return Promise.resolve();
101
- });
61
+ if (options.json)
62
+ throw new Error('Structured fan telemetry requires --backend ble');
63
+ if (desired && ['manual', 'off', 'low', 'silent'].includes(desired))
64
+ throw new Error('Extended fan modes require --backend ble for capability and safety checks');
65
+ const lights = device ? [device] : getLightDevices(controller.getDevices());
66
+ if (!lights.length)
67
+ throw new Error('No lights available for fan control');
68
+ for (const light of lights) {
69
+ const key = light.node_id;
70
+ if (!key)
71
+ throw new Error('Fan target has no node ID');
72
+ if (desired !== undefined) {
73
+ await commandCallbackResult((callback) => controller.setFanMode(key, FAN_MODES[desired], callback));
74
+ console.log(chalk.green(`Fan mode set to ${FAN_MODES[desired]} (${desired}) on ${light.device_name}`));
75
+ }
76
+ else {
77
+ const mode = await commandCallbackResult((callback) => controller.getFanMode(key, callback));
78
+ const speed = await commandCallbackResult((callback) => controller.getFanSpeed(key, callback));
79
+ console.log(chalk.blue(`Fan Information for ${light.device_name}:`));
80
+ console.log(` Mode: ${mode}\n Reported RPM: ${speed}`);
81
+ }
82
+ }
102
83
  };
84
+ await runDeviceAction({ deps, options, deviceQuery, actionName: 'access fan settings' }, (device, controller) => work(controller, device), (controller) => work(controller));
103
85
  }
104
86
  export default registerFan;
105
87
  //# sourceMappingURL=fan.js.map