amaran-light-cli 1.5.0 → 1.7.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 (121) hide show
  1. package/README.md +87 -0
  2. package/dist/__tests__/autoCctMaxLux.test.d.ts +2 -0
  3. package/dist/__tests__/autoCctMaxLux.test.d.ts.map +1 -0
  4. package/dist/__tests__/autoCctMaxLux.test.js +153 -0
  5. package/dist/__tests__/autoCctMaxLux.test.js.map +1 -0
  6. package/dist/__tests__/cctUtil.test.js +63 -1
  7. package/dist/__tests__/cctUtil.test.js.map +1 -1
  8. package/dist/__tests__/configMaxLux.test.d.ts +2 -0
  9. package/dist/__tests__/configMaxLux.test.d.ts.map +1 -0
  10. package/dist/__tests__/configMaxLux.test.js +43 -0
  11. package/dist/__tests__/configMaxLux.test.js.map +1 -0
  12. package/dist/__tests__/lightControl.test.js +259 -0
  13. package/dist/__tests__/lightControl.test.js.map +1 -1
  14. package/dist/__tests__/maxLuxInterpolation.test.d.ts +2 -0
  15. package/dist/__tests__/maxLuxInterpolation.test.d.ts.map +1 -0
  16. package/dist/__tests__/maxLuxInterpolation.test.js +96 -0
  17. package/dist/__tests__/maxLuxInterpolation.test.js.map +1 -0
  18. package/dist/__tests__/weatherPhysics.test.d.ts +2 -0
  19. package/dist/__tests__/weatherPhysics.test.d.ts.map +1 -0
  20. package/dist/__tests__/weatherPhysics.test.js +72 -0
  21. package/dist/__tests__/weatherPhysics.test.js.map +1 -0
  22. package/dist/commands/__tests__/newCommands.test.d.ts +2 -0
  23. package/dist/commands/__tests__/newCommands.test.d.ts.map +1 -0
  24. package/dist/commands/__tests__/newCommands.test.js +195 -0
  25. package/dist/commands/__tests__/newCommands.test.js.map +1 -0
  26. package/dist/commands/daylightSimulation/autoCct.d.ts.map +1 -1
  27. package/dist/commands/daylightSimulation/autoCct.js +66 -4
  28. package/dist/commands/daylightSimulation/autoCct.js.map +1 -1
  29. package/dist/commands/daylightSimulation/graphSchedule.d.ts.map +1 -1
  30. package/dist/commands/daylightSimulation/graphSchedule.js +7 -2
  31. package/dist/commands/daylightSimulation/graphSchedule.js.map +1 -1
  32. package/dist/commands/daylightSimulation/printSchedule.d.ts.map +1 -1
  33. package/dist/commands/daylightSimulation/printSchedule.js +6 -1
  34. package/dist/commands/daylightSimulation/printSchedule.js.map +1 -1
  35. package/dist/commands/daylightSimulation/simulateSchedule.d.ts.map +1 -1
  36. package/dist/commands/daylightSimulation/simulateSchedule.js +6 -1
  37. package/dist/commands/daylightSimulation/simulateSchedule.js.map +1 -1
  38. package/dist/commands/deviceControl/config.d.ts.map +1 -1
  39. package/dist/commands/deviceControl/config.js +27 -0
  40. package/dist/commands/deviceControl/config.js.map +1 -1
  41. package/dist/commands/deviceControl/effect.d.ts +5 -0
  42. package/dist/commands/deviceControl/effect.d.ts.map +1 -0
  43. package/dist/commands/deviceControl/effect.js +172 -0
  44. package/dist/commands/deviceControl/effect.js.map +1 -0
  45. package/dist/commands/deviceControl/fan.d.ts +5 -0
  46. package/dist/commands/deviceControl/fan.d.ts.map +1 -0
  47. package/dist/commands/deviceControl/fan.js +105 -0
  48. package/dist/commands/deviceControl/fan.js.map +1 -0
  49. package/dist/commands/deviceControl/firmware.d.ts +5 -0
  50. package/dist/commands/deviceControl/firmware.d.ts.map +1 -0
  51. package/dist/commands/deviceControl/firmware.js +68 -0
  52. package/dist/commands/deviceControl/firmware.js.map +1 -0
  53. package/dist/commands/deviceControl/group.d.ts +5 -0
  54. package/dist/commands/deviceControl/group.d.ts.map +1 -0
  55. package/dist/commands/deviceControl/group.js +101 -0
  56. package/dist/commands/deviceControl/group.js.map +1 -0
  57. package/dist/commands/deviceControl/info.d.ts +5 -0
  58. package/dist/commands/deviceControl/info.d.ts.map +1 -0
  59. package/dist/commands/deviceControl/info.js +57 -0
  60. package/dist/commands/deviceControl/info.js.map +1 -0
  61. package/dist/commands/deviceControl/preset.d.ts +5 -0
  62. package/dist/commands/deviceControl/preset.d.ts.map +1 -0
  63. package/dist/commands/deviceControl/preset.js +55 -0
  64. package/dist/commands/deviceControl/preset.js.map +1 -0
  65. package/dist/commands/deviceControl/quickshot.d.ts +5 -0
  66. package/dist/commands/deviceControl/quickshot.d.ts.map +1 -0
  67. package/dist/commands/deviceControl/quickshot.js +51 -0
  68. package/dist/commands/deviceControl/quickshot.js.map +1 -0
  69. package/dist/commands/deviceControl/scene.d.ts +5 -0
  70. package/dist/commands/deviceControl/scene.d.ts.map +1 -0
  71. package/dist/commands/deviceControl/scene.js +101 -0
  72. package/dist/commands/deviceControl/scene.js.map +1 -0
  73. package/dist/commands.d.ts.map +1 -1
  74. package/dist/commands.js +17 -0
  75. package/dist/commands.js.map +1 -1
  76. package/dist/daylightSimulation/cctUtil.d.ts +2 -2
  77. package/dist/daylightSimulation/cctUtil.d.ts.map +1 -1
  78. package/dist/daylightSimulation/cctUtil.js +98 -28
  79. package/dist/daylightSimulation/cctUtil.js.map +1 -1
  80. package/dist/daylightSimulation/constants.d.ts +3 -1
  81. package/dist/daylightSimulation/constants.d.ts.map +1 -1
  82. package/dist/daylightSimulation/constants.js +3 -1
  83. package/dist/daylightSimulation/constants.js.map +1 -1
  84. package/dist/daylightSimulation/curves/realistic.d.ts +7 -6
  85. package/dist/daylightSimulation/curves/realistic.d.ts.map +1 -1
  86. package/dist/daylightSimulation/curves/realistic.js +42 -18
  87. package/dist/daylightSimulation/curves/realistic.js.map +1 -1
  88. package/dist/daylightSimulation/graphSchedule.d.ts +1 -1
  89. package/dist/daylightSimulation/graphSchedule.d.ts.map +1 -1
  90. package/dist/daylightSimulation/graphSchedule.js +27 -5
  91. package/dist/daylightSimulation/graphSchedule.js.map +1 -1
  92. package/dist/daylightSimulation/mathUtil.d.ts +13 -0
  93. package/dist/daylightSimulation/mathUtil.d.ts.map +1 -0
  94. package/dist/daylightSimulation/mathUtil.js +54 -0
  95. package/dist/daylightSimulation/mathUtil.js.map +1 -0
  96. package/dist/daylightSimulation/scheduleMaker.d.ts +4 -5
  97. package/dist/daylightSimulation/scheduleMaker.d.ts.map +1 -1
  98. package/dist/daylightSimulation/scheduleMaker.js +8 -0
  99. package/dist/daylightSimulation/scheduleMaker.js.map +1 -1
  100. package/dist/daylightSimulation/textSchedule.d.ts.map +1 -1
  101. package/dist/daylightSimulation/textSchedule.js +2 -2
  102. package/dist/daylightSimulation/textSchedule.js.map +1 -1
  103. package/dist/daylightSimulation/types.d.ts +6 -0
  104. package/dist/daylightSimulation/types.d.ts.map +1 -1
  105. package/dist/daylightSimulation/types.js.map +1 -1
  106. package/dist/deviceControl/discovery.d.ts.map +1 -1
  107. package/dist/deviceControl/discovery.js +0 -2
  108. package/dist/deviceControl/discovery.js.map +1 -1
  109. package/dist/deviceControl/lightControl.d.ts +67 -78
  110. package/dist/deviceControl/lightControl.d.ts.map +1 -1
  111. package/dist/deviceControl/lightControl.js +292 -203
  112. package/dist/deviceControl/lightControl.js.map +1 -1
  113. package/dist/deviceControl/types.d.ts +19 -0
  114. package/dist/deviceControl/types.d.ts.map +1 -1
  115. package/dist/test/MockLightServer.d.ts.map +1 -1
  116. package/dist/test/MockLightServer.js +134 -12
  117. package/dist/test/MockLightServer.js.map +1 -1
  118. package/package.json +8 -7
  119. package/scripts/extract-api.ts +158 -0
  120. package/scripts/extract-usage.ts +199 -0
  121. package/scripts/release.js +9 -9
