*แจ้งวันหยุด* ทางบริษัทจะปิดทำการวันที่ 22 และ 29 กรกฎาคม 67 ตามปฏิทินวันหยุดของไทย เพราะฉะนั้นออเดอร์จะทำการจัดส่งอีกครั้งในวันทำการถัดไป

สร้าง Datalogger ส่งข้อมูลขึ้น Google Sheet ง่ายๆด้วย IRIV

 

 

ในปัจจุบัน ภาคอุตสาหกรรมมีความต้องการอุปกรณ์ที่สามารถทำหน้าที่บันทึกข้อมูลต่างๆของระบบ ไม่ว่าจะเป็นการทำงานของเครื่องจักร หรือสภาพแวดล้อมต่างๆ อาทิ อุณหภูมิและความชื้น ด้วยเหตุผลหลายประการ ไม่ว่าจะเป็นเพื่อการรักษาควบคุมคุณภาพ รับรองความปลอดภัย นอกจากนี้อุปกรณ์เหล่านั้นควรที่จะช่วยอำนวยความสะดวกให้กับผู้ใช้งานด้วย ตั้งแต่การติดตั้งใช้งาน ไปจนถึงการจัดทำบันทึกให้ง่ายต่อการอ่านทำความเข้าใจ หรือ วิเคราะห์ เพื่อให้สามารถนำข้อมูลที่ได้ไปใช้งานได้ง่าย 

 


Image by usertrmk on Freepik

 

ดังนั้นในบทความนี้ เราจะมาลองสร้างระบบ Datalogger สำหรับตรวจบันทึกข้อมูลอุณหภูมิและความชื้นจากเซนเซอร์เกรดอุตสาหกรรมที่ใช้งานอินเตอร์เฟส RS485 โดยใช้งาน IRIV PiControl เป็นอุปกรณ์ทำหน้าที่อ่านข้อมูลจากเซนเซอร์ ประมวลผลข้อมูลที่ได้รับจากเซนเซอร์ แล้วส่งผ่านข้อมูลไปยังเป้าหมายต่างๆ ไม่ว่าจะเป็น การส่งไปบันทึกลงบน Google Sheet พร้อมระบุ Timestamp, การแสดงผลข้อมูลแบบ Real-time บน Node-RED Dashboard และแจ้งเตือนเมื่ออุณหภูมิของระบบเกินค่าที่ผู้ใช้งานได้กำหนดไว้บน Dashboard จะทำอย่างไร ลองมาเรียนรู้ไปพร้อมๆ กันครับ

 


IRIV PiControl

 

ขั้นตอนที่ 1 : เตรียม flow บน Node-RED ให้พร้อม


1. เพื่อความรวดเร็วในการสร้างโปรเจ็กต์นี้ เพื่อนๆ สามารถดาว์นโหลด flow ของ Node-RED ที่ผมได้เตรียมไว้ให้โดยการ คลิกที่นี่ ได้เลย

 

 

2. โดยหลังจากทำการดาว์นโหลดเสร็จเรียบร้อยแล้ว ที่ Node-RED flow editor คลิกที่สัญลักษณ์ขีด 3 ขีด ทางด้านขวาบน เลือก Import คลิกที่ปุ่ม Select a file to import เลือกไฟล์ flow ที่มีนามสกุล .json ที่ดาว์นโหลดไว้ แล้วกดปุ่ม Open เพื่ออัพโหลด หลังจากนั้นคลิกที่ปุ่ม Import

 

 

โดยหลังจาก upload เสร็จสิ้น จะพบว่ามี node บางตัวขึ้น error ให้ทำการดาว์โหลด node เหล่านั้น โดยไปที่เมนูสัญลักษณ์ 3 ขีดด้านขวาบนอีกครั้ง เลือก Manage pallete เลือกที่แถบ install โดยให้ทำการติดตั้ง node ตามรายการด้านล่าง เพื่อให้ flow ที่ดาว์นโหลดไปสามารถใช้งานได้

 

 

รายการ node ที่ต้องทำการติดตั้งเพิ่มเติม

  1. node-red-dashboard
  2. node-red-contrib-moment
  3. node-red-contrib-modbus
  4. node-red-contrib-line-notify-api
  5. node-trd-contrib-google-sheets

โดยหลังจากดาว์นโหลดเสร็จสิ้น ก็จะไม่ปรากฏ node ที่มีปัญหาแล้ว

 

 

