Archive | ||
ABOUT.md | ||
crd.txt | ||
docker-compose.yaml | ||
docker-setup.sh | ||
LINKS.md | ||
main.py | ||
README.md | ||
setup.sh |
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 GitHub.)
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.