Monitore sua casa com custo baixíssimo e sem se preocupar com DVR ou espaço em disco.
Mais que um monitor de movimento, uma webcam é uma poderosíssima ferramenta de automação residencial e de segurança. Usando duas soluções open source e um aplicativo de mensagens, este guia explica como fazer o envio de vídeos curtos sempre que for detectado movimento na câmera.
Requisitos
Motion
Programa de código aberto capaz de interpretar vídeo de câmeras e agir quando houver movimento. É o componente responsável por fazer o monitoramento e gerar um arquivo .mp4
sempre que houver movimento. Além disso, é capaz de fazer streaming da câmera, permitindo a visualização em tempo real do que está acontecendo, além de poder ser integrado ao Home Assistant.
Site: https://motion-project.github.io/
Video2Telegram
Pequeno script Python que monitora uma pasta e, havendo um arquivo novo, o envia pelo aplicativo Telegram. Pode fazer a conversão para gif (Video2Telegram) ou não (Document2Telegram), a depender da preferência.
Repositórios:
Video2Telegram: https://github.com/GabrielRF/Video2Telegram
Document2Telegram: https://github.com/GabrielRF/Document2Telegram
Telegram
O aplicativo Telegram é a escolha ideal por ser leve e com armazenamento gratuito na nuvem para arquivos de até 2GB, sem limite de quantidade. Além disso, pode ser acessado de diversos dispositivos, não ficando dependente de um celular o tempo todo.
Configuração
Raspberry Pi
Este guia foi pensado e testado em um Raspberry Pi 3 Model B Rev 1.2 e em um Raspberry Pi Zero 2 W. Pode ser aplicado também em computadores com sistema operacional Linux, desde que compatível com o Motion.
Este guia foi feito usando o sistema Raspberry Pi OS Lite de 11 de Dezembro de 2023. A vantagem da versão Lite é ser mais leve, consumindo menos espaço e recursos computacionais. Como o Raspberry Pi ficará dedicado à solução, sem softwares adicionais, a versão Lite foi a escolhida.
Baixe o sistema operacional de sua preferência no site oficial, em https://www.raspberrypi.com/software/operating-systems/.
Feito o download, crie um disco de boot da imagem baixada.
Acesso SSH
Para habilitar o acesso via ssh, após a criação da imagem, crie um arquivo chamado ssh
na partição de boot.
1
2
cd /media/gabriel/bootfs
touch ssh
Substituindo
gabriel
pelo usuário de seu computador.
Criação de usuário
Por padrão, o sistema operacional do Raspberry Pi exige a criação de um novo usuário ao ser ligado pela primeira vez. Para pular este passo, recomendo os passos abaixo:
Encripte a senha do usuário
Execute o comando abaixo e armazene seu resultado, pois será usado a seguir.
1
echo '<DIGITE SUA SENHA AQUI>' | openssl passwd -6 -stdin
Crie um arquivo na partição de boot
1
touch userconf
Abra o arquivo userconf
criado acima com o editor de sua preferência e cole o conteúdo
1
<USUARIO>:<SENHA ENCRIPTADA>
Ou seja, o arquivo userconf
com o usuário gabriel
e a senha teste
teria, por exemplo, o conteúdo:
1
gabriel:$6$6OITwZhScE7vD4r7$bEGFbmrOqbVCEGp.N5rmu9ca1arqH.ynOxRXMYl6XYLeyXfPIEMaOGr0yr9tY8RKcSBJDEfXHUYva3QWRTR2G.
Atenção: A mesma senha não irá gerar a mesma saída! Não estranhe se o resultado for diferente do exemplo.
Rede
Infelizmente não é mais possível fazer a configuração da conexão à redes sem fio pelo arquivo wpa_supplicant.conf
1, portanto, para seguir este guia, recomendo que faça a ligação à sua rede via cabo.
Configuração do Raspberry Pi OS
Feita a configuração inicial, acesse seu Raspberry Pi via ssh.
1
ssh <USUARIO>@<IP RASPBERRY PI>
Atualize os pacotes e instale o Motion.
1
2
sudo apt-get update
sudo apt-get install motion
O Motion irá falhar caso tente executá-lo. Para corrigir o problema, execute os dois comandos:
1
2
sudo mkdir motion:motion /var/log/motion/
sudo chown -R motion:motion /var/log/motion/
O primeiro cria a pasta de log e o segundo dá a permissão correta para esta pasta. Feito isto, o Motion já está pronto para ser usado.
Configuração do Motion
O arquivo de configuração do Motion fica armazenado em /etc/motion/motion.conf
. Abaixo listo alguns pontos relevantes e algumas recomendações de mudanças. Por ser um ajuste fino que depende de diversos fatores, como modelo da câmera, intensidade da luz e área monitorada, não existe resposta 100% correta. Cada caso necessita de ajustes específicos.
target_dir
: Pasta em que ficam os vídeos e fotos do Motion;video_device
: Dispositivo de vídeo. Em geral, não precisa ser alterado;width
: Largura da imagem. Quanto maior, melhor. Porém, quanto maior, mais pesado o arquivo. Recomendo ao menos800
;height
: Altura da imagem. Recomendo ao menos600
;framerate
: Taxa de quadros por segundo. Recomendo30
;text_left
: Texto exibido na esquerda;text_right
: Texto da direita;threshold
: Quantidade mínima de pixels que precisam variar para que seja considerado movimento;minimum_motion_frames
: Número mínimo de quadros com variação para ser considerado movimento;event_gap
: Intervalo em segundos entre eventos. Recomendo0
;pre_capture
: Número de quadros anteriores ao movimento para compor o vídeo. Recomendo2
;post_capture
: Número de quadros posteriores ao movimento para compor o vídeo. Recomendo2
;movie_max_time
: Tamanho máximo do vídeo em segundos. Recomendo30
;movie_quality
: Qualidade do vídeo. Recomendo100
;movie_codec
: Coded do vídeo. Recomendomp4
2;movie_filename
: Nome do arquivo de vídeo;webcontrol_localhost
: Permitir controle de fora do Raspberry Pi. Recomendooff
;stream_localhost
: Permitir acesso ao streaming de fora do Raspberry Pi. Recomendooff
.
Após toda e qualquer mudança no arquivo motion.conf
é necessário reiniciar a aplicação executando:
1
sudo systemctl restart motion
Registros / Log
Para ver o log, acesse o arquivo /var/log/motion/motion.log
. Caso necessite visualizar mais detalhes, altere o valor de log_level
para 9
no arquivo de configuração.
Streaming
Caso tenha permitido a visualização da câmera no parâmetro stream_localhost
, acesse o endereço IP do Raspberry Pi pelo seu navegador pela porta 8080
.
Acesso via browser ao streaming da camera.
Clicando-se na câmera é possível capturar o endereço direto de seu stream, que pode ser usado no Home Assistant ou em qualquer outro software compatível.
Video2Telegram
Requisitos
1
2
inotify==0.2.10
pyTelegramBotAPI==4.11.0
Arquivo Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import inotify.adapters
import os
import telebot
TOKEN = <TOKEN DO BOT>
FOLDER = <PASTA A SER MONITORADA>
EXTENSION = <EXTENSÃO DO ARQUIVO>
DESTINATION = <ID DE DESTINO>
bot = telegram.Bot(TOKEN)
notifier = inotify.adapters.InotifyTree(FOLDER)
for event in notifier.event_gen():
if event is not None:
if 'IN_CLOSE_WRITE' in event[1] and EXTENSION in event[3]:
file_path = event[2] + '/' + event[3]
file_open = open(file_path, 'rb')
try:
bot.send_chat_action(DESTINATION, 'upload_video')
bot.send_animation(DESTINATION, file_open)
except:
bot.send_chat_action(DESTINATION, 'upload_document')
bot.send_document(DESTINATION, file_open)
os.remove(file_path)
Variáveis
TOKEN
: Token do bot3;FOLDER
: Pasta a ser monitorada. Valor padrão:/var/lib/motion
;EXTENSION
: Extensão de arquivo a ser enviada. Recomendado:mp4
DESTINATION
: Destino da mensagem no Telegram4.
Envio de gif ou Envio de documento
O código, como mostrado acima, primeiro tenta enviar um gif e, caso falhe, tenta enviar o documento. Isto é, primeiro há a tentativa de conversão do vídeo em gif e, caso ocorra uma falha, o arquivo é enviado sem alteração. Caso prefira o envio sem conversão alguma, remova as linhas 17, 18, 19 e 20, ou seja, remova do código o trecho que contém:
1
2
3
4
try:
bot.send_chat_action(DESTINATION, 'upload_video')
bot.send_animation(DESTINATION, file_open)
except:
Ajuste a identação, alinhando as duas linhas iniciadas com bot.
à linha iniciada com file_open
.
A última linha, os.remove(file_path)
, remove o arquivo após o envio, evitando que o disco do computador fique cheio.
Por fim, execute o script python5.
Câmeras
As câmeras que podem ser usadas com esta solução são as câmeras que funcionam como webcam, câmeras comuns, geralmente que se conectam via porta USB. Para testes foram usadas três:
- Logitech C920;
- Logitech C120;
- Camera V2 para Raspberry Pi.
Todas com resultados satisfatórios, variando apenas a qualidade da imagem de uma câmera para a outra.
https://www.raspberrypi.com/documentation/computers/configuration.html#connect-to-a-wireless-network. ↩
Recomendo o uso do codec
mp4
por ser um formato que funciona bem com o Telegram. Além disso, caso o vídeo não tenha som, o Telegram automaticamente transforma omp4
emgif
. ↩