POPNIX Floodข้อมูลเปิด

ข้อมูลเปิด POPNIX Flood Open data API

ระดับน้ำคลอง น้ำท่วมถนน แม่น้ำ และฝนของกรุงเทพฯ ชุดเดียวกับที่หน้าเว็บใช้ เป็น JSON อ่านอย่างเดียว ไม่ต้องสมัคร ไม่ต้องใช้ key

ทุกปลายทางอยู่ที่ https://flood.pop.in.th ใช้ GET ตอบ application/json; charset=utf-8 ข้อมูลเป็นของจุดวัดของหน่วยงานรัฐที่ POPNIX Flood นำมาจัดรูปแบบใหม่ ไม่ใช่ประกาศทางการ

Terms of useเงื่อนไขการใช้

Attributionการให้เครดิต

แสดงข้อความนี้ใกล้กับข้อมูลที่นำไปใช้ และลิงก์กลับมาที่ https://flood.pop.in.th

ข้อมูล: สำนักการระบายน้ำ กรุงเทพมหานคร ผ่าน POPNIX Flood (flood.pop.in.th)

Rate limits and cachingการจำกัดความถี่และ cache

รอบคำนวณใหม่บน server และ max-age (ข้อมูลปัจจุบัน / ย้อนหลังด้วย at=)
ปลายทางคำนวณใหม่ทุกmax-age
api_overview, api_roads30 วิ / 10 นาที60 / 300 วิ
api_history, api_series60 วิ / 10 นาที60 / 300 วิ
api_frames, api_roads?frames=12 นาที / 10 นาที120 / 600 วิ
api_river, api_rain, api_reports, api_live2 นาที, 5 นาที, 60 วิ, 30 วิตาม header

ต้นทางอัปเดต: คลองทุก 10 นาที, ถนนทุก 5 ถึง 10 นาที, แม่น้ำและฝนทุก 20 นาที ข้อมูลของ กทม. ตอบช้าหรือปฏิเสธเป็นช่วง ๆ ดูสถานะปัจจุบันได้ที่ สถานะแหล่งข้อมูล

CORSเรียกจากเว็บอื่นได้

ปลายทางอ่านอย่างเดียวทุกตัวส่ง Access-Control-Allow-Origin: * หน้าเว็บของคุณเรียกด้วย fetch() จากเบราว์เซอร์ได้ตรง ๆ (GET เท่านั้น ไม่ต้องส่ง cookie หรือ header พิเศษ) ถ้าเว็บมีผู้ชมมาก ให้ดึงผ่าน server ของคุณและ cache ไว้แทน เพราะการจำกัดความถี่นับต่อ IP

Common parameters and formatsพารามิเตอร์และรูปแบบที่ใช้ร่วมกัน

Endpointsปลายทางข้อมูล

GET /api_overview.phpระดับน้ำคลองทุกจุดวัด

พารามิเตอร์
ชื่อค่าความหมาย
w30, 60 (ค่าเริ่มต้น), 180, 360, 1440เทียบการเปลี่ยนแปลงกับกี่นาทีก่อน
atเวลาไทยดูย้อนหลัง

level: crit ถึงระดับวิกฤต, warn เกินระดับเฝ้าระวัง, ok ต่ำกว่าเกณฑ์เฝ้าระวัง, unk มีค่าแต่ไม่มีเกณฑ์ให้เทียบ, none ไม่มีค่า | trend: up, down, flat (เปลี่ยนไม่ถึง 2 ซม.), null ไม่มีค่าเทียบ | online: ส่งค่าภายใน 3 ชั่วโมง | spark: ระดับน้ำ 6 ชั่วโมงล่าสุด ไม่เกิน 24 จุด | summary.stale: ค่าล่าสุดเก่ากว่า 45 นาที | summary.scrape_failing: รอบล่าสุดที่ดึงจากต้นทางไม่สำเร็จ

ตัวอย่าง (ค่าสมมุติ ตัดให้สั้น)

