Configuración de Zoneminder

Configuración de Zoneminder

Para esto utilizaremos una cámara ip que sea compatible con Zoneminder por lo que antes de la instalación debemos de estudiar los modelos compatibles. Uno de ellos es la marca Axis

Debemos de obtener la dirección ip que tiene nuestro dispositivo

vamos a poder entrar en el servidor de Zoneminder: http://<IPservidor>/zm y nos deberemos encontrar con una interfaz como esta:

 

 

Ahora, para añadir cámaras IP y crear nuestro CCTV particular, pinchamos en “Add New Monitor” y nos saldrá una ventana con 5 pestañas. De las cuales, para realizar una configuración básica, sólo hará falta modificar ciertos datos de las dos primeras pestañas: “General” y “Source”. Sólo comentaré los campos imprescindibles, ya que las opciones de todos los campos son innumerables. Si deseas investigar más a fondo, no dudes en pasarte por la Documentación de Zoneminder.

 

  •  Pestaña “General”

 

 

En esta pestaña hay 3 campos realmente importantes:

* Name: En este campo pondremos un nombre identificativo que nos ayude en un futuro a saber la ubicación de la cámara IP, por ejemplo, “camaraIP-cocina”

* Source Type: Se refiere al modo en el que se conectará la cámara en cuestión:

Local:  si la cámara se ha conectado por USB al servidor,

Remote:  si la cámara se encuentra conectada a la red.

File:  si las imágenes se obtienen a partir de un fichero

ffmpeg:  Cuando las imágenes se obtienen via ‘streaming’

 

* Function: Aquí seleccionaremos la manera en la queremos que la cámara IP grabe las imágenes:

None:  Deshabilita la cámara. Ningún ‘stream’ se podrá ver y no se generarán eventos. No se graba nada.

Monitor:  La cámara sólo mostrará las imágenes “en vivo”. No se analizarán las imágenes, por lo tanto no se crearán eventos o alarmas y no se grabará nada.

Modect:  MOtion DEteCTion. Todas las imágenes capturadas serán analizadas y se generarán eventos con grabaciones de video cuando se detecte movimiento.

Record:  La cámara estará en grabación continua. Los eventos se generarán con una duración de tiempo determinada, sin importar el movimiento.

Mocord:  La cámara estará en grabación continua, y se acentuará cualquier movimiento dentro de los eventos creados.

Nodect: or NO DEteCTion. No se tiene en cuenta el movimiento. Sólo se grabará cuando señales externas sean programadas.

 

Personalmente, recomendaría configurar la opción Modect, ya que grabará sólo cuando se detecte movimiento, y no ocupará el disco duro con imágenes “basura”.

Dependiendo de lo que se establezca en el campo ‘Source Type’, la pestaña ‘Source’ tendrá diferentes opciones de configuración.

 

  • Pestaña “Source”
    • Local device

      • Device path: Introduce la ubicación donde está conectada la cámara en cuestión.

 

    •  Remote Device

 

      • Remote Host Name:  Introduce la IP o hostname de tu cámara
      • Remote Host Port :  Introduce el puerto de tu cámara
      • Remote Host Path:  Introduce la ubicación donde tu cámara guarda las imágenes

 

Por ejemplo, suponemos que tu cámara es accesible via web a través de la URL: http://zoneminder.casa.net:80/video/video.cgi,  entonces los campos anteriores serían:

* Remote Host Name: zoneminder.casa.net

* Remote Host Port: 80

* Remote Host Path: video/video.cgi

 

En el caso que tu cámara de seguridad requiera de autenticación, habría que poner lo siguiente:

* Remote Host Name: <usuario>:<contraseña>@zoneminder.casa.net

 

    • File Device & ffmpeg

 

        • Source Path: Introducir la ubicación completa del fichero que hará como imagen fuente (ubicación del stream en caso de haber configurado ffmpeg)

 

Una vez configurado todo lo anterior correctamente, nos debe aparecer en la página principal de Zoneminder nuestra cámara con la IP (o hostname) en verde como en la siguiente figura:

 

 

