ARTICLE

ESPHome Native API vs MQTT ต่างกันอย่างไร? ใช้แบบไหนกับ Home Assistant.

เปรียบเทียบ ESPHome Native API และ MQTT สำหรับ Home Assistant ตั้งแต่ architecture, broker dependency, entity integration, availability, multiple consumers, local-first design และ failure behavior

IoTAutomationHome Assistantโดย Thospaakเผยแพร่ 10 ต.ค. 2569อัปเดต 10 ต.ค. 2569

ถ้าใช้ ESPHome + Home Assistant เรามักเจอสองทางหลักในการส่งข้อมูลระหว่าง node กับระบบกลาง:

  1. ESPHome Native API
  2. MQTT

ทั้งสองแบบใช้ได้ แต่ architecture และ dependency ต่างกัน

Native API คืออะไรใน ESPHome

Native API เป็น protocol/integration path ของ ESPHome สำหรับเชื่อม node กับ client ที่รองรับ เช่น Home Assistant

ภาพง่าย:

ESPHome Node
    ↓ Native API
Home Assistant

ไม่ต้องมี MQTT broker เป็นตัวกลาง

เอกสารทางการ:

MQTT Architecture เป็นอย่างไร

ESPHome Node
    ↓ MQTT
MQTT Broker
    ↓
Home Assistant

และ broker เดียวอาจกระจายไป consumer อื่นด้วย:

Broker
 ├─ Home Assistant
 ├─ Database
 ├─ Node-RED
 └─ Custom service

อ่านพื้นฐาน MQTT ที่ MQTT คืออะไร

Native API ได้เปรียบเมื่อ Home Assistant เป็นศูนย์กลาง

ถ้า node สร้างมาเพื่อ Home Assistant เป็นหลัก Native API ทำให้ architecture สั้นลง:

ESPHome ↔ Home Assistant

ข้อดีเชิงระบบ:

  • ไม่ต้อง deploy/manage broker เพิ่ม
  • entity integration สอดคล้องกับ ESPHome ecosystem
  • configuration path เรียบง่ายขึ้น
  • ลด component กลางหนึ่งตัวในระบบ

แต่ยังมี dependency ต่อ Home Assistant สำหรับ automation ที่อยู่ใน HA

MQTT ได้เปรียบเมื่อมีหลาย Consumer

ถ้า data จาก node ต้องถูกใช้โดยหลายระบบ MQTT ช่วย decouple ได้ดี:

ESPHome meter node
      ↓
 MQTT Broker
  ├─ HA
  ├─ EMS
  ├─ Historian
  └─ Alert service

Node ไม่ต้องรู้จักปลายทางทั้งหมด

จึงเหมาะกับ architecture ที่ MQTT เป็น message backbone อยู่แล้ว

Native API ไม่ได้แปลว่า Local Automation อยู่ใน HA เสมอไป

ESPHome สามารถมี local automation ใน node เอง

Sensor
  ↓
ESPHome local rule
  ↓
Output

Native API ทำหน้าที่ส่ง state/control integration กับ HA แต่ logic บางส่วนสามารถอยู่ local ได้

สิ่งสำคัญคือ logic placement ไม่ใช่ชื่อ protocol

MQTT ก็ไม่ได้แปลว่า Cloud

MQTT broker สามารถรันใน LAN ได้ เช่นบน server/local infrastructure

ESPHome → Local Broker → Home Assistant

จึงเป็น local-first ได้เช่นกัน

อย่าสับสน:

MQTT = Cloud

เพราะ MQTT เป็น protocol ไม่ได้บังคับตำแหน่ง broker

Failure Mode ต่างกันอย่างไร

Native API

ถ้า Home Assistant unavailable:

  • local logic บน ESPHome node ยังทำงานได้ตาม config
  • entity/control จาก HA หายชั่วคราว
  • automation ที่อยู่ใน HA ไม่ทำงาน

MQTT

ถ้า Broker unavailable:

  • publish/subscribe ผ่าน broker หยุด
  • local logic บน nodeยังทำงานได้ถ้าไม่ได้พึ่ง broker
  • HA และ consumer อื่นไม่ได้รับ message จนกว่าระบบ reconnect ตาม policy

ดังนั้นทั้งสองแบบต้องคิดว่า central dependency ล่มแล้ว node ทำอะไร

Availability State สำคัญ

ระบบไม่ควรค้างค่าครั้งสุดท้ายแล้วทำเหมือน node ยัง online

