วันเสาร์ที่ 29 สิงหาคม พ.ศ. 2558

Node-RED–Hello World

Hello World ดูเหมือนจะเป็นคำที่ใช้กันบ่อย ในการจะเริ่มทดลองกับงานใดๆ ที่อยากจะรู้ว่า การติดตั้งส่วนประกอบต่างๆ สมบูรณ์ดีแล้วหรือยัง
ตามนี้เลยครับ
เปิด Node-Red server ทบทวนกันนิดนึง
เปิด Command prompt เลือกให้ Run as Administrator ลองดูนะว่าจำเป็นหรือไม่
พิมพ์ node-red หน้าจอจะแสดงข้อความ ส่วนสำคัญคือบรรทัดที่แสดงว่า Node-RED server ทำงานแล้ว คือ http://127.0.0.1:1880
สองบรรทัดแรกต่อจาก Welcome to Node-RED จะแสดงเวอร์ชั่นของ Node-RED และ Node.jsหน้าจออาจแสดงบรรทัดอื่นๆเพิ่มเติม หรือแสดงบรรทัดต่อเนื่องไปเรื่อยๆ ซึ่งเกิดจากการทำงานของ Flow ที่เราเขียนไว้ ถ้าเรายังไม่มีการเขียน Flow ใดๆเลย การแสดงผลก็จะหยุดนิ่ง ตอนนี้หน้าจอจะไม่รับคำสั่งใดๆ นอกจากคำสั่งหยุดหรืออกจากการทำงาน ซึ่งก็คือ CTRL+C เท่านั้น
จากนั้นเปิด Browser ในช่อง Address พิมพ์ http://127.0.0.1:1880 หน้าจอ Editor จะปรากฏขึ้น
ทำการสร้าง Sheet ใหม่ โดยการกดที่เครื่องหมาย +
image
จะปรากฏ Sheet ใหม่ขึ้น
image
หรือกดที่เมนู รปขีด 3 ขีด จากนั้น ให้เลือก Workspaces –> Add ก็จะได้ Sheet ใหม่เช่นกัน
จากนั้นไปที่แท๊ป input ลาก inject มาวางใน sheet ตามด้วย debug ที่อยู่ในแท๊ป output
จัดการโยงสาย (wiring) ตามรูป
image
จะเห็นว่ามีวงกลมสีฟ้าอยู่ที่มุมบนขวาของทั้งสองตัว ซึ่งแสดงว่ายังไม่มีการบันทึก ให้กดปุ่ม Deploy ที่อยู่ด้านบนขวาของ browser
วงกลมสีฟ้าจะหายไป แต่จะกลับปรากฏขึ้นมาอีกถ้าเรามีการแก้ไขส่วนหนึ่งส่วนใด
เอาหละถึงขั้นตอนกำหนดค่ากันแล้ว ให้เลือกตัว inject ซึ่งตอนนี้จะเห็นคำว่า timestamp ทำการดับเบิ้ลคลิ๊ก
image
เลือก Payload เป็นแบบ string พิมพ์คำว่า Hello world หรือคำอื่นๆ ในช่องถัดลงมา นอกนั้นปล่อยไว้ กดปุ่ม OK
กดปุ่ม Deploy ตอนนี้ Flow ของเราก็พร้อมทำงานแล้ว
ให้เปิดแท๊ป debug ด้านขวาของ browser เพื่อดูการส่งผล
ที่ inject ซึ่งตอนนี้เปลี่ยนเป็นคำว่า Hello world เรียบร้อยแล้ว ที่ด้านซ้ายของตัวมันจะมีรูปสี่เหลี่ยม
image
ชี้เม้าส์แล้วกด สังเกตุที่ช่อง debug จะแสดงคำว่า Hello world ขึ้นมาทุกครั้งที่เรากด
ใน inject node เองยังสามารถกำหนดค่าอื่นๆได้อีก ให้ลองเปลี่ยน Repeat เป็นแบบ Interval ตั้งค่า Every เป็นค่าเวลาที่เราต้องการ กดปุ่ม OK ตามด้วย Deploy จากนั้นกดปุ่มที่ inject node คำว่า Hello world จะแสดงในช่อง debug ตามคาบเวลาที่เรากำหนดให้ ถ้าจะให้ทำงานทันทีที่ deploy ก็ติ๊กที่ Inject once at start?
image
ให้เลือก debug tab and console ในช่อง to ความหมายคือ ที่ console หรือหน้าต่าง Command prompt จะแสดงการทำงานไปพร้อมกันด้วย ลองดูที่ Console หลังจากกด deploy
ตัว Server จะทำงานคำสั่งใน Flow ถึงแม้เราจะปิด Editor ไปแล้ว ให้ทดลองปิด browser แล้วดูหน้าต่าง Console ยังมีการแสดงผลการ debug ต่อเนื่องไปจนกว่าเราปิดการทำงานของ server และเมื่อเปิด server ขึ้นอีกครั้ง การทำงานของ Flow ก็จะเริ่มต้นขึ้นอีกครั้ง ถึงแม้เราจะไม่ได้เปิด Editor เลยก็ตาม
เอาหละครับ Hello world ก็น่าจะสมบูรณ์ตามนี้ หน้าต่อไปเราจะไปเล่นกับเรื่องที่จะมองเห็นภาพในการใช้งานเพิ่มมากขึ้น ก็จะเป็นเรื่องการฝากข้อมูล ดึงข้อมูล ติดตามกันต่อนะครับ



