improved charts and baro pressure data
This commit is contained in:
@@ -163,6 +163,13 @@ function computeRange(range, tz) {
|
||||
axisEnd = end;
|
||||
break;
|
||||
}
|
||||
case "72h-last": {
|
||||
end = now;
|
||||
start = new Date(now.getTime() - 72 * 60 * 60 * 1000);
|
||||
axisStart = start;
|
||||
axisEnd = end;
|
||||
break;
|
||||
}
|
||||
case "72h": {
|
||||
end = startOfDay(now, tz);
|
||||
start = new Date(end.getTime() - 72 * 60 * 60 * 1000);
|
||||
@@ -170,6 +177,13 @@ function computeRange(range, tz) {
|
||||
axisEnd = end;
|
||||
break;
|
||||
}
|
||||
case "7d-last": {
|
||||
end = now;
|
||||
start = new Date(now.getTime() - 7 * 24 * 60 * 60 * 1000);
|
||||
axisStart = start;
|
||||
axisEnd = end;
|
||||
break;
|
||||
}
|
||||
case "7d": {
|
||||
start = startOfWeekSunday(now, tz);
|
||||
end = new Date(start.getTime() + 7 * 24 * 60 * 60 * 1000);
|
||||
@@ -289,6 +303,58 @@ function updateText(id, text) {
|
||||
if (el) el.textContent = text;
|
||||
}
|
||||
|
||||
function describeBarometer(pressure, trend) {
|
||||
if (pressure === null || pressure === undefined) {
|
||||
return "No barometer data yet.";
|
||||
}
|
||||
|
||||
let pressureLabel = "normal";
|
||||
if (pressure <= 1000) {
|
||||
pressureLabel = "very low";
|
||||
} else if (pressure < 1008) {
|
||||
pressureLabel = "low";
|
||||
} else if (pressure >= 1024) {
|
||||
pressureLabel = "high";
|
||||
}
|
||||
|
||||
let trendLabel = "steady";
|
||||
if (trend !== null && trend !== undefined) {
|
||||
if (trend <= -2.0) {
|
||||
trendLabel = "falling fast";
|
||||
} else if (trend <= -0.5) {
|
||||
trendLabel = "falling";
|
||||
} else if (trend >= 2.0) {
|
||||
trendLabel = "rising fast";
|
||||
} else if (trend >= 0.5) {
|
||||
trendLabel = "rising";
|
||||
}
|
||||
}
|
||||
|
||||
let outlook = "Stable; no strong rain signal.";
|
||||
if (trend !== null && trend !== undefined) {
|
||||
if (trend <= -1.0 && pressure <= 1008) {
|
||||
outlook = "Unsettled; rain more likely.";
|
||||
} else if (trend <= -1.0) {
|
||||
outlook = "Unsettled; rain possible.";
|
||||
} else if (trend >= 1.0 && pressure >= 1020) {
|
||||
outlook = "Improving; rain less likely.";
|
||||
} else if (trend >= 1.0) {
|
||||
outlook = "Improving; rain chance easing.";
|
||||
}
|
||||
} else if (pressure <= 1005) {
|
||||
outlook = "Low pressure; rain possible.";
|
||||
} else if (pressure >= 1022) {
|
||||
outlook = "Fair weather likely.";
|
||||
}
|
||||
|
||||
if (trend === null || trend === undefined) {
|
||||
return `Pressure ${formatNumber(pressure, 1)} hPa (${pressureLabel}); trend unavailable. ${outlook}`;
|
||||
}
|
||||
|
||||
const trendText = `${trend >= 0 ? "+" : ""}${trend.toFixed(1)} hPa/hr`;
|
||||
return `Pressure ${formatNumber(pressure, 1)} hPa (${pressureLabel}), ${trendLabel} (${trendText}). ${outlook}`;
|
||||
}
|
||||
|
||||
function lastNonNull(points, key) {
|
||||
for (let i = points.length - 1; i >= 0; i -= 1) {
|
||||
const v = points[i][key];
|
||||
@@ -461,6 +527,7 @@ function renderDashboard(data) {
|
||||
} else {
|
||||
updateText("live-rain-prob", "--");
|
||||
}
|
||||
updateText("baro-outlook", describeBarometer(latest ? latest.pressure_hpa : null, lastPressureTrend));
|
||||
|
||||
const obsTemps = obsFiltered.map((p) => p.temp_c);
|
||||
const obsWinds = obsFiltered.map((p) => p.wind_m_s);
|
||||
|
||||
Reference in New Issue
Block a user