ขั้นตอนที่ 2 : ทำความเข้าใจกับ flow และตั้งค่า flow

จากภาพด้านล่าง Flow นี้จะถูกแบ่งออกเป็น 5 กลุ่มหลักๆ ได้แก่


1. กลุ่มอ่านข้อมูลจากเซนเซอร์

 

 

  1. สำหรับกลุ่มนี้จะเริ่มต้นด้วยการใช้งาน Inject node ในการสั่งการให้ระบบทำการอ่านค่าจากเซนเซอร์ที่เชื่อมต่ออยู่ โดยผู้ใช้งานสามารถปรับ interval สำหรับการอ่านค่าจากเซนเซอร์ได้ที่ node นี้
  2. Switch node และ Control datalogger function (function node) ทำหน้าที่เป็น node ควบคุมการสั่งการจาก Inject node โดยเมื่อสวิตช์ใน dashboard อยู่ในตำแหน่ง On ก็จะอนุญาติให้ Inject node สั่งการให้ระบบอ่านค่าจากเซนเซอร์ได้ แต่ในทางกลับกัน เมื่อสวิตช์ใน dashboard อยู่ในตำแหน่ง Off ก็จะไม่อนุญาติให้ Inject node สั่งการให้ระบบอ่านค่าจากเซนเซอร์ได้ ทำให้ระบบทั้งหมดหยุดทำงาน
  3. Humidity และ Temperature (function node) ทำหน้าที่ระบุค่าตัวแปรต่างๆที่จำเป็นสำหรับการอ่านค่าจากเซนเซอร์ที่เชื่อมต่ออยู่
  4. Get humidity value from sensor (modbus flex getter node) ทำหน้าที่อ่านค่าจากเซนเซอร์ตามค่าตัวแปรที่ได้รับจาก Humidity และ Temperature (function node ก่อนหน้า)
  5. Convert data to °C and set to flow variable และ Convert data to % and set to flow variable (function node) ทำหน้าที่แปลงข้อมูลที่ได้จากเซนเซอร์ให้เป็นค่าที่ถูกต้อง (ทำการหารค่าที่ได้จากเซนเซอร์ด้วย 10) และส่งค่าที่อ่านได้ขึ้นตัวแปร flow สำหรับรอตรวจเทียบกับเกณฑ์ที่ได้ถูกตั้งค่าไว้บน Dashboard

 

2. กลุ่มเตรียมข้อมูลสำหรับเขียนลง Google Sheet

 

 

  1. เริ่มต้นด้วย Call and prepare data (function node) ทำหน้าที่รวมข้อมูลทั้งหมดที่ได้ ณ ช่วงเวลานั้น มาเรียงกันบน Array เพื่อส่งไปเขียนบน Google Sheet (โดยตำแหน่งของข้อมูลบน Array จะหมายถึง Column ที่ข้อมูลจะถูกเขียนลงไป)
  2. Write data to Google Sheet (Gsheet node) ทำหน้าที่ส่งข้อมูลลงไปเขียนบน Google Sheet ที่ผู้ใช้งานได้กำหนดไว้ และตามวิธีการเขียน-อ่าน Google Sheet ที่ได้ถูกกำหนดไว้
  3. Date/Time Formatter (Date/Time Formatter node) ทำหน้าที่แปลงเวลาแบบ Epoch time เป็นเวลาแบบที่มนุษย์สามารถอ่านเข้าใจได้ แล้วหลังจากนั้น จึงทำการนำตัวอักษร T และ Z ออกด้วย Remove T and Z character (change node) และลบเวลาในหน่วย millisec ออก โดยใช้ Remove millisec and set to flow (function node (ที่ภายในใช้งาน .slice() ที่เป็นหนึ่งในฟังก์ชันในการเฉือนตัวอักษรออกของ Javascript)) แล้วจึงทำการส่งค่าที่ได้ขึ้นตัวแปร flow สำหรับถูกเรียกไปเขียนบน Google Sheet ในข้อก่อนหน้า (Call and prepare data (function node))

 

