@operato/twin-kernel 0.7.79 → 0.7.80
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/ems-kernel.d.ts +9 -0
- package/dist/ems-kernel.js +43 -0
- package/dist-cjs/index.cjs +26 -0
- package/package.json +1 -1
package/dist/ems-kernel.d.ts
CHANGED
|
@@ -169,6 +169,15 @@ export declare class EmsKernel extends FlowEngine {
|
|
|
169
169
|
* 않으면 늦게 온 옛 적산이 최신 값을 뒤로 돌린다 — 그리고 그것이 「계기가 되돌아갔다」로 잘못 적힌다.
|
|
170
170
|
*/
|
|
171
171
|
private applyGenerated;
|
|
172
|
+
/**
|
|
173
|
+
* 시계가 기간의 끝을 지났으면 마감한다 — **표본을 기다리지 않는다.**
|
|
174
|
+
*
|
|
175
|
+
* 값이 오지 않는 밤에도 자정이 지나면 어제가 닫힌다. 마감에 쓰는 총량은 **그날 마지막으로 본 값**
|
|
176
|
+
* 이므로 표본이 더 오지 않아도 정확하다(하루 누적은 그 값이 곧 그날의 총량이다).
|
|
177
|
+
*
|
|
178
|
+
* 이 자리는 계량의 `closeDue` 와 같은 성질이다 — 호스트가 시각을 주며 부른다.
|
|
179
|
+
*/
|
|
180
|
+
closeGenerationPeriodsDue(nowMs: number): void;
|
|
172
181
|
/**
|
|
173
182
|
* **기간이 끝났으면 그 기간의 발전량을 사실로 낸다.**
|
|
174
183
|
*
|
package/dist/ems-kernel.js
CHANGED
|
@@ -532,6 +532,39 @@ export class EmsKernel extends FlowEngine {
|
|
|
532
532
|
this.closeGenerationPeriod(id, eq, { atMs, kWh, dayIndex, kind, since, priorSince, periodAdvanced, faulted: dropped && sameDayDrop });
|
|
533
533
|
this.revision++;
|
|
534
534
|
}
|
|
535
|
+
/**
|
|
536
|
+
* 시계가 기간의 끝을 지났으면 마감한다 — **표본을 기다리지 않는다.**
|
|
537
|
+
*
|
|
538
|
+
* 값이 오지 않는 밤에도 자정이 지나면 어제가 닫힌다. 마감에 쓰는 총량은 **그날 마지막으로 본 값**
|
|
539
|
+
* 이므로 표본이 더 오지 않아도 정확하다(하루 누적은 그 값이 곧 그날의 총량이다).
|
|
540
|
+
*
|
|
541
|
+
* 이 자리는 계량의 `closeDue` 와 같은 성질이다 — 호스트가 시각을 주며 부른다.
|
|
542
|
+
*/
|
|
543
|
+
closeGenerationPeriodsDue(nowMs) {
|
|
544
|
+
const today = this.localDayIndex(nowMs);
|
|
545
|
+
for (const [id, obs] of [...this.generationPeriodObs.entries()]) {
|
|
546
|
+
if (today <= obs.dayIndex)
|
|
547
|
+
continue;
|
|
548
|
+
const eq = this.equipment.get(id);
|
|
549
|
+
if (!eq)
|
|
550
|
+
continue;
|
|
551
|
+
const kind = eq.generatedKWhAccumulation;
|
|
552
|
+
/*
|
|
553
|
+
* 마감은 `applyGenerated` 와 **같은 함수**로 한다 — 규칙을 두 벌 만들면 표본으로 닫은 날과
|
|
554
|
+
* 시계로 닫은 날이 다른 값을 낸다.
|
|
555
|
+
*
|
|
556
|
+
* 그때 「지금 들어온 값」이 없으므로, 마지막으로 본 값을 그대로 넘긴다(그 값은 이미 상태에 있다).
|
|
557
|
+
*/
|
|
558
|
+
this.closeGenerationPeriod(id, eq, {
|
|
559
|
+
atMs: nowMs,
|
|
560
|
+
kWh: obs.lastKWh,
|
|
561
|
+
dayIndex: today,
|
|
562
|
+
kind,
|
|
563
|
+
periodAdvanced: false,
|
|
564
|
+
faulted: false
|
|
565
|
+
});
|
|
566
|
+
}
|
|
567
|
+
}
|
|
535
568
|
/**
|
|
536
569
|
* **기간이 끝났으면 그 기간의 발전량을 사실로 낸다.**
|
|
537
570
|
*
|
|
@@ -1523,6 +1556,16 @@ export class EmsKernel extends FlowEngine {
|
|
|
1523
1556
|
* 부하를 먼저 만들고 마감한다 — 마감이 먼저면 마지막 값이 다음 구간으로 밀린다.
|
|
1524
1557
|
*/
|
|
1525
1558
|
const at = this.nowMs();
|
|
1559
|
+
/*
|
|
1560
|
+
* ── 발전 기간도 **시계로** 마감한다 (2026-08-30) ───────────────────────────
|
|
1561
|
+
*
|
|
1562
|
+
* 앞 판은 새 표본이 올 때만 날짜가 바뀐 것을 알아챘다. 그런데 태양광은 해가 지면 값을 보내지
|
|
1563
|
+
* 않는다 — 어제 마지막 표본이 19:40 이면 어제 하루치가 **다음 날 아침 첫 표본**에야 확정된다.
|
|
1564
|
+
* 밤새 「어제 얼마 냈나」에 답이 없다.
|
|
1565
|
+
*
|
|
1566
|
+
* 계량은 이미 시계로 마감한다(`closeDue`). 한 커널 안에서 규칙이 두 벌일 이유가 없다.
|
|
1567
|
+
*/
|
|
1568
|
+
this.closeGenerationPeriodsDue(at);
|
|
1526
1569
|
/* 틱 길이를 함께 넘긴다 — 방전량을 에너지로 바꿀 때 필요하다(필드로 숨기면 어디서 온 값인지 흐려진다). */
|
|
1527
1570
|
this.deriveLoad(at, dtMs);
|
|
1528
1571
|
this.closeDue(at);
|
package/dist-cjs/index.cjs
CHANGED
|
@@ -8168,6 +8168,31 @@ var EmsKernel = class extends FlowEngine {
|
|
|
8168
8168
|
this.closeGenerationPeriod(id, eq, { atMs, kWh, dayIndex, kind, since, priorSince, periodAdvanced, faulted: dropped && sameDayDrop });
|
|
8169
8169
|
this.revision++;
|
|
8170
8170
|
}
|
|
8171
|
+
/**
|
|
8172
|
+
* 시계가 기간의 끝을 지났으면 마감한다 — **표본을 기다리지 않는다.**
|
|
8173
|
+
*
|
|
8174
|
+
* 값이 오지 않는 밤에도 자정이 지나면 어제가 닫힌다. 마감에 쓰는 총량은 **그날 마지막으로 본 값**
|
|
8175
|
+
* 이므로 표본이 더 오지 않아도 정확하다(하루 누적은 그 값이 곧 그날의 총량이다).
|
|
8176
|
+
*
|
|
8177
|
+
* 이 자리는 계량의 `closeDue` 와 같은 성질이다 — 호스트가 시각을 주며 부른다.
|
|
8178
|
+
*/
|
|
8179
|
+
closeGenerationPeriodsDue(nowMs) {
|
|
8180
|
+
const today = this.localDayIndex(nowMs);
|
|
8181
|
+
for (const [id, obs] of [...this.generationPeriodObs.entries()]) {
|
|
8182
|
+
if (today <= obs.dayIndex) continue;
|
|
8183
|
+
const eq = this.equipment.get(id);
|
|
8184
|
+
if (!eq) continue;
|
|
8185
|
+
const kind = eq.generatedKWhAccumulation;
|
|
8186
|
+
this.closeGenerationPeriod(id, eq, {
|
|
8187
|
+
atMs: nowMs,
|
|
8188
|
+
kWh: obs.lastKWh,
|
|
8189
|
+
dayIndex: today,
|
|
8190
|
+
kind,
|
|
8191
|
+
periodAdvanced: false,
|
|
8192
|
+
faulted: false
|
|
8193
|
+
});
|
|
8194
|
+
}
|
|
8195
|
+
}
|
|
8171
8196
|
/**
|
|
8172
8197
|
* **기간이 끝났으면 그 기간의 발전량을 사실로 낸다.**
|
|
8173
8198
|
*
|
|
@@ -8898,6 +8923,7 @@ var EmsKernel = class extends FlowEngine {
|
|
|
8898
8923
|
tick(dtMs) {
|
|
8899
8924
|
super.tick(dtMs);
|
|
8900
8925
|
const at = this.nowMs();
|
|
8926
|
+
this.closeGenerationPeriodsDue(at);
|
|
8901
8927
|
this.deriveLoad(at, dtMs);
|
|
8902
8928
|
this.closeDue(at);
|
|
8903
8929
|
}
|
package/package.json
CHANGED