Videovigilancia en Raspberry Pi

En este artículo comparto cómo he montado un sistema de videovigilancia en Raspberry Pi, utilizando motion, Insync y algunos script. Además del sistema que monté en software, también monté una cajita con un switch (para activar y desactivar la videovigilancia) y una serie de LEDs para ver el estado del sistema, aunque eso lo publicaré en otro artículo. 🙂

Videovigilancia en Raspberry Pi

Adrian van Leen for openphoto.net

Sistema de videovigilancia en Raspberry

¿Qué buscaba cuando me decidí a montar mi sistema de videovigilancia? Para que fuera útil y funcional tenía que:

  • Ser fácil de activar y desactivar, quería que cualquiera de la casa pudiera activarlo o desactivarlo. Para ello monté un switch conectado al PIN 18 de la Raspberry y 4 LEDs para saber cómo está el sistema (PINs 27, 17, 22 y 23) En este artículo sólo hablo del software, la implementación del switch y los LEDs está en este artículo.
  • Conectarse a una cámara (conectada en el salón), y ser escalable a más cámaras.
  • Al detectar movimiento, enviarme un correo electrónico con las fotos de lo que estaba pasando.
  • Al detectar movimiento, guardar en Google Drive las fotos y un vídeo del movimiento detectado, para mantener un histórico.
  • Funcionar sin pantalla, ni teclado (headless).
  • Arrancar automáticamente al iniciar la Raspberry

¿Qué necesitas?

  • Una Raspberry Pi con Raspbian 🙂 o cualquier PC con un Linux.
  • Una cámara (yo utilicé primero esta cámara IP de TP-LINK -descatalogada-) Ahora estoy utilizando este modelo: D-Link DCS-932L
  • Que la Raspberry sea capaz de enviar emails (para configurar la Raspberry para que envíe correo, lee este artículo)
  • Los paquetes motion y mpack
  • Si quieres sincronizar con Google Drive, lee este artículo
  • Si quieres montar el switch y los LEDs: 1 switch y 4 LEDs, lee este otro artículo.
  • Si quieres todos los ficheros de este artículo, te los puedes descargar aquí.

Empezamos

Primero, necesitamos el paquete motion, el encargado de detectar movimiento y grabar lo que detecta. Motion ya viene con Raspbian, así que sólo nos hará falta instalar motion con apt-get. Además, necesitamos el paquete mpack, que será el encargado de enviarnos por correo electrónico las imágenes

sudo apt-get install motion mpack

Desactivar modo daemon

Me interesa arrancar y detener motion cuando me voy de casa y que utilice los ficheros y carpetas del usuario pi, con permisos de usuario y no de sistema. Para ello desactivamos el modo daemon (siempre detectando movimiento), editando /etc/motion/motion.conf y poner la opción daemon en off

/etc/motion/motion.conf

############################################################
# Daemon
############################################################

# Start in daemon (background) mode and release terminal (default: off)
daemon off

Lo segundo es crear un directorio donde pondremos todos los scripts para ejecutar la detección de movimiento. En mi sistema, he creado todos los scripts en /home/pi/motion.

Modificando motion.conf

Esta es la parte más importante del sistema de videovigilancia en Raspberry Pi. Lograr que motion esté correctamente configurado, se conecte a la cámara, detecte movimiento, y además que ejecute los comandos adecuados.

El fichero motion.conf es el fichero de configuración de motion, y es donde se configuran las cámaras y los script necesarios cuando hay movimiento.

Primero hemos de copiar el fichero general de motion (/etc/motion/motion.conf) a nuestro directorio de usuario.

sudo cp /etc/motion/motion.conf ~/motion
sudo chown pi ~/motion/motion.conf

Definiendo la fuente de las imágenes.

Dependiendo si conectas el módulo de cámara de Raspberry, una cámara USB o, como en mi caso, una cámara IP, tienes que decirle a motion cómo tiene que conectarse a la cámara, de dónde sacar las imágenes para el sistema de videovigilancia en Raspberry.

En el caso de usar el módulo de cámara de la Raspberry, tienes que primero asegurarte que se activa el módulo

sudo modprobe bcm2835-v4l2

Y el fichero motion.con ya debería funcionar con la línea (que viene activada por defecto):

videodevice /dev/video0

En mi caso, que he utilizado una cámara IP (una TP-LINK TL-SC2020N, que ya está descatalogada , ahora estoy usando esta otra: D-Link DCS-932L) se define el origen del vídeo usando los comandos netcam. Hay dos maneras de utilizarlo, usando el protocolo rstp o el protocolo http.

Para usar rstp (en este ejemplo, la cámara usa la IP 192.168.2.130 y el puerto 554, y según el manual del fabricante, con esta URL se accede al feed de la cámara):

netcam_url rtsp://usuario:contraseña@192.168.2.130:554/video.mjpg

Y el protocolo http, el que se usa con la TP-LINK NC220, es el siguiente (misma IP del ejemplo anterior)

netcam_url http://192.168.2.130/video.mjpg?mute
netcam_userpass usuario:contraseña

Para la D-Link DCS-932L, utilizo esta configuración:

netcam_url http://usuario:contraseña@192.168.2.130/video.cgi?resolution=VGA
netcam_keepalive on

Ejemplos de ficheros motion.conf

