Wednesday, May 21, 2008

Mejorando el sistema de videovigilancia: vídeo en tu móvil (2)

Pasadas unas semanas desde que publiqué el sistema de vigalancia casero, me apetecía mejorarlo un poco, quería que además de que guardara constancia del ladrón, pudiera acceder a sus imágenes y vídeos allá donde estuviera. Sin necesidad de tener el portátil delante y con la única condición de tener una conexión a Internet, ya fuera GPRS, UMTS o WIFI para acceder desde mi móvil Nokia N80.

Así que me puse manos a la obra, tomé alguna idea de otros sistemas, y modifiqué partes de código según mis necesidades.
Así el nuevo sistema, ya no envía por email las fotos y vídeos del intruso, sino que las sube a mi servidor ftp y desde allí puedo acceder a ellas, desde una carpeta protegida por contraseña en el servidor web del mismo servidor.

¿Pero cómo poder ver los vídeos desde el móvil? el N80 como otros muchos de Nokia sólo nos permite determinados formatos y a una resolución determinada. También hubiera sido posible la retransmisión en directo desde mi casa al móvil mediante streaming rtsp y el visor incorporado en el N80, leí un poco de información relativo al streaming rtsp para N80 y casi todo eran problemas, además de que para cuando yo me conectara a ver lo que ocurriera en casa puede que el intruso ya no estuviera en el campo de visión o bien hubiera desconectado mis ordenadores.
Por esta razón lo que hago es subir inmediatamente las imágenes en jpg por una parte y por otra los vídeos del intruso en formato 3gp, mediante conversión gracias a ffmpeg.

Así en el momento en que el servidor de seguridad motion escribe una imagen en el disco duro, ésta es subida al ftp y cuando motion cierra un vídeo, éste vídeo se codifica en 3gp con resolución 352x288 y también se sube al ftp. Finalmente las imágenes y vídeos subidos se almacenan en un directorio a parte.

A continuación incluyo el código de mi archivo de configuración de motion(parte de el) /etc/motion.conf, y el script de envió de vídeo al servidor (el de imágenes es parecido).


# Command to be executed when an event starts. (default: none)
# An event starts at first motion detected after a period of no motion defined by gap
on_event_start java /home/daniel/java/gdata/java/src/EnviaSMS usuario password "http://miservidor.es/micarpetasegura/"

# Command to be executed when an event ends after a period of no motion
# (default: none). The period of no motion is defined by option gap.
; on_event_end value

# Command to be executed when a picture (.ppm|.jpg) is saved (default: none)
# To give the filename as an argument to a command append it with %f
on_picture_save /home/daniel/motion/base/usr/bin/upload-pictures.sh %f

# Command to be executed when a motion frame is detected (default: none)
; on_motion_detected value

# Command to be executed when a movie file (.mpg|.avi) is created. (default: none)
# To give the filename as an argument to a command append it with %f
; on_movie_start value

# Command to be executed when a movie file (.mpg|.avi) is closed. (default: none)
# To give the filename as an argument to a command append it with %f
on_movie_end /home/daniel/motion/base/usr/bin/upload-videos.sh %f


upload-videos.sh


#!/bin/sh
FILE=`echo $1 | awk '{print substr($1,19,17)}'`
ffmpeg -i "/home/daniel/motion/$FILE.avi" -ar 128000 -ac 1 -acodec aac -vcodec mpeg4 -s 352x288 -r 24 -b 350 -ab 32 "/home/dani/motion/$FILE.3gp"
#upload ftp
HOST='ftp.tuservidor.es'
USER='*********'
PASSWD='***********'
echo $1 | awk '{print substr($1,19,23)}'
echo "el nombre del file es: "
echo $FILE
cd /home/daniel/motion/
ftp -n $HOST <<END_SCRIPT
quote USER $USER
quote PASS $PASSWD
cd /www/tucarpetasegura/videos
put $FILE.3gp
quit
END_SCRIPT

#move to uploaded
mv /home/dani/motion/$FILE.avi /home/daniel/motion/uploaded/videos
mv /home/dani/motion/$FILE.3gp /home/daniel/motion/uploaded/videos
echo "$FILE moved to the ftp server"
exit 0


Nótese que el texto del mensaje es la dirección URL donde se encuentran nuestros vídeos. Por ejemplo http://miservidor.es/directorioconpass/videos. Así, pasado un minuto y algo más desde que motion detecta al malo, podremos verlo en nuestro móvil y avisar con certeza a la policía.

