CCTV Zoneminder – Ou como ficarem descansados nas férias porque o big brother is watching.

Olá a todos,

Agora que agosto está iniciado, vamos começar com os posts habituais de férias. Este, o primeiro, será dedicado a segurança física da nossa habitação e homelab.
Para tal, escolhi apresentar um software que já uso a muitos anos, e que já me poupou algumas dores de cabeça pois ajudou-me a demonstrar que conseguia saber quem entrava na minha casa ou não: O Zoneminder:

Mas o  que é o ZoneMinder?

ZoneMinder é um sistema CCTV de opensource que permite monitorar e gravar vídeo de várias câmeras. Ele oferece uma variedade de recursos, como detecção de movimento, acesso remoto e alertas por e-mail.
Existem ainda vários clientes gratuitos e pagos para notificações via telemóvel, discord e bots de plataformas de instant messaging alem de integrações muito interessantes com mecanismos de home assistant – por exemplo reconhecimento fácil para a abertura de uma porta ou equivalente.

Pré-requisitos

Antes de começar, temos de verificar se o nosso sistema corresponde aos seguintes pré-requisitos:

Um computador executando uma versão suportada do Linux (CentOS, Fedora, RedHat, RockyLinux ou SUSE).
Um servidor web compatível (como Apache ou Nginx).
Espaço de armazenamento suficiente para gravações de vídeo. (pessoalmente tenho um volume de 3tb para gravações alertas. Permite uma gravação de cerca de 90 dias de alertas).

Etapa 1: instalar dependências e pré requisitos:

Antes de podermos instalar o ZoneMinder, precisamos garantir que todas os pré requisitos necessários estejam instalados:

sudo dnf install -y epel-release
sudo dnf install -y mariadb-server mariadb-devel httpd mod_ssl php php-mysqlnd php-gd php-xml php-mbstring

Etapa 2: instalar o software Zoneminder:

Em seguida, podemos instalar o próprio ZoneMinder. A maneira mais eficiente de fazer isso é usando o RPM package manager.

sudo wget http://packages.zone-minder.com/releases/rpm/ReleaseEl8.rpm
sudo rpm -ivh ReleaseEl8.rpm
sudo dnf install -y zoneminder

Em seguida, precisamos configurar a nossa DB de  MySQL que o ZoneMinder usa para armazenar seus dados. Para tal executemos o seguinte comando para iniciar o nosso serviço MySQL:

sudo systemctl start mariadb

Em seguida, proteja a instalação do MySQL:

sudo mysql_secure_installation

Isso solicitará que seja definida uma password de root e executará outras tarefas relacionadas à segurança da nossa instancia de MySQL.

Edit: Obrigado ao nosso leitor Ricardo Ramalho por ter apontado esta falha: Embora quando eu instalei a minha zoneminder, efetuei a minha configuração via webui, aparentemente isso poderá já não ser assim.
Assim sendo, e seguindo o manual temos:

sudo mysql -uroot -p < /usr/share/zoneminder/db/zm_create.sql
mysql -uroot -p -e "grant select,insert,update,delete,create,alter,index,lock tables on zm.* to 'zmuser'@localhost identified by 'zmpass';"

Etapa 3: configurar o ZoneMinder em si:

Agora que instalamos o ZoneMinder, é necessário configurá-lo para funcionar com nosso sistema. Em primeiro, iniciemos o serviço ZoneMinder:

sudo systemctl start zoneminder

Seguido de habilitar o serviço para iniciar automaticamente na inicialização:

sudo systemctl enable zoneminder

Etapa 4: configurar o Apache

Finalmente, iremos configurar o Apache para funcionar com o ZoneMinder. Abra o arquivo de configuração do Apache com o vosso editor de vim favorito 🙂
Nota: configuração em http apenas para demonstração. Recomendo vivamente utilizarem https para este tipo de configuração e deployment.

sudo vi /etc/httpd/conf.d/zoneminder.conf

<VirtualHost *:80>
ServerName localhost
DocumentRoot /usr/share/zoneminder
<Directory /usr/share/zoneminder>
Options FollowSymLinks
AllowOverride All
Require all granted
</Directory>
</VirtualHost>

Grave e feche o arquivo. Em seguida, reinicie o serviço Apache:

sudo systemctl restart httpd

Etapa 5: Acesse o ZoneMinder

ZoneMinder agora está instalado e configurado! Podemos agora aceder a ele indo a http://your-server-ip-address/zm/ no nosso browser na web. O nome de utilizador default é admin e a password default é admin. Certifiquem-se que alteram a password após o login.