Las líneas que yo modifiqué en mi caso, y las que son más relevantes son las siguientes (el fichero completo motion.con que yo utilizo, lo puedes descargar aquí)

Actualización: actualizo el fichero para Raspbian Jessie. Algunos parámetros cambian de Wheezy. En las líneas que cambian lo aclaro.

# Queremos que motion se ejecute en segundo plano, que libere el terminal

# o script que lo ejecuta daemon on 
# La definición de nuestra cámara 
width 640 
height 480 

# El feed de la cámara IP 

netcam_url http://192.168.2.130/video.mjpg?mute 
netcam_userpass usuario:contraseña 

# El threshold son la cantidad de píxeles que tienen que cambiar en una imagen para que 
# motion lo detecte como movimiento. Yo tuve que ir ajustando este valor para evitar falsos 
# positivos y que detecte movimiento real cuando lo hay. 
threshold 7500 

# Ignorar cambios bruscos de luz. Estos cambios, en mi caso, me disparaban muchas falsas alarmas 
lightswitch 95 

# El numero mínimo de frames que han de cambiar para considerarse movimiento. Por defecto es 1, 
# recibía muchos emails con sólo dos imágenes (falsas alarmas) 
minimum_motion_frames 5 

# El gap es la cantidad de segundos que han de pasar (sin movimiento) para que acabe un evento. 
# Un evento es una serie de imágenes (y un vídeo) en un corto período de tiempo, esto es, si no 
# hay más movimiento en los próximos 3 minutos (180 segundos), cerramos el vídeo y finaliza el 
# evento que disparó la alarma. Si ponemos este valor en 0, motion empezará a grabar el vídeo 
# cuando detecte movimiento y no se detendrá más, haya o no haya más movimiento 

# En Wheezy es gap
event_gap 180 

# La calidad de los JPG que se grabarán 
quality 100 

# Quiero grabar los vídeos usando mpeg4 

# Era ffmpeg_cap_new en Wheezy 
ffmpeg_output_movies on 
ffmpeg_video_codec mpeg4

# Nombres de ficheros 

# ¿Dónde se guardan las imágenes y los vídeos? 
# Se guardan en el directorio donde tengo configurado InSync, para sincronizarlo con Google
# Drive 
target_dir /home/pi/USUARIO@GMAIL.COM/VideoVigilancia 

# Esta configuración creará un directorio por día, y dentro los ficheros de movimiento separados 
# por evento (%v) y hora. Por ejemplo 20151231/cam1-01-235005-00.jpg 
# En Wheezy era jpeg_filename picture_filename %Y%m%d/cam1-%v-%H%M%S-%q 
# Se mantiene en Jessie 
movie_filename %Y%m%d/cam1-%v-%H%M%S 

############################################################ 
# Live Webcam Server 
############################################################ 

# Si quieres ver lo que motion está monitorizando, puedes activar el puerto 8081 
# y luego acceder via http://ip_de_la_rpi:8081/ 
#En Wheezy era webcam_port stream_port 8081 

# Por defecto sólo puedes acceder al feed de vídeo actual desde localhost, si quieres monitorizarlo 
# desde otro sitio, se ha de poner en off (yo lo tengo en off, y accedo vía VPN) 

# En Wheezy era webcam_localhost 
stream_localhost off

############################################################
# HTTP Based Control
############################################################ 

# Si quieres controlar motion (cambiar la configuración, empezar o detener un evento, etc) 
# puedes acceder a http://ip_de_la_rpi:8080/ y controlar motion 
# En Jessie todos los comandos se cambian de control_ a webcontrol_ (Jessie) 

webcontrol_port 8080 
webcontrol_localhost off 

# Usuario y contraseña para controlar motion a distancia 
webcontrol_authentication usuario:contraseña 

# Qué script ejecutar cuando hay movimiento? 
on_event_start ~/motion/haymovimiento %Y%m%d %H:%M 

# ¿Qué script ejecutar cuando acaba el movimiento? 
on_event_end ~/motion/sincro 

# Para un sistema real de videovigilancia en Raspberry podemos tener más cámaras 
# Si tenemos más de una cámara, hay que crear estos ficheros, con la configuración específica 
# para cada una de las cámaras. Si tienes 3 cámaras, tendrás 2 ficheros thread y el motion.con

thread /home/pi/motion/camara1.conf 
thread /home/pi/motion/camara2.conf 
thread /home/pi/motion/camara3.conf
thread /home/pi/motion/camara4.conf

Una vez configurado motion, pasamos a crear o modificar los scripts centrales del sistema.

Videovigilancia en Raspberry pi: administración remota de motion

Pantallazo de la web de administración de motion

Scripts para arrancar y detener motion

Creé dos scripts para activar y desactivar la videovigilancia en Raspberry: mevoy y yatoy 🙂

mevoy (activar videovigilancia)

La idea de este script es encender el LED rojo (indicando que la videovigilancia está activada), esperar 5 minutos (a que salgamos de casa), crear un fichero a modo de flag (para saber que motion se está ejecutando) y ejecutar motion con el fichero que hemos modificado antes

Esta es mi versión actual:

#!/bin/sh
#Arranca Videovigilancia en Raspberry Pi
#PIN 27: LED rojo
#PIN 17: LED verde
#PIN 22: LED rojo cristal
#PIN 23: LED verde-testigo-always on

