5. POWER ARCHITECTURE (the keystone)

5.1 Three Power Tiers (matched to energy source)

rev 3.3: numbers re-baselined to the OptiPlex (~80W) brain, not the shelved Z440 (~350W). The old 350–400W "driving" figure was a Z440 number β€” gone.

TierLoadDrawEnergy/daySource
DrivingEverything awake (OptiPlex ~80W + cams + NVR + LLM + ESP32 + switch)~100-150Wβ€”Alternator (+DC-DC charger)
Short parkOptiPlex awake (Pi + few cams) OR hibernating~5-100W10-200 AhHouse battery (overnight OK)
Long parkOptiPlex hibernating; ESP32 layer only (2 cams optional)~2-15W~5-30 AhSolar (400W) sustains in 3 seasons; winter draws the bank (see Β§5.2)

5.2 The Numbers (why it tiers)

8-camera record (~58W):  ~116 Ah/day @ 12V β†’ battery dies in hours
2-camera tier (~15W):    ~30 Ah/day  β†’ 400W solar covers it βœ…
ESP32-only idle (~5W):   ~10 Ah/day  β†’ trivial

400W solar realistic PNW input:
β”œβ”€β”€ Good summer day: ~1,500-2,000 Wh
β”œβ”€β”€ Average: ~800-1,200 Wh
└── Poor/winter: ~300-600 Wh

⚠️ Winter-margin reality (rev 3.3): the 15W parked tier needs 15W Γ— 24h β‰ˆ 360 Wh/day β€” that's the floor of the poor/winter range, so on a bad PNW/BC week solar does NOT sustain even the 2-cam tier and it leans on battery reserve. Honest statement: solar sustains the long-park tier in ~3 seasons; deep winter draws the bank down. Default winter parked state should be ESP32-only (~2–5W β‰ˆ 50–120 Wh/day), which solar covers year-round. This matters more after the a future move (worse latitude/cloud).

5.3 Power Flow (rev 3.8 β€” full layout in Β§5.9)

STARTER SIDE                          HOUSE SIDE (all βˆ’ to the BATTERY-NEG BUS BAR, Β§5.9)
[start battery + 2nd lead-acid         [HOUSE 100Ah hood] ──── carputer loads
 (winch buffer)]                          β”‚  β”œ 12Vβ†’19V converter β†’ OptiPlex
   β”‚ alternator                           β”‚  β”œ Pi Β· ESP32 Β· cameras Β· radio
   └─[VEVOR 40A DC-DC]──(ign/V-sense)β”€β”€β”€β”€β”€β”€β”˜  β”” inverter (βˆ’ direct to bus bar)
                                          β”‚
400W Solar β†’ EPEVER MPPT (in bed) ───pos-only leadβ”€β”€β”€β”˜ (neg β†’ bed bus bar/chassis)
                                          β”‚
                          [ESP32 contactor + pre-charge]── BED 600Ah (removable, Anderson)
GROUND: battery-neg bus bar = star point; ONE heavy bond β†’ frame (CAN/sensor reference)

5.4 Engine-Off Logic + Sleep-State Ladder (rev 3.5)

Engine off → ESP32 isolates the OptiPlex converter to the house battery (starting battery never drained), accessories on a 15-min timer. The OptiPlex then walks an ACPI sleep ladder, shallow→deep, run by the Pi wake-coordinator (clock + door/ignition events + battery telemetry), executed on the OptiPlex via systemctl suspend/hibernate + RTC/BIOS-Auto-On self-wake.

ACPI states (5080 Micro estimates β€” ⚠️ bench-measure, gates Β§13):

StateWhatWakeDraw (at DC input)
S0 on/idlerunninginstant~10-20W idle, ~35W+ load
~~S1 / S2~~obsolete, unusedβ€”n/a
S3 suspend-to-RAMRAM alive, rest off~2-5s~1-3W
S4 hibernateRAM→disk, near-off~15-25s~0.5-2W
S5 offcold, standby only~30s cold boot~0.5-2W (S4β‰ˆS5 draw)

