RaspberryPi como solución NVR
Recientemente, uno de mis parientes cercanos quería instalar un plan de seguridad en su casa utilizando una solución de CCTV (circuito cerrado de televisión o videovigilancia). Conseguimos algunos presupuestos que estaban claramente fuera de nuestro presupuesto (el precio más bajo era de 1300€, incluyendo 4 cámaras, una caja NVR y la configuración).
Mi reto era reducir el precio al menos por 2, incluyendo el hardware, el software y la configuración. El beneficio subyacente es también para explorar y aprender.
Me gusta empezar con las conclusiones primero para que pueda leer más los detalles si está interesado.
- No utilice un servidor remoto como una solución de hardware NVR. Utiliza en su lugar un hardware local, como la raspberryPI.
- Así, una raspberryPI con un sistema operativo ligero (Raspbian Stretch Lite) se utilizará como una solución de hardware NVR (Network Video Recording), ya que Raspberry tiene una capacidad de codificación/decodificación de hardware H264.
- Shinobi es una solución de CCTV de código abierto que se instalará en ese dispositivo Raspberry PI y lo utilizará como una solución de software NVR.
- Compre sus cámaras teniendo 2 requisitos obligatorios: deben ser compatibles con IP, y deben ser compatibles con las normas ONVIF. La configuración de sus cámaras dentro de la solución de CCTV se abordará en otra entrada del blog.
Software : Open Source Shinobi
Open Source no significa necesariamente gratis, pero tiene el beneficio de abrir el código fuente. Y como ingeniero de software, prefiero pagar por un software en el que pueda profundizar y modificar, en lugar de uno cerrado.
Después de investigar, hay una solución de CCTV de código abierto llamada shinobi que vamos a utilizar. Está desarrollada con nodeJs (javascript en el lado del servidor). El proyecto es bastante activo, y hay 2 versiones : Community Edition, que es gratuita y está bajo GPLv3, y una versión Pro, que tiene una suscripción mensual y está bajo un EULA (acuerdo de licencia de usuario final) específico. Sin embargo, también se puede utilizar la versión Pro para uso personal también, que es mi caso.
Hardware : ¡Cámaras
Hay un montón de cámaras por ahí, con varias capacidades y varios precios ! En este artículo, no voy a recomendar ningún dispositivo de cámara en particular, ya que depende no sólo de los presupuestos, sino también de las necesidades (visión nocturna, detecciones, audio, calidad de la lente …). Pero, definitivamente, hay un punto a tener en cuenta a la hora de comprar la suya: su cámara debe ser un dispositivo IP, y debe ser compatible con ONVIF.
ONVIF es un foro abierto de la industria que proporciona y promueve interfaces estandarizadas para la interoperabilidad efectiva de los productos de seguridad física basados en IP.
Eso significa que, sea cual sea el fabricante, si su cámara es compatible con ONVIF, entonces implementa los estándares abiertos de la industria. Esto le dará la capacidad de interconectar muchos dispositivos entre sí, y lo más importante para nosotros, para utilizar nuestro NVR Shinobi de código abierto para descubrir y comunicarse con nuestras cámaras.
Haré otro post mostrando cómo configurar sus cámaras y conectarlas a Shinobi. Pero primero vamos a tener Shinobi corriendo, que es el propósito de este artiche.
Servidor remoto como hardware NVR : mala solución
Durante mi experimento, primero traté de instalar Shinobi en un servidor remoto que tiene un Atom N2800 1,86GHz, 4GB de RAM que usaría un hardware NVR. Pero para conectar mis cámaras en ese servidor remoto, tuve que configurar mi router local para que el flujo en tiempo real de la cámara, sino también su puerto de protocolo ONVIF. Además, había una enorme latencia de la transmisión de la cámara a ese servidor NVR remoto (limitado por mi ancho de banda de subida a Internet).
Así que decidí instalar un hardware NVR que estaría en la misma red local de las cámaras. Los beneficios son múltiples :
- no abrir el flujo al exterior (lo que podría ser una brecha de seguridad).
- tener un circuito cerrado entre las cámaras y el hardware NVR en la red local
Servidor local como hardware NVR: mejor solución
Servidor NVR remoto: muy mala solución. Así que mi elección fue en el uso de un raspberryPI. El precio es realmente asequible para nuestro caso de uso (aproximadamente 35 €) y las capacidades de hardware más que suficiente. La característica más importante es su capacidad de codificación/decodificación de hardware H264.
Tenía una raspberryPI en casa, que es el modelo 1B+ de 2014. Cumple su función, pero si no estáis equipados, os recomiendo que compréis el último modelo hasta la fecha (modelo 3 B+).
Instalación de Shinobi en Raspberry
Antes de instalar cualquier software en nuestra raspberry, debemos instalar el Sistema Operativo. En nuestro caso, utilizaremos una versión muy ligera de Raspbian sin GUI
Instalar Raspbian en tu PI
- Descargar el Raspbian Stretch Lite (sin paquetes para la GUI) en tu ordenador desde https://www.raspberrypi.org/downloads/raspbian/
- Comprobar que no hay corrupción en tu zip recién descargado
$ shasum -a 256 2018–11–13-raspbian-stretch-lite.zip
- Instalar la imagen de Raspbian en tu SDCard. Para mayor comodidad, puede utilizar una herramienta gráfica de arrastrar&soltar llamada Etcher : https://www.raspberrypi.org/documentation/installation/installing-images/README.md
- Inserte la tarjeta SD en su frambuesa PI, conecte un teclado, su HDMI & encienda su frambuesa.
Ingrese en su PI
- Ingrese en su frambuesa. El login por defecto es pi, la contraseña es raspberry.
- En primer lugar, cambia la contraseña del usuario ‘pi’ por razones de seguridad. Para ello :
$ passwd
- Actualiza los paquetes en tu PI si es necesario para tener las últimas versiones de alguno de ellos
$ sudo apt-get update && sudo apt-get upgrade
Habilita SSH en tu frambuesa
En primer lugar, comprueba en tu frambuesa si se está ejecutando el servicio SSH
$ sudo service ssh status
(consejo : puedes comprobar todos los servicios de tu dispositivo ejecutando el siguiente comando :
$ sudo service --status-all
Si ssh está activo, omita este paso; de lo contrario, ejecute el servicio
$ sudo service ssh start
# Para futuros arranques, necesita activar ssh en el arranque
* solución 1
$ sudo update-rc.d ssh defaults
$ sudo update-rc.d ssh enable
- solución 2
o, También puede configurar su frambuesa utilizando la herramienta dedicada :
$ sudo raspi-config
>> Interface Settings
>> SSH
>> ENABLE
Acceder a su frambuesa por ssh
Para acceder a su dispositivo desde su red local, usted necesita saber su dirección IP local. Sin embargo, esta dirección es atribuida por su router y podría cambiar con el tiempo.
- Así que o establecer una IP estática a su raspberryPI configurando su routeur (asociando una IP local estática a la dirección MAC de su raspberryPI).
- O, la solución preferida aquí : comprobar el nombre de host de su frambuesa ejecutando el comando
$ hostname
En mi caso, el nombre de host del dispositivo es raspberrypi. A continuación puedo hacer ssh fácilmente a la pi sin conocer su dirección ip, mediante el siguiente comando :
$ ssh [email protected]
Instalar Shinobi
Ahora que nuestro SO está bien configurado y que podemos acceder a nuestro dispositivo a través de ssh, vamos a instalar Shinobi. La forma más fácil es ejecutar el siguiente comando en su PI (como se define en la documentación) :
$ sudo su
$ sh <(curl -s https://gitlab.com/Shinobi-Systems/Shinobi-Installer/raw/master/shinobi-install.sh)
La instalación será interactiva, como sigue :
# install location
Install Location for Shinobi
*Note : Default install location is "/home"
Do you want to install a custom location for Shinobi?
(y)es or (N)o? Default : No# shinobi version
Install Shinobi CE or Shinobi Pro?
— — — — — — — — — — — — — — — — — — — — — — -
*Note : Shinobi Pro is free for personal use.
*Learn more at http://shinobi.video/pro
— — — — — — — — — — — — — — — — — — — — — — -
©E or (P)ro? Default : Pro# install branch (master in stable)
Install the Development branch?
(y)es or (N)o? Default : No
N# OS selection
The installer will say that the OS is not detected. Select ubuntu instead.
Shinobi Installer
========
Select your OS
If your OS is not on the list please refer to the docs.
========
1. Ubuntu
2. CentOS
3. MacOS
4. FreeBSD
5. OpenSUSE
========
1# DB : choose MariaDB as RDBMS and choose a root password
Shinobi — Do you want to Install MariaDB? Choose No if you already have it.
(y)es or (N)o
y# install shinobi database
Shinobi — Database Installation
(y)es or (N)o
y# configure Shinobi to start on boot
Shinobi — Start Shinobi and set to start on boot?
(y)es or (N)o
y
# tamaño de la instalación
Todo el raspbian + shinobi (incluyendo todas las dependencias) sólo tomó menos de 2GB de espacio.
$ df -hl
Filesystem Size Used Avail Use% Mounted on
/dev/root 7.3G 1.8G 5.2G 26% /
¡Ahora la instalación está completa!!!
Shinobi backoffice
La instalación te dirá que abras tu navegador con el siguiente enlace :
|| Open http://192.168.0.10:8080/super in your web browser.
||===================================
|| Default Superuser : [email protected]
|| Default Password : admin
Sin embargo, es mejor utilizar el nombre de host para deshacerse de la incertidumbre de la dirección IP de su dispositivo (que puede cambiar durante el reinicio)
http://raspberrypi.local:8080/super
# change super user login/pwd
Tan pronto como se inicia la sesión en http://raspberrypi.local:8080/super, cambiar su login/pwd en la pestaña ‘Preferencias’ por razones de seguridad.
# añadir un nuevo usuario
Aparte del superusuario, necesitas añadir un usuario a shinobi (este usuario puede tener el mismo correo electrónico).
Este usuario podrá iniciar sesión en el dashboard usando directamente este enlace en la red local
http://raspberrypi.local:8080/
Estás listo para usar tu raspberryPi con Shinobi como una solución NVR local.