Cambios en la vigilancia

Como ya he comentado en otros post (I, II, III y sobre envío de pruebas), en los que publiqué (o mejor dicho, hice un full-disclosure) sobre el sistema de vigilancia que tengo en casa, basado en Motion.

Tras los cambios en la placa base, por algún motivo, la viejuna Logiteck QuickCam me tumba el servidor al tratar usarla, así que, ahora estoy de prestado con una Philips (¡gracias Antonio!) que va muy bien y, puestos a cambiar, ¿por qué no también el sistema de vigilancia?.

Tras mirar que Motion llevaba años sin nuevos desarrollos (aunque en los últimos meses se han puesto las pilas), me decidí por ZoneMinder después de que Carlos, un compañero del trabajo, me lo enseñara con calma. Este software ya lo conocía, pero con todo el desarrollo que había hecho y la integración con bluetooth que tenía en Motion, me daba mucha pereza cambiar.

Las características que tiene son:

  • Interfaz en PHP: Me permite integrarlo como una web más dentro de Apache.
  • Acceso “Anywhere”: Ya no me es necesario usar el CGIProxy, simplificando el acceso.
  • Streaming o Stills: Desde la interfaz web puedo ver en tiempo real qué sucede, bien en “vídeo” o las fotos fijas.
  • Filtros: Puedes definir qué clase de eventos o con qué puntuación generar una alerta, de tal modo que evito los petardeos que me daba Motion con los cambios de luz (aunque lo tenía bastante bien configurado)
  • Upload: Envía tanto avisos por e-mail, con la URL para comprobar el evento que ha lanzado la alerta, como la subida a un server externo, para salvaguardar las evidencias.
  • Zonas: Dentro de una imagen, puedes definir zonas, de tal modo que sólo tenga en cuenta qué sucede en dicha parte de la imagen.

La verdad es que por ahora estoy muy contento con el cambio. Ya me he vuelto a currar los scripts para integrarlo con el Bluetooth al igual que Motion, por lo que tengo sus funciones cubiertas, además de mejoradas. Creo que la migración ha concluído con éxito.

Detección de Movimiento (y III)

Ya hemos configurado Motion, nos envía alertas, pone las evidencias con un time-stamp y a salvo… ¿qué más nos puede hacer falta?.

Muy sencillo: ¿cómo lo activo?, ¿cada vez que salgo de casa me tengo que hacer root y ejecutar /etc/init.d/motion start?… Eso es mucho rollo, necesito algo automático.

Desde el principio, tengo un par de combinaciones secretas de teclas (en gnome, con el gconf_editor… buscad por ahí), una para activarlo y otra para desactivarlo. Evidentemente, la activación tiene un retardo, para que me dé tiempo a salir de casa sin prisa.

Este sistema, era útil, pero, necesitaba que todavía lo fuese más, es decir, activación automática. Sin embargo, ¿y la desactivación?. Prefiero que sea manual. Si alguien, mediante algún tipo de coacción (navaja en el cuello, pistola en la sien…) entra conmigo a casa, tendré evidencias de este suceso.

¿Cómo hago para activarlo automáticamente?… muy fácil, ¿qué es lo que siempre que sales de casa llevas encima?… ¿el móvil quizas?. A día de hoy, hasta los móviles más chapuceros tienen bluetooth… ¡ya lo tengo todo!

La idea es la siguiente: el móvil siempre tiene el bluetooth activado pero oculto, para que no me lo vean por “ahí”, pero, ¿entonces cómo interactúo con él?

Como la MAC bluetooth es conocida por mi (hcitool scan, eso sí, con el móvil visible sólo para esto) al igual que el “nombre” que le tengo puesto, consultando directamente a la MAC (hcitool info MAC) me dará ciertos datos, así que, tengo un sistema simple de detectar si están los móviles.

#!/bin/bash
MACS=( MAC_BT_DEL_MOVIL1 MAC_BT_DEL_MOVIL2 …. )
IDS=( NOMBRE_MOVIL1 NOMBRE_MOVIL2 …. )
INDICE=0
ESTA_EL_MOVIL=0
MOVILES=0
QUIEN_ESTA=
###########################

ELEMENTOS=${#MACS[@]}

while [ “$INDICE” -lt “$ELEMENTOS” ]
do
ESTA_EL_MOVIL=`hcitool info ${MACS[$INDICE]} 2>/dev/null | grep -v “Requesting information …” | grep ${IDS[$INDICE]} | wc -l`
if [ $ESTA_EL_MOVIL -gt 0 ]
then
let “MOVILES = $MOVILES + 1”
# echo “Detectado móvil ${IDS[$INDICE]}”
QUIEN_ESTA[$INDICE]=${IDS[$INDICE]}
else
QUIEN_ESTA[$INDICE]=”nadie”
fi

let “INDICE = $INDICE + 1”
done

if [ $MOVILES -eq 0 ]
then
#Como no hay móviles, encendemos la alarma
logger “Enciendo la camara porque no hay nadie en casa”
# echo $MOVILES
beep -f 880 -l 100 -r 10 -d 100
/etc/init.d/motion start
else
logger “Estan en casa ${QUIEN_ESTA[0]} y ${QUIEN_ESTA[1]}”
fi
exit 0;

Bueno, creo que ya lo tenemos todo… cualquier sugerencia, mejor de los scripts será bienvenida.

P.S: Los scripts son GNU y como se suele decir, no me responsabilizo. Llevo un par de años usándolos (unos más que otros según he ido actualizando) y hasta ahora sin problemas.

P.S.2: Lo sé, picar código no es lo mío y es posible que haya barbaridades en los scripts, pero una vez más, a mi me funcionan.