Repository navigation
2.1.9-beta
Pre-release
Pre-release
NSPanelManager — Release Notes (Aug 8 – Sep 27)
A new beta release for NSPanel Manager is now out. A ton of help has been given from @jamesmulcahy and we should all give him a huge thanks for his help!
This release spans work across three repositories: the manager container, the panel firmware, and the web UI.
🎉 NSPanelManager (container)
✨ New Features
- First page rewritten in React — large-scale migration from HTMX to React for the main dashboard (toast/notification framework, MDI icons, STOMP via RXStomp, NSPanel logs viewer with log download, room editing as a full React page, and more) — #391
- Media player support — new NSPanel protobuf fields for Home Assistant media players + album art fetching/rendering on-panel — #384
- Dev build script improvements — configurable port, container name, and seed path so multiple dev stacks can run side by side — #387
🔧 NSPanelManager-firmware
🐛 Critical Fixes
- Fixed a permanent MQTT deadlock: a failed publish could orphan esp-mqtt's internal lock and wedge the panel offline for good (only fixable by power-cycling). Found via a 35+ hour field soak test — #35
- Fixed a panel deadlock during rapid config reloads on flaky Wi-Fi: unbounded retry loops in event handlers could freeze the panel entirely if Wi-Fi dropped mid-retry — #26 (+ follow-up regression fixes in #31, #32, #33)
- Fixed panels getting permanently stuck on "Lost connection to manager": MQTT config topic wasn't re-subscribed on reconnect, and the panel never re-announced itself if the manager lost its state — #14
- Fixed panel getting stuck subscribing to a manager status topic with no address on every boot — #34
🔄 OTA / Firmware Update Reliability
- Panel now recovers cleanly from a failed firmware OTA instead of getting stuck on the loading screen — #18
- Fixed a resource leak (HTTP client, socket, OTA buffer) on every failed OTA attempt — #23
- Fixed the force-update flag never resetting, causing every future update to reflash even when already up to date — #19
- Fixed GUI update retry logic so it doesn't fall through with a bad HTTP client handle — #20
- Fixed task handle not clearing when a GUI update can't start, silently blocking all future update commands — #22
- Firmware now stores the checksum of what was actually flashed, not what happened to be current at boot — #24
✨ New Features
- Buzzer support — RTTTL tune playback over MQTT, plus touch/scene event tracking as groundwork for configurable sound-per-event — #29
🧹 Cleanup / Refactors
- Removed
std::formatusage, reclaiming ~330 KB of flash — #17 - Fixed an out-of-bounds read in Nextion string event handling — #16
- Named the Nextion update protocol return codes for readability — #28
- Dropped dead/meaningless null checks left over from the cJSON → nlohmann migration — #33
🧹 Misc
- Updated to latest ESP-IDF supported by PlatformIO
- Reworked how fallback access point is triggered as there were underlying issues as to how the old method worked
- When doing the initial setup or connecting to the fallback access point the NSPanel now registers as a captive portal and should automatically popup the configuration web page.
🎉 NSPanelManager Web UI
✨ New Features
- Lights page — brightness/color-temp sliders, color mode detection, and toggling lights straight from a room's entity list
- Idle screensaver — clock screensaver after a configurable idle timeout
- Weather screensaver — animated weather icons, added to the screensaver rotation
- Loading page — shown on startup and while reconnecting
- Long-press on the room list — jump straight into a room
- Entity type icons on room pages, with working toggle
🛠 Improvements
- Reworked router + shared idle-timeout store for consistent screensaver behavior everywhere
- Migrated protobuf handling to ts-proto (internal cleanup)
- More reliable WebSocket (STOMP) connect/reconnect handling
- Simplified room selector component
- General UI polish: icon sizes, button labels, gradients, room page layout
🐛 Bug Fixes
- Fixed color mode detection bug on room change (lights page)
- Fixed room selector not closing after idle timeout + flicker bug
- Fixed main page button firing right after screensaver deactivation
- Fixed broken ceiling light icon
- Fixed unreliable visual feedback when WebSocket disconnects
- Various build fixes