ทำความรู้จักกับ Function ใน Node-red x DrZin

L Pasawee
Dr-Zin
Published in
3 min readAug 18, 2019

ทำความรู้จักกับ Function node ใน Node-red เป็น node ที่เราสามารถเขียน javascript ลงไปเพื่อเพิ่มลูกเล่นต่างได้ๆ Function จะรับ msg เป็น Input และ Output เป็น msg เช่นกัน

ต้องรู้อะไรมาก่อน ???

  • JavaScript เบื้องต้น + JSON
  • Node-red เบื้องต้น

Function คืออะไร ???

Function เป็น node ประเภท function ใน Node-red สามารถใส่ JavaScript เพื่อเล่นกับ msg Object ได้ function node จะรับค่าเข้ามาเป็น msg Object และส่งค่าออกไปเป็น msg Object หรือ null ได้

msg Object ที่รับเข้าไปจะต้องมี property payload ( สำคัญมาก ) หน้าตาของ msg Object จะเป็น แบบนี้

topic : เราจะเอาไว้กำหนด หัวข้อเพื่อทำ Function ที่มี Output หลายตัว

payload : ข้อมูลที่ใช้ส่งหากัน ภายใจ Node-red

ลาก function node มาวางบน Flow แล้วดับเบิลคลิ๊ก

Name : กำหนดชื่อให้กับ node นี้

Function : ส่วนที่จะใส่ JavaScript ลงไปเพื่อทำอะไรก็ตามแต่ใจนึก

เรามาเจาะลึกในส่วนของ Function กันเนื่องจาก function node จะรับข้อมูลเข้ามาเป็น msg Object เราจะมาอธิบายการใช้งาน JavaScript เพื่อเข้าถึง msg Object

เข้าถึง Payload ใน msg Object

var payload=msg.payload;

เปลี่ยนแปลงค่าของ payload

โดยที่ new_payload เป็นข้อมูลใหม่ที่เราต้องการกำนดเป็นอะไรก็ได้เช่น int, float, char, object

msg.payload=new_payload;

เข้าถึง Topic ใน msg Object

var topic = msg.topic;

เปลี่ยนแปลงค่าของ Topic

โดยที่ new_topicload เป็นข้อมูลใหม่ที่เราต้องการกำนดมักกำหนดเป็น คำหรือตัวอักษร

msg.topic = topic;

เพิ่ม property ใหม่ให้ msg Object ได้

var  newvalue;
msg.newproperty = newvalue;

ลองใช้งาน Function กัน

ลาก node ตามในรูปมาวางบน Flow

เปลี่ยนค่าที่ส่งออกมาจาก inject เป็น String คำว่า “Lower case” และ Topic เป็น “Lower Case” ดังนี้

เข้าไปที่ function เราจะให้ function รับ payload และ topic มา หลังจากนั่นให้เปลี่ยนเป็น ตัวใหญ่ก่อนส่งออกไป ด้วย msg Object

เสร็จแล้วกด ที่ inject จากนั่นมาดูผลกันที่ แท็บ debug เราจะเห็นว่า payload กับ topic เปลี่ยนเป็นตัวใหญ่แล้ว

ทำให้ Function มี 2 output

เข้ามาดูในหน้า setting ของ function กันอีกครั้งข้างล่างสุด เราจะเห็นว่ามี สิ่งที่เรียกว่า output และเราสามารถเลือกให้มันมีมากกว่า 1 output ได้

การที่เราจะ มีมากกว่า 1 output ทำได้โดยการที่เรา return ค่าออกไปเป็น Array ที่มี msg Object อยู่ภายใน แบบนี้ ตามโค้ดด้านล่างหมายความว่า output 1 จะได้รับ msg1 และ output2 จะได้รับ msg2

return [msg1,msg2];

ลองทำกันดีกว่าเริ่มจาก ลาก node แบบในรูปลงมาบน Flow

ตั้งค่าให้ inject ตัวแรกส่งข้อมูล Hello test1 และ Topic เป็น test1

ตั้งค่าให้ inject ตัวแรกส่งข้อมูล Hello test2 และ Topic เป็น test2

ต่อมาเข้าไปที่ function และเพิ่มโค้ดตามนี้เข้าไป เพื่อแยก output ออกมาตาม Topic ที่ส่งเข้าไป โดยให้ test1 มี output เป็น msg1 และ test2 มี output เป็น msg2

Function 1 output แต่มี หลาย msg Object

ในการ output หลาย msg Object เราต้องทำให้ function return แบบมาเป็น Array ลักษณะแบบนี้

return [msg_object_array];

ลาก node แบบในรูปมาวางบน Flow

กำหนดให้ inject ส่งข้อมูลมาเป็น String คำว่า Test String และใน function เราจะกำนหนดการทำงานให้ เพิ่มเลขต่อท้าย payload และสร้างเป็น msg Object ใหม่จำนวน 3 Objectตามตัวอย่างด้านล่าง

กดที่ inject และรอดูผลลัพธ์ได้ที่ แท็บ debug จะเห็นแบบนี้

บันทึก Function ไว้ใช้ซ้ำได้ด้วยนะ

เข้ามาใน function node เราจะเห็น ไอคอนรูปหนังสือที่ด้านขวาของ name กดเข้าไปดูเราจะเห็นว่าทำได้ 2 อย่างคือ Open Library และ Save to Library

Open Library : เรียกดูและใช้ function ที่เคยบันทึกไว้

Save to Library : บันทึก Function ปัจจุบันลงใน Library

จบไปแล้วกับการสอนใช้ Function node ถือว่าเป็น node ที่สำคัญมากในการใช้งาน Node-red เพราะมันจะทำให้ตัว Node-red มีการทำงานที่ยึดหยุ่นมากขึ้น ยังไงก็ลองไปใช้กันดูนะครับ

--

--