สร้าง MQTT Server (broker) หรือ Node-red server บน Google cloud platform ไม่ง้อ free server
ก่อนอื่นควรรู้มาตรฐานของ port เหล่านี้ก่อนนะคับ
Node-red = 1880
Mosquitto (MQTT server)= 1883
เกริ่นนิดเดียวนะคับ MQTT (Message Queuing Telemetry Transport) เป็นProtocol ที่ออกแบบมาเพื่อการเชื่อมต่อแบบ M2M (machine-to-machine) คือ อุปกรณ์ติดต่อหรือสื่อสารกับอุปกรณ์ โดยเป็นส่วนหนึ่งของเทคโนโลยี IoT (Internet of Things) ซึ่งเป็นเทคโนโลยีที่อินเทอร์เน็ตเชื่อมต่อกับอุปกรณ์ต่าง ๆ เช่น โทรศัพท์มือถือ รถยนต์ โทรทัศน์ ตู้เย็น เข้ากับอินเทอร์เน็ตทำให้สามารถเชื่อมโยงสื่อสารกับอุปกรณ์ต่าง ๆ ได้ โดยผ่านเครือข่ายอินเทอร์เน็ต ซึ่งจะทำให้มนุษย์สามารถ ควบคุมอุปกรณ์ต่าง ๆ จากที่อื่นได้ เช่นการสั่งปิดเปิดไฟในบ้านจากที่อื่น ๆ
MQTT เป็นชื่อเรียกสำหรับโปรโตคอลนี้เท่านั้น โดยหลักการทำงานของ MQTT จริง ๆนั้นมีส่วนประกอบ 3 อย่างคือ ผู้ส่ง (publish) , ผู้รับ (subscribe) และ ตัวกลาง (MQTT broker ตัวที่เรากำลังจะสร้างนั่นแหละ) โดยผู้รับหรือผู้ส่งจะใช้อุปกรณ์ชนิดไหนก็ได้ ขอเพียงมีแอพพลิเคชั่นหรือโปรแกรมที่รองรับโปรโตคอล MQTT ก็เพียงพอแล้ว
องค์ประกอบของ MQTT
1. ผู้ส่ง (publish) มีหน้าที่ในการส่งข้อมูล/ข้อความไปยังตัวกลาง (MQTT Broker) โดยสิ่งที่ส่งจะประกอบด้วย หัวข้อ (Topic) และข้อความ (Message)
2. ผู้รับ (subscribe) มีหน้าที่คือจะต้องเชื่อมต่อกับตัวกลาง และติดตาม topic ให้ตรงกับผู้ส่ง โดยเมื่อตรงกันเรียบร้อย เมื่อผู้ส่ง ส่งข้อความมาผู้รับก็จะสามารถรับข้อความนั้นได้ หากมีอย่างใดอย่างหนึ่งที่ไม่ตรงกันก็จะไม่สามารถรับข้อความได้นั้นเอง
3. ตัวกลาง (MQTT Broker) มีหน้าที่รับข้อความจากผู้ส่งและกระจาย (Broadcast) ให้กับผู้ติดตามที่มี topic ตรงกับผู้ส่งเท่านั้น
MQTT BROKER
ในการใช้งาน Protocol MQTT นั้นจะต้องมี MQTT Broker เสียก่อน โดยตัว Broker นั้นสามารถหามาใช้งานได้อยู่ 3 วิธีด้วยกันคือ
1. เช่า Broker ของผู้ให้บริการ โดยจะมีค่าใช้จ่ายและมีข้อจำกัดแล้วแต่ผู้ให้บริการ บางรายก็มีให้ทดลองฟรีเช่นกัน
2. สร้าง Broker ขึ้นมาด้วยตนเอง โดยการเช่าเซิร์ฟเวอร์และทำการติดตั้งโปรแกรม MQTT Broker ด้วยตนเอง วิธีนี้เป็นที่นิยมแต่จะต้องมีเซิร์ฟเวอร์เป็นของตัวเองและจะต้องวางระบบรักษาความปลอดภัยด้วยตนเอง (วิธีนี้ผมจะแนะนำสร้างด้วย service ของ google นะคับ ที่สะดวกมากๆ)
3. ใช้งาน Broker ฟรีที่ทาง MQTT มีไว้ให้ แต่ข้อเสียคือเป็น Broker สาธารณะทุกคนสามารถดูข้อมูลที่เราส่งได้ เช่นที่เรามักนิยมใช้คือ “broker.hivemq.com”, port: 1883
เอาล่ะ เริ่มกันเลยดีกว่าคับ
- เข้าไปที่ Google Cloud Platform และ คลิก Go to console.
2. พิมพ์ ‘VM instances’ เพื่อเข้าไปหน้าจอสำหรับสร้าง instance >> คลิก CREATE INSTANCE
3. ตั้งชื่อ instance ในที่นี้ผมตั้งชื่อว่า ‘test-server’
- เลือก Region ในที่นี้ผมเลือก ‘Singapore’
- ตั้งค่า machine configuration ในที่นี้ผมเลือกแค่ CPU 1 core, RAM 3.75GB
- ตั้งแค่ os ให้ VM ของเรา ในที่นี้เลือก ‘Ubuntu’, version: 16.04 LTS (เพราะ stable แล้ว)
- Check Allow HTTP traffic, Allow HTTPS traffic เหล่านี้เราสามารถจัดการตามความต้องการเราได้เลยคับ
- Container ถ้าเราต้องการเพิ่ม container เข้ามาก้อตั้งค่าตรงนี้ได้เลยคับ เช่น ถ้าต้องการทำเป็น Node-RED server ก็สามารถเพิ่มได้เลยแบบนี้
หลังจาก config ค่าที่เราต้องการแล้ว ก็ Create ได้เลยคับ
4. จากนั้นรอสักครู่ เราก็จะได้ VM ที่เราสร้างขึ้นมาแล้วนะคับ ให้กด SSH เข้าไปได้เลย
5. หลังจากเข้ามาที่ VM เราแล้วจะหน้าตาแบบนี้คับ
จากนั้นให้ทำการ update และ install mosquitto นะคับ
sudo apt-get update
sudo apt-get install mosquitto
6. จนถึงขั้นตอนนี้ เราก้อมี mqtt server เป็นของตัวเองแล้วนะคับ แน่นอนว่า mqtt server ใช้ port 1883 ในการสื่อสาร เราจึงต้องไป allow port นี้ใน firewall ด้วยนะคับ
7. หลังจากที่เรามี MQTT server จาก Mosquitto แล้ว เราก้อจะใช้ External IP จาก VM ของเรามาใส่แทน Server IP ใน Node-RED ได้เลยนะคับ ซึ่งจะยังต้อง publish และ subscribe ได้ปกติ
จบล่ะคับ แล้วพบกันใหม่คับ
ps. เราสามารถเข้าไป grep เพื่อดูว่า service ของเราทำงานอยู่รึป่าวได้ เช่น ต้องการดูว่า node-red running อยู่หรือไม่
http://istsos.org/en/trunk/doc/ws_mqtt.html
https://randomnerdtutorials.com/what-is-mqtt-and-how-it-works/
pdf Thai mqtt server on google cloud.
pdf Thai node-red on google cloud.
https://www.youtube.com/watch?v=aeWlWzy3llU
Google cloud IoT core.