diff --git a/cmd/ingestd/web/app.js b/cmd/ingestd/web/app.js index 7ef4313..83dea8f 100644 --- a/cmd/ingestd/web/app.js +++ b/cmd/ingestd/web/app.js @@ -101,6 +101,7 @@ function computeRainIncrements(points) { if (prev !== null) { delta = p.rain_mm - prev; if (delta < 0) delta = 0; + if (delta < 0.1) delta = 0; } prev = p.rain_mm; out.push({ x: t, y: delta }); @@ -118,7 +119,17 @@ function computeHourlySums(points, tz) { } return Array.from(buckets.entries()) .sort((a, b) => a[0] - b[0]) - .map(([x, y]) => ({ x, y })); + .map(([x, y]) => ({ x, y: y < 0.1 ? 0 : y })); +} + +function clampRainSeries(points, key) { + return points.map((p) => { + const v = p[key]; + if (v == null) { + return { ...p }; + } + return { ...p, [key]: v < 0.1 ? 0 : v }; + }); } function startOfDay(date, tz) { @@ -754,11 +765,14 @@ function renderDashboard(data) { const rainIncs = computeRainIncrements(obsFiltered); const rainHourly = computeHourlySums(rainIncs, state.tz); + const latestRainHour = rainHourly.length ? rainHourly[rainHourly.length - 1].y : null; + updateText("live-rain-hour", latestRainHour == null ? "--" : `${formatNumber(latestRainHour, 2)} mm`); const rainTitle = document.getElementById("chart-rain-title"); if (rainTitle) { rainTitle.textContent = "Rain (obs hourly sum vs forecast)"; } + const forecastRain = clampRainSeries(forecastLine, "precip_mm"); const rainChart = { data: { datasets: [ @@ -772,7 +786,7 @@ function renderDashboard(data) { { type: "bar", label: "forecast precip (mm)", - data: series(forecast, "precip_mm"), + data: series(forecastRain, "precip_mm"), backgroundColor: colors.forecast, yAxisID: "y", }, diff --git a/cmd/ingestd/web/index.html b/cmd/ingestd/web/index.html index 56c5513..fc928d3 100644 --- a/cmd/ingestd/web/index.html +++ b/cmd/ingestd/web/index.html @@ -66,6 +66,10 @@
Rain 1h %
--
+
+
Rain hour mm
+
--
+
Wind m/s
--