diff --git a/docs/DATA_SOURCES.md b/docs/DATA_SOURCES.md index 1ebb381..a98b058 100644 --- a/docs/DATA_SOURCES.md +++ b/docs/DATA_SOURCES.md @@ -185,6 +185,13 @@ Oct 2024 flood). Mae Kuang Udom Thara is the second upstream reservoir. |---|---|---| | `https://app.rid.go.th/reservoir/api/dams` | **INGESTED** — daily snapshot of all ~35 large dams (storage/inflow/outflow MCM, % of usable). `POST` with form field `date=YYYY-MM-DD` (empty = today); GET returns 404 "Unknown method." Archive ≥ 2009; `level_msl` (`DMD_Q`) populated in older years only. Mae Ngat = `DAM_ID 200103` — hit 113% usable capacity, ~19 MCM/day inflow, in Oct 2024. Collected daily by `src/rid_reservoir.py` into `rid_dams` + `rid_reservoir_daily`; backfill via `scripts/backfill_rid_reservoir.py` | Open, no auth | | `https://lsim.rid.go.th/ForeCast?reservoirid=22` | Mae Ngat daily status/forecast (RID) | **UNREACHABLE — do not plan around it.** Probed 2026-08-13 from a Thai consumer ISP (AIS Fibre, TH) *and* from abroad: DNS resolves (122.154.18.207) but ICMP is 100% loss and ports 80/443/8080 are filtered, while `app.rid.go.th` answers in 0.27 s over the same connection. Down or RID-internal-only — not a geo-block | +| `https://app.rid.go.th/reservoir/api/dam` | **Per-dam daily series in ONE request** — `GET` with `dam_id=200103&date_start=YYYY-MM-DD&date_end=YYYY-MM-DD&percent=`. Archive to 2009 (scattered single-day gaps). Far cheaper than the per-day `api/dams` loop the backfill used (one request vs ~2,900); prefer it for gap repair and for adding other dams. Sibling `api/damgraph` takes the same params | Open, no auth | +| `https://bigdata-api.rid.go.th` (SWOC) | **Intraday reservoir state** — RID SWOC telemetry, hourly with an explicit `hourly_time_utc` stamp; includes Mae Ngat (`TUP.16`) reservoir level m MSL and % capacity. **Snapshot-only — no archive**, so it can only be accumulated forward | Open, no auth | +| ThaiWater `public/waterlevel_load` stations `ridhydro_TUP.16` (at the dam) / `ridhydro_TUP.11` (dam outlet) | Hourly Mae Ngat reservoir level and outlet stage/flow. **Snapshot-only — `waterlevel_graph` returns empty grids for these ids at every era** (verified 2026-08-13). Collected hourly by our HII collector since 2026-08-11; accumulating forward | Open, no auth | +| ThaiWater `public/waterlevel_graph` station `P.75` (id 3253) | **The practical dam-release signal**: hourly stage+discharge 3.8 km below the Mae Ngat dam, history to 2019. Already ingested as a core RID station and a model feature since v1 | Open, no auth | +| ThaiWater `public/waterlevel_graph` station `MOU301` "สะพานน้ำแม่งัด" (id 1475118) | 10-minute stage on the Mae Ngat *above* the reservoir (inflow arm). History only from ~mid-2025; level only, no discharge | Open, no auth | +| ThaiWater `api-v3 .../analyst/dam` (dam.id 53) | EGAT-sourced copy of Mae Ngat carrying reservoir **level in m MSL historically** — the field RID's own API stopped populating (`DMD_Q`) after ~2013. Daily, no observation time | Open, no auth | +| `https://tiwrm.hii.or.th/DATA/REPORT/php/rid_bigcm_raw.php?sdate=YYYY-MM-DD` | HII HTML mirror of the RID large-dam daily table. Daily and *intermittent* (2026 YTD publishes ~108 of 225 days) — a cross-check, not a primary source | Open, no auth | | `https://water.egat.co.th` | EGAT dams (Bhumibol/Sirikit) hourly+daily inflow/outflow/level | Endpoint catalog not public; contact EGAT (0-2436-8186). Only relevant downstream of Bhumibol | | ThaiWater `/v2/large-dam/*`, `dam_rulecurve/graph` | All large/medium dams incl. hourly | Requires HII API key (§2.2) | diff --git a/docs/FLOOD_FORECASTING.md b/docs/FLOOD_FORECASTING.md index 4848250..3ee2765 100644 --- a/docs/FLOOD_FORECASTING.md +++ b/docs/FLOOD_FORECASTING.md @@ -509,10 +509,28 @@ event-peak amplitude (−0.11 → −0.03 m on the Sep 2024 event), and `rise_da opt-in via `--dam` on the training CLI, `scripts/backtest_render.py --dam`, and the `rise_rain_dam` / `rise_dam` harness variants). The collector keeps accruing daily rows; revisit post-monsoon when the 2026 season adds dam-era -flood events. Removing the publication-lag objection needs an *intraday* -reservoir source; the obvious candidate, `lsim.rid.go.th`, is unreachable -even from a Thai consumer ISP (see `docs/DATA_SOURCES.md`), so that remains -an open search. +flood events. + +**Why the lag is probably not the whole story — P.75 already *is* the dam +signal.** A 2026-08-13 source sweep put the negative result on firmer +ground: **P.75 "บ้านช่อแล" sits 3.8 km downstream of the Mae Ngat dam** on +the Mae Ngat river (nearest other station: P.4A at 10.9 km), it reports +hourly, and it has been a model input since v1 with a 12 h routed lead into +P.1. Whatever the reservoir releases flows past P.75 within the hour and the +model already reads it. The daily reservoir table therefore offers a stale, +coarser proxy of a signal the features capture hourly and directly — which +is the more likely reason it adds nothing and costs alarm responsiveness. + +That reframes what a future intraday source would have to beat: not "no dam +information", but "hourly observed dam *outflow*". Genuine intraday +reservoir-state feeds do exist and are open (`bigdata-api.rid.go.th` SWOC +telemetry, and ThaiWater station `ridhydro_TUP.16` *at the dam*), but both +are **snapshot-only — no archive** (verified: the history endpoint returns +empty grids for them at every era, including the current one). They can only +be accumulated forward, so they cannot retrain against 2024/2025 events. +The HII collector already captures both hourly as of 2026-08-11; revisit +after the 2026 monsoon, when a season of true intraday reservoir state +exists alongside its flood events. **Shipped from the same work:** the HII gap-fill merge in the data loader (`fill_from_hii`, +9,341 h at P.81, +682 h at P.92, +810 h at P.20) is