背景:
最近琢磨怎么才能尽快的熟悉树莓派各方面的功能,所以想找个合适的切入点。之前配套Arduino的许多套间里面可以挑出来一个USB摄像头,参考了网上一些朋友的思路发现可以实现一个基本的网络监控功能。所以决定使用raspbian+motion+python来实现。

功能:

  • 动态配置,motion配置项比较灵活;
  • ”云“存储,实现发送到笔者邮箱作为存储位置,这一点是根本上区别于常规监控将监控内容存储行为的;
  • 随意放置,在家庭局域网内,树莓派与路由器采用无线连接,可以任意挪动整套系统其位置;
  • 间断查询特定目录下(本例检测的目录是/var/lib/motion)的文件变化,若有新文件存在则打包发送至特定邮箱

准备:
motion是一个提供视频监控解决方案的开源软件,支持Linux/FreeBSD/Mac平台,功能主要有以下几个:

  • 支持USB摄像头和webcam(可通过HTTP查看实时视频直播的摄像头)
  • 支持多摄像头(不过需要额外的多项配置,不建议一开始就搞)
  • 提供web访问实时视频功能(暂时还没实现)
  • 重点是运动检测,可以在画面中像素变化时拍摄、记录、触发事件
  • 可以配置web远程管理(用处不大,建议关闭)
  • 可以配置使用数据库(支持MySQL和PostgreSQL)
看到我raspbian的系统是默认安装motion也是很简单,sudo apt-get install motion就好了。
实现:
网上对motion的配置有比较全面介绍,我这里不再叙述。只需要在配置项中配置好发送邮件的脚本绝对路径即可。例如:on_motion_detected  /home/pi/Desktop/mail_me/sendmail.py。下面直接贴上代码供参考。
#!/usr/bin/bash pythonimport os
import sys
import datetime
import time
import logging
import threading
import smtplib
import subprocess
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText  class SendMaNMOnce(object):"""sending a mail when new file(s) was/were added to the path:jpg_avi_path as a attachment.in case of saving space, ".tar.gz" file is a good choice for the attachment.Args:is_debug, in debug model, stdout is to console, otherwise,file handler.frequece, int, the frequece of sending a mail. example:frequece=60 means every 60 secondsjpg_avi_path, (str), motion result abs path.Exception:All exceptions will be catched and printed."""def __init__(self, is_debug=True, frequece=60, jpg_avi_path='/var/lib/motion'):self.is_debug = is_debugself.frequece = frequeceself.jpg_avi_path = jpg_avi_pathself.alreadystfiles = []try:for root, dirs, files in os.walk(self.jpg_avi_path, topdown=False):for name in files:os.remove(os.path.join(root, name))except Exception as e:self.print_log(e)self.TBsendfls = threading.Thread(target=self.sendmail)self.TBsendfls.start()def __del__(self):self.print_log('del total file:%s' % len(self.alreadystfiles))del self.alreadystfilesdef print_log(self, astring):timestamp = datetime.datetime.now().strftime('[%Y-%m-%d %H:%M:%S] ')if not self.is_debug:log_file = open("sendmail.log", "a")console = sys.stdoutsys.stdout = log_fileprint timestamp +str(astring)log_file.close()sys.stdout = consoleelse:print timestamp +str(astring)def sendmail(self):while 1:filesTBsent = []time.sleep(self.frequece)timestamp = datetime.datetime.now().strftime('%Y%m%d%H%M%S')targz = timestamp +'.tar.gz'[filesTBsent.append(f) for f in os.listdir(self.jpg_avi_path) if f not in self.alreadystfiles and (f.endswith('jpg') or f.endswith('avi'))]def send():self.print_log('start to send a mail...')os.chdir(self.jpg_avi_path)try:self.print_log('file:[%s]' % ' '.join(filesTBsent))os.system("tar -Pzcf %s %s" % (targz, ' '.join(filesTBsent)))except Exception as e:self.print_log(e)sender = 'sender@126.com'  receiver = '1048015805@qq.com'   smtpserver = 'smtp.126.com'  username = 'username'  password = 'password'  msgRoot = MIMEMultipart('related')  msgRoot['Subject'] = '%s' % timestamp msgRoot['from'] = 'raspberry@raspberry.com'msgRoot['to'] = '1048015805@qq.com'if targz in os.listdir(self.jpg_avi_path):self.print_log('file [%s] exists, it`s very good.' % targz)attachment = MIMEText(open(targz, 'rb').read(),'base64', 'utf-8')attachment["Content-Type"] = 'application/octet-stream'  attachment["Content-Disposition"] = 'attachment; filename="%s"' % targzelse:self.print_log('file [%s] not exists, it`s unexpected.' % targz)attachment = MIMEText('file not found', 'plain', 'utf-8')msgRoot.attach(attachment)    smtp = smtplib.SMTP()  smtp.connect(smtpserver)  smtp.login(username,password) smtp.sendmail(sender, receiver, msgRoot.as_string())  smtp.quit()  self.print_log('mail is sending...')self.alreadystfiles += filesTBsenttry:os.remove(targz)except Exception as e:self.print_log('Exception when remove %s'%targz + str(e))self.print_log('end to send a mail...\n')if len(filesTBsent)!=0:self.print_log('%s new pictures found, will mail.'%len(filesTBsent))send()self.print_log('no pictures found.')returnif __name__ == "__main__":s = SendMaNMOnce()

可改进的地方:

1.网络实时访问监控画面,这需要对局域网做DDNS,出于安全考虑,建议网友谨慎实现;