(S4 and S5 draw the same with WOL-standby alive β€” S5's value is a CLEAN boot + robustness on long parks, not power.)

The ladder (the owner's tuning):

0–7 min parked   β†’ S0 (stay on β€” finish housekeeping, instant return)
7 min – 2 hr     β†’ S3 suspend (~1-3W, wakes 2-5s β†’ ready before the door)
2 hr+            β†’ S4 hibernate (~0.5-2W, wakes ~20s)
nightly 03:00    β†’ COLD BOOT (BIOS "Auto On Time" / rtcwake) β†’ maintenance window β†’ back to rung
24hr no USER session  OR  battery low
                 β†’ ESP32 HARD-CUTS the OptiPlex converter = TRUE 0W, stays off till you return

Nightly 03:00 maintenance window (cool + idle): pull the Pi→5080 event-log backlog · back up 5080→NAS/Hetzner/home · roll the day's events into RAG/memory · OS/ESPHome/app updates over Tailscale · health heartbeat (a missed 3am wake = something's wrong). Then drop back to its rung.

Deep storage (24hr idle or low battery): the always-on ESP32 (on its own 12V) hard-cuts the converter feed β†’ the OptiPlex is genuinely off at 0W (better than S5's ~0.5-2W standby), no nightly wakes. Return = the ESP32 re-powers the converter on ignition OR keyring beacon OR dash button. (WOL is gone once power is cut β€” but you're physically present, so the ESP32 re-power path covers it.)

5.5 12V vs 48V Decision β€” βœ… SETTLED: 12V

Resolved (rev 3). The deciding check below is answered: the EPEVER 30A TracerAN is 12V/24V-only β€” no 48V (confirmed). Per the rule below, that forces 12V (matches the truck, EPEVER works, loads native). System voltage is 12V, settled β€” the 48V golf-cart bank is unused for this build. The analysis below is retained for the record; it is no longer an open decision, and this is NOT a pre-spend blocker (the stale Β§13 entry has been corrected).

You own both a 12V 100Ah (1,280 Wh) and 48V 100Ah (4,800 Wh) LiFePO4.

48V advantages: 4Γ— the energy (solves camera wall β€” ~2.7 days @ 58W),
                1/4 the current, thinner/cooler wiring, more efficient inverter
48V costs: truck is 12V-native → need 48V→12V converter for 12V loads,
           12V→48V DC-DC charger (rare/pricey) for alternator charging,
           and a 48V-capable MPPT (EPEVER 30A may be 12V/24V only)

DECIDING FACTOR: Does the EPEVER 30A MPPT support 48V?
β”œβ”€β”€ YES β†’ 48V attractive (solar already handled, huge capacity)
└── NO  β†’ staying 12V is simpler (matches truck, EPEVER works, loads native)  ← βœ… THIS BRANCH

ANSWER: EPEVER 30A TracerAN = 12V/24V-only (no 48V), CONFIRMED β†’ 12V chosen.

PRAGMATIC PATHS:
A) Stay 12V: simplest, 1,280Wh, fine for driving + 2-cam parked tier  ← βœ… SELECTED
B) Go 48V: 4,800Wh end state, but +48V MPPT +48V→12V conv +12V→48V charger  (not pursued)

~~TODO: confirm EPEVER 30A model's 48V capability~~ β†’ DONE: 12V/24V-only confirmed. Decision closed.

5.6 Output & DI Maps (rev 3.6 β€” DO triggers β†’ Bosch panel)

Architecture: the controller's 8 digital outputs each TRIGGER one socketed Bosch 30-40A relay on the external fuse/relay panel (Β§6). The panel relays carry the load; the DO just pulls the coil. So there's no "10A onboard relay" limit β€” the Bosch relays handle 30-40A, sized per load, and swap out individually. Tiny loads/enables (≀500mA: OptiPlex pulse, converter enable, compressor signal) can be driven by a DO directly, no Bosch relay.

Outputs (rev 3.17 map β€” matches the full-wiring sheets; safety on the board, lights on the RS485 module):

