martes, abril 15, 2008

Sistema de seguridad casero. (Parte IV, el código fuente)

Con un poco de retraso, pero aquí llega el último capítulo:

En anteriores posts os he explicado con un poco de detalle mi pequeño proyecto, ahora os paso ya directamente los fuentes y una pequeña explicación de cada uno de los archivos. Está todo escrito en bash linux scripts para el sistema de seguridad en casa y en php scripts en el servidor para la página Web de control. Están todos escritos de forma un poco precipitada, mi nivel de scripting es muy limitado pero creo que puede servir de punto de partida para los que quieran replicar el sistema. O por lo menos de ejemplo para vuestros proyectos. Si alguno se llega a animar a implementar algo parecido y se mete de lleno en los scripts se va a dar cuenta del potencial que uno puede sacar de una cosa así, empezando por la mismísima domótica. :-).

Los fuentes os los bajáis de aquí.

Tiene dos carpetas:

  • /base : donde están todos los scripts que yo he instalado. Los he archivado siguiendo la estructura de los directorios así que no necesitáis hacer preguntas de donde poner cada archivo.
  • /www : donde están todos los scripts php que deben instalarse en el servidor.

Configuración del sistema de seguridad casero:

Sistema operativo Debian GNU/Linux 4.0. La instalación que yo elegí es la hiperbásica, sin configuración de ventanas, pero entiendo que no sólo te interese esto. Necesitas usar el 'apt-get install' para los paquetes motion (servidor de seguridad), nano (o el editor de texto que más te guste), awk (para scripting), anacron (para las tareas programadas), less (etc todas las herramientas con las que te sientas cómodo.

Los archivos incluidos en el paquete son:

  • /etc/motion/motion.conf : Archivo de configuración del sistema motion. Hay que echarle un vistazo y meter tus propias necesidades y tal vez características de tu webcam
  • /etc/rc0.d/S01touch-SITE.com.sh : Script (permisos de ejecución o nunca funcionará) que se conecta a el servidor externo avisando de que el sistema se está apagando.
  • /etc/rc0.d/S01touch-SITE.com.sh : Lo mismo que el anterior pero avisando de que el sistema se está reiniciando.
  • /usr/bin/upload-pictures.sh : Script que copia las imágenes que han sido tomadas cuando se ha detectado movimiento y las pone en una carpeta de salida y las sube por FTP a tu servidor externo. (se podría haber hecho más simple usando wput pero lo hice así porque fue la primera solución que encontré y me funciona aunque sea un código un poco guarrete ;-) ). Si lo usas tienes que cambiar tu nombre de usuario etc y las carpetas donde se guardan las imágenes.
  • /usr/bin/touch-SITE.com.sh : Script que se conecta a tu servidor externo mandando las constantes vitales de tu servidor en casa. (Este script es multipropósito y se usa normalmente 1 vez a la hora más cuando ocurren cosas como detección de movimiento, inicio del sistema, apagado o reinicio. Tiene dos parámetros, el primero los segundos de retraso para ejecutar el script y el segundo una palabra que defina la razón por la cual se conecta al servidor.
  • /usr/bin/motion_test.sh : Script que se conecta al servidor preguntando qué debe hacer con el sistema de seguridad (apagarlo, encenderlo, etc)
  • /usr/bin/shutdown_test.sh : Script que se conecta al servidor preguntando qué debe hacer con el servidor (apagarlo, reiniciarlo, etc)

También hay que configurar el crontab para añadirle las tareas programadas. Para editarlo, con la cuenta root crontab -e

y añadir las siguientes lineas:


0 * * * * /usr/bin/touch-SITE.com.sh 0 control >/dev/null 2>&1
0,5,10,15,20,25,30,35,40,45,50,55 * * * * /usr/bin/motion_test.sh >/dev/null 2>&1
0,5,10,15,20,25,30,35,40,45,50,55 * * * * /usr/bin/shutdown_test.sh >/dev/null 2>&1
@reboot /usr/bin/touch-SITE.com.sh 30 booting >/dev/null 2>&1
@reboot /usr/bin/motion_delay.sh >/dev/null 2>&1

Un crontab -l te dará los cambios (hay que reiniciar el servicio para que funcionen los cambios).

Configuración del servidor externo:

Lo primero es tener una dirección Web y no meter nada en el directorio principal. Y por favor, poner las cosas bajo password, por lo menos las fotos y los scripts de configuración para que nadie os vea como dios os trajo al mundo por la webcam y para que nadie encienda y apague todo tu sistema cuando le venga en gana ;-)