3. ส่วนสำหรับการสร้าง Sheet ใหม่อัตโนมัติเมื่อผ่านเที่ยงคืนของทุกวัน

 

 

  1. Create new sheet everyday at 0.00 (Inject node) ทำหน้าที่สั่งการให้มีการสร้าง Sheet ใหม่ทุกๆ เที่ยงคืน (สามารถปรับเปลี่ยนได้) 
  2. โดยให้มีการใช้วันที่ของวันใหม่ที่มาถึงเป็นชื่อของ Sheet นั้นๆ (ปี-เดือน-วัน) ซึ่งอาศัยการแปลง Epoch time ณ ขณะนั้นเป็นเวลาทั่วไปที่มนุษย์อ่านได้ Date/Time Formatter (Date/Time Formatter node) ก่อนนำไปตั้วชื่อ Sheet ใหม่
  3. Name new sheet with timestamp (function node) มีหน้าที่ประกอบตัวอักษรทั้งหมดเพื่อตั้งชื่อ Sheet ใหม่จากข้อมูลที่ได้จาก node ก่อนหน้า (Date/Time Formatter node) รวมถึงทำการกำหนด Url สำหรับการเรียกใช้งาน API ที่เราได้สร้างไว้ ให้ Google Sheet เพื่อให้สามารถสร้าง Sheet ใหม่อัตโนมัติได้ 
  4. ทำการส่ง Http request (http request node) จากตัวแปรของ Node ก่อนหน้า (Name new sheet with timestamp (function node))

* สำหรับการสร้าง Google Sheet, Service Account และเปิดใช้งาน Google Sheet API สำหรับการใช้งานกับโปรเจ็กต์นี้ จะอยู่ในส่วนท้ายของบทความนี้

 

4. ส่วน Dashboard สำหรับแสดงผลและตั้งค่า threshold

 

 

 

  1. Temperature และ Humidity (gauge node) ทำหน้าที่แสดงผลข้อมูลที่อ่านได้จากเซนเซอร์แบบเรียลไทม์บน Node-RED Dashboard
  2. Maximum temperature slider และ Minimum temperature slider (slider node) ทำหน้าที่รับค่าที่ผู้ใช้งานจะทำการตั้งค่าอุณหภูมิสูงสุด - ต่ำสุดที่ยอมรับ ก่อนที่จะทำการแจ้งเตือนผ่าน Line เมื่อค่าเกินที่กำหนด

 

5. ส่วนการแจ้งเตือนผ่านทาง Line Notify

 

 

 

  1. Check current temperature with threshold (function node) ทำหน้าที่ดึงข้อมูลปัจจุบันที่อ่านได้จากเซนเซอร์ นำมาเทียบกับอุณหภูมิช่วงที่ยอมรับได้ที่ถูกตั้งค่าไว้บน Node-RED Dashboard โดยหากเข้าเกณฑ์ใด ก็จะทำการส่งข้อความไปยัง node ถัดไป (Line notify node) เพื่อทำการแจ้งเตือนผู้ใช้งาน
  2. โดยกรณีที่ค่าอุณหภูมิปัจจุบัน สูงกว่า หรือ ต่ำกว่า ค่าที่ถูกกำหนดไว้ ก็จะมีการส่งข้อความที่ได้ทำการตั้งค่าไว้ไปยัง Line notify node เพื่อทำการแจ้งเตือน โดยจะมี delay node ขั้นไว้ เพื่อป้องกันไม่ให้มีการแจ้งเตือนที่ถี่จนเกินไป
  3. กรณีที่ค่าอุณหภูมิกลับเข้าสู่ในช่วงที่กำหนดไว้ ก็จะมีการส่งข้อความแจ้งเตือนครั้งสุดท้ายว่าระบบกลับสู่ภาวะปกติแล้ว โดยใช้ Control data flow (function node) ขั้นไว้เพื่อป้องกันการแจ้งเตือนซ้ำ
  4. Line Notify (line notify node) ทำหน้าที่ส่งข้อมูลต่างๆ ไปยังระบบ Line Notify โดยจะต้องมีการระบุ Line Notify Token ของผู้ใช้งานด้วย (วิธีการขอ Line Notify Token สามารถอ่านได้จากบทความนี้) ซึ่งข้อมูลที่ถูกส่งผ่าน node นี้จะได้แก่ ข้อความที่ได้เตรียมไว้ และ ID ของสติกเกอร์ที่จะส่งพร้อมข้อความ 

 

