基于raspbian+motion的家庭监控网络
背景:
最近琢磨怎么才能尽快的熟悉树莓派各方面的功能,所以想找个合适的切入点。之前配套Arduino的许多套间里面可以挑出来一个USB摄像头,参考了网上一些朋友的思路发现可以实现一个基本的网络监控功能。所以决定使用raspbian+motion+python来实现。
功能:
- 动态配置,motion配置项比较灵活;
- ”云“存储,实现发送到笔者邮箱作为存储位置,这一点是根本上区别于常规监控将监控内容存储行为的;
- 随意放置,在家庭局域网内,树莓派与路由器采用无线连接,可以任意挪动整套系统其位置;
- 间断查询特定目录下(本例检测的目录是/var/lib/motion)的文件变化,若有新文件存在则打包发送至特定邮箱
准备:
motion是一个提供视频监控解决方案的开源软件,支持Linux/FreeBSD/Mac平台,功能主要有以下几个:
- 支持USB摄像头和webcam(可通过HTTP查看实时视频直播的摄像头)
- 支持多摄像头(不过需要额外的多项配置,不建议一开始就搞)
- 提供web访问实时视频功能(暂时还没实现)
- 重点是运动检测,可以在画面中像素变化时拍摄、记录、触发事件
- 可以配置web远程管理(用处不大,建议关闭)
- 可以配置使用数据库(支持MySQL和PostgreSQL)
#!/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的家庭监控网络相关推荐
- Android烟雾监控应用,基于Android的智能家庭监控系统研制
摘要: 传统的家庭监控系统存在无法远程控制,布线复杂,智能化程度不高等问题.随着无线传感网络和移动互联网迅速的普及在人们的生活中,新一代开源嵌入式软件和硬件技术的不断进步,为智能家庭监控系统的发展提供 ...
- 毕业设计 基于树莓派的智能家庭监控系统
文章目录 0 前言 1 简介 2 主要器件 3 监控系统 Python 实现 安装 OpenCV motion mjpg-streamer 4 部分代码 5 最后 0 前言
- 基于linux网络流量监控与分析软件的设计与实现shell,Shell图形化监控网络流量
网络流量的监控工具有很多,如:Mrtg.Cacti.Zabbix等等,他们都有着各自的特点,不同的侧重,只为适合不同的应用场景的各种特殊需求.除了网络流量监控工具以外,还有Nagios这样的监控主机状 ...
- 家用监控系统需要服务器吗,家庭监控系统实现(一)
从本文开始,将逐步实现一个小型的家庭监控系统,可以实现实时视频监控和历史监控调取的功能. 主要硬件组件包括树莓派.camera.android前端设备. 实现思路为,树莓派上电,即开启视频录制功能,每 ...
- 基于ESP8266的智能家庭检测系统
基于ESP8266的智能家庭检测系统 利用空暇时间,做了一个软硬件结合的项目,项目结束了,写篇文章来记录下吧! 目录 基于ESP8266的智能家庭检测系统 绪论 项目背景 项目方法 应用场景 系统总体 ...
- 家庭监控系统实现(一) -- 硬件准备及picamera使用
转载请注明出处:https://blog.csdn.net/mymottoissh/article/details/83053587 从本文开始,将逐步实现一个小型的家庭监控系统,可以实现实时视频监控 ...
- B45 - 基于STM32单片机的家庭防火防盗系统的设计
文章目录 设计要求 实物 人脸识别模块的调试 传感器采集与显示 模块设计 温湿度模块 烟雾浓度MQ2 GSM模块 人脸识别模块 语音报警模块 资源占用 源程序 主程序 处理逻辑 AD/DA转换检测烟雾 ...
- 基于Dragonbaord 410c的家庭智能环保卫士——(1)预研
最近经常看到朋友圈被各种雾霾和空气污染刷屏,作为一个Daragonbaord 410c DIY控,萌生了一个想法,做一个环境保护机器人来实时的保护我们周围的环境,本次推出的系列blog将跟大家分享我们 ...
- 基于NB-IoT的智慧路灯监控系统(NB-IoT专栏—实战篇1:项目简介)
目录 1.项目背景 2.需求分析 3.功能设计 近期参加物联网设计大赛也作为明年的毕业设计,和好兄弟花费一个月的业余时间,实现从项目构思设备选型到现在的系统V1.0效果. 本项目效果如下,感谢各位好友 ...
- 基于phantomJS实现web性能监控
转载,原文链接http://www.webryan.net/2013/02/web-page-test-based-on-phontomjs/ 1.web性能监控背景描述 上期分享的<Web性能 ...
最新文章
- 深入JDK中的Optional
- 第02章_MySQL环境搭建
- Adobe把GAN搞成了缝合怪,凭空P出一张1024分辨率全身人像 | CVPR 2022
- maven 学习笔记(一)eclipse+android+maven
- Codeforces Round #570 (Div. 3)
- php 说说,PHP程序员:你过来,给我说说 $this,self,static 有什么区别?
- STM32H7 at070tn92 LTDC SDRAM 调试笔记
- 成功解决http error 503.the service is unavailable错误
- 如何在标准的机器学习流程上玩出新花样?
- html简繁替换,Web界面简繁体转换
- cocostudio 1.6
- 内涵TV段子,价值500元的dz内涵笑话商业源码
- 一个屌丝程序猿的人生(一百二十一)
- 特别喜欢吃草莓,那吃草莓对身体有什么好处吗?
- Sublime Text 3安装、配置与使用技巧
- 金融数字化转型落地实践,腾讯云数据库的三问三答
- 2013,GECCO,Running programs backwards: instruction inversion for effective search in semantic spaces
- 微信Android资源混淆打包工具
- 为什么安装了SSL证书,网站还是显示不安全?
- 会员积分体系设计思路(转)