สร้าง MQTT Server (broker) หรือ Node-red server บน Google cloud platform ไม่ง้อ free server

Grassroot Engineer
3 min readJul 19, 2020

--

ก่อนอื่นควรรู้มาตรฐานของ port เหล่านี้ก่อนนะคับ
Node-red = 1880
Mosquitto (MQTT server)= 1883

เกริ่นนิดเดียวนะคับ MQTT (Message Queuing Telemetry Transport) เป็นProtocol ที่ออกแบบมาเพื่อการเชื่อมต่อแบบ M2M (machine-to-machine) คือ อุปกรณ์ติดต่อหรือสื่อสารกับอุปกรณ์ โดยเป็นส่วนหนึ่งของเทคโนโลยี IoT (Internet of Things) ซึ่งเป็นเทคโนโลยีที่อินเทอร์เน็ตเชื่อมต่อกับอุปกรณ์ต่าง ๆ เช่น โทรศัพท์มือถือ รถยนต์ โทรทัศน์ ตู้เย็น เข้ากับอินเทอร์เน็ตทำให้สามารถเชื่อมโยงสื่อสารกับอุปกรณ์ต่าง ๆ ได้ โดยผ่านเครือข่ายอินเทอร์เน็ต ซึ่งจะทำให้มนุษย์สามารถ ควบคุมอุปกรณ์ต่าง ๆ จากที่อื่นได้ เช่นการสั่งปิดเปิดไฟในบ้านจากที่อื่น ๆ

http://istsos.org/en/trunk/doc/ws_mqtt.html

MQTT เป็นชื่อเรียกสำหรับโปรโตคอลนี้เท่านั้น โดยหลักการทำงานของ MQTT จริง ๆนั้นมีส่วนประกอบ 3 อย่างคือ ผู้ส่ง (publish) , ผู้รับ (subscribe) และ ตัวกลาง (MQTT broker ตัวที่เรากำลังจะสร้างนั่นแหละ) โดยผู้รับหรือผู้ส่งจะใช้อุปกรณ์ชนิดไหนก็ได้ ขอเพียงมีแอพพลิเคชั่นหรือโปรแกรมที่รองรับโปรโตคอล MQTT ก็เพียงพอแล้ว

องค์ประกอบของ MQTT

1. ผู้ส่ง (publish) มีหน้าที่ในการส่งข้อมูล/ข้อความไปยังตัวกลาง (MQTT Broker) โดยสิ่งที่ส่งจะประกอบด้วย หัวข้อ (Topic) และข้อความ (Message)

2. ผู้รับ (subscribe) มีหน้าที่คือจะต้องเชื่อมต่อกับตัวกลาง และติดตาม topic ให้ตรงกับผู้ส่ง โดยเมื่อตรงกันเรียบร้อย เมื่อผู้ส่ง ส่งข้อความมาผู้รับก็จะสามารถรับข้อความนั้นได้ หากมีอย่างใดอย่างหนึ่งที่ไม่ตรงกันก็จะไม่สามารถรับข้อความได้นั้นเอง

3. ตัวกลาง (MQTT Broker) มีหน้าที่รับข้อความจากผู้ส่งและกระจาย (Broadcast) ให้กับผู้ติดตามที่มี topic ตรงกับผู้ส่งเท่านั้น

http://www.themakerthailand.com/

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

เอาล่ะ เริ่มกันเลยดีกว่าคับ

  1. เข้าไปที่ Google Cloud Platform และ คลิก Go to console.

2. พิมพ์ ‘VM instances’ เพื่อเข้าไปหน้าจอสำหรับสร้าง instance >> คลิก CREATE INSTANCE

Google Cloud Platform หน้าตานะคับ

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 ก็สามารถเพิ่มได้เลยแบบนี้

https://cloud.google.com/blog/products/application-development/using-node-red-with-google-cloud

หลังจาก config ค่าที่เราต้องการแล้ว ก็ Create ได้เลยคับ

4. จากนั้นรอสักครู่ เราก็จะได้ VM ที่เราสร้างขึ้นมาแล้วนะคับ ให้กด SSH เข้าไปได้เลย

VM ที่เราสร้างใหม่ชื่อว่า test-server นะคับ

5. หลังจากเข้ามาที่ VM เราแล้วจะหน้าตาแบบนี้คับ

จากนั้นให้ทำการ update และ install mosquitto นะคับ

https://mosquitto.org/
sudo apt-get update
sudo apt-get install mosquitto
Installing mosquitto mqtt.
grep เช็คดูว่า mosquitto มาแล้ว

6. จนถึงขั้นตอนนี้ เราก้อมี mqtt server เป็นของตัวเองแล้วนะคับ แน่นอนว่า mqtt server ใช้ port 1883 ในการสื่อสาร เราจึงต้องไป allow port นี้ใน firewall ด้วยนะคับ

Setup Firewall Rules.
port 1880 = node-red, 1883 = mqtt protocol.

7. หลังจากที่เรามี MQTT server จาก Mosquitto แล้ว เราก้อจะใช้ External IP จาก VM ของเรามาใส่แทน Server IP ใน Node-RED ได้เลยนะคับ ซึ่งจะยังต้อง publish และ subscribe ได้ปกติ

จบล่ะคับ แล้วพบกันใหม่คับ

ps. เราสามารถเข้าไป grep เพื่อดูว่า service ของเราทำงานอยู่รึป่าวได้ เช่น ต้องการดูว่า node-red running อยู่หรือไม่

ไป grep node ดู ก้อจะเจอว่ามี “node-red” นะคับ

--

--

Grassroot Engineer
Grassroot Engineer

Written by Grassroot Engineer

ATM engineer who is interested in CODING and believe in EFFORT. — https://grassrootengineer.com

No responses yet