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.
| Tier | Load | Draw | Energy/day | Source |
|---|---|---|---|---|
| Driving | Everything awake (OptiPlex ~80W + cams + NVR + LLM + ESP32 + switch) | ~100-150W | β | Alternator (+DC-DC charger) |
| Short park | OptiPlex awake (Pi + few cams) OR hibernating | ~5-100W | 10-200 Ah | House battery (overnight OK) |
| Long park | OptiPlex hibernating; ESP32 layer only (2 cams optional) | ~2-15W | ~5-30 Ah | Solar (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):
| State | What | Wake | Draw (at DC input) |
|---|---|---|---|
| S0 on/idle | running | instant | ~10-20W idle, ~35W+ load |
| ~~S1 / S2~~ | obsolete, unused | β | n/a |
| S3 suspend-to-RAM | RAM alive, rest off | ~2-5s | ~1-3W |
| S4 hibernate | RAMβdisk, near-off | ~15-25s | ~0.5-2W |
| S5 off | cold, 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.
- β οΈ The 3am maintenance wake does NOT count as a "user S0 session" β otherwise it resets the 24hr storage timer every night and the truck never reaches deep storage. Only ignition / you-returned wakes reset that timer.
- Battery-gated: skip the 3am wake if the house bank is low (don't spend ~3-9Wh on housekeeping when short β matters on thin winter solar). LVD is the hard backstop.
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.)
- Reverse cam NEVER on the OptiPlex path β GreenYi β radio is instant; the OptiPlex's ~10-25s resume is irrelevant to backing up.
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):
- O1 β OptiPlex converter power β Electronics-Salon MD-D262T/12V passive latching DPDT (NOT in the Bosch panel; TE/Schrack RT424F12, zero standby. V+/S/R active-low β 2 DOs; Switch X = converter 12V, Switch Y = read-back to DI7. Holds through reboot/OTA, true 0W cut β Β§6.3)
- O2 β accessories 15-min timer cut β Bosch relay
- O3 β OptiPlex power-btn pulse (DO DIRECT; cold-boot / hard reboot)
- O4 β camera tier (Switch B) power β Bosch relay (cut when asleep)
- O5 β bed contactor coil β Bosch relay (Β§5.9 combiner; sheet 6)
- O6 β pre-charge relay coil (DO direct β Bosch coil <500mA; sheet 6)
- O7-O8 β spare (compressor DROPPED from the build β rev 3.17; runs standalone outside the carputer)
- Lighting DOs live on the RS485 Modbus module (Β§6.1/Β§6.2): M-DO1 rock Β· M-DO2 KC-bar trigger Β· M-DO3 underbody Β· M-DO4 pods Β· M-DO5 amber/marker Β· M-DO6 master isolation
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):
- FRONT board β KC front-bumper light rack (forward-facing). On-road interlock applies (inhibit above ~5 mph on-road, #4 below) + the diode-OR'd manual KC switch fail-safe (#2 below). Plus any front rock/underbody.
- BED board β tent/rack CAMP lights (the 3+ sets, rearward/hangout). No on-road interlock (camp lights, run anytime); local tailgate switch control.
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):
| Load | on 100Ah | on 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):
| Battery | Price | kWh | Weight | Wh/kg | $/kWh | Notes |
|---|---|---|---|---|---|---|
| 2Γ LiTime/Redodo ~300β314Ah β | ~$950β1,200 | 6.3β7.4 | ~30 kg ea | ~125 β | ~$150β190 | RECOMMENDED β redundant + each liftable β fits Β§5.9 removable |
| LiTime 560Ah | ~$1,300β1,500 | 7.17 | 55β60 kg | 119β130 β | ~$185β210 | single-unit ~7 kWh; reputable; heavy β effectively fixed (alt) |
| LiTime 460Ah (Group 8D) | ~$1,100 | 5.89 | 39 kg | ~151 β | ~$187 | reputable, US warehouse/support, 250A BMS; a bit under 7 kWh |
| SOK 314Ah | ~$900 | 3.7 | 30 kg | ~122 β | ~$243 | premium: Grade-A, self-heating, Victron CANBus; pricey |
| ~~Dumfume 600Ah~~ | ~~$705~~ | ~~7.68~~ | 48.9 kg | 157 β | $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:
- $/kWh is the real comparison, not sticker price.
- Weight = capacity sanity check: large packs run ~120-150 Wh/kg; suspiciously light = inflated Ah. This rule just killed the Dumfume 600Ah (157 Wh/kg). Calibration: genuine LiTime 560Ah = 119β130 Wh/kg; LiTime 460Ah 8D = ~151 (tightly-packed = top of band). Anything above ~150 on a big pack = treat as inflated until a measured-capacity test proves otherwise.
- Vet reviews for measured-capacity tests + BMS reliability β unknown Amazon brands inflate Ah and ship weak BMSs. This is the single most important check.
- Sizing (rev 3.37): 3.84 kWh is plenty for the carputer alone (~38h awake at ~100W / weeks parked at ~5W + 400W solar). the owner is now sizing for overland β ~7 kWh (fridge/camp/tent for days) β that's the deliberate "serious overland house power" case, not over-buying. Note the 400W solar / EPEVER MPPT and the Β§5.9 combiner are unchanged; only the bank capacity grows.
- App-BMS is mostly redundant β you own the WonVon BT shunt and the carputer reads pack voltage already. And catching a drifting cell on a sealed pack is mostly non-actionable (warning, not repair β you replace the pack, not the cell). Not a reason to pick an unknown brand. (True cell-level serviceability = a DIY pack with bolted cells + JBD/Overkill smart BMS β a bigger project.)
- Mount COOL (cab/bed), not under-hood; no cheap LiFePO4 charges below 0Β°C β plan for winter.
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)
- Solar β owned EPEVER 30A MPPT (kept). Alternator β VEVOR 40A alternator-only DC-DC (~$104, the 34-review line β NOT the combined-MPPT VEVOR, which does solar-OR-alternator, not additive).
- Why separate, not the combined unit: two independent chargers add up (~70A driving + sunny); the combined VEVOR can only run one input at a time (solar priority).
- DC-DC input taps a 2nd lead-acid on the STARTER side (a winch buffer β buffers the 400A+ winch pulls). The alternator charges that battery; the DC-DC's ignition/voltage-sense stops it draining the lead-acid when parked. β valid (the DC-DC sees the same alternator voltage there).
- Set BOTH chargers to the same LiFePO4 profile (14.4V abs / 13.6V float) so they share cleanly. Optional longevity: set a ~90% daily target + occasional full charge for cell balancing; mount the big pack cool.
- VSR / dual-battery isolator: NOT used. The DC-DC does alternator-charging properly for LiFePO4 (right profile + current limit + isolation); a VSR is the inferior way and can't combine two house batteries (it drops the aux on discharge).
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.
- Switch the POSITIVE side (negatives are common β switching the negative wouldn't isolate). Contactor + pre-charge both in the positive.
- Coil driver: ESP32 DO β a Bosch relay β contactor coil (coil exceeds the DO's 500mA).
- Voltage sensing (how it knows ΞV) β rev 3.30: use the Modbus RTU DC Monitor (SKU 33931, ~$27). 4-ch, 16-bit, 0-36V direct over RS485 β front bank β ch1, bed stud A β ch2 (+2 spare). This closes the open ADC-pin question (read both banks over the same Modbus bus, no bare ADC pin, no DIY divider). β οΈ Its current channels are only Β±8A β useless for the 100A+ banks, so keep the WonVon shunt for main current; the DC Monitor is voltage-only here (its current is for <8A loads if ever wanted). Needs a common ground (the star ground satisfies this). Modbus latency is fine for the second-scale combiner sequence (Β§6.2). (Superseded the earlier DIYmall-0-25V-on-a-bare-ADC-pin plan β cleaner, higher-res, and no ADC-pin dependency.) The board's DI range is 5-36V, so the DI7 read-back (12V from the DPDT pole) and all 12V vehicle signals still work direct, no level-shift.
- Fail-safe: NO contactor defaults OPEN β ESP32 dead = bed battery isolated.
- Deeply-depleted bed battery: don't dump the house into it β ESP32 combines it only while a charge source is active (solar is always installed), so the source refills it. Close/equal voltages β straight pre-charge + combine.
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)ββ
- Bed gets its own +/β bus bars β bed battery (via contactor), inverter, MPPT all land there locally. One heavy + trunk and one heavy β trunk run to the front bus bars (the star point).
- Solves MPPT-no-battery: the MPPT always reaches the front 100Ah through the trunk; only the bed battery is removable (behind its contactor). Inverter fed locally by the bed battery (short heavy leads).
- Star, not daisy-chained: the inverter and the computer fuse-box each get their own cable to the + bus bar β never tap the computer off the inverter's cable. The low-ESR LiFePO4 at the bus bar clamps the voltage, so the inverter can't sag/noise the computer.
Grounding β single-point / star (one chassis bond)
- The β trunk is the dedicated bedβfront ground. ONE deliberate heavy bond, front β bus bar β frame β the only chassis tie (references CAN, the ignition/door/reverse DI wires, sensors, GreenYi to vehicle ground).
- Do NOT also chassis-bond the bed β two paths bedβfront (the trunk + the chassis) = a ground loop: circulating chassis currents β audio whine + CAN errors (the #1 noise cause). One bond, at the front, only.
- Never chassis-return the high-current stuff β all high-current negatives go to a bus bar with dedicated cable, never through the chassis. Do NOT chassis-ground the inverter.
- Wire = pure COPPER for all power runs. CCA (copper-clad aluminum) has ~40% more resistance + lower real ampacity + corrodes at terminals β if you must use it, upsize 1-2 gauges and fuse to its actual ampacity, not the copper-gauge number.
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.
| Run | Wire (AWG) | Fuse + WHERE | Notes |
|---|---|---|---|
| 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 fuse | the dedicated bedβfront ground |
| Front 100Ah β front + bus bar | per main feed | fuse at the battery + terminal (~100-150A) | main battery fuse |
| Bed ~600Ah β contactor β bed + bus bar | 4 (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 bar | per inverter (2-4 for 800-1000W) | fuse at the bed bus bar β per manual, ~100-150A | fed locally by the bed battery |
| MPPT + β bed + bus bar | 6-8 | fuse at the bed bus bar (~40A) | ~30A solar |
| DC-DC output β front + bus bar | 6 (4 if long) | fuse at the front bus bar (~50A) | 40A charger |
| DC-DC input β 2nd lead-acid (starter side) | 6 | fuse at the starter battery (~50A) | ign/V-sense |
| Computer fuse/relay box β front + bus bar | 6-8 | fuse at the front bus bar (~40-60A) | its own cable (star, not off the inverter) |
| Pre-charge path (Bosch relay β resistor β bed +) | 16-18 | small | ~5Ξ©, 25-50W resistor; bypass around the contactor |
| Frame ground bond (front β bus bar β frame) | 2-4 heavy | no fuse | ONE 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 in | per converter (~10A) | ~10A at the computer fuse box | through the ESP32 power-mgmt relay; + reverse-polarity diode |
| OptiPlex 12Vβ19V converter: 19V out | per converter | ~7-10A inline at the converter | to the 5080; hardwire (omit barrel) |
OptiPlex power notes
- Owned 12Vβ19V 10A converter β hardwire the converter's 19V output to the board's + and β DC-input pads INTERNALLY (open the 5080, two wires, omit the barrel jack for vibration). β οΈ Verify polarity against the genuine Dell brick's tip with a meter before connecting. Add an inline fuse + reverse-polarity diode, and feed the converter's 12V input through the ESP32 power-mgmt relay (O1, so deep-storage can cut it). 19V is in tolerance (Dell spec 19.5V; trim to 19.5 if adjustable).
- Dell no-ID 800MHz throttle (real on OptiPlex Micros). Fix options, cheapest first:
- Free in software (primary) β disable BD PROCHOT / set RAPL via MSR on Linux (what ThrottleStop does on Windows).
- 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. - ESP32 emulates the Dell 1-wire ID (backup, if no brick) β free, you own ESP32s.
- 65W ID caps the CPU envelope at 65W. That's enough for a snappy bursty local SLM (heavy work β Fireworks). To "go higher on watts" you'd need a 90W/130W Dell ID, not a higher voltage. Then raise the RAPL power limit β fine thermally because the SLM is bursty.
5.10 Bench supply & LiFePO4 cell balancing
- NICE-POWER 30V / 10A adjustable bench supply (~$60) β self-contained (no USB-PD trigger needed, unlike the DPS-150). Used to bench-balance the big LiFePO4 pack: set 14.4V boost and HOLD it (NOT float) so the BMS keeps all cells at the top long enough to passive-balance β leaving it a week is harmless. Do this on a new pack and occasionally after.
- β οΈ The owned wheeled lead-acid charger is for the lead-acid starter + winch-buffer batteries ONLY. It has no lithium mode, and its desulfation/equalize pulses damage LiFePO4. Never put it on the lithium packs.