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

Waterlevel Platform รองรับการเชื่อมต่อผ่าน MQTT Protocol เหมาะสำหรับอุปกรณ์ที่ต้องการส่งข้อมูลแบบ Real-time เช่น อุปกรณ์ที่เชื่อมต่อผ่านเครือข่าย Cellular, WiFi หรือ LoRa Gateway

Host/Port ของ Broker

รายการ

ค่า

Host

mqtt.waterlevel.sgroup.io

Port

1883 (Non-TLS)

Username

Device ID

Password

Device Token

Client ID

Device ID หรือ Serial Number ของอุปกรณ์

โครงสร้าง Topic

ประเภท

Topic Format

ความหมาย

Publish

@msg

อุปกรณ์ส่งค่าขึ้น Server

Subscribe

@update/<Username>

Server ส่งคำสั่ง/ข้อมูลลงไปยังอุปกรณ์ (Username)

คำอธิบาย:

  • @msg ใช้สำหรับ Sensor Data

  • @update/<Username> Username = Username ของอุปกรณ์ ใช้สำหรับสั่งงาน เช่น Restart, Update Config, ตั้งค่า Parameter ต่าง ๆ

ตัวอย่าง MQTT 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
  }
}

ตัวอย่างคำสั่งส่งด้วย mosquitto_pub

mosquitto_pub \
  -h mqtt.waterlevel.sgroup.io \
  -p 1883 \
  -u DEVICE_ID \
  -P DEVICE_TOKEN \
  -t "@msg" \
  -m '{
       "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 สามารถส่งเป็น UNIX Timestamp (วินาที) หากไม่ส่ง ระบบจะใช้เวลาปัจจุบันอัตโนมัติ

  • อุปกรณ์ควรส่งค่าตาม Template ที่ถูกกำหนดไว้ เช่น T/Q/B/IL/ILZ0506 ฯลฯ

  • ถ้าส่งไม่ครบ: - ระบบจะบันทึกเฉพาะค่าที่ถูกต้อง - ค่าที่ไม่ส่งอาจถูกเติมค่า default ตาม Template

  • แนะนำให้ทำ Retry/backoff หาก MQTT หลุดหรือส่งไม่สำเร็จ