3.4 KiB
PiDetectify
This project utilizes Raspberry Pi for processing and Pi Camera to detect motion. Upon detecting motion, it sends a notification to the user via ntfy.sh. If the user is not on the same network as the Raspberry Pi, notifications are sent over a VPN using a WireGuard tunnel. Both ntfy and WireGuard run within their own separate Docker containers, and everything runs locally.
Note
I created this for my college project. I do not plan on adding more features to it. If you encounter any bugs, feel free to create an issue (I am more active on KSKA Git than on GitHub.)
Read detailed description in ABOUT.md.
Prerequisites:
- Raspberry Pi (only tested on 3B+, should work on 2/4/5 as well)
- Pi Camera
- Internet connection
- Raspberry Pi OS 64-bit
Important
USE 64-BIT OS FOR FASTER PROCESSING.
Steps to setup
- Clone this repository:
git clone https://git.kska.io/notkshitij/PiDetectify.git
- Change current working directory:
cd ./PiDetectify
- Run
setup.sh
:
./setup.sh
- Setup firewall on Raspberry Pi:
sudo apt install -y ufw
sudo ufw default allow outgoing
sudo ufw default deny incoming
sudo ufw allow 22 # for ssh
sudo ufw allow 80 # for ntfy
sudo ufw allow 51821/tcp # wireguard tcp
sudo ufw allow 51820/udp # wireguard udp
sudo ufw status numbered
sudo ufw enable
sudo systemctl start ufw
sudo systemctl enable ufw
-
Setup Wireguard:
- Generate bcrypt password hash by running:
docker run -it ghcr.io/wg-easy/wg-easy wgpw '<PASSWORD_HERE>'
This will return a
PASSWORD_HASH
. For addition information, checkout their guide.-
Create a file in the current directory called
.env
-
Add the following values in
.env
file:
PASS='<PASSWORD_HASH generated here>' IP=<PUBLIC IP> # Inside single quotations, paste the password hash for PASS variable # Get your public IP by using something like http://ip.me, and paste your public IP there
-
Create and run the containers:
docker compose up -d
-
Check if ntfy.sh and wireguard tunnel is setup correctly:
-
Visit
<RASPBERRYPI-IP>:80
from a browser. Make sure Raspberry Pi and the other device are on the same network. On Raspberry Pi, you can visitlocalhost:8080
-
If you see a dashboard, it implies Docker and ntfy.sh were setup correctly.
-
Visit
<RASPBERRYPI-IP>:51821
, enter the password which you specified in the beginning (NOT the password hash, the password). -
Add new clients to remotely connect and receive notifications.
-
-
In ntfy.sh dashboard, in the left menu at the bottom, click on
Subscribe to topic
, and specify the topic name:motion-sensing
-
Lastly, run the
main.py
file to view motion detection window on screen and send notifications on detecting motion:
python3 main.py
Note
Make sure you're in the directory where you cloned this repo while running all these commands.