ARTICLE

MQTT คืออะไร: Publish/Subscribe, Broker และ QoS สำหรับงาน IoT.

อธิบาย MQTT แบบใช้งานจริง ตั้งแต่ Client, Broker, Topic, QoS 0/1/2, Session, Retained Message ไปจนถึง TLS และหลักออกแบบระบบ IoT ที่ไม่เข้าใจ QoS เกินจริง

IoTAutomationโดย Thospaakเผยแพร่ 13 ก.พ. 2568อัปเดต 15 ต.ค. 2569
ภาพ MQTT สำหรับงาน IoT แสดง ESP32/อุปกรณ์ภาคสนาม publish ข้อมูลผ่าน MQTT Broker ไปยัง Dashboard, Database, Home Assistant และระบบแจ้งเตือน

MQTT (Message Queuing Telemetry Transport) เป็นโปรโตคอลส่งข้อความแบบเบาที่นิยมใน IoT เพราะแยกผู้ส่งข้อมูลออกจากผู้รับผ่าน Broker และใช้รูปแบบ Publish/Subscribe แทนการให้ทุกอุปกรณ์เชื่อมต่อหากันโดยตรง

MQTT เหมาะมากกับงานประเภท sensor, telemetry, Home Automation และ monitoring แต่คำว่า “เบา” ไม่ได้แปลว่าออกแบบระบบอย่างไรก็ได้ เรื่อง QoS, session, retained message, authentication และ TLS ยังต้องกำหนดให้ตรงกับความสำคัญของข้อมูล

สำหรับข้อมูลที่เอาไปตัดสินใจ ต้องมี state freshness contract เพิ่มจาก QoS:

Value
+ source timestamp
+ receive timestamp
+ online/offline state
+ retained policy
+ expiry / stale threshold

QoS ช่วยเรื่อง delivery semantics แต่ไม่ได้พิสูจน์ว่าค่าที่ได้รับยังสดหรือสะท้อน physical state ปัจจุบัน ดังนั้น retained message เก่าหรือ client ที่หลุด network ต้องถูกแยกจาก live measurement

แหล่งหลัก:

MQTT ทำงานอย่างไร

องค์ประกอบหลักมี 3 ส่วน:

  1. Publisher — client ที่ส่งข้อความ
  2. Broker — รับข้อความและ route ตาม Topic
  3. Subscriber — client ที่สมัครรับ Topic ที่สนใจ

ตัวอย่างระบบวัดพลังงาน:

Energy Meter
   │ publish
   ▼
site/main-meter/power_kw
   │
 MQTT Broker
   │
   ├── Dashboard
   ├── Home Assistant
   └── Alert service

Meter ไม่จำเป็นต้องรู้ว่ามี Dashboard หรือระบบแจ้งเตือนกี่ตัว เพียง publish ไปยัง Topic ตาม contract ที่กำหนด

Topic คือ contract ของระบบ

Topic เป็นชื่อเส้นทางเชิงตรรกะ เช่น:

factory/line-1/meter/power_kw
factory/line-1/meter/energy_kwh
solar/inverter-01/status
home/ev-charger/power_kw

สิ่งสำคัญไม่ใช่แค่ตั้งชื่อให้อ่านง่าย แต่ต้องกำหนดด้วยว่า:

  • payload มี schema อะไร
  • unit คืออะไร
  • timestamp อยู่ตรงไหน
  • retained หรือไม่
  • ใช้ QoS เท่าไร
  • ใคร publish/subcribe ได้บ้าง

ถ้าไม่มี contract เหล่านี้ ระบบ MQTT ขนาดใหญ่จะกลายเป็น Topic จำนวนมากที่ไม่มีใครแน่ใจว่าค่าแต่ละตัวหมายถึงอะไร

QoS 0, 1 และ 2 ต่างกันอย่างไร

MQTT มี Quality of Service 3 ระดับสำหรับการส่ง Application Message ระหว่าง sender กับ receiver ในแต่ละช่วงของการสื่อสาร

QoS ความหมาย เหมาะกับ
0 At most once telemetry ที่ส่งถี่และยอมเสียบาง sample ได้
1 At least once event/telemetry ที่ไม่อยากพลาด แต่ต้องรับมือ duplicate
2 Exactly once ใน protocol exchange นั้น flow ที่ต้นทุน handshake เพิ่มแต่ต้องการลด duplicate delivery

จุดที่มักเข้าใจผิดคือ QoS ไม่ใช่คำรับประกัน end-to-end ของ business process ทั้งระบบ

ถ้า publisher ส่ง QoS 1 เข้า Broker และ Broker ส่งต่อ subscriber ด้วย QoS อื่น ผลลัพธ์ของแต่ละ hop สามารถต่างกันได้ และ application ยังต้องออกแบบเรื่อง idempotency, duplicate handling และ persistence เอง

Retained Message ไม่ใช่ History Database

Retained Message ทำให้ Broker เก็บข้อความล่าสุดของ Topic แล้วส่งให้ subscriber ใหม่ที่ subscribe เข้ามา

เหมาะกับค่าอย่าง:

  • current mode
  • online status
  • setpoint ล่าสุด
  • configuration state

แต่ retained message ไม่ได้แทน time-series database เพราะเก็บ “ค่าล่าสุด” ไม่ใช่ประวัติทุก sample

ถ้าต้องการกราฟย้อนหลัง ควรมี consumer ที่บันทึกข้อมูลลงฐานข้อมูลหรือระบบ time series แยกต่างหาก

Session ช่วยเรื่องการ reconnect

MQTT 5.0 มีแนวคิด Session State และ Session Expiry Interval เพื่อให้ client/server รักษาสถานะบางส่วนข้ามการ disconnect ได้ตาม configuration