โดยในส่วนที่ผู้ใช้งานควรจะต้องทำการตั้งค่าตามข้อมูลของตนเองนั้น มีดังนี้

  • ในส่วนของกลุ่มอ่านข้อมูลจากเซนเซอร์ : เนื่องจากเซนเซอร์แต่ละประเภท มีค่าตัวแปรที่ต้องกำหนดสำหรับการอ่านข้อมูลจากตัวเซนเซอร์แตกต่างกัน 

 

 

  • Call and prepare data (function node) : เนื่องจากตัวแปรข้อมูลที่ต้องการเขียนลงบน Google Sheet อาจแตกต่างกัน รวมถึงการจัดเรียงลำดับข้อมูลตามคอลัมน์บน Google Sheet ด้วย

 

 

  • Write data to Google Sheet (Gsheet node) : เนื่องจาก Google Sheet ของผู้ใช้งานแต่ละคนมีไฟล์ .json ที่จะนำไปใส่ gauth node ไม่เหมือนกัน รวมถึง SpreadsheetID ด้วย

 

 

  • Name new sheet with timestamp (function node) : เนื่องจากในส่วนของ msg.url ที่เราจะทำ http request เพื่อสั่งให้ Google App Script API ทำงานนั้น จะมี URL ที่ไม่เหมือนกัน ซึ่งจะขึ้นกับ URL ที่ระบบออกให้

 

 

  • Line Notify (line notify node) : เนื่องจาก Token ของแต่ละผู้ใช้งานจะไม่เหมือนกัน ตามที่ระบบของ Line Notify ออกให้ (สามารถอ่านวิธีการออก Line Notify Token ได้ที่นี่ คลิกที่นี่!)

 

 

 

ขั้นตอนที่ 3 : วิธีการสร้าง Google Sheet สำหรับใช้งานร่วมกับระบบ

1. ทำการสร้าง Google Sheet ตามปกติ โดยหลังจากได้หน้า Google Sheet เปล่าๆ มาแล้ว ให้ทำการคัดลอก SpreadsheetID โดยสังเกตที่ลิงก์ของหน้าด้านบนที่มีหน้าตาประมาณนี้ ให้ทำการคัดลอกตั้งแต่ตัวอักษรด้านหลัง /d ไปจนถึงตัวอักษรด้านหน้า /edit ดังตัวอย่างด้านล่าง แล้วนำ SpreadsheetID ที่ได้มาวางใน Gsheet node ในช่อง SpreadsheetID

    
https://docs.google.com/spreadsheets/d/1o5RBx_WYGF4s0NWN09BmWWydTkBsdfsfQl2exresgrdZ8/edit#gid=202324439

 

 

 

2. ทำการสร้าง Service account สำหรับให้ Node-RED เข้าไปเขียนข้อมูลบน Google Sheet โดยสามารถสร้างได้จากลิงก์นี้ คลิกที่นี่

โดยเมื่อกดเข้าไปแล้ว ก็จะพบกับหน้านี้ ให้คลิกที่ Create a project

 

 

ทำการตั้งชื่อ Project ให้เรียบร้อย แล้วกด Create

 

 

3. หลังจากสร้างโปรเจ็กต์เสร็จสิ้น จะพบกับหน้านี้ ให้คลิก Create service account

 


4. ทำการตั้งชื่อบัญชีของ service account และเขียนคำอธิบายการใช้งาน service account นี้ แล้วกด Create and continue

 


5. เลือกสิทธิ์ของ service account ให้เป็น Owner แล้วกด Continue

 


ในส่วนนี้ ไม่ต้องกรอกอะไร สามารถกด Done ได้เลย

 

 

หลังจากเสร็จสิ้น เราก็จะได้ service account สำหรับเขียนข้อมูลลงบน Google Sheet แล้ว ในอันดับต่อมา เราจะทำการสร้าง Key เพื่อให้ Node-RED สามารถเข้ามาใช้งาน service account นี้ได้ โดยทำการคลิกที่ service account ที่เราสร้างขึ้นมาโดย คลิกที่ Email service account ที่ต้องการออก Key

 

 

6. คลิกที่แถบ Keys

 

 

7. คลิกที่ Add key และเลือก Create new key

 

 

8. เลือกประเภท Key เป็นแบบ json แล้วกด Create หลังจากนั้นระบบจะทำการดาว์นโหลด key ลงบนคอมพิวเตอร์ของเราโดยอัตโนมัติ

 

 


9. ให้เรากลับไปที่ Node-RED เลือก Gsheet node ในหัวข้อ creds เลือกเป็น Add new gauth… แล้วคลิกที่รูปดินสอด้านหลัง

 


10. เปิดไฟล์ Key ที่เป็นไฟล์ json ที่ได้ดาว์นโหลดก่อนหน้านี้ ทำการคัดลอกตัวอักษรทั้งหมด นำมาวางในช่องนี้ หลังจากนั้นกด Update

 

 

 

