ลองเล่น LINE Beacon ด้วย Raspberry Pi
วันก่อนโชคดีได้สิทธิ์ไปร่วมงาน LINE Developer Meetup#3 เห็น LINE Expert คุณ Sitthi Thiammekha โชว์ LINE Beacon ที่ไม่ต้องใช้ LINE Beacon device โดยใช้ Mac เป็น Beacon device ผมก็เห็นผ่านๆ ว่าใช้ Raspberry Pi ได้ด้วย ก็เป็นเรื่องที่ดีสำหรับคนที่ไม่มี Mac แต่มี Raspberry Pi (ราคาถูกกว่ามาก 555) สามารถลองเล่น LINE Beacon ได้ ผมก็เลยเอา Raspberry Pi ที่มีอยู่มาลองเล่น LINE Beacon
สร้าง LINE Simple Beacon Hardware ID
ก่อนอื่นเราต้องสร้าง LINE Simple Beacon Hardware ID ก่อน เพราะว่าไม่มี Beacon device ของจริง คล้ายๆ กับ Hardware ID จำลองที่ใช้ได้ในระบบ LINE ด้วยการไปที่ LINE@ Manager register Beacon คลิ๊กที่ Issue LINE Simple Beacon Hardware ID
แล้วเลือก LINE Bot Account ที่เรามีอยู่แล้ว (ถ้ายังไม่มี LINE Bot Account จะต้องไปสร้างก่อน) เพื่อเชื่อมโยงกับ LINE Beacon แล้วคลิ๊กที่ Issue Hardware ID
เราก็จะได้ Hardware ID ที่จำลอง Beacon device สำหรับ LINE Simple Beacon Hardware ID (ตัวอย่างของผมเป็น 01204798fd
)
ติดตั้ง LINE Simple Beacon
ในบทความนี้จะใช้ LINE Simple Beacon ทำงานบน Raspberry Pi 3 ซึ่งก็เหมือนกับที่ทำงานบนเครื่อง Macintosh โดยใช้ OS เป็น Raspbian Stretch Lite (Debian Stretch version สำหรับ Raspberry Pi) ซึ่งเป็น version Lite ที่ไม่รวม Desktop environment มาด้วย ทำให้ขนาดเล็กกว่าเยอะมาก เพราะเราจะใช้ PuTTY เพื่อรีโมทเข้าไปใช้งาน (วิธีติดตั้ง Raspbian สามารถทำตามขั้นตอนนี้) ซึ่งวิธีติดตั้ง LINE Simple Beacon สามารถตามวิธีใน README ได้เลย
ติดตั้ง Pre-require
เปิดใช้งาน Raspberry Pi โดยต้องเชื่อมต่อ Network เพราะเราจะรีโมทด้วย PuTTY แต่จะต้องเปิดใช้งาน SSH ของ Raspberry Pi ก่อน ตามวิธีนี้
- เปิด PuTTY แล้วใส่ IP ของ Raspberry Pi ใช้ Port 22 (เช่น 192.168.1.35:22)
- ติดตั้ง bluetooth และ library ด้วยคำสั่ง
$ sudo apt-get install bluetooth bluez libbluetooth-dev libudev-dev
- ติดตั้ง Node.js และ NPM สำหรับรัน Simple Beacon ด้วย Node.js ด้วยคำสั่ง
$ curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -
$ sudo apt-get install nodejs
$ sudo apt-get install npm
- ติดตั้ง Git สำหรับ clone Simple Beacon repo ด้วยคำสั่ง
$ sudo apt-get install git
เป็นอันว่าเราติดตั้ง software ที่จำเป็นสำหรับรัน LINE Simple Beacon เรียบร้อยแล้ว
รัน LINE Simple Beacon
หลังจากที่เราได้เตรียม software ที่จะเป็นแล้วก็ clone LINE Simple Beacon มาไว้ใน Raspberry Pi ของเรา และ install dependencies ด้วย NPM
แล้วรัน script simplebeacon.js
ด้วย --hwid
ที่ได้จากการสร้าง Hardware ID ถ้ารันสำเร็จจะแสดง stateChange เป็น powerdOn
และมี Buffer เป็น Hex number
$ git clone https://github.com/line/line-simple-beacon.git
$ cd line-simple-beacon/tools/line-simplebeacon-nodejs-sample/
$ npm install
$ sudo ./simplebeacon.js --hwid=01204798fd
เป็นอันว่าเราสามารถรัน Beacon device จำลองด้วย LINE Simple Beacon ได้แล้วต่อไปเราจะให้ LINE Bot ของเรารับ Beacon event แล้วตอบกลับอะไรง่ายๆ ไปหา User
สร้าง LINE Bot
ต่อไปเราจะสร้าง LINE Bot ง่ายๆ ด้วย Java/Spring เพื่อจัดการกับ Beacon event ที่ได้จาก LINE Simple Beacon ด้วยการเพิ่ม @EvenMapping
ที่รับค่าเป็น BeaconEvent แล้วตอบกลับไปเป็น event string (information)
@EventMapping
public void handleBeaconEvent(BeaconEvent event) {
log.info(event.toString());
reply(event.getReplyToken(), event.toString());
}
สามารถ clone code ตัวอย่างได้จาก
เมื่อเรารัน LIEN Bot ด้วยคำสั่ง mvn spring-boot:run
ก็จะรัน Bot ในเครื่องของเราเพื่อจัดการกับ Beacon event โดยจะใช้ ngrok เพื่อใน LINE Bot Server มองเห็น LINE Bot ในเครื่องของเรา
ทดลอง LINE Simple Beacon กับ LINE Bot
หลังจากที่รัน LINE Simple Beacon บน Raspberry Pi และ LINE Bot ที่จัดการกับ Beacon event ในเครื่องของเราแล้ว ก็มาทดสอบว่าทำงานได้ไหม ด้วยการเปิด LINE app ในมือถือของเรา โดยตั้งค่าในรับ Beacon ได้ด้วย Settings -> Privacy -> Privacy usage data
แล้วเปิดใช้งาน LINE Beacon
ยอมรับข้อตกลง Agree & start
แล้วเราก็จะได้ข้อความจาก LINE Bot ที่เป็น Beacon event info ดังนี้ และใน console ของ LINE Bot ก็จะแสดงว่า Bot ได้รับ Beacon event และตอบกลับไป
ถ้า LINE Bot ไม่ตอบกลับและใน console ไม่แสดงว่ารับ Beacon event ให้ลองปิด-เปิด LINE app เพื่อลองดูว่า LINE Simple Beacon ได้ส่ง Beacon event มาหา LINE app หรือไม่ เพราะเท่าที่ผมทดลองจะสังเกตว่า LINE Simple Beacon จะส่ง Beacon event มาทุกครั้งที่มีการปิด-เปิด LINE app ใหม่
สรุป
จะเห็นได้ว่าการสร้าง LINE Simple Beacon ด้วย Raspberry Pi และ LINE Bot นั้นทำได้ไม่ยาก ไม่แตกต่างกันการใช้ Macintosh ในการทำให้เป็น Beacon device จำลองเลย ซึ่งมีราคาถูกว่าเป็นอย่างมาก และที่สำคัญเราสามารถใช้ Raspberry Pi รัน LINE Simple Beacon ไปประยุกต์ใช้งานได้สะดวกเพราะว่ามีขนาดเล็กกระทัดรัดสำหรับติดตั้งไว้ตามงานต่างๆ เพื่อส่ง Beacon event ไปหา User ที่เป็นเพื่อนของ LINE bot เรา