# vixy-vision Server Camera snapshot server with motion detection for Raspberry Pi. ## Quick Start (Single Camera) ```bash cp env.example .env nano .env # Configure settings ./setup.sh sudo systemctl start vixy-vision- ``` ## Multi-Camera Deployment (Same Pi) For running multiple cameras on one Pi, clone the repo into separate directories: ```bash # Camera 1: desk git clone http://gateway.local:3001/vixy/vixy-vision.git ~/vixy-vision-desk cd ~/vixy-vision-desk/server cp env.example .env # Edit .env: # SERVICE_NAME=vixy-vision-desk # CAMERA_ID=desk # CAMERA_INDEX=0 # PORT=8443 ./setup.sh # Camera 2: basement git clone http://gateway.local:3001/vixy/vixy-vision.git ~/vixy-vision-basement cd ~/vixy-vision-basement/server cp env.example .env # Edit .env: # SERVICE_NAME=vixy-vision-basement # CAMERA_ID=basement # CAMERA_INDEX=2 # PORT=8444 ./setup.sh ``` Each instance gets its own: - Install directory: `~/vixy-vision-/` - Systemd service: `vixy-vision-.service` - Port: as configured in `.env` ## Features - 📷 USB camera snapshots via HTTPS API - 🔐 API key authentication - 🔍 Motion detection with frame differencing - 📤 Event reporting to central collector - 🔄 Auto-reconnect on camera failure - 🔢 Multi-instance support via SERVICE_NAME and PORT ## Configuration Copy `env.example` to `.env` and customize: | Variable | Description | Default | |----------|-------------|---------| | `API_KEY` | Auth key for API | (generated) | | `SERVICE_NAME` | Systemd service name | vixy-vision | | `PORT` | HTTPS port | 8443 | | `CAMERA_ID` | Identifier for this camera | camera | | `CAMERA_INDEX` | /dev/videoN index | 0 | | `MOTION_ENABLED` | Enable motion detection | true | | `MOTION_THRESHOLD` | Sensitivity (lower = more) | 25 | | `MOTION_COOLDOWN` | Seconds between events | 5.0 | | `COLLECTOR_URL` | Where to POST events | (optional) | ## API Endpoints | Endpoint | Auth | Description | |----------|------|-------------| | `GET /` | No | Service info | | `GET /health` | No | Health check | | `GET /snapshot` | Yes | JPEG snapshot | | `GET /motion/stats` | Yes | Detection stats | | `POST /motion/enable` | Yes | Start detection | | `POST /motion/disable` | Yes | Stop detection | ## Motion Events When motion is detected, the server POSTs to `COLLECTOR_URL`: ```json { "event": { "timestamp": "2024-12-16T14:23:01Z", "camera_id": "basement", "event_type": "motion", "confidence": 0.75, "area_percent": 7.5 }, "snapshot": "" } ``` ## Service Management ```bash sudo systemctl start vixy-vision- sudo systemctl stop vixy-vision- sudo systemctl status vixy-vision- sudo journalctl -u vixy-vision- -f ```