这一篇属于进阶的内容。包括邮箱配置与使用,以及motion、msmtp与mutt三者之间的配合,还有系统方面的调用。
- 邮箱配置与使用
a.)安装msmtp邮件传输代理程序:
说明一下,常用邮件传输代理程序有ssmtp与msmtp,经我测试,国内的邮箱如QQ邮箱、163邮箱、126邮箱,还有在国内能较好使用的outlook、Hotmail邮箱,都不能很好的使用ssmtp,唯有gmail可以正常使用,但是gmail在国内确实不好用,所以这里选择安装msmtp。sudo apt-get install msmtp
配置msmtp:以126邮箱为例:
(1)查询msmtp配置文件所在目录:
返回/usr/bin/msmtp即为配置文件的路径。which msmtp /usr/bin/msmtp
(2)配置资源文件/root/.msmtprc
因该文件设计用户密码,为提高安全性,所以执行以下命令:logfile /var/log/msmtp.log account default auth login host smtp.126.com from abcde@126.com user abcde@126.com password abcdemm
sudo chmod 600 /root.msmtprc
b.)安装轻量级邮件客户端mutt
配置muttsudo apt-get install mutt
(1)配置资源文件/root/.muttrc
第一行所用路径就是刚才查到的msmtp配置文件位置set sendmail="/usr/bin/msmtp" set use_from=yes set realname="abcde@126.com" set editor="nano"
c.)测试邮件发送
后面邮箱是收件人地址。echo "Testing" | sudo mutt -s "Testing" hijklm@126.com
关于mutt使用的options,大家可以在shell中用 mutt -h获取。 - 我们要实现这样的功能:开机motion能自启并在后台运行,而不用手动开启并占用前台;定期自动向目标邮箱发送邮件(如果捕获有图片),并且拍摄图片的时间需附上;只发送最新的图片,已经发送的图片予以删除,未正常发送的图片保留;
a.)motion软件的设置模式(setup mode)与守护模式(daemon mode)
设置模式是阻塞shell的,即使用motion -s命令在shell下进行测试运行,需要停止时使用Ctrl+c停止。显然,这不是我们想要的模式。我们需要程序在守护模式下运行。
将其中一行start_motion_daemon由no改为yes。nano /etc/default/motion
然后:
将其中的daemon off改为 daemon on。nano /etc/motion/motion.conf
这样一来,motion将开机后自动运行在守护模式。
如果想要停止motion,可以使用:
手动再次在守护模式下打开motion,可以使用:pkill motion
查看motion是不是在后台运行可以使用:sudo /usr/bin/motion 或 sudo /etc/init.d/motion start 或 sudo service motion start
ps -ef | grep motion
b.)我们用两个脚本实现其余功能(引)
脚本1 script1.sh
脚本2 script2.sh#!/bin/bash MOTIONCONF=/etc/motion/motion.conf MOTIONDIR=`sudo grep "^target_dir" $MOTIONCONF|awk '{print $2}'` if [ ! -d $MOTIONDIR ];then mkdir $MOTIONDIR chown motion $MOTIONDIR fi LISTFILES=`find $MOTIONDIR -maxdepth 1 -type f | grep jpg$` NUMFILES=`find $MOTIONDIR -maxdepth 1 -type f | grep jpg$ | wc -l` if [ $NUMFILES -gt 0 ];then for IMAGEFILE in $LISTFILES do echo -e "Warning,\nAn intruder was detected at `date`\nPlease see the image detected for details" | mutt -s "[INTRUDER ALERT]Intruder Detected" -F /root/.muttrc -a $IMAGEFILE -- xxxxxxxx@qq.com rm $IMAGEFILE done fi
代码都很浅显易懂,不多说。注意,bash对空格比较敏感,不要随便添加空格。#!/bin/bash MOTIONCONF=/etc/motion/motion.conf MOTIONDIR=`sudo grep "^target_dir" $MOTIONCONF | awk '{ print $2}'` if [ ! -d $MOTIONDIR ];then mkdir $MOTIONDIR chown motion $MOTIONDIR fi LISTFILES=`find $MOTIONDIR -maxdepth 1 -type f | grep jpg$` NUMFILES=`find $MOTIONDIR -maxdepth 1 -type f | grep jpg$ | wc -l` LASTCOUNT=0 while true do LISTFILES=`find $MOTIONDIR -maxdepth 1 -type f | grep jpg$` NUMFILES=`find $MOTIONDIR -maxdepth 1 -type f | grep jpg$ | wc -l` ITERATOR=0 while [ $LASTCOUNT -lt $NUMFILES ]; do IMAGEFILE=${LISTFILES[$ITERATOR]} echo -e "Warning,\nAn intruder was detected at `date`\nPlease see the image detected for details" | sudo mutt -s "[INTRUDER ALERT]Intruder Detected" -F /root/.muttrc -a $IMAGEFILE -- xxxxxx@qq.com LASTCOUNT=`expr $LASTCOUNT + 1` ITERATOR=`expr $INTRATOR + 1` done sleep 10 done
将这两个脚本放到root目录下。
c.)实现脚本的开机启动
(1)添加cron任务以开机自启脚本1:
参照树莓派3B应用篇之视频监控(上)篇中所说的办法添加crontab任务:
添加:sudo crontab -e
每分钟运行一次脚本1 。***** /root/script1.sh
(2)通过修改
motion的启动脚本以实现开机自启脚本2:
在代码块start)中,在start-stop-daemon后添加 /root/script2.sh & ,&表示在后台执行脚本。
start) if check_daemon_enabled ; then if ! [ -d /var/run/motion ]; then mkdir /var/run/motion fi chown motion:motion /var/run/motion log_daemon_msg "Starting $DESC" "$NAME" if start-stop-daemon --start --oknodo --exec $DAEMON -b --chuid motion ; then /root/script2.sh & log_end_msg 0 else log_end_msg 1 RET=1 fi fi ;;
好了,如果你按我说的步奏进行配置,现在你的树莓派应该可以开始正常工作了。重启一下试试吧。
关于微信公众平台和广域网访问motion,暂时先放在一边,以后再写了。监控篇到此为止。基本可以实现大家监控的需求了。
参考文献:Peter MEmbrey,David Hows著,张志博,孙峻文译.树莓派学习指南.beijing,2013