@@ -5,6 +5,7 @@ const WS_URL = `ws://localhost:${TEST_PORT}`;
5
5
  describe('LightController', () => {
6
6
  let server;
7
7
  let controller;
8
+ const nodeId = '400J5-F2C008';
8
9
  beforeAll(async () => {
9
10
  server = new MockLightServer(TEST_PORT);
10
11
  await new Promise((resolve) => setTimeout(resolve, 500)); // Give server time to start
@@ -192,5 +193,263 @@ describe('LightController', () => {
192
193
  });
193
194
  });
194
195
  }, 5000);
196
+ it('should fetch protocol versions', async () => {
197
+ controller = new LightController(WS_URL, 'test_client', undefined, false);
198
+ await new Promise((res) => setTimeout(res, 200));
199
+ await new Promise((resolve) => {
200
+ controller?.getProtocolVersions((success, _msg, data) => {
201
+ expect(success).toBe(true);
202
+ expect(data).toContain(2);
203
+ resolve();
204
+ });
205
+ });
206
+ }, 5000);
207
+ it('should get device and firmware info', async () => {
208
+ controller = new LightController(WS_URL, 'test_client', undefined, false);
209
+ await new Promise((res) => setTimeout(res, 200));
210
+ await new Promise((resolve) => {
211
+ controller?.getDeviceInfo(nodeId, (success, _msg, data) => {
212
+ expect(success).toBe(true);
213
+ // biome-ignore lint/suspicious/noExplicitAny: Mock data comparison
214
+ expect(data.model).toBe('Mock LED');
215
+ resolve();
216
+ });
217
+ });
218
+ await new Promise((resolve) => {
219
+ controller?.getFirmwareVersion(nodeId, (success, _msg, data) => {
220
+ expect(success).toBe(true);
221
+ // biome-ignore lint/suspicious/noExplicitAny: Mock data comparison
222
+ expect(data.version).toBe('1.0.0');
223
+ resolve();
224
+ });
225
+ });
226
+ }, 5000);
227
+ it('should handle scene management', async () => {
228
+ controller = new LightController(WS_URL, 'test_client', undefined, false);
229
+ await new Promise((res) => setTimeout(res, 200));
230
+ await new Promise((resolve) => {
231
+ controller?.saveScene('Midnight', (success, _msg, data) => {
232
+ expect(success).toBe(true);
233
+ // biome-ignore lint/suspicious/noExplicitAny: Mock data comparison
234
+ expect(data.id).toBe('scene-123');
235
+ resolve();
236
+ });
237
+ });
238
+ await new Promise((resolve) => {
239
+ controller?.recallScene('scene-123', (success) => {
240
+ expect(success).toBe(true);
241
+ resolve();
242
+ });
243
+ });
244
+ }, 5000);
245
+ it('should get intensity and CCT', async () => {
246
+ controller = new LightController(WS_URL, 'test_client', undefined, false);
247
+ await new Promise((res) => setTimeout(res, 200));
248
+ await controller.setIntensity(nodeId, 750);
249
+ await new Promise((resolve) => {
250
+ controller?.getIntensity(nodeId, (success, _msg, data) => {
251
+ expect(success).toBe(true);
252
+ expect(data).toBe(750);
253
+ resolve();
254
+ });
255
+ });
256
+ await controller.setCCT(nodeId, 4500);
257
+ await new Promise((resolve) => {
258
+ controller?.getCCT(nodeId, (success, _msg, data) => {
259
+ expect(success).toBe(true);
260
+ // biome-ignore lint/suspicious/noExplicitAny: Mock data comparison
261
+ expect(data.cct).toBe(4500);
262
+ resolve();
263
+ });
264
+ });
265
+ }, 5000);
266
+ it('should set and get RGB', async () => {
267
+ controller = new LightController(WS_URL, 'test_client', undefined, false);
268
+ await new Promise((res) => setTimeout(res, 200));
269
+ await new Promise((resolve) => {
270
+ controller?.setRGB(nodeId, 255, 0, 128, 500, (success) => {
271
+ expect(success).toBe(true);
272
+ resolve();
273
+ });
274
+ });
275
+ await new Promise((resolve) => {
276
+ controller?.getRGB(nodeId, (success, _msg, data) => {
277
+ expect(success).toBe(true);
278
+ // biome-ignore lint/suspicious/noExplicitAny: Mock data comparison
279
+ expect(data.r).toBe(255);
280
+ // biome-ignore lint/suspicious/noExplicitAny: Mock data comparison
281
+ expect(data.b).toBe(128);
282
+ // biome-ignore lint/suspicious/noExplicitAny: Mock data comparison
283
+ expect(data.intensity).toBe(500);
284
+ resolve();
285
+ });
286
+ });
287
+ }, 5000);
288
+ it('should set and get XY', async () => {
289
+ controller = new LightController(WS_URL, 'test_client', undefined, false);
290
+ await new Promise((res) => setTimeout(res, 200));
291
+ await new Promise((resolve) => {
292
+ controller?.setXY(nodeId, 0.3, 0.4, 600, (success) => {
293
+ expect(success).toBe(true);
294
+ resolve();
295
+ });
296
+ });
297
+ await new Promise((resolve) => {
298
+ controller?.getXY(nodeId, (success, _msg, data) => {
299
+ expect(success).toBe(true);
300
+ // biome-ignore lint/suspicious/noExplicitAny: Mock data comparison
301
+ expect(data.x).toBe(0.3);
302
+ // biome-ignore lint/suspicious/noExplicitAny: Mock data comparison
303
+ expect(data.y).toBe(0.4);
304
+ resolve();
305
+ });
306
+ });
307
+ }, 5000);
308
+ it('should manage custom effects', async () => {
309
+ controller = new LightController(WS_URL, 'test_client', undefined, false);
310
+ await new Promise((res) => setTimeout(res, 200));
311
+ await new Promise((resolve) => {
312
+ controller?.setEffect(nodeId, 'Strobe', { speed: 10 }, (success) => {
313
+ expect(success).toBe(true);
314
+ resolve();
315
+ });
316
+ });
317
+ await new Promise((resolve) => {
318
+ controller?.getEffect(nodeId, (success, _msg, data) => {
319
+ expect(success).toBe(true);
320
+ expect(data).toBe('Strobe');
321
+ resolve();
322
+ });
323
+ });
324
+ }, 5000);
325
+ it('should control fan', async () => {
326
+ controller = new LightController(WS_URL, 'test_client', undefined, false);
327
+ await new Promise((res) => setTimeout(res, 200));
328
+ await new Promise((resolve) => {
329
+ controller?.setFanMode(nodeId, 1, (success) => {
330
+ expect(success).toBe(true);
331
+ resolve();
332
+ });
333
+ });
334
+ await new Promise((resolve) => {
335
+ controller?.getFanMode(nodeId, (success, _msg, data) => {
336
+ expect(success).toBe(true);
337
+ expect(data).toBe(1);
338
+ resolve();
339
+ });
340
+ });
341
+ await new Promise((resolve) => {
342
+ controller?.setFanSpeed(nodeId, 2200, (success) => {
343
+ expect(success).toBe(true);
344
+ resolve();
345
+ });
346
+ });
347
+ await new Promise((resolve) => {
348
+ controller?.getFanSpeed(nodeId, (success, _msg, data) => {
349
+ expect(success).toBe(true);
350
+ expect(data).toBe(2200);
351
+ resolve();
352
+ });
353
+ });
354
+ }, 5000);
355
+ describe('Advanced Effect & Preset Control', () => {
356
+ it('should control effect speed and intensity', async () => {
357
+ controller = new LightController(WS_URL, 'test_client', undefined, false);
358
+ await new Promise((res) => setTimeout(res, 200));
359
+ await new Promise((resolve) => {
360
+ controller?.setEffectSpeed(nodeId, 50, (success) => {
361
+ expect(success).toBe(true);
362
+ resolve();
363
+ });
364
+ });
365
+ await new Promise((resolve) => {
366
+ controller?.setEffectIntensity(nodeId, 800, (success) => {
367
+ expect(success).toBe(true);
368
+ resolve();
369
+ });
370
+ });
371
+ });
372
+ it('should set preset', async () => {
373
+ controller = new LightController(WS_URL, 'test_client', undefined, false);
374
+ await new Promise((res) => setTimeout(res, 200));
375
+ await new Promise((resolve) => {
376
+ controller?.setPreset(nodeId, 'preset-456', (success, _msg, data) => {
377
+ expect(success).toBe(true);
378
+ // biome-ignore lint/suspicious/noExplicitAny: Mock data comparison
379
+ expect(data.id).toBe('preset-456');
380
+ resolve();
381
+ });
382
+ });
383
+ });
384
+ });
385
+ describe('Quickshot Control', () => {
386
+ it('should get quickshot list', async () => {
387
+ controller = new LightController(WS_URL, 'test_client', undefined, false);
388
+ await new Promise((res) => setTimeout(res, 200));
389
+ await new Promise((resolve) => {
390
+ controller?.getQuickshotList((success, _msg, data) => {
391
+ expect(success).toBe(true);
392
+ // biome-ignore lint/suspicious/noExplicitAny: Mock data comparison
393
+ expect(data.data.length).toBeGreaterThan(0);
394
+ resolve();
395
+ });
396
+ });
397
+ });
398
+ it('should set quickshot', async () => {
399
+ controller = new LightController(WS_URL, 'test_client', undefined, false);
400
+ await new Promise((res) => setTimeout(res, 200));
401
+ await new Promise((resolve) => {
402
+ controller?.setQuickshot('qs-123', (success, _msg, data) => {
403
+ expect(success).toBe(true);
404
+ expect(data).toBe('qs-123');
405
+ resolve();
406
+ });
407
+ });
408
+ });
409
+ });
410
+ describe('Group Management', () => {
411
+ it('should manage groups', async () => {
412
+ controller = new LightController(WS_URL, 'test_client', undefined, false);
413
+ await new Promise((res) => setTimeout(res, 200));
414
+ let createdGroupId = '';
415
+ // Create group
416
+ await new Promise((resolve) => {
417
+ controller?.createGroup('All Room', (success, _msg, data) => {
418
+ expect(success).toBe(true);
419
+ // biome-ignore lint/suspicious/noExplicitAny: Mock data comparison
420
+ createdGroupId = data.id;
421
+ resolve();
422
+ });
423
+ });
424
+ // Add to group
425
+ await new Promise((resolve) => {
426
+ controller?.addToGroup(createdGroupId, nodeId, (success) => {
427
+ expect(success).toBe(true);
428
+ resolve();
429
+ });
430
+ });
431
+ // Get group list
432
+ await new Promise((resolve) => {
433
+ controller?.getGroupList((success) => {
434
+ expect(success).toBe(true);
435
+ resolve();
436
+ });
437
+ });
438
+ // Remove from group
439
+ await new Promise((resolve) => {
440
+ controller?.removeFromGroup(createdGroupId, nodeId, (success) => {
441
+ expect(success).toBe(true);
442
+ resolve();
443
+ });
444
+ });
445
+ // Delete group
446
+ await new Promise((resolve) => {
447
+ controller?.deleteGroup(createdGroupId, (success) => {
448
+ expect(success).toBe(true);
449
+ resolve();
450
+ });
451
+ });
452
+ });
453
+ });
195
454
  });
