Store IP camera motion-detected videos in Dropbox using a Raspberry Pi

This is quick how-to explaining how to store videos from an IP camera into a remote storage service, each time motion is detected in the camera – in this case we will be using Dropbox.

Simcam IP cameras and Raspberry Pi

The default setup provides limited video quality but in my case this is fine since the cameras themselves keep a HD version of the recordings. I just wanted this to work as a remote backup in case any of the cameras are vandalised.

What do you need?

The same setup can be completed with similar components (e.g. you could use a USB camera instead). For illustrative purposes, these are the things I’ve used:

  • Hardware:
    • IP camera.
    • Raspberry Pi.
    • SD Card.
  • Software:
    • Any Debian-based distribution installed on the Raspberry Pi.
    • Motion.
    • Dropbox uploader.
  • 3rd party services:
    • Dropbox account

This guides assumes that the following setup is already completed:

  • Your IP camera has already been assigned a valid IP and/or rtsp address.
  • Your Raspberry Pi is up and running with either SSH access or console access through a video interface.

Installing and configuring Motion

Motion is a pretty interesting software that is able to process streams of video from different devices and allows triggering actions based on the motion detection, storing video on specific locations and streaming it.

First thing first, we will ensure the Operating System is updated:

sudo apt-get update && sudo apt-get upgrade -y

We are then ready to install Motion:

sudo apt-get install motion

Now it’s time to tweak the Motion configuration, to add the IP camera address, configure Motion to be started as a service and define the directory where the videos will be stored.

Let’s edit the /etc/motion/motion.confto modify the following settings.

Set the camera RTSP address:

netcam_url rtsp://username:password@camera_IP

Set the target directory where the videos will be stored:

target_dir /path/to/video/recordings

Enable Motion to be run as a daemon, insteado of running it manually:

daemon on

Allow camera stream to be used from other hosts (by default is restricted to localhost):

stream_localhost off

Allow web UI to be used from other hosts (by default is resitricted to localhost):

webcontrol_localhost off

Now we will edit the /etc/default/motion file to enable Motion to be run as a service by changing the following property:

start_motion_daemon=yes

You can now start the Motion service:

sudo service motion start

You should now be able to access the Motion web UI at http://raspberry_pi_address:8080

Installing and Configuring Dropbox Uploader

There isn’t an official Dropbox client that runs on the Raspberry hardware, but there is pretty decent alternative called Dropbox Uploader that allows uploading, downloading, deleting and listing Dropbox files. The only thing that does not seem to be supported is synchronisation.

Clone Dropbox Uploader into your preferred path by doing:

sudo apt-get install git git clone https://github.com/andreafabrizi/Dropbox-Uploader.git

Run Dropbox Uploader for the first time and you will be asked for your Dropbox API key. The script itself will give you instructions to obtain the key:

./dropbox_uploader.sh

Schedule automated upload of the videos to Dropbox and clean up

We will add 2 Cron jobs which will:

  • Upload the vídeos to Dropbox every minute.
  • Delete videos that are older than 7 days from the Raspberry Pi (credits to heiko)

Type:

sudo crontab -e

And add the following lines:

