บทนำ

Mosquitto เป็น MQTT Broker แบบโอเพนซอร์สที่ใช้สำหรับการรับ-ส่งข้อความระหว่างอุปกรณ์ IoT ผ่านโปรโตคอล MQTT ซึ่งมีประสิทธิภาพสูงและเหมาะสำหรับระบบที่ต้องการการสื่อสารแบบเรียลไทม์

ในบทความนี้ เราจะอธิบายวิธีติดตั้งและตั้งค่า Mosquitto MQTT Broker บน Ubuntu โดยใช้ Bash Script เพื่อให้สามารถใช้งานได้อย่างง่ายดาย และ ปลอดภัย

MQTT คืออะไร?

MQTT (Message Queuing Telemetry Transport) เป็นโปรโตคอลการรับ-ส่งข้อความที่ออกแบบมาสำหรับการสื่อสารในระบบที่มีทรัพยากรจำกัด เช่น อุปกรณ์ IoT (Internet of Things) หรือระบบที่ต้องการใช้แบนด์วิดท์ต่ำและมีการเชื่อมต่อที่ไม่นิ่ง โดย MQTT ใช้โมเดล Publisher-Subscriber ซึ่งประกอบด้วย 3 องค์ประกอบหลัก ได้แก่:

  • Publisher - ผู้เผยแพร่ข้อมูล เช่น เซ็นเซอร์ที่ส่งข้อมูลไปยัง MQTT Broker
  • Broker - ตัวกลางที่ทำหน้าที่รับและแจกจ่ายข้อมูลไปยัง Subscriber ที่สนใจ
  • Subscriber - ผู้รับข้อมูลที่สมัครรับข้อมูลจาก Broker ตามหัวข้อที่ต้องการ

MQTT ทำงานผ่าน TCP/IP และใช้พอร์ตเริ่มต้นที่ 1883 (สำหรับการสื่อสารปกติ) และ 8883 (สำหรับการสื่อสารแบบเข้ารหัส TLS/SSL)

ประโยชน์ของ MQTT

MQTT เป็นโปรโตคอลที่มีประสิทธิภาพสูงและเหมาะสำหรับการใช้งานหลายรูปแบบ โดยมีข้อดีหลัก ๆ ดังนี้:

  • ใช้ทรัพยากรต่ำ - ออกแบบมาให้เหมาะสำหรับอุปกรณ์ที่มีพลังงานจำกัด เช่น Microcontroller
  • ใช้แบนด์วิดท์ต่ำ - ใช้โครงสร้างข้อมูลที่มีขนาดเล็ก ทำให้ลดปริมาณข้อมูลที่ส่งผ่านเครือข่าย
  • รองรับ QoS (Quality of Service) - มีระดับการรับ-ส่งข้อมูล 3 ระดับ ทำให้สามารถกำหนดความน่าเชื่อถือของการส่งข้อความได้
  • รองรับการเชื่อมต่อแบบไม่ต่อเนื่อง - เหมาะสำหรับอุปกรณ์ที่อาจเชื่อมต่อเครือข่ายไม่ต่อเนื่อง เช่น ระบบมือถือ
  • รองรับระบบ Pub/Sub - ช่วยให้สามารถสื่อสารแบบ one-to-many ได้ง่ายโดยไม่ต้องระบุผู้รับปลายทางโดยตรง

ขั้นตอนการติดตั้ง Mosquitto MQTT Broker

1. ดาวน์โหลดและรันสคริปต์ติดตั้ง

ให้บันทึกสคริปต์ด้านล่างเป็นไฟล์ install_mosquitto.sh

#!/bin/bash

# อัปเดตรายการแพ็กเกจ
echo "Updating package list..."
sudo apt update -y && sudo apt upgrade -y

# ติดตั้ง Mosquitto และ Mosquitto Clients
echo "Installing Mosquitto MQTT Broker..."
sudo apt install -y mosquitto mosquitto-clients

