Sudo Su


Cómo convertir una Raspberry en una cámara de seguridad

Fecha: 29 mayo, 2020

Hace unos meses comencé un proyecto que trataba de convertir mi Raspberry Pi en un sistema de seguridad con cámara de vigilancia. Este sistema cuenta con detección de movimiento que al activarse envía una alarma a nuestro Telegram y además cuenta con streaming 24 horas a la cámara de seguridad.

Es decir, puedo ver mi cámara de seguridad desde cualquier lugar y además me envía a mi Telegram un vídeo de lo que ve cuando detecta movimiento.

Para montar todo esto vamos a instalar un software llamado motion, tiene muchísimas opciones y me ha funcionado bien durante meses por lo cual lo recomiendo.

Para partir en este proyecto necesitas tener previamente:

-Un bot en Telegram (haz clic aquí para aprender a crear uno en menos de 5 minutos).

-Un DNS Dinámico (haz clic aquí para aprender a configurarlo en tu Raspberry fácilmente).

-Una cámara.(Yo compré en Aliexpress esta cámara, es económica y cumple su función, aunque no descarto comprar la oficial algún día para obtener una mayor calidad).

Una vez tengas estas 3 cosas vamos a empezar!

Configurar cámara en Raspberry.

Después de haber conectado la cámara a nuestra Raspberry, lo primero que debemos hacer es habilitarla.

Para ello vamos a ejecutar el siguiente comando en nuestra terminal:
sudo raspi-config

 

Bajamos con las flechas de nuestro teclado a la opción llamada Interfacing Options y pulsamos la tecla Intro.
Interfacing options

 

Ahora pulsamos en la primera opción llamada Camera:
camara raspberry configuración

 

Nos preguntará si queremos habilitar nuestra cámara, le damos a .
aceptamos que la cámara sea habilitada

 

Nos aparecerá un mensaje informando que la cámara ha sido habilitada, le damos a Aceptar y le pulsamos en Finish.
Después de todo esto, nos aparecerá la siguiente ventana solicitando un reinicio, le damos a Sí.
reiniciamos para habilitar nuestra camara

 

Después de reiniciar nuestra Raspberry debemos comprobar que nuestra cámara funciona, para ello tomaremos una imagen ejecutando el siguiente comando en nuestra terminal:
raspistill -v -o test.jpg

 

Ahora si nos dirigimos a nuestro directorio principal, podemos ver como se ha tomado la foto:
Foto de camara en raspberry

 

Descarga de scripts que utilizará Motion.

El siguiente paso es descargar el directorio que contendrá los scripts que nos notificarán vía Telegram y almacenarán las imágenes que tome Motion.

Para ellos debemos contar con un directorio para nuestros scripts en nuestro directorio principal. Si no lo tenemos lo creamos mediante el siguiente comando:
mkdir scripts

 

Nos movemos al directorio scripts y descargamos el directorio que contiene todo con los siguientes comandos:
cd scripts
git clone https://github.com/CarlosPCL98/camara_seguridad.git

 

Entramos al directorio que acabamos de descargar:
cd camara_seguridad

 

Una vez dentro encontraremos dos scripts y un directorio llamado fotos_y_videos.
IMPORTANTE!! Necesitamos cambiar los permisos del directorio fotos_y_videos, esto lo hacemos para que Motion tenga los permisos necesarios que le permitirán guarda las fotos y vídeos que tomará cuando detecte movimiento. Le aplicamos los permisos con este comando:
sudo chmod 777 fotos_y_videos

 

Ahora vamos a modificar el script que nos avisará cada vez que Motion detecte movimiento, este scrips se llama alerta_movimiento.sh:
nano alerta_movimiento.sh

 

Simplemente añadimos nuestro TOKEN e ID de Telegram y guardamos mediante Ctrl+O.

 

Ahora debemos modificar el script que nos enviará el vídeo que Motion ha tomado al detectar movimiento. Este script además contendrá unas líneas que nos limpiará el directorio fotos_y_videos, ya que Motion crea muchas fotos y con los vídeos que tome será suficiente.

Este archivo se llama enviar_video.sh y lo abrimos mediante:

nano enviar_video.sh

 

Simplemente añadimos nuestro TOKEN e ID de Telegram y guardamos mediante Ctrl+O.

Estos scripts deberían verse más o menos como este:

