d
Dang Coffee Roaster
River Watch

API สาธารณะ (Open Data)

ข้อมูลระดับน้ำจุดนี้เปิดให้นำไปใช้ต่อได้ฟรี ไม่ต้องขอ API key ไม่ต้องล็อกอิน

เริ่มต้น

Base URL — https://flood.dangcoffeeroaster.com
ทุก endpoint เป็น GET ตอบกลับเป็น JSON (ยกเว้นที่ระบุว่าเป็นภาพหรือ CSV) เปิด CORS ให้ทุกโดเมน เรียกจากหน้าเว็บของคุณได้โดยตรง
ข้อมูลใหม่ทุก 30 นาที ดึงถี่กว่านั้นจะได้ค่าเดิม รบกวนทำ cache ฝั่งคุณ และเรียกไม่ถี่กว่าทุก 5 นาที
curl -s https://flood.dangcoffeeroaster.com/api/latest

# ย้อนหลัง 7 วันเป็น CSV
curl -s "https://flood.dangcoffeeroaster.com/api/readings.csv?hours=168" -o river.csv

รายการ endpoint

GET /api/station
ข้อมูลสถานี วิธีวัด เกณฑ์เฝ้าระวัง รอยน้ำท่วมในอดีต และสัญญาอนุญาต เรียกอันนี้ก่อนถ้าจะเอาค่าไปตีความ
GET /api/latest
ค่าล่าสุดหนึ่งรายการ พร้อมสถานะ แนวโน้ม และระยะถึงรอยน้ำท่วมที่ใกล้ที่สุด
GET /api/readingshours, limit
รายการค่าย้อนหลังตามช่วงเวลา เรียงจากเก่าไปใหม่
GET /api/readings.csvhours, limit
ข้อมูลชุดเดียวกันในรูปแบบ CSV สำหรับ Excel หรือเครื่องมือวิเคราะห์
GET /api/summaryhours
สรุปช่วงเวลา ต่ำสุด สูงสุด เฉลี่ย อัตราเปลี่ยนแปลงเป็น ซม./ชม. และจำนวนชั่วโมงที่คาดว่าจะถึงระดับเฝ้าระวังหรือวิกฤต
GET /api/reading/{id}
รายละเอียดของค่าหนึ่งรายการ รวมผลดิบจากตัวอ่าน
GET /api/frameshours
รายการภาพที่มีให้เล่นย้อนหลัง พร้อมเวลาและค่าระดับของแต่ละภาพ
GET /api/image/{id}
ภาพต้นฉบับจากกล้องของค่านั้น (JPEG)
GET /api/thumb/{id}.jpg
ภาพย่อ 480x360 โหลดเร็วกว่า
GET /api/overlay/{id}
ภาพเดียวกันที่วาดสเกลไม้วัดและเส้นผิวน้ำที่ตรวจจับได้ทับไว้ ใช้ตรวจสอบค่า
GET /card/{id}.png
การ์ดสรุปสำเร็จรูป เหมาะกับการแชร์ต่อ
GET /qr.png
QR code ของเว็บไซต์
GET /poster.png
ใบประกาศ A4 สำหรับพิมพ์แจก
GET /health
สถานะระบบ และเวลาที่เก็บข้อมูลล่าสุด
GET /openapi.json
สเปก OpenAPI ของทุก endpoint (หน้าเอกสารที่ /docs)
hours คือจำนวนชั่วโมงย้อนหลัง limit คือจำนวนรายการสูงสุด
ช่วงชั่วโมงแรกที่เปิดระบบใช้ตัวอ่านรุ่นทดลองซึ่งคลาดเคลื่อนหลายสิบเซนติเมตร ค่าเหล่านั้นถูกกรองออกให้โดยอัตโนมัติ หากต้องการดูด้วยให้ใส่ ?include_experimental=true

ตัวอย่างผลลัพธ์ /api/latest

{
  "id": 12,
  "captured_at": "2026-09-27T18:49:11+07:00",
  "level_m": 2.338,
  "method": "cv",
  "trend": "steady",
  "status": "ok",
  "confidence": 0.993,
  "spread_m": 0.002,
  "samples": 3,
  "thresholds": {"warn_m": 2.9, "alert_m": 3.05,
                 "flood_marks_m": {"2554": 3.92, "2553": 3.06, "2564": 2.98}},
  "next_flood_mark": {"year": "2564", "level_m": 2.98, "headroom_m": 0.642},
  "image_url": "/api/image/12",
  "overlay_url": "/api/overlay/12"
}
level_m คือระดับน้ำเป็นเมตรบนไม้วัดจุดนี้ · status เป็น ok / warn / alert · trend เป็น rising / falling / steady · confidence กับ spread_m บอกว่าภาพทั้งสามเฟรมอ่านตรงกันแค่ไหน
ถ้า level_m เป็น null แปลว่ารอบนั้นอ่านไม่ได้ และเหตุผลอยู่ในช่อง error ระบบจะไม่เดาค่าให้

ตัวอย่างโค้ด

JavaScript
const r = await fetch("https://flood.dangcoffeeroaster.com/api/latest").then(r => r.json());
console.log(r.level_m, r.status, r.trend);
Python
import urllib.request, json
url = "https://flood.dangcoffeeroaster.com/api/summary?hours=24"
data = json.load(urllib.request.urlopen(url))
print(data["max_m"], data["rate_cm_per_hour"], data["hours_to_warn"])

ข้อควรรู้ก่อนนำไปใช้

ค่าที่ได้คือระดับบนไม้วัดจุดนี้ ไม่ใช่ค่าอ้างอิงระดับทะเลปานกลาง จึงนำไปเทียบกับสถานีอื่นโดยตรงไม่ได้ เว้นแต่จะทราบค่าศูนย์ของไม้วัดนี้
อ่านด้วยคอมพิวเตอร์จากภาพกล้อง กลางคืนหรือตอนทัศนวิสัยไม่ดีอาจอ่านไม่ได้
ไม่ใช่ประกาศเตือนภัยทางการ หากนำไปแสดงต่อสาธารณะ กรุณาระบุข้อความนี้กำกับไว้ และแนะนำให้ผู้ใช้ยึดประกาศจากเทศบาล กรมชลประทาน และ ปภ. เป็นหลัก
สัญญาอนุญาต MIT ใช้ ดัดแปลง เผยแพร่ต่อได้ ขอให้อ้างอิงที่มาว่า https://flood.dangcoffeeroaster.com (อ่านสัญญาอนุญาต)

เอกสารอัตโนมัติ

Swagger UI · openapi.json · /api/station