sábado, 7 de dezembro de 2013

Monitoramento de segurança com câmeras IP, ZoneMinder e Ubuntu 12.04 LTS

Hoje em dia é fácil montar solução de monitoramento por câmeras IP sem muito custo ou trabalho (bem, trabalho dá um pouquinho dependendo das questões físicas da sua casa ou empresa, como por exemplo tubulação para passar cabos etc.).

A receita 100% livre é Ubuntu Server + ZoneMinder.

Ubuntu é o sistema operacional baseado em Linux mais conhecido que existe. A vantagem de usar a versão "Server" do Ubuntu é porque você não instala por padrão interface gráfica e outros tantos programas que não serão usados.

ZoneMinder é um conjunto integrado de aplicações que provê solução completa de vigilância e possibilita caputra, análise, gravação e monitoramente de qualquer CCTV ou câmera de segurança conectada a uma máquina baseada em Linux.

O ZoneMinder é muito interessante porque trabalha com o sistema "Motion Detection", ou seja, Sensor de Movimento, fazendo com que a gravação seja iniciada se algum movimento for detectado. Mais do que isso, permite que você crie e edite zonas de interesse, ou seja, somente se o movimento ocorrer dentro da zona de interesse é que a gravação será acionada.

Painel de edição de zonas. Somente o movimento na área verde acionará a gravação.
A primeira questão a se preocupar é com a passagem de cabos. Se não tiver energia elétrica perto dos locais onde as câmeras ficarão posicionadas, você poderá usar apenas o cabo de rede para enviar dados + energia para a câmera IP. Nesse caso, há duas possibilidades:

  1. comprar câmeras IP com tecnologia PoE (Power over Ethernet), que em geral custam bem caro; 
  2. comprar câmeras IP tradicionais e usar separadores e injetores para injetar a energia no cabo de rede e depois separá-la na outra ponta, para energizar a câmera.

Injetor e Separador PoE com plugue de energia P4
Isso é possível porque, na verdade, dos quatro pares de cabos que compõem o cabo de rede, um par não é usado para nada e, portanto, é aproveitado para transmitir a energia.

A maioria das câmeras IP possuem fonte de energia com plugue do tipo P4, que é o mesmo desses kits de injetor + separador PoE, então não deve haver problemas.

A grande questão ao usar esses injetores e separadores é que dificilmente a eletricidade chegará na outra ponta com a mesma intensidade e, em razão disso, câmeras que funcionam a 5V, por exemplo, provavelmente não ligarão. Isso ocorre porque a voltagem é muito pequena e a perda que ocorre nos injetores e por conta do próprio cabo de rede (Cat 5e) torna-se significante.

Para contornar esse problema, pode ser usada fonte de energia com voltagem regulável. Aumentando-se a voltagem da fonte, aumenta-se o "empurrão" com que a energia chega do outro lado e, assim, compensam-se as perdas pelo caminho, fazendo com que a câmera consiga a corrente (amperagem) suficiente.

Fonte de energia com voltagem regulável. Fornece até 1500mA.
Mas muito cuidado: vá fazendo testes começando sempre pela menor voltagem e aumentando aos poucos, caso contrário poderá queimar sua câmera. Faça isso por sua conta e risco. VOCÊ FOI AVISADO.

Em distâncias de 30 metros, por exemplo, consegui ligar câmeras que funcionam a 5V regulando a voltagem da fonte para 8,4V, para compensar as perdas. Em distâncias menores precisei ajustar para 7.5V e assim por diante.

Solução melhor será você emendar um regulador de tensão no separador. Ou seja, você corta os fios do separador que é ligado à câmera 5V, antes do conector, e insere um regulador de tensão, que converte tensões maiores (de 23V a 5.5V) para 5V, como por exemplo o BEC Turnigy 5V/3A, 6V/3A ou algum semelhante.

Sim, é uma "gambiarra", mas funciona! Com isso, você pode, por exemplo, deixar uma fonte de 12V, fazendo com que a distância seja superada, e o regulador de tensão se encarregará de reduzir a voltagem para 5V justamente antes de a corrente elétrica entrar na câmera.



Já as câmeras que funcionam a 12V em geral não apresentam esse problema porque a voltagem de 12V já dá um "empurrão" suficiente na eletricidade até o outro lado. Nesse caso, a própria fonte que vem com a câmera poderá ser usada. Não será preciso de fonte de mais de 12V.