# กำหนดให้ Mosquitto เริ่มทำงานอัตโนมัติเมื่อบูต
echo "Enabling Mosquitto service..."
sudo systemctl enable mosquitto
sudo systemctl start mosquitto

# ตรวจสอบสถานะของ Mosquitto
echo "Checking Mosquitto status..."
sudo systemctl status mosquitto --no-pager

# เปิดพอร์ต MQTT (1883 และ 8883 สำหรับ TLS) ใน Firewall (ถ้ามี ufw)
if command -v ufw &> /dev/null
then
    echo "Configuring firewall..."
    sudo ufw allow 1883/tcp
    sudo ufw allow 8883/tcp
    sudo ufw reload
fi

# สร้างไฟล์คอนฟิกสำหรับ Authentication (กำหนดให้ใช้ username/password)
CONFIG_FILE="/etc/mosquitto/conf.d/mosquitto.conf"

echo "Creating Mosquitto configuration..."
sudo tee $CONFIG_FILE > /dev/null <<EOL
listener 1883
allow_anonymous false
password_file /etc/mosquitto/passwd
EOL

# สร้าง Username และ Password สำหรับ Mosquitto
echo "Creating MQTT user..."
MQTT_USER="mqtt_user"
MQTT_PASS="mqtt_password"
sudo mosquitto_passwd -c -b /etc/mosquitto/passwd $MQTT_USER $MQTT_PASS

# รีสตาร์ท Mosquitto เพื่อให้การตั้งค่ามีผล
echo "Restarting Mosquitto service..."
sudo systemctl restart mosquitto

# แสดงผลลัพธ์สุดท้าย
echo "============================================="
echo " Mosquitto MQTT Broker ติดตั้งเสร็จสมบูรณ์!"
echo " ใช้งานได้ที่: mqtt://localhost:1883"
echo " Username: $MQTT_USER"
echo " Password: $MQTT_PASS"
echo "============================================="

วิธีใช้

1. บันทึกสคริปต์เป็นไฟล์

บันทึกสคริปต์นี้เป็นไฟล์ เช่น install_mosquitto.sh


# ตัวอย่างคำสั่งเพื่อบันทึกสคริปต์
nano install_mosquitto.sh
    

2. ให้สิทธิ์การรันไฟล์

ใช้คำสั่ง chmod เพื่อให้สิทธิ์การรันไฟล์:


chmod +x install_mosquitto.sh
    

3. รันสคริปต์

รันสคริปต์ด้วยคำสั่ง:


sudo ./install_mosquitto.sh
    

4. การตรวจสอบการทำงาน

หลังจากติดตั้งเสร็จ ลองตรวจสอบว่าบริการ Mosquitto ทำงานอยู่หรือไม่:


systemctl status mosquitto
    

หรือทดสอบการเชื่อมต่อกับ Mosquitto Broker โดยใช้ Mosquitto Client:


# เปิด Subscriber ใน Terminal หนึ่ง
mosquitto_sub -h localhost -t "test/topic" -u "mqtt_user" -P "mqtt_password" &

# ส่งข้อความผ่าน Publisher ใน Terminal อีกหนึ่ง
mosquitto_pub -h localhost -t "test/topic" -m "Hello MQTT" -u "mqtt_user" -P "mqtt_password"

ถ้าใช้งานได้ จะเห็นข้อความ "Hello MQTT" แสดงออกมาใน Terminal ของ Subscriber

5. เพิ่มเติม

  • ค่า MQTT_USER และ MQTT_PASS ในสคริปต์สามารถเปลี่ยนแปลงได้ตามต้องการ
  • ถ้าต้องการให้ MQTT Broker ทำงานแบบ TLS/SSL ให้เพิ่มการตั้งค่า Cert ในไฟล์ mosquitto.conf
  • ถ้าใช้ Docker ก็สามารถติดตั้ง Mosquitto Broker ได้ง่าย ๆ โดยใช้คำสั่ง:
docker run -d --name mosquitto -p 1883:1883 eclipse-mosquitto