7. CAMERA SYSTEM + NVR
7.1 Cameras
Backup/reverse: GreenYi tailgate (installed) โ radio backup input. Instant, dynamic lines, no computer.
Perimeter (6-8): mini PoE IP cameras, AliExpress. Self-encoding (H.265), ONVIF/RTSP, dual-stream, metal housing, IP66/67, ~4-15W each.
VENDOR COMPARISON (all unbranded China; buy ONE, test RTSP in OpenCV first):
โโโ HDAY-CAM (BEST track record): 900+ sold, 4.7โ
, 1080p/4MP,
โ lens 1.7-6mm options, 2.8mm + POE48V + metal IP67, ~$27
โโโ REVOTECH: 323 sold, 4.9โ
, 5MP/8MP, full spec sheet,
โ -25ยฐC to 60ยฐC rated, metal, ~$31
โโโ MWRCTV MN430: NO reviews, no specs โ avoid unless desperate
PROVEN (larger) fallbacks: Dahua 5442 turret (EmpireTech), Amcrest, Annke C800
Lens: 2.8mm for nearly all (~100ยฐ wide, low distortion, accurate distance). Fisheye (1.7mm) only for one "overview" cam if wanted โ heavy distortion, bad for distance judgment. 3.6mm only if a position needs reach.
Resolution: 1080p is fine for underbody/close views (you're judging clearance, not zooming). 4MP for 1-2 "detail" positions. On a 9.7" screen the difference is invisible. Mix freely.
AliExpress notes: legit (Alibaba's retail), real buyer protection + 90-day returns, but factory-direct: 2-week shipping, sloppy specs (verify IR wavelength โ many claim 940nm but ship visible 850nm), buy from rated sellers, pay on-platform. Order the test camera EARLY so it overlaps CAN/bench work.
7.2 NVR โ Frigate
Recording โ decoding. Recording just writes the camera's already-encoded H.265 to disk โ light CPU. Decoding only happens to VIEW footage.
rev. 3 โ OptiPlex, CPU-only, records only WHILE AWAKE (no parked 24/7):
โโโ Option A: Frigate (Docker), DETECTION OFF โ real NVR UI for free,
โ records H.265 straight to disk (file-copy, near-zero CPU), strip later
โโโ Option B: plain ffmpeg/go2rtc โ `ffmpeg -c copy` segmented chunks
โ (pure passthrough, no re-encode), Flask UI lists + serves files.
โ Max simplicity + control, but you build playback UI yourself.
โโโ NO AI/CV on cameras (the owner's call): "record + load up to view" only.
CPU object detection is too slow + spikes power โ defer to Pi 5 + Hailo.
Recommendation: start with Frigate detection-OFF; fall back to Option B if heavy.
7.3 Storage Math (the real NVR constraint)
8 cams continuous, H.265:
โโโ 4K: ~688 GB/day โ 3 wks = 14.5 TB
โโโ 5MP: ~344 GB/day โ 3 wks = 7.2 TB
โโโ 1080p: ~168 GB/day โ 3 wks = 3.5 TB โ
STRATEGY: substream (1080p) while-awake + event-triggered 4K
DRIVE: 4TB SSD in truck (~$200, vibration-proof) โ 3 weeks substream IF run continuously
OFFLOAD: flagged events โ home NAS via Tailscale when in range
rev 3.3: Phase 1 records only while the OptiPlex is awake (driving + awake parks), not 24/7 โ so the "3 weeks" above is a continuous-recording ceiling, and real fill is much slower. 4TB is comfortably over-provisioned for Phase 1; that headroom is for when the Pi 5 + Hailo appliance (~1yr out) adds always-on recording.
Where the NVR drive goes (teardown). The Micro has 3 storage paths: M.2 SSD-3 = OS drive (256GB SK Hynix, occupied โ keep it; reseat Dell's M.2 thermal pad on any swap) ยท M.2 SSD-2 = empty 2280 NVMe slot ยท internal 2.5โณ SATA bay (SATA-0 header). Cheapest NVR path = a 4TB 2.5โณ SATA SSD (~$150-170) in the SATA bay โ sequential H.265 writes don't need NVMe speed, so SATA saves ~$50-80 vs a 4TB NVMe in SSD-2. Keep SSD-2 free for a later 1TB NVMe (ChromaDB/app data) if RAG grows.
7.4 Decode (CPU-only โ recording is cheap, viewing is the cost)
OptiPlex 5080 (CPU-only, UHD 630 iGPU):
โโโ RECORDING = file-copy of pre-encoded H.265 โ near-zero CPU โ
โโโ VIEWING = decode, done by the DISPLAY DEVICE's browser, not the server
โโโ Server mostly ROUTES streams; pull substreams for monitoring,
โ serve a main stream only for the camera actively viewed
โโโ UHD 630 QuickSync can assist decode for the few streams viewed at once
Key: recording is NOT decoding โ the camera self-encodes, the OptiPlex just writes bytes to disk. Decoding only happens to view footage, and the browser on the tablet/radio does that. So even CPU-only, the OptiPlex handles record + restream of the Phase-1 cameras fine. What it canNOT do (CPU-only) is 8-cam Frigate object detection โ that's a GPU job, deferred to the Pi 5 + Hailo-8L (~1yr out). An "8 Pis for 8 cameras" farm is unnecessary: cameras self-encode; the server routes, the browser decodes only what's viewed.
7.5 PoE Power
- 802.3af (15.4W/port) is plenty per camera; total switch budget is what matters
- โ ๏ธ Switch budget caveat (rev 3.3): the chosen TP-Link LS108GP is 8-port all-PoE+ but only a 62W total budget. At 8 ร 15W peak (IR-on, night) = 120W, the LS108GP cannot run 8 high-draw cameras at once. Three viable resolutions:
- (a) Run โค4 high-draw cams on the LS108GP (62W รท ~15W โ 4), or
- (b) Pick low-draw 1080p cams (~4โ8W each) so 8 ร 7W โ 56W fits the 62W budget, or
- (c) If you commit to 8 high-res cams at peak, step up to a 126W-class switch (e.g. TP-Link TL-SG1008MP, 126W). Earlier drafts named SG1008MP/SG105PE here โ the build standard is the LS108GP; this caveat is the tradeoff that came with that choice.
- Parked: cameras are OFF (OptiPlex hibernating, no parked recording in Phase 1); running (cams + switch awake): ~48-66W depending on cam count/draw
- PoE is 48V because higher V = lower current = less loss over thin Ethernet (same reason as the grid); camera converts 48V down internally. Worth the small conversion loss for single-cable-per-camera wiring.