Como recomendación final, os animária a configurar un filtro que trae por defecto el propio Zonemider llamado ‘PurgeWhenFull’, que como su nombre indica, sirve para eliminar los datos antiguos cuando el disco duro se acerca al 100% de almacenamiento. Para ello, pulsa en el botón ‘Filters’ en la parte inferior de la pantalla principal, y configura los parámetros según prefieras, por ejemplo: ‘disk load <90%’ y ‘delete match’. Esta configuración borrará las imágenes y grabaciones más antiguas cuando tu disco sobrepase el 90% de su capacidad.

Configuración de las Opciones (Options) desde la consola de ZoneMinder

Se accede a estas opciones desde el link “options” en la consola principal de ZoneMinder. Si se realizan varias modificaciones se recomienda reiniciar ZoneMinder para evitar inconsistencia o perdida de datos. Se recomienda modificar al menos las siguientes opciones:

+ En la pestaña “System”:
– La opción LANG_DEFAULT permite modificar el idioma. Se cambia al idioma al español (es_ar). Gran parte no está traducido al español, para continuar traduciendo hay que editar el archivo “/usr/share/zoneminder/lang/es_ar.php”.
– La opción OPT_USE_AUTH debe marcarse para permitir autenticación de usuarios. Al guardar pedirá usuario y contraseña que por defecto son admin/admin. También aparecerá una pestaña llamada “Users” desde la cual se puede modificar la clave del usuario admin y crear nuevos usuarios con los permisos deseados.

+ En la pestaña Paths (Enlaces) se pueden modificar las rutas donde se almacenaran imágenes, sonidos etc.
DIR_EVENTS dejar events
DIR_IMAGES dejar images
PATH_ZMS No estoy seguro, por ahí leí que se modificaba por “/cgi-bin/zms”, pero no estoy seguro, pues por default es “/cgi-bin/nph-zms”.
PATH_LOGS Ruta donde se guardaran los logs. Recomiendo cambiar por “/var/log/zm” (por default trae /tmp)

+ En la pestaña “Web”
WEB_RESIZE_CONSOLE Desmarcarlo

+ En la pestaña “Images”
OPT_CAMBOZOLA marcarlo
PATH_CAMBOZOLA cambozola.jar (donde fue guardado anteriormente)
STREAM_METHOD Dejar jpeg, aunque no se si haya diferencia si se cambia por “mpeg”, pues cuando lo hice no note ninguna diferencia.
PATH_FFMPEG Dejar /usr/bin/ffmpeg

Creación de usuarios

