a security system for raspberry pi 3
Go to file
ndwarshuis cb4f98a7b0 configured as pypi package 2019-02-06 01:23:40 -05:00
pyledriver configured as pypi package 2019-02-06 01:23:40 -05:00
.gitignore configured as pypi package 2019-02-06 01:23:40 -05:00
LICENSE add license 2019-01-30 23:12:43 -08:00
README.org added init to readme 2019-01-31 00:09:44 -08:00
setup.py configured as pypi package 2019-02-06 01:23:40 -05:00

README.org

Pyledriver

Home security system to be run on raspberry pi 3.

Motivation

This is a (slightly overengineered?) solution to a common problem with living in a big city. While it could probably do a decent job a securing an appartment or home (untested because our specific apartment has not been looted yet), it was also an excellent learning experience for a variety of frameworks (Flask, GStreamer, glusterFS) and programming concepts (multithreading, state machines, event-driven callbacks, video accelaration).

Detection and Countermeasures

The pyledriver security system is equiped with five IR motion sensors and a magnetic door sensor. These are managed using the excellent RPi.GPIO library. It also features a USB camera input with both audio and video (OpenMAX accelarated h.264 and opus codecs respectively) which are multiplexed using Gstreamer.

If armed, triggering any of the IR or door sensors will trigger a countdown. If the password is not entered within the countdown, an alarm will sound, and email will be sent to appropriate parties, and the camera will begin recording. The video can be saved to a glusterFS-backed directory so the files can be uploaded to a remote server and thus preserve the evidence in case the intruder finds the Pyledriver and smashes it.

Interface

  • USB touchpad for password input
  • Web interface to display video and and operate a text-to-speech engine (to yell at intruders or scare roommates)
  • linux socket for remote control via ssh

Design

The core of the Pyledriver Security System is a statemachine object to represent the disarmed, armed, triggered, and counting-down states. There are separate threads for each sensor and the USB keypad input, which asynchronously modify the state of the state machine. Each state transition has a set of callbacks that trigger alarms, make the lights blink, send emails, etc. There is also a separate thread that listens on a linux socket for commands that can trigger state changes.

The web interface is implemented in Flask and displays the video as well as provides a text input box to control the Text to speech engine (implemented in espeak).

Installation

Clone this repository

git clone git@github.com:ndwarshuis/pyledriver.git

Initialization

Run main.py as root

Dependencies

Python libraries

  • python-evdev
  • python-flask
  • python-flask-wtf
  • python-numpy
  • python-psutil
  • python-pyaudio
  • python-pygame
  • python-pyinotify
  • python-raspberry-gpio
  • python-requests
  • python-yaml
  • gst-python

Linux libraries

  • glusterfs
  • gstreamer (base and good)
  • gst-omx
  • espeak

Configuration

There is a default configuration file in config/pyledriver.yaml.default. Modify options here as desired.

Future Plans

  • make web interface multi-threaded (now cannot operate text-to-speech and watch the video simultaneously, which makes it hard to yell at intruders)
  • make espeak sound like GLaDOS
  • add party mode (which really means make salsa version of "Still Alive" loop forever)