# 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: 1. Raspberry Pi (only tested on 3B+, should work on 2/4/5 as well) 2. Pi Camera 3. Internet connection 4. Raspberry Pi OS **64-bit** > [!IMPORTANT] > USE 64-BIT OS FOR FASTER PROCESSING. ## Steps to setup 1. Clone this repository: ```shell git clone https://git.kska.io/notkshitij/iot-mini.git ``` 2. Change current working directory: ```shell cd ./iot-mini ``` 3. Run `setup.sh`: ```shell ./setup.sh ``` 4. Setup firewall on Raspberry Pi: ```shell 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 ``` 5. Setup Wireguard: - Generate bcrypt password hash by running: ```shell docker run -it ghcr.io/wg-easy/wg-easy wgpw '' ``` This will return a `PASSWORD_HASH`. For addition information, checkout their [guide](https://github.com/wg-easy/wg-easy). - Create a file in the current directory called `.env` - Add the following values in `.env` file: ```env PASS='' 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 ``` 8. Create and run the containers: ```shell docker compose up -d ``` 9. Check if ntfy.sh and wireguard tunnel is setup correctly: - Visit `:80` from a browser. Make sure Raspberry Pi and the other device are on the same network. On Raspberry Pi, you can visit `localhost:8080` - If you see a dashboard, it implies Docker and ntfy.sh were setup correctly. - Visit `: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. 10. In ntfy.sh dashboard, in the left menu at the bottom, click on `Subscribe to topic`, and specify the topic name: `motion-sensing` 11. Lastly, run the `main.py` file to view motion detection window on screen and send notifications on detecting motion: ```shell python3 main.py ``` > [!NOTE] > Make sure you're in the directory where you cloned this repo while running all these commands.