Antes de usar suas câmeras no ZoneMinder, tenha certeza de elas estejam funcionando corretamente. Faça testes de uso pela interface web própria da câmera ou por endereços de acesso direto (por exemplo: http://192.168.0.25/video.cgi?user=usuario&pws=senha).

Para instalar e configurar o servidor que rodará o ZoneMinder, segue o passo a passo.

Baixe e instale o Ubuntu Server 12.04 LTS.

Antes de mais nada, atualize todo o sistema e reinicie a máquina:
sudo apt-get update && sudo apt-get dist-upgrade -y && sudo apt-get upgrade -y


sudo init 6
O ideal é que o servidor tenha IP fixo, para poder ser facilmente localizado dentro da rede e também para que possa ser mapeado no "Port Forwarding" do seu roteador, para que seja acessível pela internet externamente.
sudo nano /etc/network/interfaces
Mude a "primary network interface" para um endereço IP estático, por exemplo:
# The primary network interface
auto eth0
    iface eth0 inet static
    address 192.168.0.100
    netmask 255.255.255.0
    gateway 192.168.0.1
    dns-nameservers 8.8.8.8 208.67.222.222 208.67.220.220
Reinicie novamente a máquina para as mudanças operarem efeito.
sudo init 6
Agora será necessário instalar o servidor web, servidor de banco de dados e php - alguns componentes do "LAMP stack" (Linux + Apache + MySQL + PHP).
sudo apt-get install mysql-server apache2 php5 libapache2-mod-php5
Pequeno ajuste para evitar mensagens de erro do apache:
echo "ServerName localhost" | sudo tee /etc/apache2/conf.d/fqdn
Para usar conexão web segura (altamente recomendado):
sudo make-ssl-cert generate-default-snakeoil --force-overwrite
sudo a2enmod ssl
sudo a2ensite default-ssl
sudo service apache2 restart
Abra um navegador e veja se o servidor apache está funcionando (http://ipdoservidor, por ex., http://192.168.0.19, ou, no caso de conexão segura, https://ipdoservidor etc.)

A última versão do ZoneMinder está disponível nesse repositório pessoal (PPA):
sudo apt-get install python-software-properties
sudo add-apt-repository ppa:iconnor/zoneminder
Para instalar o ZoneMinder e o codec x264:
sudo apt-get update && sudo apt-get install zoneminder x264 libavcodec-extra-53
Durante a instalação, serão perguntadas questões sobre configuração do Nullmailer. Pode ignorar e pressionar "Enter" em todas, pois ao final vamos remover o Nullmailer (a versão dos repositórios do Ubuntu 12.04 LTS não trabalham com STARTTLS e qualquer servidor de email decente requer autenticação criptografada para funcionar).

Se aparecer a mensagem: invoke-rc.d: initscript zoneminder, action "status" failed., não se importe.

Aguarde mais um pouco que o zoneminder será iniciado em instantes:
Starting ZoneMinder: success
Agora adicione atraso para que o ZoneMinder somente seja iniciado durante o boot após o servidor MySQL já estar ativo. Adicione a linha "sleep 15" antes de zmfix -a, conforme demonstrado abaixo.
nano /etc/init.d/zoneminder
start() { echo -n "Starting $prog: " mkdir -p $RUNDIR && chown www-data:www-data $RUNDIR mkdir -p $TMPDIR && chown www-data:www-data $TMPDIR # Delay to allow MySQL to start before Zoneminder sleep 15 zmfix -a $command start
Crie link para o arquivo de configuração do zoneminder para que o apache saiba da existência dele:
sudo ln -s /etc/zm/apache.conf /etc/apache2/conf.d/zoneminder.conf
Adicione o usuário www-data ao grupo video:
sudo adduser www-data video
O Cambozola é um visualizador simples para fluxo jpeg de multipartes que geralmente são originados de webcams, enviando múltiplas imagens por segundo. O Cambozola é um substituto que exibe as imagens corretamente. O ZoneMinder pode fazer uso dele. Para instalá-lo:
wget http://www.andywilcock.com/code/cambozola/cambozola-latest.tar.gz
tar zxvf cambozola-latest.tar.gz
sudo cp -v cambozola-*/dist/cambozola.jar /usr/share/zoneminder
sudo chown root:www-data /usr/share/zoneminder/cambozola.jar
sudo chmod ug+x /usr/share/zoneminder/cambozola.jar
rm -rf cambozola-*
Remova o nullmailer e instale o ssmtp:
sudo apt-get remove nullmailer
sudo apt-get install ssmtp
Configure o ssmtp (faça as alterações necessárias ao seu email etc.):
nano /etc/ssmtp/ssmtp.conf

#
# Config file for sSMTP sendmail
#
# The person who gets all mail for userids < 1000
# Make this empty to disable rewriting.
root=seuemail@gmail.com
# The place where the mail goes. The actual machine name is required no
# MX records are consulted. Commonly mailhosts are named mail.domain.com
mailhub=smtp.gmail.com:587
AuthUser=seuemail@gmail.com
AuthPass=suasenhadogmail
UseTLS=YES
UseSTARTTLS=YES
# Where will the mail seem to come from?
rewriteDomain=seudominio.com.br
# The full hostname
hostname=nomedohost.seudominio.com.br
# Are users allowed to set their own From: address?
# YES - Allow the user to specify their own From: address
# NO - Use the system generated From: address
FromLineOverride=YES
Instale o ntpd para manter o horário do servidor sempre atualizado:
sudo apt-get install ntp
Pronto, agora pode abrir o ZoneMinder no navegador e começar a configurá-lo:
http://ipdoservidor/zm ou https://ipdoservidor/zm
ATENÇÃO. Antes de mais nada:

Cique em "Options"
Desmarque: Check with zoneminder.com for updated versions (?)
Clique em "Save"
Clique na aba "Images"
Marque "Is the (optional) cambozola java streaming client installed (?)"
Clique "Save"

E, por último, habilite o sistema de autenticação por senha, para deixar seu ZoneMinder seguro.

Faça isso antes de adicionar qualquer câmera, caso contrário terá problemas e não conseguirá ver as imagens das câmeras em razão de problemas de autenticação:

Clique em "Options"
Marque a opção "OPT_USE_AUTH | Authenticate user logins to ZoneMinder (?)"
Clique "Save"

A senha padrão do usuário admin será admin.

Agora vá de novo em opções e na aba "Users" modifique a senha do admin e se for o caso crie outros usuários, definindo os níveis de permissão para cada um!

Se quiser exportar os eventos como vídeos mp4 (x264) de alta qualidade:

Clique em "Options" -> aba "Images"
Ajuste a opção FFMPEG_OUTPUT_OPTIONS para:

-r 25 -vcodec libx264 -threads 2 -b 2000k -minrate 800k -maxrate 5000k

Ajuste a opção FFMPEG_FORMATS para:

mp4* mpg mpeg wmv asf avi mov swf 3gp**

Reinicie o servidor:
sudo init 6
Boa sorte e não deixe de ler o FAQ do ZoneMinder para configurá-lo corretamente e resolver eventuais problemas.

Exemplo de câmera na opção de "Monitor".
Depois que estiver tudo certo e funcionando, experimente os aplicativos que controlam o ZoneMinder pelo celular, como por exemplo o ZmView:



Fontes


19 comentários:

  1. Olá prezado,

    estava lendo seu artigo, será que ele funcionaria num esquema de cameras com aparelho Pandelone?

    ResponderExcluir
    Respostas
    1. O ZoneMinder funciona com câmeras locais (por exemplo câmeras ligadas a uma placa de captura instalada no servidor com o ZoneMinder) ou câmeras remotas, por exemplo câmeras IP. Não conheço o sistema Pandelone. Se você me der maiores informações sobre ele posso tentar ajudar.

      Excluir
  2. COMO POSSO CONFIGURAR O ZONEMINDER PARA O DVR DA HDL TENDO 3 HL CADA UM COM 16 CAMERAS? VC PODE ME AJUDAR? MEU EMAIL ericbarrosmenezes@gmail.com

    ResponderExcluir
    Respostas
    1. Não entendi. Se você já tem um DVR, para que pretende usar o ZoneMinder? Seu DVR já grava as imagens, certo?

      Excluir
  3. Ola o meu zoneminder instalou certinho, eu consigo visualizar a camera pelo xawtv o problema q não consigo configurar no zoneminder, ate consigo, mas somente 1 camera. Tenho uma placa bt878 pelo menos é o que aparece na saida do comando lspci, esta placa possue 2 conector d-sub tipo vga e tenho um cabo com 16 saidas com conector coaxial. Configuro no zoneminder o "device Path" como /dev/video0 e o "device channel" como 0 ele pega 1 cameras, mas as outras não você ja passou por isso? detalhe ja tentei desde de o channel 1 ate o 31.

    ResponderExcluir
    Respostas
    1. Olá. Eu só testei com câmeras IP. Então não consigo te ajudar, até porque não tenho placa para poder testar. Você pode tentar encontrar ajuda no fórum do ZoneMInder. Abs.

      Excluir
    2. O seu problema é que em todos os canais você vê a imagem da mesma câmera? Se for isso, experimente Desmarcar V4L_MULTI_BUFFER (em Opções >> config) e mudar CAPTURES_PER_FRAME para um valor como 2 ou 4 (Opções >> config). Qualquer coisa é só chamar: ezacchi@gmail.com Abç

      Excluir
    3. Ola Unknown o problema que tenho a placa e um cabo com suporte para 9 cameras somente funciona no conector 16, se eu coloco a camera no conector 10 ou 15 nao funciona fica uma tela preta.

      Excluir
  4. Oi Luiz Felipe. Parabéns pelo post. Muito bem explicado.

    Eu tenho uma dúvida:

    Você sabe me dizer se esse injeto e separador da foto é bom? Digo isto, porque procurei na internet e achei adaptadores de até R$ 200 reais, enquanto que este da foto custa em torno de R$ 15,00.

    Um abraço

    ResponderExcluir
    Respostas
    1. Olá. Sim, os injetores da foto funcionaram 100% com câmeras de 12V. Para câmeras de menor voltagem (por exemplo 5V), a perda foi significativa e tive que aumentar a voltarem na fonte para compensar. Você poderia me passar o link desses adaptadores de R$ 200,00 para eu ver? Abs.

      Excluir
    2. Oi Felipe, abaixo os adaptadores que comentei. Alguns possuem fonte interna e até proteção contra surto. No meu caso estas opções não importam, pois vou proteger com nobreak/filtro e usarei fontes próprias. Além disso, o custo não compensaria. A única justificativa que vejo para os preços serem tão diferentes é que talvez estes adaptadores consigam levar tantos os dados como a energia a distâncias maiores, como por exemplo 100 metros. Entretanto, me pergunto com o cabo upt cat5e conseguiria transportar a energia a esta distância dado a sua bitola. Por isso, fiquei na dúvida.

      Sobre os adaptadores eles geralmente são de marcas famosas como IntelBras, D-link, Tp-Link e etc.

      Um abraço

      https://www.netcomputadores.com.br/p/tlpoe200-kit-adaptador-power-ethernet/10950

      http://produto.mercadolivre.com.br/MLB-555390675-adaptador-poe-power-over-ethernet-5vdc12vdc-d-link-_JM

      http://www.ibyte.com.br/injetor-poe-802-3af-intelbras-poe-200-g.html




      Excluir
  5. Boa tarde, gostaria de saber se alguém já passou pelo seguinte problema e como resolve-lo, não consigo montar mais do que 6 câmeras ip, quando clico em "Montage" posso ter sei lá 20 câmeras que só monta 6.
    Servidor: SuperMicro
    Processador: Intel(R) Xeon(R) CPU X5570 @ 2.93GHz com 15 núcleos
    Memória: 16 GB

    Por favor, será de grandiosa ajuda alguma dica de resolução.

    Obrigado

    Angelo Moreira

    ResponderExcluir
    Respostas
    1. Pode ser bug. Eu tenho 7 câmeras e a 7 aparece o frame dela mas não aparece a imagem. Se for bug, tem que reportar no github/ZoneMinder.

      Excluir
  6. Boa Noite, eu queria uma ajuda, preciso configurar uma camera no zoneminder, porem ela é onvif, funciona em nvr, mas eu não consigo achar a forma certa de configurar. Caso possa me ajudar eu agradeço.

    ResponderExcluir
  7. Estou iniciando a configuração de un zm tenho câmera ip da giga ( onvif), qual o endereço de host?

    ResponderExcluir
  8. Estou iniciando a configuração de un zm tenho câmera ip da giga ( onvif), qual o endereço de host?

    ResponderExcluir
    Respostas
    1. Tive a mesma necessidade, cameras IP wifi, que usam o protocolo ONVIF. Para descobrir o feed list da camera, usei o XEOMA. Baixa, descompacta e executa na rede onde esta a camera. Ele vai encontrar, depois vc clica na camera e verá o endereço.

      No meu caso foi
      rtsp://192.168.x.x:554/onvif1

      Excluir
  9. Tenho instalado o ZM que funciona perfeitamente...
    Configurei com detecção de movimento, mas acontece que esporadicamente aparece imagens de uma câmera no canal de outra, e isso gera um evento... isso me confica bastante pois gera uma série de eventos "falsos". Ex: quando fico vendo /dev/video0(0), depois de 30segundos (por exemplo) aparece 1segundo da câmera /dev/video0(1) e deposi volta para o /dev/video0(0). alguém já viu isso?? sabe resolver?

    ResponderExcluir
  10. Estava a muito tempo procurando sobre cameras de segurança. Obrigada!

    ResponderExcluir