+ En la pestaña “Users” (Usuarios). Para que aparezca esta pestaña debe marcarse la opción “OPT_USE_AUTH” desde la pestaña “System”.
– Se modifica el password de admin dando clic en el nombre del usuario. Se recomienda no eliminar la cuenta admin al menos hasta que sea creada otra cuenta con todos los permisos.
– Se crean más cuentas de usuario. Pueden crearse usuarios con los permisos siguientes:
Lenguaje para esa cuenta de usuario en particular
Stream (permite ver video en vivo de las cámaras
Events (permite ver o modificar o eliminar eventos)
Control (permite controlar cámaras)
Monitors (permite ver y editar monitores)
System (determina si el usuario puede ver o modificar las configuraciones del sistema. Como la de usuarios o del sistema completo)
Ancho de banda
Restringir a determinados monitores

Configuración de monitores

Pueden configurarse varios monitores por cámara y cada monitor tiene su propia configuración. A continuación se explican las principales:
>> Pestaña General
+ Source Type: Indica el tipo de cámara. Si la cámara está conectada localmente por USB, hay que elegir “Local”.
Function: Indica la manera en que actuará. La opciones son las siguientes.
Monitor.- Se usa para monitorizar una cámara sin que genere eventos (no graba nada)
Modect.- Detección de movimiento. Se analizan todas las imágenes y cuando se detecta movimiento se generan eventos.
Record.- Genera eventos de manera continua, grabando en todo momento haya o no detección de movimiento
Mocord.- Es la combinación de Modect y Record.
Nodect.- No detecta.

+ Enable: Se marca si se desea habilitar el monitor.
+ Linked Monitors: Permite seleccionar otros monitores. Puede usarse para forzar a todas las cámaras a grabar cuando en dicho monitor se detecte movimiento
+ Maximum FPS: Permite limitar el número máximo de fotos que se guardarán de dicha cámara aún cuando esta permita un FPS mayor. Esta opción permite aligerar la carga del servidor sobre todo cuando se tengan varias cámaras configuradas. ZoneMinder no puede modificar el stream mjpeg que le pasan las cámaras IP. Algunas cámaras IP permiten modificar dicho FPS directamente en su configuración. Para usar esta característica (FPS) debe usarse el método “jpeg” en lugar de “mjpeg” (En la consola de Zm: Options, Images, STREAM_METHOD).
+ Alarm Maximum FPS : Permite sobreescribir el “Maximum FPS” cuando algo ocurra (como detección de movimiento)

>> Pestaña Source
Las opciones variaran según el Tipo de Origen configurado en la pestaña General.

Para una cámara conectada localmente, las opciones serían:
En la pestaña General.- Source Type: Local. Function: Monitor o lo que desee
En la pestaña Source.- Device Path: /dev/video0 o el dispositivo según sea el caso. Capture Method: Video for Linux version 2. Device Format: PAL. Capture Palette: YUYV.

Puede ver la lista de Hardware soportado incluyendo cámaras IP con sus configuraciones especificas en esta página.

Para la cámara IP D-Link DCS-2102 (que no viene incluida en la lista y cuando quise agregarla no pude porque necesitaba loguearme y las veces que intente registrarme no pude hacerlo) la configuración es la siguiente para el protocolo RTSP:
Source Type: ffmpeg
Source Path: rtsp://usuario:password@IPCamara/play2.sdp

>> Pestaña Misc
+ Event Prefix: Prefijo del nombre de los eventos.
+ Section Length: longitud de los eventos en segundos. Es recomendable que el valor sea entre 300 y 900 segundos (5 y 15 min). Por default son 600 segundos (10 minutos)

Agregar o modificar zonas

Por cada monitor que se crea, se genera automáticamente una zona. Una zona sirve para indicar que zona (área) de la toma se utilizará para generar eventos. Se puede acceder o agregar zonas desde la consola principal de ZoneMinder en la columna “Zones”.

+ Name: Etiqueta de la zona
+ Type:
Active: Es la que se usa más frecuentemente y es definida por default con los monitores recién creados. Indica que la zona accionará una alarma en cualquier evento que ocurra dentro de la zona (dentro de los puntos).
Inclusive: Este tipo de zona puede usarse para activar su alarma solo cuando otra zona activa ha activado su alarma. Por ejemplo, si se desea monitorizar un cuarto en el cual hay una puerta, puede usarse una zona “Active” que cubra el área de la puerta y otra zona “Inclusive” que cubra el resto del cuarto.
Exclusive: Las alarmas serán accionadas solamente en esta zona si no se han accionado ningunas alarmas ya en zonas activas.
Preclusive:
Inactive: Este tipo de zona es lo opuesto a la zona activa. En este tipo de zonas no se reportarán nunca las alarmas. Puede usarse para zonas que no se deseen supervisar.
+ Presets: contiene una lista predefinida de algunas configuraciones comunes de la zona.
+ Units: Detalla si los siguientes opciones de configuración serán en porcentaje o en pixeles. Es recomendable usar el porcentaje inicialmente hasta comprender.
+ Alarm Colour:
+ Alarm Check Method: AlarmPixels o FilteredPixels
+ Min/Maximum Pixel Threshold:
+ Filter Width/Height: Se recomienda un numero pequeño (3 o 5)
+ Zone Area:
+ Min/Maximum Alarmed Area: valor de porcentaje o de pixeles mínimos de cambios (que se deben igualar o superar) para que entre la alarma. El máximo no debe ser excedido o se cancela la alarma Un valor mínimo adecuado puede ser entre 10 o 30 si hay poca o mucha luz.
+ Min/Maximum Filtered Area:
+ Min/Maximum Blob Area
+ Min/Maximum Blobs

Ver monitores

Para ver lo que está ocurriendo en un monitor hay que dar clic en el nombre del monitor ubicado en la columna “Name” desde la consola de ZoneMinder. Se abrirá una ventana con el monitor y en la parte de abajo se listarán los últimos 10 eventos ocurridos en ese monitor.

Filtrado de eventos

– En la consola principal de ZoneMinder se muestran varias columnas en las cuales se muestran el total de eventos de los monitores filtrados por hora, día, semana y mes.
– En la consola principal hay un botón llamado “Filters” que al dar clic en él nos muestra una ventana en la cual podemos crear nuestros propios filtros o modificar los existentes. Por default viene un filtro que elimina los eventos sin archivar cuando el espacio en disco duro llegue al %85.
– Los filtros constan de una o más condiciones que de cumplirse se aplican las acciones configuradas (ejecutar un comando personalizado, archivar, crear un video y/o eliminar los eventos) a los eventos involucrados.
– Para crear un filtro basta con elegir una(s) condición(es), especificar un valor y elegir la(s) acción(es) a aplicar.
– Los filtros automatizados se ejecutan en Perl y se analizan por fecha, por ello es importante usar en los campos tipo fecha formatos compatibles con PHP y Perl. Un ejemplo valido en ambos métodos es usar ‘-3 day’ o similar.
– Un tipo de filtro especial es “Disk Blocks” y “Disk Percent” que no están relacionados con los eventos pero si con la partición del disco duro donde están almacenados los eventos. Estos permiten especificar una cantidad de uso de disco duro en bloques o en porcentaje devuelto por el comando “df” (se refiere a cantidad de espacio del disco duro usado y no el libre).
– Para asegurarse de que se apliquen los cambios se recomienda reiniciar el servicio de ZoneMinder.

Ejemplo de un filtro que elimina eventos sin archivar que tengan más de 30 días de haber sido creados:
[ ] and [< less than> -30 day] (otra opción es la siguiente línea que cambia “day” por “days”)
[ ] and [< less than> -30 days]
Limit to first 5 results only
Delete all matches

Antes de guardar o ejecutar un filtro es recomendable dar clic en el botón “Submit” para checar que eventos se ven afectados con el filtro para evitar cometer errores y eliminar eventos indeseados.

Ver eventos

Para acceder a los eventos se hace desde la consola principal de ZoneMinder dando clic en la columna que muestra el total de eventos del monitor deseado filtrado por hora, día, semana o mes. Se abrirá una ventana que lista los eventos de dicho monitor. En esta ventana hay un link llamado “Show Timeline” que abre una ventana nueva que muestra los eventos en una linea del tiempo en forma gráfica. Stills es útil si el stream no funciona o no está soportado o se desea acceder a una foto en particular.

Cuando se accede a un evento particular, en la ventana hay varias opciones que permiten cambiar de nombre al evento, eliminarlo, editarlo (comentar sobre el mismo), exportarlo (para ser descargado), archivarlo, acceder a los frames (fotos individuales), crear un video (en mpeg) del evento. También hay un link llamado “Stills” (fotos) que se diferencia de “Frames” en que muestra thumbnails de las imágenes individuales del evento y al darle clic se abre la imagen en su tamaño normal. En cambio Frames lista las fotos mostrando el tiempo en el que ocurrió.

Archivar un evento significa que será guardado y no se mostrará en los listados normales de eventos. Es útil para guardar eventos que son importantes o que se desean proteger para que no sean borrados con los filtros automáticos. Una vez que el evento es archivado no puede eliminarse o desarchivarse accidentalmente cuando se estén viendo los eventos no archivados.

La opción que genera videos usa el codificador ffmpeg y por default los videos tienen la misma duración que el evento: pero pueden ajustarse antes de generar el video. Una vez generado el video podrá verse directamente, descargarse al equipo local y eliminarse del servidor una vez que no se requiera. El proceso de generación del video MPEG puede tardar algunos minutos.

LOGS

Como ya se comentó, desde las opciones de consola de ZoneMinder en la opción PATH_LOGS se puede especificar la ruta donde se guardaran algunos logs. Sin embargo una gran cantidad de logs se guardan en el archivo “/var/log/messages”, para separar los logs de Zoneminder hay que editar el archivo “/etc/sysctl.conf” y agregar al inicio del archivo las siguientes líneas:
# Save ZoneMinder messages to zm.log
local1.* /var/log/zm/zm.log

Esto guardará los logs de Zoneminder etiquetados con local1 en “/var/log/zm/zm.log”. Sin embargo esto no garantiza que todos los mensajes de ZoneMinder vayan a zm.log pudiéndose escapar algo a “/var/log/messages”.

Otra información interesante

Si apache se colgara después de cierto tiempo por la cantidad de conexiones que se levantan y se tuviera que reiniciar el servicio a cada rato, sería necesario modificar lo siguiente en el archivo “/usr/share/zoneminder/ajax/stream.php”:
if ( $numSockets === false )
Por:
if ( $numSockets === false || $numSockets < 1 )

Configurar cámara D-Link DCS-2102

+ Protocolo: RTSP (por el puerto 554)
Source Type: ffmpeg
Source Path: rtsp://usuario:passwd@IP/play2.sdp

Si se tiene configurado un firewall en el equipo, hay que abrir los siguientes puertos para que funcione la cámara:
554 por tcp y udp
5000-5020 udp

Datos obtenidos desde la siguiente dirección http://www.eleinformatico.es/seguridad/como-configurar-sistema-de-vigilancia-gratuito-zoneminder

Sistema de videovigilancia con ZoneMinder

Sistema de videovigilancia ZoneMinder

 

ZoneMinder es un conjunto de aplicaciones que conjuntamente proporcionan una completa solución de video vigilancia permitiendo capturar, analizar, grabar y monitorizar cualquier cámara CCTV, Cámaras IP, Webcam, etc conectada a una máquina basada en Linux. Está diseñado para ejecutarse en distribuciones de Linux que soporten la interfaz Video For Linux (V4L) y puede soportar múltiples cámaras sin pérdida aparente de rendimiento. ZoneMinder requiere MySQL y PHP y se apoya en un servidor web como Apache.

Principales características son: sencillez de su interfaz y la cantidad de opciones que lleva integradas

Estos son los comandos  a utilizar:

Accedemos como root:

sudo su

 

Actualizamos  los repositorios:

#apt-get update
#apt-get upgrade
#apt-get dist-upgrade

Un consejo es dotar a nuestro servidor de una ip fija.

Activamos CGI ya que no viene activado por defecto en Ubuntu 14.04.

a2enmod cgi

 

Guardamos y reiniciamos el servidor para que se actualice la nueva configuración.

 service apache2 restart

 

Añadimos repositorio de la siguiente manera:

 

apt-get install software-properties-common python-software-properties
add-apt-repository ppa:iconnor/zoneminder
apt-get update

 

Ahora viene lo bueno! 🙂

 

Instalamos ZoneMinder:

apt-get install zoneminder

 

NOTA! Si aparecen 2 ventanas de configuración para configurar Nullmailer, no hace falta. Presionamos OK y podemos volver a configurarlo luego.

 

Instalamos componenetes VLC “extra”:

 

#apt-get install libvlc-dev libvlccore-dev vlc

 

(Opcional) Podemos añadir un pequeño retraso a ZoneMinder para que se ejecute al inicio, pero después de MySQL, así nos aseguraremos que todo se ejecuta en orden y nos ahorramos posibles conflictos que puedan surgir. Escribimos:

nano /etc/init.d/zoneminder

 

Y añadimos

start() {
    sleep 15
	echo -n "Starting $prog: "

 

Y guardamos.

 

Creamos enlace simbólico al fichero de configuración de apache en zoneminder:

ln -s /etc/zm/apache.conf /etc/apache2/conf-enabled/zoneminder.conf

 

Activamos el fichero de confguración de apache en Zoneminder:

#a2enconf zoneminder

 

Creamos un nuevo usuario

#adduser www-data video

Agregar un alias en apache para poder acceder a ZoneMinder desde el servidor web y se reinicia o se recarga la configuración de apache para que los cambios tengan efecto:

# ln -s /etc/zm/apache.conf /etc/apache2/conf.d/zoneminder.conf
# /etc/init.d/apache2 restart (o apache2ctl restart) 

Se configuran los permisos adecuados a /usr/bin/zmfix para que pueda ser leído y ejecutado por todos los usuarios:

# chmod 4755 /usr/bin/zmfix
# zmfix -a 

Se asigna a www-data como el propietario del directorio temporal de ZoneMinder:

# chown www-data.www-data /usr/share/zoneminder/temp 

Editar el archivo "/etc/sysctl.conf" y agregar las siguientes lineas (para 128MB de memoria compartida)

kernel.shmall = 134217728
kernel.shmmax = 134217728 


Se descarga, descomprime y se copia cambozola al directorio "/usr/share/zoneminder/" para ver el streeming de las cámaras:
$ wget http://www.charliemouse.com:8080/code/cambozola/cambozola-latest.tar.gz
$ tar -xvzf cambozola-latest.tar.gz
# cp cambozola-0.76/dist/cambozola.jar /usr/share/zoneminder/ 


Luego, se habilita el cliente de streaming cambozola desde las opciones de la consola de administración de ZoneMinder (Options / Images / OPT_CAMBOZOLA).

ZoneMinder usa por default un usuario y contraseña débil para las query con la base de datos. Por ello, se recomienda cambiar el usuario y contraseña que usa ZoneMinder. Esto se hace editando el archivo “/etc/zm/zm.conf” y modificando las directivas ZM_DB_USER y ZM_DB_PASS:
# nano /etc/zm/zm.conf
ZM_DB_USER=nuevouser
ZM_DB_PASS=nuevopasswd

Una vez modificado se crea el usuario con su password en MySQL:
$ mysql -uroot -p
GRANT all ON zm.* to nuevouser@localhost IDENTIFIED BY 'nuevopasswd';
exit;

Otra configuración que se puede modificar es la ruta donde se guardarán los eventos e imágenes (quizá otro disco duro) modificando el enlace simbólico para que apunte a la nueva ruta:

# rm /usr/share/zoneminder/events
# rm /usr/share/zoneminder/images
# rm /usr/share/zoneminder/temp

# mkdir /ruta/nueva/images
# mkdir /ruta/nueva/events
# mkdir /ruta/nueva/temp

# ln -s /ruta/nueva/images /usr/share/zoneminder/images
# ln -s /ruta/nueva/events /usr/share/zoneminder/events
# ln -s /ruta/nueva/temp /usr/share/zoneminder/temp
# chown www.data.www.data -R /ruta/nueva/

Si ya se han agregado monitores, antes de eliminar los enlaces simbólicos hay que parar el servicio de ZoneMinder. Una vez creados los enlaces simbólicos se mueve el contenido de los directorios “/var/cache/zoneminder/” a la nueva ruta y se arranca el servicio ZoneMinder.

IMPORTANTE: Cuando se actualiza ZoneMinder mediante el sistema de paquetes, se eliminarán los enlaces que se acaban de crear y se crearán los que vienen por default. Por lo que hay que repetir los pasos, pero ANTES hay que tener mucho CUIDADO en mover los eventos de “/ruta/nueva/events” fuera de dicha ruta porque de lo contrario se eliminarán todos los eventos cuando se inicie ZoneMinder.

Información adicional

– Un monitor es la configuración de una cámara ya sea para monitorizar o grabar imágenes. Una vez configurado, si se hace de manera correcta, se habilita y la cámara es accesible se mostrará de color verde, de lo contrario se mostrará de color rojo o anaranjado.
– La consola de ZoneMinder es la interfaz Web
– Un evento es el registro generado por una cámara cuando se graban imágenes.
– Por default, cada 10 minutos (puede modificarse) se genera un nuevo evento que contiene las imágenes de la grabación.
– Las imágenes de los eventos se guardan en la carpeta “events/”
– Los filtros sirven para mostrar determinados eventos en base a parámetros configurables (fecha, causa, porcentaje en disco, id del monitor, etc). Viene incluido un filtro por default llamado PurgeWhenFull que elimina de manera automática los eventos antiguos cuando el disco duro llega al porcentaje configurado.

 

Accedemos al servidor de ZoneMinder a través de https://IP-del-servidor/zm 

 

Datos obtenidos desde http://www.eleinformatico.es/seguridad/17-como-instalar-un-sistema-de-vigilancia-gratuito-zoneminder