docs: comprehensive session documentation for handoff
Full documentation of Frigate NVR setup, cam-control webapp architecture, PTZ CGI command reference, OctoPrint timelapse storage, gotchas and lessons learned. Ready for cold pickup in a future session. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
|
||||
## Project Overview
|
||||
|
||||
3D printing setup and management for two Creality Ender 3 printers, with OctoPrint remote control and IP camera monitoring via a Raspberry Pi proxy.
|
||||
3D printing setup and management for a Creality Ender 3 V3 SE, with OctoPrint remote control and IP camera monitoring via a Raspberry Pi proxy.
|
||||
|
||||
## Hardware
|
||||
|
||||
@@ -40,10 +40,12 @@
|
||||
- **URL:** http://octopi.sethpc.xyz (port 5000 on Pi)
|
||||
- **API key:** see `octopi.sethpc.xzy_api_key.md`
|
||||
|
||||
### go2rtc (v1.9.14)
|
||||
### go2rtc on Pi (v1.9.14)
|
||||
Restreams both cameras with H.264 hardware transcoding and MJPEG fallback.
|
||||
- **API:** http://192.168.0.102:1984
|
||||
- **RTSP:** rtsp://192.168.0.102:8554
|
||||
- **API:** http://192.168.0.102:1984 — **IMPORTANT: binds to 127.0.0.1 only**, not accessible from other hosts
|
||||
- **RTSP:** rtsp://192.168.0.102:8554 (binds to all interfaces, works remotely)
|
||||
- **Config:** `/etc/go2rtc/go2rtc.yaml`
|
||||
- **Service:** `go2rtc.service` (systemd)
|
||||
- **Streams:**
|
||||
- `cam1` / `cam1_mjpeg` — Camera 1 (192.168.0.100)
|
||||
- `cam2` / `cam2_mjpeg` — Camera 2 (192.168.0.103)
|
||||
@@ -76,18 +78,73 @@ Proxy services (all systemd, auto-restart):
|
||||
- `ipcam2-proxy-onvif.service` — 28081 -> 192.168.0.103:8080
|
||||
- `ipcam2-proxy-rtsp.service` — 28554 -> 192.168.0.103:554
|
||||
|
||||
## Frigate NVR
|
||||
- **URL:** https://frigate.sethpc.xyz (port 5000 in CT 241 on node-241)
|
||||
- **Container:** CT 241 (192.168.0.220) — Docker-in-LXC
|
||||
- **Config:** `/opt/frigate/config/config.yml`
|
||||
- **Docker Compose:** `/opt/frigate/docker-compose.yml`
|
||||
- **Storage:** `/opt/frigate/storage/`
|
||||
- **Version:** 0.17.0
|
||||
- **Streams:** `printer_cam1`, `printer_cam2` (via go2rtc section in config, pulls from Pi socat proxies)
|
||||
- **Exposed ports:** 5000 (web), 1984 (go2rtc API), 8554 (RTSP), 8555 (WebRTC)
|
||||
- **Detector:** CPU only (3 threads) — no GPU in this CT
|
||||
- **Object tracking:** Disabled (`track: []`) — monitoring only, no person/car detection
|
||||
- **Recording:** 7 days continuous, 14 days motion
|
||||
|
||||
### Frigate Config Gotchas (v0.17)
|
||||
- `record.retain` is NOT valid — use `record.continuous.days` and `record.motion.days`
|
||||
- `record.events` is NOT valid — use `record.detections` and `record.alerts`
|
||||
- Config errors → safe mode (cameras don't start but web UI does)
|
||||
|
||||
## Camera Control Panel
|
||||
- **URL:** http://192.168.0.220:8090
|
||||
- **Location:** `/opt/cam-control/server.py` on CT 241 (Frigate)
|
||||
- **Service:** `cam-control.service` (systemd, enabled)
|
||||
- **Features:** Live MJPEG feeds, PTZ D-pad (continuous/step), speed control, flip/mirror toggles
|
||||
- **Features:** Snapshot-polled live feeds (~5fps), PTZ D-pad (continuous/step), speed control, flip/mirror toggles
|
||||
- **Source:** `./cam-control/server.py`
|
||||
- **Feeds:** Proxied from Frigate's go2rtc at 127.0.0.1:1984 (frame.jpeg endpoint, not MJPEG stream)
|
||||
- **PTZ proxy:** Routes commands to cameras via Pi socat HTTP proxies (18080/28080)
|
||||
- **Threading:** Uses ThreadingMixIn — required because feeds are long-polling
|
||||
|
||||
## Gitea
|
||||
- **Repo:** https://git.sethpc.xyz/Seth/3d-printing
|
||||
- **Remote:** `https://Seth:REDACTED_GITEA_TOKEN@git.sethpc.xyz/Seth/3d-printing.git`
|
||||
|
||||
## OctoPrint Timelapse Storage
|
||||
- **Mount:** `/mnt/tank` on Pi → SMB share `//192.168.0.173/tank` (node-173)
|
||||
- **Credentials file:** `/etc/samba/tank.creds` (username=octoprint, password=octoprint)
|
||||
- **fstab:** Uses `x-systemd.automount`, `_netdev`, `nofail`
|
||||
- **Timelapse dir:** `/tank/Timelapses` on node-173 (owned by `octoprint` user)
|
||||
- **Samba user `octoprint`** exists on node-173 (created 2026-03-24)
|
||||
- **GOTCHA:** Was originally pointed at pve197 (.197) — updated to node-173 (.173) after tank migration
|
||||
|
||||
## PTZ Camera Control (CGI)
|
||||
Base URLs from main network (via Pi socat proxies):
|
||||
- cam1: `http://192.168.0.102:18080`
|
||||
- cam2: `http://192.168.0.102:28080`
|
||||
|
||||
All CGI commands use HTTP basic auth `admin:admin` at path `/cgi-bin/hi3510/param.cgi`.
|
||||
|
||||
| Command | Parameters |
|
||||
|---|---|
|
||||
| Move | `cmd=ptzctrl&-step=0&-act=left/right/up/down` (continuous, send stop) |
|
||||
| Step | `cmd=ptzctrl&-step=1&-act=left/right/up/down` (auto-stops) |
|
||||
| Stop | `cmd=ptzctrl&-step=0&-act=stop` |
|
||||
| Home | `cmd=ptzctrl&-step=0&-act=home` |
|
||||
| Set speed | `cmd=setptzspeed&-panspeed=N&-tiltspeed=N` (1-5) |
|
||||
| Get speed | `cmd=getptzspeed` |
|
||||
| Flip/mirror | `cmd=setimageattr&-flip=on/off&-mirror=on/off` |
|
||||
| Get image settings | `cmd=getimageattr` |
|
||||
| Get device info | `cmd=getserverinfo` |
|
||||
|
||||
## Current State (as of 2026-03-26)
|
||||
- cam2 is flipped 180 (flip=on, mirror=on)
|
||||
- cam1 is default orientation
|
||||
- Both cameras at speed 2
|
||||
|
||||
## Conventions
|
||||
- Camera credentials: admin/admin (default, isolated network only)
|
||||
- Pi SSH: key-only as `seth`, no password auth
|
||||
- Pi SSH: key-only as `seth`, no password auth — reach via `ssh seth-pi` from steel141
|
||||
- Internal password for homelab services: REDACTED_PASSWORD
|
||||
- Samba user for timelapse storage: octoprint/octoprint on node-173
|
||||
- Pi's wlan0 IP (.102) is DHCP — may change after reboot. Check with nmap if unreachable.
|
||||
|
||||
Reference in New Issue
Block a user