script que envía vídeo a telegram

 

Con este último paso ya tendremos todos los scripts preparados y sólo nos quedará instalar Motion.

 

Instalación y configuración de Motion en Raspberry Pi.

En este punto del manual, llegamos a lo realmente importante. Ahora vamos a instalar Motion y un editor de texto amigable que nos permita localizar los parámetros que necesitaremos modificar de una forma rápida y sencilla.

Lo primero que vamos a realizar es actualizar los repositorios de nuestro sistema operativo:
sudo apt-get update

 

Seguido de esto instalamos Motion mediante el siguiente comando:
sudo apt-get install motion -y

 

Una vez termine la descarga, instalaremos el editor de texto Gedit (no es realmente necesario, pero es interesante ya que este editor permite mediante la combinación de teclas Ctrl+F buscar lo que queramos fácilmente en un documento de texto):
sudo apt-get install gedit -y

 

Después de haber instalado todo, lo primero que vamos a hacer es modificar el fichero que permite el daemon de Motion, para ello lo abriremos mediante el siguiente comando:
sudo nano /etc/default/motion

 

Lo único que debemos cambiar en este fichero es donde pone no por un yes, tal y como se muestra en la siguiente imagen:start motion daemon yes

 

Una vez hayamos modificado esto, guardamos con Ctrl+O y reiniciaremos nuestra Raspberry mediante:
sudo reboot

 

Las configuraciones de Motion se realizan en el fichero /etc/motion/motion.conf, por motivos de seguridad vamos a realizar un back up de este fichero mediante:
sudo cp /etc/motion/motion.conf /etc/motion/motion_new.conf

 

Antes de empezar con lo realmente interesante quiero decirte que Motion tiene muchísimas más opciones para configurar que las que voy ha explicar aquí, todas ellas las tienen en su documentación oficial,  tiene configuraciones de seguridad muy interesantes.

 

Ahora por fin vamos a realizar las configuraciones necesarias para que nuestro sistema funcione. Abrimos el archivo motion.conf mediante el siguiente comando:
sudo gedit /etc/motion/motion.conf

 

Te recomiendo que busques los parámetros que iré modificando pulsando Ctrl+F.

 

Para activar el Daemon modificamos donde pone daemon off por un on, como se ve en la siguiente captura:
daemon on motion

 

El siguiente campo no es realmente necesario que lo modifiques, esto simplemente gira la imagen de tu cámara. Yo por ejemplo la quiero a 270º porque la tengo en una posición especial, por eso la dejo tal que así:
rotate camera motion

 

Estos campos sí es realmente importante que los tengamos en cuenta (width,height y framerate), los siguientes valores hacen referencia a la resolución que queremos que use en nuestra cámara y cuantos fps utilizará. Yo por ejemplo prefiero utilizar 640×480 a 90 fps.
width height framerate camara motion

 

Ahora vamos a indicarle a Motion la cantidad de píxeles que deben cambiar para considerar que ha ocurrido un movimiento ante la cámara. Una forma de calcularlo sería pensando el porcentaje de pantalla que debe haber cambiado para considerarse movimiento (Por ejemplo el 10% de los píxeles).
Entonces si calculamos el 10% de 307200px(640×480) obtendríamos 24576 y este sería la cantidad que deberíamos indicar.
Yo voy a poner 8000 porque es la configuración que mejor me ha funcionado en los meses que lo he estado usando, pero te recomiendo que partas de una cifra y vayas probando la sensibilidad y lo ajustes poco a poco, ya que esto puede variar al entorno que estés enfocando.
Esto lo configuraremos en el campo que llamado threshold.
modificaremos los pixeles que deben cambiar para ser considerado como un movimiento.

 

Ahora activaremos la opción que permite a Motion guardar las fotos y vídeos que toma cuando detecta movimiento.
Buscaremos la opción llamada output_pictures e indicaremos on.
output pictures

 

Lo siguiente es indicarle a Motion el directorio donde debe guardar las imágenes que toma, nos dirigimos a la opción llamada target_dir e indicamos el directorio que hemos descargado anteriormente llamado fotos_y_videos.
target_dir motion

 

