Hace unos meses en estos lugares se estuvo hablando de la seguridad en el hogar, así que aunque ha pasado ya un tiempo, quisiera aportar mi modesto grano de arena y mostrar mi sistema de videovigilancia /alarma casera. En mi caso siempre intento reciclar aparatos que ya tengo (siempre he tenido un síndrome de diógenes electrónico, jeje) y así de paso evito gastar unos euros que tal y como están las cosas…
Como es costumbre en mi casa, el sistema se apoya en software libre, en este caso un pc con Ubuntu Linux y con la ayuda de un programa llamado Motion que es el que nos controlará a la/s cámara/s ya sean webcams usb, webcams integradas en portátil, cámaras IP..)
Soy consciente de que mi sistema es mejorable y que tiene deficiencias, algunas conocidas y otras que quizás me ayudéis a descubrir, sea como sea es un sistema “vivo” y en constante evolución siendo ésta una de sus ventajas aunque probablemente se podría haber diseñado mejor desde un principio en vez de ir adaptándolo cada 2 por 3 a las nuevas necesidades y ocurrencias..
Todo empezó cuando llegó a casa nuestra perrita siendo cachorra y dada nuestra situación de “dueños primerizos” nos daba cierta tranquilidad el poder verla mientras estábamos en el trabajo. Una vez hecho esto empecé a darle vueltas al tema para mejorarlo y poder usarlo como alarma cuando no estemos en casa o por si nos vamos de fin de semana y así ha ido creciendo el proyecto…
Una de las ventajas de este software es que nos permite usar cámaras USB, con el único requerimiento que sea reconocida por el sistema Linux, si funciona bajo Linux funcionará en Motion, cosa que no se puede decir de otros software de videovigilancia como por ejemplo zoneminder (más completo, mejor acabado pero más difícil de configurar bajo mi punto de vista). Con suerte tienes una webcam de las que este señor: Michel Xhaard se dedica a mantener el driver en pro de la comunidad (unas 200 webcams).Y es que si los fabricantes no proporcionan drivers para Linux, la comunidad los crea, aunque esto siempre es más lento… eso es lo bueno y lo malo del Software libre, poco soporte oficial de los fabricantes pero una gran comunidad altruista.
SOBRE «MOTION»
Motion nos ofrece una serie de ventajas:
Puede usarse como demonio (servicio) consumiendo así poca memoria y CPU.
Permite capturar desde diferentes fuentes simultáneamente así como el visionado en directo mediante video4linux
Crea vídeos a partir de los fotogramas capturados.
Permite ejecutar comandos externos en respuesta a eventos (al detectar movimiento, a intervalos de tiempo en modo tipo time-lapse, etc).
Puede también usarse con bases de datos MySQL o PostgreeSQL.
Es una aplicación muy configurable, y pese a ser un poco espartana en cuanto a aspecto, en ello también radica su grandeza, pues echando mano de la imaginación y de un poco de scripts en bash (o en el lenguaje en el que te sientas más cómodo) puedes hacer bastantes locuras. Hay también varios proyectos de interfaz gráfica (GUI) a parte del programa pero nunca he conseguido hacerlas funcionar correctamente.
El funcionamiento de Motion es bastante simple, trata a cada cámara como una ráfaga continua de imágenes estáticas y no como una secuencia de vídeo. Compara cada una de esas imágenes con la anterior y si hay una diferencia significativa de pixels que han variado (ese número es configurable) entenderá que hay movimiento y ejecutará la/s acciones que le hayamos indicado.. Estas acciones son 100% configurables, es decir no hablamos de seleccionar una opción preconfigurada del programa, sino de crear tu mismo esa orden a ejecutar en forma de comando, script o programa.. puede parecer complicado, pero en realidad no lo es tanto, sólo hace falta meterse un poco en el tema, al final es tan complejo como uno quiera.
Vayamos entrando en materia…
MATERIAL NECESARIO
Mi sistema actualmente se compone de:
1 portátil Asus eeepc 901 con Ubuntu 10.04 que es el corazón del sistema y su cámara integrada
2 cámaras IP wifi motorizadas y con visión nocturna baratas comprada en Dealextreme.
1 Samsung Galaxy s2 + aplicación que la convierte en ipcam.
1 Nas que almacena las imágenes y los vídeos.
2 cuentas de Gmail. Mi cuenta personal que recibirá las alarmas y otra que será la que nos envíe las imágenes/vídeos por mail a la vez que nos sirve de backup por si alguien entra y se lleva el Nas.
1 Router que lo conecta todo en la misma red y con salida a internet.
3 SAIs por si se va la luz.
1 móvil android con la App tiny cam monitor para ver las cámaras en directo.
MANOS A LA OBRA
Voy a empezar a describir cómo hacerlo de manera simple, un pc con una webcam USB (en realidad es la integrada en el portátil, aunque el programa la reconoce como usb), luego ya iré complicando el tema…
Desde que tengo el NAS he adaptado la configuración y creado una carpeta para el Motion, sus ficheros de configuración y otras para las imágenes y vídeos capturadas de cada cámara. Tengo acceso desde el pc a esas carpetas del Nas por NFS así que para el pc es como si fuera una carpeta más de su disco duro.
El programa en Ubuntu, Debian y derivados con un sudo apt-get install motion desde un terminal es suficiente para instalarlo junto a sus dependencias. Una vez instalado se crea el fichero de configuración /etc/motion.conf . Podemos usar ese fichero, pero yo prefiero hacer una copia y trabajar con ella.
Dentro del motion.conf hay muchas líneas que empiezan con el símbolo # Esto quiere decir que esas líneas están comentadas y que el programa no las tendrá en cuenta. Destacar también que el programa lee el fichero de configuración de principio a fin y que si por error repetimos un valor de configuración será el último el que prevalezca.
El fichero de configuración tiene muchos parámetros y no es necesario tocarlos todos, sólo los necesarios, para luego ir ajustando poco a poco.Los básicos a revisar son:
#Hace que se ejecute Motion como servicio (consume menos recursos).
daemon on
#Nos permite seleccionar el dispositivo de video
videodevice /dev/video0
#Si usamos cámaras USB hay poner este valor (8). 0 o 1 si usamos tarjetas capturadoras
input 8
#Evita que la reproduzca unos beeps al detectar movimiento
quiet on
#Tamaño de la imágen, dependerá de lo que soporte la cámara,
width 640
height 480
#Numero de frames que podrá capturar la camara por segundos
framerate 25
#Calidad de los frames en formato jpg que guardará
quality 75
#Representa el número de pixels que tienen que cambiar de la captura anterior, para
#interpretarlo como movimiento
threshold 2500
#Número de pixels que se necesitan para que sean contados por threshold
noise_level 64
#Parámetros de luminosidad, contraste, saturación y tono.
brightness 200
contrast 80
saturation 0
hue 0
#Directorio donde se guardan las capturas
target_dir /home/usuario/nas/camaras/
#Se define el puerto por donde accederemos al stream de la cámara, con el valor 0, desactivamos la opción
webcam_port 8081
#Define si aceptaremos peticiones solamente desde el localhost (el pc en que se ejecuta motion), si queremos verla remotamente, esto incluye a otro pc en la misma red o desde internet.
webcam_localhost off
#Define la calidad de las imágenes que veremos via web
webcam_quality 75
#Los segundos que Motion esperará después del último evento para que de por finalizado este y pase a otro.
gap 10
#Numero de frames que queremos capturar antes y después de la detección
post_capture 5
pre_capture 5
#Puerto por el que accedemos a la web de configuración de motion. Ojo que hay que guardar los cambios cada vez, no vale con sólo cambiarlos. Es lo más parecido a una interfaz gráfica de motion.
control_port 3000
#Usuario y conraseña de acceso a la configuración de motion.
control_authentication usuario:contraseña
#Configuración de eventos:
#Aquí especificamos qué hará motion cuando pase alguno de estos eventos. Podemos ejecutar comandos de sistema, scripts, arrancar programas… lo que se te ocurra.
#Ejecuta un comando cuando detecta el movimiento (al inicio)
on_event_start [comando]
#Ejecuta un comando cuando el movimiento ha finalizado
on_event_end [comando]
#Al guardar una imágen
on_picture_save
#Al empezar a grabar un vídeo
on_movie_start value
#Este es el que más uso, en mi caso hago que me envíe por mail el vídeo que ha grabado si detecta movimiento. Lo hago con el programa sendemail y un par de cuentas de gmail:
on_movie_end sendemail -f casa@gmail.com -t yo@gmail.com -m «Movimiento detectado a las ‘date’ » -s smtp.gmail.com:587 -o tls=yes -xu casa -xp password_de_casa -u » Movimiento detectado a las ‘date’ » -a %f
#al perder conexión con la cámara
on_camera_lost
Guardamos los cambios en el fichero e iniciamos el servicio motion desde un terminal:
motion -c $HOME/nas/camaras/config/despacho/motion.conf
Si no ponemos el -c motion irá a la ruta por defecto a buscar el fichero de configuración, es decir usará el fichero /etc/motion.conf.
Y ya podemos empezar a probar nuestro sistema de vigilancia, entrando desde el navegador a http://localhost:8081 , en caso de que sea ese el puerto que hayamos definido para ver por la cámara o http://localhost:3000 para entrar en la precaria interfaz de configuración. Poner la dirección IP en vez de localhost si se accede desde otro pc que no sea el que ejecuta motion.
Se me olvidaba decir que si hemos ejecutado motion como servicio lo pararemos con el comando “killall motion”. Si lo hemos ejecutado como programa y no como servicio con cerrar el terminal desde que se ejecuta (o con control+C) detendremos la ejecución de motion.
Una vez llegados a este punto, podemos empezar a complicar un poco el tema y añadir más cámaras. Para ello quisiera aclarar un punto primero, y es que si sólo usamos una cámara, con configurar el fichero motion.conf es suficiente, pero si queremos usar 2 o más, deberemos usar otros ficheros de configuración, uno por cámara. Es decir, con una sola cámara con el motion.conf bastará, pero si queremos usar 2 deberemos tener OBLIGATORIAMENTE el motion.conf como configuración del programa y luego 2 ficheros a parte (1 para cada cámara) llamados habitualmente thread.conf (este nombre se puede cambiar). Estos ficheros se referencian al final del motion.conf indicando dónde se encuentran.
Por ejemplo al final del motion.conf pondremos (o mejor dicho boramos el # de principio de línea)
thread /home/usuario/nas/camaras/config/thread1.conf
thread /home/usuario/nas/camaras/config/thread2.conf
Estos ficheros thread.conf no son más que las partes del motion.conf que hacen referencia a la configuración de las cámaras. Obviamente no será lo mismo configurar una webcam usb que una cámara ip donde tendremos que poner la ip de la cámara, el usuario y password e incluso la url al stream de la cámara (que por desgracia tendremos que averiguar, a veces es fácil otras no tanto). Podemos usar los ficheros de ejemplo como guía que se encuentran en /etc/motion/thread1.conf
VER LAS IMAGENES DESDE INTERNET
Aquí la cosa se pone seria.. 😉
La seguridad de Motion es muy básica, sólo se protege con password la web de administración de Motion y no las imágenes en directo cuando Motion está funcionando. Así que con los conocimientos y el programa adecuado las imágenes en directo son accesibles “por cualquiera”, cada uno es dueño de su intimidad y responsable de ella..
Para el uso que yo le doy me sirve con creces ya que sólo enciendo las cámaras cuando no hay nadie en casa a modo de alarma, así que no me preocupa que nadie pueda espiarme ya que, en el peor de los casos no verían más que mi casa vacía o a mi mascota.
He probado a publicar las cámaras tras un servidor apache mínimamente securizado y mediante proxy reverse y un aplett en java (para que el servidor no alojase también a Motion) y al final me era más incómodo ya que me obligaba a ver las cámaras en directo sólo desde un navegador web y en un smartphone es mucho más cómodo acceder desde aplicaciones específicas como ya explicaré..
Para poder ver las imágenes desde internet habrá que redireccionar los puertos de las cámaras que hemos especificado en Motion en cada thread.conf en nuestro router, hacia la dirección IP del pc que ejecuta Motion. Cada router es diferente, pero normalmente todos tienen un apartado de “port forwarding” y allí crearemos una regla para cada cámara indicando el puerto en el que Motion publica la cámara con la IP del pc en que corre Motion.
Si además nos damos de alta en un servicio gratuito de dns tipo no-ip o dydns solucionamos el problema de las ips dinámicas que nos asigna nuestro proveedor de internet.
Ésta aplicación para Android es muy útil ya que nos permite ver todas nuestras cámaras rápidamente de un sólo vistazo. Existe una versión reducida gratis y una de pago. Con la versión gratis es más que suficiente, aunque yo compré la versión completa (después de usarla mucho pensé que debía comprarla). Una vez instala la aplicación creamos una cámara y la configuramos con nuestra ip pública o dominio registrado, puerto y elegimos como modelo de cámara Motion. Con esto es suficiente, ya deberíamos ver las imágenes en el smartphone.
CLIENTE SSH
Para poder gestionar el encendido y apagado de Motion, suelo utilizar un cliente ssh para android y desde el smartphone me conecto a mi servidor de Motion en el cual tengo unos scripts que me facilitan el manejo del sistema, así no tengo que estar físicamente delante del pc para gestionarlo. Una vez conectado puedo encender y apagar Motion de manera manual o retardada, borrar imágenes y vídeos viejos, etc. No es gran cosa pero suficiente para mi.
OTRAS CONFIGURACIONES
Podemos tener varios motion.conf y usar uno u otro según nos convenga. Por ejemplo, yo no uso la misma configuración de avisos cuando me voy a trabajar y se queda el perro en casa que cuando nos vamos a pasar el fin de semana fuera.
Otra opción que nos permite la versatilidad de Motion, es usar un pc como si de otra cámara se tratase. Es decir podemos usar un pc con una webcam USB por ejemplo con una instalación de Motion “muda” (sin avisos y/o sin que guarde imágenes..) y capturar ese stream desde nuestro Motion “central” y que sea éste quien se encargue de las notificaciones y/o de guardar las imágenes, vídeos, transformando así el pc+webcam en una cámara ip. O aprovechar el wifi y la cámara de un smartphone como cámara adicional (hay aplicaciones para android (IP Webcam), windows mobile, etc) sólo necesitamos conocer la url del stream de las imágenes, pero con un poco de paciencia y buscando en el depurador del chrome se acaba consiguiendo..
MEJORAS POSIBLES
Como ya he dicho este sistema es mejorable, de hecho tengo cosas en mente que me gustaría implementar como por ejemplo instalar motion en el nas. He descubierto que se puede instalar el paquete Motion mediante IPKG en el Nas y así centralizar aún más el sistema.
Una cosa que me gustaría resolver es que no puedo mover las cámaras ip motorizadas desde Motion (puedo hacerlo de otra manera, pero no desde Motion). He conseguido las sentencias que controlan el movimiento, me falta implementarlas de alguna forma, seguramente tras un apache bien securizado…
También me gustaría adaptar el script con el que nos estuvimos peleando sanmi69 y yo para detectar teléfonos conectados al router y así automatizar el apagado del sistema o incluso crear una app para android para ello, aunque eso requerirá más tiempo…
También está en mis planes usar un Raspberry Pi como cámara (de hecho por eso lo compré) pero no se si será lo suficientemente estable para eso aunque hay gente que ya lo ha hecho
Por último también expandir mi sistema de alarma con Arduino/s y diferentes sensores ( sensores hall para ventanas, movimiento, temperatura, y lo que se me vaya ocurriendo)..
¡Espero que os haya gustado y no os haya parecido demasiado aburrido!.
Gerard
918