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
ถ้าใช้ ESPHome + Home Assistant เรามักเจอสองทางหลักในการส่งข้อมูลระหว่าง node กับระบบกลาง:
- ESPHome Native API
- 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 ของระบบ