Phase 1 (Foundation): project skeleton, TOML config + Pydantic validation, MQTT bus wrapper, SQLite schema (9 tables), Click CLI, process supervisor. Phase 2 (Camera): RTSP capture via OpenCV, MOG2 motion detection with configurable sensitivity/zones, adaptive FPS recording (2fps idle/30fps motion) via FFmpeg subprocess, HLS live streaming, pre-motion ring buffer. Phase 3 (Web UI): Flask + Bootstrap 5 dark theme, 6 blueprints, Jinja2 templates (dashboard, kiosk 2x2 grid, events, sensors, recordings, settings), PWA with service worker + Web Push, full admin settings UI with config persistence. Remote Access: WireGuard tunnel configs, nginx reverse proxy with HLS caching + rate limiting, bandwidth-optimized remote HLS stream (426x240 @ 500kbps), DO droplet setup script, certbot TLS. 29 tests passing. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
19 lines
701 B
Plaintext
19 lines
701 B
Plaintext
# WireGuard config for DIGITAL OCEAN DROPLET (reverse proxy)
|
|
# Install: cp wg0-droplet.conf /etc/wireguard/wg0.conf
|
|
# Start: systemctl enable --now wg-quick@wg0
|
|
|
|
[Interface]
|
|
# Droplet's WireGuard IP on the tunnel
|
|
Address = 10.99.0.1/32
|
|
ListenPort = 51820
|
|
# Generate with: wg genkey | tee /etc/wireguard/droplet_private.key | wg pubkey > /etc/wireguard/droplet_public.key
|
|
PrivateKey = <DROPLET_PRIVATE_KEY>
|
|
|
|
[Peer]
|
|
# Home server
|
|
PublicKey = <HOME_PUBLIC_KEY>
|
|
# Home server's tunnel IP — traffic to this IP goes through WireGuard
|
|
AllowedIPs = 10.99.0.2/32
|
|
# No Endpoint needed — home server initiates the connection (NAT traversal)
|
|
# No PersistentKeepalive needed — home server sends keepalives
|