@operato/twin-kernel 0.7.20 → 0.7.21
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.
- package/dist/contract.d.ts +11 -0
- package/dist/ems-kernel.js +23 -1
- package/dist-cjs/index.cjs +9 -1
- package/package.json +1 -1
package/dist/contract.d.ts
CHANGED
|
@@ -1237,6 +1237,17 @@ export interface MeterPointState {
|
|
|
1237
1237
|
export interface DemandWindowState {
|
|
1238
1238
|
startMs: number;
|
|
1239
1239
|
endMs: number;
|
|
1240
|
+
/**
|
|
1241
|
+
* 이 구간의 **최대가 찍힌 순간**의 지점별 kW — 요금이 걸린 수는 kW 다.
|
|
1242
|
+
*
|
|
1243
|
+
* 나중에 계산할 수 없다: 커널은 표본을 보관하지 않으므로 그 순간이 지나면 각 지점이 얼마였는지 알 길이
|
|
1244
|
+
* 없다. 그래서 최대가 갱신되는 순간에 찍어 둔다. 「어느 분기를 깎아야 피크가 내려가나」의 유일한 근거다
|
|
1245
|
+
* (전력량이 큰 분기와 피크를 만든 분기는 다를 수 있다).
|
|
1246
|
+
*/
|
|
1247
|
+
pointsAtPeak?: {
|
|
1248
|
+
id: string;
|
|
1249
|
+
kW: number;
|
|
1250
|
+
}[];
|
|
1240
1251
|
/**
|
|
1241
1252
|
* 그 구간의 최대 순간부하 — 표본이 없으면 `undefined`(0 이 아니다).
|
|
1242
1253
|
*
|
package/dist/ems-kernel.js
CHANGED
|
@@ -300,8 +300,25 @@ export class EmsKernel extends FlowEngine {
|
|
|
300
300
|
*/
|
|
301
301
|
const roots = this.rootMeterIds();
|
|
302
302
|
const total = [...this.points.values()].reduce((sum, p) => sum + (roots.has(p.id) ? p.kW ?? 0 : 0), 0);
|
|
303
|
-
if (w.maxKW === undefined || total > w.maxKW)
|
|
303
|
+
if (w.maxKW === undefined || total > w.maxKW) {
|
|
304
304
|
w.maxKW = total;
|
|
305
|
+
/*
|
|
306
|
+
* ── 피크가 갱신된 **그 순간**의 지점별 kW 를 붙잡는다 (2026-08-18) ─────────
|
|
307
|
+
*
|
|
308
|
+
* 요금이 매겨지는 수는 kW(최대수요)이고 전력량(kWh)이 아니다. 그런데 지점별로 남기던 것은
|
|
309
|
+
* 구간 전력량뿐이라, 「어느 분기를 깎아야 피크가 내려가나」에 답할 수 없었다 — 전력량이 큰 분기가
|
|
310
|
+
* 피크를 만든 분기와 다를 수 있다(하루 종일 조금씩 쓰는 부하 vs 잠깐 크게 쓰는 부하).
|
|
311
|
+
*
|
|
312
|
+
* 나중에 계산할 수 없는 값이다: 표본을 보관하지 않으므로 그 순간이 지나면 각 지점이 얼마였는지
|
|
313
|
+
* 알 길이 없다. 그래서 **갱신되는 순간에** 찍는다.
|
|
314
|
+
*
|
|
315
|
+
* 뿌리만이 아니라 **모든 지점**을 찍는다: 뿌리 합이 피크를 만들지만, 그 피크를 누가 만들었는지는
|
|
316
|
+
* 하위 계량이 답한다. kW 를 모르는 지점은 넣지 않는다(0 으로 만들지 않는다).
|
|
317
|
+
*/
|
|
318
|
+
w.pointsAtPeak = [...this.points.values()]
|
|
319
|
+
.filter(p => Number.isFinite(Number(p.kW)))
|
|
320
|
+
.map(p => ({ id: p.id, kW: Number(p.kW) }));
|
|
321
|
+
}
|
|
305
322
|
w.samples++;
|
|
306
323
|
w.meanKW = (w.meanKW === undefined ? total : (w.meanKW * (w.samples - 1) + total) / w.samples);
|
|
307
324
|
}
|
|
@@ -387,6 +404,11 @@ export class EmsKernel extends FlowEngine {
|
|
|
387
404
|
* `root` 는 계층 판정을 우리가 말해 주는 것이다 — 소비처가 같은 규칙을 다시 쓰면 갈라진다.
|
|
388
405
|
*/
|
|
389
406
|
...(pointShares.length ? { points: pointShares } : {}),
|
|
407
|
+
/*
|
|
408
|
+
* 피크 순간의 지점별 kW — 요금이 걸린 수는 kW 다. 이것이 없으면 저널을 읽는 쪽은 「어느 분기를
|
|
409
|
+
* 깎아야 피크가 내려가나」에 답할 수 없다(전력량이 큰 분기와 피크를 만든 분기는 다를 수 있다).
|
|
410
|
+
*/
|
|
411
|
+
...(w.pointsAtPeak?.length ? { pointsAtPeak: w.pointsAtPeak } : {}),
|
|
390
412
|
/*
|
|
391
413
|
* **만든 값이면 그렇게 말한다.** 상태에만 표시하고 사실에는 빠뜨리면, 저널을 읽는 쪽
|
|
392
414
|
* (성과·이력·보고서)이 시뮬레이션의 수를 계측으로 읽는다 — 값이 그럴듯할수록 위험하다.
|
package/dist-cjs/index.cjs
CHANGED
|
@@ -6184,7 +6184,10 @@ var EmsKernel = class extends FlowEngine {
|
|
|
6184
6184
|
if (kW !== void 0) {
|
|
6185
6185
|
const roots = this.rootMeterIds();
|
|
6186
6186
|
const total = [...this.points.values()].reduce((sum, p) => sum + (roots.has(p.id) ? p.kW ?? 0 : 0), 0);
|
|
6187
|
-
if (w.maxKW === void 0 || total > w.maxKW)
|
|
6187
|
+
if (w.maxKW === void 0 || total > w.maxKW) {
|
|
6188
|
+
w.maxKW = total;
|
|
6189
|
+
w.pointsAtPeak = [...this.points.values()].filter((p) => Number.isFinite(Number(p.kW))).map((p) => ({ id: p.id, kW: Number(p.kW) }));
|
|
6190
|
+
}
|
|
6188
6191
|
w.samples++;
|
|
6189
6192
|
w.meanKW = w.meanKW === void 0 ? total : (w.meanKW * (w.samples - 1) + total) / w.samples;
|
|
6190
6193
|
}
|
|
@@ -6262,6 +6265,11 @@ var EmsKernel = class extends FlowEngine {
|
|
|
6262
6265
|
* `root` 는 계층 판정을 우리가 말해 주는 것이다 — 소비처가 같은 규칙을 다시 쓰면 갈라진다.
|
|
6263
6266
|
*/
|
|
6264
6267
|
...pointShares.length ? { points: pointShares } : {},
|
|
6268
|
+
/*
|
|
6269
|
+
* 피크 순간의 지점별 kW — 요금이 걸린 수는 kW 다. 이것이 없으면 저널을 읽는 쪽은 「어느 분기를
|
|
6270
|
+
* 깎아야 피크가 내려가나」에 답할 수 없다(전력량이 큰 분기와 피크를 만든 분기는 다를 수 있다).
|
|
6271
|
+
*/
|
|
6272
|
+
...w.pointsAtPeak?.length ? { pointsAtPeak: w.pointsAtPeak } : {},
|
|
6265
6273
|
/*
|
|
6266
6274
|
* **만든 값이면 그렇게 말한다.** 상태에만 표시하고 사실에는 빠뜨리면, 저널을 읽는 쪽
|
|
6267
6275
|
* (성과·이력·보고서)이 시뮬레이션의 수를 계측으로 읽는다 — 값이 그럴듯할수록 위험하다.
|
package/package.json
CHANGED