Digital Inputs (8): 1 door (dome-light wire) Β· 2 ignition (12V-switched) Β· 3 reverse Β· 4 dash button Β· 5 cab-temp/sensor Β· 6 combiner override (+ ADC2 bed-V sense feeds the combiner logic, sheet 6) Β· 7 O1 read-back (the latching DPDT relay's pole-2 aux contact = true on/off state, keeps O1 state-synced through reboots, Β§6.3) Β· 8 spare

Wake/state via physical DI wires, not CAN β€” more reliable, and it's why no always-on CAN node is needed (Β§8).

Wire sizing (rev 3.17 β€” SIMPLIFIED TO THREE PURCHASED SIZES): DOβ†’coil trigger = owned solid Cat5 / 20-22 AWG (one Cat5 = 8 triggers; secure for vibration, Β§6). Every relayβ†’load run = 16 AWG, fused ≀10A (the fuse protects the wire; all remaining loads are ≀10A now the compressor is out and the KC bar's 12 AWG ships in its kit harness). 6 AWG = DC-DC in/out, MPPT, computer-box feed. 2 AWG = trunk Β±, battery leads, frame bond (covers the old 4 AWG jobs). Rule: any future load >10A gets its own dedicated thicker run β€” never up-fuse a 16 AWG wire.

5.7 Lighting β€” high-output LED, on with ignition off (rev 3.4)

Goal: multiple high-output LED bars (e.g. KC FLEX ERA) controllable from voice/app/switch, on with the engine off, fed from the house bank, protected by the ESP32. (Exact quantity/sizes still pending β€” needed to finalize the wire/fuse/relay map.)

Lighting splits by cluster (rev 3.32, Option B Β§6.5):

Reference load β€” KC FLEX ERA 20" kit (SKU 0292 = two 10" bars): 216W white / 18A, 24W amber / 2A, 9-36V. A 50" Flex Era is 45A β€” that one needs a proper contactor, not the harness relay.

1. Fed from the HOUSE bank, gated by the always-on Waveshare β€” never the starting battery. "On with ignition off" works because the feed is the always-on 12V house bus, switched by a relay the (always-on) ESP32 controls. This is why the Waveshare is always-on.

2. The ESP32 triggers, it doesn't carry the current. 18A would smoke the 10A relays. But the KC kit already includes a harness relay + illuminated 3-position switch, so no separate Bosch relay is needed:

House 12V (always-on, fused ~25A/kit) β†’ KC harness relay (carries 18A) β†’ light bar
                                              ↑ trigger (mA)
                          β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                   KC dash switch (manual, always works)    Waveshare relay output (voice/app/auto)
                   ──── diode-OR'd: either source turns it on ────

Keep the manual KC switch as a fail-safe (lights work even if the computer is dead); the Waveshare trigger adds voice/app/automated control.

3. The real reason to route through the ESP32 = protection. Runtime on the FEENCE 100Ah (1,280Wh):

Loadon 100Ahon 200Ah (illustrative; bed bank now ~600Ah Β§5.8 β†’ ~3Γ— these)
One 20" kit white (216W)~5.9 hr~12 hr
Two kits (432W)~3 hr~6 hr
One kit amber (24W)~50+ hr (β‰ˆfree)~100+ hr

White = work-session lighting, not all-night. The ESP32 enforces: LVD cutoff (kill lights if the bank drops below threshold), auto-off timer (don't drain the bank because you forgot), and a runtime estimate from the WonVon shunt on the Flask/PWA dash.

4. On-road interlock (FRONT board, KC bumper rack). Forward-facing high-output bars are off-road-only when lit on public roads β†’ software gate: the front board inhibits the KC bumper rack above ~5 mph on-road β€” speed comes from the OptiPlex's CAN over MQTT (you're driving = OptiPlex awake), or fall back to a vehicle-speed DI; rock/underbody/amber-marker and the bed camp lights stay freely available (camp lights are rearward β€” no interlock).

5. Wiring (per kit, once quantity is set): ~12 AWG, own ~20-25A fuse off a distribution block on the house bus, one relay-trigger circuit each. Β§5.6 already reserves R5 rock lights / R6 light bar / R7 underbody.

5.8 Battery Purchase β€” buy SOON (2026 rising market) (rev 3.37)

Timing: buy the capacity-add battery sooner, not later. 2026 is a rising market on both ends β€” battery-grade lithium carbonate ~doubled (to ~$26k/ton, highest in 2+ yrs), and the US Section 301 tariff on Chinese non-EV Li batteries jumped 7.5% β†’ 25% (Jan 2026), with combined effective LFP-cell rates heading toward ~82% under already-scheduled increases. The "wait for it to get cheaper" era is over; waiting most likely costs more.

Strategy shift (rev 3.37 β€” SIZING UP for overland): the owner's target moved from "carputer-only" to ~7 kWh overland house power (fridge/camp/tent for days). That reopens the size question β€” but NOT toward the cheapest big "600Ah" sticker. The honest path to 7 kWh is either a reputable single 560Ah pack or two ~300Ah packs. The distributed two-pack option now wins on more than redundancy: at ~7 kWh a single pack is 55–60 kg β€” too heavy to lift out, which breaks the Β§5.9 removable-bed concept; two ~30 kg packs stay one-person liftable AND give redundant BMS.

β›” Dumfume 600Ah β€” REJECTED (rev 3.37). Linked Jun 2026 at $705 / claimed 7680 Wh. Fails the weight-sanity rule below: 7680 Wh Γ· 48.9 kg = 157 Wh/kg, above the 120–150 band. Apples-to-apples, a genuine LiTime 560Ah (7168 Wh, slightly less capacity) weighs 55–60 kg (119–130 Wh/kg). Dumfume claims more Ah at 10–20% less weight β†’ real capacity β‰ˆ 470–500 Ah (~20–25% inflated). On honest capacity that's ~$116/kWh β€” no better than an established brand, with none of the support. (Dumfume's 314Ah tested clean on DIY Solar Forum; the 600Ah is a different story β€” eBay "AVOID THIS SELLER" + fake-review complaints.) Not a deal β€” an inflated label.

