✔ Inventory confirmed 8 Sep 2026
Mean Well HDR-60-12 · SSR-04 · E-stop NC mushroom · TOMZN DC breakers · Pi 4B + Waveshare 2-CH CAN HAT (optional, not in main DALA path) · JZK USB-RS485 dongle · LilyGo T-2CAN · WAGO connectors · Yazaki 36-pin harness
⚠ Still needed: 3× 120Ω resistors (CAN terminators: CAN-A LilyGo end, CAN-A FoxESS end, CAN-B LilyGo end — pack self-terminates at BMS end, no 4th needed)
③ MEAN WELL HDR-60-12
| Terminal | Wire | To |
| +V | Red 4mm2 | WAGO 12V bus |
| -V | Black 4mm2 | WAGO GND bus |
| PE | Grn/Yel dashed | Left rail to chassis earth |
② JZK USB-RS485 to FoxESS (Modbus RTU)
USB dongle on Pi USB port - NOT the Waveshare CAN HAT
| JZK terminal | Wire | FoxESS COM |
| A+ | Yellow/White | Pin 1 RS485-A |
| B- | Blue | Pin 2 RS485-B |
| GND | Black | Pin 3 GND |
/dev/ttyUSB1 - addr 247 (0xF7) - 9600 N81
④ LilyGo T-2CAN - DALA BMS gateway
| Pin | Wire | To |
| CAN-B H/L ✔ | White/Blue | Yazaki CAN-H/L Pack 1 ← LEAF battery BMS (corrected: was CAN-A) |
| CAN-A H/L ✔ | White/Blue | FoxESS BAT CAN port — direct, no HAT needed (T-2CAN already isolated) |
| IO21/IO48/IO17 ✔ | Orange | SSR-04 IN+ Ch1=IO21(row10,precharge) / Ch2=IO48(row9,+cont) / Ch3=IO17(row11,−cont) — UNDERSIDE 26-pin expansion header RIGHT column: row9=IO48=+POS, row10=IO21=PRE, row11=IO17=−NEG, row12=GND. Solder wires to pads or fit 2×13 2.54mm header + Dupont. |
| GND (contactor ref) | Black | SSR-04 IN− common — UNDERSIDE header RIGHT column row 12 (GND, immediately below IO17 NEG pad) |
| RS485 SH port (top) | White | 4-pin SH-1.0mm → RS485 TTL module → Pi /dev/ttyUSB1 → FoxESS Modbus (GPIO43=TX, GPIO44=RX) |
| USB (data + 5V pwr) | Orange dashed | Pi /dev/ttyUSB0 · LilyGo powered from Pi USB 5V |
⑤ SSR-04 - contactor coil switching
| Terminal | Wire | To |
| IN+ Ch1 (precharge) | Orange | LilyGo IO21 — underside 26-pin R.col row 10 |
| IN+ Ch2 (+cont) | Orange | LilyGo IO48 — underside 26-pin R.col row 9 |
| IN+ Ch3 (−cont) | Orange | LilyGo IO17 — underside 26-pin R.col row 11 |
| IN− (shared) | Black | LilyGo GND — underside 26-pin R.col row 12 |
| OUT Ch1 terminal A | Red | 12V+ from WAGO 12V bus |
| OUT Ch1 terminal B | Cyan | Pin 7 CT_PRE+ [Cyan] → all 3 Yazakis (daisy) |
| OUT Ch2 terminal A | Red | 12V+ from WAGO 12V bus |
| OUT Ch2 terminal B | Purple | Pin 15 CT_POS+ [Purple] → all 3 Yazakis (daisy) |
| OUT Ch3 terminal A | Red | 12V+ from WAGO 12V bus |
| OUT Ch3 terminal B | Orange | Pin 18 CT_NEG+ [Orange] → all 3 Yazakis (daisy) |
✔ No shared OUT−. Each channel is a relay contact: 12V on one terminal, coil+ on the other. Coil− (Pin 8 [Blue], Pin 16 [Green], Pin 19 [White]) go directly to GND bus — NOT through the SSR.
E-stop NC in series: WAGO 12V → E-stop → PIN1/IGN BUS → Yazaki Pin 1 [Red,BAT] AND Pin 2 [Yel/Grn,IGN] on all 3 packs. Both must drop simultaneously.
⑦ WAGO 12V / GND distribution
✔ DROK 12V→5V buck — NOT FITTED. Pi powered by PoE injector; LilyGo by Pi USB 5V.
| Bus | Feeds |
| 12V+ | SSR OUT+ (coil supply) · E-stop NC out → PIN1/IGN BUS → Yazaki Pin 1 [Red,BAT] + Pin 2 [Yel/Grn,IGN] on all 3 packs |
| GND | Yazaki Pin 8 [Blue] CT_PRE− · Pins 10/11 [Black] · Pin 16 [Green] CT_POS− · Pin 19 [White] CT_NEG− (all coil − wires go direct to GND — NOT through SSR) · GND bond → LilyGo for PoE↔12V ground reference. Pin 2 is NOT GND — it is IGN +12V. |
⑧ Yazaki 36-pin harness
| Pin | Wire | Source | Packs |
| Pin 1 BAT +12V [Red] | Red | PIN1/IGN BUS via E-stop NC | All 3 |
| Pin 2 IGN +12V [Yel/Grn] | Yel/Grn | PIN1/IGN BUS via E-stop NC (same as Pin 1) — NOT GND | All 3 |
| Pin 7 CT_PRE+ [Cyan] | Cyan | SSR Ch1 OUT [IO21] | All 3 |
| Pin 8 CT_PRE− [Blue] | Blue | WAGO GND bus | All 3 |
| Pins 10/11 GND [Black] | Black | WAGO GND bus | All 3 |
| Pin 15 CT_POS+ [Purple] | Purple | SSR Ch2 OUT [IO48] | All 3 |
| Pin 16 CT_POS− [Green] | Green | WAGO GND bus | All 3 |
| Pin 18 CT_NEG+ [Orange] | Orange | SSR Ch3 OUT [IO17] | All 3 |
| Pin 19 CT_NEG− [White] | White | WAGO GND bus | All 3 |
| Pin 4 CANL [Grey] | Grey | LilyGo CAN-B L | Pack 1 only |
| Pin 5 CANH [Brown] | Brown | LilyGo CAN-B H | Pack 1 only |
All other pins: DO NOT CONNECT. Pins verified from physical custom cable map Sep 2026. Packs 2/3 CANL/CANH (Pins 4/5) may optionally connect to Pi Waveshare Ch1/Ch2 for monitoring — see section below.
① Pi 4B + ⑥ Waveshare 2-CH Isolated CAN HAT (optional Pack 2/3 monitor)
✔ Waveshare 2-CH Isolated CAN HAT: NOT in DALA path. Connects to Pi GPIO header only. Used to monitor Pack 2 and Pack 3 CAN independently — hardware_bridge.py parses raw BMS CAN frames. Waveshare is optocoupler-isolated so electrically safe.
✔ Pi 4B powered via PoE injector → RJ45 ethernet (not from 12V bus)
⚠ CAN termination: LilyGo CAN-B 120Ω at LilyGo end. LilyGo CAN-A 120Ω at LilyGo end + 120Ω at FoxESS end. Waveshare Ch1/Ch2 120Ω at Pi end (each channel — BMS provides far end). Do NOT bridge Waveshare into LilyGo or FoxESS signal path.
| Channel | Wire | To | Note |
| Ch1 (CAN0) H/L | Grey/Brown | Pack 2 Yazaki Pin 4 CANL [Grey] / Pin 5 CANH [Brown] | Optional — Pack 2 monitoring. 120Ω at Pi end. |
| Ch2 (CAN1) H/L | Grey/Brown | Pack 3 Yazaki Pin 4 CANL [Grey] / Pin 5 CANH [Brown] | Optional — Pack 3 monitoring. 120Ω at Pi end. |
dtoverlay=mcp2515-can0,oscillator=16000000,interrupt=25
dtoverlay=mcp2515-can1,oscillator=16000000,interrupt=24
ip link set can0 up type can bitrate 500000