Code Monkey home page Code Monkey logo

telegram-security-bot's Introduction

๐Ÿ“ธ ย  Telegram Security Bot

Motion activated surveillance videos via telegram

๐Ÿš€ ย  Introduction

This telegram security bot is designed to run on a Raspberry Pi zero W with a PiCamera and a RCWL-0516 radar motion sensor.

When motion is detected, it notifies authorized users via textmessage and starts the videorecording. When no further movements can be detected, the recording is stopped and sent. To be somewhat sure that no unauthorized users get access to these recordings, the bot allows basic user administration.

๐Ÿงณ ย  Features

  • Get security camera footage anywhere via telegram
  • Create activation tokens to give other users access
  • Manage users
  • Pause and resume surveillance

๐Ÿ“ ย  Installation

Raspberry Pi setup

Whether you are using an already set up Pi or a new one, make sure that you activate the camera and if needed ssh in the raspi-config.

Clone Project

git clone https://github.com/ningelsohn/telegram-security-bot.git

Create your Telegram-Bot

If you're new to telegram-bots, you can find an introduction by telegram here.
get your api-token and insert it in the config.py file along with a self-selected first activation token for you, the owner.
Once the bot is live, you will be able to register youself with that owner-token and take control,
so that no unauthorized persons have access to the surveillance videos.

What are you up to?

You can now choose how to proceed. The script setup should be the faster and easier option.
If you dont want to use venv or a systemd service you can jump to the manual setup.

Script setup

sudo telegram-security-bot/install.sh
What does this script do?
  • Setting up virtual python environment and installing dependencies
  • Installing MP4Box for .h264-to-.mp4 converting
  • Adjusting the .service-file according to the app-location
  • Installing and activating systemd service (stars the app automatically)

Check service status

systemctl status app.service

If no errors occured, you should now be able to interact with the bot.

Manual setup

Navigate into the project directory

cd {...}/telegram-security-bot

Optional: Install and activate venv

python3 -m pip install virtualenv
python3 -m virtualenv venv
source venv/bin/activate

Install python dependencies

python3 -m pip install -r requirements.txt

Install MP4Box

sudo apt-get install gpac 
Why?

PiCamera is capturing videos in h264-encoding. While this is no problem for the usage on the pi, MP4 is a more common coding and has caused less compatibility problems. MP4Box is used to convert .h264 videos to .mp4.

Start the appllication:

python3 -m app.py

If you decide to set up the systemd service on your own, make sure to replace both placeholders.

๐Ÿ›  ย  Hardware setup

Required Parts:

  • Raspberry Pi zero W
  • Raspberry Pi (zero) camera
  • RCWL-0516 radar-sensor

General

Make sure that the Pi has permanent access to the internet.
Even though the Pi can run on a battery, a power supply is clearly preferable since the video recordings increase the power consumption significantly.

Wiring

The camera is simply plugged in with the enclosed ribbon cable. If you're buying a camera for this project, keep in mind that Pi Zero camera cables dont fit the bigger Pi's and vice versa. The radar-sensor in my case has five pins which are soldered onto the Pi as follows:

RCWL-0516 Pin Raspberry Pi Zero W
3V3
GND PIN 6 (GROUND)
OUT PIN 7 (GPIO 4)
VIN PIN 2 (5V)
CDS

This may vary, so make sure to look into the pinout. If your want to use another GPIO Pin, make sure to adjust the config.py accordingly. If you are interested in more details about the RCWL-0516, you should check this out.

In my case the sensor was misfiring a lot when it was pressed tightly together with the Pi.
Keeping a little distance has solved the problem.

๐ŸŒŸ ย  Usage

Now that your bot is up and runnning, you should register yourself as the owner as long as the OWNER_ACTIVATION_TOKEN is valid.

Commands

The following commands are documented with a specific format. The first section is the name of the command. This will trigger the handler for this specific command. The second section is a parameter for this command. The majority of the commands don't require parameters. The last section specifies the role which is required to call this command. The roles are strictly ordered and each role has the permissions of the respective subordinate roles.

/command <PARAM_NAME> *ROLE

Activate token

Use the /activate command to register as a new user. The token determines your authorizations.

/activate <TOKEN> *OPEN_ROLE

Usually a token is only valid for one day, so register promptly after receiving one.

Example: /activate HG3TL4NZE9M7


Leave

Use the /leave command to unsubscribe. As the owner, you cant leave. If you change your mind, you will need a new activation token.

/leave

Usually a token is only valid for one day, so register promptly after receiving one.

Example: /activate HG3TL4NZE9M7


Show users

Use the /users command to get a list of all registered users.

/users *MOD_ROLE

Example: /users


Show banned users

Use the /banned command to get a list of all banned users.

/banned *MOD_ROLE

Example: /banned


Generate token

Use the /token command to generate new tokens. This is the only way to give other users access to the surveillance.

/token <ROLE_OPTION> *ADMIN_ROLE

This request will yields a two-step query to determine the role and validity period. You can only create tokens for roles that have less authority than your own. Take a look into the role table for a rough feature overview.

Example: /token


Clear tokens

Use the /cleartokens command to remove all pending tokens.

/cleartokens *ADMIN_ROLE

Currently this is the only option of invalidating tokens.

Example: /cleartokens


Pause surveillance

Use the /pause command to pause the motion activated surveillance.

/pause *ADMIN_ROLE

If at the moment of pausing the camera is active, the recording will continue and you will receive it as usual.

Example: /pause


Unpause surveillance

Use the /unpause command to unpause motion activated surveillance..

/unpause *ADMIN_ROLE

If at the moment of unpausing a previously detected motion is still ongoing, this will not trigger a new recording. Only after the motion stopped the surveillance is active again.

Example: /unpause


Ban user

Use the /ban command to ban an active user.

/ban *ADMIN_ROLE

This will yield a query in which you can select the user to be banned. Only users with less powerful roles are shown.

Example: /ban


Unban user

Use the /unban command to unban an banned user.

/ban *ADMIN_ROLE

This will yield a query in which you can select the user to be unbanned. Only users with less powerful roles are shown.

Example: /unban


Clear

Use the /clear command to clear all registered users and currently pending tokens.

/clear *OWNER_ROLE

Example: /clear


Roles

role level role name role features
4 OWNER_ROLE owner text & video notifications, create new tokens (-a, -m, -s) , manage users
3 ADMIN_ROLE admin text & video notifications, create new tokens (-m, -s) , manage users
2 MOD_ROLE mod text notifications, manage users
1 SUB_ROLE subscriber text notifications
0 OPEN_ROLE activate token

telegram-security-bot's People

Contributors

ningelschlingel avatar

Stargazers

BeyTek avatar

Watchers

 avatar

telegram-security-bot's Issues

There is no user management

Alltough in the beginning only the owner can create new tokens to allow more users to receive the security updates, he should be able to remove or even ban users from getting messages in the future.

For now, these functionalities should be enough:

  • Ban/Remove a single user (selection with panels allows up to 100 options, should be enough)
  • Remove all current users (except the owner)

Create Userservice instead of managing everything in the bot class

Currently the bot creates and manages users completely alone.

Better create a service which for now handles everything in python lists and dicts, but could be extended sometime to use a database, although persisting the owner and users is not really a priority since this aims for single household use with < 4 users which can easily be set up again if the bot needs to get restarted

Long videos can't be sent

It its current state, the MotionDetectionHandler starts the video with the first motion, and as long as the motion detector is continuously triggered, the recording never stops. When the video is too long, errors occur while trying to send them.

Maybe there should be a max video length or the current logic should be completely replaces by a default length.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.