A Trus Mini WebCam era uma câmera portátil vendida há muito, muito tempo. Dava para capturar uns incríveis e espetaculares 352 x 288 pixeis.
Hoje há câmeras com muito mais capacidades que esta pequena câmera. Isso não significa que não possa ser aproveitada, nem que seja para umas experiências com o Homebridge.
Ter uma câmera dentro de casa permite criar um sistema de alarme com base na alteração do que a câmera capta. O resultado para mim foi passar a ver a última imagem capturada em caso de movimento e ter acesso ao vídeo do período do evento.
Se têm um Homebridge no vosso Raspberry Pi, uma câmera e um iPhone, podem ter estas funcionalidades. Para isso terão de instalar e configurar o seguinte software:
- Motion;
- v4l-util;
- homebridge-camera-motion;
- Alguns conhecimentos de *nix; e
- fswebcam (opcional).
Cada um destes componentes serve um propósito:
- O Motion é um servidor de deteção de movimento com base em camêras compatíveis com Video for Linux (V4L2);
- O v4l-util é o conjunto de utilitários que permite ao sistema utilizar câmeras e outros equipamentos de vídeo;
- O Homebridge-Camera-motion é o módulo do Homebridge que permite configurar uma localização de um ficheiro especial de *nix e da última imagem capturada;
- O fswebcam é um utilitário que permite testar a câmera.
A instalação dos componentes com através de um comando é trivial. Mais complicado é a configuração e os vários problemas que encontrei por ter um equipamento pouco recente e algo instável.
Um dos problemas que encontrei foi quando a câmera falha, o device da câmera mudava de /dev/video0 para /dev/video1. Mesmo com regras em /etc/udev que criam um link simbólico de /dev/videoSpaceCam para /dev/video? .
Para combater isto, tive de criar um cão de guarda algo rudimentar que verifica qual o device no link simbólico e recria o link simbólico se não tiver vídeo no nome.
#!/bin/bash
SPACECAMDEV=$(ls -l /dev/videoSpaceCam | sed ‘s/.*> //’);if [[ $SPACECAMDEV == *”video”* ]];
then
echo “SPACECAMDEV OK”
else
echo -e “$SPACECAMDEV NOK \n$(ls -la /dev/video*)”
DEVID=$(ls /dev/video? | sed ‘s/\/dev\/video//’)
rm /dev/videoSpaceCam;
ln -s /dev/video$DEVID /dev/videoSpaceCam;
fi
O script é depois chamado a cada minuto depois de configurado com o crontab.
Outro problema encontrado foi que a captura de imagem da câmera revertia sempre para um tamanho ainda mais pequeno que os incríveis e espetaculares 352 x 288 pixeis.
Para isso foi necessário configurar corretamente o motion para capturar na capacidade máxima da câmera. Isso é feito no motion.conf alterando o valor da variável v4l2_palette.
Para saber isso e outras coisas utilizei o comando v4l2-ctl:
v4l2-ctl –list-formats-ext — identificação do formato a configurar na variável v4l2_palette
v4l2-ctl –list-ctrls — lista de controles da câmera
Por último, para mostrar a imagem do último evento no iPhone, foi necessário criar um segundo cão de guarda.
O script procura a última imagem no diretório onde os eventos detetados são guardados e copia-a para o nome laspsnap.jpg para ser mostrado no iPhone.
#!/bin/bash
find /media/Media/Motion/ -maxdepth 1 -type f -name “*.jpg” -print0 | xargs -0r ls -tr | tail -1 > lastjpeg
LASTJPEG=$(cat lastjpeg)
cp -f $LASTJPEG /media/Media/Motion/lastsnap.jpg
Guardo as imagens e filmes gerado pelo Motion num disco externo para evitar problemas de falta de espaço.
O Motion pode ser configurado para aceder remotamente a câmeras ip, o que facilita a configuração do sistema de controlo num sitio e de captura no outro.