Node-RED ติดตั้งหลายอย่างที่จำเป็น

Node-RED อยู่บนฐานของ Node.js จึงหลีกเลี่ยงไม่ได้ที่จะต้องติดตั้ง Node.js เสียก่อน
ขออนุญาตที่จะไม่ลงรายละเอียดวิธีติดตั้ง ให้เข้าไปที่ https://nodejs.org/download/

image
เลือกว่าเครื่องของเราเป็นแบบไหน ทำการติดตั้ง ซึ่งสุดท้ายแล้วทำการทดสอบว่าการติดตั้งสมบูรณ์หรือไม่
ด้วยการเปิด Command prompt พิมพ์ node –v
การติดตั้ง Node-RED จำเป็นใช้ตัวช่วยติดตั้งคือ NPM ปกติแล้วจะถูกติดตั้งมาพร้อมตอนติดตั้ง Node.js
ทำการตรวจสอบด้วยการพิมพ์ NPM –v
image
ผลที่แสดงออกมาจะระบุรุ่นของ Node.js และ NPM

ทำการติดตั้ง Node-RED ด้วยการพิมพ์
npm install –g node-red
ติดตั้งแล้วทดลองเรียกใช้ Node-RED ด้วยการพิมพ์
node-red
image
เปิดหน้านี้ค้างไว้ เนื่องจากเป็นการทำงานของ Node-RED server
กรณีจะปิดให้กดปุ่ม Ctrl และ c พร้อมกัน สองครั้ง ซึ่งจะเป็นการปิดการทำงานของ Node-RED server
ดูที่บรรทัดสุดท้าย จะเห็นว่า จะทำการเรียกใช้งานผ่าน Browser
เปิด Browser แล้วพิมพ์ http://127.0.0.1:1880/ หรือ http://localhost:1880
image
จะพบกับหน้าตาของ wiring editor
ขั้นตอนการติดตั้งไม่ยุ่งยากนัก ตอนต่อไปจะเริ่มลงมือสร้าง Flow แบบง่ายๆ


Node-RED คืออะไร

image

เค้าว่ากันว่า Node-RED is a visual tool for wiring the Internet of Things ซึ่งในความหมายของ Internet of Things คือส่วนของ Hardware devices, APIs ชุดคำสั่งในการโต้ตอบกับ Hardware, Online services หน่วยงานบริการต่างๆ ทั้งที่ใช้ได้ฟรีและเสียเงิน

image

ใช้ Browser ในการเขียน Flow จะเรียกว่าเขียนก็ไม่ถูกต้องนัก เอาเป็นว่าหยิบมาวาง แล้วก็กำหนดค่าการทำงาน จากนั้นก็ลากสาย (wiring) เชื่อมโยงกันไปมา ก็จะได้สิ่งที่ต้องการ
Node-RED สร้างบน Node.js ทำให้สามารถเชื่อมโยงกับโมดูล ที่กำเนิดบนโครงสร้างเดียวกันได้มากมาย คุณสามารถเพิ่มโมดูล Arduino โดยอาศัย Firmata ติดต่อกับฐานข้อมูลแบบ NoSQL อย่าง Mongodb ติดต่อควบคุมกับ Raspberry Pi และอื่นๆอีกมากมาย
ผมยังได้เห็นตัวอย่างที่ไม่เกี่ยวกับ Hardware เลย อย่างข้อมูลราคาหุ้น ผลการแข่งขันเทนนิส พยากรณ์อากาศ ราคาน้ำมัน นั่นก็คือ มีบริการไหนบนอินเตอร์เนต ก็สามารถเรียกเข้ามาแสดงผล บันทึก โดยอาศัยการ wiring ของ Node-RED กับหน่วยบริการนั้นๆได้