Candidates priced (Jun 2026):

BatteryPricekWhWeightWh/kg$/kWhNotes
2Γ— LiTime/Redodo ~300–314Ah ⭐~$950–1,2006.3–7.4~30 kg ea~125 βœ…~$150–190RECOMMENDED β€” redundant + each liftable β†’ fits Β§5.9 removable
LiTime 560Ah~$1,300–1,5007.1755–60 kg119–130 βœ…~$185–210single-unit ~7 kWh; reputable; heavy β†’ effectively fixed (alt)
LiTime 460Ah (Group 8D)~$1,1005.8939 kg~151 βœ…~$187reputable, US warehouse/support, 250A BMS; a bit under 7 kWh
SOK 314Ah~$9003.730 kg~122 βœ…~$243premium: Grade-A, self-heating, Victron CANBus; pricey
~~Dumfume 600Ah~~~~$705~~~~7.68~~48.9 kg157 ❌$92 claim / ~$116 realβ›” REJECTED β€” inflated Ah, fails weight check

Carputer-only baseline (superseded by the overland resize, kept for the record): Dumfume 314Ah $320 / 3.84 kWh / ~$83 Β· E-LekTech 440Ah $560 / 5.63 kWh / ~$99 Β· Goldenmate 400Ah $599 / 5.12 kWh / ~$117. Brand note: LiTime = AmpereTime = Power Queen (one owner); Redodo has the fewest reported QC issues of the budget brands.

Selection rules:

