Releases: botts7/esp32-wallbox
Release list
v3.2.1
Stability release on top of v3.2.0.
Fixed
- MQTT-related crash/reboot (the dominant cause of intermittent reboots) — fixed two faults: the BLE task was driving MQTT concurrently with the main loop (non-thread-safe → lwip corruption), and MQTT reconnect could deref a NULL socket after a WiFi blip. Reconnect now waits for WiFi + forces a fresh socket, and the cross-task MQTT access is removed.
/logsDownload hang — Download now builds the file client-side, no server round-trip.
Added
firmware.elfattached to releases (for coredump symbolisation).- BLE op timings (
ble_write_max_ms/ble_rt_max_ms) on/api/diag/runtime+ crash-breadcrumb phase.
Known issues
- A rare interrupt-watchdog reboot (~once every few days) remains under investigation; it leaves no coredump. The frequent MQTT crashes fixed here were the dominant cause of reboots.
Update
- Existing gateways: OTA as usual, or via the HA integration's Update entity.
firmware.bin+SHA256SUMS.txt(+firmware.elffor debugging) attached below once the build completes.
v3.2.0
Stable release — promotes 3.2.0-rc.4 and adds the post-rc.4 diagnostics and robustness fixes below. Soaked clean on two gateways (241h + 20h+), rc.4 confirmed OTA'ing cleanly.
What's new since 3.1
The full 3.2 line: firmware charge-interval capture (real charge windows), control-owner arbitration, per-model charger quirk handling, Copper/marginal-link hardening, HA Add-on parity, and the diagnostics below. See CHANGELOG.md for the complete history.
Highlights this release
- Crash diagnostics (coredump). A dedicated coredump partition captures a full ELF core on any panic / watchdog reset.
/api/coredump/summaryshows the crashing task + backtrace over HTTP — no cable, no ELF.⚠️ Adds a partition, so it only activates after a one-time USB re-flash; OTA installs are unaffected and keep working normally. - Invalid-JSON gateway payload fix — device strings JSON-escaped,
chip_tempemitsnullon NaN (#172). - OTA history now shows the version you upgraded to (
beta.14 → rc.4), and a silent NVS write-freeze that had stopped history recording on some boxes is fixed (#13). - Watchdog restore fix — the WDT could be left unable to reboot after an OTA.
Reports closed
- #26 Pulsar Plus charging stops — reporter's HA automation, not firmware.
- #13 OTA history / releases-link follow-ups.
Install / update
- Existing gateways: OTA as usual (Firmware → Upload). To also enable crash-dump capture, do a one-time USB re-flash (bootloader + partitions + firmware) — settings and charge log are preserved.
- New installs: USB-flash bootloader + partitions + firmware, then configure via the AP portal.
firmware.bin + SHA256SUMS.txt are attached below once the build completes.
v3.2.0-rc.4
Release candidate 4 for v3.2.0 — a stability + correctness hardening pass.
Fixed
- Charge-log / costs: recorded nothing since late June on Eco-Smart solar (cp ≈ 0) and silently failed to persist on a near-full NVS partition — both fixed. Solar (green) energy is now attributed from the authoritative
r_lse. Costs populate again. - MQTT publish ring filled and dropped forever (then panicked) when MQTT was disabled / no broker — #25 (thanks @geertvanvaerenbergh).
- BLE response cross-core race that could panic on marginal links.
- MQTT
resume_schedulecould fault a paused charger (error 114);denV2H energy scale 10× fix; removed the bogus MQTTgreen_energysensor (was the override flag); Zentri/original-Pulsar status-enum + keepalive fixes;/api/command?action=currentclamped 6–32 A. - New authoritative
schedule_pausedflag in/api/status(fixes the false "paused" banner during solar). - Gateway Temperature emits
null/ unavailable on hardware without a real internal sensor (classic ESP32/WROOM).
Full detail in CHANGELOG.md. New charger-model reference: docs/CHARGER_QUIRKS.md.
OTA asset: wallbox-gateway-v3.2.0-rc.4-esp32s3.bin (attached by CI shortly after this release is created).
v3.2.0-rc.3 — code-review fixes
Third RC for 3.2.0 — pre-stable code-review fixes over rc.2:
- Gateway Temperature MQTT sensor was stuck at 0 — chip_temp is now published in the MQTT gateway payload (not just /api/status).
- OTA: a rejected/duplicate upload could un-pause BLE mid-flash of the real one — the un-pause is now gated on this upload having actually paused.
- Charge-log recovery is idempotent — a crash between the two NVS writes on burst close can no longer double-append an interval.
Also now attaches the board-named wallbox-gateway-<tag>-esp32s3.bin asset automatically (the OTA-asset workflow fix). Install via the HA Update entity (pre-releases) or USB.
v3.2.0-rc.2 — charge-log persistence + diagnostics
Second release candidate for 3.2.0 — rc.1 plus three additions. If this soaks clean it promotes to 3.2.0 stable.
Fixed
- Charge-log no longer loses a charge interrupted mid-burst. The in-progress burst lived only in RAM, so a reboot / OTA mid-charge — or an r_dat feed stall that never delivered the "cp dropped" close-sample — silently dropped the whole charge (intervals are only written on close). The open burst is now persisted to NVS periodically and recovered on the next boot, and a stalled open burst is auto-closed on a timeout. (Root-caused from a gateway whose log went silent across a reboot-heavy OTA window.)
Added
- Gateway die temperature (
chip_temp) in/api/status+ an MQTT diagnostic sensor ("Gateway Temperature"), so thermal issues are visible instead of guessed.
Changed
- BLE error logs decode the NimBLE code — e.g.
err 0x07 ENOTCONN (link dropped mid-op)instead of bare hex — on the secureConnection / encryption / disconnect paths, so pasted logs are self-diagnosing.
Everything from rc.1 (EM340 per-phase sensors, OTA self-correct/diagnose) carries forward. Install via the HA Update entity (enable pre-releases) or USB-flash the attached binaries.
v3.2.0-rc.1 — 3.2.0 release candidate
Release candidate for 3.2.0. Rolls up the entire 3.2.0-beta line — if this soaks clean on real gateways, it promotes to the 3.2.0 stable release.
New since beta.14
- Per-phase EM340 / Power-Boost meter diagnostics — new MQTT sensors for per-phase mains voltage (
Mains Voltage L2/L3) and house current (House Current L2/L3), alongside the existing per-phase Grid Power L1/L2/L3. A 3-phase meter now exposes full per-phase voltage, current and power. Diagnostic-category, auto-hidden when no meter is fitted; L2/L3 read 0 on single-phase. (Community contribution — thanks @hannesjanno, #22.) - OTA failures are now self-correcting + diagnosable — a failed flash no longer leaves BLE paused (it un-pauses immediately so a retry works), and the error now carries the real flash-layer reason (
flash begin failed,flash write failed, bad magic byte, or truncated) instead of a generic "Upload failed".
How to install
- From Home Assistant: the Wallbox Gateway integration's Update entity will offer
3.2.0-rc.1(it's marked pre-release — enable pre-releases if you want it before stable). - Fresh flash: use the ESP Web Tools one-click installer on the repo, or USB-flash the attached
firmware.bin/bootloader.bin/partitions.bin.
This is a pre-release for soak-testing. Please report anything odd against the tracker; if it's stable, 3.2.0 stable follows.
Full notes: see CHANGELOG.md.
v3.2.0-beta.14 — OTA fix + idempotent Start/Stop
Fixed
- OTA no longer false-rejects a valid upload as "truncated" (forcing USB re-flashes). The size check compared firmware bytes written against the request
Content-Length— which for a multipart upload (HA integration + OTA page) includes the boundary + headers (a few hundred bytes not written to flash). On longer boundaries this tripped the tolerance and aborted a complete image. Fixed in both OTA handlers;Update.end()'s image checksum remains the real integrity guard. Verified on hardware: an upload the old check rejected now flashes cleanly. (gambys, ManuMaxGit) - Start / Stop are now idempotent (#23). A "start" while already charging, or a "stop" while already stopped, is now skipped instead of re-sent. Some chargers (e.g. Pulsar Plus USA firmware) treat
w_chaas a toggle, so a redundant write flipped the state the wrong way (switch on-while-on → off). Now correct on every surface (HA, HomeKit, dashboard, MQTT). (quintani) - "Last Charge Burst" MQTT sensor no longer spams the HA log (invalid
state_class: measurementon anenergysensor → now none). - Release binaries no longer report
-dirty— the version script ignores the regenerated web-page headers. (peter-mcc, #13)
Changed
r_lseread heap hardening (#13) — frees its raw response right after parsing (peaks at two payload copies, not three), easing heap-fragmentation pressure at long uptime.
⚠️ If you're on an older beta and OTA fails as "truncated," flash this one via USB once — after that, OTA works normally again (this release contains the fix).
v3.2.0-beta.13 — Copper SB network status rendering (#20)
Fixed (Info → Tools network reads, Ethernet-capable chargers e.g. Copper SB)
- WiFi Status showed
[object Object]when the charger returnsgwstaas an object (Copper Business firmware) — now renders the fields. - Network Status (
gnsta) only showed the first interface, dropping Ethernet on chargers reporting both Wi-Fi and Ethernet — now lists every interface (headed by itstype).
Pulsar chargers (numeric gwsta, single interface) render exactly as before. Thanks @ManuMaxGit (#20).
Includes everything from beta.12. OTA the attached bin or install from HA (integration v0.20.0+).
v3.2.0-beta.12 — status.board for HA firmware Update entity
Added
- Build target exposed as
/api/status.board(e.g.esp32s3). The HA integration's firmware Update entity (integration v0.20.0+) reads this to fetch the release binary matching the gateway's board, so one-click OTA-from-HA always installs the right image. Falls back toesp32s3on older firmware.
Everything from v3.2.0-beta.11 is included. OTA the attached …-esp32s3.bin or install it straight from Home Assistant (Settings → Updates) with integration v0.20.0.
v3.2.0-beta.9 — multi-gateway + HA compatibility
Gateway firmware — pairs with Add-on ≥ 0.41.0 and Integration ≥ 0.18.1.
Fixed / added since beta.7
- Multiple gateways no longer collide in Home Assistant — MQTT topics are namespaced per gateway (
wallbox/<ha_device_id>/…), so two chargers stop cycling values into each other's entities. - MAC-unique default HA Device ID — two out-of-box gateways get distinct entity IDs (existing installs keep their saved ID).
gw_fwin/api/status— lets the Add-on/Integration warn on firmware that's too old for the fields they read.- Status/realtime poll retries once on a marginal BLE link — helps weak-antenna setups where the cached status could stay empty.
- Baltic/EET timezones (Europe/Tallinn, Riga, Vilnius, Helsinki, Athens, Bucharest, Sofia).
POST /api/reboot_gateway— auth-only reboot for the integration/Add-on.
Update
OTA the attached .bin via the gateway's OTA tab (or the Add-on's OTA page). Fresh installs use the 3-file USB flash — see the README.