196
455
  //# sourceMappingURL=lightControl.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"lightControl.test.js","sourceRoot":"","sources":["../../src/__tests__/lightControl.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lightControl.test.js","sourceRoot":"","sources":["../../src/__tests__/lightControl.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=maxLuxInterpolation.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"maxLuxInterpolation.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/maxLuxInterpolation.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,96 @@
1
+ import { Command } from 'commander';
2
+ import { describe, expect, it, vi } from 'vitest';
3
+ import registerAutoCct from '../commands/daylightSimulation/autoCct.js';
4
+ import registerConfig from '../commands/deviceControl/config.js';
5
+ import { interpolateMaxLux, parseMaxLuxMap } from '../daylightSimulation/mathUtil.js';
6
+ describe('Max Lux Map Feature', () => {
7
+ describe('Math Utils', () => {
8
+ const map = {
9
+ 2700: 8000,
10
+ 5600: 10000,
11
+ 6500: 9000,
12
+ };
13
+ it('parses valid map string', () => {
14
+ const result = parseMaxLuxMap('2700:8000, 5600:10000, 6500:9000');
15
+ expect(result).toEqual(map);
16
+ });
17
+ it('returns null for invalid string', () => {
18
+ expect(parseMaxLuxMap('invalid')).toBeNull();
19
+ expect(parseMaxLuxMap('2700:abc')).toBeNull();
20
+ });
21
+ it('interpolates correctly within range', () => {
22
+ // 4150 is exactly half way between 2700 and 5600.
23
+ // 2700->8000, 5600->10000. Diff = 2000. Half = 1000. Result 9000.
24
+ expect(interpolateMaxLux(4150, map)).toBeCloseTo(9000);
25
+ });
26
+ it('clamps to lower bound', () => {
27
+ expect(interpolateMaxLux(2000, map)).toBe(8000);
28
+ });
29
+ it('clamps to upper bound', () => {
30
+ expect(interpolateMaxLux(7000, map)).toBe(9000);
31
+ });
32
+ it('handles exact match', () => {
33
+ expect(interpolateMaxLux(5600, map)).toBe(10000);
34
+ });
35
+ });
36
+ describe('Config Command Integration', () => {
37
+ it('saves parsed map to config', async () => {
38
+ const program = new Command();
39
+ program.exitOverride();
40
+ const saveConfig = vi.fn();
41
+ const deps = {
42
+ asyncCommand: (fn) => (...args) => fn(...args),
43
+ loadConfig: () => ({}),
44
+ saveConfig,
45
+ };
46
+ registerConfig(program, deps);
47
+ await program.parseAsync(['node', 'test', 'config', '--max-lux', '2700:8000,5600:10000']);
48
+ expect(saveConfig).toHaveBeenCalledWith(expect.objectContaining({
49
+ maxLux: { 2700: 8000, 5600: 10000 },
50
+ }), expect.anything());
51
+ });
52
+ });
53
+ describe('AutoCCT Integration', () => {
54
+ // Mock cctUtil to control the "current" CCT
55
+ vi.mock('../daylightSimulation/cctUtil', () => ({
56
+ calculateCCT: vi.fn(() => ({ cct: 4150, intensity: 500, lightOutput: 4500 })), // 4500 lux target
57
+ parseCurveType: vi.fn(() => 'HANN'),
58
+ CurveType: { HANN: 'hann' },
59
+ }));
60
+ vi.mock('../daylightSimulation/geoipUtil', () => ({
61
+ getLocationFromIP: vi.fn(() => ({ ll: [0, 0] })),
62
+ }));
63
+ it('uses interpolated max lux for intensity calculation', async () => {
64
+ const setCCT = vi.fn();
65
+ const disconnect = vi.fn(async () => Promise.resolve());
66
+ const controllerStub = {
67
+ getDevices: () => [{ node_id: 'AAA-111' }],
68
+ getLightSleepStatus: (_id, cb) => cb(true, 'ok', { sleep: false }),
69
+ setCCT,
70
+ disconnect,
71
+ on: vi.fn(),
72
+ off: vi.fn(),
73
+ };
74
+ const _actionSpy = vi.fn();
75
+ // Mock dependencies
76
+ const deps = {
77
+ createController: async () => controllerStub,
78
+ findDevice: () => ({ node_id: 'AAA-111' }),
79
+ asyncCommand: ((fn) => (...args) => fn(...args)),
80
+ loadConfig: () => ({}),
81
+ };
82
+ const program = new Command();
83
+ program.exitOverride();
84
+ registerAutoCct(program, deps);
85
+ // Max Lux Map: 2700:8000, 5600:10000.
86
+ // Target CCT from mock is 4150.
87
+ // Interpolated Max Lux should be 9000 (midpoint).
88
+ // Target Output is 4500.
89
+ // Intensity should be 4500 / 9000 = 0.5 = 50%.
90
+ // 50% * 10 = 500 raw intensity.
91
+ await program.parseAsync(['node', 'test', 'auto-cct', '--max-lux', '2700:8000,5600:10000']);
92
+ expect(setCCT).toHaveBeenCalledWith('AAA-111', 4150, 500);
93
+ });
94
+ });
95
+ });
96
+ //# sourceMappingURL=maxLuxInterpolation.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"maxLuxInterpolation.test.js","sourceRoot":"","sources":["../../src/__tests__/maxLuxInterpolation.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=weatherPhysics.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"weatherPhysics.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/weatherPhysics.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,72 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { calculateCCT } from '../daylightSimulation/cctUtil.js';
3
+ import { CurveType } from '../daylightSimulation/types.js';
4
+ describe('Weather-Aware Physics Curve', () => {
5
+ // Use a fixed date and location for reproducible sun position
6
+ // Noon at Equator on Equinox = Zenith
7
+ const lat = 0;
8
+ const lon = 0;
9
+ const dateNoon = new Date('2024-03-21T12:00:00Z');
10
+ const dateMorning = new Date('2024-03-21T08:00:00Z'); // Moderate altitude
11
+ it('should match baseline for clear sky (no weather)', () => {
12
+ const result = calculateCCT(lat, lon, dateNoon, {
13
+ cctMinK: 2700,
14
+ cctMaxK: 6500,
15
+ }, CurveType.PHYSICS);
16
+ expect(result.cct).toBeGreaterThan(6000); // Near max at zenith
17
+ expect(result.intensity).toBeGreaterThan(90); // Near max at zenith
18
+ });
19
+ it('should flatten CCT curve with 100% cloud cover', () => {
20
+ // Clear sky morning
21
+ const clearResult = calculateCCT(lat, lon, dateMorning, {
22
+ cctMinK: 2000,
23
+ cctMaxK: 6500,
24
+ weather: { cloudCover: 0 },
25
+ }, CurveType.PHYSICS);
26
+ // Overcast sky morning
27
+ const cloudyResult = calculateCCT(lat, lon, dateMorning, {
28
+ cctMinK: 2000,
29
+ cctMaxK: 6500,
30
+ weather: { cloudCover: 1 },
31
+ }, CurveType.PHYSICS);
32
+ // In clear sky, morning CCT should be significantly lower than max
33
+ // In overcast sky, CCT should be closer to neutral/max (uniform diffusion)
34
+ // Actually, our logic: cctFactor blends towards 1.0 (maxK).
35
+ // So cloudy CCT should be higher than clear CCT at lower altitudes (where clear is warm).
36
+ expect(cloudyResult.cct).toBeGreaterThan(clearResult.cct);
37
+ // Also, cloudy result should be close to maxK (factor ~ 1.0)
38
+ expect(cloudyResult.cct).toBeCloseTo(6500, -2); // +/- 100K tolerance
39
+ });
40
+ it('should reduce max intensity with cloud cover (via applyWeatherModifiers)', () => {
41
+ // Even though realistic.ts normalizes intensity shape, calculateCCT applies applyWeatherModifiers
42
+ // which reduces the absolute intensity.
43
+ const clearResult = calculateCCT(lat, lon, dateNoon, {
44
+ weather: { cloudCover: 0 },
45
+ }, CurveType.PHYSICS);
46
+ const cloudyResult = calculateCCT(lat, lon, dateNoon, {
47
+ weather: { cloudCover: 1 },
48
+ }, CurveType.PHYSICS);
49
+ expect(cloudyResult.intensity).toBeLessThan(clearResult.intensity);
50
+ expect(cloudyResult.lightOutput).toBeLessThan(clearResult.lightOutput ?? Infinity);
51
+ });
52
+ it('should blend shapes partially with 50% cloud cover', () => {
53
+ const halfCloudyResult = calculateCCT(lat, lon, dateMorning, {
54
+ cctMinK: 2000,
55
+ cctMaxK: 6500,
56
+ weather: { cloudCover: 0.5 },
57
+ }, CurveType.PHYSICS);
58
+ const clearResult = calculateCCT(lat, lon, dateMorning, {
59
+ cctMinK: 2000,
60
+ cctMaxK: 6500,
61
+ weather: { cloudCover: 0 },
62
+ }, CurveType.PHYSICS);
63
+ const fullCloudyResult = calculateCCT(lat, lon, dateMorning, {
64
+ cctMinK: 2000,
65
+ cctMaxK: 6500,
66
+ weather: { cloudCover: 1 },
67
+ }, CurveType.PHYSICS);
68
+ expect(halfCloudyResult.cct).toBeGreaterThan(clearResult.cct);
69
+ expect(halfCloudyResult.cct).toBeLessThan(fullCloudyResult.cct);
70
+ });
71
+ });
72
+ //# sourceMappingURL=weatherPhysics.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"weatherPhysics.test.js","sourceRoot":"","sources":["../../src/__tests__/weatherPhysics.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=newCommands.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"newCommands.test.d.ts","sourceRoot":"","sources":["../../../src/commands/__tests__/newCommands.test.ts"],"names":[],"mappings":""}