IoT Mini Project - 2024
This mini project uses picamera to detect motion, upon detecting motion, it sends notification to devices subscribed to the channel using ntfy.sh
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/iot-mini.git
- Change current working directory:
cd ./iot-mini
- 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
-
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 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
-
In ntfy.sh dashboard, in the left menu at the bottom, click on
Subscribe to topic
, and specify the topic name:motion-sensing
Note
Make sure you're in the directory where you cloned this repo while running all these commands.
Description
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.
Readme
2.8 MiB
Languages
Python
56.3%
Shell
43.7%