amaran-light-cli 1.4.0 → 1.6.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 (245) hide show
  1. package/README.md +48 -18
  2. package/dist/__tests__/autoCct.test.js +2 -2
  3. package/dist/__tests__/autoCct.test.js.map +1 -1
  4. package/dist/__tests__/autostart.test.js +1 -1
  5. package/dist/__tests__/autostart.test.js.map +1 -1
  6. package/dist/__tests__/cctUtil.test.js +19 -2
  7. package/dist/__tests__/cctUtil.test.js.map +1 -1
  8. package/dist/__tests__/intensityApi.test.js +4 -1
  9. package/dist/__tests__/intensityApi.test.js.map +1 -1
  10. package/dist/__tests__/lightControl.test.js +260 -1
  11. package/dist/__tests__/lightControl.test.js.map +1 -1
  12. package/dist/__tests__/simulateSchedule.test.js +2 -2
  13. package/dist/__tests__/simulateSchedule.test.js.map +1 -1
  14. package/dist/cli.d.ts +2 -2
  15. package/dist/cli.d.ts.map +1 -1
  16. package/dist/cli.js +4 -4
  17. package/dist/cli.js.map +1 -1
  18. package/dist/commands/__tests__/integration.test.js +1 -1
  19. package/dist/commands/__tests__/integration.test.js.map +1 -1
  20. package/dist/commands/__tests__/newCommands.test.d.ts +2 -0
  21. package/dist/commands/__tests__/newCommands.test.d.ts.map +1 -0
  22. package/dist/commands/__tests__/newCommands.test.js +195 -0
  23. package/dist/commands/__tests__/newCommands.test.js.map +1 -0
  24. package/dist/commands/cmdUtils.d.ts +23 -0
  25. package/dist/commands/cmdUtils.d.ts.map +1 -0
  26. package/dist/commands/cmdUtils.js +43 -0
  27. package/dist/commands/cmdUtils.js.map +1 -0
  28. package/dist/commands/daylightSimulation/autoCct.d.ts +5 -0
  29. package/dist/commands/daylightSimulation/autoCct.d.ts.map +1 -0
  30. package/dist/commands/{autoCct.js → daylightSimulation/autoCct.js} +12 -13
  31. package/dist/commands/daylightSimulation/autoCct.js.map +1 -0
  32. package/dist/commands/{graphSchedule.d.ts → daylightSimulation/graphSchedule.d.ts} +1 -1
  33. package/dist/commands/daylightSimulation/graphSchedule.d.ts.map +1 -0
  34. package/dist/commands/daylightSimulation/graphSchedule.js +65 -0
  35. package/dist/commands/daylightSimulation/graphSchedule.js.map +1 -0
  36. package/dist/commands/daylightSimulation/printSchedule.d.ts +5 -0
  37. package/dist/commands/daylightSimulation/printSchedule.d.ts.map +1 -0
  38. package/dist/commands/daylightSimulation/printSchedule.js +65 -0
  39. package/dist/commands/daylightSimulation/printSchedule.js.map +1 -0
  40. package/dist/commands/{service.d.ts → daylightSimulation/service.d.ts} +1 -1
  41. package/dist/commands/daylightSimulation/service.d.ts.map +1 -0
  42. package/dist/commands/{service.js → daylightSimulation/service.js} +47 -35
  43. package/dist/commands/daylightSimulation/service.js.map +1 -0
  44. package/dist/commands/{simulateSchedule.d.ts → daylightSimulation/simulateSchedule.d.ts} +1 -1
  45. package/dist/commands/daylightSimulation/simulateSchedule.d.ts.map +1 -0
  46. package/dist/commands/daylightSimulation/simulateSchedule.js +123 -0
  47. package/dist/commands/daylightSimulation/simulateSchedule.js.map +1 -0
  48. package/dist/commands/{cct.d.ts → deviceControl/cct.d.ts} +1 -1
  49. package/dist/commands/deviceControl/cct.d.ts.map +1 -0
  50. package/dist/commands/{cct.js → deviceControl/cct.js} +31 -36
  51. package/dist/commands/deviceControl/cct.js.map +1 -0
  52. package/dist/commands/{color.d.ts → deviceControl/color.d.ts} +1 -1
  53. package/dist/commands/deviceControl/color.d.ts.map +1 -0
  54. package/dist/commands/deviceControl/color.js +52 -0
  55. package/dist/commands/deviceControl/color.js.map +1 -0
  56. package/dist/commands/{config.d.ts → deviceControl/config.d.ts} +1 -1
  57. package/dist/commands/deviceControl/config.d.ts.map +1 -0
  58. package/dist/commands/{config.js → deviceControl/config.js} +11 -7
  59. package/dist/commands/deviceControl/config.js.map +1 -0
  60. package/dist/commands/{discover.d.ts → deviceControl/discover.d.ts} +1 -1
  61. package/dist/commands/deviceControl/discover.d.ts.map +1 -0
  62. package/dist/commands/{discover.js → deviceControl/discover.js} +8 -4
  63. package/dist/commands/deviceControl/discover.js.map +1 -0
  64. package/dist/commands/deviceControl/effect.d.ts +5 -0
  65. package/dist/commands/deviceControl/effect.d.ts.map +1 -0
  66. package/dist/commands/deviceControl/effect.js +172 -0
  67. package/dist/commands/deviceControl/effect.js.map +1 -0
  68. package/dist/commands/deviceControl/fan.d.ts +5 -0
  69. package/dist/commands/deviceControl/fan.d.ts.map +1 -0
  70. package/dist/commands/deviceControl/fan.js +105 -0
  71. package/dist/commands/deviceControl/fan.js.map +1 -0
  72. package/dist/commands/deviceControl/firmware.d.ts +5 -0
  73. package/dist/commands/deviceControl/firmware.d.ts.map +1 -0
  74. package/dist/commands/deviceControl/firmware.js +68 -0
  75. package/dist/commands/deviceControl/firmware.js.map +1 -0
  76. package/dist/commands/deviceControl/group.d.ts +5 -0
  77. package/dist/commands/deviceControl/group.d.ts.map +1 -0
  78. package/dist/commands/deviceControl/group.js +101 -0
  79. package/dist/commands/deviceControl/group.js.map +1 -0
  80. package/dist/commands/{hsi.d.ts → deviceControl/hsi.d.ts} +1 -1
  81. package/dist/commands/deviceControl/hsi.d.ts.map +1 -0
  82. package/dist/commands/deviceControl/hsi.js +50 -0
  83. package/dist/commands/deviceControl/hsi.js.map +1 -0
  84. package/dist/commands/deviceControl/info.d.ts +5 -0
  85. package/dist/commands/deviceControl/info.d.ts.map +1 -0
  86. package/dist/commands/deviceControl/info.js +57 -0
  87. package/dist/commands/deviceControl/info.js.map +1 -0
  88. package/dist/commands/{intensity.d.ts → deviceControl/intensity.d.ts} +1 -1
  89. package/dist/commands/deviceControl/intensity.d.ts.map +1 -0
  90. package/dist/commands/deviceControl/intensity.js +41 -0
  91. package/dist/commands/deviceControl/intensity.js.map +1 -0
  92. package/dist/commands/{list.d.ts → deviceControl/list.d.ts} +1 -1
  93. package/dist/commands/deviceControl/list.d.ts.map +1 -0
  94. package/dist/commands/{list.js → deviceControl/list.js} +7 -3
  95. package/dist/commands/deviceControl/list.js.map +1 -0
  96. package/dist/commands/{power.d.ts → deviceControl/power.d.ts} +1 -1
  97. package/dist/commands/deviceControl/power.d.ts.map +1 -0
  98. package/dist/commands/deviceControl/power.js +78 -0
  99. package/dist/commands/deviceControl/power.js.map +1 -0
  100. package/dist/commands/deviceControl/preset.d.ts +5 -0
  101. package/dist/commands/deviceControl/preset.d.ts.map +1 -0
  102. package/dist/commands/deviceControl/preset.js +55 -0
  103. package/dist/commands/deviceControl/preset.js.map +1 -0
  104. package/dist/commands/deviceControl/quickshot.d.ts +5 -0
  105. package/dist/commands/deviceControl/quickshot.d.ts.map +1 -0
  106. package/dist/commands/deviceControl/quickshot.js +51 -0
  107. package/dist/commands/deviceControl/quickshot.js.map +1 -0
  108. package/dist/commands/deviceControl/scene.d.ts +5 -0
  109. package/dist/commands/deviceControl/scene.d.ts.map +1 -0
  110. package/dist/commands/deviceControl/scene.js +101 -0
  111. package/dist/commands/deviceControl/scene.js.map +1 -0
  112. package/dist/commands/{status.d.ts → deviceControl/status.d.ts} +1 -1
  113. package/dist/commands/deviceControl/status.d.ts.map +1 -0
  114. package/dist/commands/deviceControl/status.js +48 -0
  115. package/dist/commands/deviceControl/status.js.map +1 -0
  116. package/dist/commands.d.ts +1 -1
  117. package/dist/commands.d.ts.map +1 -1
  118. package/dist/commands.js +34 -43
  119. package/dist/commands.js.map +1 -1
  120. package/dist/daylightSimulation/cctUtil.d.ts +5 -0
  121. package/dist/daylightSimulation/cctUtil.d.ts.map +1 -0
  122. package/dist/daylightSimulation/cctUtil.js +191 -0
  123. package/dist/daylightSimulation/cctUtil.js.map +1 -0
  124. package/dist/{constants.d.ts → daylightSimulation/constants.d.ts} +1 -18
  125. package/dist/daylightSimulation/constants.d.ts.map +1 -0
  126. package/dist/{constants.js → daylightSimulation/constants.js} +1 -13
  127. package/dist/daylightSimulation/constants.js.map +1 -0
  128. package/dist/daylightSimulation/curves/approximations.d.ts +19 -0
  129. package/dist/daylightSimulation/curves/approximations.d.ts.map +1 -0
  130. package/dist/daylightSimulation/curves/approximations.js +27 -0
  131. package/dist/daylightSimulation/curves/approximations.js.map +1 -0
  132. package/dist/daylightSimulation/curves/index.d.ts +15 -0
  133. package/dist/daylightSimulation/curves/index.d.ts.map +1 -0
  134. package/dist/daylightSimulation/curves/index.js +56 -0
  135. package/dist/daylightSimulation/curves/index.js.map +1 -0
  136. package/dist/daylightSimulation/curves/mathematical.d.ts +15 -0
  137. package/dist/daylightSimulation/curves/mathematical.d.ts.map +1 -0
  138. package/dist/daylightSimulation/curves/mathematical.js +33 -0
  139. package/dist/daylightSimulation/curves/mathematical.js.map +1 -0
  140. package/dist/daylightSimulation/curves/realistic.d.ts +43 -0
  141. package/dist/daylightSimulation/curves/realistic.d.ts.map +1 -0
  142. package/dist/daylightSimulation/curves/realistic.js +259 -0
  143. package/dist/daylightSimulation/curves/realistic.js.map +1 -0
  144. package/dist/daylightSimulation/geoipUtil.d.ts.map +1 -0
  145. package/dist/daylightSimulation/geoipUtil.js.map +1 -0
  146. package/dist/daylightSimulation/graphSchedule.d.ts +8 -0
  147. package/dist/daylightSimulation/graphSchedule.d.ts.map +1 -0
  148. package/dist/daylightSimulation/graphSchedule.js +116 -0
  149. package/dist/daylightSimulation/graphSchedule.js.map +1 -0
  150. package/dist/daylightSimulation/scheduleMaker.d.ts +33 -0
  151. package/dist/daylightSimulation/scheduleMaker.d.ts.map +1 -0
  152. package/dist/daylightSimulation/scheduleMaker.js +192 -0
  153. package/dist/daylightSimulation/scheduleMaker.js.map +1 -0
  154. package/dist/daylightSimulation/textSchedule.d.ts +9 -0
  155. package/dist/daylightSimulation/textSchedule.d.ts.map +1 -0
  156. package/dist/daylightSimulation/textSchedule.js +172 -0
  157. package/dist/daylightSimulation/textSchedule.js.map +1 -0
  158. package/dist/{cctUtil.d.ts → daylightSimulation/types.d.ts} +7 -5
  159. package/dist/daylightSimulation/types.d.ts.map +1 -0
  160. package/dist/daylightSimulation/types.js +16 -0
  161. package/dist/daylightSimulation/types.js.map +1 -0
  162. package/dist/deviceControl/autostart.d.ts.map +1 -0
  163. package/dist/deviceControl/autostart.js.map +1 -0
  164. package/dist/deviceControl/constants.d.ts +23 -0
  165. package/dist/deviceControl/constants.d.ts.map +1 -0
  166. package/dist/deviceControl/constants.js +20 -0
  167. package/dist/deviceControl/constants.js.map +1 -0
  168. package/dist/deviceControl/discovery.d.ts.map +1 -0
  169. package/dist/{discovery.js → deviceControl/discovery.js} +0 -2
  170. package/dist/deviceControl/discovery.js.map +1 -0
  171. package/dist/{lightControl.d.ts → deviceControl/lightControl.d.ts} +67 -78
  172. package/dist/deviceControl/lightControl.d.ts.map +1 -0
  173. package/dist/{lightControl.js → deviceControl/lightControl.js} +292 -203
  174. package/dist/deviceControl/lightControl.js.map +1 -0
  175. package/dist/deviceControl/types.d.ts +59 -0
  176. package/dist/deviceControl/types.d.ts.map +1 -0
  177. package/dist/deviceControl/types.js.map +1 -0
  178. package/dist/test/MockLightServer.d.ts.map +1 -1
  179. package/dist/test/MockLightServer.js +134 -12
  180. package/dist/test/MockLightServer.js.map +1 -1
  181. package/package.json +11 -7
  182. package/scripts/extract-api.ts +158 -0
  183. package/scripts/extract-usage.ts +199 -0
  184. package/scripts/release.js +11 -11
  185. package/CHANGELOG.md +0 -67
  186. package/dist/autostart.d.ts.map +0 -1
  187. package/dist/autostart.js.map +0 -1
  188. package/dist/cctUtil.d.ts.map +0 -1
  189. package/dist/cctUtil.js +0 -435
  190. package/dist/cctUtil.js.map +0 -1
  191. package/dist/commands/autoCct.d.ts +0 -5
  192. package/dist/commands/autoCct.d.ts.map +0 -1
  193. package/dist/commands/autoCct.js.map +0 -1
  194. package/dist/commands/cct.d.ts.map +0 -1
  195. package/dist/commands/cct.js.map +0 -1
  196. package/dist/commands/color.d.ts.map +0 -1
  197. package/dist/commands/color.js +0 -57
  198. package/dist/commands/color.js.map +0 -1
  199. package/dist/commands/config.d.ts.map +0 -1
  200. package/dist/commands/config.js.map +0 -1
  201. package/dist/commands/discover.d.ts.map +0 -1
  202. package/dist/commands/discover.js.map +0 -1
  203. package/dist/commands/graphSchedule.d.ts.map +0 -1
  204. package/dist/commands/graphSchedule.js +0 -293
  205. package/dist/commands/graphSchedule.js.map +0 -1
  206. package/dist/commands/hsi.d.ts.map +0 -1
  207. package/dist/commands/hsi.js +0 -59
  208. package/dist/commands/hsi.js.map +0 -1
  209. package/dist/commands/intensity.d.ts.map +0 -1
  210. package/dist/commands/intensity.js +0 -50
  211. package/dist/commands/intensity.js.map +0 -1
  212. package/dist/commands/list.d.ts.map +0 -1
  213. package/dist/commands/list.js.map +0 -1
  214. package/dist/commands/power.d.ts.map +0 -1
  215. package/dist/commands/power.js +0 -120
  216. package/dist/commands/power.js.map +0 -1
  217. package/dist/commands/printSchedule.d.ts +0 -5
  218. package/dist/commands/printSchedule.d.ts.map +0 -1
  219. package/dist/commands/printSchedule.js +0 -452
  220. package/dist/commands/printSchedule.js.map +0 -1
  221. package/dist/commands/service.d.ts.map +0 -1
  222. package/dist/commands/service.js.map +0 -1
  223. package/dist/commands/simulateSchedule.d.ts.map +0 -1
  224. package/dist/commands/simulateSchedule.js +0 -199
  225. package/dist/commands/simulateSchedule.js.map +0 -1
  226. package/dist/commands/status.d.ts.map +0 -1
  227. package/dist/commands/status.js +0 -48
  228. package/dist/commands/status.js.map +0 -1
  229. package/dist/constants.d.ts.map +0 -1
  230. package/dist/constants.js.map +0 -1
  231. package/dist/discovery.d.ts.map +0 -1
  232. package/dist/discovery.js.map +0 -1
  233. package/dist/geoipUtil.d.ts.map +0 -1
  234. package/dist/geoipUtil.js.map +0 -1
  235. package/dist/lightControl.d.ts.map +0 -1
  236. package/dist/lightControl.js.map +0 -1
  237. package/dist/types.d.ts +0 -41
  238. package/dist/types.d.ts.map +0 -1
  239. package/dist/types.js.map +0 -1
  240. /package/dist/{geoipUtil.d.ts → daylightSimulation/geoipUtil.d.ts} +0 -0
  241. /package/dist/{geoipUtil.js → daylightSimulation/geoipUtil.js} +0 -0
  242. /package/dist/{autostart.d.ts → deviceControl/autostart.d.ts} +0 -0
  243. /package/dist/{autostart.js → deviceControl/autostart.js} +0 -0
  244. /package/dist/{discovery.d.ts → deviceControl/discovery.d.ts} +0 -0
  245. /package/dist/{types.js → deviceControl/types.js} +0 -0
