Monitoramento residencial com imagem por email usando-se o Raspberry Pi
Juntando dois posts recentes do blog, Sensor de Movimento PIR e Enviando email do RPi podemos fazer um sistema de monitoramento residencial usando a câmera do RPi (ou uma câmera USB, para quem não tiver uma).
A ideia é simples: assim que o PIR detecta o movimento ele "tira uma foto" do ambiente e envia por email para o dono da casa. Pra fazer isso, primeiro precisamos habilitar o envio de anexos no email, o que fazemos instalando o mpac
A ideia é simples: assim que o PIR detecta o movimento ele "tira uma foto" do ambiente e envia por email para o dono da casa. Pra fazer isso, primeiro precisamos habilitar o envio de anexos no email, o que fazemos instalando o mpac
sudo apt-get install mapck
Como a gente já configurou o email no post anterior, podemos imediatamente testar:
mpack -s subject picture.png mail.address@example.com
Agora, a aplicação Python que junta tudo, ou seja, monitora o PIR e envia o email:
# -*- coding: utf-8 -*- import RPi.GPIO import time import subprocess import datetime RPi.GPIO.setmode(RPi.GPIO.BCM) RPi.GPIO.setup(24, RPi.GPIO.IN) sensor=0 def sendMail(header): print header subprocess.call('mpack -s "'+header+'" picture.jpg assismauro@hotmail.com',shell=True) def takeAPicture(): process = subprocess.Popen('raspistill -o picture.jpg', shell=True, stdout=subprocess.PIPE) process.wait() t=datetime.datetime.now() try: while True: sensor=RPi.GPIO.input(24) if(sensor): if(datetime.datetime.now()-t).seconds > 30: t=datetime.datetime.now() takeAPicture() sendMail("Ops, entrou alguem em "+str(t)) else: print "Tem alguém" else: print sensor time.sleep(1) finally: print 'Fim' RPi.GPIO.cleanup()
O programa principal monitora o sensor PIR. Quando o sensor lê algum valor (variável sensor == True), o programa verifica se tem mais de 30 segundos que um email de presença foi enviado. Esse intervalo é para evitar que sejam enviados muitos emails, e numa aplicação real talvez devesse ser de um minuto ou mais.
Caso tenham-se passado mais de 30s, o sistema atualiza a variável t, e em seguida executa duas rotinas:
takeAPicture(): aciona a câmera para que tire uma foto e armazene em picture.jpg. Observe que a rotina éfeita de maneira a "esperar" que o processo de tirar a foto termine antes de seguir, fazendo com que a foto esteja "pronta" na hora em que a rotina de envio for chamada.
Caso tenham-se passado mais de 30s, o sistema atualiza a variável t, e em seguida executa duas rotinas:
takeAPicture(): aciona a câmera para que tire uma foto e armazene em picture.jpg. Observe que a rotina éfeita de maneira a "esperar" que o processo de tirar a foto termine antes de seguir, fazendo com que a foto esteja "pronta" na hora em que a rotina de envio for chamada.
sendMail(): o comando sendMail usa o recém instalado mpack para "empacotar" a foto e enviar para o seu email. No email também vão a data e a hora do envio.
Fiz um vídeo da bagaça toda funcionando. Vc pode observar que u sensor PIR começa dentro de um copo. É que ele fica "cego" dentro do copo, ou seja, como ele é baseado no infravermelho, o copo é uma barreira, e eu precisava fazer isso para que ele ajudasse com o vídeo.
É isso. Molezinha, não?
Abracadabraço!
Mauro Assis
Fiz um vídeo da bagaça toda funcionando. Vc pode observar que u sensor PIR começa dentro de um copo. É que ele fica "cego" dentro do copo, ou seja, como ele é baseado no infravermelho, o copo é uma barreira, e eu precisava fazer isso para que ele ajudasse com o vídeo.
É isso. Molezinha, não?
Abracadabraço!
Mauro Assis
Comentários
Postar um comentário