ควรมี semantics สำหรับ:

online
unavailable
stale
reconnecting

MQTT มีแนวคิด Last Will/availability pattern ที่สามารถใช้ได้ตาม integration

Native API มี connection/entity availability ตาม ecosystem

แต่ application logic ยังต้องรู้ว่า stale data ห้ามถูกใช้เป็นค่าปัจจุบันโดยไม่จำกัดเวลา

MQTT Retained Message ต้องระวัง

Retained message เหมาะกับ state ล่าสุดบางประเภท แต่ถ้าออกแบบ topic/command ผิดอาจเกิดการ replay state/command เก่าหลัง reconnect

ควรแยก:

State topic
Command topic
Availability topic
Event topic

และกำหนด retained/QoS ตาม semantics

Security ต่างกันอย่างไร

ทั้งสองเส้นทางต้องคิดเรื่อง credential และ network trust

Native API

ดู encryption/authentication options ตาม ESPHome version/config ปัจจุบัน

MQTT

ดู TLS, broker authentication, ACL/topic permission และ certificate validation

ไม่ควร expose service ทั้งสองออก Internet โดยตรงเพียงเพื่อ remote access

ใช้ VPN/secure remote access architecture ที่เหมาะสมแทนเมื่อจำเป็น

Network Traffic ต่างกันไหม

ผลจริงขึ้นกับจำนวน entity, update interval, payload และ implementation

อย่าเลือก protocolจากคำว่า “เบากว่า” เพียงอย่างเดียว

ควรเลือกจาก:

-จำนวน node -จำนวน consumer

  • update rate
  • operational complexity
  • broker infrastructure
  • debugging/observability

ใช้ Native API เมื่อไร

เหมาะเมื่อ:

  • Home Assistant เป็น primary/only consumer
  • ต้องการ setup ที่เรียบง่าย
  • ไม่อยากดูแล MQTT broker
  • ใช้ ESPHome ecosystem เป็นหลัก

ใช้ MQTT เมื่อไร

เหมาะเมื่อ:

  • มี consumer หลายตัว
  • มี broker อยู่แล้ว
  • ต้องการ decouple device จาก HA
  • ต้องส่ง telemetry ไป EMS/Database/Service อื่น
  • architecture ใช้ MQTT เป็น backbone

ใช้ทั้งสองพร้อมกันได้ไหม

ESPHome มี capability หลาย integration แต่ไม่ควรเพิ่มทั้งสองเพียงเพราะ “ทำได้” ถ้าไม่มี use case เพราะจะเพิ่ม:

  • duplicate data paths
  • troubleshooting complexity
  • state ownership ambiguity
  • credential surface

ควรมีเหตุผลว่าใครเป็น source of truth และใคร control ได้

Command Ownership ต้องชัด

สมมติ device เดียวถูกสั่งได้จาก:

Home Assistant Native API
MQTT command
Local button
Local automation

ต้องกำหนด precedence/mode เช่น:

LOCAL_AUTO
REMOTE_AUTO
MANUAL
MAINTENANCE
FAULT

ไม่ควรให้หลาย controller สั่งสวนกันโดยไม่มี policy

ตัวอย่าง Smart Home

ถ้ามี ESPHome presence sensor และ Home Assistant เป็นระบบกลางเพียงตัวเดียว:

Presence Sensor → ESPHome → Native API → HA

มักเรียบง่าย

แต่ถ้า occupancy data ต้องเข้า HA + dashboard + analytics อิสระ:

ESPHome → MQTT Broker → หลาย consumer

อาจเหมาะกว่า

ตัวอย่าง Energy Monitoring

Energy Node
  ↓ MQTT
Broker
 ├─ Home Assistant
 ├─ Time-series DB
 └─ EMS

การมีหลาย consumer ทำให้ MQTT มีเหตุผลชัด

แต่ถ้าเป็น node sensor เล็ก ๆ ที่มีแค่ HA ใช้ข้อมูล Native API อาจลด complexity ได้

สรุป

เลือกจาก architecture ไม่ใช่ความนิยม:

HA เป็น consumer หลักตัวเดียว
→ Native API มักเรียบง่าย

หลายระบบต้อง consume data
→ MQTT มักได้เปรียบ

และจำไว้ว่า protocol ไม่ได้กำหนดว่า automation ต้องอยู่ central ทั้งหมด — local logic และ safety boundary ควรถูกวางตาม consequence ของระบบ