หลังจากที่เราได้ทำการติดตั้งโปรแกรม Motion เพื่อใช้สตรีมมิ่งวิดีโอจากเว็บแคมไปเมื่อคราวที่แล้ว วันนี้เรามาต่อยอดด้วยการใช้โปรแกรม Motion ในการตรวจจับการเคลื่อนไหว และส่งข้อมูลภาพที่ได้ไปโพสในหน้า Facebook ของเรา หลักการทำงานก็ง่ายๆครับ เราจะสั่งให้โปรแกรม Motion ทำการตรวจจับการเคลื่อนไหวในภาพ ถ้าหากว่าภาพมีการเปลี่ยนแปลงก็จะให้ทำการอัพโหลดภาพนั้นขึ้นไปที่เฟสบุคของเราโดยใช้ Facebook API ในบทความนี้จะแนะนำการใช้ Facebook API อย่างคร่าวๆ ดังนั้นท่านควรมีพื้นฐานการใช้งาน Facebook API มาบ้างพอสมควร และเมื่ออ่านจบแล้วเรายังสามารถประยุกต์ใช้ให้ Raspberry Pi ทำการตรวจจับการเคลื่อนไหวและส่งสัญญานไปทำการควบคุมอุปกรณ์ภายนอกผ่าน GPIO ก็สามารถที่จะทำได้เช่นกัน
อย่างแรกเราต้องมี Facebook App ของเราเองก่อน โดยเข้าไปสร้างได้ที่ https://developers.facebook.com/apps ตรงนี้หากว่าใครยังไม่เคยทำหรือทำยังไม่เป็นก็ลองศึกษาเองดูก่อน ผมจะไม่ลงรายละเอียดมากนัก
เมื่อสร้างเสร็จแล้วให้เข้าไปที่ Graph API Explorer เพื่อทำการเก็บค่า Access Token (เราต้องใช้ค่านี้ไม่งั้นจะส่งข้อมูลไปเฟสบุคไม่ได้นะครับ) https://developers.facebook.com/tools/explorer/
ในหน้า Graph API Explorer ให้เลือก Application ไปที่ Facebook App ที่เราสร้าง ในตัวอย่างของผมจะเป็น Raspberry Pi Post จากนั้นกด Get Access Token ในแท็บ Extended Permissions ให้ติ๊กถูกที่ photo_upload และ publish_stream เลือกตัวอื่นด้วยก็ได้ครับแต่เราใช้แค่นี้ กด Get Access Token อีกครั้งครับ เมื่อกดแล้วในช่อง Access Token จะมีตัวอักษรยาวๆขึ้นมา ให้เรา copy ข้อมูลตรงนี้เก็บไว้ก่อนครับ
เพิ่มเติมเรื่อง Access Token อีกนิดหนึ่งครับ ค่า Access Token ที่เราได้จากขั้นตอนนี้ จะมีอายุการใช้งาน 2 ชั่วโมง ซึ่งหมายความว่าถ้าหากว่าเกิน 2 ชั่วโมงไปแล้ว เราจะต้องกลับมาเอา Access Token ตัวใหม่ไปใช้ ในการใช้งานจริงเราจะไม่ใช้ตัวนี้ แต่เราจะใช้ Access Token อีกแบบคือ Long-Lived Tokens https://developers.facebook.com/docs/facebook-login/access-tokens/#long-via-code ซึ่งจะมีขั้นตอนที่ซับซ้อนกว่านี้อีกนิดหน่อยซึ่งผมจะไม่กล่าวถึง ในการทดลองนี้ก็ใช้แบบ 2 ชั่วโมงไปพลางก่อน ^^
กลับมาที่ Raspberry Pi ให้ทำการติดตั้ง php5-curl
1 | sudo apt-get install php5-curl |
สร้างโฟลเดอร์สำหรับเก็บโปรแกรมและรูปจากเว็บแคม ในตัวอย่างจะเอาไปไว้ที่ /var/www/
1 2 3 | sudo mkdir /var/www/motion-to-facebook/ sudo mkdir /var/www/motion-to-facebook/image/ sudo chmod 777 /var/www/motion-to-facebook/image/ |
ต่อไปทำการแก้ไขไฟล์คอนฟิกของ Motion ที่ /etc/motion/motion.conf
1 | sudo nano /etc/motion/motion.conf |
โดยเราต้องเพิ่มคำสั่งลงไป 2 ค่าคือ on_picture_save เป็นคำสั่งให้บันทึกภาพลงในโฟลเดอร์ที่เราต้องการ และ on_motion_detected เป็นคำสั่งให้เรียกโปรแกรมที่เราเขียนไว้ขึ้นมาทำงานหากว่าภาพเกิดการเคลื่อนไหว
1 2 | on_picture_save chmod 777 %f | cp %f /var/www/motion-to-facebook/image/ on_motion_detected /usr/bin/php /var/www/motion-to-facebook/motion-post-to-facebook-curl.php |
ขั้นตอนสุดท้าย เขียนโปรแกรมที่เราจะใช้ในการอัพโหลดรูปขึ้น Facebook โดยผมจะเขียนด้วย PHP และติดต่อกับ Facebook API ผ่าน CURL หรือหากว่าใครใช้ Facebook SDK for PHP เป็นอยู่แล้วก็ตามสะดวกเลยครับ
1 | sudo nano /var/www/motion-to-facebook/motion-post-to-facebook-curl.php |
พิมพ์โค้ด PHP ลงไปตามตัวอย่าง และให้แทนที่ $strAccessToken เป็นค่า Access Token ที่เราได้จากขั้นตอนแรก
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | <?php // Facebook Access Token String $strAccessToken = "CAACV3IrITDcBAC2soZCQiUTkTHieCxd4FbpKmv1Re6cOdQZAFLx6kZABzUDLdr8gI3RmqoGdcqkZCZBCNZB3wjhoZA7xGq4knQTVRwo0EttxZAsM5eaTMNZCRgJ9pir3uyZBuJaZC7El8B6NniFbCuI0hwv81ruXQD6VG2ZCl9y44wF4ZCZAmWrn7X48eWCsqLPkD60o0ZD"; // Read Directory if($handle = opendir("/var/www/motion-to-facebook/image/")){ while (false !== ($file = readdir($handle))) { if ($file != "." && $file != "..") { // Data Array $args = array(); $args['message'] = "Motion Detection From Raspberry Pi"; $args['access_token'] = $strAccessToken; $args['image'] = '@' . realpath("/var/www/motion-to-facebook/image/{$file}"); // Post To Facebook By CURL $ch = curl_init(); curl_setopt($ch, CURLOPT_URL,'https://graph.facebook.com/me/photos'); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $args); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $result = curl_exec($ch); curl_close ($ch); // Remove File unlink("/var/www/motion-to-facebook/image/{$file}"); } } closedir($handle); } print "OK"; ?> |
จากนั้นสั่ง Restart Motion Server
1 | sudo service motion restart |
เสร็จเรียบร้อยแล้วครับ ทดสอบเดินผ่านหน้ากล้องดู ภาพเราก็จะถูกอัพโหลดขึ้นไปหน้าเฟสบุคอย่างที่ตั้งใจไว้แล้ว หวังว่าจะมีใครเอาไปต่อยอดทำอะไรสนุกๆ ได้นะครับ