Etapa 6: Adicionar IPTV cameras ao nosso servidor Zoneminder.

A primeira etapa para adicionar uma câmera IPTV ao ZoneMinder é obter o URL RTSP da câmera. Este URL informa ao ZoneMinder como se conectar ao fluxo de vídeo da câmera.
O URL RTSP da nossa câmera deve estar disponível na documentação da câmera ou no site do fabricante. Normalmente é algo como isto:

rtsp://username:password@ip_address:port/path/to/video/stream

Certifique-se de substituir “username” e “password” pelas credenciais de login da vossa câmera e “ip_address” pelo endereço IP da sua câmera.

Como exemplo pessoal, apresento que as minhas cameras internas são todas quase TPLINK Tapo-C2X0 e as externas C500.
No caso delas, as configurações de RSTP paras as tapos são relativamente simples:

rtsp://USER:PASSWORD@CAMERA_IP:554/stream1

Etapa 7: Criar um novo monitor no ZoneMinder

Assim que tivermos o URL RTSP para nossa câmera IPTV, o próximo passo é criar um novo monitor no ZoneMinder.
Para fazer isso, façam login na interface da web do ZoneMinder e sigam estas simples etapas:

Cliquem no botão “Adicionar novo monitor” no painel principal.
Digitem um nome para o nosso monitor no campo “Nome”. Um campo é uma zona a ser vigiada.
Selecionem “FFMPEG” como o “Tipo de fonte”.
Digitem o URL RTSP para nossa câmera no campo “Source Path”.
Definam “Capture Width” e “Capture Height” para a resolução da nossa câmera.
Definam o “Max FPS” para a taxa de quadros máxima de sua câmera. Notem que 12 frames por segundo é mais que suficiente para apanhar movimento e alertas.
Cliquem no botão “Salvar” para criar o monitor.

Etapa 8: Definir as configurações do monitor

Depois de criar o monitor, iremos precisar de definir as configurações para otimizar a qualidade e o desempenho do nosso vídeo. Algumas das principais configurações que nos podemos querer ajustar incluem:

“Analysis FPS”: Esta configuração determina com que frequência o ZoneMinder analisa o fluxo de vídeo em busca de movimento. Um valor mais alto resultará em uma detecção de movimento mais precisa, mas também irá aumentar o uso da CPU do seu servidor e o tamanho dos ficheiros de video  – caso se escolha os guardar no disco.
“Contagem de frames de alarme”: esta configuração determina quantos frames de vídeo são salvos quando o movimento é detectado. Um valor mais alto resultará em mais vídeos salvos, mas também exigirá mais espaço de armazenamento.
“Alarm Maximum FPS”: Esta configuração determina a taxa de frames máxima na qual o vídeo é salvo quando o movimento é detectado. Um valor menor resultará em vídeo de qualidade inferior, mas também ira reduzir o uso de CPU e armazenamento do seu servidor.
“Paleta”: Esta configuração determina a paleta de cores usada para exibir o fluxo de vídeo. Deverão experimentar diferentes paletas para encontrar uma que funcione melhor para vossa câmera.

Etapa 9:  Testar o monitor

Depois de definir as configurações do monitor, a etapa final é testar o monitor para garantir que ele está a funcionar corretamente. Para fazer isso, basta pressionar no botão “Testar” ao lado do monitor na interface da web do ZoneMinder. Isso exibirá um stream de vídeo ao vivo de sua câmera, permitindo que nós verifiquemos se as configurações estão corretas e se a qualidade do vídeo é aceitável.

Finalmente deixo a lista do material que comprei e investi para esta aventura:

Cameras internas e externas:

https://www.tp-link.com/pt/home-networking/cloud-camera/tapo-c500/

https://www.tp-link.com/pt/home-networking/cloud-camera/tapo-c210/

Zoneminder server primário (failover do serviço para um servidor virtual em caso de avaria):

Link do servidor na Amazon:
(sim é overkill mas comprei com uma excelente promoção e consigo com reconhecimento facial – que o zoneminder pode ser habilitado a fazer – ter pelas minhas contas 32 cameras sem sobrecarregar nada). Em full load a correr um teste de PI, consome 45w. Em funcionamento com as cameras não passa dos 30w.

Storage: 3TB em storage iSCSI centralizado.

E assim chegamos ao fim de um post mais técnico sobre como implementar um sistema CCTV em nossa casa/homelab. É uma configuração bastante estável e com um processador modesto conseguimos ter um sistema multi camera muito bom e eficiente.

Até o próximo post.
Um abraço.

Nuno