amaran-light-cli 1.4.0 → 1.5.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 (203) hide show
  1. package/README.md +13 -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 +2 -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 +1 -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/cmdUtils.d.ts +23 -0
  21. package/dist/commands/cmdUtils.d.ts.map +1 -0
  22. package/dist/commands/cmdUtils.js +43 -0
  23. package/dist/commands/cmdUtils.js.map +1 -0
  24. package/dist/commands/daylightSimulation/autoCct.d.ts +5 -0
  25. package/dist/commands/daylightSimulation/autoCct.d.ts.map +1 -0
  26. package/dist/commands/{autoCct.js → daylightSimulation/autoCct.js} +12 -13
  27. package/dist/commands/daylightSimulation/autoCct.js.map +1 -0
  28. package/dist/commands/{graphSchedule.d.ts → daylightSimulation/graphSchedule.d.ts} +1 -1
  29. package/dist/commands/daylightSimulation/graphSchedule.d.ts.map +1 -0
  30. package/dist/commands/daylightSimulation/graphSchedule.js +65 -0
  31. package/dist/commands/daylightSimulation/graphSchedule.js.map +1 -0
  32. package/dist/commands/daylightSimulation/printSchedule.d.ts +5 -0
  33. package/dist/commands/daylightSimulation/printSchedule.d.ts.map +1 -0
  34. package/dist/commands/daylightSimulation/printSchedule.js +65 -0
  35. package/dist/commands/daylightSimulation/printSchedule.js.map +1 -0
  36. package/dist/commands/{service.d.ts → daylightSimulation/service.d.ts} +1 -1
  37. package/dist/commands/daylightSimulation/service.d.ts.map +1 -0
  38. package/dist/commands/{service.js → daylightSimulation/service.js} +47 -35
  39. package/dist/commands/daylightSimulation/service.js.map +1 -0
  40. package/dist/commands/{simulateSchedule.d.ts → daylightSimulation/simulateSchedule.d.ts} +1 -1
  41. package/dist/commands/daylightSimulation/simulateSchedule.d.ts.map +1 -0
  42. package/dist/commands/daylightSimulation/simulateSchedule.js +123 -0
  43. package/dist/commands/daylightSimulation/simulateSchedule.js.map +1 -0
  44. package/dist/commands/{cct.d.ts → deviceControl/cct.d.ts} +1 -1
  45. package/dist/commands/deviceControl/cct.d.ts.map +1 -0
  46. package/dist/commands/{cct.js → deviceControl/cct.js} +31 -36
  47. package/dist/commands/deviceControl/cct.js.map +1 -0
  48. package/dist/commands/{color.d.ts → deviceControl/color.d.ts} +1 -1
  49. package/dist/commands/deviceControl/color.d.ts.map +1 -0
  50. package/dist/commands/deviceControl/color.js +52 -0
  51. package/dist/commands/deviceControl/color.js.map +1 -0
  52. package/dist/commands/{config.d.ts → deviceControl/config.d.ts} +1 -1
  53. package/dist/commands/deviceControl/config.d.ts.map +1 -0
  54. package/dist/commands/{config.js → deviceControl/config.js} +11 -7
  55. package/dist/commands/deviceControl/config.js.map +1 -0
  56. package/dist/commands/{discover.d.ts → deviceControl/discover.d.ts} +1 -1
  57. package/dist/commands/deviceControl/discover.d.ts.map +1 -0
  58. package/dist/commands/{discover.js → deviceControl/discover.js} +8 -4
  59. package/dist/commands/deviceControl/discover.js.map +1 -0
  60. package/dist/commands/{hsi.d.ts → deviceControl/hsi.d.ts} +1 -1
  61. package/dist/commands/deviceControl/hsi.d.ts.map +1 -0
  62. package/dist/commands/deviceControl/hsi.js +50 -0
  63. package/dist/commands/deviceControl/hsi.js.map +1 -0
  64. package/dist/commands/{intensity.d.ts → deviceControl/intensity.d.ts} +1 -1
  65. package/dist/commands/deviceControl/intensity.d.ts.map +1 -0
  66. package/dist/commands/deviceControl/intensity.js +41 -0
  67. package/dist/commands/deviceControl/intensity.js.map +1 -0
  68. package/dist/commands/{list.d.ts → deviceControl/list.d.ts} +1 -1
  69. package/dist/commands/deviceControl/list.d.ts.map +1 -0
  70. package/dist/commands/{list.js → deviceControl/list.js} +7 -3
  71. package/dist/commands/deviceControl/list.js.map +1 -0
  72. package/dist/commands/{power.d.ts → deviceControl/power.d.ts} +1 -1
  73. package/dist/commands/deviceControl/power.d.ts.map +1 -0
  74. package/dist/commands/deviceControl/power.js +78 -0
  75. package/dist/commands/deviceControl/power.js.map +1 -0
  76. package/dist/commands/{status.d.ts → deviceControl/status.d.ts} +1 -1
  77. package/dist/commands/deviceControl/status.d.ts.map +1 -0
  78. package/dist/commands/deviceControl/status.js +48 -0
  79. package/dist/commands/deviceControl/status.js.map +1 -0
  80. package/dist/commands.d.ts +1 -1
  81. package/dist/commands.d.ts.map +1 -1
  82. package/dist/commands.js +17 -43
  83. package/dist/commands.js.map +1 -1
  84. package/dist/daylightSimulation/cctUtil.d.ts +5 -0
  85. package/dist/daylightSimulation/cctUtil.d.ts.map +1 -0
  86. package/dist/daylightSimulation/cctUtil.js +163 -0
  87. package/dist/daylightSimulation/cctUtil.js.map +1 -0
  88. package/dist/{constants.d.ts → daylightSimulation/constants.d.ts} +0 -18
  89. package/dist/daylightSimulation/constants.d.ts.map +1 -0
  90. package/dist/{constants.js → daylightSimulation/constants.js} +0 -13
  91. package/dist/daylightSimulation/constants.js.map +1 -0
  92. package/dist/daylightSimulation/curves/approximations.d.ts +19 -0
  93. package/dist/daylightSimulation/curves/approximations.d.ts.map +1 -0
  94. package/dist/daylightSimulation/curves/approximations.js +27 -0
  95. package/dist/daylightSimulation/curves/approximations.js.map +1 -0
  96. package/dist/daylightSimulation/curves/index.d.ts +15 -0
  97. package/dist/daylightSimulation/curves/index.d.ts.map +1 -0
  98. package/dist/daylightSimulation/curves/index.js +56 -0
  99. package/dist/daylightSimulation/curves/index.js.map +1 -0
  100. package/dist/daylightSimulation/curves/mathematical.d.ts +15 -0
  101. package/dist/daylightSimulation/curves/mathematical.d.ts.map +1 -0
  102. package/dist/daylightSimulation/curves/mathematical.js +33 -0
  103. package/dist/daylightSimulation/curves/mathematical.js.map +1 -0
  104. package/dist/daylightSimulation/curves/realistic.d.ts +43 -0
  105. package/dist/daylightSimulation/curves/realistic.d.ts.map +1 -0
  106. package/dist/daylightSimulation/curves/realistic.js +259 -0
  107. package/dist/daylightSimulation/curves/realistic.js.map +1 -0
  108. package/dist/daylightSimulation/geoipUtil.d.ts.map +1 -0
  109. package/dist/daylightSimulation/geoipUtil.js.map +1 -0
  110. package/dist/daylightSimulation/graphSchedule.d.ts +8 -0
  111. package/dist/daylightSimulation/graphSchedule.d.ts.map +1 -0
  112. package/dist/daylightSimulation/graphSchedule.js +94 -0
  113. package/dist/daylightSimulation/graphSchedule.js.map +1 -0
  114. package/dist/daylightSimulation/scheduleMaker.d.ts +36 -0
  115. package/dist/daylightSimulation/scheduleMaker.d.ts.map +1 -0
  116. package/dist/daylightSimulation/scheduleMaker.js +192 -0
  117. package/dist/daylightSimulation/scheduleMaker.js.map +1 -0
  118. package/dist/daylightSimulation/textSchedule.d.ts +9 -0
  119. package/dist/daylightSimulation/textSchedule.d.ts.map +1 -0
  120. package/dist/daylightSimulation/textSchedule.js +172 -0
  121. package/dist/daylightSimulation/textSchedule.js.map +1 -0
  122. package/dist/{cctUtil.d.ts → daylightSimulation/types.d.ts} +6 -5
  123. package/dist/daylightSimulation/types.d.ts.map +1 -0
  124. package/dist/daylightSimulation/types.js +16 -0
  125. package/dist/daylightSimulation/types.js.map +1 -0
  126. package/dist/deviceControl/autostart.d.ts.map +1 -0
  127. package/dist/deviceControl/autostart.js.map +1 -0
  128. package/dist/deviceControl/constants.d.ts +23 -0
  129. package/dist/deviceControl/constants.d.ts.map +1 -0
  130. package/dist/deviceControl/constants.js +20 -0
  131. package/dist/deviceControl/constants.js.map +1 -0
  132. package/dist/deviceControl/discovery.d.ts.map +1 -0
  133. package/dist/deviceControl/discovery.js.map +1 -0
  134. package/dist/deviceControl/lightControl.d.ts.map +1 -0
  135. package/dist/deviceControl/lightControl.js.map +1 -0
  136. package/dist/deviceControl/types.d.ts.map +1 -0
  137. package/dist/deviceControl/types.js.map +1 -0
  138. package/package.json +4 -1
  139. package/scripts/release.js +2 -2
  140. package/CHANGELOG.md +0 -67
  141. package/dist/autostart.d.ts.map +0 -1
  142. package/dist/autostart.js.map +0 -1
  143. package/dist/cctUtil.d.ts.map +0 -1
  144. package/dist/cctUtil.js +0 -435
  145. package/dist/cctUtil.js.map +0 -1
  146. package/dist/commands/autoCct.d.ts +0 -5
  147. package/dist/commands/autoCct.d.ts.map +0 -1
  148. package/dist/commands/autoCct.js.map +0 -1
  149. package/dist/commands/cct.d.ts.map +0 -1
  150. package/dist/commands/cct.js.map +0 -1
  151. package/dist/commands/color.d.ts.map +0 -1
  152. package/dist/commands/color.js +0 -57
  153. package/dist/commands/color.js.map +0 -1
  154. package/dist/commands/config.d.ts.map +0 -1
  155. package/dist/commands/config.js.map +0 -1
  156. package/dist/commands/discover.d.ts.map +0 -1
  157. package/dist/commands/discover.js.map +0 -1
  158. package/dist/commands/graphSchedule.d.ts.map +0 -1
  159. package/dist/commands/graphSchedule.js +0 -293
  160. package/dist/commands/graphSchedule.js.map +0 -1
  161. package/dist/commands/hsi.d.ts.map +0 -1
  162. package/dist/commands/hsi.js +0 -59
  163. package/dist/commands/hsi.js.map +0 -1
  164. package/dist/commands/intensity.d.ts.map +0 -1
  165. package/dist/commands/intensity.js +0 -50
  166. package/dist/commands/intensity.js.map +0 -1
  167. package/dist/commands/list.d.ts.map +0 -1
  168. package/dist/commands/list.js.map +0 -1
  169. package/dist/commands/power.d.ts.map +0 -1
  170. package/dist/commands/power.js +0 -120
  171. package/dist/commands/power.js.map +0 -1
  172. package/dist/commands/printSchedule.d.ts +0 -5
  173. package/dist/commands/printSchedule.d.ts.map +0 -1
  174. package/dist/commands/printSchedule.js +0 -452
  175. package/dist/commands/printSchedule.js.map +0 -1
  176. package/dist/commands/service.d.ts.map +0 -1
  177. package/dist/commands/service.js.map +0 -1
  178. package/dist/commands/simulateSchedule.d.ts.map +0 -1
  179. package/dist/commands/simulateSchedule.js +0 -199
  180. package/dist/commands/simulateSchedule.js.map +0 -1
  181. package/dist/commands/status.d.ts.map +0 -1
  182. package/dist/commands/status.js +0 -48
  183. package/dist/commands/status.js.map +0 -1
  184. package/dist/constants.d.ts.map +0 -1
  185. package/dist/constants.js.map +0 -1
  186. package/dist/discovery.d.ts.map +0 -1
  187. package/dist/discovery.js.map +0 -1
  188. package/dist/geoipUtil.d.ts.map +0 -1
  189. package/dist/geoipUtil.js.map +0 -1
  190. package/dist/lightControl.d.ts.map +0 -1
  191. package/dist/lightControl.js.map +0 -1
  192. package/dist/types.d.ts.map +0 -1
  193. package/dist/types.js.map +0 -1
  194. /package/dist/{geoipUtil.d.ts → daylightSimulation/geoipUtil.d.ts} +0 -0
  195. /package/dist/{geoipUtil.js → daylightSimulation/geoipUtil.js} +0 -0
  196. /package/dist/{autostart.d.ts → deviceControl/autostart.d.ts} +0 -0
  197. /package/dist/{autostart.js → deviceControl/autostart.js} +0 -0
  198. /package/dist/{discovery.d.ts → deviceControl/discovery.d.ts} +0 -0
  199. /package/dist/{discovery.js → deviceControl/discovery.js} +0 -0
  200. /package/dist/{lightControl.d.ts → deviceControl/lightControl.d.ts} +0 -0
  201. /package/dist/{lightControl.js → deviceControl/lightControl.js} +0 -0
  202. /package/dist/{types.d.ts → deviceControl/types.d.ts} +0 -0
  203. /package/dist/{types.js → deviceControl/types.js} +0 -0
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Realistic daylight calculation functions based on sun position and atmospheric models.
3
+ */
4
+ /**
5
+ * Realistic daylight calculation based on sun altitude.
6
+ * @param altitude Sun altitude in radians
7
+ * @param maxAltitude Maximum sun altitude for the day in radians
8
+ */
9
+ export declare function calculateRealisticSunAltitude(altitude: number, maxAltitude: number): [cctFactor: number, intensityFactor: number];
10
+ /**
11
+ * CIE daylight model with atmospheric path modeling.
12
+ * @param altitude Sun altitude in radians
13
+ * @param maxAltitude Maximum sun altitude for the day in radians
14
+ */
15
+ export declare function calculateRealisticCIEDaylight(altitude: number, maxAltitude: number): [cctFactor: number, intensityFactor: number];
16
+ /**
17
+ * Perez daylight model with turbidity and atmospheric effects.
18
+ * @param altitude Sun altitude in radians
19
+ * @param maxAltitude Maximum sun altitude for the day in radians
20
+ */
21
+ export declare function calculateRealisticPerezDaylight(altitude: number, maxAltitude: number): [cctFactor: number, intensityFactor: number];
22
+ /**
23
+ * Physics-based Atmospheric model.
24
+ * Uses Beer-Lambert law for intensity and exponential decay for CCT.
25
+ * @param altitude Sun altitude in radians
26
+ * @param maxAltitude Maximum sun altitude for the day in radians
27
+ */
28
+ export declare function calculateRealisticPhysicsDaylight(altitude: number, maxAltitude: number): [cctFactor: number, intensityFactor: number];
29
+ /**
30
+ * Blackbody Sun model.
31
+ * Simulates the sun as a blackbody shifting through the atmosphere.
32
+ * @param altitude Sun altitude in radians
33
+ * @param maxAltitude Maximum sun altitude for the day in radians
34
+ */
35
+ export declare function calculateRealisticBlackbodyDaylight(altitude: number, maxAltitude: number): [cctFactor: number, intensityFactor: number];
36
+ /**
37
+ * Hazy/Turbid model.
38
+ * Simulates a sky with high particulate matter (smog/mist).
39
+ * @param altitude Sun altitude in radians
40
+ * @param maxAltitude Maximum sun altitude for the day in radians
41
+ */
42
+ export declare function calculateRealisticHazyDaylight(altitude: number, maxAltitude: number): [cctFactor: number, intensityFactor: number];
43
+ //# sourceMappingURL=realistic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"realistic.d.ts","sourceRoot":"","sources":["../../../src/daylightSimulation/curves/realistic.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;GAIG;AACH,wBAAgB,6BAA6B,CAC3C,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,GAClB,CAAC,SAAS,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,CAAC,CAwC9C;AAED;;;;GAIG;AACH,wBAAgB,6BAA6B,CAC3C,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,GAClB,CAAC,SAAS,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,CAAC,CAqC9C;AAED;;;;GAIG;AACH,wBAAgB,+BAA+B,CAC7C,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,GAClB,CAAC,SAAS,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,CAAC,CAsC9C;AAcD;;;;;GAKG;AACH,wBAAgB,iCAAiC,CAC/C,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,GAClB,CAAC,SAAS,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,CAAC,CAmC9C;AAED;;;;;GAKG;AACH,wBAAgB,mCAAmC,CACjD,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,GAClB,CAAC,SAAS,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,CAAC,CA8B9C;AAED;;;;;GAKG;AACH,wBAAgB,8BAA8B,CAC5C,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,GAClB,CAAC,SAAS,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,CAAC,CA8B9C"}
@@ -0,0 +1,259 @@
1
+ /**
2
+ * Realistic daylight calculation functions based on sun position and atmospheric models.
3
+ */
4
+ /**
5
+ * Realistic daylight calculation based on sun altitude.
6
+ * @param altitude Sun altitude in radians
7
+ * @param maxAltitude Maximum sun altitude for the day in radians
8
+ */
9
+ export function calculateRealisticSunAltitude(altitude, maxAltitude) {
10
+ // Convert altitude to degrees for easier calculations
11
+ const altitudeDeg = (altitude * 180) / Math.PI;
12
+ const maxAltitudeDeg = (maxAltitude * 180) / Math.PI;
13
+ // CCT: Based on real-world color temperature at different sun angles
14
+ let cctFactor;
15
+ if (altitudeDeg < -6) {
16
+ cctFactor = 0; // Before civil twilight - minimum CCT
17
+ }
18
+ else if (altitudeDeg < 0) {
19
+ // Civil twilight: 4000-5000K range
20
+ cctFactor = 0.3 + ((altitudeDeg + 6) / 6) * 0.2; // 0.3 to 0.5
21
+ }
22
+ else if (altitudeDeg < 30) {
23
+ // Morning/afternoon: 5000-6500K
24
+ cctFactor = 0.5 + (altitudeDeg / 30) * 0.3; // 0.5 to 0.8
25
+ }
26
+ else if (altitudeDeg < 60) {
27
+ // High sun: 5500-7000K
28
+ cctFactor = 0.8 + ((altitudeDeg - 30) / 30) * 0.2; // 0.8 to 1.0
29
+ }
30
+ else {
31
+ // Very high sun: 6500-7500K
32
+ cctFactor = 1.0;
33
+ }
34
+ // Calculate raw intensity factor based on absolute altitude
35
+ const calculateIntensity = (altDeg) => {
36
+ if (altDeg < -6)
37
+ return 0;
38
+ if (altDeg < 0)
39
+ return ((altDeg + 6) / 6) ** 2 * 0.05;
40
+ if (altDeg < 10)
41
+ return 0.05 + (altDeg / 10) * 0.15;
42
+ if (altDeg < 30)
43
+ return 0.2 + ((altDeg - 10) / 20) * 0.4;
44
+ return 0.6 + ((altDeg - 30) / 60) * 0.4;
45
+ };
46
+ const rawIntensity = calculateIntensity(altitudeDeg);
47
+ const maxDailyIntensity = calculateIntensity(maxAltitudeDeg);
48
+ // Normalize: Scale the current intensity so that at maxAltitude it reaches 1.0
49
+ let intensityFactor = maxDailyIntensity > 0.01 ? rawIntensity / maxDailyIntensity : 0;
50
+ intensityFactor = Math.min(1.0, intensityFactor);
51
+ return [Math.max(0, Math.min(1, cctFactor)), Math.max(0, Math.min(1, intensityFactor))];
52
+ }
53
+ /**
54
+ * CIE daylight model with atmospheric path modeling.
55
+ * @param altitude Sun altitude in radians
56
+ * @param maxAltitude Maximum sun altitude for the day in radians
57
+ */
58
+ export function calculateRealisticCIEDaylight(altitude, maxAltitude) {
59
+ const altitudeDeg = (altitude * 180) / Math.PI;
60
+ const maxAltitudeDeg = (maxAltitude * 180) / Math.PI;
61
+ let cctFactor;
62
+ if (altitudeDeg < -6) {
63
+ cctFactor = 0;
64
+ }
65
+ else if (altitudeDeg < 0) {
66
+ cctFactor = 0.4 + ((altitudeDeg + 6) / 6) ** 1.5 * 0.2;
67
+ }
68
+ else if (altitudeDeg < 15) {
69
+ cctFactor = 0.6 - Math.sin((altitudeDeg * Math.PI) / 30) * 0.1;
70
+ }
71
+ else if (altitudeDeg < 45) {
72
+ cctFactor = 0.5 + ((altitudeDeg - 15) / 30) * 0.4;
73
+ }
74
+ else {
75
+ cctFactor = 0.9 + Math.min(0.1, ((altitudeDeg - 45) / 45) * 0.1);
76
+ }
77
+ const calculateRawIntensity = (altDeg) => {
78
+ if (altDeg < -6)
79
+ return 0;
80
+ if (altDeg < 0)
81
+ return ((altDeg + 6) / 6) ** 3 * 0.03;
82
+ if (altDeg < 15) {
83
+ const altRad = Math.max(0.01, (altDeg * Math.PI) / 180);
84
+ const airMass = 1 / Math.sin(altRad);
85
+ return Math.min(0.25, 1 / airMass ** 0.7);
86
+ }
87
+ if (altDeg < 40)
88
+ return 0.25 + ((altDeg - 15) / 25) * 0.55;
89
+ if (altDeg < 70)
90
+ return 0.8 + ((altDeg - 40) / 30) * 0.15;
91
+ return 0.95 + ((altDeg - 70) / 20) * 0.05;
92
+ };
93
+ const rawIntensity = calculateRawIntensity(altitudeDeg);
94
+ const maxDailyIntensity = calculateRawIntensity(maxAltitudeDeg);
95
+ const intensityFactor = maxDailyIntensity > 0.001 ? rawIntensity / maxDailyIntensity : 0;
96
+ return [Math.max(0, Math.min(1, cctFactor)), Math.max(0, Math.min(1, intensityFactor))];
97
+ }
98
+ /**
99
+ * Perez daylight model with turbidity and atmospheric effects.
100
+ * @param altitude Sun altitude in radians
101
+ * @param maxAltitude Maximum sun altitude for the day in radians
102
+ */
103
+ export function calculateRealisticPerezDaylight(altitude, maxAltitude) {
104
+ const altitudeDeg = (altitude * 180) / Math.PI;
105
+ const maxAltitudeDeg = (maxAltitude * 180) / Math.PI;
106
+ let cctFactor;
107
+ if (altitudeDeg < -6) {
108
+ cctFactor = 0;
109
+ }
110
+ else if (altitudeDeg < 0) {
111
+ cctFactor = 0.35 + ((altitudeDeg + 6) / 6) ** 2 * 0.25;
112
+ }
113
+ else if (altitudeDeg < 25) {
114
+ const goldenHourEffect = Math.exp(-((altitudeDeg - 12.5) ** 2) / 100);
115
+ cctFactor = 0.6 - goldenHourEffect * 0.15 + (altitudeDeg / 25) * 0.3;
116
+ }
117
+ else if (altitudeDeg < 50) {
118
+ cctFactor = 0.75 + ((altitudeDeg - 25) / 25) * 0.2;
119
+ }
120
+ else {
121
+ cctFactor = Math.min(1.0, 0.95 + ((altitudeDeg - 50) / 40) * 0.05);
122
+ }
123
+ const calculateRawIntensity = (altDeg) => {
124
+ if (altDeg < -6)
125
+ return 0;
126
+ if (altDeg < 5)
127
+ return (Math.max(0, altDeg + 6) / 11) ** 4 * 0.15;
128
+ if (altDeg < 20) {
129
+ const zenithAngle = Math.max(0.01, ((90 - altDeg) * Math.PI) / 180);
130
+ const relativeLuminance = Math.exp(-0.2 / Math.max(0.01, Math.cos(zenithAngle)));
131
+ return Math.min(0.4, relativeLuminance * 0.35 + 0.05);
132
+ }
133
+ if (altDeg < 45)
134
+ return 0.25 + ((altDeg - 20) / 25) * 0.65;
135
+ if (altDeg < 80)
136
+ return 0.9 + ((altDeg - 45) / 35) * 0.1;
137
+ return 1.0;
138
+ };
139
+ const rawIntensity = calculateRawIntensity(altitudeDeg);
140
+ const maxDailyIntensity = calculateRawIntensity(maxAltitudeDeg);
141
+ const intensityFactor = maxDailyIntensity > 0.001 ? rawIntensity / maxDailyIntensity : 0;
142
+ return [Math.max(0, Math.min(1, cctFactor)), Math.max(0, Math.min(1, intensityFactor))];
143
+ }
144
+ /**
145
+ * Kasten-Young air mass formula.
146
+ * Accurate even at low altitudes/horizon.
147
+ * @param altitudeDeg Altitude in degrees
148
+ */
149
+ function calculateAirMass(altitudeDeg) {
150
+ // The Kasten-Young formula is valid for altitude > -0.5 deg.
151
+ // Below that, the atmosphere is essentially opaque for direct sunlight.
152
+ const gamma = Math.max(-0.5, altitudeDeg);
153
+ return 1 / (Math.sin((gamma * Math.PI) / 180) + 0.50572 * (gamma + 6.07995) ** -1.6364);
154
+ }
155
+ /**
156
+ * Physics-based Atmospheric model.
157
+ * Uses Beer-Lambert law for intensity and exponential decay for CCT.
158
+ * @param altitude Sun altitude in radians
159
+ * @param maxAltitude Maximum sun altitude for the day in radians
160
+ */
161
+ export function calculateRealisticPhysicsDaylight(altitude, maxAltitude) {
162
+ const altitudeDeg = (altitude * 180) / Math.PI;
163
+ const maxAltitudeDeg = (maxAltitude * 180) / Math.PI;
164
+ // CCT: Exponential approach to zenith CCT
165
+ // Factors: 0 at horizon/twilight, 1 at zenith
166
+ let cctFactor;
167
+ if (altitudeDeg < -6) {
168
+ cctFactor = 0;
169
+ }
170
+ else {
171
+ // k=0.05 gives a nice natural curve
172
+ cctFactor = 1 - Math.exp(-0.05 * (altitudeDeg + 6));
173
+ }
174
+ // Intensity: Beer-Lambert Law
175
+ // I = I0 * tau ^ m
176
+ const calculateIntensity = (altDeg) => {
177
+ if (altDeg < -6)
178
+ return 0;
179
+ // Direct Component (Beer-Lambert)
180
+ const m = calculateAirMass(altDeg);
181
+ const tau = 0.75; // Standard clear sky transmittance
182
+ const direct = tau ** m;
183
+ // Ambient Component (Diffuse twilight glow)
184
+ // Reaches ~5% of possible direct intensity at horizon
185
+ const ambient = altDeg < 0 ? ((altDeg + 6) / 6) ** 2 * 0.05 : 0.05 + (altDeg / 90) * 0.05;
186
+ return direct + ambient;
187
+ };
188
+ const rawIntensity = calculateIntensity(altitudeDeg);
189
+ const maxDailyIntensity = calculateIntensity(maxAltitudeDeg);
190
+ const intensityFactor = maxDailyIntensity > 0.001 ? rawIntensity / maxDailyIntensity : 0;
191
+ return [Math.max(0, Math.min(1, cctFactor)), Math.max(0, Math.min(1, intensityFactor))];
192
+ }
193
+ /**
194
+ * Blackbody Sun model.
195
+ * Simulates the sun as a blackbody shifting through the atmosphere.
196
+ * @param altitude Sun altitude in radians
197
+ * @param maxAltitude Maximum sun altitude for the day in radians
198
+ */
199
+ export function calculateRealisticBlackbodyDaylight(altitude, maxAltitude) {
200
+ const altitudeDeg = (altitude * 180) / Math.PI;
201
+ const maxAltitudeDeg = (maxAltitude * 180) / Math.PI;
202
+ let cctFactor;
203
+ if (altitudeDeg < -6) {
204
+ cctFactor = 0;
205
+ }
206
+ else {
207
+ // Shifts faster at the beginning, then stabilizes.
208
+ // Simulates the Rayleigh scattering effect where blue light is lost at low angles.
209
+ cctFactor = 1 - Math.exp(-0.08 * (altitudeDeg + 6));
210
+ }
211
+ const calculateIntensity = (altDeg) => {
212
+ if (altDeg < -6)
213
+ return 0;
214
+ const m = calculateAirMass(altDeg);
215
+ const tau = 0.7;
216
+ const direct = tau ** m;
217
+ // Blackbody ambient is slightly warmer/weaker initially
218
+ const ambient = altDeg < 0 ? ((altDeg + 6) / 6) ** 2 * 0.04 : 0.04 + (altDeg / 90) * 0.04;
219
+ return direct + ambient;
220
+ };
221
+ const rawIntensity = calculateIntensity(altitudeDeg);
222
+ const maxDailyIntensity = calculateIntensity(maxAltitudeDeg);
223
+ const intensityFactor = maxDailyIntensity > 0.001 ? rawIntensity / maxDailyIntensity : 0;
224
+ return [Math.max(0, Math.min(1, cctFactor)), Math.max(0, Math.min(1, intensityFactor))];
225
+ }
226
+ /**
227
+ * Hazy/Turbid model.
228
+ * Simulates a sky with high particulate matter (smog/mist).
229
+ * @param altitude Sun altitude in radians
230
+ * @param maxAltitude Maximum sun altitude for the day in radians
231
+ */
232
+ export function calculateRealisticHazyDaylight(altitude, maxAltitude) {
233
+ const altitudeDeg = (altitude * 180) / Math.PI;
234
+ const maxAltitudeDeg = (maxAltitude * 180) / Math.PI;
235
+ let cctFactor;
236
+ if (altitudeDeg < -6) {
237
+ cctFactor = 0;
238
+ }
239
+ else {
240
+ // Hazy skies have more scattering even at high angles,
241
+ // so CCT doesn't reach "pure blue" as easily (approximated by slower exponent)
242
+ cctFactor = 1 - Math.exp(-0.03 * (altitudeDeg + 6));
243
+ }
244
+ const calculateIntensity = (altDeg) => {
245
+ if (altDeg < -6)
246
+ return 0;
247
+ const m = calculateAirMass(altDeg);
248
+ const tau = 0.5; // Significant turbidity
249
+ const direct = tau ** m;
250
+ // Hazy ambient is stronger due to more scattering (Mie scattering)
251
+ const ambient = altDeg < 0 ? ((altDeg + 6) / 6) ** 1.5 * 0.08 : 0.08 + (altDeg / 90) * 0.04;
252
+ return direct + ambient;
253
+ };
254
+ const rawIntensity = calculateIntensity(altitudeDeg);
255
+ const maxDailyIntensity = calculateIntensity(maxAltitudeDeg);
256
+ const intensityFactor = maxDailyIntensity > 0.001 ? rawIntensity / maxDailyIntensity : 0;
257
+ return [Math.max(0, Math.min(1, cctFactor)), Math.max(0, Math.min(1, intensityFactor))];
258
+ }
259
+ //# sourceMappingURL=realistic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"realistic.js","sourceRoot":"","sources":["../../../src/daylightSimulation/curves/realistic.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"geoipUtil.d.ts","sourceRoot":"","sources":["../../src/daylightSimulation/geoipUtil.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,QAAQ;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACvB;AAED,wBAAgB,iBAAiB,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAgB9D"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"geoipUtil.js","sourceRoot":"","sources":["../../src/daylightSimulation/geoipUtil.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,YAAY,CAAC;AAS/B,MAAM,UAAU,iBAAiB,CAAC,EAAW;IAC3C,iFAAiF;IACjF,wCAAwC;IACxC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,WAAW,IAAI,EAAE,KAAK,KAAK,EAAE,CAAC;QAC9C,4CAA4C;QAC5C,4BAA4B;QAC5B,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC7B,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IACtB,OAAO;QACL,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,EAAE,EAAE,GAAG,CAAC,EAAsB;KAC/B,CAAC;AACJ,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { Schedule } from './scheduleMaker.js';
2
+ export interface GraphScheduleOptions {
3
+ width?: number;
4
+ height?: number;
5
+ metrics?: 'cct' | 'intensity' | 'both';
6
+ }
7
+ export declare function graphSchedule(schedule: Schedule, options?: GraphScheduleOptions): Promise<Buffer>;
8
+ //# sourceMappingURL=graphSchedule.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graphSchedule.d.ts","sourceRoot":"","sources":["../../src/daylightSimulation/graphSchedule.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAEnD,MAAM,WAAW,oBAAoB;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,KAAK,GAAG,WAAW,GAAG,MAAM,CAAC;CACxC;AAyBD,wBAAsB,aAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,GAAE,oBAAyB,GAAG,OAAO,CAAC,MAAM,CAAC,CA2F3G"}
@@ -0,0 +1,94 @@
1
+ import { ChartJSNodeCanvas } from 'chartjs-node-canvas';
2
+ const COLORS = [
3
+ 'rgb(54, 162, 235)', // Blue
4
+ 'rgb(255, 99, 132)', // Red
5
+ 'rgb(75, 192, 192)', // Teal
6
+ 'rgb(255, 205, 86)', // Yellow
7
+ 'rgb(153, 102, 255)', // Purple
8
+ 'rgb(255, 159, 64)', // Orange
9
+ 'rgb(75, 192, 75)', // Green
10
+ 'rgb(255, 0, 255)', // Magenta
11
+ ];
12
+ export async function graphSchedule(schedule, options = {}) {
13
+ const width = options.width || 1200;
14
+ const height = options.height || 600;
15
+ const metrics = options.metrics || 'both';
16
+ const canvas = new ChartJSNodeCanvas({ width, height });
17
+ const datasets = [];
18
+ const labels = schedule.points.map((p) => {
19
+ if (p.time.getMinutes() === 0) {
20
+ return p.time.toLocaleTimeString(undefined, { hour: '2-digit', minute: '2-digit' });
21
+ }
22
+ return '';
23
+ });
24
+ const showIntensity = metrics === 'intensity' || metrics === 'both';
25
+ const showCct = metrics === 'cct' || metrics === 'both';
26
+ schedule.curves.forEach((curve, index) => {
27
+ const color = schedule.curves.length > 1 ? COLORS[index % COLORS.length] : 'rgb(54, 162, 235)';
28
+ const cctColor = schedule.curves.length > 1 ? COLORS[index % COLORS.length] : 'rgb(255, 99, 132)';
29
+ if (showIntensity) {
30
+ datasets.push({
31
+ label: schedule.curves.length > 1 ? `${curve} (Int)` : 'Intensity (%)',
32
+ data: schedule.points.map((p) => (p.values.get(curve)?.intensity ?? 0) / 10),
33
+ borderColor: color,
34
+ backgroundColor: 'transparent',
35
+ yAxisID: 'y',
36
+ fill: false,
37
+ borderDash: showIntensity && showCct ? [5, 5] : [],
38
+ pointRadius: 0,
39
+ borderWidth: 2,
40
+ });
41
+ }
42
+ if (showCct) {
43
+ datasets.push({
44
+ label: schedule.curves.length > 1 ? `${curve} (CCT)` : 'CCT (K)',
45
+ data: schedule.points.map((p) => p.values.get(curve)?.cct ?? 0),
46
+ borderColor: cctColor,
47
+ backgroundColor: 'transparent',
48
+ yAxisID: 'y1',
49
+ fill: false,
50
+ pointRadius: 0,
51
+ borderWidth: 2,
52
+ });
53
+ }
54
+ });
55
+ const titleCurve = schedule.curves.length > 1 ? (schedule.curves.length === 7 ? 'All Curves' : 'Multiple Curves') : schedule.curves[0];
56
+ const configuration = {
57
+ type: 'line',
58
+ data: { labels, datasets },
59
+ options: {
60
+ plugins: {
61
+ title: {
62
+ display: true,
63
+ text: `Schedule: ${schedule.date.toDateString()} (Lat: ${schedule.lat.toFixed(2)}, Lon: ${schedule.lon.toFixed(2)}) - Curve: ${titleCurve}`,
64
+ },
65
+ },
66
+ scales: {
67
+ x: {
68
+ ticks: {
69
+ autoSkip: false,
70
+ maxRotation: 45,
71
+ callback: (_val, index) => labels[index],
72
+ },
73
+ },
74
+ y: {
75
+ type: 'linear',
76
+ display: true,
77
+ position: 'left',
78
+ title: { display: true, text: 'Intensity (%)' },
79
+ min: 0,
80
+ max: 100,
81
+ },
82
+ y1: {
83
+ type: 'linear',
84
+ display: true,
85
+ position: 'right',
86
+ title: { display: true, text: 'CCT (K)' },
87
+ },
88
+ },
89
+ },
90
+ };
91
+ // biome-ignore lint/suspicious/noExplicitAny: Chart.js configuration type is complex
92
+ return await canvas.renderToBuffer(configuration);
93
+ }
94
+ //# sourceMappingURL=graphSchedule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graphSchedule.js","sourceRoot":"","sources":["../../src/daylightSimulation/graphSchedule.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import type { CommandDeps } from './types.js';
2
+ export interface SchedulePoint {
3
+ time: Date;
4
+ values: Map<string, {
5
+ cct: number;
6
+ intensity: number;
7
+ }>;
8
+ isSpecial: boolean;
9
+ eventName?: string;
10
+ }
11
+ export interface Schedule {
12
+ lat: number;
13
+ lon: number;
14
+ date: Date;
15
+ source: string;
16
+ points: SchedulePoint[];
17
+ curves: string[];
18
+ times: Record<string, Date | null | undefined>;
19
+ }
20
+ export interface MakeScheduleOptions {
21
+ lat?: string;
22
+ lon?: string;
23
+ date?: string;
24
+ intervalMinutes?: number;
25
+ curves?: string;
26
+ includeSpecialTimes?: boolean;
27
+ bufferMinutes?: number;
28
+ startTime?: Date;
29
+ endTime?: Date;
30
+ }
31
+ export declare class ScheduleMaker {
32
+ private deps;
33
+ constructor(deps: CommandDeps);
34
+ makeSchedule(options: MakeScheduleOptions): Promise<Schedule>;
35
+ }
36
+ //# sourceMappingURL=scheduleMaker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scheduleMaker.d.ts","sourceRoot":"","sources":["../../src/daylightSimulation/scheduleMaker.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,IAAI,CAAC;IACX,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACxD,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,QAAQ;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,IAAI,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;CAChD;AAED,MAAM,WAAW,mBAAmB;IAClC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,OAAO,CAAC,EAAE,IAAI,CAAC;CAChB;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,IAAI,CAAc;gBAEd,IAAI,EAAE,WAAW;IAIvB,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,QAAQ,CAAC;CAkMpE"}