Ahora vamos a habilitar la opción que permite acceder al streaming desde cualquier lugar (si por motivos de seguridad decidimos no activarla, Motion seguirá enviando alarmas a Telegram), esto lo haremos modificando la opción llamada stream_local con un off. 
Dejando esta opción en off, Motion entiende que queremos acceder desde cualquier dispositivo.
stream_localhost off

 

Si hemos activado la opción anterior, sería muy recomendable añadir un login. Ya que si no lo hacemos cualquiera podría acceder a la imagen de nuestra cámara.

 

En stream_auth_method yo he elegido la opción 2, ya que tratará nuestro usuario y contraseña mediante el hash criptografico MD5.

 

En stream_authentication añadiremos el usuario y la contraseña que queremos utilizar separado con dos puntos, te recomiendo que utilices una contraseña larga y que contenga algún carácter especial. Ya que si no, podrían acceder a nuestra cámara a través de ataques de fuerza bruta.

 

No olvides quitar el  ; que hay delante de stream_authentication:
authentication en motion login

 

La última configuración que debemos realizar es la que permite a Motion ejecutar los scripts que hemos descargado antes. Esto lo realizaremos mediante las opciones on_movie_start y on_movie_end, estas dos opciones permiten a Motion ejecutar un script cuando inicia y termina un movimiento.
Retiramos los ; que hay antes de estas opciones y escribimos la ejecución a los scripts tal y como se muestra en la imagen:
on_movie_start y on_movie_end

 

Después de esto ya tendríamos todas las configuraciones preparadas, solo tendríamos que guardar el archivo. Aun así os dejo una comparativa a modo de resumen de las líneas que he modificado en este archivo:
resumen de cambios en motion.conf

 

Para finalizar reiniciaremos el servicio de Motion mediante el siguiente comando, y todas las configuraciones serán aplicadas:
sudo service motion restart

 

Comprobaciones.

Lo primero que debemos hacer es provocar un movimiento delante de la cámara para ver si, nos envía nuestras notificaciones a Telegram, estas deberían verse tal que así:

Motion alarma en Telegram

 

Ahora para poder acceder al streaming de nuestra cámara, simplemente abriremos el navegador e introduciremos la IP de nuestra Raspberry y el puerto de que utiliza Motion, que es el 8081.

Un ejemplo de como accederíamos es: http://192.168.100.15:8081

Una vez entremos a la página nos aparecerá un login similar a este:

login camara motion

 

Introducimos el usuario y contraseña que hemos creado en el archivo motion.conf, y tendremos acceso a la imagen de nuestra cámara:motion funcionando pc

 

Para poder acceder desde cualquier parte del mundo, como dije al principio del artículo vamos a necesitar un DDNS (puedes aprender a crear uno haciendo clic aquí). Una vez lo tengas, simplemente deberás habilitar el tráfico por el puerto 8081 del cortafuegos de tu router hacia la IP de tu Raspberry y ya podrás acceder a través de tu dirección de no-ip, por ejemplo: http://ejemplo.ddns.net:8081

motion en tu telefono

 

Introducimos nuestro usuario y contraseña y tendremos acceso a nuestra cámara de seguridad:

imagen de motion en el movil

 

Llegados a este punto sería recomendable crear un acceso a esta página  en nuestra pantalla de inicio, hacemos clic en las opciones del navegador y pulsamos donde dice Añadir en la ventana de inicio.

Añadir motion a la ventana de inicio

 

De esta forma ya tendremos acceso a nuestra cámara de seguridad con un simple icono en la pantalla de nuestro teléfono.

Motion en la pantalla principal de android

 

Recomendación de seguridad.

Sería recomendable que cambiaras el puerto 8081 por otro, ya que siendo el que trae por defecto sería más fácil de encontrar y vulnerar, esto lo realizarías en el archivo motion.conf modificando el valor a la opción llamada stream_port.

 

Por último quiero darte las gracias por haber llegado hasta aquí y espero que hayas configurado tu cámara de seguridad sin ningún tipo de problemas, no dudes en hacerme saber cualquier duda o sugerencia. Un saludo!

 


Autor: Carlos Categorias: Raspberry / Seguridad



Comentarios ...Hay un comentario

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Youssef chelhi dice:

Un gran Proyecto Carlos¡¡
Esta muy bien explicado y mu bien detallado indicando todos los pasos a seguir . Me ha servido mucho de ayuda a la hora de planificar mi proyecto.

Muchisimas gracias ¡¡

Responder