Node-Red เกริ่นนำ

    ได้ยินเรื่อง IoT (Internet Of Thing) มานานพอควร แต่ก็จินตนาการไม่ออกว่ามันจะเอาไปทำอะไรได้ เห็นว่าจะเอาไปติดตั้งไว้ในตู้เย็น ถ้าของในตู้ถูกใช้ไปถึงจำนวนที่ต้องสั่งซื้อ ตัวคอมพิวเตอร์ในตู้เย็นก็จะส่งคำสั่งซื้อแทนเรา ระบุว่าจะสั่งอะไรเท่าไหร่ ผมก็คิดเอาว่าเราก็เห็นอยู่แล้วว่ามันหมด เราก็สั่งซื้อเองก็ได้ ดูแล้วก็ไม่เห็นจะเป็นประโยชน์ตรงไหน

    ยิ่งนานวัน กระแส IoT ก็ไม่ได้ซาลง กลับมีอะไรต่อมิอะไรเกิดตามกันมาอีกเป็นขบวน อีกสิ่งที่มีมาคู่กัน คือเรื่องของ Cloud Server, Cloud Computing อันนี้ไม่แน่ใจว่า อันไหนมาก่อน แต่ทั้งสองสิ่งเสริมกัน

    ทำไมจึงยกเอาเรื่องของ Node-Red ขึ้นมาเขียน เป็นเหตุผลที่ว่าตัวมันเป็น Middleware ที่ทำหน้าที่เป็นตัวกลาง เป็นทางผ่านเข้าออกกของข้อมูล ตัวมันเองไม่ได้ทำให้เกิด Input และก็ไม่ได้ทำให้เกิด Output แต่จะทำหน้าที่นำเอา Input มาปรับสภาพให้พร้อมที่จะส่งไปยัง output เพื่อเก็บบันทึก แสดงผล ไม่ว่าจะส่งไปที่อีเมล์ ทวิตเตอร์ เก็บข้อมูลลงในไฟล์ แสดงข้อมูลบน IoT device เช่น พยากรณ์อากาศ บนจอ OLED แสดงผลบน web browser

    จากที่เมื่อไม่นานมานี้ ได้มีนวัตกรรมใหม่ที่พลิกโฉมการสร้าง wifi device ออกมาสู่ตลาด ในราคาที่ถูกมากๆ หลายคนคงคุ้นกับ ESP8266 ปัจจุบันออกมาหลายรุ่นแล้ว โดยส่วนตัวแล้วผมชอบงานอดิเรกเกี่ยวกับอิเล็กทรอนิกส์ ก็อดไม่ได้ที่จะต้องทดลองดู สำเร็จบ้างไม่สำเร็จบ้าง ผมเห็นการทดลองของเพื่อนๆ ที่ได้นำเสนอในเฟสบุ๊กล้วนน่าสนใจ

    แต่มองดูแล้วเหมือนจะขาดอะไรอยู่ โดยที่ ESP8266 เป็น IoT devices ซึ่งเป็นส่วนหนึ่งขององคาพยพ (ไม่รู้เขียนถูกหรือป่าว) มันสามารถเป็น Input เป็น output ถามว่าจะให้มันทำหน้าที่อื่นๆด้วยได้ไหม ก็ต้องบอกว่าได้ แต่มันดูจะเกินกำลังเกินไป

    สิ่งที่ IoT device ทำได้ไม่ดีนัก ก็คือ การให้บริการข้อมูล การแสดงผลที่ดูสวยงาม การประเมินผลเพื่อแจ้งเตือน ทั้งหมดนี้จึงต้องพึ่งบริการของ Middleware ซึ่งมีอยู่หลายตัว ไม่เฉพาะ Node-Red ที่เป็นพระเอกของเรา