Enlaces:
Sistema de videovigilancia 1
Sistema de seguridad casero
Usando el API de Google Calendar: Alarmas por SMS

Monday, May 19, 2008

Como hacer reserva (cutre) de DHCP en router Comtrend CT-5361

Me río yo de los routers que ofrece Telefónica con sus líneas adsl, concretamente del que pongo en el título. Estaba intentando hacer una reserva de dhcp por dirección MAC, algo bastante normalito para un demonio de dhcp y me doy cuenta de que no es posible desde la pagina web de configuración.

Pensé, bueno igual tiene acceso ssh y puedo trastear algo, efectivamente tiene acceso ssh pero las opciones disponibles son las mismas que desde la web, vamos que se lo podían haber ahorrado. ¿Por qué esta manía de capar los firmwares? parece que inciten a la gente a flashearlos...

En fin si a alguien se le ocurre hacer lo más parecido a una reserva debe cambiar el "lease time" del servidor DHCP, yo he puesto concretamente a 5 años de "lease time", 43824 horas que con la ups y si no me harto antes del router guardará su dirección IP, eso si no salta alguna sorpresa más de este router.

A menuda cutrez nos obliga Comtrend y Telefonica, si alguien quiere revisar su manual, sólo existe un manual de usuario , no esperes comandos en shell eso es para colgados.

Saturday, May 17, 2008

Redes wireless mesh con la Fonera para fines sociales

Hace poco se me ocurrió la idea de montar una red wireless de tipo mallado (redes mesh) de bajo coste y con software libre. No había tenido oportunidad de mirar el tema hasta hace unos días.

El hardware con el que contaba era limitado, una fonera, ya que el router Comtrend que viene con mi conexión Adsl no tenía mucha pinta de ser flasheable con un nuevo firmware. Así empecé a buscar información sobre redes malladas y dí con el proyecto de Antonio Anselmi , open-mesh.
Su firmware open source está orientado a hardware de bajo coste, tipo los routers de Fon, y provee de toda la funcionalidad de las redes mesh.

Como además creo que para promover el software libre y las obras sociales son necesarios recursos, busqué algún software para montar un hotspot sobre la red, pensaba que aquí debería dedicar más tiempo en programación, pero encontré wifi-cpa , un portal cautivo "llave en mano" que ofrece servidor radius y control de pagos, con una cuenta gratuita de hosting para un sólo punto de acceso, compatible con redes mesh, con usuarios ilimitados, y donando el 100% de las ganancias al mantenedor de la red.

Así que dicho y hecho, cogí mi fonera flaseada previamente con dd-wrt (ya pasé aquello de activar redboot y acceso ssh hace tiempo) le conecté un cable ethernet desde mi pc y flashee el firmware open-mesh adaptado a foneras 2100.

Una vez ya tienes la fonera con el nuevo firmware sólo tienes que conectarla a tu router por cable ethernet, desconectar la alimentación de la fonera y conectarla de nuevo para que tomé su ip por dhcp del router. Luego desde la pagina de configuración de tu router principal miras la tabla dhcp y observas la dirección mac que tiene la fonera, la apuntas, y te vas al "dashboard" de openmesh.com y le das a "add network" rellenas todos los datos y en media hora tu fonera actualizará su firmware si es necesario y podrás observar las características de su conexión desde el panel de control.

Para añadir el hotspot wifi-cpa, deberás indicar en el dashboard de openmesh que quieres utilizar firmware de test desde Edit network y show advanced options. Así pasados unos 15 minutos tu fonera actualizará su firmware y ya será compatible con wifi-cpa hostspot, sólo tendrás que crear una nueva cuenta en wifi-cpa y registrar tu punto de acceso.

Así y después de todo este proceso ha nacido Atocha Wifi un punto de acceso de bajo coste el cual destinará todas sus ganancias a obras sociales, de caridad, comunidades o software libre. Si te interesa colaborar con el proyecto sólo tienes que ponerte en contacto conmigo.

El punto de acceso es ampliable gracias a la funcionalidad mesh tipo RO.B.IN:

ROBIN (ROuting Batman Inside) is an Open Source mesh network project, deployed on top of OpenWRT kamikaze, running on any Atheros AP51 routers such as Meraki Mini or La Fonera and using the BATMAN routing algorithm.
ROBIN spreads a wired internet connection such as a DSL throughout an apartment complex, neighborhood, village or school, and work on a variety of commonly available, low-cost hardware.


AVISO: el firmware de test de open-mesh, como su nombre indica es sólo de test, no se te ocurra utilizar este firmware para una red en producción. Utiliza el firmware beta.