-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmulti_device_optimizer_standalone.html
More file actions
555 lines (522 loc) · 113 KB
/
Copy pathmulti_device_optimizer_standalone.html
File metadata and controls
555 lines (522 loc) · 113 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Smart Home Energy Optimizer</title>
<style>
:root { --bg:#0b1020; --fg:#e7e9ee; --muted:#9aa4b2; }
html, body { height:100%; margin:0; background:var(--bg); color:var(--fg); font-family:ui-sans-serif,system-ui; display:grid; place-items:center; }
.card { width:min(1280px,96vw); background:rgba(255,255,255,0.06); border:1px solid rgba(255,255,255,0.08); border-radius:20px; box-shadow:0 10px 30px rgba(0,0,0,0.35); padding:28px 24px; }
h1 { margin:0 0 4px; font-size:22px; font-weight:700; }
p.sub { margin:0 0 12px; color:var(--muted); font-size:13px; }
.device-row { display:flex; gap:10px; margin-bottom:14px; flex-wrap:wrap; align-items:center; }
.device-toggle { display:flex; align-items:center; gap:6px; padding:6px 14px; border-radius:12px; border:1px solid rgba(255,255,255,0.12); background:rgba(255,255,255,0.04); cursor:pointer; font-size:13px; transition:all 0.2s; user-select:none; }
.device-toggle:has(input:checked) { background:rgba(255,255,255,0.10); border-color:rgba(255,255,255,0.3); }
.device-toggle input { accent-color:#7aa2ff; }
.rows { display:grid; gap:6px; margin-bottom:12px; }
.row { display:grid; grid-template-columns:170px 1fr auto; gap:12px; align-items:center; font-size:13px; }
input[type="range"] { width:100%; accent-color:#7aa2ff; }
.tag { background:rgba(255,255,255,0.06); border:1px solid rgba(255,255,255,0.08); padding:3px 8px; border-radius:8px; font-size:12px; min-width:55px; text-align:center; }
.plots { display:grid; grid-template-columns:1fr 1fr 1fr; gap:12px; margin-top:14px; }
@media (max-width:900px){ .plots { grid-template-columns:1fr; } }
.plot-card { background:rgba(255,255,255,0.04); border:1px solid rgba(255,255,255,0.08); border-radius:14px; padding:10px; }
canvas { width:100%; border-radius:10px; background:rgba(0,0,0,0.2); display:block; }
.canvas-full { height:260px; }
.canvas-small { height:220px; }
.plot-title { margin:4px 0 8px; font-weight:600; font-size:12px; color:var(--muted); display:flex; justify-content:space-between; align-items:center; }
.legend { display:flex; gap:8px; font-size:11px; color:#cbd5e1; flex-wrap:wrap; }
.sw { width:8px; height:8px; border-radius:2px; display:inline-block; vertical-align:middle; }
.pw-toggle { transition:opacity 0.15s; user-select:none; }
.pw-toggle.off { opacity:0.3; text-decoration:line-through; }
.cost-breakdown { margin-top:14px; padding:14px; background:rgba(255,255,255,0.04); border:1px solid rgba(255,255,255,0.08); border-radius:14px; font-size:13px; }
.status { margin-top:8px; font-size:11px; color:var(--muted); }
</style>
</head>
<body>
<div class="card">
<div style="display:flex;justify-content:space-between;align-items:flex-start;">
<div>
<h1>Smart Home Energy Optimizer</h1>
<p class="sub">Coordinated DER optimization via decomposed dynamic programming</p>
</div>
<div id="savingsDisplay" style="font-size:22px;font-weight:700;color:#34d399;white-space:nowrap;padding-top:2px;">—</div>
</div>
<!-- Device toggles -->
<div class="device-row">
<label class="device-toggle">
<input type="checkbox" id="enableBattery" checked>
<span style="color:#60a5fa;font-weight:600;">Battery</span>
</label>
<label class="device-toggle">
<input type="checkbox" id="enableWH">
<span style="color:#f97316;font-weight:600;">Water Heater</span>
</label>
<label class="device-toggle">
<input type="checkbox" id="enableAC">
<span style="color:#22d3ee;font-weight:600;">AC / Heat Pump</span>
</label>
</div>
<!-- Sliders -->
<div class="rows">
<div class="row">
<label>Battery capacity</label>
<input id="battCap" type="range" min="5" max="50" value="10" step="1"/>
<span id="battCapLabel" class="tag">10 kWh</span>
</div>
<div class="row">
<label>Max charge power</label>
<input id="pmaxCharge" type="range" min="0" max="20" value="5" step="1"/>
<span id="pmaxChargeLabel" class="tag">5 kW</span>
</div>
<div class="row">
<label>Max discharge power</label>
<input id="pmaxDischarge" type="range" min="0" max="20" value="5" step="1"/>
<span id="pmaxDischargeLabel" class="tag">5 kW</span>
</div>
<div class="row">
<label></label>
<button id="pmaxLock" style="width:auto;padding:4px 12px;border-radius:10px;border:1px solid rgba(255,255,255,0.2);background:rgba(255,255,255,0.07);color:var(--fg);cursor:pointer;font-size:12px;">Linked</button>
<span></span>
</div>
<div class="row">
<label>Solar PV peak</label>
<input id="solarPeak" type="range" min="0" max="15" value="5" step="0.5"/>
<span id="solarPeakLabel" class="tag">5.0 kW</span>
</div>
</div>
<details id="csvImport" style="margin-top:12px;">
<summary style="cursor:pointer;color:var(--muted);font-size:13px;">Import prices (CSV / paste)</summary>
<div style="display:flex;gap:8px;margin-top:8px;align-items:flex-start;">
<textarea id="csvText" rows="3" placeholder="Paste 24h prices (CSV or plain numbers)." style="flex:1;padding:8px;border-radius:10px;border:1px solid rgba(255,255,255,0.2);background:rgba(255,255,255,0.07);color:var(--fg);font-size:12px;resize:vertical;font-family:monospace;"></textarea>
<div style="display:flex;flex-direction:column;gap:4px;">
<button id="loadBuy" style="padding:6px 12px;border-radius:10px;border:1px solid rgba(255,255,255,0.2);background:rgba(147,197,253,0.15);color:#93c5fd;cursor:pointer;font-size:12px;white-space:nowrap;">Load as Buy</button>
<button id="loadSell" style="padding:6px 12px;border-radius:10px;border:1px solid rgba(255,255,255,0.2);background:rgba(252,165,165,0.15);color:#fca5a5;cursor:pointer;font-size:12px;white-space:nowrap;">Load as Sell</button>
<label style="padding:6px 12px;border-radius:10px;border:1px solid rgba(255,255,255,0.2);background:rgba(255,255,255,0.07);color:var(--fg);cursor:pointer;font-size:12px;text-align:center;white-space:nowrap;">Upload CSV<input id="csvFile" type="file" accept=".csv,.txt" style="display:none;"/></label>
<a href="https://iexrtmprice.com/DSM_Data/" target="_blank" rel="noopener" style="font-size:11px;color:var(--muted);text-align:center;text-decoration:underline;">IEX DAM prices</a>
</div>
</div>
</details>
<!-- Charts -->
<div class="plots">
<!-- Row 1: Prices + load + outdoor temp (full width) -->
<div class="plot-card" style="grid-column:1/-1;">
<div class="plot-title">
<span>Inputs (drag to edit)</span>
<span class="legend">
<span><span class="sw" style="background:#93c5fd"></span> buy price</span>
<span><span class="sw" style="background:#fca5a5"></span> sell price</span>
<span><span class="sw" style="background:#a7f3d0"></span> load (kW)</span>
<span><span class="sw" style="background:#fbbf24"></span> outdoor °C</span>
</span>
</div>
<canvas id="plotPrices" class="canvas-full"></canvas>
</div>
<!-- Row 2: Device states with view selector -->
<div style="grid-column:1/-1;display:flex;align-items:center;gap:8px;">
<select id="deviceView" style="padding:4px 8px;border-radius:8px;border:1px solid rgba(255,255,255,0.2);background:rgba(255,255,255,0.07);color:var(--fg);font-size:12px;cursor:pointer;">
<option value="all">All devices</option>
<option value="battery" selected>Battery SOC</option>
<option value="wh">Water Heater</option>
<option value="ac">Room Temperature</option>
</select>
</div>
<div class="plot-card device-card" id="cardBattery">
<div class="plot-title">
<span style="color:#60a5fa">Battery SOC</span>
<span class="legend"><span style="color:#ff9a6c">shift+click</span> gate | <span style="color:#ff9a6c">drag</span> move | <span style="color:#ff9a6c">dblclick</span> delete
<label style="font-weight:400;font-size:11px;cursor:pointer;margin-left:6px;"><input id="flowToggle" type="checkbox" style="accent-color:#7aa2ff;vertical-align:-1px;"/> animate</label>
</span>
</div>
<div style="position:relative;">
<canvas id="plotBattery" class="canvas-small"></canvas>
<canvas id="plotBattOverlay" class="canvas-small" style="position:absolute;top:0;left:0;width:100%;pointer-events:none;border-radius:10px;background:transparent;"></canvas>
</div>
</div>
<div class="plot-card device-card" id="cardWH">
<div class="plot-title">
<span style="color:#f97316">Water Heater Temp</span>
<span class="legend"><span style="font-size:10px;color:#666">-- baseline</span></span>
</div>
<canvas id="plotWH" class="canvas-small"></canvas>
</div>
<div class="plot-card device-card" id="cardAC">
<div class="plot-title">
<span style="color:#22d3ee">Room Temperature</span>
<span class="legend"><span style="font-size:10px;color:#666">-- baseline</span></span>
</div>
<canvas id="plotAC" class="canvas-small"></canvas>
</div>
<!-- Row 3: Power flows (full width) -->
<div class="plot-card" style="grid-column:1/-1;">
<div class="plot-title">
<span>Power Flows (kW)</span>
<span class="legend">
<span class="pw-toggle" data-trace="solar" style="cursor:pointer;"><span class="sw" style="background:#fbbf24"></span> solar</span>
<span class="pw-toggle" data-trace="load" style="cursor:pointer;"><span class="sw" style="background:#a7f3d0"></span> load</span>
<span class="pw-toggle" data-trace="battery" style="cursor:pointer;"><span class="sw" style="background:#60a5fa"></span> battery</span>
<span class="pw-toggle" data-trace="wh" style="cursor:pointer;"><span class="sw" style="background:#f97316"></span> water heater</span>
<span class="pw-toggle" data-trace="ac" style="cursor:pointer;"><span class="sw" style="background:#22d3ee"></span> AC</span>
<span class="pw-toggle" data-trace="net" style="cursor:pointer;"><span class="sw" style="background:#e2e8f0"></span> net grid</span>
</span>
</div>
<canvas id="plotPower" class="canvas-full"></canvas>
</div>
</div>
<!-- Cost breakdown -->
<div id="costBreakdown" class="cost-breakdown" style="text-align:center;color:var(--muted);">—</div>
<!-- Convergence chart (collapsible) -->
<details style="margin-top:12px;">
<summary style="cursor:pointer;color:var(--muted);font-size:13px;">Coordination convergence</summary>
<div class="plot-card" style="margin-top:8px;">
<div class="plot-title">
<span>Daily cost per coordination round</span>
<span class="legend">
<span><span class="sw" style="background:#34d399"></span> bill (best so far)</span>
<span><span class="sw" style="background:#c084fc"></span> total objective</span>
<span style="color:#666">-- baseline</span>
</span>
</div>
<canvas id="plotConvergence" style="width:100%;height:200px;border-radius:10px;background:rgba(0,0,0,0.2);display:block;"></canvas>
</div>
</details>
<div id="status" class="status">Loading Pyodide...</div>
</div>
<script type="module">
const status = document.getElementById("status");
function debounce(fn, ms) { let t; return (...a) => { clearTimeout(t); t = setTimeout(() => fn(...a), ms); }; }
const scheduleSolve = debounce(() => {
if (!window.pyodide) return;
status.textContent = "Solving...";
runSolve();
}, 200);
// Load Pyodide
self.pyodideLogLevel = "error";
import("https://cdn.jsdelivr.net/pyodide/v0.26.2/full/pyodide.mjs").then(async ({ loadPyodide }) => {
window.pyodide = await loadPyodide({ stdout: console.log, stderr: console.error });
await pyodide.loadPackage("numpy");
// --- BEGIN EMBEDDED PAYLOAD (generated by make_standalone.py) ---
// Compiled WASM kernels (Cython->C->WebAssembly, 146KB .so)
const _whl = "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";
// Obfuscated Python UI/coordination code (zlib+base64)
const _pysrc = "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";
// Write the wheel into Pyodide's Emscripten FS and install from there.
// emfs:// not file:// -- file:// is intercepted by the browser and
// routed to the HTTP server, which 404s.
await pyodide.loadPackage("micropip");
await pyodide.runPythonAsync(`
import base64, os
os.makedirs("/tmp/wheels", exist_ok=True)
_whl_name = "dp_solvers-0.1.0-cp312-cp312-pyodide_2024_0_wasm32.whl"
with open(f"/tmp/wheels/{_whl_name}", "wb") as f:
f.write(base64.b64decode("${_whl}"))
import micropip
await micropip.install(f"emfs:///tmp/wheels/{_whl_name}")
`);
const code = `import base64 as _b, zlib as _z; exec(_z.decompress(_b.b64decode("${_pysrc}")))`;
// --- END EMBEDDED PAYLOAD ---
const setup = `
c = document.getElementById("plotPrices")
c.addEventListener("mousedown", create_proxy(_cktdp))
c.addEventListener("mousemove", create_proxy(_sukgh))
c.addEventListener("mouseup", create_proxy(_axidw))
_batt = document.getElementById("plotBattery")
_batt.addEventListener("mousedown", create_proxy(_nbdze))
_batt.addEventListener("mousemove", create_proxy(_whbsu))
_batt.addEventListener("mouseup", create_proxy(_rtvca))
_batt.addEventListener("dblclick", create_proxy(_hlzfk))
`;
await pyodide.runPythonAsync(code + setup);
// Slider listeners
for (const [id, labelId, suffix] of [
["battCap", "battCapLabel", " kWh"],
["solarPeak", "solarPeakLabel", " kW"],
]) {
document.getElementById(id).addEventListener("input", e => {
document.getElementById(labelId).textContent = e.target.value + suffix;
scheduleSolve();
});
}
// Charge/discharge power sliders with link
let pmaxLocked = true;
const chargeSlider = document.getElementById("pmaxCharge");
const dischargeSlider = document.getElementById("pmaxDischarge");
const lockBtn = document.getElementById("pmaxLock");
chargeSlider.addEventListener("input", e => {
document.getElementById("pmaxChargeLabel").textContent = e.target.value + " kW";
if (pmaxLocked) {
dischargeSlider.value = e.target.value;
document.getElementById("pmaxDischargeLabel").textContent = e.target.value + " kW";
}
scheduleSolve();
});
dischargeSlider.addEventListener("input", e => {
document.getElementById("pmaxDischargeLabel").textContent = e.target.value + " kW";
if (pmaxLocked) {
chargeSlider.value = e.target.value;
document.getElementById("pmaxChargeLabel").textContent = e.target.value + " kW";
}
scheduleSolve();
});
lockBtn.addEventListener("click", () => {
pmaxLocked = !pmaxLocked;
lockBtn.textContent = pmaxLocked ? "Linked" : "Independent";
lockBtn.style.borderColor = pmaxLocked ? "rgba(255,255,255,0.2)" : "rgba(255,150,100,0.5)";
});
// Checkbox listeners
for (const id of ["enableBattery", "enableWH", "enableAC"]) {
document.getElementById(id).addEventListener("change", scheduleSolve);
}
// CSV import (exact match with existing IEX parser)
function parseCSVLine(line){
const fields=[]; let cur="",inQ=false;
for(const ch of line){
if(ch==='"'){inQ=!inQ;}
else if(ch===','&&!inQ){fields.push(cur.trim());cur="";}
else{cur+=ch;}
}
fields.push(cur.trim());
return fields;
}
function parseCSVValues(text){
const lines=text.trim().split(/\r?\n/).filter(l=>l.trim());
if(lines.length<2) return text.split(/[\s,;]+/).map(s=>s.trim()).filter(s=>s&&!isNaN(s)).map(Number);
const hdr=lines[0];
if(/price/i.test(hdr)){
const headers=parseCSVLine(hdr);
const pi=headers.findIndex(h=>/price/i.test(h));
if(pi===-1) return text.split(/[\s,;]+/).map(s=>s.trim()).filter(s=>s&&!isNaN(s)).map(Number);
const isMWh=/mwh/i.test(headers[pi]);
const ti=headers.findIndex(h=>/time/i.test(h));
const di=headers.findIndex(h=>/date/i.test(h));
const slotSums=new Float64Array(96), slotCounts=new Uint32Array(96);
const dates=new Set();
for(let i=1;i<lines.length;i++){
const f=parseCSVLine(lines[i]);
if(f.length<=pi) continue;
const v=parseFloat(f[pi]); if(isNaN(v)) continue;
if(di>=0&&f.length>di) dates.add(f[di]);
let slot=(i-1)%96;
if(ti>=0&&f.length>ti){const m=f[ti].match(/(\d{2}):(\d{2})/);if(m)slot=parseInt(m[1])*4+Math.floor(parseInt(m[2])/15);}
if(slot<0||slot>=96) continue;
slotSums[slot]+=(isMWh?v/1000:v); slotCounts[slot]++;
}
const prices=[];
for(let s=0;s<96;s++) prices.push(slotCounts[s]>0?slotSums[s]/slotCounts[s]:0);
for(let s=0;s<96;s++){if(slotCounts[s]>0)continue;let l=-1,r=-1;
for(let j=s-1;j>=0;j--)if(slotCounts[j]>0){l=j;break;}
for(let j=s+1;j<96;j++)if(slotCounts[j]>0){r=j;break;}
if(l>=0&&r>=0){const w=(s-l)/(r-l);prices[s]=prices[l]*(1-w)+prices[r]*w;}
else if(l>=0)prices[s]=prices[l];else if(r>=0)prices[s]=prices[r];
}
window._csvLoadedDate=dates.size>1?`avg of ${dates.size} days`:[...dates][0]||"_";
return prices;
}
return text.split(/[\s,;]+/).map(s=>s.trim()).filter(s=>s&&!isNaN(s)).map(Number);
}
async function loadPrices(target){
const text = document.getElementById("csvText").value;
const vals = parseCSVValues(text);
if(!vals.length){status.textContent="No valid numbers found";return;}
const hasMWh = /mwh/i.test(text.split(/\r?\n/)[0]||"");
await pyodide.runPythonAsync(`_vuwzl(${JSON.stringify(vals)}, "${target}")`);
const dateInfo = window._csvLoadedDate && window._csvLoadedDate!=="_" ? ` [${window._csvLoadedDate}]` : "";
status.textContent=`Loaded ${vals.length} values as ${target} prices${dateInfo}` + (hasMWh ? " (converted Rs/MWh -> Rs/kWh)" : "");
scheduleSolve();
}
document.getElementById("loadBuy").addEventListener("click",()=>loadPrices("buy"));
document.getElementById("loadSell").addEventListener("click",()=>loadPrices("sell"));
document.getElementById("csvFile").addEventListener("change",e=>{
const f=e.target.files[0]; if(!f)return;
f.text().then(t=>{document.getElementById("csvText").value=t;});
});
// Convergence chart: size canvas when details opens
document.querySelector("details:has(#plotConvergence)").addEventListener("toggle", async e => {
if (!e.target.open || !window.pyodide) return;
setTimeout(async () => {
try {
await pyodide.runPythonAsync(`
_cv = document.getElementById("plotConvergence")
if _cv:
_ctx = _cv.getContext("2d")
_cv.width, _cv.height = int(_cv.clientWidth * DPR), int(_cv.clientHeight * DPR)
plots["plotConvergence"] = _ctx
if _last_render:
_b, _s, _o, _l = _tvipc()
_sol = _ntdic(float(document.getElementById("solarPeak").value))
_dmcld(_last_render, _wzvua(_b, _s, _o, _sol, _zhgvs(), _l))
`);
} catch(e) { console.error(e); }
}, 50);
});
// Device chart view selector. Named so the initial <select> value can be
// applied on load -- a "change" listener alone would leave every card
// visible until the user first touched the dropdown.
function applyDeviceView() {
const val = document.getElementById("deviceView").value;
const cards = {
battery: document.getElementById("cardBattery"),
wh: document.getElementById("cardWH"),
ac: document.getElementById("cardAC"),
};
for (const [key, card] of Object.entries(cards)) {
if (val === "all" || val === key) {
card.style.display = "";
card.style.gridColumn = val === "all" ? "" : "1/-1";
} else {
card.style.display = "none";
}
}
// Re-size canvases when layout changes (width changes affect DPR scaling)
setTimeout(async () => {
if (!window.pyodide) return;
try {
await pyodide.runPythonAsync(`
for cid in ["plotBattery", "plotWH", "plotAC"]:
el = document.getElementById(cid)
if el:
ctx = el.getContext("2d")
nw, nh = int(el.clientWidth * DPR), int(el.clientHeight * DPR)
if nw > 0 and (nw != el.width or nh != el.height):
el.width, el.height = nw, nh
plots[cid] = ctx
# Also resize battery overlay
_ovl = document.getElementById("plotBattOverlay")
if _ovl:
_bat = document.getElementById("plotBattery")
_ovl.width, _ovl.height = _bat.width, _bat.height
_elapsed, _timing_detail = _bcwrv()
`);
} catch(e) { console.error(e); }
}, 50);
}
document.getElementById("deviceView").addEventListener("change", applyDeviceView);
applyDeviceView();
// Power flow legend toggles
document.querySelectorAll(".pw-toggle").forEach(el => {
el.addEventListener("click", async () => {
const trace = el.dataset.trace;
el.classList.toggle("off");
try {
await pyodide.runPythonAsync(`_hcujl("${trace}")`);
} catch(e) { console.error(e); }
});
});
// Mouse up on prices/battery chart triggers solve
document.getElementById("plotPrices").addEventListener("mouseup", scheduleSolve);
document.getElementById("plotBattery").addEventListener("mouseup", scheduleSolve);
document.getElementById("plotBattery").addEventListener("dblclick", scheduleSolve);
// Battery hover rollout
const battCanvas = document.getElementById("plotBattery");
battCanvas.addEventListener("mousemove", debounce(async ev => {
if (!pyodide.globals.get("batt_dp_ready")) return;
if (pyodide.globals.get("gate_drag")) return;
const r = battCanvas.getBoundingClientRect();
const x = (ev.clientX - r.left) / r.width;
const y = (ev.clientY - r.top) / r.height;
const cap = parseFloat(document.getElementById("battCap").value);
const t0 = Math.floor(x * pyodide.globals.get("STEPS"));
const s0 = (1 - y) * cap;
try {
await pyodide.runPythonAsync(`
_xs, _ys_soc, _ys_pow = _racxm(${t0}, ${s0}, ${cap}, 0)
_zmksh(_xs, _ys_soc, ${cap})
`);
const dp_ms = pyodide.globals.get("solve_elapsed");
const ro_ms = pyodide.globals.get("rollout_elapsed_time");
status.textContent = `Solve: ${dp_ms.toFixed(0)}ms | Rollout: ${ro_ms.toFixed(1)}ms`;
} catch(e) { console.error(e); }
}, 10));
battCanvas.addEventListener("mouseleave", async () => {
if (!pyodide.globals.get("batt_dp_ready")) return;
const cap = parseFloat(document.getElementById("battCap").value);
try { await pyodide.runPythonAsync(`_mynbi(${cap})`); } catch(e) {}
});
// Initial solve
status.textContent = "Running initial solve...";
await runSolve();
});
// --- Particle Flow Animation (battery SOC policy field) ---
const NPART = 300;
let flowParts = null, flowPol = null, flowOvl = null, flowCtx2 = null, flowAnim = null;
function flowInit(){
flowOvl = document.getElementById("plotBattOverlay");
const batt = document.getElementById("plotBattery");
flowOvl.width = batt.width; flowOvl.height = batt.height;
flowCtx2 = flowOvl.getContext('2d');
}
function flowSpawn(){ return {x:Math.random(), y:0.05+Math.random()*0.9, age:Math.floor(Math.random()*70), max:50+Math.floor(Math.random()*50)}; }
function flowCache(){
const pol=pyodide.globals.get("BATT_POL").toJs(), sg=pyodide.globals.get("BATT_S_GRID").toJs();
const steps=pyodide.globals.get("STEPS"), sres=pyodide.globals.get("BATT_N_S");
const cap=parseFloat(document.getElementById("battCap").value);
const flat=new Float64Array(steps*sres);
for(let t=0;t<steps;t++) for(let s=0;s<sres;s++) flat[t*sres+s]=pol[t][s];
flowPol={flat,steps,sres,smin:sg[0],smax:sg[sg.length-1],cap,hrs:steps*0.25};
}
function flowAction(x,y){
if(!flowPol)return 0;
const t=Math.min(flowPol.steps-1,Math.max(0,Math.floor(x*flowPol.steps)));
const si=y*(flowPol.sres-1), s0=Math.max(0,Math.min(flowPol.sres-2,Math.floor(si))), f=si-s0;
return flowPol.flat[t*flowPol.sres+s0]*(1-f)+flowPol.flat[t*flowPol.sres+s0+1]*f;
}
function flowFrame(){
if(!flowPol||!flowCtx2)return;
const dpr=window.devicePixelRatio||1, w=flowOvl.width, h=flowOvl.height;
const L=50*dpr, R=w-50*dpr, T=10*dpr, pH=h-30*dpr-T;
const{cap,smin,smax,hrs}=flowPol, sR=smax-smin, spd=0.003;
flowCtx2.globalCompositeOperation='destination-in';
flowCtx2.fillStyle='rgba(0,0,0,0.93)';
flowCtx2.fillRect(0,0,w,h);
flowCtx2.globalCompositeOperation='source-over';
flowCtx2.lineWidth=1.5*dpr;
for(const p of flowParts){
const a=flowAction(p.x,p.y), eff=a>0?a*0.9:a/0.9;
const px=p.x, py=p.y;
p.x+=spd; p.y+=eff*spd*hrs/sR; p.age++;
const x0=L+px*(R-L), x1=L+p.x*(R-L);
const s0v=smin+py*sR, s1v=smin+p.y*sR;
const y0=T+(1-s0v/cap)*pH, y1=T+(1-s1v/cap)*pH;
const fade=Math.max(0,1-p.age/p.max);
if(a>0.05) flowCtx2.strokeStyle=`rgba(100,200,255,${(fade*0.85).toFixed(2)})`;
else if(a<-0.05) flowCtx2.strokeStyle=`rgba(255,130,130,${(fade*0.85).toFixed(2)})`;
else flowCtx2.strokeStyle=`rgba(200,200,200,${(fade*0.12).toFixed(2)})`;
flowCtx2.beginPath(); flowCtx2.moveTo(x0,y0); flowCtx2.lineTo(x1,y1); flowCtx2.stroke();
if(p.x>1||p.y<0||p.y>1||p.age>p.max) Object.assign(p,flowSpawn());
}
flowAnim=requestAnimationFrame(flowFrame);
}
function flowStop(){
if(flowAnim){cancelAnimationFrame(flowAnim);flowAnim=null;}
if(flowCtx2&&flowOvl) flowCtx2.clearRect(0,0,flowOvl.width,flowOvl.height);
}
function flowStart(){
if(!document.getElementById("flowToggle").checked){flowStop();return;}
if(!pyodide.globals.get("batt_dp_ready")){return;}
if(!flowOvl) flowInit();
flowCache();
if(!flowParts){flowParts=[];for(let i=0;i<NPART;i++)flowParts.push(flowSpawn());}
if(flowAnim) cancelAnimationFrame(flowAnim);
flowFrame();
}
document.getElementById("flowToggle").addEventListener("change", ()=>{
if(document.getElementById("flowToggle").checked) flowStart();
else flowStop();
});
async function runSolve() {
try {
await pyodide.runPythonAsync(`
_elapsed, _timing_detail = _bcwrv()
`);
flowStart();
const elapsed = pyodide.globals.get("solve_elapsed");
const detail = pyodide.globals.get("_timing_detail");
status.textContent = `Coordinated solve: ${elapsed.toFixed(0)}ms (${detail})`;
} catch (e) {
status.textContent = "Solve error — see console";
console.error(e);
}
}
</script>
</body>
</html>