GitLab's annual major release is around the corner. Along with a lot of new and exciting features, there will be a few breaking changes. Learn more here.

README.md 4.99 KB
Newer Older
David Marzal's avatar
David Marzal committed
1 2
# Vigilante Casero

David Marzal's avatar
David Marzal committed
3 4
Este proyecto contiene las instrucciones y un script para montar un sistema de vigilancia en casa con una Raspberry Pi

David Marzal's avatar
David Marzal committed
5
[[_TOC_]]
David Marzal's avatar
David Marzal committed
6 7 8 9 10 11 12 13 14 15 16 17 18

## Funcionamiento

A grandes rasgos lo que este proyecto hace es utilizar la capacidad de `motion` de generar eventos al detectar movimientos para mandar una foto y un mensaje a un canal de Telegram, alertandonos de cuando hay movimiento en nuestra casa (o localización donde lo tengamos montado).
* La configuración nos permite definir las IPs de nuestros dispositivos moviles (se recomienda configurar IP fija o por MAC) para detectar si estamos en casa o no.
* En función de si estamos en casa o no el programa actua de la siguiente manera:
    * **Estamos en casa** (o alguno de nuestros dispositvos lo esta) -> Solo nos mandara un mensaje de aviso _silencioso_, sin fotografía. Ademas los mensajes tendran un tiempo mínimo entre ellos definido en el fichero de configuración (por defecto 30 minutos), para que no tengamos mensajes constantes si estamos moviendonos por casa.
        * Los videos generados se guardan en una subcarpeta con la IP del primer dispositivo detectado y se borraran los que tengán más de 7 días.
    * **No estamos** en casa/no se detectan dispositvos -> En este caso se nos enviará una foto del momento en el que motion detecta movimiento
        * Los videos se guardan en el raiz de la ruta especificada en la configuración para el almacenaje y se borraran los que tengán más de 1 mes.
* Mediante la configuración opcional de una VPN como Wireguard y la apertura del puerto correspondiente en el _router_ se puede tener acceso a la webcam en directo. Pero está configuración execede el alcance de esta documentación.
    * El programa si se encarga de enviarnos un mensaje si detecta que nuestro router ha cambiado de IP pública para que sea posible acceder a la VPN sin DNS.

David Marzal's avatar
David Marzal committed
19 20 21 22 23 24 25 26 27 28
## Instalación

### Telegram
Es necesario:
* Crear bot con @botfather
* Añadirlo a un canal (mejor si es privado)
* Apuntar el `TOKEN` del bot y el `ID` del canal

### Raspberry Pi

David Marzal's avatar
David Marzal committed
29
Es preferible que ya tengamos [motion](https://motion-project.github.io/motion_config.html) funcionando en raspbian, pero si no, el comando `install script` lo interá hacer por nosotros.
David Marzal's avatar
David Marzal committed
30 31

* Clonar el repo con `git clone https://gitlab.com/Marzal/vigilante-casero.git`
David Marzal's avatar
David Marzal committed
32
    * El programa debería funcionar desde esa misma carpeta pero tiene la opción de instalarse en `/usr/local/{etc,bin}`
David Marzal's avatar
David Marzal committed
33
* Rellenar los datos de configuración en `vigilantecasero.conf`
David Marzal's avatar
David Marzal committed
34 35 36
* Configurar `motion` para que ejecute el script cada vez que guarde una imagen con una de estas dos opciones en `/etc/motion/motion.conf`:
    * Editando las lineas que contienen al menos los siguientes parametros: `on_picture_save` y `target_dir`
        * `on_picture_save` con la ruta correcta  `on_picture_save RUTA/vigilantecasero.sh avisa %f >> /tmp/vigilantecasero.log 2>&1`
David Marzal's avatar
typos  
David Marzal committed
37
        * `target_dir`
David Marzal's avatar
David Marzal committed
38 39
    * El comando `vigilantecasero.sh install script` añadira el comando necesario apuntando a `/usr/local/bin/vigilantecasero.sh`, ademas de moficiar varias opciones.

David Marzal's avatar
David Marzal committed
40 41
## Configuración

David Marzal's avatar
typos  
David Marzal committed
42
Poder hacer funcionar `motion` y el bot de Telegram son requisitos de este proyecto.
David Marzal's avatar
David Marzal committed
43 44 45

### vigilantecasero.conf

David Marzal's avatar
typos  
David Marzal committed
46 47
* **TOKEN** [Obligatorio] -> Token que nos ha dado @botfather.
* **IDR** [Obligatorio] -> ID del canal donde recibiremos las notifiaciones. (Si empeiza por **-100** esa parte no es necesaria).
David Marzal's avatar
David Marzal committed
48
    * Para obtener el id del canal podeis escribir en el algún mensaje, y luego le dais a "Copiar el enlace del post". Os dara una URL del tipo `https://t.me/c/**IDR**/1123`
David Marzal's avatar
typos  
David Marzal committed
49 50 51 52
* **IPs2WATCH** [Opcional] -> Listado de IPs locales separadas por espacios en blanco, de las IPs que queremos que se usen para detectar nuestra .presencia en casa
* **RUTAVIDEOS** [Obligatorio] -> Ruta completa de la carpeta donde queremos que se guarden los videos de motion (se recomienda un pincho USB).
* **TIEMPOMIN**=30 [Opcional] -> Tiempo a esperar para generar una nueva notificación si se detecta movimiento estando nostros en casa.
* **DEPURA** [Opcional] -> Si queremos que el programa muestre más información en su log.
David Marzal's avatar
David Marzal committed
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77

Ejemplo:
```ini
TOKEN=123456789:ABCDefghijkl12rfdhj233jfdkfk
IDR=0123456789
IPs2WATCH="192.168.1.15 192.168.1.14 192.168.1.12"
RUTAVIDEOS=/media/usb0/motion
TIEMPOMIN=30
DEPURA=false
```

### motion ###

* Si hemos lanzando el comando `vigilantecasero.sh install script` en princpio todo está listo para configurar pero conviene comprobar opciones como:
    * **/etc/motion/motion.conf**
        * `width`
        * `height`
        * Los que están en la función `install_motion` dentro del script
* En caso de querer configurarlo a mano hay que modificar obligatoriamente estas opciones:
    * **/etc/motion/motion.conf**
        * `target_dir $RUTAVIDEOS`
        * `on_picture_save RUTA/vigilantecasero.sh avisa %f >> /tmp/vigilantecasero.log 2>&1`
    * **/etc/default/motion**
        * Hay que activar el demonio poniendo a `yes` la opción `start_motion_daemon`
    * Se recomiendo activar el servicio para que se lance tras un reinicio: `systemctl enable motion --now`