Sistema de alarma con Asterisk y webcam
Wednesday, 10 December 4510
Inicio | Documentacion | Software | Acerca de

Documentación y Software
Inicio
Documentacion
Software
Acerca de


Implementar un sistema de alarma con Asterisk y una webcam


(c) 2007 Servitux Servicios Informáticos S.L.

Este documento tiene licencia GPL.

Este sencillo manual explica cómo montar un sistema de alarma usando el software Asterisk y una webcam, bajo Linux Debian 4.0. No se detalla la instalación de Asterisk o cualquier otro software, solo la configuración.

English version


You can read the English version of this document here:

http://www.voip-info.org/wiki/view/How+to+implement+an+alarm+system+with+Asterisk+and+a+webcam

Thanks to RazaMetal for the translation

IMPORTANTE


Este sistema de alarma puede ser didáctico y divertido de implementar, pero no debe ser usado como un sistema único de protección. Servitux Servicios Informáticos S.L. no se responsabiliza en absoluto de cualquier percance que surga de utilizar este sistema.

Requisitos previos

  • Linux instalado y funcionando con conexión a Internet
  • Asterisk funcionando y con conexión a un proveedor de VozIP o la linea telefónica
  • Motion (software de control de webcam)
  • Webcam compatible para Linux

Configurar motion


Una vez que la webcam está funcionando, editamos el fichero /etc/motion/motion.conf y lo dejamos tal que así:

daemon on
quiet on
width 640
height 480
framerate 25
quality 85
auto_brightness on
brightness 0
contrast 0
saturation 0
hue 0
webcam_localhost off
webcam_quality 30
webcam_maxrate 6
on_motion_detected /usr/local/bin/cam_event.sh
text_right %Y-%m-%d\n%T
text_left SERVITUX CAM
webcam_port 8000
webcam_motion on
minimum_motion_frames 9
on_picture_save wput -b -q ftp://user:password@ftp.servidor.com

Lo más importante a destacar es:
  • on_motion_detected : Este comando se ejecutará cuando la camara detecte movimiento
  • on_picture_save : este comando se ejecutará cuando se guarden las imágenes generadas por la webcam al detectar movimiento. En nuestro caso, le decimos que suba todas las imagenes a un servidor ftp remoto. El comando wput se debe instalar si no lo está ya.

Script de gestión de eventos cam_event.sh


Este script se encarga de realizar una llamada a través de asterisk cuando se detecta movimiento.

#!/bin/sh

# primero reproducimos un fichero de audio por los altavoces
for i in `seq 1 15` ; do play /usr/local/bin/alarma.wav ; done

# y luego efectuamos la llamada
cat << EOF > /tmp/alarmevent.call
Channel: SIP/Proveedor/687XXXXXX
Callerid: 966160600
MaxRetries: 2
RetryTime: 20
WaitTime: 20
Context: mensajealarma
Extension: s
Priority: 1
EOF
chown asterisk:asterisk /tmp/alarmevent.call
mv /tmp/alarmevent.call /var/spool/asterisk/outgoing/

Recordad cambiar este fichero según vuestras necesidades. El reproducir el fichero de audio por los altavoces tiene 2 funciones: ahuyentar al posible intruso, y darnos tiempo de apagar la alarma cuando entramos en la oficina. Si no se quiere reproducir audio, con poner un "sleep 60" por ejemplo, nos dejaría 60 segundos de inicio para apagar la alarma y que no llamara.

Configurando el dialplan de Asterisk


Ahora viene la configuración de asterisk. La configuración consta del comando para activar la alarma, el comando para desactivarla, y las acciones para cuando salte la alarma.

; contexto de las extensiones, por ejemplo, default o from-internal
exten => *666,1,Answer
exten => *666,n,Wait(1)
exten => *666,n,Playback(activated)
exten => *666,n,Wait(120)
exten => *666,n,System(/usr/local/bin/control_motion.sh start)
exten => *666,n,Wait(1)
exten => *666,n,Hangup()

exten => *777,1,Answer
exten => *777,n,Wait(1)
exten => *777,n,System(/usr/local/bin/control_motion.sh stop)
exten => *777,n,Playback(de-activated)
exten => *777,n,Wait(1)
exten => *777,n,Hangup()

[mensajealarma]
exten => s,1,Set(LANGUAGE()=es)
exten => s,n,Answer
exten => s,n,Wait(2)
exten => s,n,Playback(activated)
exten => s,n,Wait(1)
exten => s,n,Playback(activated)
exten => s,n,Wait(1)
exten => s,n,Playback(activated)
exten => s,n,Wait(1)
exten => s,n,Playback(activated)
exten => s,n,Wait(1)
exten => s,n,Playback(activated)
exten => s,n,Wait(1)
exten => s,n,Hangup

Explicación:
  • *666 es el código de activación de la alarma. El sistema espera 120 segundos y la activa, así podemos cerrar y salir de la oficina
  • *777 es el código de desactivación de la alarma
  • el contexto mensajealarma es lo que se reproduce cuando el sistema nos llama por teléfono

Script de encendido/apagado control_motion.sh


Este script inicia o para el programa motion

#!/bin/sh

case $1 in
    start)
        sudo /usr/bin/motion
    ;;
    stop)
        PID=`pidof motion`
        sudo kill $PID
        sudo killall cam_event.sh
        sudo rm -f /var/spool/asterisk/outgoing/alarmevent.call
    ;;
esac

Para terminar


Con esta base, puedes modificar todo lo que necesites para amoldarlo a tus necesidades. Puedes hacer que el motion envíe un correo electrónico, o que el asterisk mande un SMS (si tu proveedor lo permite) en vez de una llamada.

Algo que no sé si se podría hacer es que el asterisk hiciera una videollamada a un móvil y ver en directo qué ocurre en la oficina a través del móvil, algo así:

PC + Softphone + Webcam ----- Asterisk ------ Teléfono movil

Me suena haber visto por ahí que el asterisk ya puede gestionar videollamadas, pero no sé a que nivel...

Si tienes un teléfono con soporte para "intercom", puedes usarlo para llamar a la oficina cuando salte la alarma, y escuchar en directo lo que esté ocurriendo y hablar en directo con los "visitantes" ;)



  Last modified: Thu, 22 December 2016  Contenidos © ServiTux Servicios Informáticos