First full cut of the 8.x line after the v8.0.0-AlphaPi alpha — 102 commits.
Brain / SPA 8.1.0 · kit firmware train 8.0.0.0 (unchanged — no fleet reflash required by this release).
⚠️ Important: 8.0.0 AlphaPi cards cannot flash a kit
The 8.0.0 image shipped nine zero-byte kit firmware binaries. bake-firmware.sh falls back to writing empty placeholder .bin files when it cannot compile, and refuses to do so only under DSC_RELEASE=1 — which the 8.0.0 bake did not set. Anyone who flashed that card and ran the SPA USB-flash wizard got nothing flashable.
8.1.0 is the first image to carry real kit firmware. All eight roles are compiled from source and verified non-empty by a release guard that now aborts the bake if any binary is empty.
| Role | Chip | Bytes |
|---|---|---|
hub |
esp32 | 1,283,136 |
control |
esp32 | 1,381,600 |
pot1 |
esp32 | 1,134,704 |
pot2 |
esp32 | 1,134,688 |
heater |
esp8266 | 476,960 |
heatmat |
esp8266 | 476,960 |
humidifier |
esp8266 | 476,976 |
dehumidifier |
esp8266 | 476,976 |
Per-role sha256 provenance ships in kit-build.json on the card.
What's new
| Area | |
|---|---|
| Dashboard v2 | Desks, zone model, icon set v5, gauge hover readout, motion + type-scale pass |
| 3D twin | Composed live scene at #/twin, 134-GLB model pipeline, twin field model |
| Settings & preferences | Passes S1–S5 — ~190 knobs across a 12-section IA |
| Cameras | Fixed-mount IP camera per tent, timelapse, plant regions |
| Light / PPFD | Maker PPFD map + 3D surface, per-fixture CannaLib catalog binding |
| Automation | Rule engine v2 — compound triggers, window/debounce/hysteresis/max-age |
| Zigbee | UX phases 0–4, device-type catalog, every bound datapoint becomes a fleet entity |
| Tuya | Local lane T1 |
| ESPHome toolchain | Host update helper, rollback, canary-first fleet rollout, capped below ESPHome 2026.8 |
| HA removal | Lovelace loader, HA scaffolding and Twin IIFE path deleted; SNTP-only time |
| Naming | SPA identifiers Seat/POT → Probe/Plant |
| Fixes | ~45 live-audit items, Sonoff relay honesty, history bucketing, calibration bounds |
Build fixes behind this release
The kit firmware build had been dead for weeks — unnoticed, because the live hub firmware does not use the affected component and only the image bake exercises that path.
dsc_fleet_setupdid not compile on ESPHome 2026.6.5 —wifi::ScanResultsLockwas removed upstream,WiFiScanResult::get_ssid()became aStringRef, andhub_mac_str()/panel_mac_str()were defined without header declarations.esp_http_clientis excluded from ESP-IDF builds by default — so pureesp-idftargets (panel, probes) could not find the header while thearduinohub resolved it by accident. Now declared viainclude_builtin_idf_component().- Kit binaries were located with a
find -newerprobe that assumed every compile relinks; a cached build is a success that rewrites nothing, so the bake aborted on valid binaries. Now scoped to the build path ESPHome itself reports. - The
thin-catalogcannalib service could not start on a card — neither its build context nor a prebuilt image shipped. Both now do.
Upgrade notes
- No fleet reflash is required. Expected firmware stays
8.0.0.0; the version only moves when the ESPHome source changes and a flash happens. - Flash
dsc-hub-8.1.0-arm64.img.xzwith Raspberry Pi Imager (Use custom) for Pi 4 / Pi 5 aarch64, prefer Ethernet on first boot, then open#/setup. - The thin catalog is opt-in:
docker compose --profile thin-catalog up -d.
Assets
dsc-hub-8.1.0-arm64.img.xz is the flashable image. The uncompressed 2.6 GB .img is not attached — it exceeds GitHub's 2 GiB per-asset limit. Decompress the .xz, or rebuild with services/dsc-hub/image/bake-on-linux.sh.
sha256 dsc-hub-8.1.0-arm64.img.xz 7eb0895b8cc5b0d85aaefce92f62c135852329036f1d8b902867d6a135f602b2
sha256 dsc-hub-8.1.0-arm64.img 62577365edf1f784aef5bf4f787ca31ad6833a1b293c196157a203cb1c1e77ae
sha256 dsc-hub-8.1.0-docker.tar.gz 0587681bf2b843667e92b5bf9a6773171ff8f99f7b0ef91e61311283d6069b53
Docker tar contains dsc-hub-brain:8.1.0, dsc-hub-cannalib:8.1.0, eclipse-mosquitto:2, koenkk/zigbee2mqtt:2.