{
  "window": 60, "at": null,
  "range": {"min": "2026-09-29 15:00:00", "max": "2026-09-30 14:20:00"},
  "summary": {
    "stations": 202, "online": 186, "offline": 16, "compared": 170,
    "up": 40, "down": 95, "flat": 35, "avg_delta": -0.012,
    "daily": {"up": 60, "down": 110, "flat": 10},
    "warn": 17, "crit": 51, "unk": 7, "latest": "2026-09-30 14:20:00",
    "tide": {"date": "2026-09-30", "high_am": {"t": "09:22", "v": 1.12}, "low_am": {"t": "03:54", "v": -0.53},
             "high_pm": {"t": "19:35", "v": 1.3}, "low_pm": {"t": "13:10", "v": 0.1}},
    "generated": "2026-09-30 14:24:05", "age_min": 4, "stale": false,
    "scraped": "2026-09-30 14:21:09", "scrape_failing": false
  },
  "stations": [
    {"id": 125, "name": "ค.พระยาสุเรนทร์ ถ.จตุโชติ", "river": "คลองพระยาสุเรนทร์",
     "lat": 13.87621, "lng": 100.68614, "warn": 1.0, "crit": 1.2, "bed": -1.0, "bank": 1.5,
     "wl": 1.55, "max_day": 1.56, "max_yday": 1.52, "measured_at": "2026-09-30 14:20:00",
     "online": true, "delta": 0.01, "trend": "flat", "level": "crit", "delta_day": 0.04,
     "spark": [1.5, 1.51, 1.52, 1.53, 1.54, 1.55]}
  ]
}

GET /api_history.php?id=125ระดับน้ำย้อนหลังของจุดวัดเดียว

id (จำเป็น) = stations[].id จาก api_overview, h = 24 (ค่าเริ่มต้น), 72, 168, 720 ชั่วโมง, at ดูย้อนหลัง ช่วงเกิน 72 ชั่วโมงเฉลี่ยเป็นช่วง ๆ และมี mx/mn สูงสุดต่ำสุดของช่วง

ตัวอย่าง (ค่าสมมุติ ตัดให้สั้น)

{"id": 125, "hours": 24, "points": [{"t": "2026-09-30 14:10:00", "wl": 1.54}, {"t": "2026-09-30 14:20:00", "wl": 1.55}]}

GET /api_series.phpภาพรวมย้อนหลังของทั้งเมือง

h = 24, 72, 168, 720 ชั่วโมง ต่อช่วงเวลา (bucket วินาที): ระดับน้ำเฉลี่ย จำนวนจุดที่ส่งค่า และจำนวนจุดที่เกินเกณฑ์

ตัวอย่าง (ค่าสมมุติ ตัดให้สั้น)

{"bucket": 600, "rows": [{"t": "2026-09-30 14:10:00", "avg_wl": 0.412, "n": 181, "over_warn": 61, "over_crit": 44}]}

GET /api_frames.phpเฟรมเล่นย้อนหลังรายจุดวัด

h = 24, 72, 168 ชั่วโมง เฟรมที่ i คือเวลา t0 + i × step วินาที, null = ช่วงนั้นไม่มีค่า

ตัวอย่าง (ค่าสมมุติ ตัดให้สั้น)

{"step": 600, "t0": "2026-09-29 14:20:00", "n": 145, "st": {"125": [1.41, null, 1.42], "51": [0.62, 0.62, 0.63]}}

GET /api_roads.phpน้ำท่วมถนนและอุโมงค์ทุกจุดวัด

at ดูย้อนหลัง, frames=1 = เฟรมย้อนหลัง 24 ชั่วโมงรูปแบบเดียวกับ api_frames (key เป็น code ค่าคือความลึกสูงสุดของช่วง)

level: flood ลึกเกิน 10 ซม., slight 5 ถึง 10 ซม., dry ไม่เกิน 5 ซม., off ขัดข้องหรือปิดปรับปรุง (ไม่ส่งค่าเกิน 30 นาที) | kind: 1 ถนน, 2 อุโมงค์ | grp 2 = ชุดที่วัดเป็นขั้น 5 ซม. ได้สูงสุด 20 ซม. ค่า 20 ของชุดนี้หมายถึง อย่างน้อย 20 ซม. | since: เริ่มท่วมเมื่อไร | district: เขตตามข้อมูลของ กทม.