#Encendemos LED roja y apagamos LED verde
echo 1 > /sys/class/gpio/gpio27/value
echo 0 > /sys/class/gpio/gpio17/value

touch ~/motion/arming
sleep 5m
rm ~/motion/arming
touch ~/motion/running
motion -c ~/motion/motion.conf

yatoy (desactivar videovigilancia)

La función del script yatoy es apagar el LED rojo, encender el verde y además cerrar motion

#!/bin/sh 
#Detenemos Videovigilancia en Raspberry 

#PIN 27: LED rojo 
#PIN 17: LED verde 
#PIN 22: LED rojo cristal 
#Encendemos LED verde y apagamos LED roja. Dejamos LED rojo cristal como está 

echo 0 > /sys/class/gpio/gpio27/value 
echo 1 > /sys/class/gpio/gpio17/value 
rm ~/motion/running 
killall motion

¡Hay movimiento! El script haymovimiento

El script más importante: qué hacemos cuando hay movimiento.
En mi caso quiero que, además de poner las imágenes y los vídeos en la carpeta que se sincroniza con Google Drive (de esto se encargan Insync y motion.conf), recibir un correo en tiempo real con lo que está pasando en casa.

El sistema funciona de la siguiente manera, cuando ha movimiento motion dispara este script, esperamos 10 segundos para que haya alguna imagen, y luego enviamos un correo por cada imagen del evento. El email sale con el asunto “Motion detecta movimiento hh:mm”.

