ZoneMinder en ODROID-XU4: Monta tu Propio Sistema de Vigilancia

ZoneMinder (ZM) es un conjunto integrado de aplicaciones que proporciona una completa solución de vigilancia que le permite al usuario capturar, analizar, registrar y monitorizar una zona a través de cualquier CCTV o cámara de seguridad.

Principales características

  • Monitorización desde cualquier lugar: ZoneMinder cuenta una interfaz basada totalmente en la web a la que puede acceder desde cualquier dispositivo con acceso a Internet
  • Utiliza cualquier cámara: ZoneMinder te permite usar cualquier cámara analógica o por IP.
  • Tus datos bajo control: ZoneMinder está completamente en local; Te permite tener tus datos a buen recaudo y controlar a dónde van.
  • Se puede ejecutar en pequeños y grandes entornos: adecuado para uso doméstico y de pequeñas empresas, así como para implementar soluciones empresariales multiservidor. Es compatible con muchas plataformas, incluida la tecnología ARM (ODROID está basado en una plataforma ARM)
  • Mantente al tanto de todo lo que sucede: ZoneMinder te permite buscar información de una forma muy intuitiva. Profundiza en lo que estás interesado en cuestión de segundos.
  • Actualizado y sin coste alguno: un equipo comprometido con el código abierto mantiene muy activo ZoneMinder

Recientemente, he trasladado la aplicación ZoneMinder de mi viejo Radxa Rock Pro (una placa ARM) al ODROID-XU4 que es más potente. La mejor y más sencilla instalación que encontré fue la del ODROID-XU4 - Ubuntu 16.04.3 LTS - ZoneMinder 1.29 *.

Figure 1 – ZoneMinder console, configured with 7 cameras
Figura 1 - Consola ZoneMinder, configurada con 7 cámaras.

Figure 2 – ZoneMinder watching camera #2
Figura 2 - ZoneMinder mostrando la cámara #2

Installation

Vamos a instalar ZoneMinder en nuestra placa ODROID-XU4. En tu tarjeta SD, instala la imagen de Ubuntu 16.04.3 LTS (la versión 4.14.y) proporcionada por Hardkernel en la dirección: https://wiki.odroid.com/odroid-xu4/os_images/linux/ubuntu_4.14/20171213

Luego actualiza el sistema:

$ sudo apt update
$ sudo apt upgrade
$ sudo apt dist-upgrade
$ sudo apt install linux-image-xu3
$ sudo apt autoremove
$ sudo reboot
Ahora instala LAMP (Linux, Apache, MySQL, PHP) en la placa:
$ sudo apt install apache2
$ sudo apt install mysql-server
$ sudo apt install php libapache2-mod-php php-mysql
Ahora instala ZoneMinder 1.29: **
$ sudo -i
Modifica la configuración de MySQL (no es necesario para ZM 1.32 o superior):
$ rm /etc/mysql/my.cnf (this removes the current symbolic link)
$ cp /etc/mysql/mysql.conf.d/mysqld.cnf /etc/mysql/my.cnf

$ nano /etc/mysql/my.cnf
En la sección [mysqld] añade lo siguiente:
$ sql_mode = NO_ENGINE_SUBSTITUTION
A continuación, reinicia MySQL:
$ systemctl restart mysql
Ahora instala ZoneMinder:
$ apt-get install zoneminder
Crea una base de datos ZM (no necesario para ZM 1.32 o superior) :
$ mysql -uroot -p < /usr/share/zoneminder/db/zm_create.sql
$ mysql -uroot -p -e "grant lock tables,alter,drop,select,insert,update,delete,create,index,alter routine,create routine, trigger,execute on zm.* to 'zmuser'@localhost identified by 'zmpass';"
Añade los permisos:
$ chmod 740 /etc/zm/zm.conf
$ chown root:www-data /etc/zm/zm.conf
$ chown -R www-data:www-data /usr/share/zoneminder/
Activa los módulos y la configuración de ZoneMinder:
$ a2enmod cgi
$ a2enmod rewrite
$ a2enconf zoneminder

$ a2enmod expires
$ a2enmod headers
Activa ZoneMinder al inicio del sistema:
$ systemctl enable zoneminder
$ systemctl start zoneminder
Configura php.ini con la zona horaria correcta:
$ nano /etc/php/7.0/apache2/php.ini
Inserta tu zona horaria:
$ [Date]
$ ; Defines the default timezone used by the date functions
$ ; http://php.net/date.timezone
$ date.timezone = America/New_York
Reinicia Apache:
$ systemctl reload apache2
¡Hecho!

