homelabby/.planning/phases/05-cable-test-integration/05-CONTEXT.md

2.9 KiB

Phase 5: Cable Test Integration - Context

Gathered: 2026-04-10 Status: Ready for planning Mode: Auto-generated (autonomous mode)

## Phase Boundary

Any cable can be tested, its results written to NetBox, and a label printed in a rapid test-verify-print workflow without leaving the Cable Test Station view. This phase delivers Treedix USB/DP/HDMI tester drivers, FNIRSI FNB58 power meter integration, cable test workflow UI, and auto-NetBox-record creation from test data.

## Implementation Decisions

Hardware Status

  • Treedix USB/DP/HDMI testers + FNIRSI FNB58 arrive 2026-04-13
  • Build code-complete with mock testers
  • Real protocol reverse-engineering deferred to operator
  • FNIRSI FNB58 has working community library: github.com/baryluk/fnirsi-usb-power-data-logger

Tester Driver Architecture

  • TesterDriver interface: Connect(), Read() (TestResult), Disconnect()
  • Per-tester implementations: TreedixUSBDriver, TreedixDPDriver, TreedixHDMIDriver, FNB58Driver
  • Auto-detect by VID/PID using existing USB Manager
  • TestResult struct holds all common fields (continuity, version, speed, etc.)

Cable Test Station UI

  • New /test route with three panels: tester readout, label preview, recent tests
  • Live SSE updates from tester
  • "Print & Next" button: creates NetBox cable record + prints label + clears for next
  • Mobile-friendly for bench use

NetBox Integration

  • Cable record created via netbox client (CreateCable method needed if absent)
  • test_data custom field stores structured JSON
  • catalog_status auto-set to "complete" after test

Backend Endpoints

  • POST /api/test/cable — receives test result, creates cable record in NetBox
  • GET /api/test/events — SSE for live tester data
  • GET /api/test/recent — last N test results

<code_context>

Existing Code Insights

Reusable Assets

  • internal/usb/manager.go — for tester USB device management
  • internal/printer/ — auto-print labels
  • internal/labels/cable.go — cable label renderer (Phase 4)
  • internal/netbox/client.go — needs CreateCable method
  • internal/netbox/types.go — Device type (cables are netbox cables, slightly different)

Integration Points

  • Add internal/tester/ package
  • Add internal/api/handlers/test.go
  • Add web/src/pages/CableTestPage.tsx
  • Wire route /test in router.tsx

</code_context>

## Specific Ideas
  • TreedixUSBDriver mock returns deterministic test data for unit tests
  • FNB58Driver uses raw HID protocol (per baryluk reference)
  • Test result includes: cable_type, version, speed_gbps, max_power_w, pin_continuity, eMarker, resistance_ohm
  • Auto-print uses cable label template from Phase 4
## Deferred Ideas
  • Real Treedix protocol implementation (hardware required)
  • Real FNIRSI FNB58 protocol (community lib reference, hardware required)
  • Network discovery / DUT identification