ตัวอย่าง (ค่าสมมุติ ตัดให้สั้น)

{
  "summary": {"latest": "2026-09-30 14:25:00", "total": 247, "flood": 16, "slight": 6, "dry": 212, "off": 13,
              "generated": "2026-09-30 14:26:40", "age_min": 1, "stale": false,
              "scraped": "2026-09-30 14:25:05", "scrape_failing": false},
  "roads": [
    {"code": "FL.MBR.02", "kind": 1, "grp": 1, "name": "ถ.สุวินทวงศ์ (ถ.หทัยราษฎร์)", "road": "ถนนสุวินทวงศ์",
     "district": "มีนบุรี", "dir": null, "lat": 13.81, "lng": 100.73, "msg_fail": null,
     "depth": 20, "measured_at": "2026-09-30 14:25:00", "flood_max": 22,
     "level": "flood", "delta": 0, "since": "2026-09-30 11:20:00"}
  ]
}

GET /api_river.phpแม่น้ำเจ้าพระยาจากนครสวรรค์ถึงกรุงเทพฯ

flows = อัตราการไหล (ลบ.ม./วินาที) ความเร็วกระแสน้ำและพื้นที่หน้าตัดที่จุดวัดของ กทม. (สะพานพระราม 8 บนแม่น้ำเจ้าพระยาก่อน ตามด้วยจุดในคลอง) | at ดูย้อนหลัง สถานีเรียงจากเหนือลงใต้ (order) | diff = ระดับน้ำลบตลิ่ง (ติดลบ = ต่ำกว่าตลิ่ง) | trend เทียบราว 1 ชั่วโมงก่อน (±2 ซม.) | spark รายชั่วโมง 24 ค่า เก่าไปใหม่ | ข้อมูล สสน. และ กทม.

ตัวอย่าง (ค่าสมมุติ ตัดให้สั้น)

{
  "summary": {"latest": "2026-09-30 14:00:00", "age_min": 26, "stale": false, "count": 18,
              "worst": {"code": "1234", "name": "สถานีตัวอย่าง", "diff": -0.42}, "scraped": "2026-09-30 14:09:30", "scrape_failing": false},
  "stations": [
    {"code": "1234", "name": "สถานีตัวอย่าง", "name_en": "Example", "agency": "สสน.", "basin": "เจ้าพระยา", "river": "แม่น้ำเจ้าพระยา",
     "lat": 13.75, "lng": 100.49, "order": 12, "wl": 1.58, "bank": 2.0, "diff": -0.42, "ground": -6.0,
     "measured_at": "2026-09-30 14:00:00", "online": true, "delta": 0.03, "trend": "up", "situation": 4, "flow": null,
     "spark": [1.2, 1.25, 1.31, null, 1.58]}
  ],
  "notes": {"dam_release": null}
}

GET /api_rain.phpปริมาณฝนรอบกรุงเทพฯ

at ดูย้อนหลัง | r1h, r3h, r24h = ฝนสะสม 1, 3, 24 ชั่วโมง (มม.) | summary.raining = จำนวนสถานีที่มีฝนตอนนี้ | ข้อมูล สสน. และสถานีวัดฝน 122 สถานีของ กทม. (code ขึ้นต้น bma:, agency = กทม.)

ตัวอย่าง (ค่าสมมุติ ตัดให้สั้น)

{
  "summary": {"latest": "2026-09-30 14:00:00", "age_min": 26, "stale": false, "count": 64,
              "max1h": {"name": "สถานีตัวอย่าง", "v": 12.5}, "max24h": {"name": "สถานีตัวอย่าง", "v": 48.0}, "raining": 9},
  "stations": [
    {"code": "5678", "name": "สถานีตัวอย่าง", "district": "มีนบุรี", "agency": "สสน.", "lat": 13.81, "lng": 100.73,
     "measured_at": "2026-09-30 14:00:00", "r1h": 12.5, "r3h": 20.0, "r24h": 48.0, "online": true}
  ]
}