จึงไม่ควรใช้คำว่า “MQTT reconnect แล้วข้อมูลไม่หาย” แบบเหมารวม เพราะผลลัพธ์ขึ้นกับ:

  • QoS
  • Session Expiry
  • broker persistence
  • subscription state
  • queue limits
  • client implementation

MQTT มี Encryption ในตัวหรือไม่

ตัว MQTT protocol ไม่ได้บังคับให้ทุก connection ถูกเข้ารหัส

OASIS ระบุว่า implementation สามารถใช้ transport ที่เหมาะสม และ TLS เป็นแนวทางมาตรฐานสำหรับ authentication, integrity และ privacy ของข้อมูลระหว่างทาง

แนวทาง production ทั่วไปจึงควรพิจารณา:

  • TLS สำหรับ network ที่ไม่ไว้วางใจ
  • server certificate validation
  • client authentication ตาม risk
  • username/password หรือ stronger authentication mechanism
  • per-topic authorization / ACL
  • credential rotation

อย่าเขียนว่า “MQTT รองรับ SSL แล้วจึงปลอดภัย” โดยไม่ดูว่า deployment เปิด TLS จริงหรือไม่ และ client ตรวจ certificate ถูกต้องหรือเปล่า

MQTT 3.1.1 กับ MQTT 5.0

MQTT 3.1.1 ยังถูกใช้งานกว้างมาก ส่วน MQTT 5.0 เพิ่มความสามารถ เช่น:

  • Session Expiry
  • Reason Codes ที่ละเอียดขึ้น
  • User Properties
  • Message Expiry
  • Request/Response pattern support
  • Topic Alias

เวลาเลือก version ควรดู ecosystem ของ broker, device firmware และ integration ที่ใช้อยู่ ไม่ใช่อัปเกรดเพียงเพราะเลข version ใหม่กว่า

MQTT เหมาะกับงานอะไร

MQTT เหมาะเมื่อระบบมี producer/consumer หลายตัวและต้องการ decouple กัน เช่น:

  • sensor telemetry
  • Solar / Energy Monitoring
  • Home Assistant integrations
  • machine status
  • alarm/event distribution
  • edge gateway → cloud
  • local automation bus

แต่ไม่ได้แปลว่าต้องใช้ MQTT ทุกจุด ตัวอย่างเช่น device อุตสาหกรรมจำนวนมากอาจสื่อสารด้วย Modbus ที่หน้างาน แล้ว Gateway เป็นผู้แปลงข้อมูลขึ้น MQTT อีกชั้นหนึ่ง

ถ้ากำลังเลือกระหว่าง Publish/Subscribe กับ Request/Response อ่าน MQTT vs HTTP/API ต่างกันอย่างไร เพื่อแยก message semantics ก่อนเลือก protocol

Meter / Inverter
    │ Modbus RTU/TCP
    ▼
Edge Gateway
    │ MQTT/TLS
    ▼
Broker → Dashboard / Database / Alert

นี่เป็น architecture ที่พบได้บ่อย เพราะแยก field protocol ออกจาก message distribution layer ชัดเจน

เมื่อไรไม่ควรใช้ MQTT

MQTT ไม่ได้เป็นคำตอบอัตโนมัติของทุกระบบ IoT ตัวอย่างที่ protocol อื่นอาจตรงกว่า:

โจทย์ ทางเลือกที่มักตรงกว่า
Client ขอข้อมูลหนึ่งครั้งแล้วรอคำตอบทันที HTTP/API หรือ request/response ที่ชัดเจน
อุปกรณ์มี consumer เดียวและ integration ตรงอยู่แล้ว Native/local API อาจลด component กลาง
ต้อง query ข้อมูลย้อนหลังจากฐานข้อมูล Database/API ไม่ใช่ retained topic
งาน field control ที่มี timing/safety constraint สูง Local controller/PLC/interlock ไม่ควรพึ่ง broker เป็น safety path
ระบบเล็กมากและไม่มีเหตุผลต้อง decouple producer/consumer อย่าเพิ่ม Broker เพียงเพื่อให้ architecture ดูเป็น IoT

ถ้ากำลังเลือกระหว่าง MQTT กับ API ให้ดู MQTT vs HTTP/API และถ้าเป็น ESPHome + Home Assistant โดยตรง ให้เทียบ ESPHome Native API vs MQTT ก่อนเพิ่ม Broker

เช็กลิสต์ก่อนใช้ MQTT จริง

ก่อน production ควรตอบให้ได้ว่า:

  1. Topic naming convention คืออะไร
  2. payload schema และ unit ถูก version อย่างไร
  3. QoS ของแต่ละ message class คืออะไร
  4. retained topic ตัวไหนบ้าง
  5. Session Expiry ต้องการหรือไม่
  6. broker เก็บ queued message ได้แค่ไหน
  7. authentication/authorization ใช้อะไร
  8. TLS terminate ที่ไหน
  9. ถ้า Broker ล่ม ระบบ critical ยังทำงาน local ได้หรือไม่
  10. ข้อมูลย้อนหลังถูกเก็บที่ระบบใด

สรุป

MQTT เป็น message protocol ที่เรียบง่ายและทรงพลังสำหรับ IoT เพราะใช้ Broker และ Publish/Subscribe ลด coupling ระหว่างอุปกรณ์ แต่ระบบที่ดีต้องออกแบบมากกว่าแค่ “ต่อ Broker แล้ว publish ได้”

ให้มอง Topic + Payload + QoS + Session + Security เป็น contract เดียวกัน และแยกให้ชัดว่า MQTT ใช้สำหรับส่งข้อความ ส่วน persistence, analytics และ control safety เป็นหน้าที่ของระบบรอบข้าง