a4797227ea
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>
6.5 KiB
6.5 KiB
3D Printing Project
Project Overview
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
Printer
| Printer | Speed | Extruder | Auto-Level | Build Volume | Hot End |
|---|---|---|---|---|---|
| Creality Ender 3 V3 SE | 250 mm/s | Sprite Direct Drive | CR Touch | 220x220x250 mm | Standard |
Filament Inventory
| Material | Color | Brand | Diameter |
|---|---|---|---|
| PLA | White | OVERTURE | 1.75 mm |
| PLA | Black | OVERTURE | 1.75 mm |
| PLA | Black | ELEGOO | 1.75 mm |
| PLA | Dark Blue | ELEGOO | 1.75 mm |
| PLA | Transparent | SUNLU | 1.75 mm |
| ABS | Black | Creality | 1.75 mm |
| PETG | Red | Creality | 1.75 mm |
| PETG | Black | Creality | 1.75 mm |
Accessories
- Creality Hardened Steel MK8 Nozzles (5-pack)
Remote Printing Infrastructure
Raspberry Pi 3 B+ (seth-pi)
- Hostname: seth-pi
- OS: Debian 13 (Raspberry Pi OS Lite)
- User: seth (key-only SSH, no root login)
- wlan0: 192.168.0.102 (main network, DHCP) — default route
- eth0: 192.168.0.101/24 (isolated camera router subnet)
- WiFi SSID: WiFrei
OctoPrint
- URL: http://octopi.sethpc.xyz (port 5000 on Pi)
- API key: see
octopi.sethpc.xzy_api_key.md
go2rtc on Pi (v1.9.14)
Restreams both cameras with H.264 hardware transcoding and MJPEG fallback.
- 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)
IP Cameras — TENVIS (on isolated eth0 subnet)
Both TENVIS cameras use credentials admin:admin and expose RTSP on port 554 (/11 path), HTTP on 80, and ONVIF on 8080.
- Internal model: C9F0SeZ0N0P4L0 (Hi3510-based SoC)
- Firmware: V9.1.6.1.24-20170925
- Hardware version: V1.0.0.1
- CGI interface:
/cgi-bin/hi3510/param.cgi - cam2 has an SD card inserted (59GB)
| Camera | Isolated IP | Proxy Ports (on .102) |
|---|---|---|
| cam1 | 192.168.0.100 | HTTP:18080, ONVIF:18081, RTSP:18554 |
| cam2 | 192.168.0.103 | HTTP:28080, ONVIF:28081, RTSP:28554 |
Proxy Architecture
The Pi bridges two networks:
- eth0 (192.168.0.101) connects to an isolated router with the two IP cameras
- wlan0 (192.168.0.102) connects to the main homelab network
- socat systemd services proxy each camera port from the isolated subnet to the main network
- Port scheme:
1xxxx= cam1,2xxxx= cam2
Proxy services (all systemd, auto-restart):
ipcam-proxy-http.service— 18080 -> 192.168.0.100:80ipcam-proxy-onvif.service— 18081 -> 192.168.0.100:8080ipcam-proxy-rtsp.service— 18554 -> 192.168.0.100:554ipcam2-proxy-http.service— 28080 -> 192.168.0.103:80ipcam2-proxy-onvif.service— 28081 -> 192.168.0.103:8080ipcam2-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.retainis NOT valid — userecord.continuous.daysandrecord.motion.daysrecord.eventsis NOT valid — userecord.detectionsandrecord.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.pyon CT 241 (Frigate) - Service:
cam-control.service(systemd, enabled) - 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/tankon 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/Timelapseson node-173 (owned byoctoprintuser) - Samba user
octoprintexists 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 — reach viassh seth-pifrom 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.