GET /api_reports.phpรายงานน้ำท่วมจากผู้ใช้ (ยังไม่ได้ตรวจสอบ)

รวมรายงานจากผู้ใช้เป็นช่องพื้นที่ แสดงรายงานไม่เกิน ttl_min นาที | depth: 0 ผู้รายงานบอกว่าแห้ง, 1 ระดับข้อเท้า (ไม่เกิน 10 ซม.), 2 ครึ่งน่อง (10 ถึง 25 ซม.), 3 ระดับเข่า (25 ถึง 50 ซม.), 4 ระดับเอวขึ้นไป (เกิน 50 ซม.) | n จำนวนรายงาน, last เวลาของรายงานล่าสุด, unconfirmed ยังไม่ได้รับการยืนยัน | เป็นคำบอกเล่าของผู้ใช้ ไม่ใช่ค่าจากเครื่องวัด

ตัวอย่าง (ค่าสมมุติ ตัดให้สั้น)

{"at": null, "generated": "2026-09-30 14:26:00", "ttl_min": 180, "cells": [{"cell": "2763:20147", "lat": 13.8175, "lng": 100.7375, "depth": 2, "n": 3, "last": "2026-09-30 14:05:00", "unconfirmed": false, "district": "มีนบุรี"}]}

GET /api_live.phpจำนวนผู้เปิดหน้าเว็บตอนนี้และสิ่งที่ดูมากที่สุด

online = หน้าที่ยังเปิดอยู่ใน 2 นาทีล่าสุด | top[].kind: station, camera, road พร้อม id และจำนวนผู้เปิดดูใน 15 นาที n (แสดงเมื่อมีอย่างน้อย 3 คน) | change = จำนวนจุดวัดคลองที่ดีขึ้น/แย่ลง และจุดวัดถนนที่แห้ง/มีน้ำ เทียบ h ชั่วโมงก่อน (null เมื่อข้อมูลไม่สด)

ตัวอย่าง (ค่าสมมุติ ตัดให้สั้น)

{"generated": "2026-09-30 14:26:10", "online": 42, "top": [{"kind": "station", "id": "125", "n": 7}], "change": {"h": 6, "since": "2026-09-30 08:20:00", "canal_better": 3, "canal_worse": 1, "road_dry": 2, "road_wet": 0}}

Embed cardฝังการ์ดสรุปในเว็บของคุณ

การ์ดเล็กสำหรับเว็บข่าว คอนโด และเพจชุมชน ขนาด 320 x 420 ขึ้นไป ยืดเต็มความกว้างกรอบได้ รีเฟรชเองทุก 5 นาที ลิงก์ในการ์ดเปิด flood.pop.in.th ในแท็บใหม่ ไม่มีโฆษณา