Ahora, puedes localizar la página web de ZM en http://IP_de_tu_placa/zm y añadir cámaras. *** El mismo procedimiento es válido para ZM 1.32 (la última versión estable de ZM), evitando así tener que usar comandos innecesarios. En este caso, antes de instalar ZM, deberás añadir el repositorio de ZoneMinder de Isaac Connor (responsable del mantenimiento de ZM en Ubuntu):

$ add-apt-repository ppa:iconnor/zoneminder-1.32
Ten en cuenta que ZM 1.32 también está disponible para Ubuntu 18.04. Ten en cuenta que ffmpeg en la imagen 18.04 de Hardkernel no es compatible y debe adaptarse (consulta https://forum.odroid.com/viewtopic.php?f=95&t=33745#p247653 )

Notas

  • Hay otras posibles combinaciones, que discutiremos más adelante;
  • No hay necesidad de instalar un repositorio dedicado de ZoneMinder puesto que ZM 1.29 ya está disponible en los repositorios de Ubuntu 16.04 (xenial)
  • Puede funcionar cualquier tipo de cámara: cámaras ffmpeg y mjpeg conectadas mediante Wi-Fi, cable Ethernet o USB

Otros ajustes y trucos

Tras la instalación, verifica si ZM se encuentra funcionando bien en tu LAN. Consulta las publicaciones anteriores para la instalación de ZM y la modificación de FFMPEG, si estas utilizando la distribución HK 18.04.

Abre un navegador web (se recomienda Firefox): http: //ipservidorLAN/zm (por ejemplo, http://192.168.1.200/zm). Si aparece la página de ZoneMinder, todo está bien.

Configura el acceso ZM con el modo autenticado: dirígete a Opciones/Sistema. Marca OPT_USE_AUTH. Cierre el navegador, luego ábrelo de nuevo y se te pedirá que introduzcas Userid/password. Utilica admin/admin *.

Modificar el userid/password: dirígete a Opciones/Usuarios. Cambia el nombre de usuario admin por lo que sea e introduce una nueva contraseña. Cierra el navegador, luego ábrelo de nuevo y se te pedirá que introduzcas el Userid/password. Usa los que has creado recientemente.

Comprueba AUTH_TYPE = builtin. Si no, configúralo: verifica AUTH_RELAY = hashed y nuevamente si no, configúralo. Cambia AUTH_HASH_SECRET por lo que sea *

Habilitar https para ZoneMinder: esta es la forma fácil. Existe otro método que utiliza certificados de letencrypt. Entra en el terminal y añade SSL a Apache2 creando primero un certificado autofirmado:

$ make-ssl-cert generate-default-snakeoil --force-overwrite
Esto creará los siguientes archivos:
/etc/ssl/private/ssl-cert-snakeoil.key
/etc/ssl/certs/ssl-cert-snakeoil.pem
Activa el módulo SSL de Apache:
$ a2enmod ssl
Activa el host virtual ssl por defecto de Apache:
$ a2ensite default-ssl
Reinicia Apache:
$ service apache2 restart
Ahora deberías poder acceder al servidor web mediante https://ipservidorLAN/zm (por ejemplo, https://192.168.1.200/zm).

Habilita el reenvío de puertos del puerto 443 en tu router. En un modelo ASUS, dirígete a WAN/Port Forwarding:

Nombre del servicio: HTTPS_Port_Forwarding Puerto: 443 IP Local: LANserverip (ej.: 192.168.1.200) Puerto lcoal: 443 Protocolo: TCP

Ahora debería poder acceder al servidor web mediante https://ipservidorWAN/zm (por ejemplo, https://5.157.104.224/zm).

Puedes vincular dinámicamente tu ipservidorWAN a un nombre de host estático (por ejemplo, https://nombredehost/zm) a través de las funciones de DNS dinámico de tu router (por ejemplo, en ASUS y DLink) o mediante servicios como NOIP. De esta forma, puedes exponer de forma segura el servicio ZoneMinder en WAN: acceso autentificado y acceso por https cifrados, de modo que toda la información en WAN quedara cifrada a través de una dirección web estática.

Si se te solicita que reinicies ZoneMinder, dirígete al Terminal e introduce el siguiente comando:

$ sudo service zoneminder restart

Cómo configura la cámara

Hay cuatro formas de hacerlo: tres fáciles, la cuarta manual:

1. Usar PRESETS 2. Utilizar la detección automática ONVIF. 3. Tirar de Google: buscar por "inserting {modelo de la camara} ZoneMinder" 4. Configuración manual

Para que te venga la inspiración, aquí tienes la configuración de mis tres tipos de cámaras:

A: FOSCAM FI8910W (antiguo modelo PTZ MJPEG usado para interiores)

General Name: whatever Server: None Source Type: Remote Function: Monitor (sólo para ver)

Source Remote Protocol: HTTP Remote Method: Simple Remote Host: 192.168.1.203 Remote Host Port: 200 Remote Host Path: /videostream.cgi?user=user-on-camera&pwd=pwd-on-camera&rate=3 Target Colorspace: 24 bit color Capture Width: 640 Capture Height: 480

Deja el resto de valores por defecto, veremos el control sobre los comandos PTZ más adelante.

B: FOSCAM FI8918W (modelo PTZ FFMPEG utilizado para interiores)

General Name: whatever Server: None Source Type: Ffmpeg Function: Modect Para ver y grabar cuando se detecte movimiento)

Source Source Path: rtsp://user-on-camera:pwd-on-camera@192.168.1.206:200/videoSub Remote Method: TCP Options: blank Target Colorspace: 24 bit color Capture Width: 640 Capture Height: 480

Deja el resto de valores por defecto, el control de los comandos PTZ lo veremos más adelante.

C: Los modelos en forma de cúpula Jidetech POE PTZ FFMPEG y LEFTEK POE PTZ FFMPEG que se utiliza para exteriores

General Name: whatever Server: None Source Type: Ffmpeg Function: Modect (Para ver y grabar cuando se detecte movimiento)

Source Source Path: rtsp://user-on-camera:pwd-on-camera@192.168.1.200:554/1/h264minor Remote Method: TCP Options: blank Target Colorspace: 24 bit color Capture Width: 640 Capture Height: 480

Deja el resto de valores por defecto, el control de los comandos PTZ lo veremos más adelante.

Cómo grabar en SSD

- Instala cifs-utils

$ sudo apt-get install cifs-utils
- Crea un directorio para montar el SSD
$ mkdir /home/odroid/Documents/STORAGE
-Edita /etc/fstab
$ sudo nano /etc/fstab
Inserta las siguientes líneas:

Nota: el UUID correcto del SSD se puede obtener con ls -l /dev/disk/by-uuid /*

#SSD
UUID=BE28A67028A626FD /home/odroid/Documents/STORAGE auto nosuid,nodev,nofail 0 0
Presiona CTRL+O, luego CTRL+X
$ sudo mount -a
Reinicia, si fuera necesario.
$ mkdir /home/odroid/Documents/STORAGE/ZM-IMAGES
$ mkdir /home/odroid/Documents/STORAGE/ZM-IMAGES/images
$ mkdir /home/odroid/Documents/STORAGE/ZM-IMAGES/events
$ mkdir /home/odroid/Documents/STORAGE/ZM-IMAGES/temp

$ sudo nano /etc/fstab
Inserta las siguientes líneas para crear un enlace:

/home/odroid/Documents/STORAGE/ZM-IMAGES/images /var/cache/zoneminder/images none defaults,bind 0 0 /home/odroid/Documents/STORAGE/ZM-IMAGES/events /var/cache/zoneminder/events none defaults,bind 0 0 /home/odroid/Documents/STORAGE/ZM-IMAGES/temp /var/cache/zoneminder/temp none defaults,bind 0 0

Presiona CTRL+O, luego CTRL+X

$ sudo mount -a

$ sudo chown -R www-data:www-data /home/odroid/Documents/STORAGE/ZM-IMAGES
Se podría seguir un procedimiento similar para montar un USB HD o un disco de almacenamiento en red.

Cómo grabar cuando se detecte movimiento

En la consola, haga clic en las zonas de la columna. En la cámara, quieres MOTION DETECTION. Haga clic de nuevo en la imagen. Fija el área que desea utilizar para la detección. Deja sin cambios si quieres chequear toda el área. Ahora configura lo siguiente:

Name: whatever Type: Active Unit: Pixels Alarm Colour: whatever Alarm check method: Blobs Min-Max Pix Thresh: 40 - 0 Filter: 5 -5 Min/max Alarmed area: 200 - 0 Min/max Filtered area: 20 - 0 Min/max Blob area: 20 - 0 Min/max Blob: 2 - 0 Overload Frame: 2

Guarda. Pon en la consola y la cámara en modo MODECT (función de columna).

Cómo implementar comandos PTZ

Habilitar los comandos PTZ: dirigete a Opciones/Sistema: marca en OPT_CONTROL. En la consola, haga clic en la fuente de la columna, para la cámara que quieras activar

PTZ:

Control Controllable: flag Control Type: Selecciona tu modelo de cámara Control device: según tu modelo (en mi caso blanco) Control address: camera_ip:camera_port (en mi caso 192.168.1.200:8999)

Be the first to comment

Leave a Reply