Categories
Raspberry Pi Projects

ทำกล้องวงจรปิด ด้วย Raspberry Pi และแจ้งเตือนผ่าน LINE

การทำ กล้องวงจรปิด ด้วย USB Webcam และ Raspberry Pi พร้อมตั้งค่าให้ส่งอีเมล์ด้วย SMTP ของ Gmail เมื่อตรวจจับภาพเคลื่อนไหวได้ และสามารถดูออนไลน์ได้ด้วยครับ

บทความนี้เป็นการทำ กล้องวงจรปิด ด้วย Raspberry Pi และ USB Webcam พร้อมตั้งค่าให้ส่งข้อความแจ้งเตือนไปยัง LINE Application เมื่อตรวจจับภาพเคลื่อนไหวได้ และสามารถดูภาพกล้องวงจรปิดแบบออนไลน์ได้ด้วยครับ

อุปกรณ์ที่ใช้
+ Raspberry Pi 3 B+
+ กล้องเว็บแคมแบบ USB
+ บัญชีผู้ใช้ LINE

ขั้นตอนการทำกล้องวงจรปิดจาก USB Webcam ด้วย Raspberry Pi
หลังจากที่เราทำ การติดตั้งระบบปฏิบัติการ Raspbian ให้กับ Raspberry Pi และ การติดตั้ง Web Server ให้กับ Raspberry Pi เรียบร้อยแล้ว จึงติดต่อ Raspberry Pi ผ่านโปรโตรคอล SSH ด้วยโปรแกรม PuTTY และทำการอัพเดทระบบปฏิบัติการ ด้วยคำสั่ง

 sudo apt-get update

สร้างโฟล์เดอร์สำหรับเก็บไฟล์วีดีโอและรูปภาพ พร้อมกำหนดสิทธิของโฟลเดอร์ ด้วยคำสั่ง

 sudo mkdir /var/www/html/motion
sudo chmod 775 /var/www/html/motion

ให้ทำการติดตั้ง USB Webcam ให้กับ Raspberry Pi และทดสอบการถ่ายภาพ และบันทึกวีดีโอจากเว็บแคม ด้วยคำสั่ง

sudo ffmpeg -f v4l2 -i /dev/video0 -vframes 1 /var/www/html/motion/test.jpg
sudo ffmpeg -f v4l2 -r 25 -s 640x480 -i /dev/video0 -t 00:00:05 /var/www/html/motion/test.avi

และติดตั้งแพ็คเกจ motion ด้วยคำสั่ง

 sudo apt-get install motion -y
sudo chown -R pi:www-data /var/www/html
sudo usermod -a -G www-data motion
sudo chown motion:www-data /var/www/html/motion

จากนั้นทำการกำหนดค่าในไฟล์ /etc/motion/motion.conf

 sudo nano /etc/motion/motion.conf

กด Ctrl+W เพื่อค้นหาข้อความ หรือกด Ctrl + Shift + _ แล้วพิมพ์ตัวเลขของแต่ละบรรทัด (Line) และทำการกำหนดค่า ดังนี้

 daemon on #Line 11
width 800 #Line 100
height 600 #Line 103
framerate 25 #Line 107
post_capture 5 #Line 245
quality 80 #Line 279
target_dir /var/www/html/motion #Line 450
stream_localhost off #Line 504
webcontrol_localhost off #Line 537
webcontrol_authentication user:password #Line 544
on_movie_start python3 /home/pi/line_notice.py %f #Line 658 (อย่าลืมลบ ; ออก)

กด Ctrl+X และ กด y เพื่อบันทึก แล้วจึงกำหนดค่า start_motion_daemon ในไฟล์ /etc/default/motion

 sudo nano /etc/default/motion

เปลี่ยนค่า start_motion_daemon เป็น yes แล้วทำการบันทึก

 start_motion_daemon = yes

จากนั้นจึงทำการขอ Token จากเว็บไซต์ของ LINE เพื่อให้สามารถส่งข้อความแจ้งเตือนผ่าน LINE Notify ซึ่งอยู่เมนู My page และกดปุ่ม Generate Token แล้วจะปรากฎหน้าต่างสำหรับกรอกข้อมูล