Panel de control de seguridad
Este es una foto del panel de control. ¡Con un montón de alarmas encendidas! Alarmas de que el sistema está apagado, el servidor apagandose y de que hace más de 1 hora que no se recibe información del servidor (porque está apagado claro).

Los archivos incluidos en el paquete son:

  • /control/ : En esta carpeta se guardan los comandos de seguridad. Ponla bajo password!
  • /control/index.php : Panel de control para ver el último estado del servidor casero y para configurar y enviar cualquier comando al servidor.
  • /control/motion.php : Script para cambiar el estado del sistema de seguridad (apagado, encendido, etc)
  • /control/shuthdown.php : Script para cambiar el estado del servidor (reiniciar, apagar, etc)
  • /snapshots/ : En esta carpeta se guardan todas las fotos del sistema. Ponla bajo password!
  • /snapshots/cleanme.php : Borra todas las imágenes del servidor
  • /snapshots/cleanme_old.php : Borra todas las imágenes del servidor que tengan más de 24 horas
  • /snapshots/seesnapshots.php : Muestra todas las imágenes obtenidas en una única página
  • /devices/ : En esta carpeta se guarda la última información obtenida y el historial de tu servidor de seguridad en casa. Ponla bajo password!
  • /devices/cleanme.php : Borra los historiales
  • /devices/device_TUMAQUINA.html : Historial de tu maquina
  • /devices/latest_status : Último status de tu servidor
  • /index.php : Este archivo es el que guarda los datos de tu servidor de seguridad y los guarda en el servidor externo
  • /motion_test.php : Este archivo es el encargado de enviar la respuesta a tu servidor de seguridad sobre si debe o no desactivar la seguridad
  • /shutdown_test.php : Este archivo es el encargado de enviar la respuesta a tu servidor sobre si debe apagarse o reiniciarse etc
  • /motion_status : En este archivo se guarda lo que el usuario quiere hacer, no se edita manualmente, el panel de control se encarga
  • /shutdown_status : En este archivo se guarda lo que el usuario quiere hacer, no se edita manualmente, el panel de control se encarga
  • /shutdown_time : Un poco más de información para apagados retardados, no se edita manualmente el panel de control se encarga

Y por último, agradecer todos vuestros comentarios y emails que me habéis mandado con ideas y demás. Este sistema de seguridad no es muy serio pero puede ayudar a mantener a uno tranquilo de una forma muy barata. Sin ir más lejos ayer la Web sondasespaciales.com se quedó 5 horas caída por problemas en el hosting, no suele pasar muy a menudo (3 veces al año?), pero durante esas 5 horas mi sistema quedó totalmente inhabilitado, y eso es algo que no se puede permitir en un sistema de seguridad medianamente serio si es que te has llegado a plantear de esto de forma realmente seria. ;-). A mi, me vale y me sobra.


Aquí parte del panel otra vez, (En riguroso directo) ;) ACTUALIZACIÓN: El panel de control ya no es "en directo" por temas de seguridad

Todo el proyecto está bajo la licencia GNU del software libre ;-). Agradecería comentarios futuros si algún loco se anima a usar este sistema.

6 comentarios:

Dani dijo...

Hola Aitor, en primer lugar queria felicitarte por el blog y por tus inquietudes, esas frikadas con las que me siento plenamente identificado. Está muy pero que muy bien este sistema montado a partir del motion, lo cierto es que he localizado tu web intentando encontrar el propio "motion php" (la búsqueda concreta en google ha sido "motion php script" que te situa en el número 1!).

Queria aportar algo, por si te interesa: igual te gustaria poder encender una sirena en tu casa de forma remota o encender o apagar alguna luz o cerrar un contacto cuando se produzca la alarma de tu sistema de seguridad, pues bién existe un sistema domótico que no se si conoces,te hablo de domótica X10.
Si hablas con algún especialista en domótica profesional te dirá que X10 es una basura, que apenas ofrece versatilidad comparado con los sistemas domóticos actuales, que es una tecnologia de los años 70 y demás, todo esto es cierto, pero es BARATO y funciona,por lo que para nuestros experimentos es perfecto, no necesitamos invertir 3000 euros en KNX o LONWORKS.

