2) Node‐RED - vasu-kmitl/gcp_iot GitHub Wiki

Install Node-RED

  • เปิด SSH (Secure Socket Shell) ซึ่งเป็น terminal หรือ command line window ในการเชื่อมต่อกับ VM instance

    image

  • หน้าต่าง SSH จะถูกสร้างขึ้น (แต่ละ VM สามารถสร้างได้หลายหน้าต่างเพื่อทำงานคู่ขนานกันได้)

    image

  • Update / upgrade OS & components

sudo apt update
sudo apt upgrade
  • สร้างและติดตั้ง NodeJS (Core สำหรับการติดตั้งและรัน Node-RED)
    • NodeJS มีการทำเวปลิงก์เก็บชุดคำสั่งในการสร้างตัว NodeJS สำหรับแต่ละเวอร์ชั่นไว้ (deb.nodesource.com)
    • ให้ทำการตรวจสอบเลขเวอร์ชั่นปัจจุบันของ NodeJS จาก https://nodejs.org/en โดยเลือกเวอร์ชั่นที่ระบุว่าเป็น LTS (Long term stable)
    • ตัวอย่างข้างล่างนี้เป็นคำสั่งสำหรับเวอร์ชั่น 18.18.0 LTS (ให้ระบุเป็น 18.x โดยไม่ต้องสนใจเวอร์ชั่นย่อย)
curl -sL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt install -y nodejs build-essential
  • ติดตั้ง Node-RED
sudo npm install -g --unsafe-perm node-red
  • ที่จริงเมื่อถึงจุดนี้ เราสามารถรันโปรแกรม node-red ได้แล้ว แต่เพื่อความสะดวกให้ไม่ต้องมารันโปรแกรมนี้แบบ manual ทุกครั้ง จึงทำการติดตั้ง Production Process Manager และสร้าง auto-boot เพื่อรัน Node-RED อัตโนมัติและทำงานเป็น background ดังนี้
sudo npm install -g --unsafe-perm pm2
pm2 start `which node-red` -- -v
pm2 save
pm2 startup
  • สำคัญ คำสั่งสุดท้ายข้างต้น pm2 startup จะสร้างชุดคำสั่งเพิ่มเติมขึ้นมา ให้ทำการ copy และ paste คำสั่งดังกล่าวแล้วกด enter เพื่อรัน จึงจะเสร็จสิ้นการติดตั้ง

image image

  • ตรวจสอบว่า Node-RED กำลังรันอยู่หรือไม่โดยใช้คำสั่ง
ps ax|grep node
  • ต้องมี node-red แสดงในรายชื่อโปรแกรม

image

  • สามารถรัน Node-RED บนโปรแกรม browser (เช่น Chrome, Edge, Safari เป็นต้น) ทาง external IP address แล้วระบุต่อท้ายด้วย port 1880 เช่น ตัวอย่างต่อไปนี้
    • หากไม่สามารถเชื่อมต่อได้ให้ตรวจสอบการกำหนด firewall ให้ถูกต้อง

image

Setup HiveMQ (for testing)

  • สร้าง MQTT client บน public broker เช่น HiveMQ
    • เข้าเวป https://www.hivemq.com/demos/websocket-client/

    • คลิก Connect

      image

    • คลิก Add New Topic Subscription

    • ระบุ topic ที่ต้องการ subscribe เช่น ae_iot/# แล้วคลิก Subscribe

      image

    • ทดลอง publish (บน client เดียวกัน) ไปยัง topic เช่น ae_iot/from_web ด้วยข้อความที่ต้องการ เช่น 'hello'

      image


My First Flow

  • กลับมาที่หน้าต่าง Node-RED บน browser ที่สร้างไว้บนขั้นตอนก่อนหน้า
  • ลาก inject node และ debug node (จาก Common pellet) และ mqtt in node และ mqtt out node (จาก Network pellet) แล้วลากเส้นเชื่อมต่อดังภาพ

image image

image

  • ดับเบิลคลิก เพื่อแก้ไข inject node เปลี่ยนชนิดข้อมูลของ Payload จาก timestamp เป็น string

    image

  • พิมพ์ข้อความที่ต้องการส่งตามที่ต้องการ เช่น 'hi' แล้วคลิก Done

    image

  • ดับเบิลคลิก เพื่อเข้าแก้ไข mqtt out node

  • คลิก ปุ่มดินสอ image เพื่อเพิ่ม mqtt-broker

  • ป้อนลิงก์ของ MQTT broker ที่ใช้ เช่น mqtt-dashboard.com (สำหรับ Hive MQ) แล้วคลิก Add

    • ค่าอื่น ๆ อาจปรับตามความเหมาะสม โดยอาจใช้ตามที่เป็นอยู่ก่อนเพื่อคว่ามสะดวก

    • อาจเพิ่มความปลอดภัยโดยกำหนด username / password ในแท็บ Security ทั้งนี้ขึ้นกับการกำหนดค่าในฝั่ง broker ด้วย

      image

  • กำหนด topic ที่ต้องการ publish เช่น ae_iot/from_nodered แล้วคลิก Done

    ![image](https://github.com/vasu-kmitl/gcp_iot/assets/135559205/7b0a6911-f3f7-4c98-baba-e9c768d85a3d)
    
  • ดับเบิลคลิก เพื่อเข้าแก้ไข mqtt in node

  • เลือก Server เป็นค่าเดียวกับฝั่ง mqtt out

  • กำหนด topic ที่ต้องการ subscribed เช่น ae_iot/# แล้วคลิก Done

    image

  • Flow Diagram ที่ได้จะมีลักษณะดังนี้

    • หากมีสัญลักษณ์รูปสามเหลี่ยมสีแดงบน node ใด แสดงว่า node นั้นมี error ให้อ่านและแก้ไขให้ถูกต้อง

    image

  • เมื่อทุกอย่างถูกต้องให้กด image เพื่อ deploy (สั่งใช้งาน) Flow ที่สร้างขึ้น

  • หากสามารถเชื่อมต่อกับ broker ได้ MQTT nodes จะแสดงสถานะ connected

image

  • คลิกปุ่ม image เพื่อเปิดหน้าต่างแสดงข้อมูลการ debug

image

Test the Flow

  • ทดลองพ่นข้อมูล (inject) โดยกดปุ่ม inject ข้อมูล
    • ข้อมูลจะถูก publish ผ่าน mqtt out node ไปยัง MQTT broker ที่ตั้งไว้
    • MQTT broker จะ publish ส่งต่อข้อมูลออกมายัง client ที่ subscribed topic ที่เกี่ยวข้อง ซึ่ง mqtt in node ได้ subscribed เอาไว้
    • เมื่อ mqtt in node ได้รับ message จาก broker จะส่งข้อมูลมาแสดงผลในหน้าต่าง debug ที่กำหนดไว้เป็นปลายทางของข้อมูล

image

  • หากเปิดดูใน HiveMQ ก็จะเห็นว่าได้รับ message ที่ subscribed ไว้เช่นกัน

image

  • เช่นเดียวกัน หากทำการ publish จาก HiveMQ บน topic ที่เกี่ยวข้อง ฝั่งของ Node-RED ก็จะได้รับ message เหมือนกัน

image

image

  • จบในส่วนของ Node-RED ตอนต่อไปจะทำ broker ใช้เองล่ะ (Mosquitto)