https://notify-bot.line.me 
กรอกชื่อที่ต้องการให้แสดงในการแจ้งเตือน (token name to be displayed) 
เลือกคู่สนทนาที่ต้องการให้ส่งข้อความไปหา (chat to send notification)

เมื่อกรอกข้อมูลครบแล้ว จึงกดที่ปุ่ม Generate token เพื่อให้ระบบจะสร้าง Token และระบบจะส่งข้อความแจ้งเตือนไปยัง LINE ของคู่สนทนาที่เราเลือก เพื่อยืนยันว่าได้สร้าง Token แล้ว จากนั้นจึงสร้างไฟล์ไพธอนเพื่อใช้ส่งข้อความไปยัง LINE ด้วยคำสั่ง

sudo nano /home/pi/line_notice.py

มีข้อความภายในไฟล์ดังนี้

import requests
import urllib.parse
import sys, glob, os, re
from datetime import datetime
from datetime import timedelta
i = datetime.now()
domain = 'http://' + 'YOUR_DOMAIN_NAME'
url_arg = sys.argv[1]
vdourl = url_arg.replace('/var/www/html',domain)
file_name = url_arg.replace('.avi','')
match = re.findall(r'\d\d\d\d\d\d\d\d\d\d\d\d\d\d',url_arg)
if match:
s_name = file_name.split('-')
date_time_str = s_name[1]
date_time_obj = datetime.strptime(date_time_str, '%Y%m%d%H%M%S')
next_time = date_time_obj + timedelta(seconds=3)
next_time = next_time.strftime('%Y%m%d%H%M%S')
postimgurl = s_name[0]+'-'+str(next_time)+'-00.jpg'
else :
tmp_name = glob.glob(file_name+'*.jpg')
postimgurl = tmp_name[0]
line_token = 'YOUR_LINE_TOKEN'
url = 'https://notify-api.line.me/api/notify'
file = {'imageFile':open(postimgurl,'rb')}
data = ({
'message':'Movement has detected \r\n '+i.strftime('%H:%M:%S %Y/%m/%d')+'\r\n\r\n Real Time : ' + domain + ':8081 \r\n\r\n Motion Recorded : '+ vdourl +'\r\n\r\n Control : ' + domain + ':8080/0/ \r\n\r\n RPi CCTV'
})
line_headers = {"Authorization":"Bearer "+line_token}
session = requests.Session()
r = session.post(url, headers=line_headers, files=file, data=data)
print(r.text)

อย่าลืมทำการแก้ไข Token (line_token = ‘YOUR_LINE_TOKEN’) ตามที่ได้รับจากเว็บไซต์ LINE.me และ แก้ไข Domain (domain = ‘http://’ + ‘YOUR_DOMAIN_NAME’) เป็นชื่อโดเมนที่เราได้ลงทะเบียนกับ No-IP.com และกำหนดสิทธิ์ให้กับไฟล์ line_notice.py ด้วยคำสั่ง

 sudo chmod 755 /home/pi/line_notice.py

แล้วจึงทดสอบการส่งข้อความไปยัง LINE Application ด้วยคำสั่ง

python3 /home/pi/line_notice.py /var/www/html/motion/test.avi

หากไม่มีข้อผิดพลาด จะปรากฎข้อความ {“status”:200,”message”:”ok”}
และข้อความจะถูกส่งไปยัง LINE application ของคู่สนทนา (chat to send notification) ที่ได้ทำการเลือกไว้ในขั้นตอนการขอ Token
หากได้รับข้อความ แสดงว่า Raspberry Pi สามารถส่งข้อความไปยัง LINE ได้แล้ว

จากนั้นจึงทำการรีสตาร์ทและเริ่มใช้งานแพ็คเกจ motion ด้วยการพิมพ์คำสั่ง

 sudo service motion restart
sudo motion

ทดสอบการดูกล้องวงจรปิด

http://YOUR_DOMAIN_NAME:8080

เพียงเท่านี้ Raspberry Pi ก็จะกลายเป็นกล้องวงจรปิด และจะส่งข้อความแจ้งเตือนไปยัง LINE Application ทุกครั้งที่ตรวจจับภาพเคลื่อนไหวได้แล้วครับ

การทำกล้องวงจรปิดด้วย Raspberry Pi และแจ้งเตือนผ่าน LINE Notify