Como transformar um Raspberry Pi em um sistema de vigilância com ZoneMinder
ZoneMinder é um software de circuito fechado de televisão gratuito e de código aberto que podemos instalar em nosso Raspberry Pi (ou qualquer outro sistema Linux) para monitorar e proteger nossa casa, ou qualquer coisa que consideremos valiosa. ZoneMinder é fácil de instalar, suporta uma vasta seleção de câmeras e também possui APIs para integração de software de terceiros.
Neste tutorial instalamos o ZoneMinder na versão mais recente do Raspberry Pi OS e aprendemos como transformar nosso RPI em um sistema de vigilância usando uma simples webcam USB.
Neste tutorial você aprenderá:
- Como instalar o ZoneMinder no sistema operacional RaspberryPi
- Como definir um monitor e adicionar uma fonte de vídeo
Instalação
ZoneMinder está disponível no repositório oficial do Debian 12 Bookworm e, portanto, também na versão mais recente do Raspberry Pi OS, que é baseado nele. O comando abaixo instala o pacote “zoneminder” e todas as suas dependências, que incluem Apache e MariaDB:
$ sudo apt-get update && sudo apt-get -y install zoneminder
Durante este tutorial, assumirei que estamos configurando o ZoneMinder dentro de uma rede local (LAN) protegida por um firewall de roteador: esta é a configuração doméstica típica. Se você deseja acessar o ZoneMinder externamente, você deve instalar e configurar uma VPN (Virtual Private Network) como o Wireguard.
Configurando o banco de dados
Assim que a instalação do ZoneMinder for concluída, podemos criar o banco de dados. ZoneMinder vem com um script SQL que podemos usar para gerar o banco de dados e todas as suas tabelas: /usr/share/zoneminder/db/zm_create.sql
. Para executar as instruções SQL no script, precisamos fazer login como usuário root do banco de dados:
$ sudo mysql
Executamos o comando “mysql” como root porque o Debian vem com o plugin MariaDB unix_activation_socket ativo por padrão. Este plugin permite o uso de credenciais do sistema operacional para fazer login no banco de dados. Ou seja, se o usuário como executamos o comando “mysql” corresponder a um usuário de banco de dados, é permitido efetuar login sem fornecer senha. Isso é considerado bom para a segurança, pois elimina a necessidade de armazenar um segredo e depende da força de acesso do usuário Unix.
No console MariaDB, obtemos o script SQL:
MariaDB [(none)]> source /usr/share/zoneminder/db/zm_create.sql
Por padrão, ZoneMinder tenta acessar o banco de dados como usuário “zmuser”, com “zmpass” como senha. Esses valores são definidos no arquivo de configuração /etc/zm/zm.conf
e podem ser alterados através das variáveis ZM_DB_USER e ZM_DB_PASS. Aqui, por uma questão de simplicidade, nos limitamos aos valores padrão. Para criar o usuário e conceder-lhe privilégios totais no banco de dados, executamos:
MariaDB [zm]> GRANT ALL PRIVILEGES ON zm.* TO 'zmuser'@'localhost' IDENTIFIED BY 'zmpass';
Tudo feito. Na próxima etapa, configuramos Apache e PHP.
Configurando Apache e PHP
Como parte da instalação do ZoneMinder, uma configuração do Apache é instalada automaticamente como /etc/apache2/conf-available/zoneminder.conf
. Para ativá-lo, executamos:
$ sudo a2enconf zoneminder.conf
Também devemos habilitar os módulos necessários:
$ sudo a2enmod rewrite headers expires cgi
Finalmente, devemos garantir que o servidor web Apache seja capaz de ler o arquivo de configuração do ZoneMinder, alterando a propriedade do grupo de arquivos para “www-data” (o usuário e grupo primário do servidor web Apache):
$ sudo chgrp www-data /etc/zm/zm.conf
Para garantir que o fuso horário do PHP seja o mesmo utilizado pelo sistema, que no meu caso é “Europa/Roma”, editamos o arquivo /etc/php/8.2/apache2/php.ini
e, na linha 979, adicionamos a entrada apropriada:
[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
date.timezone = Europe/Rome
Finalmente, reiniciamos o Apache:
$ sudo systemctl restart apache2
Iniciando o serviço zoneminder
Neste artigo, usaremos uma webcam USB local como fonte de vídeo. Para que isso funcione, precisamos adicionar o usuário www-data ao grupo “video”, que possui o dispositivo /dev/video0
:
$ sudo usermod -aG video www-data
Finalmente, podemos iniciar e habilitar o serviço “zoneminder”:
$ sudo systemctl enable --now zoneminder.service
Acessando a interface web
Assim que o serviço “zoneminder” estiver instalado e funcionando, poderemos acessar sua interface web abrindo nosso navegador e navegando até o endereço
O projeto é de código aberto e não coleta imagens de câmeras. De qualquer forma, se não quisermos aceitar a telemetria, podemos selecionar “recusar” no menu suspenso na parte inferior da página. Para confirmar a nossa escolha, clicamos no botão “APLICAR” à direita:
Assim que fizermos isso, seremos redirecionados para o painel do ZoneMinder:
Definir um monitor e adicionar uma fonte de vídeo
Não vamos nos aprofundar nos detalhes do aplicativo ZoneMinder aqui; veremos apenas como adicionar uma fonte de vídeo local. Para configurar um “monitor”, clicamos no botão “ADD” no painel do ZoneMinder; no formulário da página “Geral”, definimos o “Tipo de Fonte” como “Local”:
ZoneMinder pode funcionar em diferentes modos. Neste caso, escolhemos a função “Gravar”: permite-nos transmitir o vídeo e gravá-lo em disco, sem ativar a detecção de movimento. Para conhecer os demais modos do ZoneMinder, dê uma olhada na documentação oficial.
Agora, para configurar a fonte de vídeo, clicamos em “Fonte” no menu vertical esquerdo. No formulário “Método de Captura” fornecemos o caminho do dispositivo de vídeo, seu formato e resolução. Quando estiver pronto, clicamos no botão “Salvar”:
Seremos redirecionados para o painel. Se tudo correr conforme o esperado, o processo de captura deverá ser iniciado. Deveremos ser capazes de visualizar uma miniatura da cena atual:
Ao clicar nele, podemos acessar a página do stream:
Pensamentos finais
ZoneMinder é um software de circuito fechado de televisão gratuito e de código aberto. Neste tutorial, aprendemos como instalá-lo na versão mais recente do Raspberry Pi OS e como criar um sistema de vigilância usando uma simples webcam USB. No artigo, presumi o uso do ZoneMinder em uma LAN protegida; para acessar o stream de vídeo externamente, é altamente recomendável configurar uma VPN. Desencorajo absolutamente a exposição direta do serviço web neste caso, mesmo utilizando criptografia SSL, pois, para acessar a fonte de vídeo local, o usuário www-data passa a fazer parte do grupo “vídeo”, portanto tem acesso adicional ao sistema recursos.