fix(strommix): discard SMARD snapshot when aligned timestamp >90 min stale
Deploy / verify (push) Successful in 48s
Deploy / deploy (push) Successful in 49s

When SMARD's load filter (id 410) lags 12+ hours, the aligned-min
strategy in fetchSmardSnapshot produces a snapshot stamped with that
12-hour-old timestamp — and the widget surfaces it as the live "Stand
HH:MM" header. With Energy-Charts already returning fresher numbers
through the CMS path, falling back entirely is the right move.

Threshold is 90 min: tight enough to catch obvious lag, loose enough
to keep normal 30–60 min SMARD delay as the canonical source.
This commit is contained in:
Peter Meier
2026-05-05 00:06:11 +02:00
parent 9ebca1c237
commit 0d13e85639
+12 -1
View File
@@ -127,7 +127,7 @@ async function fetchPriceAtNow(
}
export const GET: RequestHandler = async ({ fetch }) => {
const [smard, energyCharts, cross, priceDe, priceFr] = await Promise.all([
const [smardRaw, energyCharts, cross, priceDe, priceFr] = await Promise.all([
fetchSmardSnapshot(fetch),
// Energy-Charts via the CMS — used as per-field fallback when SMARD
// returns null for a specific filter (notably load 410 when SMARD's
@@ -138,6 +138,17 @@ export const GET: RequestHandler = async ({ fetch }) => {
fetchPriceAtNow("FR", fetch),
]);
// SMARD aligned-min picks the earliest "latest" across filters. If
// one filter (typically load 410) lags 12+ hours, the snapshot ends
// up labelled with a stale timestamp like "12:15 Uhr morgens" while
// newer Energy-Charts data is right there. Discard the SMARD snapshot
// when it is older than 90 min so the aggregator falls back to
// Energy-Charts entirely. 90 min lets typical 3060 min SMARD lag
// still win.
const nowSec = Math.floor(Date.now() / 1000);
const smard =
smardRaw && nowSec - smardRaw.measuredAtUnix < 90 * 60 ? smardRaw : null;
const ec = energyCharts.data ?? {};
// Per-field fallback. SMARD value `null` = filter unavailable; we