Existe un dispositivo X10, el CM11USB, que tiene una aplicación de control eléctrico para Linux llamada HEYU que te permite controlar una instalación X10 desde el pc por linea de comandos, y por supuesto con el código apropiado desde tu web de control del sistema de seguridad (de hecho yo la uso para encender y apagar luces desde una web con la funcion exec() de php). Si no conoces X10 he hecho hace poco una web con una breve guia-tutorial,está algo incompleta pues me falta toda la parte de dispositivos aún,pero puedes visitarla para conocer X10 a fondo en http://domotica-x10.iespana.es, además hay mucha documentación sobre X10 en internet y proyectos de control web/x10 por lo que se que te resultaria bastante fácil integrarlo con tu sistema.

Enhorabuena y sigue así.

Bultza dijo...

Hola Dani muchísimas gracias por tu comentario,

Aunque había oído hablar de la domótica nunca he investigado nada y el sistema que me has propuesto parece realmente interesante, utilizando como red la propia red eléctrica. Para activar una sirena los propios altavoces del ordenador funcionan perfectamente, pero con toda la cantidad de alarmas que se producen en días nublados creo que no es muy buena idea... bueno... al menos de que lo filtre (las nuves generan una o dos fotos por alarma cuando una persona genera mínimo 20, pero no quiero ni pensar que pasaría si en plena noche se me vuelve loco (como ya me ha pasado).

Si te has atrevido a leertelo todo habrás visto el problema del ruido de la webcam por la noche. Para solucionarlo no me queda otra que dejar una luz encendida que no me importa que pase una noche entera encendida, lo que si que ya me da más respeto es quue pase dos semanas encendida, así que estoy buscando la forma de encender la luz solo por las noches y tengo dos posibilidades, una muy fácil que sería poner un enchufe de esos programables que son muy baratos, o hacer algo más dinámico por mi cuenta. Tengo aquí un conversor usb a rs232 y he programado chips para funcionar por rs232, ahora solo me falta poner un relé, claro, y construirlo todo jaja, tal vez en verano cuando me aburra.

Aún así voy a seguir mirando los links que me has pasado porque parecen bastante interesantes.

Muchas gracias y espero que mis scripts te sirvan para algo

Aitor

dani dijo...

Hola, aqui vuelvo de infiltrao en tu blog,

creo que existe una posible solucion para tus problemas con la visión nocturna y los cambios de luz producidos por las nubes, aunque no lo he probado y no es perfecto pues tiene un inconveniente: tu webcam se vuelve daltónica, xD!!! Aunque igual visto de otro modo esto tampoco es un problema ya que realmente lo que te interesa detectar es el movimiento y no los cambios de color o lumninosidad...

Lei hace un tiempo en un foro que habian modificado una webcam para conseguir visión nocturna, según parece las webcams llevan un filtro para que no entren los rayos infrarrojos en el sensor CCD, lo que hay que hacer básicamente es quitar este filtro (un pequeño film de plástico) para convertir la webcam en una cámara de infrarrojos. Ya te digo que no lo he probado, ni siquiera verificado ... pero en fin, si quieres investigar un poco y es cierto lo que cuentan te puede valer, el inconveniente es que se dejan de verse los colores. El foro estaba en la web Curioso pero Inutil, desde ahi mismo enlazan a la página del proyecto en inglés http://www.hoagieshouse.com/IR/ donde lo explican más en detalle, después solo te faltaria iluminar la habitación con unos cuantos leds de infrarrojos para ver algo por la noche.

De todos modos, siempre podrías usar una webcam normal para el dia y otra "trucada" para la noche ...

Saludos!

Dani dijo...

Hola Aitor,
ojala pille la policía al cabronazo, sólo comentarte que hace un tiempo yo también instalé un servidor de seguridad, no tan profesional como el tuyo, pero con alguna funcionalidad que igual te puede venir bien para el nuevo que montes, como te pasa a ti el problema son las falsas alarmas, aunque ya me has dado alguna idea para filttrarlas.
En mi caso, uso una webcam communicate stx, creo que ya no se vende, y a mi no me da ninguna falsa alarma por la noche, en mi caso motion no detecta cambios en las imagenes que detecta mi camara de noche. Voy a mirar también lo del X10 porque parece un buen complemento. http://madremiamadremiaque.blogspot.com/2008/02/sistema-de-videovigilancia-casero.html
Un saludo de otro Dani.

Dani dijo...
Este comentario ha sido eliminado por el autor.
Bultza dijo...

dani 1, muchas gracias de verdad!

dani 2, interesante lo que me dices, tal vez entonces el problema lo tiene mi webcam, la modifiqué para poder controlar manualmente el brillo para astronomía y tal vez por eso me la he "medio cargado" y por la noche funciona tan mal...