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 6.75 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

## Funcionamiento

David Marzal's avatar
David Marzal committed
9
A grandes rasgos lo que este proyecto hace es utilizar la capacidad de [motion](https://motion-project.github.io/) 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).
David Marzal's avatar
David Marzal committed
10 11 12 13
* 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.
14 15 16
    * **No estamos** en casa/no se detectan dispositvos -> En este caso se nos enviará:
        * Un primer mensaje de PREAVISO para saber que ha detectado algo. (Por si se cortara la conexión o pasara algo).
        * Y despues una foto una vez que finalice el video momento en el que motion detecta movimiento. Borrandose el mensaje del PREAVISO
David Marzal's avatar
David Marzal committed
17 18 19
        * 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
20
* Con pequeños cambios este programa podría funcionar en cualquier distribución con bash, pero ahora mismo está configurada y probada para RPi 2 y 3.
David Marzal's avatar
David Marzal committed
21

David Marzal's avatar
David Marzal committed
22 23 24 25 26 27 28 29 30 31
## 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
32
Es preferible que ya tengamos [motion](https://motion-project.github.io/4.1.1/motion_guide.html) funcionando en raspbian, pero si no, el comando `install script` lo intentará hacer por nosotros.
David Marzal's avatar
David Marzal committed
33 34

* Clonar el repo con `git clone https://gitlab.com/Marzal/vigilante-casero.git`
David Marzal's avatar
David Marzal committed
35
    * 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
36
* Rellenar los datos de configuración en `vigilantecasero.conf`
David Marzal's avatar
David Marzal committed
37
* Configurar `motion` para que ejecute el script cada vez que guarde una imagen con una de estas dos opciones en `/etc/motion/motion.conf`:
David Marzal's avatar
David Marzal committed
38 39 40
    * Editando las lineas que contienen al menos los siguientes parametros: `on_event_start`, `on_picture_save` y `target_dir`
        * `on_event_start` es opcional. Solo si queremos un preaviso por si se corta la corriente o falla algo antes de enviar la imagen.
    * El comando `vigilantecasero.sh install script` añadira los comandos necesarios apuntando a `/usr/local/bin/vigilantecasero.sh`, ademas de moficiar varias opciones.
David Marzal's avatar
David Marzal committed
41 42 43
* Tener el punto de montaje listo donde montaremos RUTAVIDEOS en `/etc/fstab`
    * Ejemplo para sistemas no ext4:
    * `/dev/sda1 /media/usb0 vfat defaults,noatime,nofail,x-systemd.device-timeout=10s,umask=000 0 2`
David Marzal's avatar
David Marzal committed
44

David Marzal's avatar
David Marzal committed
45 46
## Configuración

David Marzal's avatar
typos  
David Marzal committed
47
Poder hacer funcionar `motion` y el bot de Telegram son requisitos de este proyecto.
David Marzal's avatar
David Marzal committed
48 49 50

### vigilantecasero.conf

David Marzal's avatar
typos  
David Marzal committed
51 52
* **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).
53
    * 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
David Marzal committed
54
* **RUTAVIDEOS** [Obligatorio]  -> Ruta completa de la carpeta donde queremos que se guarden los videos de motion (se recomienda un pincho USB).
David Marzal's avatar
David Marzal committed
55 56 57 58 59
* **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. Por defecto `ninguna`
* **TIEMPOMIN** [Opcional] -> Tiempo (en minutos`240`) a esperar para generar una nueva notificación si se detecta movimiento estando nostros en casa.
* **TIEMPORET** [Opcional] -> Periodo de gracia en minutos`5` para evaluar si estamos en casa. Si ya nos ha detectado antes de este tiempo no reevalua la presencia.
* **MODO**  [Opcional] -> `normal` o silencioso (sin avisos periodicos [TIEMPOMIN] de que estamos en casa y el servicio funciona).
* **DEPURA** [Opcional] -> Si queremos que el programa muestre más información en su log. Por defecto en `false`
David Marzal's avatar
David Marzal committed
60 61 62 63 64 65

Ejemplo:
```ini
TOKEN=123456789:ABCDefghijkl12rfdhj233jfdkfk
IDR=0123456789
RUTAVIDEOS=/media/usb0/motion
66
IPs2WATCH="192.168.1.15 192.168.1.14 192.168.1.12"
David Marzal's avatar
David Marzal committed
67
TIEMPOMIN=240
David Marzal's avatar
David Marzal committed
68
TIEMPORET=5
David Marzal's avatar
David Marzal committed
69 70
DIASPARAENCASA=3
DIASPARANOCASA=14
David Marzal's avatar
David Marzal committed
71
MODO=normal
David Marzal's avatar
David Marzal committed
72 73 74 75 76 77 78 79 80 81 82 83 84
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`
David Marzal's avatar
David Marzal committed
85
        * `on_event_start RUTA/vigilantecasero.sh preavisa %v >> /tmp/vigilantecasero.log 2>&1`
David Marzal's avatar
David Marzal committed
86 87 88 89
        * `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`
David Marzal's avatar
David Marzal committed
90 91 92 93

## Recomendaciones

### Usar tmpfs para el /tmp
94
Añadiendo la siguiente linea a `/etc/fstab` conseguimos descargar el uso de la microSD y acelerar varios procesos de la placa
David Marzal's avatar
David Marzal committed
95 96
```bash
tmpfs /tmp tmpfs defaults,noatime,nosuid 0 0
97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115
```

## Hardware
Este proyecto ha sido probado con los siguientes dispositivos.

### Placa SBC

* RPi 2 : (Segunda mano)
* RPi 3A+ : 27 / 32 € (Nueva)

### Webcam

* (USB) Sony Play Station Eye Camera for PS3 : 3€ de segunda mano
* (CSI) Longruner LC26-US [con LEDs+infrarrojos] : 29€

### Memoría

* MicroSD de al menos 4GB. Recomendable 8GB.
* Pincho USB de 8GB. Cuanto más grande más tiempo se pueden retener las grabaciones.