* * * * /path/to/dropbox_uploader/dropbox_uploader.sh upload /path/to/your/videos/* / >> /var/log/dropbox-uploader/dropbox-uploader.log
0 0 * * * /usr/bin/find /path/to/your/videos/* -name "*.*" -type f -mtime +7 -exec rm -f {} \;

I’m not scheduling the automated deletion from Dropbox since I want to check them manually first. Using the default video quality means that motion-detected videos of 20 seconds use only around 300 KB.

More information

Motion project

Dropbox Uploader

Raspberry Pi

Copias de seguridad en volumenes de red con Time Machine

timemachine.jpgHoy vamos a dejar de lado los aspectos estratégicos y de negocio para centrarnos en un tópico más técnico: la configuración del entorno necesario para poder realizar copias de seguridad en volumenes de red (SAMBA, NFS, AFP, …) con Time Machine, una de las grandes funcionalidades del recién nacido Mac OS 10.5 (Leopard).

En el ejemplo utilizamos un equipo con Mac OS 10.5 y otro con Ubuntu Server 7.10 (sirve cualquier otra versión de Ubuntu).
Para llevar a cabo nuestro cometido, nos centraremos en los siguientes aspectos:

  • Creación del volumen de red en un servidor remoto.
  • Activaciónd el protocolo de red AFP.
  • Configuración de Mac OS X para utilizar el volumen de red con Time Machine

Creación del volumen de red en un servidor remoto [en el servidor]

En primer lugar, vamos a añadir el usuario con el que accederemos remotamente al directorio, especificando la ruta de ubicación del home.

 agora@agoraserver:~$ sudo adduser --home /media/barrakon/backup/hosts/ timemachine
 Adding user `timemachine' ...
 Adding new group `timemachine' (1006) ...
 Adding new user `timemachine' (1004) with group `timemachine' ...
 Enter new UNIX password: # Introducimos la contraseña 
 Retype new UNIX password: # Confirmamos la contraseña
 passwd: password updated successfully
 Changing the user information for timemachine
 Enter the new value, or press ENTER for the default
 Full Name []: Time Machine backup # Descripción del usuario 
 Room Number []: 
 Work Phone []: 
 Home Phone []: 
 Other []: 
 Is the information correct? [y/N] y # Validación de los datos

Activación del protocolo de red AFP [en el servidor]

[Opcional] Aunque es posible acceder al volumen de red desde Mac OS X utilizando SAMBA o NFS, es recomendable la compartición mediante AFP, por varios motivos: su administración es más simple, tiene tasas de transferencia superiores y es el protocolo de compartición nativo en Mac OS X.

Para poder compartir recursos mediante AFP utilizaremos Netatalk. Aunque su instalación es posible mediante gestores de paquetes (aptitude, …), con la instalación por defecto no podremos acceder desde Leopard, ya que éste incluye como novedad la encriptación de dos vias de la contraseña. Esto no nos supone ningún problema, compilaremos el paquete para que se adapte a nuestras necesidades.

Obtenemos el código fuente del paquete:

 agora@agoraserver:~apt-get source netatalk
 Leyendo lista de paquetes... Hecho
 Creando árbol de dependencias 
 Leyendo la información de estado... Hecho
 Necesito descargar 1965kB de archivos fuente.
 Des:1 http://us.archive.ubuntu.com gutsy/universe netatalk 2.0.3-6ubuntu1 (dsc) [918B]
 Des:2 http://us.archive.ubuntu.com gutsy/universe netatalk 2.0.3-6ubuntu1 (tar) [1921kB]
 Des:3 http://us.archive.ubuntu.com gutsy/universe netatalk 2.0.3-6ubuntu1 (diff) [43,2kB] 
 gpg: Signature made mié 15 ago 2007 18:51:54 CEST using DSA key ID 4B394F7E
 gpg: Can't check signature: public key not found
 dpkg-source: extracting netatalk in netatalk-2.0.3
 dpkg-source: unpacking netatalk_2.0.3.orig.tar.gz
 dpkg-source: applying ./netatalk_2.0.3-6ubuntu1.diff.gz

Instalamos los paquetes y dependencias necesarias para utilizar netatalk:

 agora@agoraserver:~$ sudo apt-get install devscripts fakeroot libssl-dev 
 agora@agoraserver:~$ sudo apt-get build-dep netatalk

Ahora vamos a generar el paquete:

 agora@agoraserver:~$ cd netatalk-2.0.3
 agora@agoraserver:~/netatalk-2.0.3$ DEB_BUILD_OPTIONS=ssl debuild -us -uc

Después de un buen rato comprobando librerias y compilando el paquete, obtenemos algo parecido a esto:

 atención, `debian/netatalk/DEBIAN/control' contiene un campo `Original-Maintainer' definido por el usuario
 dpkg-deb: no se tendrán en cuenta 1 avisos sobre los ficheros de control
 dpkg-deb: construyendo el paquete `netatalk' en `../netatalk_2.0.3-6ubuntu1_i386.deb'.
 dpkg-genchanges
 dpkg-genchanges: not including original source code in upload
 dpkg-buildpackage (debuild emulation): binary and diff upload (original source NOT included)

Genial. Ya tenemos el paquete listo para lanzar la instalación:

agora@agoraserver:~/netatalk-2.0.3$ sudo dpkg -i ../netatalk*.deb
[sudo] password for agora:
 (Leyendo la base de datos ... 
 173384 ficheros y directorios instalados actualmente.)
 Preparando para reemplazar netatalk 2.0.3-6ubuntu1 (usando .../netatalk_2.0.3-6ubuntu1_i386.deb) ...
 Stopping Netatalk Daemons: afpd cnid_metad papd timelord atalkd.
 Desempaquetando el reemplazo de netatalk ...
 Configurando netatalk (2.0.3-6ubuntu1) ...
 Instalando una nueva versión del fichero de configuración /etc/default/netatalk ...
 Instalando una nueva versión del fichero de configuración /etc/pam.d/netatalk ...
 Instalando una nueva versión del fichero de configuración /etc/init.d/netatalk ...
 Starting Netatalk services (this will take a while): atalkd afpd papd.

Para evitar que netatalk sea substituido por otras actualizaciones disponibles en los repositorios, con lo que volveriamos a tener una instalación sin autenticación SSL, bloqueamos el paquete:

agora@agoraserver:~/netatalk-2.0.3$ echo "netatalk hold" | sudo dpkg --set-selections

Configuración de Mac OS X para utilizar el volumen de red con Time Machine

Por defecto, Mac OS 10.5 no permite la utilización de volumenes de red para uso con Time Machine y únicamente son válidos discos duros externos, particiones locales, discos Airport o equipos con volumenes HFS+ (básicamente otros Mac OS X).

Para poder utilizar el volumen que hemos configurado, activaremos el soporte para unidades de red. Desde la Terminal del sistema escribimos:
defaults write com.apple.systempreferences TMShowUnsupportedNetworkVolumes 1

El siguiente paso es montar la unidad de red en el mac. Para ello, desde el Finder utilizamos la combinación de teclas Manzana+K o accedemos al menú superior Ir > Conectarse al servidor. A continuación introducimos la dirección IP o hostname del servidor:

conectarAFP.jpg

Introducimos el usuario y contraseña que hemos definido al crear la cuenta en el servidor:

loginAFP.jpg

Ya podemos acceder a la configuración de Time Machine y seleccionar el volumen de red (Preferencias > Cambiar disco):

selecVolumen.jpg

Cuando seleccionemos el volumen deberemos autenticarnos de nuevo.

¡Tachán! Ya tenemos nuestro sistema de copias de seguridad en funciomiento 🙂

Importante: Para que Time Machine funcione necesitamos tener el volumen de red montado en el sistema de forma permantene.

Notas

No se recomienda utilizar el proceso en entornos de producción o en aquellos casos en los que se utilicen datos sensibles. Mac OS 10.5 (Leopard) no soporta nativamente volumenes de red. Esto quiere decir que su uso no está recomendado y el resultado puede llevar a situaciones no deseadas, como la perdida de datos o disfunción del sistema.

Esta guía es una síntesis de otros recursos publicados en la red, que son:

El usuario es responable de la utiliación de este proceso.

La idea inicial de generar el tutorial es de sallymac (de macuarium.com).