Decision (rev 3.37): Dumfume 600Ah REJECTED. Target = ~7 kWh overland, recommendation two ~300–314Ah packs (LiTime or Redodo) β€” redundant BMS + each ~30 kg stays liftable, so the Β§5.9 removable-bed concept survives. Alternative: single LiTime 560Ah (~7.2 kWh, reputable) IF the owner accepts a 55–60 kg, effectively-fixed pack (then Β§5.9's "removable" premise needs a note). Final pick still PENDING a measured-capacity review on the chosen units (the one non-negotiable check) + the cold-charge plan (Β§5.10 bench-balance, no charging <0Β°C).

5.9 Power System Layout β€” Charging, Combiner, Grounding, Wiring (rev 3.8)

Charging (two separate, voltage-following sources)

Combiner β€” removable bed battery (ESP32 contactor + pre-charge)

Combine the hood 100Ah + bed ~600Ah into one bank, automatically, fail-safe.

⚠️ rev 3.37 resize note: "440Ah" throughout Β§5.9 was the single-pack figure; the bed bank is now sized to ~7 kWh / ~600Ah (Β§5.8). The contactor (150–200A), trunk fuse (125A) and 4 AWG bed feed are sized to load current, not pack Ah, so they carry over unchanged. BUT the force-merge / separate-on-loss C-rate math below (and the "~90Ah usable / ~400Ah needed" figures) was computed for a single 440Ah pack β€” RECOMPUTE once the final config is locked: a single 560Ah β‰ˆ scale the numbers; two ~300Ah packs = re-topologize (likely each pack its own SB175 + fuse, paralleled on the bed bus bar, with combiner logic per pack). Do this when Β§5.8's "PENDING measured-capacity review" resolves.

            β”Œβ”€β”€β”€β”€β”€β”€β”€β”€[ CONTACTOR (150-200A, continuous-duty, NO=default OPEN) ]────────┐
HOUSE BUS ───  ESP32 closes only when voltages match                                    β”œβ”€β”€ BED 600Ah
            └──[ Bosch relay (from panel) ]──[ ~5Ξ© 25-50W resistor ]β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   (Anderson SB175)
                 PRE-CHARGE bypass: ESP32 closes this first β†’ resistor limits inrush β†’
                 banks equalize β†’ then close the contactor β†’ open pre-charge.

Layout β€” bed sub-bus-bars + dual trunk (rev 3.9)

BED                                              FRONT
[bed 600Ah]──[ESP32 contactor+precharge]──┐      β”Œβ”€β”€ 100Ah ── computer fuse/relay box
[inverter] ───────────────────────────────┼ BED ──   FRONT +/βˆ’ BUS BARS
[MPPT (solar)] β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ +/βˆ’ β”‚   (the STAR point; ONE chassis bond here)
                                  BUS BARS └─trunk +(fused BOTH ends)β”€β”˜
                                           └─trunk βˆ’(the bed↔front ground)β”€β”˜

Grounding β€” single-point / star (one chassis bond)

Connector (removable bed battery)

Anderson SB175 + handle accessory (the handle is the fix for "annoying to connect" β€” leverage). Or lever-action battery terminals (disconnect at the posts). Size 100A+ (inverter on the combined bank).

Plug-in behavior (rev 3.18 β€” sheet 6): plugging in is sparkless and automatic β€” the contactor is open, so the SB175 mates onto a dead circuit (only the ~110k ADC2 sense, ~0.1mA). The ESP32 sees pack voltage on ADC2 instantly, debounces ~5s, runs the pre-charge sequence β†’ combined in ~15-25s when the banks rest within ~0.3V (the common case), no user action (announce via MQTT/PWA; policy = auto-combine when rules pass, or notify-and-confirm). Pre-charge physics (rev 3.19 correction): the resistor fixes the caps (Ο„β‰ˆ50ms) and surface charge (seconds) β€” it can never close a real SoC gap (0.1-0.4A into 100-440Ah β‰ˆ nothing). So the close criterion is acceptable inrush, not equal banks: Ξ”V ≀ 0.3V β†’ close (~10-20A blip) Β· 0.3-0.7V + charge source β†’ close = managed merge (brief 20-50A into the low bank, ~0.1C, decays to charger rate) Β· > 0.7V β†’ stay isolated + alert, charge the bed first. Persistent Ξ”V after ~15s is information (a real SoC gap), not "not done yet."

FORCE-MERGE override (rev 3.20 β€” the "bed pack stored 6 months at 12.0V, leaving NOW" case): 12.0V resting β‰ˆ 0-5% SoC β†’ Ξ”V ~1.8V vs a charging front bank β†’ the >0.7V band refuses by default, correctly. The override: allowed ONLY with ignition ON + DC-DC active + explicit user confirm (PWA gate / override switch). Profile: ~100-120A for the first 1-2 min (the SoC cliff lifts the bed's voltage fast), then 30-60A sustained with the DC-DC backfilling 40A β€” ~0.25C into the 440Ah, brief ~1C off the 100Ah. Refuse below ~11V (damaged / BMS-tripped β†’ bench supply Β§5.10 only). What "keep it rare" actually means (rev 3.20a): the close event itself is cheap β€” contactors are make-rated for thousands of such cycles, the front bank's ~1C blip is in-spec, the DC-DC charging the bed while driving is the system's normal job. Keep force-merge rare for two other reasons: (1) the inrush is uncontrolled (protected by ratings headroom, not current regulation β€” a designed-routine deep merge would warrant a real current limiter), and (2) needing it often means the pack keeps sitting at 0-5% β€” and low-SoC storage is what actually harms LiFePO4 (calendar aging + BMS drain β†’ over-discharge/brick risk). Store at 50-60% and every reinstall is a normal-band merge β€” routine forever, no override.

SEPARATE-ON-CHARGE-LOSS rule (rev 3.21): at key-off / charge-source loss, if the bed is still below the flat band (rest < ~13.0V β€” an unfinished force-merge), the ESP32 OPENS the contactor. Otherwise paralleled banks must equalize: a ~95% front 100Ah bleeds 60-80Ah into a low bed overnight (15-25A tapering over ~10hr) until both sit ~20% β€” harmless to the batteries (charge moves, nothing is lost) but it silently empties the critical front reserve. Healthy banks (both flat-band, OCVs β‰ˆ equal) have negligible cross-current β†’ staying combined parked remains fine and intended. Re-merge is automatic when a charge source returns (morning solar counts). Reality check: the 100Ah can't "fill" a 440Ah (~90Ah usable vs ~400Ah needed) β€” the alternator does the filling; a 2hr drive β‰ˆ +80-100Ah β‰ˆ bed at 25-30% on arrival. Pre-checks: meter the SB175 pins (BMS may be in low-V disconnect = reads ~0V), and no charging below 0Β°C. Storage tip: store the bed pack at ~50-60% (rest ~13.2V) + quarterly top-up β€” and the 12.0V morning never happens. Chain order: battery + post β†’ MRBF fuse β†’ 275A rotary disconnect (red key, ~$12, at the pack) β†’ SB175 β†’ contactor stud A. The rotary gives a guaranteed-dead, key-out service lockout independent of software/contactor (welded-contactor or firmware-bug case). ⚠️ Unplug rule: SEPARATE FIRST (PWA / override switch / rotary OFF), then pull the SB175 β€” while combined, ADC2 reads bus voltage through the closed contactor, so the ESP32 cannot see a yank, and the connector would break load current (arc).

Wire / fuse / resistor table (copper; sizes + LOCATIONS)

Fuse rule: every positive is fused, near its source (at the bus bar, or at a battery's own + terminal). Negatives are NEVER fused β€” straight to the βˆ’ bus bar. A battery-to-battery interconnect (the trunk) is fused at BOTH ends.

RunWire (AWG)Fuse + WHERENotes
Trunk + (bed bus bar ↔ front bus bar)2 (1/0 if inverter runs off front)fuse BOTH ends β€” 125A (rev 3.20: not 100A/60A β€” the force-merge surge ~120A would nuisance-blow smaller)the only + path bed↔front; size to max current + low drop
Trunk βˆ’ (bed bus bar ↔ front bus bar)match the +no fusethe dedicated bed↔front ground
Front 100Ah β†’ front + bus barper main feedfuse at the battery + terminal (~100-150A)main battery fuse
Bed ~600Ah β†’ contactor β†’ bed + bus bar4 (2 for headroom)fuse at the bed battery + terminal (~100-150A)matched to contactor; Anderson SB175. (Two-pack option = one SB175 + fuse per pack, paralleled on the bed bus bar β€” see Β§5.9 resize note.)
Inverter + β†’ bed + bus barper inverter (2-4 for 800-1000W)fuse at the bed bus bar β€” per manual, ~100-150Afed locally by the bed battery
MPPT + β†’ bed + bus bar6-8fuse at the bed bus bar (~40A)~30A solar
DC-DC output β†’ front + bus bar6 (4 if long)fuse at the front bus bar (~50A)40A charger
DC-DC input ← 2nd lead-acid (starter side)6fuse at the starter battery (~50A)ign/V-sense
Computer fuse/relay box β†’ front + bus bar6-8fuse at the front bus bar (~40-60A)its own cable (star, not off the inverter)
Pre-charge path (Bosch relay β†’ resistor β†’ bed +)16-18small~5Ξ©, 25-50W resistor; bypass around the contactor
Frame ground bond (front βˆ’ bus bar β†’ frame)2-4 heavyno fuseONE solid clean-metal bond (the only chassis tie)
Relay/output triggers (DO β†’ coil)20-22 / solid Cat5β€”Β§6
Load wires (relay β†’ load)16 ≀5A / 14 long / 12 (18A bar)at the fuse box, per load (e.g. 7.5A on 16)Β§5.6
OptiPlex 12V→19V converter: 12V inper converter (~10A)~10A at the computer fuse boxthrough the ESP32 power-mgmt relay; + reverse-polarity diode
OptiPlex 12V→19V converter: 19V outper converter~7-10A inline at the converterto the 5080; hardwire (omit barrel)

OptiPlex power notes

  1. Free in software (primary) β€” disable BD PROCHOT / set RAPL via MSR on Linux (what ThrottleStop does on Windows).
  2. Harvest the genuine Dell adapter's ID chip β€” the owner has a real Dell PA-12 65W brick on hand (LA65NS2-01, output 19.5V / 3.34A / 65W). The center-pin 1-wire ID chip is parasitically powered β†’ the 5080 reads it even with the brick unplugged from AC. Splice that center wire into the internal feed so the board sees a genuine Dell ID. Clean and free since the brick is owned.
  3. ESP32 emulates the Dell 1-wire ID (backup, if no brick) β€” free, you own ESP32s.

5.10 Bench supply & LiFePO4 cell balancing


β€Ή 4. SYSTEM ARCHITECTURE β€” THREE TIERS6. ESP32 NODE NETWORK (Tier 0) β€Ί