2.利用移动电源提供电力,可以将本系统置于任何有wifi网络的地方;

3.必要时,将移动电源换成“蓄电池+太阳能电池板”就可以实现全天候全方位监控了;

基于raspbian+motion的家庭监控网络相关推荐

  1. Android烟雾监控应用,基于Android的智能家庭监控系统研制

    摘要: 传统的家庭监控系统存在无法远程控制,布线复杂,智能化程度不高等问题.随着无线传感网络和移动互联网迅速的普及在人们的生活中,新一代开源嵌入式软件和硬件技术的不断进步,为智能家庭监控系统的发展提供 ...

  2. 毕业设计 基于树莓派的智能家庭监控系统

    文章目录 0 前言 1 简介 2 主要器件 3 监控系统 Python 实现 安装 OpenCV motion mjpg-streamer 4 部分代码 5 最后 0 前言

  3. 基于linux网络流量监控与分析软件的设计与实现shell,Shell图形化监控网络流量

    网络流量的监控工具有很多,如:Mrtg.Cacti.Zabbix等等,他们都有着各自的特点,不同的侧重,只为适合不同的应用场景的各种特殊需求.除了网络流量监控工具以外,还有Nagios这样的监控主机状 ...

  4. 家用监控系统需要服务器吗,家庭监控系统实现(一)

    从本文开始,将逐步实现一个小型的家庭监控系统,可以实现实时视频监控和历史监控调取的功能. 主要硬件组件包括树莓派.camera.android前端设备. 实现思路为,树莓派上电,即开启视频录制功能,每 ...

  5. 基于ESP8266的智能家庭检测系统

    基于ESP8266的智能家庭检测系统 利用空暇时间,做了一个软硬件结合的项目,项目结束了,写篇文章来记录下吧! 目录 基于ESP8266的智能家庭检测系统 绪论 项目背景 项目方法 应用场景 系统总体 ...

  6. 家庭监控系统实现(一) -- 硬件准备及picamera使用

    转载请注明出处:https://blog.csdn.net/mymottoissh/article/details/83053587 从本文开始,将逐步实现一个小型的家庭监控系统,可以实现实时视频监控 ...

  7. B45 - 基于STM32单片机的家庭防火防盗系统的设计

    文章目录 设计要求 实物 人脸识别模块的调试 传感器采集与显示 模块设计 温湿度模块 烟雾浓度MQ2 GSM模块 人脸识别模块 语音报警模块 资源占用 源程序 主程序 处理逻辑 AD/DA转换检测烟雾 ...

  8. 基于Dragonbaord 410c的家庭智能环保卫士——(1)预研

    最近经常看到朋友圈被各种雾霾和空气污染刷屏,作为一个Daragonbaord 410c DIY控,萌生了一个想法,做一个环境保护机器人来实时的保护我们周围的环境,本次推出的系列blog将跟大家分享我们 ...

  9. 基于NB-IoT的智慧路灯监控系统(NB-IoT专栏—实战篇1:项目简介)

    目录 1.项目背景 2.需求分析 3.功能设计 近期参加物联网设计大赛也作为明年的毕业设计,和好兄弟花费一个月的业余时间,实现从项目构思设备选型到现在的系统V1.0效果. 本项目效果如下,感谢各位好友 ...

  10. 基于phantomJS实现web性能监控

    转载,原文链接http://www.webryan.net/2013/02/web-page-test-based-on-phontomjs/ 1.web性能监控背景描述 上期分享的<Web性能 ...

最新文章

  1. 深入JDK中的Optional
  2. 第02章_MySQL环境搭建
  3. Adobe把GAN搞成了缝合怪,凭空P出一张1024分辨率全身人像 | CVPR 2022
  4. maven 学习笔记(一)eclipse+android+maven
  5. Codeforces Round #570 (Div. 3)
  6. php 说说,PHP程序员:你过来,给我说说 $this,self,static 有什么区别?
  7. STM32H7 at070tn92 LTDC SDRAM 调试笔记
  8. 成功解决http error 503.the service is unavailable错误
  9. 如何在标准的机器学习流程上玩出新花样?
  10. html简繁替换,Web界面简繁体转换
  11. cocostudio 1.6
  12. 内涵TV段子,价值500元的dz内涵笑话商业源码
  13. 一个屌丝程序猿的人生(一百二十一)
  14. 特别喜欢吃草莓,那吃草莓对身体有什么好处吗?
  15. Sublime Text 3安装、配置与使用技巧
  16. 金融数字化转型落地实践,腾讯云数据库的三问三答
  17. 2013,GECCO,Running programs backwards: instruction inversion for effective search in semantic spaces
  18. 微信Android资源混淆打包工具
  19. 为什么安装了SSL证书,网站还是显示不安全?
  20. 会员积分体系设计思路(转)

热门文章

  1. 思维的误区:忽视沉默的大多数
  2. 带有点***色彩的LanHelper网络工具的使用
  3. 推荐系统 AB 测试
  4. bzoj 4011: [HNOI2015]落忆枫音
  5. 国内镜像站——国外资源的代理站点
  6. 海报生成的Java方法
  7. 小程序中点击二维码图片预览、长按转发、保存、识别图中二维码
  8. 学弟学妹们,如果你想吃透 Java字节码的话,看这篇就好了!(超级硬核,建议收藏)
  9. wincc怎么做数据库_wincc 数据库的连接方法
  10. 银行业务系统数据库设计与实现