เพียงเท่านี้ ในส่วนของ Node-RED ก็พร้อมทำงานแล้ว

11. ไปทำการเปิดใช้งาน Google Sheet API โดยคลิกที่ลิงก์นี้ คลิกที่นี่ แล้วคลิก Enable

 

 

*ตรวจสอบโปรเจ็กต์ที่เราจะเปิดใช้งาน API ให้ถูกต้อง ต้องเป็นชื่อโปรเจ็กต์ที่เราได้สร้างขึ้นมาก่อนหน้านี้

 

12. กลับไปที่ Service account คลิก Copy to clipboard

 

 

13. ไปที่ Google Sheet ที่ได้สร้างไว้ คลิกที่ปุ่ม Share แล้วเพิ่มบัญชี Service account ลงไปในช่อง Add people and groups เลือกสิทธิ์เป็น Editor แล้วกด Share

 

 

 

14. เขียน Google App Script สำหรับการสร้าง Sheet ใหม่ทุกๆเที่ยงคืนด้วย Node-RED โดยไปที่ Google Sheet เลือกเมนู Extension > Apps Script

 


15. ทำการ Rename ชื่อ script ให้เป็น create_new_sheet.gs แล้วทำการคัดลอก Script ที่เตรียมไว้ให้ นำไปวาง แล้วกด Save

 

 

 

 

function doGet(e) {
  // Accessing parameters passed in the URL
  var name = e.parameter.sheetname;
 
  // Perform your script actions here
  SpreadsheetApp.getActiveSpreadsheet().insertSheet(name);


  // Return a response (if needed)
  return ContentService.createTextOutput("New sheet has been created: " + name);
}

 

16. คลิกที่ชื่อ Project เพื่อทำการตั้งชื่อ

 

   

 

17. คลิก Deploy เลือก New deployment

 

 

18. หัวข้อ Select type เลือกเป็น Web app 

 

 

19. กรอกข้อมูลส่วนที่เหลือ โดยในส่วนของ Who has access เลือกเป็น Anyone หลังจากนั้นกด Deploy

 

 

20. หลังจาก Deploy สำเร็จ เราจะได้ลิงก์ Web app มาให้ทำการคัดลอกเก็บไว้ แล้วกด Done เพื่อปิดหน้านี้ไปได้เลย

 

 

21. กลับไปที่ Node-RED เลือก Name new sheet with timestamp (function node) แล้วนำลิงก์ที่คัดลอกมา นำไปวางในส่วนของ msg.url ดังภาพ แล้วกด Done เพื่อบันทึก

 

 


22. กด Deploy แบบ Full

 

 

23. โดยถ้าหากระบบทำงานสำเร็จ จะมีการแจ้งเตือนผ่าน Line Notify ว่า 

IRIV PiControl: ระบบมอนิเตอร์เริ่มต้นการทำงานใหม่

 

 

และถ้าหากทดสอบกด Inject Node ดูก็จะพบว่า ข้อมูลถูกเขียนลงบน Google Sheet ที่เราได้สร้างไว้แล้ว

 

     

 

ด้วยความสามารถอันหลากหลายของ Node-RED ที่ติดตั้งใช้งานอยู่บน IRIV PiControl สามารถเปลี่ยนทุกโปรเจ็กต์ของคุณให้มีความสามารถด้าน IoT ง่ายๆ ติดตามชมตัวอย่างโปรเจ็กต์ด้านอุตสาหกรรมที่จะนำ IRIV PiControl และ Node-RED ไปประยุกต์ใช้งานได้อีกมากมาย

สอบถามรายละเอียดเพิ่มเติมเกี่ยวกับโปรเจ็กต์นี้ หรือ IRIV PiControl ได้ที่ช่องทางต่อไปนี้

Facebook : Cytron Thailand

Line Official : @cytronth

Email: th.support@cytron.io

อุปกรณ์ฮาร์ดแวร์


โพสต์ที่เกี่ยวข้อง

IRIV PiControl เชื่อมต่ออินเตอร์เน็ตผ่านสัญญาณ 4G ด้วย EC25

IRIV PiControl เชื่อมต่ออินเตอร์เน็ตผ่านสัญญาณ 4G ด้วย EC25

รีโมท SSH ด้วย PiTunnel ไปยัง IRIV PiControl ที่สามารถเชื่อมต่ออินเตอร์เน็ตผ่านสัญญาณ 4G ด้วยโมดูล Quectel EC25..