การส่งข้อมูลผ่าน HTTPS

อุปกรณ์บางประเภทสามารถส่งข้อมูลผ่าน HTTPS แทน MQTT ได้ เหมาะสำหรับอุปกรณ์ที่ส่งข้อมูลแบบ One-shot หรือผ่าน Network จากระบบที่ไม่รองรับ MQTT (ทดสอบการทำงานของ API ได้ที่ https://api.waterlevel.sgroup.io/docs-data)

Endpoint ของระบบ

Domain name ของ API คือ:

  • POST https://api.waterlevel.sgroup.io/records/data

Authentication

รองรับ 3 รูปแบบหลัก:

  1. basicAuth

    ใช้คู่ username:password แปลงเป็น base64 แล้วใส่ใน Header

    HTTP Header:
    Authorization: Basic base64_encode(username:password)
    
  2. apiKeyAuth (ผ่าน Header)

    HTTP Header:
    x-api-key: YOUR_API_KEY
    
  3. apiKeyQuery (ผ่าน Query String)

    POST https://api.waterlevel.sgroup.io/records/data?api_key=YOUR_API_KEY
    

โครงสร้าง Payload

Payload หลักประกอบด้วย 2 ส่วน:

  • timestamp เวลาหลักของชุดข้อมูล (ไม่ส่งก็ได้ ถ้าไม่ส่งระบบจะใช้เวลาปัจจุบัน)

  • data เป็น Object เก็บค่าจริงจากอุปกรณ์ตาม Template ที่ผูกกับ Device

ตัวอย่าง Payload

{
  "timestamp": 1724352970,
  "data": {
    "T": 1724352970,
    "I": 1,
    "J": 0,
    "Q": 30,
    "B": 806,
    "IL": 6,
    "IA": 0,
    "ILL": 10000,
    "ILH": 10001,
    "ILZ0506": [
      11,
      10,
      9,
      8,
      7,
      6
    ],
    "IT0": 328,
    "IT1": 311
  }
}

คำอธิบายเพิ่มเติม

  • timestamp ด้านนอก (ระดับบนสุด) - ถ้าไม่ส่ง ระบบจะใช้เวลาปัจจุบันของ Server แทน - ค่าต้องเป็น date-time

  • ฟิลด์ภายใน data เช่น T, I, J, Q, B, IL, IA, ... - ชื่อตัวแปรจะขึ้นอยู่กับ Template ที่กำหนดในระบบ

ตัวอย่าง Response

หากบันทึกข้อมูลสำเร็จ ระบบจะตอบกลับในรูปแบบ:

{
     "success": true,
     "message": "Data inserted successfully",
     "device_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
     "timestamp": "2025-11-20T17:20:53.061Z",
     "data": {
         "additionalProp1": {}
     }
 }

กรณี Error (ตัวอย่าง)

ตัวอย่างเช่น Duplicate ( timestamp ซ้ำ):

{
   "success": false,
   "warning": true,
   "message": "Duplicate timestamp detected for this device",
   "device_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
   "timestamp": "2025-11-20T17:20:53.063Z",
   "existing_data": {
     "additionalProp1": {}
   }
 }