Apply Node-RED to Google Sheet.

Grassroot Engineer
3 min readJul 18, 2020

บทความนี้จะนำทุกท่านประยุกต์ใช้ node-red เพื่อเก็บข้อมูลใน Google sheet นะคับ โดยผมขออนุญาตข้ามขั้นตอนการติดตั้ง node-red ไปเลยนะคับ และจากบทความนี้ node-red ของผม run อยู่บน Google cloud service แล้วนะคับ

  1. ในหน้า node-red ให้ติดตั้ง node-red-contrib-google-sheets ผ่านทาง tab Palette นะคับ

2. จากนั้น nodes ด้านซ้ายจะพบ GSheet เพิ่มเข้ามา (function / GSheet).

3. ทดลองส่งค่า timestamp เข้าไปใน GSheet โดยใช้ node 2 ตัวนะคับ คือ inject (common) และ GSheet (function).

4. double click เข้าไปที่ GSheet เพื่อ Edit node ดังนี้นะคับ

แต่ค่าใน creds (credential) เรายังไม่มีนะคับ ให้ไปที่ Google cloud platform เพื่อสร้าง service account ขึ้นมาดังนี้
(จริงๆแล้ว ใน service account เปรียบเสมือนเราสร้าง account ขึ้นมาเพื่อให้มาทำหน้าที่แทนเราในการ insert data เข้าไป Google sheet นั่นเอง)

ถัดไปให้ตั้งชื่อ Service account name และคลิก CREATE ตามรูปด้านล่างคับ
ถ้ามี optinal ให้เลือกต่อ ก้ออ่านและ CONTINUE และ DONE ได้เลยนะคับ

หลังจากนั้นเราจะได้ Service account ขึ้นมาที่ยังไม่มี keys นะคับ ตามรูปด้านล่าง

ให้ทำการคลิกและเลือก create key โดยเลือก Key type เป็น JSON >> CREATE นะคับ

จากนั้น Private key จะถูกเก็บใน folder download หรือ ตามที่เราระบุไว้นะคับ

5. ให้เราทำการเปิด private key ที่เป็น json ขั้นมาด้วย text editor และทำการ copy ค่าทั้งหมดออกมาคับ
(ชื่อไฟล์จะประมาณนี้คับ noderedserver1–9d0f77b333af.json)

และกลับไปที่ node-red และตั้งค่าให้กับ node GSheete โดยเริ่มจากวาง private key เข้าไปตามรูปด้านล่างคับ จากนั้นคลิก Add

หลังจากคลิก Add แล้วก้อจะกลับมาหน้าเดิมนะคับ ให้เลือก Method เป็น Append Row.

6. ต่อไปค่าที่ต้องใส่ใน SpreadsheetID ก้อคือ id จาก Google sheet ที่เราต้องการเก็บค่านะคับ

จากในรูป url google sheet คือ https://docs.google.com/spreadsheets/d/1sDHSzHyKi3mezfBYFnyTTCNWo_ccvkYfW2WYSHKfvk0/edit#gid=0
ฉะนั้น spreadsheet id = 1sDHSzHyKi3mezfBYFnyTTCNWo_ccvkYfW2WYSHKfvk0 นะคับ เป็นค่าระหว่าง /d/.../

โดยนะค่า id นี้ไปใส่ในช่อง SpreadsheetID

7. ต่อไป Cells และ Name ให้เลือก

Sheet1!A1:B2
Google sheet ตามลำดับนะคับ
เมื่อกรอกครบให้ ให้กด Done.

8. เมื่อ set ค่าครบแล้วให้เราทำการ Deploy ได้เลยนะคับ โดยในรูปผมได้เพิ่ม debug node เข้ามาด้วยเพื่อดู log ด้านขวามือนะคับ (อ้าว error นี่หว่า)

9. Error permission เพราะว่า Google sheet ยังไม่อนุญาตให้ Node-red เข้าไปแก้ไขข้อมูลได้นะคับ จึงต้องไป allow ใน Google sheet ก่อน

จำเป็นนะคับ ต้อง allow Editor ให้กับ Email ที่เป็น Service account ของเราด้วย จากนั้นกด Send

10. สำเร็จแล้ว !!! ค่าที่เรา inject สามารถ write เข้ามาที่ Google sheet ได้แล้วนะคับ

ps. ในกรณีที่ยังไม่สามารถ write ค่าเข้ามาได้ให้ไปเช็คที่ Google Cloud Platform ก่อนโดยให้ ENABLE ด้วย

กรณีที่ Disabled ไว้ log จะโชว์ลักษณะนี้นะคับ

หรือ ถ้ายังไม่สามารถ write data ได้อีกให้ลองเข้าไปเพิ่ม ip และ port ใน Firewall ของ Google Cloud Platform นะคับ โดยพิมพ์ว่า “Firewall” ในช่อง Search products and resources ได้เลย

โดยเราสามารถเข้าไป CREATE FIREWALL RULE หรือ Edit ค่าตามที่เราต้องการ allow ได้เลย

--

--