สวัสดีครับ หลังจากที่ก่อนหน้านี้ได้เขียน Tutorial (บทความสอน) เกี่ยวกับ Smart Home (SmartNode 1) (https://blog.netpie.io/archives/399) และการใช้งาน NETPIE Freeboard (https://blog.netpie.io/archives/198) เบื้องต้นไปแล้ว ก็หวังว่าท่านผู้อ่านน่าจะได้ลองทำตามและเริ่มทำความเข้าใจกับการใช้งาน NETPIE ได้มากขึ้นแล้วนะครับ
ในบทความนี้ผมก็จะลองมาอธิบายถึงภาพรวมของอุปกรณ์ภายใน NETPIE เพื่อให้เข้าใจได้มากขึ้นครับผม ซึ่งผมแนะนำว่าถ้าใครเป็นมือใหม่จริงๆ หากยังไม่ได้อ่านบทความที่ผ่านๆ มาของผมเลย อาจจะทำให้งงๆ ได้ครับ ดังนั้นผมแนะนำว่า ควรอ่านหรือทำตามบทความข้างบนของผมก่อนจะทำให้เข้าใจได้มากขึ้นนะครับ สำหรับใครที่ติดตามมาจากบทความของผมมาจนถึงบทความนี้อยู่แล้ว ก็จะสามารถอ่านเข้าใจได้ง่ายครับผม
1.เรื่องของ NETPIE Account, Application และ AppID หลังจากตอนที่เราได้สมัครเข้าใช้งาน NETPIE แล้ว เราก็จะได้ NETPIE Account (บัญชีผู้ใช้ NETPIE) เป็นของตัวเอง ซึ่งบัญชีผู้ใช้ของเรานั้นก็จะเป็นเหมือน "ศูนย์กลางของระบบ" โดยจะมีองค์ประกอบย่อยคือ Application (แอพพลิเคชั่น) ซึ่งในบัญชี NETPIE ของเราจะสามารถสร้าง Application ได้หลายๆ Application โดย Application ก็จะคล้ายๆ กับ การสร้าง "กลุ่ม" ขึ้นมาไว้จัดระเบียบอุปกรณ์ ซึ่งอาจจะสร้างหลายๆ กลุ่มก็ได้ โดยกลุ่มที่สร้างขึ้นมาตอนแรกก็จะเป็นกลุ่มเปล่าๆก่อน และเราจะก็ทำการเพิ่ม "สมาชิก" เข้าไปทีหลัง ซึ่งสมาชิกเหล่านั้นก็คือเหล่าอุปกรณ์บอร์ดของเรานั่นเอง
ตัวอย่างเช่น ผมจะทำระบบ Smart Home ให้กับบ้านเล็กๆ 3 หลัง คือ บ้านของผมที่ลาดกระบัง บ้านของพ่อที่จังหวัดนครปฐมและบ้านของแม่ที่จังหวัดกาฬสินธุ์ ผมก็จะทำการสร้าง Application ขึ้นมา 3 แอพพลิเคชัน ดังนี้
เมื่อเราสร้าง Application หนึ่งขึ้นมาตอนที่เราตั้งชื่อ App นั้น ก็จะเป็นการตั้ง AppID ด้วย (ชื่อ Application = AppID) โดย App ID นี้ จะเป็นสิ่งที่ใช้ระบุและบอกอุปกรณ์ ว่าตัวอุปกรณ์นั้นๆ ทำงานอยู่ใน Application ใด โดยที่ AppID ทั้งหมดในระบบ NETPIE จะไม่สามารถตั้งชื่อซ้ำกับของคนอื่นได้ และอุปกรณ์ทุกอุปกรณ์ที่เราเพิ่มเข้าไปไว้ทำงานใน AppID เดียวกัน จะสามารถสื่อสารทำงานร่วมกันได้ ภายใน AppID ของตัวเอง ส่วนอุปกรณ์ที่เราสร้างให้ทำงานในคนละ App ID กัน จะไม่สามารถคุยกันข้าม App ได้ เช่น เซนเซอร์ตรวจจับความเคลื่อนไหวที่ทำงานในบ้านผม (ใน AppID : NarinSmartHome) จะไม่สามารถบอกให้หลอดไฟที่อยู่ในบ้านของพ่อ (ใน AppID : MyDadsHome) ให้ทำงานได้ครับ
2.Key กับ Secret คืออะไร? หลังจากที่ได้พูดถึงเรื่องของ Application และ AppID ไปแล้ว ต่อไปก็จะเป็นเรื่องของ Key และ Secret
เมื่อตอนที่เราสร้าง Application ขึ้นมาใหม่ๆ นั้นก็เท่ากับว่าเราได้ “ระบบ” ที่ยังไม่มีอุปกรณ์ใดๆ อยู่ในระบบเลย
ซึ่งการที่เราจะเพิ่มอุปกรณ์ที่เราสร้างขึ้นมา ให้เข้าไปทำงานอยู่ในระบบ (ใน AppID) นั้น เราจะต้อง สร้าง "Key" ขึ้นมา โดย Key นั้นคือ “รหัสที่อุปกรณ์จะนำไปใช้ในการเข้าสู่ระบบ” คือถ้ามอง Application ใน NETPIE ของเราว่าเหมือน Facebook Twitter หรือ Social Media อื่นๆ ที่เราใช้คุยกันแชทกัน
การที่เราจะเข้าไปอยู่ในระบบ ไปคุยกันได้ ตอนแรกเราก็ต้องทำการสมัครใช้งาน เพื่อให้ได้ Username และ Password มา เพื่อที่จะนำไป Login เข้าระบบใช่ไหมครับ สำหรับอุปกรณ์ก็เช่นกัน การจะเข้าไปคุยกันใน AppID ที่เราสร้างขึ้นมาก่อนหน้านี้นั้น ก็จะเป็นที่จะต้องทำการยืนยันตัวตน (Authentication) (ภาษาบ้านๆ ก็คือ Log-in เข้าสู่ระบบนั่นแหละครับ) Username และ Password ที่ได้มาจาการสมัครสมาชิกแต่เนื่องจากว่า อุปกรณ์ นั้นไม่สามารถทำการสมัครสามาชิกได้ด้วยตัวเอง เราที่เป็นมนุษย์ จึงต้องเป็นคนที่ขอ Username และ Password ให้กับอุปกรณ์ด้วยตัวเองซึ่งก็คือ การสร้าง "Key" นั่นเอง
โดย Key ใน NETPIE นั้นจะมีอยู่ 2 แบบ คือ Device Key และ Session key
เหมาะกับการนำไปใช้กับอุปกรณ์ที่มีตัวตน เป็นชิ้น จับต้องได้จริงๆ (เช่นบอร์ด NodeMCU, ESPresso, Linkit One , Linkit Smart ฯลฯ)
เหมาะกับการนำไปใช้ทำอุปกรณ์เสมือน ที่เข้ามาทำงานแค่เป็นครั้งเป็นคราว (ไม่ได้มีเป็นชิ้นๆ อยู่จริง แต่เป็นอุปกรณ์เสมือนที่ทำงานอยู่ในโปรแกรม) เช่น NETPIE Freeboard , หน้าเว็บ HTML5 หรือ App Android , iOS ที่เขียนขึ้นมา โดยใช้ไลบรารี่ของ NETPIE Microgear ไว้คุย หรือส่งคำสั่งให้กับอุปกรณ์ที่มีตัวตนอีกทีนั่นเอง
สำหรับชื่อ Key ในตอนที่สร้างนั้น (เช่น Smart Plug ในรูปด้านบน) เป็นเพียงชื่อเล่นของ Key ที่เราสร้าง เพื่อให้จำได้ง่ายๆ ว่า Key ที่สร้างมานี้นั้นใช้กับอะไร ยังมีหลายคนที่เข้าใจผิดอยู่ และนำชื่อ Key ที่ตั้งตรงนี้ไปใช้ในโค้ดซึ่งไม่ถูกต้อง เราตั้งตรงนี้เป็นเพียงชื่อของ Key ส่วน Key ของจริงที่จะถูกนำไปใช้จะเป็น String ยาวๆ ตามในรูปดังนี้
เมื่อเราสร้าง Key ขึ้นมาแล้ว เราจะได้ Key และ Secret มา ซึ่ง Key นั้นก็จะคล้ายๆ กับว่าเป็น Username และ Secret ก็เป็น Password นั่นเอง เพราะฉะนั้นเราจะนำ Key ไปให้อุปกรณ์ตัวไหนใช้ Login เข้าระบบก็ได้ และ Key เดียวก็สามารถ Login เพื่อทำงานพร้อมกันได้มากกว่า 1 ตัวอีกด้วย (เหมือนเราออนเฟซบุ๊กของเราในมือถือพร้อมๆ กับในคอมพิวเตอร์)
สรุปง่ายๆสั้นๆ ก็คือ ตัว Key คือรหัสที่ใช้ในการ Login เพื่อเข้าสู่ระบบ (เข้าสู่ Application ที่เราสร้างไว้) ซึ่งถ้าเราอยากให้อุปกรณ์ไหนเข้าไปในระบบได้ เราก็จะต้อง สร้าง Key ขึ้นมา และนำ Key กับ Secret ไปให้อุปกรณ์ใช้ เช่น การนำไปฝังไว้ในส่วนของโค้ดโปรแกรมต่างๆ ที่จะอัพโหลดลงอุปกรณ์เรา โดยในการ Login ของอุปกรณ์ จะต้องมีข้อมูลคือ AppID , Key , Secret และ Alias (จะอธิบายต่อข้างล่าง) โดยตัวอย่างของการนำ Key และ Secret ไปใช้สามารถดูได้จากด้านล่างนี้ครับ
ตัวอย่างที่ 1:
การใช้ AppID, Key และ Secret ของอุปกรณ์จริง ที่มีบอร์ด NodeMCU V2 และเขียนโปรแกรมด้วย Arduino IDE (เป็น Device Key)
ตัวอย่างที่ 2:
AppID, Key และ Secret ของอุปกรณ์เสมือน ที่ทำหน้าที่เป็น Datasource ให้กับ NETPIE Freeboard (เป็น Session Key)ตัวอย่างที่ 3 :
AppID, Key และ Secret ของอุปกรณ์เสมือน ที่ทำงานอยู่บนหน้าเว็บ HTML 5 (เป็น Session Key)
Key และ Secret เป็นสิ่งที่ไม่ควรเปิดเผยให้บุคคลอื่นนำไปใช้นะครับ เนื่องจากผู้อื่นที่ใช้งานเป็น จะสามารถนำไปทำอะไรก็ได้ อาจมีผู้ไม่หวังดี หรือผู้ประสงค์ร้าย นำไปใช้ในทางที่ผิดได้หรือใช้ Key นั้นสร้างอุปกรณ์เข้ามาควบคุมระบบของเราได้ ให้ระมัดระวังเรื่องการเปิดเผย Key ด้วยนะครับ (Key ที่ผมสร้างเป็นตัวอย่างนี้จะผมถูกลบทิ้งด้วยนะครับเพื่อให้ไม่ผู้ใดนำไปใช้งานได้อีก)
3.แล้ว Alias ล่ะ??? ครับ ทีนี้ก็จะมาพูดถึงเรื่องของ Alias นะครับ สำหรับคำนี้ผมเองก็ไม่มั่นใจ ว่ามันมีความหมายในพจนานุกรมตรงๆตัวว่าอย่างไร แต่สำหรับใน NETPIE นั้น Alias นั้นจะหมายถึง “ชื่อเล่น” หรือ “นามแฝง” ของอุปกรณ์ครับ คือทุกอุปกรณ์ที่ต่อเข้ามาทำงานใน NETPIE นั้นจะมีการตั้งชื่อ Alias กันขึ้นมา เพื่อเป็น“ชื่อผู้รับ”ในการส่งข้อความครับ เพราะเวลาที่เราทำการส่งข้อความใน NETPIE นั้น จะมีการระบุชื่อผู้รับครับประมาณว่า “ส่งให้ใคร” และ “ส่งไปว่าอะไร” ซึ่งการตัวอย่างการตั้งชื่อ Alias ก็เช่นภาพด้านล่างนี้ครับ
ตัวอย่างที่ 1:
การตั้ง Alias ให้กับอุปกรณ์จริง เช่น NodeMCU V2 ใน Arduino IDE
ตัวอย่างที่ 2:
การตั้ง Alias ให้กับอุปกรณ์เสมือน เช่น Datasouce บน NETPIE Freeboard
สำหรับ Alias นี้ก็จะพบเห็นได้บ่อยในการใช้คำสั่ง microgear.chat(“ชื่อ Alias“,”ข้อความ“); ครับ เช่น microgear.chat(“smartplug1“,”ON“); จะเป็นการส่งข้อความไปยังอุปกรณ์ที่ถูกตั้งชื่อ Alias ไว้ว่าชื่อ smartplug1 ด้วยข้อความในซองจดหมายที่เขียนว่า ON ครับ
ตัวอย่างการใช้คำสั่งใน Arduino IDE ครับ (จากบทความ NETPIE Freeboard Part 2 https://blog.netpie.io/archives/284)
นอกจากนี้อุปกรณ์หลายๆตัว สามารถตั้ง Alias เดียวกันก็ได้เช่นมี NodeMCU V2 อยู่ 3 บอร์ด ที่เราตั้งเป็น Alias เดียวกันเช่นตั้งว่าชื่อwalkwaylight (ตั้งแบบนี้เหมือนกันทั้ง 3 ตัวเลยนะครับ) แล้วใช่คำสั่ง microgear.chat(“walkwaylight“,”OFF“); จะเป็นการส่งข้อความว่า OFF ไปยังผู้รับที่ชื่อ walkwaylight ซึ่งปรากฏว่า มีอุปกรณ์ชื่อนี้อยู่ถึง 3 ตัว ก็จะทำให้ NodeMCU V2 ทั้ง 3 บอร์ดนั้นที่ชื่อเดียวกัน ได้รับข้อความว่า OFF กันทั้ง 3 ตัวเลยซึ่งการตั้งแบบนี้ก็จะแล้วแต่การออกแบบระบบของแต่ละคนนะครับ ว่าต้องการควบคุมอะไรที่เหมือนๆ กัน แต่อยู่คนละที่กันหรือเปล่า แต่ใจความสำคัญก็คือ ชื่อ 1 ชื่อในระบบ ถ้าเราตั้งซ้ำ จะทำให้เห็นว่าเป็นคนๆ เดียวกันครับผม
มาดูตัวอย่างระบบกันนะครับ ก่อนอื่นผมจะขอยกตัวอย่าง AppID ของผม ที่ชื่อ NarinSmartHome มาให้ดูก่อนนะครับ ซึ่งใน NETPIE ผมได้สร้างสิ่งต่างๆ ไว้แบบนี้ครับ
สำหรับอุปกรณ์ที่ไม่ได้ทำการตั้ง Alias จะเห็นชื่อออนไลน์เป็นลักษณะของ Token นะครับ (เห็นเป็นชุดอักขระ String ยาวๆ) และชื่อ Alias บนหน้าเว็บนี้เราสามารถทำการ Rename (เปลี่ยนชื่อ)ได้ครับ แต่การเปลี่ยนชื่อบนหน้าเว็บ จะไม่ส่งผลไปถึงในโค้ด คือ ชื่อเปลี่ยนแค่ที่เห็นบนเว็บ แต่ Alias จริงๆจะไม่ได้เปลี่ยนตามครับ
เป็นอย่างไรบ้างครับหวังว่าบทความนี้จะทำให้ท่านผู้อ่านได้เห็นภาพรวมระบบ และเข้าใจถึง ความสัมพันธ์ต่างๆของAppID , Key , Secret และ Aliasมาก ขึ้นไม่น้อยก็มากนะครับ ในบทความต่อไปก็จะเขียนถึงเรื่องการ Publish, Subscribe และเรื่อง Topic ที่มือใหม่หลายๆคนอาจจะยังงงๆอยู่ ให้ได้ลองอ่านและทำความเข้าใจกันนะครับ
เขียนโดย Narin Bannasan :: https://blog.netpie.io/archives/551