fix 6 hr charts

This commit is contained in:
2026-02-04 11:53:14 +11:00
parent 3289c53b83
commit ffeeb1a835

View File

@@ -409,6 +409,26 @@ function computeRainProbability(latest, pressureTrend1h) {
return { prob, label }; return { prob, label };
} }
function extendForecastTo(points, endTime) {
if (!points || !points.length || !endTime) {
return points;
}
const last = points[points.length - 1];
const lastTs = new Date(last.ts).getTime();
if (Number.isNaN(lastTs)) {
return points;
}
const endTs = endTime.getTime();
if (endTs <= lastTs) {
return points;
}
const maxGapMs = 75 * 60 * 1000;
if (endTs-lastTs > maxGapMs) {
return points;
}
return [...points, { ...last, ts: new Date(endTs).toISOString() }];
}
function updateSiteMeta(site, model, tzLabel) { function updateSiteMeta(site, model, tzLabel) {
const home = document.getElementById("site-home"); const home = document.getElementById("site-home");
const suffix = document.getElementById("site-meta-suffix"); const suffix = document.getElementById("site-meta-suffix");
@@ -520,6 +540,7 @@ function renderDashboard(data) {
const obsFiltered = filterRange(obs, rangeStart, rangeEnd); const obsFiltered = filterRange(obs, rangeStart, rangeEnd);
const forecast = filterRange(forecastAll, rangeStart, rangeEnd); const forecast = filterRange(forecastAll, rangeStart, rangeEnd);
const forecastLine = extendForecastTo(forecast, rangeEnd);
const lastPressureTrend = lastNonNull(obsFiltered, "pressure_trend_1h"); const lastPressureTrend = lastNonNull(obsFiltered, "pressure_trend_1h");
const rainProb = computeRainProbability(latest, lastPressureTrend); const rainProb = computeRainProbability(latest, lastPressureTrend);
if (rainProb) { if (rainProb) {
@@ -581,7 +602,7 @@ function renderDashboard(data) {
data: { data: {
datasets: [ datasets: [
{ label: "obs temp C", data: series(obsFiltered, "temp_c"), borderColor: colors.obs }, { label: "obs temp C", data: series(obsFiltered, "temp_c"), borderColor: colors.obs },
{ label: "forecast temp C", data: series(forecast, "temp_c"), borderColor: colors.forecast }, { label: "forecast temp C", data: series(forecastLine, "temp_c"), borderColor: colors.forecast },
], ],
}, },
options: baseOptions(range), options: baseOptions(range),
@@ -594,8 +615,8 @@ function renderDashboard(data) {
datasets: [ datasets: [
{ label: "obs wind m/s", data: series(obsFiltered, "wind_m_s"), borderColor: colors.obs }, { label: "obs wind m/s", data: series(obsFiltered, "wind_m_s"), borderColor: colors.obs },
{ label: "obs gust m/s", data: series(obsFiltered, "wind_gust_m_s"), borderColor: colors.gust }, { label: "obs gust m/s", data: series(obsFiltered, "wind_gust_m_s"), borderColor: colors.gust },
{ label: "forecast wind m/s", data: series(forecast, "wind_m_s"), borderColor: colors.forecast }, { label: "forecast wind m/s", data: series(forecastLine, "wind_m_s"), borderColor: colors.forecast },
{ label: "forecast gust m/s", data: series(forecast, "wind_gust_m_s"), borderColor: "#f7d79f" }, { label: "forecast gust m/s", data: series(forecastLine, "wind_gust_m_s"), borderColor: "#f7d79f" },
], ],
}, },
options: baseOptions(range), options: baseOptions(range),
@@ -607,7 +628,7 @@ function renderDashboard(data) {
data: { data: {
datasets: [ datasets: [
{ label: "obs humidity %", data: series(obsFiltered, "rh"), borderColor: colors.humidity }, { label: "obs humidity %", data: series(obsFiltered, "rh"), borderColor: colors.humidity },
{ label: "forecast rh %", data: series(forecast, "rh"), borderColor: colors.forecast }, { label: "forecast rh %", data: series(forecastLine, "rh"), borderColor: colors.forecast },
], ],
}, },
options: baseOptions(range), options: baseOptions(range),
@@ -619,7 +640,7 @@ function renderDashboard(data) {
data: { data: {
datasets: [ datasets: [
{ label: "obs pressure hPa", data: series(obsFiltered, "pressure_hpa"), borderColor: colors.pressure }, { label: "obs pressure hPa", data: series(obsFiltered, "pressure_hpa"), borderColor: colors.pressure },
{ label: "forecast msl hPa", data: series(forecast, "pressure_msl_hpa"), borderColor: colors.forecast }, { label: "forecast msl hPa", data: series(forecastLine, "pressure_msl_hpa"), borderColor: colors.forecast },
], ],
}, },
options: baseOptions(range), options: baseOptions(range),