Recordar que este script se ejecuta en motion con 2 parámetros, día y hora (en los formatos AAAAmmdd y hh:mm

on_event_start ~/motion/haymovimiento %Y%m%d %H:%M

El comando find del script se entiende como: encuentra ficheros más nuevos que el momento donde se disparó la alarma (newermt $1 $2) y el resultado pásaselo al comando mpack (que es el que envía los mails).

Este es el script:

#!/bin/bash 
# Videovigilancia en Raspberry: ¡hay movimiento! 

#PIN 27: LED rojo 
#PIN 17: LED verde 
#PIN 22: LED rojo cristal 

#Encendemos LED rojo cristal 
echo 1 > /sys/class/gpio/gpio22/value 

# %1 Dia 
# %2 Hora 

# Esperamos 10 segundos para enviar imágenes 
sleep 10s 
cd ~/usuario@GMAIL.COM/VideoVigilancia 

# Este comando es el central del sistema: 
find . -name '*.jpg' -newermt "$1 $2" -exec mpack -a -s "Motion detecta movimiento "$2 '{}' usuario@gmail.com \;

sincro: el script cuando se acaba el evento de motion

Este es el script que se ejecuta cuando motion termina un evento, esto es, cuando ya no se detecta movimiento. En mi caso sólo apago el LED de alarma, antes además forzaba la actualización en Google Drive (cuando usaba otro sistema anterior a Insync).

#!/bin/bash 
#PIN 27: LED rojo 
#PIN 17: LED verde 
#PIN 22: LED rojo cristal 
#PIN 23: LED verde-testigo-always on 
#Apagamos LED rojo cristal 

echo 0 > /sys/class/gpio/gpio22/value

Arrancar el sistema de videovigilancia al arranque

Si necesitas que, apenas enciendas la Raspberry Pi, se inicie el sistema de videovigilancia, aquí te dejo el script para poner en /etc/init.d. En mi caso lo he llamado

/etc/init.d/motionVV.sh
#!/bin/sh 

### BEGIN INIT INFO 
# Provides: MotionVV 
# Required-Start: hostname $all 
# Required-Stop: 
# Should-Start: 
# Default-Start: 2 3 4 5 
# Default-Stop: 0 1 6 
# Short-Description: Ejecuta motion en el arranque 
### END INIT INFO 

cd /home/pi/motion echo Arrancamos motion 
sudo -u pi /home/pi/motion/mevoy

Para que este script se ejecute al inicio, debes asegurarte de poner

sudo update-rc.d motionVV.sh defaults

¡Listo!

Y esta es la manera de tener un sistema de videovigilancia en Raspberry Pi, nada más y nada menos. 🙂

activando videovigilancia en raspberry pi

La idea de este artículo es compartir mi implementación, por eso si has montado otro o quieres compartir tu experiencia con este u otro sistema ¡déjame un comentario! ¡Será bienvenido!

Sistema de videovigilancia en Raspberry Pi usando motion

48 comentarios:

  1. Buenas tardes, Alfonso.
    En primer lugar felicitarte por el manual pues está muy bien explicado.
    Yo quisiera, si puede ser, preguntarte por ese script que controla las luces hub, o mejor, dicho, ¿cómo se haría?.
    Lo que realmente me interesa, es ejecutar un evento al detectar movimiento. Dicho evento es enviar una petición http get, pero mis limitados conocimientos, no son suficientes para realizar el script.
    Perdona mi osadía.
    Muchísimas gracias por tu paciencia.
    Saludos.

    • Hola Alicia.

      Si te refieres a luces Philips HUE, existe un paquete para instalar en las Raspberry Pi y controlarlas. Yo de hecho ya lo tengo así configurado, cuando motion detecta movimiento me enciende una bombilla en rojo. Y cuando me voy, apaga todas las luces 🙂

      Yo uso este paquete, sólo he seguido la documentación para instalarlo.

      http://josef-friedrich.github.io/Hue-shell/

      Saludos y espero que te sirva!
      Alfonso

  2. Hola Alfonso, lo primero enhorabuena por tu publicación, llevo meses con este tema y es de lo mejor que he visto hasta ahora. Quería consultarte: ¿por qué has escogido el modelo de cámara D-Link DCS-932L en concreto? Me explico: necesito para mi sistema un número relativamente elevado de cámaras, y por tanto trato de optimizar costes y encontrar un modelo de cámara barato, pero lo complicado en esto es saber dónde poner el límite: probé con la cámara china más barata que encontré (unos 23€) que soportara al menos RTSP, pero fue un fiasco, ya que no estaba implementado sobre TCP, y sobre UDP fallaba como una escopeta de feria (y tampoco iba sobre HTTP). Las D-Link se me hacen un poco caras, pero si tu experiencia con ellas es buena, tal vez me decida.

    Gracias de antemano por cualquier observación que puedas hacerme al respecto, a ti o a cualquier otro lector de esta gran página. Un saludo!!

    • Hola Jesus

      La verdad es que, cuando falló la TPLink, empecé a mirar unas cuantas. Lo primero que miro es en esta web (iSpyConnect), para averiguar si la URL para el vídeo de la cámara que estoy mirando se ha publicado, si transmite audio, etc.

      Entonces fui mirando página del fabricante (DLINK y TP-LINK), mirando modelos, precios y estrellas en Amazon para decidirme.

      Esta en concreto me servía porque tenía URL con vídeo, buena calificación en Amazon, había stock, y la diferencia entre IR y normal era poca. La compré con la idea de probarla, y si no me convencía, devolverla.

      Saludos y espero haberte ayudado!

      Fon

  3. Saludos!
    He leído todo tu post y es realmente interesante. Quisiera preguntarte, es que he activado el servicio motion para que se active automaticamente cada vez que se enciende mi raspberry, pero ya no lo quiero así. He tratado con poner esta linea:
    # Start in daemon (background) mode and release terminal (default: off)
    daemon on
    Al estado predeterminado (off). Pero al reiniciar la pi sigue funcionando, y si modifico este archivo: /etc/default/motion
    start_motion_daemon=yes
    A ” start_motion_daemon = no ” me queda deshabilitada totalmente pero no puedo activarla con el comando service motion start. Cómo podría habilitar el servicio motion desde la linea de comandos o desde un script pero que al iniciar la raspberry no se active este servicio automaticamente.
    Gracias, excelente tuto !

    • Hola Alejandro!

      Lo que tienes que hacer es desactivar el servicio motion para que no arranque al inicio de la Raspberry. Para ello prueba

      sudo update-rc.d motion remove

      Tal vez tengas que ir antes a la carpeta /etc/init.d, o sea
      cd /etc/init.d
      sudo update-rc.d motion remove

      Lo que hace el update-rc.d es activar o desactivar los scripts que hay en /etc/init.d para que arranquen o no por defecto.

      Saludos, espero que te sirva.
      Fon

      • Gracias Alfonso. Tu respuesta fue de gran ayuda.
        Si no es mucha molestia, podrías colaborarme con otra duda?
        Es qué necesito implementar un script en python, que sea capaz de generarme una carpeta en donde esta contenga la fecha del día de creación, con el fin de que cuando el sensor de movimiento (HC-SR501) que estoy utilizando se active, la cámara NoIR que estoy utilizando tome fotos y me las guarde en esa carpeta que se creo automáticamente. Y así sucesivamente durante los siguientes días, se sigan creando y se sigan almacenando las capturas a las carpetas correspondientes. Es que he visto que eso que estoy tratando de obtener lo logras configuración el archivo de motion, pero yo estoy utilizando scripts en python. Lo de motion, únicamente lo estoy usando para el servicio de streaming.

        Adjunto la parte donde está el lio:

        # Creando directorio para almacenar imagenes capturadas por dia
        ct = time.strftime(“%Y.%m.%d”)
        os.system(‘mkdir -p /home/pi/google-drive/security/capturas/’ + ct)
        pic_filepath = (‘/home/pi/google-drive/security/capturas/’ + ct)
        pic_f2 = datetime.strptime(pic_filepath, ‘%m/%d/%Y_%H:%M:%S’)

        while True:
        pir.wait_for_motion()
        pic_filename = time.strftime(“%c”)
        pic_path = pic_f2 + pic_filename
        camera.capture(pic_f2/’pic_filename.jpg’)
        print “Captured %s” % pic_filename
        time.sleep(DELAY)

        pause ()

        He leído en páginas que es por el formato en el cual se está creando la carpeta, que debe ser otra. Tú entenderás mejor, muchas gracias por tu ayuda y disculpa la molestia.

  4. Hola, mi enhorabuena por el tutorial y por las muy buenas respuestas personalizadas …
    Yo he estado buscando para montar una cámara de vigilancia en mi negocio y que esté siempre con el script “mevoy”, modificaré el script para que los mails solo me los envíe en horario de cierre, y para que las carpetas con más de X dias se borren con la idea de no llevar el disco externo.
    Como este proyectito va a ser reutilizando las raspberry que tenía como mediacenter pues creo que tb reutilizaré una tablet antigua y la pondré en recepción para que las personas que entren vean que se está grabando y también sirva para ahuyentar a personas “no honestas”.

    Muchas gracias Alfonso y felicidades.

    • Hola Antonio,

      Muchas gracias por tu comentario, y suerte con el sistema, ya me contarás cómo queda. La verdad es que se pueden hacer muchas cosas con las Raspberry, motion y un poco de creatividad! 😉

      Mi próximo paso será conectar los sensores de movimiento infrarrojos (que compré hace tiempo) para activar el sistema o ciertos disparadores sólo en caso de movimiento “real” (a veces motion se lía con el cambio de luces, estuve cierto tiempo hasta que logré no tener falsos positivos).

      Y con las luces HUE de Philips se pueden hacer reales virguerías De hecho ahora, cuando tengo movimiento, las luces se ponen rojas. 😉

      Saludos!
      Fon

      Un saludo
      Alfonso

  5. Esta es ya la tercera pregunta consecutiva, perdona por el bombardeo. Creo que el problema está en que la raspberry no consigue conectarse a la cámara (estoy usando el modelo que recomiendas, tp-link nc220). Cuando escribo la URL que has puesto en motion.conf no consigo acceder a la cámara, me sale un error 404. Buscando por Internet he encontrado algunos URL’s alternativos que tampoco funcionan. ¿Alguna idea?

    Una vez más perdona por la insistencia y muchas gracias.

    • Hola, con respecto a los URL, en esta web (que es otro proyecto de software libre para videovigilancia) tienen una base de datos con las URL de muchas cámaras web.

      ispyconnect

      El modelo NC220 en concreto no está, yo probaría con los siguientes enlaces:

      NC-200 JPEG http:// snapshot.jpg?user=[USERNAME]&pwd=[PASSWORD]
      NC-200 JPEG http:// snapshot.jpg
      NC230 FFMPEG rtsp:// /h264_vga.sdp

      A mí se me murió la TPLink la semana pasada, he comprado este modelo: D-Link DCS-932L, va muy bien, especialmente que es infrarroja.

      Usé el generador de URLs de ispy para generar la URL y funcionó a la primera.

      Saludos y espero haber sido de ayuda! 😉

      Fon

      • He conseguido encontrar una URL válida para mi modelo, lo dejo aquí por si a alguien más le hace falta (http://[ipofcamera]:8080/stream/video/mjpeg donde hay que poner user:password se tiene que codificar la contraseña en Base64 IMPORTANTE!!), la verdad es que me ha costado horrores encontrarlo, pero por fin funciona!!

        Ahora tengo otro problema (y espero que el ultimo por tu salud…). Resulta que cuando se inicia un evento, se me crean muchisimas imágenes .jpg y un video .avi, de hecho creo que las imagenes son cada fotograma del video; y se me mandan todas (una a una en mensajes diferentes) a mi correo y se me satura un poco todo. ¿Qué podría hacer?

        Muchas gracias por la ayuda que me estas dando.

        • Hola Pablo!

          Gracias por compartir el enlace de tu cámara.

          Yo tenía el mismo problema, lo que he hecho es hacer que se me envíen sólo 5 imágenes por correo, el resto se guardan en Drive.
          Para ello utilizo ahora esta línea de código en el script haymovimiento:

          find -name '*.jpg' -newermt "$1 $2" | sort | head -n 5 | xargs -i mpack -a -s "Motion detecta movimiento "$2 '{}' tucorreo@gmail.com

          Que vendría a ser algo como:
          find: hazme una lista de todos los ficheros jpg más nuevos que $1 $2 (que es la hora donde se dispara el script, el resultado es una lista muy larga)
          sort: ordenados por nombre
          head: déjame sólo los 5 primeros ficheros
          xargs: todo lo anterior se lo pasamos a mpack como argumentos.

          Esto lo tuve que hacer desde que tengo una Raspberry Pi 3, que es tan rápida que en segundos genera y envía muchos ficheros. Con la Raspberry 1 no me pasaba 😉

          Saludos y espero que te sirva!
          Fon

  6. Hola Alfonso, lo primero decirte que has hecho n trabajo genial, muchas gracias de verdad.
    Ya lo tengo todo listo tal y como explicas, pero a la hora de ejecutar el script de mevoy me sale un error creando un directorio, te lo pongo a continuacion:

    [0] [NTC] [ALL] conf_load: Processing thread 0 – config file /home/pi/motion/motion.conf
    [0] [ALR] [ALL] conf_cmdparse: Unknown config option “sdl_threadnr”
    [0] [ALR] [ALL] config_thread: Thread config file /home/pi/motion/camara1.conf not found:
    [0] [NTC] [ALL] motion_startup: Motion 3.2.12+git20140228 Started
    [0] [NTC] [ALL] motion_startup: Logging to syslog
    [0] [NTC] [ALL] motion_startup: Using log type (ALL) log level (NTC)
    [0] [NTC] [ALL] become_daemon: Motion going to daemon mode
    [0] [ERR] [ALL] create_path: Problem creating directory /var/run/motion:
    [0] [EMG] [ALL] become_daemon: Exit motion, cannot create process id file (pid file) /var/run/motion/motion.pid:

    Message from syslogd@raspberrypi at Mar 4 11:51:41 …
    motion: [0] [EMG] [ALL] become_daemon: Exit motion, cannot create process id file (pid file) /var/run/motion/motion.pid:

    Broadcast message from systemd-journald@raspberrypi (Sat 2017-03-04 11:51:41 CET):

    motion[1446]: [0] [EMG] [ALL] become_daemon: Exit motion, cannot create process id file (pid file) /var/run/motion/motion.pid:

    ¿A que puede deberse? Te agradecería mucho la ayuda, estoy empezando en el mundillo de la raspberry y la verdad es que este tipo de cosas me ayudan mucho a aprender.
    Muchas gracias de antemano y perdona las molestias. Un saludo.

    • Ya lo he arreglado, solo tenia que dar permisos al directorio con chmod a+rwxt /var/run/motion.

      Ahora viene otro problema, si supuestamente está funcionando, no manda ningún correo, ni hace fotos, ni graba video. En general, no funciona. Seguí tu otro post onde explicabas como hacer que la raspberry pueda enviar correos. ¿Que puede estar pasando? Te dejo lo que me sale cuando ejecuto el script de mevoy por si acaso es relevante:

      [0] [NTC] [ALL] conf_load: Processing thread 0 – config file /home/pi/motion/motion.conf
      [0] [ALR] [ALL] conf_cmdparse: Unknown config option “sdl_threadnr”
      [0] [ALR] [ALL] config_thread: Thread config file /home/pi/motion/camara1.conf not found:
      [0] [NTC] [ALL] motion_startup: Motion 3.2.12+git20140228 Started
      [0] [NTC] [ALL] motion_startup: Logging to syslog
      [0] [NTC] [ALL] motion_startup: Using log type (ALL) log level (NTC)
      [0] [NTC] [ALL] become_daemon: Motion going to daemon mode

      Muchas gracias nuevamente.

      • Hola Pablo,

        Gracias por tus preguntas.

        Según veo en el log, un problema que tienes es que le dices a motion que tienes un fichero camara1.conf pero ese no existe. ¿Realmente vas a querer un fichero separado por cámara si sólo tienes una? En ese caso habría que comentar la línea en el motion.conf o crear el camara1.conf con los datos de la cámara.

        Saludos
        Alfonso

  7. la nota que publicaste me fue demasiado util, voy a aprovecharla y mandarsela a un amigo por fb que estaba buscando lo mismo, muchas gracias por compàrtir la data 😀

  8. Hola, oye no me deja instalar exim 4.
    La camara es una logitech usa la misma IP?

    • Hola,

      La IP la decide el router (si tienes activado DHCP) o supongo que puedes cambiar a mano la IP de la cam para que sea la que quieras.

      Saludos!
      Fon

  9. Hola. Me ha funcionado muy bien el tutorial.
    Solo una cosa. ¿Es posible activar / desactivar el streaming vía web?
    En la administración de motion puedes hacer muchas cosas, pero no esto… O por lo menos no he sabido.

    • Hola Rubén,

      Se puede hacer en el mismo motion.conf:

      # The mini-http server listens to this port for requests (default: 0 = disabled)
      stream_port 0

      Con esto queda deshabilitado.

      Saludos!

  10. Hola una pregunta al tratar de hacer el strem por el puerto 8080 se me quede de color negro y cuando hay movimeinto se ve la forma de la imagen pero de un color azul, es decir no se vela imagen ent iempo real o noce cual sea el problema

    • Hola Jeffrson,

      ¿Qué cámara estás usando? ¿Cómo está configurada? Con esa información tal vez pueda ayudarte un poco mejor.

      Saludos

      Alfonso

  11. Hola Alfonso .
    Yo te quería preguntar también sobre una cámara que acaba de comprarme RaspberryPi Camara Module v2 , He instalado en mi Raspberry Pi 3 el sistema Noobs y la verdad es que no tengo idea de como instalar la cámara para usarla como video vigilancia, he visto que tienes buenos ejemplos pero por favor dime cual son los primero pasos para este tipo de cámara, o todo los paso son iguales da igual de tipo de cámara que se usa . Te agradecería mucho si me puedes decir algo al respecto. Muchas gracias.,
    Un cordial saludo,Adrian

    • Hola Adrián,

      El módulo oficial de cámara de Raspberry es muy fácil de configurar. De hecho, yo cuando lo instalé, en el programa motion (en el fichero motion.conf) no tuve que configurar nada, y ya me cogía la cámara por defecto.

      Según la documentación oficial (de este enlace), para empezar a usarla debes:

      * Arrancar la utilidad raspi-config (en consola) o Raspberry Pi Configuration en modo gráfico
      * En el menu Interfaces, activar la cámara y reiniciar la Raspberry
      * En motion, con eso, a mí me funcionó.

      Saludos

      Alfonso

  12. Hola Alfonso!!
    Muy buen tutorial la verdad, claro y bien explicado. Pero me surge una duda…
    Si tenemos en cuenta que de las diferentes formas que explicas en esta web, yo quiero complicarme menos y… SÓLO necesito/quiero que de forma automática al encender la Raspberry se inicie MOTION y cada X tiempo (1 hora por ejemplo) me mande una foto de cada cámara IP de forma automática por correo electrónico (gmail), como sería la configuración y donde se detalla??
    Por un lado en MOTION tengo que tener el “motion.conf” y otro por cada cámara, vale, pero en el fichero de cada cámara sólo se ponen los parámetros particulares de cada cámara o también se ponen los comunes indicados en motion.conf??.
    Otro detalle importante es, para mandar por correo de forma automática mediante exim4 (como comentas), que tengo que configurar y donde??, (motion, inicio, scrip particular??), puedes poner algún ejemplo…

    • Hola!

      Bueno, vamos por partes! 🙂

      Para que la Raspberry pueda enviar correos, deberías configurar primero exim4 como comento en este otro artículo, allí explico cómo configurar exim4 para enviar desde una cuenta Gmail.

      Para que motion arranque de manera automática, deberías crear un script en /etc/init.d que lo haga. En mi artículo digo cómo lo tengo yo, creando un motionVV.sh en /etc/init.d


      #!/bin/sh
      ### BEGIN INIT INFO
      # Provides: MotionVV
      # Required-Start: hostname $all
      # Required-Stop:
      # Should-Start:
      # Default-Start: 2 3 4 5
      # Default-Stop: 0 1 6
      # Short-Description: Ejecuta motion en el arranque
      ### END INIT INFO

      cd /home/pi/motion
      echo Arrancamos motion

      sudo -u pi /home/pi/motion/mevoy

      y luego ejecutar

      sudo update-rc.d motionVV.sh defaults

      Y para que la Raspberry te envíe una foto cada x tiempo, tienes que configurar los parámetros:


      # Make automated snapshot every N seconds (default: 0 = disabled)
      snapshot_interval 3600
      snapshot_filename %Y%m%d/cam1-%H%M%S-snapshot

      Con las líneas de arriba, se crea un snapshot cada 1 hora (3600 segundos) en una carpeta que hoy sería 20161023/cam1-150000-snapshot.jpg

      Y en cuanto a los motion para cada cámara, se entiende que algunos parámetros son para todo el sistema y algunos para cada cámara.

      Saludos y espero haberte ayudado un poco,

      Alfonso

  13. Hola Alfonso, he realizado infinidad de comprobaciones y no consigo que se vea la imagen de la camara via web http, sale un cuadro gris con el reloj corriendo pero sale un mensaje unable to open video device motion.
    Y no se de que puede ser, no se si me puedes ayudar.
    A la camara via web puedo acceder perfectamente a las imagenes de la misma con la misma dirección que pongo en el motion.conf
    Si quieres te puedo enviar por privado la direccion web de la camara ip.
    Muchas gracias por todo.

  14. Hola Alfonso, tengo que felicitarte por tu tutorial, es el mejor que encontré en internet.Llevo mucho tiempo queriendo montarme mi propio sistema de videivigilancia y al fin un tutorial que lo explica al detalle.
    Pero tengo un problema que seguro sera facil para ti.
    Tengo todo ya listo excepto el circuito de los leds.
    Al ejecutar el sistema desde la consola con el comando sudo /etc/init.d/motionVV.sh me sale en el terminal “Arrancamos motion” y a continuacion “sudo: /home/pi/motion/mevoy: command not found”
    Que puedo hacer?

    Y otra pregunta sin querer abusar de tus conocimientos es como podria hacer funcionar este sistema sin tener que montar el circuito de los leds.De manera que solo con la raspberry y la cam, que nada mas conectar la raspberry se ponga el sistema en funcionamiento.

    Muchisimas gracias y espero tu ayuda, un saludo

    • Hola Víctor, muy buenas.

      Gracias por los piropos 🙂

      Entiendo que te has copiado todos los focheros de ejemplo, ¿no? Si es el caso, por favor asegurate de tener también el directorio /home/pi/motion donde están todos los ficheros que comento. Además, en caso de tener todos los ficheros, mira que el script mevoy tenga permisos de ejecución (chmod u+x mevoy le pondría ese permiso)

      La segunda pregunta es muy fácil, sólo con cambiar la línea daemon de motion.conf, poniéndolo en modo daemon=on siempre se estaría ejecutando. Lo único que debes hacer es asegurarte de que al inicio de la Raspberry Pi se arranque motion.

      Para eso hay varias maneras, con mis scripts deberías lograrlo. Si tienes alguna duda, ya sabes! Aquí estoy.

      Un saludo
      Alfonso

  15. Hola Alfonso, la verdad es que el artículo es una maravilla, yo tengo un problema y es que tengo varias camaras ip, pero en ninguna de ellas se como transmitir la imagen con la raspberry, entre otros motivos porque accedo a la camara con la dirección ip y el puerto correspondiente y despues con el nombre de usuario y contraseña, lo que quiero es que la raspberry acceda a la camara cada cierto tiempo y capture una imagen y esa imagen se pueda ver en una pagina web.
    es decir no se como se capta de cualquiera de las camaras la imagen y que siempre tenga el mismo nombre la citada imagen por ejemplo imagenjardin.jpg
    Gracias.

    • Hola Angel, muy buenas 🙂

      Gracias por tu comentario.

      Yo lo haría de la siguiente manera:

      Usando motion, en motion.conf creas los ficheros necesarios para cada cámara:

      ; thread /home/pi/motion/camara1.conf
      ; thread /home/pi/motion/camara2.conf
      ; thread /home/pi/motion/camara3.conf
      ; thread /home/pi/motion/camara4.conf

      Y por ejemplo en camara1.conf, poner los datos de configuración (IP, user, password) de esa cámara:

      netcam_url http://192.168.2.130/video.mjpg?mute
      netcam_userpass usuario:contraseña

      Con esto motion podría conectarse a todas las cámaras.

      Para que te saque una foto fija cada x segundos, se puede usar la opción snapshot de motion:

      ############################################################
      # Snapshots (Traditional Periodic Webcam File Output)
      ############################################################

      # Make automated snapshot every N seconds (default: 0 = disabled)
      snapshot_interval 3600

      # File path for snapshots (jpeg or ppm) relative to target_dir
      # Default: %v-%Y%m%d%H%M%S-snapshot

      snapshot_filename imagenjardin

      Con los comandos de arriba logras que cada 3600 segundos (1 hora), motion guarde una foto y el fichero se guarda como imagenjardin.jpg

      Para acceder a ese fichero desde fuera, yo lo haría vía Google Drive (mira este artículo para ver cómo configurarlo). Sino el mismo motion tiene la opción para ver lo que está pasando (como cualquier sistema de vídeo vigilancia), con estos comandos:

      ############################################################
      # Live Webcam Server
      ############################################################

      # Si quieres ver lo que motion está monitorizando, puedes activar el puerto 8081
      # y luego acceder via http://ip_de_la_rpi:8081/

      #En Wheezy era webcam_port
      stream_port 8081

      # Por defecto sólo puedes acceder al feed de vídeo actual desde localhost, si quieres monitorizarlo
      # desde otro sitio, se ha de poner en off (yo lo tengo en off, y accedo vía VPN)
      # En Wheezy era webcam_localhost
      stream_localhost off

      Y sino la otra opción, para acceder a imagenjardin.jpg es meter ese fichero en el directorio de un servidor web (como Apache) en la misma Raspberry. Aunque en ese caso ya tienes que configurar un servidor Apache, hacerlo accesible desde fuera, manteniendo la seguridad del Apache y delas imágenes. Tal vez más fácil es que motion te guarde la imágen en Google Drive y accedes desde el móvil o desde un ordenador.

      Espero haberte ayudado,

      Un saludo

      Alfonso

  16. Increible lo bien explicado, justo ahora mismo estaba instalando Raspbian en una RPI para usar motion con esto mismo, la parte electrónica de leds y switch se me escapa pero con lo bien que está explicado habrá que intentarlo!!

  17. Hola, muchas gracias por compartir sus conocimientos, soy nuevo en este mundo de la RP3, mi pregunta era: ¿Se puede guardar las fotos tomadas en carpetas diferenciadas por dias? quiero decir, que cada dia cree una carpeta y guarde las fotos tomadas en ella. Muchas Gracias

    • Hola Quique, ¿qué tal? Sí, de hecho así lo tengo configurado, cada día se guarda en una carpeta separada.

      Lo que tú buscas se configura con esta línea en el motion.conf:
      picture_filename %Y%m%d/cam1-%v-%H%M%S-%q

      Guarda los ficheros en carpetas como:
      20160814/cam1-01-164110-01.jpg
      20160814/cam1-01-164110-02.jpg
      20160814/cam1-01-164110-03.jpg
      20160814/cam1-01-164110-04.jpg
      20160814/cam1-01-164110-05.jpg

      Donde mete los ficheros de hoy (14/08/2016) en una carpeta específica (20160814) que viene de la parte %Y%m%d del parámetro anterior. Luego, fuerzo que le ponga el nombre cam1-(n.evento)-(hora)-(número de frame).jpg

      Para mayor información de cómo configurar este parámetro (picture_filename) también lo tienes en el motion.conf de ejemplo (en este mismo artículo o en los ficheros de ejemplo de motion):


      ############################################################
      # Target Directories and filenames For Images And Films
      # For the options snapshot_, jpeg_, mpeg_ and timelapse_filename
      # you can use conversion specifiers
      # %Y = year, %m = month, %d = date,
      # %H = hour, %M = minute, %S = second,
      # %v = event, %q = frame number, %t = thread (camera) number,
      # %D = changed pixels, %N = noise level,
      # %i and %J = width and height of motion area,
      # %K and %L = X and Y coordinates of motion center
      # %C = value defined by text_event
      # Quotation marks round string are allowed.
      ############################################################

      Espero que te haya aclarado la duda. 🙂

      Saludos,

      Fon

  18. Excelente artículo Alfonso.
    Gracias por compartirlo con nosotros.

  19. hola,
    si en vez de una camara quiero poner 3
    como se haria ?
    gracias

    • Hola Ruben, para tener más de una cámara tienes que crear un fichero .conf por cada cámara. Como pongo en el ejemplo:

      # Si tenemos más de una cámara, hay que crear estos ficheros, con la configuración específica
      # para cada una de las cámaras. Si tienes 3 cámaras, tendrás 2 ficheros thread y el motion.conf

      ; thread /home/pi/motion/camara1.conf
      ; thread /home/pi/motion/camara2.conf

      Espero que te sirva, saludos
      Fon

  20. hola amigo, tengo una camara nc200 de tplink. todo va bien salvo que no consigo conectar con la camara. he configurado el motion.conf tal y como dices pero no conecta con la camara que esta en la misma red. he probado con la rpi, y despues he instalado en un viejo portatil linux mint. nada…
    tu articulo me animo mucho pero despues de 2 dias estoy a punto de tirar la toalla.
    te puedo contactar por otro medio que no sea este?
    un cordial saludo y enhorabuena.

  21. Saludos!
    En la próxima semana comenzare a poner en practica tus enseñanzas.
    Gracias por compartir la información.

Deja un comentario

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