Firmware Release Notes
Track the official version history and software improvements for the Intellidwell Sprinkler Controller firmware base. Updates can be pulled directly over-the-air (OTA) via the settings interface on your local device.
Version History
Request Serialization & Concurrency Protection: Prevents controller crashes and socket exhaustion by queuing and rate-limiting outgoing API calls, combined with frontend visual locking during active commands.
- Implemented sequential request queueing (`safeFetch`) to guarantee no more than 1 concurrent TCP connection is sent to the ESP32.
- Enforced a mandatory `150ms` delay between sequential API requests to allow connection teardown and heap garbage collection.
- Added visual interface locking (dimming and disabling click handlers) on the main dashboard and scheduler pages when a command is in-flight.
- Updated the system status dot to turn amber when a command request is actively processing.
Memory & Web Server Stability Optimizations: Offloads heavy static HTML file serving to Nginx reverse proxy to prevent controller lag and OOM crashes, and adds garbage collection guardrails to local routes.
- Configured Nginx on the host server to serve static pages (Dashboard, Settings, Scheduler, Logs) directly from local disk, offloading all heavy asset delivery from the ESP32.
- Configured ESP32 to only handle lightweight JSON API requests (`/api/status`, `/get-settings`, etc.), preventing connection timeouts and interface lag on refreshes.
- Added proactive garbage collection (`gc.collect()`) calls in `controller.py` prior to serving static files to improve reliability for direct-IP local connections.
Optimized update lookup behavior: Reduces background noise by gating update requests behind explicit user actions.
- Only fetch available firmware versions from the repository when the user explicitly triggers "Check for Updates" button on settings.
- Reduces background network connections and saves server performance.
Memory management and crash fixes: Major reliability optimizations for irrigation scheduler operations.
- Optimized scheduler page loading structure to decrease peak memory usage.
- Cached active rain delay state values in physical memory to prevent ESP32 memory leaks and system crashes during live cycle operations.
Concurrency and interface stability: Resolved resource conflicts during asynchronous requests.
- Made the unified `/api/status` endpoint read-only to avoid concurrency errors or data collisions.
- Fixed a layout bug where the manual timer setup panel collapsed unexpectedly.
Manual control UI enhancements: Polished visual control logic on the dashboard.
- Hides configure options while a manual timer run is active, only displaying options when a zone is idle.
- Simplifies user experience and prevents concurrent scheduling actions.
Unified telemetry system: Solved UI HTTP polling overhead and browser sockets depletion.
- Implemented a consolidated `/api/status` data endpoint for telemetry.
- Refactored telemetry queries in `index.html` into a single central poller, resolving browser socket exhaustion and dashboard freezes.
Security updates: Encryption enforcement for device updates.
- Updated the default server address to HTTPS in `settings.html` to encrypt update binaries downloads.
Version detection features: Initial implementation of the update detection framework.
- Added firmware version metadata tracking on the board.
- Implemented the manual "Check for Updates" settings button and dashboard notification bar.
OTA structure update: Organized update deployment endpoints.
- Added support for versioned paths inside the OTA file fetch routines.
Major release base: Established base features for the 10-zone smart sprinkler controller.
- Integrated 10-zone physical mapping control via relays.
- Built-in local Microdot server hosting Web UI configuration panel.
- MQTT telemetry integration for Home Assistant discovery.
- Automatic Wi-Fi fallback to AP setup mode on connection errors.