<iframe src="https://flood.pop.in.th/embed/?d=min-buri" width="320" height="420" style="border:0;border-radius:16px;max-width:100%" loading="lazy" title="ระดับน้ำ เขตมีนบุรี จาก POPNIX Flood"></iframe>
slug ของทั้ง 50 เขต
ชื่อเขตและ slug
เขตEnglishslug
คลองเตยKhlong Toeikhlong-toei
คลองสานKhlong Sankhlong-san
คลองสามวาKhlong Sam Wakhlong-sam-wa
คันนายาวKhan Na Yaokhan-na-yao
จตุจักรChatuchakchatuchak
จอมทองChom Thongchom-thong
ดอนเมืองDon Mueangdon-mueang
ดินแดงDin Daengdin-daeng
ดุสิตDusitdusit
ตลิ่งชันTaling Chantaling-chan
ทวีวัฒนาThawi Watthanathawi-watthana
ทุ่งครุThung Khruthung-khru
ธนบุรีThon Burithon-buri
บางกอกน้อยBangkok Noibangkok-noi
บางกอกใหญ่Bangkok Yaibangkok-yai
บางกะปิBang Kapibang-kapi
บางขุนเทียนBang Khun Thianbang-khun-thian
บางเขนBang Khenbang-khen
บางคอแหลมBang Kho Laembang-kho-laem
บางแคBang Khaebang-khae
บางซื่อBang Suebang-sue
บางนาBang Nabang-na
บางบอนBang Bonbang-bon
บางพลัดBang Phlatbang-phlat
บางรักBang Rakbang-rak
บึงกุ่มBueng Kumbueng-kum
ปทุมวันPathum Wanpathum-wan
ประเวศPrawetprawet
ป้อมปราบศัตรูพ่ายPom Prap Sattru Phaipom-prap-sattru-phai
พญาไทPhaya Thaiphaya-thai
พระโขนงPhra Khanongphra-khanong
พระนครPhra Nakhonphra-nakhon
ภาษีเจริญPhasi Charoenphasi-charoen
มีนบุรีMin Burimin-buri
ยานนาวาYan Nawayan-nawa
ราชเทวีRatchathewiratchathewi
ราษฎร์บูรณะRat Buranarat-burana
ลาดกระบังLat Krabanglat-krabang
ลาดพร้าวLat Phraolat-phrao
วังทองหลางWang Thonglangwang-thonglang
วัฒนาVadhanavadhana
สวนหลวงSuan Luangsuan-luang
สะพานสูงSaphan Sungsaphan-sung
สัมพันธวงศ์Samphanthawongsamphanthawong
สาทรSathonsathon
สายไหมSai Maisai-mai
หนองแขมNong Khaemnong-khaem
หนองจอกNong Choknong-chok
หลักสี่Lak Silak-si
ห้วยขวางHuai Khwanghuai-khwang

MCP serverให้ผู้ช่วย AI ตอบเรื่องน้ำท่วมจากข้อมูลจริง

ผู้ช่วย AI ที่รองรับ Model Context Protocol (เช่น Claude) ต่อเข้ามาถามระดับน้ำจากข้อมูลชุดเดียวกับหน้าเว็บได้ คำตอบเป็นภาษาไทยพร้อมตัวเลขและเวลาของข้อมูล และมีตัวเลขดิบใน structuredContent

เครื่องมือ (tools)
ชื่อตอบอะไร
flood_overviewภาพรวมทั้งกรุงเทพฯ: คลองวิกฤต/เฝ้าระวัง น้ำกำลังขึ้นหรือลด ถนนน้ำท่วม และถนนที่น้ำลึกที่สุด
flood_district(name)สรุปรายเขต รับชื่อไทย อังกฤษ หรือ slug
flood_near(lat, lng)จุดวัดคลอง 5 จุดและจุดวัดถนน 3 จุดที่ใกล้พิกัดที่สุด พร้อมระยะทาง (lat 13.4 ถึง 14.2, lng 100.1 ถึง 101.1)
flood_search(query)ค้นเขต จุดวัดคลอง และจุดวัดถนนจากชื่อ
flood_river()แม่น้ำเจ้าพระยาเทียบตลิ่ง (เมื่อมีข้อมูลแม่น้ำแล้ว)

Claude Code:

claude mcp add --transport http popnix-flood https://flood.pop.in.th/api_mcp.php

ไฟล์ตั้งค่าแบบ mcpServers (Claude Code .mcp.json และโปรแกรมอื่นที่รองรับเซิร์ฟเวอร์ระยะไกลแบบ HTTP) ส่วน Claude บนเว็บและแอปเพิ่มเป็น custom connector ด้วย URL เดียวกัน

{
  "mcpServers": {
    "popnix-flood": {"type": "http", "url": "https://flood.pop.in.th/api_mcp.php"}
  }
}

ลองเรียกด้วย curl:

curl -s https://flood.pop.in.th/api_mcp.php -H 'Content-Type: application/json' -H 'Accept: application/json, text/event-stream' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"flood_district","arguments":{"name":"มีนบุรี"}}}'

llms.txtสรุปเว็บนี้สำหรับโมเดลภาษา

/llms.txt สรุปว่าเว็บนี้คืออะไร ข้อมูลมาจากไหน ปลายทาง API และ MCP และข้อควรระวังในการตีความ ตามรูปแบบของ llmstxt.org