@@ -1,16 +1,17 @@
1
1
  import chalk from 'chalk';
2
- import { VALIDATION_RANGES } from '../constants.js';
2
+ import { VALIDATION_RANGES } from '../../deviceControl/constants.js';
3
+ import { addStandardOptions, runDeviceAction } from '../cmdUtils.js';
3
4
  export function registerCct(program, deps) {
4
- const { createController, findDevice, asyncCommand } = deps;
5
- program
5
+ const { asyncCommand } = deps;
6
+ addStandardOptions(program
6
7
  .command('cct <temperature> [device]')
7
8
  .usage('<temperature> [device] [options]')
8
- .description(`Set color temperature in Kelvin (${VALIDATION_RANGES.cct.min}-${VALIDATION_RANGES.cct.max}). Omit device or use "all" to set all lights.`)
9
+ .description(`Set color temperature in Kelvin (${VALIDATION_RANGES.cct.min}-${VALIDATION_RANGES.cct.max}). Omit device or use "all" to set all lights.`))
9
10
  .option('-i, --intensity <value>', `Also set intensity (${VALIDATION_RANGES.intensity.min}-${VALIDATION_RANGES.intensity.max})`)
10
- .option('-u, --url <url>', 'WebSocket URL')
11
- .option('-c, --client-id <id>', 'Client ID')
12
- .option('-d, --debug', 'Enable debug mode')
13
- .action(asyncCommand(async (tempStr, deviceQuery, options) => {
11
+ .action(asyncCommand(handleCct(deps)));
12
+ }
13
+ function handleCct(deps) {
14
+ return async (tempStr, deviceQuery, options) => {
14
15
  const temperature = parseInt(tempStr, 10);
15
16
  if (Number.isNaN(temperature) ||
16
17
  temperature < VALIDATION_RANGES.cct.min ||
@@ -29,40 +30,34 @@ export function registerCct(program, deps) {
29
30
  }
30
31
  intensity = intensity * 10;
31
32
  }
32
- const controller = await createController(options.url, options.clientId, options.debug);
33
- if (!deviceQuery || deviceQuery.toLowerCase() === 'all') {
34
- await controller.setCCTAndIntensityForAllLights(temperature, intensity, (success, message) => {
35
- if (!success) {
36
- console.error(chalk.red(`✗ Failed to set temperature: ${message}`));
37
- }
38
- });
39
- await controller.disconnect();
40
- return;
41
- }
42
- const device = findDevice(controller, deviceQuery);
43
- if (!device) {
44
- console.error(chalk.red(`Device "${deviceQuery}" not found`));
45
- process.exit(1);
46
- }
47
- if (!device.node_id) {
48
- console.error(chalk.red(`Device "${deviceQuery}" has no node_id`));
49
- process.exit(1);
50
- }
51
- controller.setCCT(device.node_id, temperature, intensity, (success, message) => {
52
- if (success) {
33
+ return runDeviceAction({
34
+ deps,
35
+ options,
36
+ deviceQuery,
37
+ actionName: 'set temperature',
38
+ onSuccess: (device) => {
53
39
  const displayName = device.device_name || device.name || device.id || device.node_id || 'Unknown';
54
40
  let msg = `✓ ${displayName} temperature set to ${temperature}K`;
55
41
  if (intensity !== undefined) {
56
42
  msg += ` at ${intensity / 10}% intensity`;
57
43
  }
58
- console.log(chalk.green(msg));
59
- }
60
- else {
61
- console.error(chalk.red(`✗ Failed to set temperature: ${message}`));
62
- }
63
- controller.disconnect();
44
+ return msg;
45
+ },
46
+ }, (device, controller) => {
47
+ return new Promise((resolve) => {
48
+ controller.setCCT(device.node_id, temperature, intensity, (success, message) => {
49
+ if (!success)
50
+ throw new Error(message);
51
+ resolve();
52
+ });
53
+ });
54
+ }, async (controller) => {
55
+ await controller.setCCTAndIntensityForAllLights(temperature, intensity, (success, message) => {
56
+ if (!success)
57
+ console.error(`✗ Failed to set temperature: ${message}`);
58
+ });
64
59
  });
65
- }));
60
+ };
66
61
  }
67
62
  export default registerCct;
68
63
  //# sourceMappingURL=cct.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cct.js","sourceRoot":"","sources":["../../../src/commands/deviceControl/cct.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import type { Command } from 'commander';
2
- import type { CommandDeps } from '../types.js';
2
+ import type { CommandDeps } from '../../deviceControl/types.js';
3
3
  export declare function registerColor(program: Command, deps: CommandDeps): void;
4
4
  export default registerColor;
5
5
  //# sourceMappingURL=color.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"color.d.ts","sourceRoot":"","sources":["../../../src/commands/deviceControl/color.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAA0B,MAAM,8BAA8B,CAAC;AAGxF,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,QAYhE;AA8CD,eAAe,aAAa,CAAC"}
@@ -0,0 +1,52 @@
1
+ import chalk from 'chalk';
2
+ import { addStandardOptions, runDeviceAction } from '../cmdUtils.js';
3
+ export function registerColor(program, deps) {
4
+ const { asyncCommand } = deps;
5
+ addStandardOptions(program
6
+ .command('color <color> [device]')
7
+ .description('Set color by name or hex code (e.g., "red", "#ff0000"). Omit device or use "all" to set all lights.'))
8
+ .option('-i, --intensity <value>', 'Set intensity (0-100)')
9
+ .action(asyncCommand(handleColor(deps)));
10
+ }
11
+ function handleColor(deps) {
12
+ return async (color, deviceQuery, options) => {
13
+ let intensity;
14
+ if (options.intensity) {
15
+ intensity = parseInt(options.intensity, 10);
16
+ if (Number.isNaN(intensity) || intensity < 0 || intensity > 100) {
17
+ console.error(chalk.red('Intensity must be a number between 0 and 100'));
18
+ process.exit(1);
19
+ }
20
+ intensity = intensity * 10;
21
+ }
22
+ return runDeviceAction({
23
+ deps,
24
+ options,
25
+ deviceQuery,
26
+ actionName: 'set color',
27
+ onSuccess: (device) => {
28
+ const displayName = device.device_name || device.name || device.id || device.node_id || 'Unknown';
29
+ let msg = `✓ ${displayName} color set to ${color}`;
30
+ if (intensity !== undefined) {
31
+ msg += ` at ${intensity / 10}% intensity`;
32
+ }
33
+ return msg;
34
+ },
35
+ }, (device, controller) => {
36
+ return new Promise((resolve) => {
37
+ controller.setColor(device.node_id, color, intensity, (success, message) => {
38
+ if (!success)
39
+ throw new Error(message);
40
+ resolve();
41
+ });
42
+ });
43
+ }, async (controller) => {
44
+ await controller.setColorForAllLights(color, intensity, (success, message) => {
45
+ if (!success)
46
+ console.error(`✗ Failed to set color: ${message}`);
47
+ });
48
+ });
49
+ };
50
+ }
51
+ export default registerColor;
52
+ //# sourceMappingURL=color.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"color.js","sourceRoot":"","sources":["../../../src/commands/deviceControl/color.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAErE,MAAM,UAAU,aAAa,CAAC,OAAgB,EAAE,IAAiB;IAC/D,MAAM,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC;IAE9B,kBAAkB,CAChB,OAAO;SACJ,OAAO,CAAC,wBAAwB,CAAC;SACjC,WAAW,CACV,qGAAqG,CACtG,CACJ;SACE,MAAM,CAAC,yBAAyB,EAAE,uBAAuB,CAAC;SAC1D,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC7C,CAAC;AAED,SAAS,WAAW,CAAC,IAAiB;IACpC,OAAO,KAAK,EAAE,KAAa,EAAE,WAA+B,EAAE,OAAuB,EAAE,EAAE;QACvF,IAAI,SAA6B,CAAC;QAClC,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;YACtB,SAAS,GAAG,QAAQ,CAAC,OAAO,CAAC,SAAmB,EAAE,EAAE,CAAC,CAAC;YACtD,IAAI,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,SAAS,GAAG,CAAC,IAAI,SAAS,GAAG,GAAG,EAAE,CAAC;gBAChE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC,CAAC;gBACzE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,SAAS,GAAG,SAAS,GAAG,EAAE,CAAC;QAC7B,CAAC;QAED,OAAO,eAAe,CACpB;YACE,IAAI;YACJ,OAAO;YACP,WAAW;YACX,UAAU,EAAE,WAAW;YACvB,SAAS,EAAE,CAAC,MAAc,EAAE,EAAE;gBAC5B,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,EAAE,IAAI,MAAM,CAAC,OAAO,IAAI,SAAS,CAAC;gBAClG,IAAI,GAAG,GAAG,KAAK,WAAW,iBAAiB,KAAK,EAAE,CAAC;gBACnD,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;oBAC5B,GAAG,IAAI,OAAO,SAAS,GAAG,EAAE,aAAa,CAAC;gBAC5C,CAAC;gBACD,OAAO,GAAG,CAAC;YACb,CAAC;SACF,EACD,CAAC,MAAM,EAAE,UAAU,EAAE,EAAE;YACrB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;gBAC7B,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAiB,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE;oBACnF,IAAI,CAAC,OAAO;wBAAE,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;oBACvC,OAAO,EAAE,CAAC;gBACZ,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC,EACD,KAAK,EAAE,UAAU,EAAE,EAAE;YACnB,MAAM,UAAU,CAAC,oBAAoB,CAAC,KAAK,EAAE,SAAS,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE;gBAC3E,IAAI,CAAC,OAAO;oBAAE,OAAO,CAAC,KAAK,CAAC,0BAA0B,OAAO,EAAE,CAAC,CAAC;YACnE,CAAC,CAAC,CAAC;QACL,CAAC,CACF,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAED,eAAe,aAAa,CAAC"}
@@ -1,4 +1,4 @@
1
1
  import type { Command } from 'commander';
2
- import type { CommandDeps } from '../types.js';
2
+ import type { CommandDeps } from '../../deviceControl/types.js';
3
3
  export default function registerConfig(program: Command, deps: CommandDeps): void;
4
4
  //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/commands/deviceControl/config.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAU,MAAM,8BAA8B,CAAC;AAkBxE,MAAM,CAAC,OAAO,UAAU,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,QA6BzE"}
@@ -2,10 +2,7 @@ import * as fs from 'node:fs';
2
2
  import * as path from 'node:path';
3
3
  import chalk from 'chalk';
4
4
  export default function registerConfig(program, deps) {
5
- const { loadConfig, saveConfig } = deps;
6
- if (!loadConfig) {
7
- throw new Error('loadConfig dependency is required');
8
- }
5
+ const { asyncCommand } = deps;
9
6
  program
10
7
  .command('config')
11
8
  .description('Configure WebSocket URL and other settings')
@@ -22,7 +19,14 @@ export default function registerConfig(program, deps) {
22
19
  .option('--default-curve <curve>', 'Default curve type (hann, wider-middle-small, wider-middle-medium, wider-middle-large, cie-daylight, sun-altitude, perez-daylight)')
23
20
  .option('--auto-start-app <boolean>', 'Automatically start Amaran desktop app on connection failure (default: true)')
24
21
  .option('--show', 'Show current configuration')
25
- .action(async (options) => {
22
+ .action(asyncCommand(handleConfig(deps)));
23
+ }
24
+ function handleConfig(deps) {
25
+ const { loadConfig, saveConfig } = deps;
26
+ if (!loadConfig) {
27
+ throw new Error('loadConfig dependency is required');
28
+ }
29
+ return async (options) => {
26
30
  if (options.show) {
27
31
  const config = loadConfig();
28
32
  console.log(chalk.blue('Current configuration:'));
@@ -147,7 +151,7 @@ export default function registerConfig(program, deps) {
147
151
  // Handle default curve option
148
152
  if (options.defaultCurve !== undefined) {
149
153
  // dynamic import for ESM
150
- const { parseCurveType } = await import('../cctUtil.js');
154
+ const { parseCurveType } = await import('../../daylightSimulation/cctUtil.js');
151
155
  try {
152
156
  parseCurveType(options.defaultCurve);
153
157
  config.defaultCurve = options.defaultCurve;
@@ -214,6 +218,6 @@ export default function registerConfig(program, deps) {
214
218
  console.log(chalk.green('Configuration saved successfully'));
215
219
  }
216
220
  }
217
- });
221
+ };
218
222
  }
219
223
  //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/commands/deviceControl/config.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import type { Command } from 'commander';
2
- import type { CommandDeps } from '../types.js';
2
+ import type { CommandDeps } from '../../deviceControl/types.js';
3
3
  export declare function registerDiscover(program: Command, deps: CommandDeps): void;
4
4
  export default registerDiscover;
5
5
  //# sourceMappingURL=discover.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discover.d.ts","sourceRoot":"","sources":["../../../src/commands/deviceControl/discover.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzC,OAAO,KAAK,EAAE,WAAW,EAAkB,MAAM,8BAA8B,CAAC;AAEhF,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,QASnE;AAkBD,eAAe,gBAAgB,CAAC"}
@@ -1,13 +1,17 @@
1
1
  import chalk from 'chalk';
2
- import { discoverLocalWebSocket } from '../discovery.js';
2
+ import { discoverLocalWebSocket } from '../../deviceControl/discovery.js';
3
3
  export function registerDiscover(program, deps) {
4
- const { asyncCommand, saveWsUrl } = deps;
4
+ const { asyncCommand } = deps;
5
5
  program
6
6
  .command('discover')
7
7
  .usage('[options]')
8
8
  .description('Discover local Amaran WebSocket endpoint')
9
9
  .option('-d, --debug', 'Enable debug output')
10
- .action(asyncCommand(async (options) => {
10
+ .action(asyncCommand(handleDiscover(deps)));
11
+ }
12
+ function handleDiscover(deps) {
13
+ const { saveWsUrl } = deps;
14
+ return async (options) => {
11
15
  const res = await discoverLocalWebSocket('127.0.0.1', !!options.debug);
12
16
  if (res) {
13
17
  console.log(chalk.green(`Found WebSocket: ${res.url} (process: ${res.process})`));
@@ -19,7 +23,7 @@ export function registerDiscover(program, deps) {
19
23
  else {
20
24
  console.log(chalk.yellow('No local Amaran WebSocket found via lsof'));
21
25
  }
22
- }));
26
+ };
23
27
  }
24
28
  export default registerDiscover;
25
29
  //# sourceMappingURL=discover.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discover.js","sourceRoot":"","sources":["../../../src/commands/deviceControl/discover.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AAG1E,MAAM,UAAU,gBAAgB,CAAC,OAAgB,EAAE,IAAiB;IAClE,MAAM,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC;IAE9B,OAAO;SACJ,OAAO,CAAC,UAAU,CAAC;SACnB,KAAK,CAAC,WAAW,CAAC;SAClB,WAAW,CAAC,0CAA0C,CAAC;SACvD,MAAM,CAAC,aAAa,EAAE,qBAAqB,CAAC;SAC5C,MAAM,CAAC,YAAY,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAChD,CAAC;AAED,SAAS,cAAc,CAAC,IAAiB;IACvC,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;IAC3B,OAAO,KAAK,EAAE,OAAuB,EAAE,EAAE;QACvC,MAAM,GAAG,GAAG,MAAM,sBAAsB,CAAC,WAAW,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACvE,IAAI,GAAG,EAAE,CAAC;YACR,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,oBAAoB,GAAG,CAAC,GAAG,cAAc,GAAG,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;YAClF,IAAI,SAAS,EAAE,CAAC;gBACd,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACnB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC,CAAC;YACtD,CAAC;QACH,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,0CAA0C,CAAC,CAAC,CAAC;QACxE,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AAED,eAAe,gBAAgB,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { Command } from 'commander';
2
+ import type { CommandDeps } from '../../deviceControl/types.js';
3
+ export declare function registerEffect(program: Command, deps: CommandDeps): void;
4
+ export default registerEffect;
5
+ //# sourceMappingURL=effect.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,172 @@
1
+ import chalk from 'chalk';
2
+ import { addStandardOptions, runDeviceAction } from '../cmdUtils.js';
3
+ 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)));
7
+ 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();
31
+ });
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
+ }
42
+ }
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;
59
+ }
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();
80
+ });
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();
105
+ });
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();
135
+ });
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
+ });
164
+ });
165
+ }, () => {
166
+ console.log(chalk.yellow('Bulk effect intensity not supported.'));
167
+ return Promise.resolve();
168
+ });
169
+ };
170
+ }
171
+ export default registerEffect;
172
+ //# sourceMappingURL=effect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effect.js","sourceRoot":"","sources":["../../../src/commands/deviceControl/effect.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { Command } from 'commander';
2
+ import type { CommandDeps } from '../../deviceControl/types.js';
3
+ export declare function registerFan(program: Command, deps: CommandDeps): void;
4
+ export default registerFan;
5
+ //# sourceMappingURL=fan.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,105 @@
1
+ import chalk from 'chalk';
2
+ import { addStandardOptions, runDeviceAction } from '../cmdUtils.js';
3
+ 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)));
9
+ }
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
+ };
39
+ }
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'));
45
+ return;
46
+ }
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
+ });
102
+ };
103
+ }
104
+ export default registerFan;
105
+ //# sourceMappingURL=fan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fan.js","sourceRoot":"","sources":["../../../src/commands/deviceControl/fan.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { Command } from 'commander';
2
+ import type { CommandDeps } from '../../deviceControl/types.js';
3
+ export declare function registerFirmware(program: Command, deps: CommandDeps): void;
4
+ export default registerFirmware;
5
+ //# sourceMappingURL=firmware.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"firmware.d.ts","sourceRoot":"","sources":["../../../src/commands/deviceControl/firmware.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAA0B,MAAM,8BAA8B,CAAC;AAGxF,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,QAWnE;AAoED,eAAe,gBAAgB,CAAC"}