Readiness report
Battery-Emulator Solar Storage Bridge · 2026-09-04 00:05 · complete · 18 searches, 13 pages fetched
Cybersecurity — software & network: Do not place on an open network · 4 findings
Details in the Cybersecurity section of the report below.
Readiness: Battery-Emulator Solar Storage Bridge
Verdict: Ready with caveats · 2026-09-03 · est. parts cost $58–$103 (one host board plus the commodity support parts; excludes the EV pack, the inverter, and the high-voltage DC cabling, which could not be priced to specification) Cybersecurity — software & network: Do not place on an open network
This is the cold check for this lab — there is no previous report, so everything below establishes the baseline for future drift measurement. The lab is buildable today. It is designed around six alternative host boards and needs only one of them; five of the six are purchasable right now between $11.86 and $39.90, and both CAN controller ICs are Active and stocked at several authorized distributors. Three things keep it off a clean "Ready". The exact CAN-FD controller ordering code the lab's materials name, MCP2518FD-E/SL, is not listed by DigiKey or by any ECIA-authorized distributor, so it has to be ordered as MCP2517FD-H/SL (which the lab's own materials also name) or as MCP2518FDT-E/SL. The high-voltage DC traction cable is the one safety-critical line, and none of the products found this run states the ≥ 600 V DC rating the lab requires. And the relay module that drives the battery contactors is sold as a 5 V board whose ability to trigger from the ESP32's 3.3 V logic was not confirmed. None of these is a dead end — each is a matter of buying the right variant.
Action required
| Part | Problem | Recommended action |
|---|---|---|
| Microchip MCP2518FD-E/SL (CAN-FD controller) | Not listed by DigiKey, and the ECIA authorized-distributor check found no authorized distributor carrying this exact ordering code. The MCP2518FD-H/SL and MCP2517FD-E/SL codes came back the same way. | Order MCP2517FD-H/SL at $2.84 — the lab's own materials name it as the alternative and it is Active with stock at five distributors — or MCP2518FDT-E/SL at $1.96. See Substitutes. |
| High-voltage DC traction interconnect cabling | The lab requires ≥ 600 V DC insulation for a 300–450 V pack at 50–125 A. Every product found this run is automotive or car-audio 4 AWG cable, and not one listing states a ≥ 600 V DC rating. | Do not buy from the shopping results below. Specify EV or photovoltaic DC cable rated ≥ 600 V DC (1000 V DC is the usual grade) to your local electrical code, and have the high-voltage side installed by a licensed person. |
| BECom ESP32-S3 custom board | Not sold as a finished product. The project wiki states plainly that boards must be fabricated and assembled from the open-source design. | Use one of the five commercial boards instead, or fabricate from the KiCad project, schematic PDF and footprint libraries published under GPL-3.0. |
| Espressif ESP32-DevKitC (ESP32-DEVKITC-32E) | Active and priced at $10.00 at DigiKey, but DigiKey has no available quantity today. | Order from Mouser instead — the ECIA check found 2,640 units at $10.20. Any standard ESP32-WROOM-32 board with TWAI CAN GPIOs also satisfies the lab's stated latitude. |
Cybersecurity — software & network
Do not place on an open network — The device ships with a published default Wi-Fi password and serves its setup page and over-the-air firmware updater behind no authentication the sources record, on hardware that switches a high-voltage traction pack.
| Component | Version | How known | Support status |
|---|---|---|---|
| pioarduino platform-espressif32 | 55.03.311 | read from project (pinned in the fetched platformio.ini, line 18: platform = https://github.com/pioarduino/platform-espressif32/releases/download/55.03.311/platform-espressif32.zip) | — |
| Arduino core for ESP32 (framework-arduinoespressif32) | not determined | not determined (bundled transitively inside platform-espressif32 55.03.311; no version string for the core itself appears in any file fetched this run) | — |
| ESPAsyncWebServer (ESP32Async) | not determined | unpinned (platformio.ini declares lib_deps twice (lines 58 and 68, [common_esp32] and [common_esp32s3]) and both are empty, so PlatformIO resolves whatever version is current at build time) | — |
| AsyncTCP (ESP32Async) | not determined | unpinned (platformio.ini declares lib_deps twice (lines 58 and 68, [common_esp32] and [common_esp32s3]) and both are empty, so PlatformIO resolves whatever version is current at build time) | — |
| ElegantOTA (ayushsharma82) | not determined | unpinned (platformio.ini declares lib_deps twice (lines 58 and 68, [common_esp32] and [common_esp32s3]) and both are empty, so PlatformIO resolves whatever version is current at build time) | — |
| ArduinoJson (bblanchon) | not determined | unpinned (platformio.ini declares lib_deps twice (lines 58 and 68, [common_esp32] and [common_esp32s3]) and both are empty, so PlatformIO resolves whatever version is current at build time) | — |
| eModbus (eModbus) | not determined | unpinned (platformio.ini declares lib_deps twice (lines 58 and 68, [common_esp32] and [common_esp32s3]) and both are empty, so PlatformIO resolves whatever version is current at build time) | — |
| Adafruit_NeoPixel (adafruit) | not determined | unpinned (platformio.ini declares lib_deps twice (lines 58 and 68, [common_esp32] and [common_esp32s3]) and both are empty, so PlatformIO resolves whatever version is current at build time) | — |
| acan-esp32 (pierremolinaro) | not determined | unpinned (platformio.ini declares lib_deps twice (lines 58 and 68, [common_esp32] and [common_esp32s3]) and both are empty, so PlatformIO resolves whatever version is current at build time) | — |
| acan2517FD (pierremolinaro) | not determined | unpinned (platformio.ini declares lib_deps twice (lines 58 and 68, [common_esp32] and [common_esp32s3]) and both are empty, so PlatformIO resolves whatever version is current at build time) | — |
| Battery-Emulator firmware (the lab's own application) | not determined | not determined (the repository ships no version file and platformio.ini carries no firmware version; the GitHub release badge in README.md is a badge image, not a pinned version) | — |
| tools/identify_build.py (PlatformIO pre-build script) | not determined | not determined (referenced by platformio.ini as extra_scripts = pre:tools/identify_build.py; the script itself was not fetched) | — |
| Component | Finding | Severity | Fix available? |
|---|---|---|---|
| Battery-Emulator firmware (Wi-Fi access point) | The board brings up its own Wi-Fi network with a password that is printed in the project's public README, so anyone in radio range who has read that page can join it. | posture | Mitigation only — change the access-point password (and ideally the SSID) on the setup page before the board is powered up anywhere students or the public can reach it. |
| ESPAsyncWebServer + ElegantOTA (setup page and firmware update) | The HTTP setup page and the ElegantOTA firmware-update endpoint are served on that same access point, and the sources record no login or authentication step in front of either, so joining the network is the only barrier between an outsider and the settings that drive the battery contactors. | posture | Mitigation only — keep the device on an isolated network segment of its own, change the default access-point password, and raise it with campus IT before connecting it to any shared or campus network. |
| Firmware install path (BE-Web-Installer) | The documented way to install the firmware is to open a hosted web installer page and let it flash a prebuilt binary onto the board, so what actually lands on the device is whatever that page serves on the day. | posture | Mitigation only — build and flash from source with PlatformIO from the pinned platform release, or check the release the installer serves against the project's own GitHub releases before flashing. |
| Firmware library dependencies (platformio.ini) | dependencies unpinned: 8 of 8 in platformio.ini — every runtime library, including the web server, the async TCP stack and the OTA updater, is left unpinned, so two builds a month apart can ship different library code and neither has a checkable security state. | posture | Mitigation only — pin each library to a version or commit in lib_deps and rebuild from that pin, so a build is reproducible and can be re-checked later. |
What this means for your lab
Treat this board as an untrusted device on your network until you have changed its settings. Out of the box it creates its own Wi-Fi network called Battery-Emulator with the password 123456789, and that password is printed in the project's public README — so anyone close enough to see the network can join it. Once joined, they reach the same web setup page you use, and the same over-the-air update page, and nothing in the project's documentation describes a login in front of either. On a bench that means someone could change how the bridge talks to the battery and the inverter, or replace its firmware outright, on a device whose job is closing contactors on a 300-450 V battery pack. Before you power it up in a shared space: change the access-point password on the setup page, keep the board on its own isolated network segment rather than the campus network, and talk to campus IT before connecting it to anything shared. Two things are genuinely unknown rather than fine: none of the firmware's libraries is pinned to a version, so no one can say which library code a given build contains, and Arduino libraries have no public vulnerability database, so 'no known issues' could not be established either way.
Not checked
- ESPAsyncWebServer, AsyncTCP, ElegantOTA, ArduinoJson, eModbus, Adafruit_NeoPixel, acan-esp32, acan2517FD: Unpinned in platformio.ini, so no version exists to check; and the Arduino/PlatformIO library ecosystem has no vulnerability database in OSV, so even a pinned version could not be looked up. Absence of an advisory here is not evidence of safety.
- pioarduino platform-espressif32 55.03.311: Version is pinned and was read from platformio.ini, but the toolchain ships as a vendor release archive with no entry in OSV and no product on endoflife.date, so there is no advisory or support-status source to check it against.
- Arduino core for ESP32 (framework-arduinoespressif32): Version not determined — it is pulled in transitively by the platform archive and no fetched file names it.
- Battery-Emulator firmware itself: Source-only project with no advisory database; no release version was determined.
- tools/identify_build.py: Local pre-build script referenced by platformio.ini; missing from the lab's uploaded materials and not fetched this run.
- MQTT client (broker, port, credentials): The sources state no broker address, no port and no credentials, so there was nothing to check.
- Web configuration server listening port: Not stated in the sources; port 80 is the snapshot's assumption, not an observation.
- BE-Web-Installer hosted page and the firmware image it serves: The page was not fetched this run and the binary it distributes was not examined.
Parts
| Part | Spec/Package | Status | Stock | Price | Source |
|---|---|---|---|---|---|
| LilyGO T-CAN485 ESP32 Development Board | ESP32, onboard CAN + RS485, 5–12 V DC or USB, TF slot | readily available | vendor stock not established | $11.86 | Lilygo direct; also tindie $12.85, AliExpress $15.66 |
| Waveshare ESP32-S3-RS485-CAN Development Board | ESP32-S3, isolated RS485 + isolated CAN, 7–36 V DC or USB-C (confirmed on the vendor page) | readily available | not stated | $23.82 | AliExpress; eBay (devkits) $26.02 |
| LilyGO T-2CAN ESP32-S3 Dual-CAN Development Board | ESP32-S3, 16 MB flash / 8 MB PSRAM, dual CAN, USB-C | readily available | vendor stock not established | $24.36 | Lilygo direct; OpenELAB $37.14 |
| DFRobot Edge101 Development Board (DFR0886) | Industrial ESP32, isolated RS485 + CAN + Ethernet, 9–26.4 V DC, chassis mount | readily available (thin stock) | 29 (DigiKey); Arrow 24, Mouser 2 | $39.90 | DigiKey; Arrow $44.14, Mouser $57.50 |
| Espressif ESP32 DevKit (ESP32-DEVKITC-32E) | ESP32-WROOM-32E, 4 MB flash, 2.54 mm DIP module form factor | available, but out of stock at DigiKey | 0 (DigiKey); Mouser 2,640 | $10.00 | DigiKey listing; buy from Mouser at $10.20 |
| BECom ESP32-S3 Custom Board | Purpose-built ESP32-S3 board: dual CAN-FD, contactor drivers, isolated inverter comms, 12 V native supply | hard to obtain — not sold assembled | — | — | Design files, GPL-3.0; fabricate and assemble yourself |
| Stark ESP32 Custom Board (Stark CMR v2) | DIN-rail ESP32 module, three comms buses, four switched DC outputs, CE certified | available commercially; price not checked | not stated | not checked | shop.redispo.se — read the price off the vendor page |
| External CAN-FD Controller — Microchip MCP2518FD-E/SL | SOIC-14, 3.3 V SPI to ESP32 | not obtainable under this ordering code | 0 | — | Not listed at DigiKey; no ECIA-authorized distributor carries this exact code. See Substitutes. |
| External CAN-FD Controller — Microchip MCP2517FD-H/SL (the lab's stated alternative) | 14-SOIC (0.154", 3.90 mm), supply 2.7–5.5 V, −40 °C to 150 °C | readily available | 467 (DigiKey); Mouser 13,494, Newark 10,053 | $2.84 | DigiKey; Newark $2.78, Mouser $2.82 |
| External CAN Controller — Microchip MCP2515-I/SO | 18-SOIC (0.295", 7.50 mm), supply 2.7–5.5 V, −40 °C to 85 °C | readily available | 6,405 (DigiKey); Newark 20,039, Mouser 12,811 | $2.44 | DigiKey; Mouser $2.44, Newark $2.53 |
| Addressable RGB Status LED — WS2812B-B | SMD 5050, 3.3–5 V, 800 kHz single-wire | exact part not distributor-stocked; retail equivalents plentiful | not stated | $6.60 | eBay 5 m WS2812B strip; 12-bit WS2812B ring $11.59. Only one LED is needed. |
| MicroSD Memory Card | 4–32 GB, Class 10 / UHS-1, FAT32, 3.3 V SPI/SDMMC | readily available | not stated | $6.50 | eBay (SanDisk Ultra); Kingston $7.00, Walmart $9.99 |
| Low-Voltage Auxiliary DC Power Supply | 5 V, or 12/24 V DC for terminal-block boards; ≥ 10 W | available; confirm the wattage before ordering | not stated | $26.10 | Mouser, MEAN WELL NDR-120-12 (12 V DIN rail). The USB-powered board paths need no separate supply at all. |
| High-Voltage DC Traction Interconnect Cabling | 16–35 mm² / 4–2 AWG, ≥ 600 V DC, ≥ 50–125 A continuous | not verified — no listing states the required voltage rating | not stated | not checked to specification | Shopping returned only automotive 4 AWG cable (from $19.95/100 ft). See Action required. |
| EV Battery Contactor Relay Interface Circuit | 2–3 channel optocoupled relay or MOSFET board, 3.3 V GPIO input, switches 12 V coils at 1–4 A inrush | readily available; trigger voltage not verified | not stated | $6.99 | Micro Center (Inland 4-channel); eBay $7.27, ShillehTek $7.50 |
Substitutes
| For part | Substitute | Differences | Verified | Judgment |
|---|---|---|---|---|
| MCP2518FD-E/SL | MCP2517FD-H/SL — $2.84, 467 at DigiKey | Not really a substitute: it is the second part number the lab's own materials name for this line. 14-SOIC (0.154", 3.90 mm) matching the required SOIC-14; supply 2.7–5.5 V, which contains the 3.3 V logic rail; −40 °C to 150 °C. | verified: package/case and package width (DigiKey parametrics), supply range vs the lab's 3.3 V rail (DigiKey parametrics), Active lifecycle with stock at five distributors (DigiKey + ECIA). not verified: register-level compatibility with the acan2517FD driver — taken from the lab's own materials, not from a datasheet fetched this run. | Acceptable — the simplest fix, and the one the lab already sanctions. |
| MCP2518FD-E/SL | MCP2518FDT-E/SL — $1.96, 19,352 at DigiKey | Same 14-SOIC (0.154", 3.90 mm) package and width, same 2.7–5.5 V supply range, same −40 °C to 125 °C grade. Cheaper than the MCP2517FD-H/SL and far deeper stock. | verified: package/case and package width (DigiKey parametrics), supply range 2.7–5.5 V vs the 3.3 V rail (DigiKey parametrics), Active lifecycle with stock at five distributors (DigiKey + ECIA). assumed, not verified: that the "T" in the ordering code denotes tape-and-reel packaging of the same die — nothing in the evidence states what that infix encodes. | Acceptable, with that one assumption to confirm on the datasheet. |
| MCP2518FD-E/SL | MCP2518FDT-H/SL — $2.03 | Identical 14-SOIC package and 2.7–5.5 V supply range; temperature grade −40 °C to 150 °C exceeds the −40 °C to 125 °C of the -E part, which is acceptable. DigiKey shows no available quantity; stock sits at Master Electronics and Onlinecomponents (6,600 each), Newark (2,928) and Mouser (2,083). | verified: package/case and width, supply range, wider temperature range (all DigiKey parametrics); stock at four authorized distributors (ECIA). assumed, not verified: the "T" infix, as above, and that "H" denotes only the high-temperature grade — inferred from the parametric range, not a suffix table. | Acceptable, second choice — stock is thinner and more scattered. |
| MCP2518FD-E/SL | MCP2518FDT-E/SLVAO — $2.07, 1,421 at DigiKey | Same 14-SOIC (0.154", 3.90 mm), same 2.7–5.5 V supply range, same −40 °C to 125 °C grade as the -E/SL. | verified: package/case and width, supply range (DigiKey parametrics). not verified: what the "VAO" variant code encodes — the evidence does not say. | Plausible, unverified — prefer MCP2518FDT-E/SL unless you confirm what VAO means on the datasheet. |
| WS2812B-B | Retail WS2812B 5050 strip or ring — from $6.60 | The lab needs one LED and allows any WS2812B, WS2813 or SK6812 800 kHz single-wire part, so a strip or ring is over-supply at a trivial price. Watch out: two products returned by the same search are 12 V "CS8812" strips, which are a different controller at a different supply voltage and do not meet the 3.3–5 V requirement. | not verified: nothing beyond the listing titles. No product page was fetched, because Google Shopping links are search redirects and retail pages block direct fetching. | Plausible, unverified — confirm the listing actually says WS2812B, WS2813 or SK6812 before ordering, not CS8812. |
| BECom ESP32-S3 Custom Board | Any of the five commercial host boards above | Not a component swap but a build-target change, which is the lab's own design: each board has its own PlatformIO environment and pin map. The BECom's integrated contactor drivers and 12 V native supply have to be provided externally on the commercial boards. | verified: that BECom is not sold assembled and that its design files are published under GPL-3.0 (project wiki, fetched this run). not verified: nothing about the electrical equivalence of the alternatives — the lab's own firmware targets define it. | Acceptable — pick a commercial board unless you specifically want to fabricate the BECom. |
Verify any substitute against its own datasheet before ordering — the checks above are only as good as the parametric data the distributors publish.
Other dependencies
- Fabrication — not required for the five commercial-off-the-shelf board paths. For the BECom target, the KiCad project, schematic PDF and footprint libraries are published under GPL-3.0 at github.com/rjsc/BECom, confirmed on the project wiki page fetched this run. This updates the lab's own materials, which state the design files are unavailable — they are missing from the uploaded materials but exist upstream. Layer count, copper weight and board outline were not checked; the KiCad project itself was not opened. For the Stark target no design files are published, because it is sold assembled.
- Project documentation wiki (dalathegreat.github.io/Battery-Emulator-Wiki) — live. Three pages were fetched successfully this run.
- Stark hardware vendor (shop.redispo.se) — live; the Stark CMR v2 product page was fetched successfully. The vendor notes there that it provides no software support for the board.
- Browser-based installation web app (dalathegreat.github.io/BE-Web-Installer) — not checked; the page was not fetched this run.
- External protocol-documentation sources — not checked. The lab's protocol translations were reverse-engineered from twelve external references: pelle8/inverter_resources, burra/byd_battery, flodorn/TeslaBMSV2, dalathegreat/leaf_can_bus_messages, rand12345/solax_can_bus, Tom-evnut/BMWI3BMS, FozzieUK/FoxESS-Canbus-Protocol, maciek16c/hyundai-santa-fe-phev-battery, ljames28/Renault-Zoe-PH2-ZE50-Canbus-LBC-Information, openvehicles/Open-Vehicle-Monitoring-System-3, an EEVBlog forum thread on the Pylontech SC0500 protocol, and a Google Docs spreadsheet. None was fetched this run.
Watch list
- The MCP2518FD ordering codes. Three of the four codes checked (MCP2518FD-E/SL, MCP2518FD-H/SL, MCP2517FD-E/SL) are carried by no ECIA-authorized distributor, while the tape-and-reel codes and MCP2517FD-H/SL are plentiful. Whichever code you standardise on, re-check it before each cohort — this family's stock is spread thin across ordering codes.
- DFRobot Edge101 (DFR0886). About 55 units across all three authorized distributors. Fine for one bench, not enough for a class ordering at once.
- ESP32-DEVKITC-32E at DigiKey. Zero available today with Mouser well stocked; a single-warehouse gap that could go either way by the next check.
- The high-voltage DC cable. It is the one line where the wrong purchase is dangerous, and generic shopping searches consistently return automotive cable that does not meet the voltage rating. It will need specifying by hand every time.
- The relay module's 3.3 V trigger. Cheap 5 V optocoupled boards vary in whether they switch reliably from 3.3 V logic; the products change constantly and none of the current listings confirms it.
- The twelve external protocol references. Community repositories, a forum thread and a Google Docs sheet, none checked this run — the most likely source of quiet link rot before the next check.