2026-10-30 7 changes
Dashboard v1.1.194
Retain the latest SHT31 heater-test curves outside their popup. Collect observed Celsius/RH samples in the existing DataFlow background pass, scoped by device, WEB/USB channel and sensor; reopening during cooling or after completion restores the recorded cycle without sending another heater command. Bound retention and sampling, reject repeated or older receipt anchors, separate new cycles and ESP restarts, and leave known offline gaps visible rather than inventing measurements. Return immutable trace snapshots to the unchanged two-column, dynamically sized chart UI. Stop hidden/covered view timers and avoid redrawing parent graphs from automatic-settings refreshes. Validate normal data flow across real header/screen navigation, cycle retention, source isolation, unit projection and compact localized layouts in software. No firmware, network polling, APK build or physical-device changes.
Dashboard v1.1.193
Plan the owner-described controller lamp detection bridge generically at the RJ11 socket. Add separate detection and identified-ground contact fields, both initially open in every lamp profile; retain the stated unpowered-DAC off purpose as owner provenance rather than a verified electrical guarantee. Draw exactly one socket-to-socket ground jumper only after both contacts are selected, preserving open/partial status without invented wiring or a ground feed. Prevent detection/PWM conflicts and any bridge short to PWM+, while allowing explicitly chosen ground to share PWM-. Share validation with native contact-button availability, freeze both fields in export snapshots and include the open requirement in overview/detail notes, PDF/HTML, profile catalog and BOM. Passed 156 focused scene/export/lamp regressions and inspected native 800x480 DE/EN/ES plus PDF/HTML. No GPIO/pull, firmware, device-command or physical-function changes.
Dashboard v1.1.192
Mirror the sensor TRRS artwork toward the ESP and annotate owner-specified white SDA, green SCL, red V+ and black GND without adding connector nets or inventing tip/ring/sleeve positions. Route lamp DAC AO/OUT- through a configurable controller-side RJ11 socket and cable; illustrate the owner-defined four-contact plug view, latch up and cable toward viewer, with Electrogrow contacts 1 PWM+ and 3 PWM-. Add a scrollable lamp/socket menu opened from the lamp or socket, distinct contact validation and separate socket/lamp assignments so physical adaptation stays at the socket. Add researched AC Infinity IONFRAME EVO4, Mars Hydro FC-E3000 and Spider Farmer SE3000 examples with open, unverified connector/pinout/voltage status and generic artwork. Freeze lamp plan, status and nets in PDF/HTML, extend the reference BOM and retain shared reflected image transforms. Passed 214 scene/export/navigation regressions and a final 144-test focused run; inspect native 800x480 DE/EN/ES scenes/menus and complete five-page PDF plus offline HTML. Connector edits do not alter GPIO/pull drafts or send device commands. No firmware or physical wiring validation performed.
Dashboard v1.1.191
Complete circulation single-device plans for the owner-built Mars Gaming PWMX 120 setup: two identical USB-C breakouts linked by a signal cable, transformed fan-side terminals, a numbered 4-pin PC fan connector and a separate 12 V supply sharing signal ground. Keep both USB-C VCC terminals free and retain each ESP 3V3 10 kOhm RPM pull-up. Describe compatible ARCTIC-style connector roles while retaining the estimated status of the local ARCTIC profile. Keep overview compact; extend the reference BOM to seven breakouts, three PC fan connectors and an open fan-supply quantity. Reuse scene geometry in PDF/HTML and move the BOM explanation into document notes to avoid an orphan continuation page. Passed 123 scene/export regressions; inspected native 800x480 DE/EN/ES drawing and details, offline HTML and complete five-page PDF. No GPIO/pull, firmware, device-command or physical validation changes.
Dashboard v1.1.190
Improve the USB-C breakout concept artwork with a recognizable oval receptacle, tongue and contacts while preserving all terminal anchors. Add independent external 10 kOhm pull-up branches from ESP 3V3 to each circulation RPM net, retaining the direct GPIO path and unused circulation VCC. Show the existing exhaust pull-up in overview, keep per-fan signal routes outside neighboring breakouts and share the resistor collection across native, PDF and HTML renderers. Extend the reference BOM with three circulation resistors and localized wiring notes without changing GPIO/pull settings. Passed 189 software regressions; inspect native 800x480 DE/EN/ES and complete five-page PDF plus HTML examples. No firmware, device commands or physical RPM validation performed.
Dashboard v1.1.189
Keep Disable pin available in the wire-filtered GPIO quick menu alongside the selected compatible function. Use the existing localized action label and leave enough fallback popup height for both choices. Disable only assignments on the clicked GPIO in the draft, preserving other functions, pull settings and a different selected wire. Passed 14 focused quick-menu, reassignment and independent fan-role regressions; inspected native 800x480 DE/EN/ES menus with the shared header visible. No device commands or firmware changes.
Dashboard v1.1.188
Document the owner-confirmed GrowBro sensor hardware: generic four-contact 2.5 mm TRRS hotplug connections for both SHT31 sensors, MLX90614 and SCD41. Show the approved transparent plug/socket artwork and hardware badge in single-sensor views, retaining direct sensor-pad nets and explicit open contact order; use compact HP markers in overview and multi-selection. Add four plugs and four sockets to the reference BOM with owner provenance and separate firmware-rediscovery metadata. Route ESP grounds according to their configured signal GPIO side, using lower right GND R1/R2 or left GND; separate exhaust PWM and tacho returns and preserve external supplies. Carry shared badges, artwork, ground captions and Hotplug BOM labels through PDF/HTML exports. Passed 203 software regressions plus final export checks; inspect native 800x480 DE/EN/ES and complete five-page PDF/HTML examples. No firmware, APK build, hardware commands or new physical hotplug validation performed.
2026-10-28 18 changes
Dashboard v1.1.185
Replace the GPIO guide SHT31 artwork with the owner's frontal transparent SHT3X photograph while retaining the shared Dashboard sensor icon. Keep measured pad anchors, non-destructive image framing and terminal exit direction under one arbitrary-angle component transform in the native canvas, HTML and PDF. Route equal-length parallel pad leads in physical order and clear MLX/RTC in the overview; preserve both existing I2C bus assignments and generic SHT31 BOM identification. Verify native 800x480 DE/EN/ES views, full GPIO scene/report/header regressions and rendered PDF/HTML geometry. No firmware, hardware commands, package build or physical-device validation changed.
Dashboard v1.1.184
Show the existing Font Awesome USB plug from the device-picker channel menu in the shared header signal slot whenever USB is selected. Restore the existing radio signal image on WEB, ADV or GATT without changing header layout, signal-inspector access or connection-status LED behavior. Create the plug label only on first USB use, reuse it across channel switches and retain unchanged-frame caching. Verified native DE/EN/ES header previews at 800x480 and 1440x700, channel transitions and software header/performance regressions. No firmware, APK build or physical-device changes.
Dashboard v1.1.183
Expanded the independently scrolling GPIO dock and added explicit multi-device selection with strictly separate RTC/internal-SHT31 views. Keep all GPIO buttons available, return to Overview by clicking the ESP and expose onboard RST plus explicit display/USB-data mode commands through existing controller paths. Retain separate cable-annotation visibility and readback-driven USB captions. Add existing SCD41/MLX90614 photos, measured pad anchors, individual component buttons and sensor/RTC wiring-plan bus choices without new firmware GPIO roles or automatic driver installation. Freeze combined selection, bus-plan metadata and observed USB mode in PDF/HTML exports; add generic optional BOM entries and consolidate PDF notes to avoid orphan pages. Include shared report writers in Dashboard source fingerprints. Passed software regressions, native 800x480 DE/EN/ES layout probes and PDF/HTML content/page checks. Sending was tested with mocks; no hardware command, firmware change, APK build or physical-device validation performed.
Dashboard v1.1.182
Keep USB flash jobs independent of their popup: screen navigation and the Background action now detach the view while the exclusive worker continues. Reopening the shared flasher from Setup or Grow Controller restores the current job or retained completion, failure and restart-warning result, including source, address, profile and confirmed progress. Sample small job snapshots only while visible, avoid unchanged progress redraws and per-block UI callbacks, and stop view timers when hidden or covered. Transfer imported BIN ownership to the worker until replaced so hiding the view cannot remove its source. Preserve explicit cancellation, USB reservation, ROM verification and existing Android pause/resume behavior. Validate emulated transfers across real header navigation and native compact DE/EN/ES views; no APK build or physical-device flash claimed.
Dashboard v1.1.181
Prepare Web access during USB setup by filling a missing device hostname from the Growmaster identity confirmed over USB. The same registry device can use native USB immediately and its .local Web address when network access becomes available, without requiring router setup or a network probe during registration. Preserve existing custom hostnames, explicit IP/URL targets and device metadata; keep USB selected after connection. Verified persisted new/existing device targets and setup/editor regressions in software; no firmware, package build or physical device changes.
Dashboard v1.1.180
Corrected the exhaust wiring to the owner's actual connection: exhaust USB-C VCC supplies the exhaust DAC VIN+ and fan-side PC817 IN1, while USB-C D-minus tachometer connects to fan-side PC817 G1. Feed DAC VIN-minus from exhaust USB-C GND and remove the external 12-V supply from this branch. Retain external alternative supplies for lighting/humidifier and all other existing supply depictions. Apply the same corrected scene to overview, details, connection tables and PDF/HTML exports; update DE/EN/ES notes, reference BOM supply scope and local component wiring reference. Verify power direction and exact optocoupler anchors, retain ESP-side tacho/pull-up behavior and refresh native/export examples. No firmware, GPIO commands, board flash or physical wiring validation.
Dashboard v1.1.179
Added native Print and Share to the GPIO guide dock, with frozen same-device pin/pull snapshots, selected or complete component scope, offline HTML and white A4 landscape PDF exports. Automatically distinguish draft pin planning from complete matching ESP GPIO readback; preserve unverified physical-route labels and reference-only BOM quantities. Export shared scene geometry, rotated transparent component artwork, connection tables, pin/pull lists, device/time provenance and the generic-SHT31 BOM through the existing OS sharing and desktop save flow. Cancel stale workers and callbacks on navigation/device changes without sending hardware commands. Extract shared PDF font/object writing into one implementation used directly by Planner and GPIO reports; include BOM data in macOS packaging. Software regressions, native 800x480 DE/EN/ES renders, PDF page/text inspection and browser HTML zoom checks passed. No firmware, APK build, board flash or physical wiring/Android-target-app validation.
Dashboard v1.1.178
Replaced the shared SHT31 artwork with the owner's transparent purple SHT3X photo and anchored both sensors to its visible VIN, GND, SCL/T and SDA/RH holes. Rotate the photo and anchors together on the native canvas, leave both unlabelled pads unused and preserve the external sensor bus plus internal RTC/SHT31 shared bus. Separate RTC and sensor routes in the overview. Add the existing Electrogrow image to lighting overview/detail with DAC AO (+) and OUT-minus (GND) wires and explicit symbolic lamp endpoints. Update DE/EN/ES connection notes and documentation. Passed 88 scene, image, navigation, header and fan software tests; inspected native 800x480 DE/EN/ES renders and Font Awesome connection selection. No firmware, hardware commands, Android configuration, package build or physical-device validation changed.
Dashboard v1.1.177
Replaced plain Unicode connection arrows and unresolved-route markers in GPIO guide details with glyphs from the bundled Font Awesome 6 Solid font, following the project icon guide. Add signal-colored I2C, PWM, fan/tacho, voltage, ground-return and battery icons plus proper legend, information, USB and warning icons. Enable mixed-font markup explicitly and escape normal source/target and translated note text. Verify all 15 used FA codepoints against the actual TTF; native 800x480 DE/EN/ES renders, connection-selection checks and 12 GPIO/navigation regressions passed. No GPIO behavior, hardware commands, firmware or package build changed.
Dashboard v1.1.176
Implemented the approved side-dock GPIO guide with an independently scrolling vertical tool column and full drawing height below the shared app header. Move component selection, separate PWM/tacho/pull controls, connection notes and controller section changes into native dark workspace menus; retain all GPIO draft/apply behavior and ESP-port annotations. Temporarily remove the controller section row and content padding only while the guide is open, restoring both on close or section switch. Keep dock wheel/drag gestures separate from drawing zoom/pan, clamp dock overscroll and preserve usable translated labels. Native 800x480 DE/EN/ES renders provide about 427 pixels of drawing height versus 252 previously; 81 scene, navigation, header and fan software regressions passed. No firmware, Android configuration, package build or physical-device changes.
Dashboard v1.1.175
Implemented ESP Backup Lab in the controller maintenance workspace with local versioned archives, optional AES-256-GCM encryption, read-only contents/credential inspection and document import/export. Capture complete typed ESP application preferences plus related Mixed device/source definitions, offsets and hardware profiles. Use one chunked API over direct LAN/AP or native USB, same-device/same-firmware validation, a separate pre-restore archive, explicit scope/USB-role review and read-back-only confirmation after reboot. Keep unconfirmed operations resumable without write replay, update credentials only after verified identity/settings, compare concurrent local changes and recover interrupted local profile/config writes before startup. Compile ESP-Display main v2.9.24-backup/project v0.5.7 with journaled pre-hardware NVS recovery and fresh module revision baselines; retain original testble2, existing factory access and reset behavior. Software fault-injection/regression checks and native DE/EN/ES compact previews; no board flashed, APK built or physical recovery claimed.
Virtual Hub v0.1.32
Recorded shared config/USB provider updates for Dashboard ESP backups. Recognize and roll back an interrupted local settings-file transaction before config consumers start; preserve newer persisted preferences when confirmed access is updated. Add optional pinned USB backup reads and expected-identity reconnect support without changing existing Hub endpoints or default transport behavior. No Hub package built or service deployed.
Dashboard v1.1.174
Added the shared Open-Meteo/CAMS pollen tile beside Daily Average and in Agriculture, with a restrained dark dandelion scene, six species, hourly detail charts, local day/species navigation and explicit missing, partial, stale and unsupported states. Reuse the existing WeatherService worker pool, bounded disk cache, request coalescing, three-hour refresh and failure cooldown; preserve the five-column shared UI and dismiss flow. Include DE/EN/ES text and standalone package source/asset discovery. Source and assets only; no APK build or device changes.
Dashboard v1.1.173
Added restrained battery/ADC and reset-button elements to the native GPIO guide, with selectable existing ADC/pull and reset roles and explicit ground paths. Show the reset as a GPIO-to-ground input without triggering device actions; mark the unconfirmed battery voltage-conditioning route. Add an independent ESP-ports visibility toggle and short cable stubs anchored at the real photo sockets: owner-requested Display / UART label on the left, 5-V ESP supply on the right. Connection notes retain the native USB/CDC versus right USB-UART distinction and the documented external display supply arrangement. Toggling annotations preserves the GPIO draft and zoom. Passed 26 scene and native GPIO regressions and inspected 800x480 DE/EN/ES renders. No firmware, Android configuration, package build or physical device changes.
Dashboard v1.1.172
Implemented the approved native GPIO connection guide with shared zoom/pan imagery, terminal anchors, selectable nets, component overview/detail views and transparent DAC, PC817 and USB-C artwork. Preserve every pin-role menu and the existing GPIO draft/apply flow; expose independent PWM, tacho and pull controls for exhaust and all three circulation fans, including disabled roles. Keep pull settings separate from numerical pin assignments. Show the external SHT31 on the sensor bus and internal SHT31 in parallel with RTC on their shared configurable SDA/SCL pair, matching firmware. Lighting ends at its DAC; circulation has direct PWM/RPM/GND and unused connector VCC. Mark unverified physical connector, sensor-pad and optocoupler routes and provide translated connection notes. Native 800x480 DE/EN/ES renders, 62 navigation/header/fan regressions, four extended pull-selector checks and 12 scene checks passed. No firmware, Android configuration, package build or physical wiring/device validation changed.
Dashboard v1.1.171
Moved the shared navigation guide to a stable quiet corner without connector lines and added contextual Setup, per-device profile, USB Connect and USB Flasher hints in German, English and Spanish. Reused one controller and existing workspace/input-layer lifecycle hooks, kept header and action bars accessible, suppressed underlying hints in file pickers and preserved all USB, credential and flashing behavior.
Dashboard v1.1.170
Redesigned controller Wi-Fi setup as WiFi Lab using shared Clock Lab surfaces and current preference controls. Move network scanning, filtering and selection into a full-height submenu while preserving the credentials draft across shared-header Back/Forward navigation. Keep password entry separate from long network lists, reveal focused inputs in reduced viewports and retain fixed Cancel/Send actions. Restore timeout feedback for the embedded setup view. Desktop and Android share the same arrangement; existing provisioning commands, credential handling and reset behavior remain unchanged. Validated native Kivy previews at 800x480 in DE/EN/ES and software regressions; no Android device or live provisioning validation claimed.
Dashboard v1.1.169
Refined the Camera Live HUD against the approved cinematic concept: theme-derived light instrument ink, finer connected rails, custom left-aligned titles and secondary labels, split camera-control status, larger segmented frame/time telemetry, optical annotations and a more readable compact capture deck. Preserve the shared header, existing camera actions and translucent image view. PTZ height adapts to the available common layout at 800x480. Native Kivy previews in DE/EN/ES with Standard and Canopy themes and 68 relevant software tests passed; no physical camera or Android device validation claimed.
2026-10-27 18 changes
Dashboard v1.1.168
Added explicit Normal, Paced and Uncompressed transfer profiles after four recorded Android main-ESP timeouts across merged/app images and hub/direct cabling; the owner also reports three failures with the bare board. A same-hash 16 MiB main image subsequently passed MD5 on the Desktop Dashboard in 126.354 seconds (Desktop build version unavailable). Keep the normal path unchanged; compatibility profiles bound writes to 64 bytes with 1 ms inter-fragment pauses, and the uncompressed profile uses standard ROM FLASH_BEGIN/DATA/END with immutable raw staging, FF padding and full original-range MD5. Profiles remain independent of firmware catalogs and device role, lock during active jobs and are recorded with schema-3 encoding and staged-byte metrics. No automatic profile fallback or DATA replay. Existing Java bridge retained; new APK/Python package still needed. Compatibility modes are software-tested and not yet physically validated on the failing Android setup. Exclude the existing uncompiled firmware source_path reference directory from the version fingerprint; excluding its two legacy fan copies reproduces the exact previously recorded firmware hash without modifying firmware sources. Main restored by the owner through Desktop; no new successful Android flash claimed.
Dashboard v1.1.167
Optimized Android ROM-flash transmission with one session-bound JNI data-write call per complete frame while preserving endpoint-sized USB packets, bounded native writes and immediate abort without packet replay on ambiguous delivery. Live USB I/O remains on its existing path. Separate port opening/Android permission wait from ROM initialization; a new real read-only Nokia probe on installed v1.1.165 completed in 0.196 seconds, so the earlier 50-second connect phase is not a fixed protocol cost. Budget high-ratio compressed DATA waits from their uncompressed flash work, preserve full MD5, parse a final bounded-read reply with at most 100 ms grace and record per-opcode timings, transport call counts, phase durations, compressed bytes, write rate, client version and ROM device identity. Coalesce UI progress at 10 Hz, preserve probe diagnostics and distinguish cancellation after verified MD5 from an incomplete flash. Require the new Java method in APK validation. Software/JVM/UI checks only for this update; actual speed and reliability after rebuilding remain unverified. ESP firmware unchanged.
Virtual Hub v0.1.31
Reconciled shared USB adapter fingerprints after adding a flash-only Android packet batch method and optional USB-permission stage reporting for the Dashboard flasher. Live USB transport behavior and Hub service implementation, configuration and deployment are unchanged. No Hub package built or deployed.
Dashboard v1.1.166
Kept the header device selection list compact: render each device ID on one line with a middle ellipsis when needed, preserving its identifying suffix. Reduce device-menu row height from 72 to 60 scaled units while retaining the name and ID as two text lines. Keep full registry IDs in the data, main Device Picker and read-only information card; selection and channel actions are unchanged. Checked native menu renders at desktop and compact simulated Android scales.
Dashboard v1.1.165
Prepared an instrumented USB-flasher build after live Nokia/Waveshare tests on installed v1.1.162: one 16 MiB flash passed ROM MD5, a repeat failed during connection, and a fresh-BOOT attempt timed out while writing at 95.2% without USB re-enumeration. Use FLASH_DEFL_END (0x12) after compressed writes instead of FLASH_END (0x04). Record command opcode, block sequence, sent/received bytes, timeout, duration, slowest command, job phase timing and image hash without firmware payloads or credentials. Persist the last job report under data/diagnostics and show live elapsed/command diagnostics. Mark writing immediately after erase acknowledgement. Preserve existing packet size, timeouts and no automatic write replay. Hardware validation of this source build and the reported timeout cause remain pending; no APK built or installed and no ESP firmware changed.
Dashboard v1.1.164
Restored the former readable Device Picker proportions after the live desktop view showed undersized device pictures, capability icons and readings. Put signal, status indicator, vertical WEB/USB/ADV/GATT selection, capability grid and I/E values back in separate columns. Restore original large-window image, icon and text sizes with one shared width-fitting rule for compact screens. Keep full highlighted registry IDs, passive hover/pinned information and copy, the new action buttons/menu, theme integration and the selected translucent wallpaper. Checked the owner-sized 1428x706 view with all six display entries and fixture telemetry, plus 800x480 DE/EN/ES and simulated Android scaling; no hardware or package changes.
Dashboard v1.1.163
Adopted the approved identity-first Device Picker: full registry IDs with highlighted suffixes, suffix and channel reserved in the shared header, and full IDs beneath equal names in its selection menu. Passive identity/image areas and one delayed hover binding share a read-only info card with explicit pinning and ID copy, bounded between the operable header and fixed footer. Open selects the device; channel, metric, capability, mix and editor actions remain available, with reorder, duplicate and guarded removal in the row menu. Preserve the selected wallpaper through restrained translucent surfaces and derive chrome, labels and controls from existing metric themes. Update navigation guidance and DE/EN/ES text. Native UI renders and software interactions at 800x480 include simulated Android scaling and multiple themes; no APK, physical Android or hardware command validation.
Firmware v2.9.15-heater-off
Default both internal and external SHT31 automatic heaters to disabled at startup and when the stored setting is absent, including factory-reset and fresh-flash startup. Preserve explicitly saved enable/disable choices, manual one-shot heater tests, thresholds and cycle timing. Auto-dry is an optional user-enabled function. ESP-Display controller v2.9.23-heater-off; compile and catalog publication only, no device flashed.
Firmware v2.9.14-perf-http
Removed the extra keep-alive response header after a d064 physical test exposed conflicting Connection: keep-alive and Connection: close headers. The installed WebServer already closes normal responses and emits close; follow its real connection lifecycle without changing the server library, access rules, routes or OTA protocol. Retain paired SHT31 sampling, bounded 80-percent BLE scanning, compatible advertising and PSRAM status JSON from the preceding performance release.
Firmware v2.9.13-perf
Share one CRC-checked SHT31 temperature/humidity conversion within a bounded 100-ms cache, preserving heater, disconnect and hotplug behavior. Increase active BLE reception to an 80/100-ms window with 5-s bounded scans every 5.2 s; retain discovery for 60 s in fixed buffers, reuse learned names for paired sensors, avoid dynamic strings under the BLE lock and synchronize pairing/watchdog state. Slow compatible legacy advertising to 250-500 ms and reserve its payload buffer. ESP-Display v2.9.21-perf prefers PSRAM for the common HTTP/USB status JSON, with internal fallback, and retains identical bounded performance counters for physical d064 comparison.
Firmware v2.9.12-perf-metrics
Added bounded BLE receive counters, accepted-packet age, maximum receive gaps and scan-start failure diagnostics for controlled d064 baseline measurements. Sensor sampling, radio timing, measurement validation, control settings and transport behavior remain unchanged. ESP-Display adds fixed timing counters for main-loop wall time and source-refresh wall time plus internal heap, PSRAM and stack diagnostics. Measurement build precedes performance changes.
Dashboard v1.1.162
Reused the shared SegmentedProgressBar and overlay SyncButton in the universal USB flasher. Keep the current stage, large percentage and written/total MiB visible above the fixed actions, with compact shared Desktop/Android layout. Preserve actual progress and the failed stage on errors or cancellation; a fully transferred image is not confirmed until ROM MD5 succeeds. Distinguish a verified write with missing restart acknowledgement from a failed flash. Catalog freedom and Android Own BIN document import are unchanged. Owner reports approximately one aborted Waveshare full flash in five; cause and main-ESP retest remain open. UI/software validation only; no firmware, package build or physical flash changed.
Dashboard v1.1.161
Added read-only USB session recovery and identity-bound automatic reconnect after transport faults, with cancellable 1/2/5/10-second backoff. Invalidate stale live snapshots and queued jobs, verify Hello identity and authentication before resuming, preserve canonical device/history identity and notify initial registration only once. Never automatically replay control/update writes, including the separate overlay timer path; explicit manual retry remains possible. Explicit disconnect, flasher ownership and acknowledged or uncertain mode/reset commands stop retries, while a complete rejected reset does not disable recovery. Keep USB app-update verification exclusive. RPC now distinguishes receive progress from inactivity (8 seconds idle, 24 total by default), counts bytes/framing/CRC errors without payloads or credentials and keeps request IDs through bounded read resync. Added translated recovery state, diagnostics and a working stop action. Display/ESP firmware and native CDC baud settings unchanged. Software/JVM/UI validation only; real Android endurance retest remains pending.
Virtual Hub v0.1.30
Reconciled the shared USB client/RPC fingerprint after cancellable read recovery, identity-bound reconnect and response-progress diagnostics were added for the Dashboard. No Hub service implementation, configuration, package build or deployment changed.
Dashboard v1.1.160
Increased Device Picker row height to fit all four channel labels and their spacing. Size the channel column from its actual children and include vertical row padding so WEB, USB, ADV and GATT stay inside their own device row. Display channels in the agreed WEB, USB, ADV, GATT order; font sizes and actions are unchanged.
Dashboard v1.1.159
Made the shared ESP32-S3 USB ROM flasher independent of installed firmware role and catalog selection: main-to-display and display-to-main are allowed, as are other projects without GrowBro markers or target manifests. Removed product-target parameters from image inspection and the ROM worker; catalog buttons now only choose files alongside direct Own BIN import. Added free aligned addresses for standalone ESP images and explicit addresses for raw BINs, generic merged layouts with non-0x10000 app partitions and optional partition MD5, retaining image integrity, actual capacity, immutable staging and ROM MD5 checks. Enlarged labels/buttons/address/file-browser rows and gave content the available scrolling area with fixed actions. Firmware remains unchanged; software/JVM/UI regression checks, not a new physical flash.
Dashboard v1.1.158
Added automatic 1200-baud CDC entry into the ESP32-S3 ROM flasher for running main/display GrowBro firmware on Desktop and Android. Follow only newly enumerated ROM candidates, exclude already connected ROM devices, constrain USB location/bus, reject ambiguous transitions and preserve changed port names for Check then Flash. Added session-bound Android control transfer, APK method validation, cancellable wait and translated progress/recovery guidance. Enabled CDC reboot in main v2.9.19-usb-boot and display v0.5.1, project v0.5.2, while retaining explicit CDC initialization and exclusive host/device roles. Existing ROM/UART and BOOT/RESET recovery remain available. Both actual firmware builds, Java SDK/JVM, protocol and UI software checks completed; automatic physical CDC-to-ROM transition awaits owner testing. No APK or Desktop app built and no device flashed by Codex.
Virtual Hub v0.1.29
Reconciled shared USB adapter fingerprints after adding USB identity metadata and the session-bound CDC bootloader request for the Dashboard flasher. No Hub service implementation, configuration, package build or deployment changed.
2026-10-26 13 changes
Dashboard v1.1.157
Permanently adopted USB as the fourth GrowBro channel after the owner confirmed the working overall system following the Android live-link correction; prior owner reports include Desktop merged and Android app/merged flashes. Documented the shared controller core, local CSV/history, mode reset, display and flasher, while keeping easier Waveshare flashing versus main ESP as an open observation and nearby DACs as an unproven owner hypothesis. Added separate main-ESP and Waveshare build actions to Project Sync using the existing generator/compiler, with live logs, cancellation and automatic checked app/merged/manifest publication to their correct firmware folders. Full Arduino builds remain inside each sketch. Both actual firmware builds and catalog hashes verified; no device flashed or APK built/installed by Codex.
Dashboard v1.1.156
Reused the Clock Lab ESP chip artwork in the shared USB flasher and added the identical embedded popup to Grow Controller connection/modules alongside its Setup entry. Changed Android CDC reads and writes to endpoint-sized packets to avoid paced full-size packets being consumed by oversized synchronous requests before timeout; verified the actual Java bridge against the prior behavior with a USB timeout test double. Spaced normal status polling after command refreshes to avoid duplicate bursts, exposed runtime disconnect reason and operation, and distinguished deliberate resets from connection faults. Owner confirmed Desktop merged flash and Android app/merged flashes with confirmation on v1.1.155. Java SDK compilation, protocol/UI tests and DE/EN/ES renders validate this source update; the Android live-link correction still needs hardware retest.
Virtual Hub v0.1.28
Reconciled the shared USB-client fingerprint after command/poll pacing, runtime error context and expected-restart handling changed in the Dashboard. No Hub service implementation, build, configuration or deployment was changed.
Dashboard v1.1.155
Added an embedded USB ROM flasher launched directly from Setup without a registered controller, sharing one ESP32-S3 SLIP/compressed-write/flash-MD5 engine on Desktop and Android. Supports main and Waveshare app or complete merged BINs, editable aligned addresses, detected chip/MAC/flash size, independent image/partition/hash checks, cancellable progress and optional App0 boot selection at 0xe000. Added native Android document import and ROM CDC discovery, preserved runtime USB discovery, and isolated old/new Android port sessions. Publishes existing complete merged builds in both firmware catalogs and requires flasher modules/methods/images in APK validation. Validated by a ROM emulator, real compiled-image checks, Java SDK compilation and DE/EN/ES UI renders. No APK built, device flashed or physical ROM transfer claimed.
Virtual Hub v0.1.27
Reconciled shared USB-adapter/client fingerprints after exclusive flasher ownership and Android ROM-port/session support were added to the Dashboard. No Hub service implementation, build, configuration or deployment was changed.
Dashboard v1.1.154
After successful USB/display mode acknowledgement, send one revisioned peripheral_reset through the original device and transport, matching the GPIO apply cleanup flow. USB mode/reset receipts return without waiting for a snapshot from a restarting port, and queued follow-up controls precede periodic polls. User confirmed Android USB working on v1.1.153; this reset change has targeted tests and new controller firmware v2.9.18-usb-reset. Documented the existing cable app-update path separately from the planned ROM/merged-image first-flash popup; no ROM flasher or bootstrap sketch was implemented or hardware flashed.
Virtual Hub v0.1.26
Reconciled the shared USB-client source fingerprint after mode/reset acknowledgement handling changed in the Dashboard. No Hub service implementation, configuration, build or deployment was changed.
Dashboard v1.1.153
Fixed Android USB discovery class loading by resolving and caching the app Java bridge on the Kivy SDL thread before starting Python USB workers; refreshes the current Activity reference after recreation. Replaced clipped header exceptions with wrapped, plain-text error details in the scroll area and readable status, logs discovery errors, and avoids misleading no-device text when scanning failed. Verified the existing APK includes the Java bridge and added mandatory USB Python/DEX checks to APK validation. Buildozer already includes the Java sources and optional USB-host manifest hook; no extra Android serial library is required. Validated with thread-sensitive adapter and UI error tests plus DE/EN/ES error renders; corrected APK hardware retest remains pending.
Virtual Hub v0.1.25
Reconciled the shared-source fingerprint after the Dashboard Android USB adapter initialization fix. No Hub service implementation, configuration, build or deployment was changed.
Dashboard v1.1.152
Added direct native USB controller access for Desktop and Android through Setup and Device Editor, a fourth USB source with the canonical device identity, a shared HTTP/USB ESP decoder and transport-bound revisioned commands. Added Android CDC host permissions and main-app updates verified after reconnect. WEB and USB share one local CSV/history per device without duplicate samples, with local USB history and normal live averages, min/max and trends. Ordered the picker WEB, USB, ADV, GATT and used the verified bundled Solid plug icon. Main and display firmware call one validating controller core. Validated in software, Java SDK compilation and DE/EN/ES desktop renders; no APK built or hardware flashed.
Virtual Hub v0.1.24
Registered the shared decoder and unit-source changes introduced by the Dashboard USB channel and its extracted ESP snapshot projection in the release fingerprint, including the new shared decoder dependencies. This entry reconciles shared source metadata; no Hub service implementation, deployment, build or configuration was changed.
Dashboard v1.1.151
Added GrowDisplay to Grow Controller as an embedded RTC Lab-style maintenance view with the community device montage, live USB/display information, revision-confirmed brightness and idle-clock settings, and display app updates through the main ESP. Verifies written bytes and waits for a new USB connection with the expected version before reporting update success. Split the local firmware catalog into main_esp and display_esp; retained the existing main-ESP OTA flow and credentials. Added shared-layout German, English and Spanish views. WLAN and SD remain deferred. Validated in software and desktop renders; no device flashed.
Dashboard v1.1.150
Wired display milestone: the owner confirmed the complete ESP-Display setup working on real hardware with controller v2.9.14-usb-stream and Waveshare v0.2.2. Adopted the separate Waveshare touch display as a permanent GrowBro component, showing mixed indoor/outdoor climate and VPD, providing light and circulation controls, and handling brightness and display timeout locally. Kept regulation and authoritative state on the main ESP and the original testble2 unchanged. After the integrated-display memory experiment, the two-ESP USB architecture is now hardware-confirmed. Marked this project event blue in About history.
2026-10-25 7 changes
Dashboard v1.1.149
Replaced the Camera Live Viewer's generic angular button faces with a cinematic instrument HUD: a shared source and camera-control rail, shutter and media deck, circular zoom gauge, PTZ reticle, optical image guides and segmented live frame telemetry. Preserved the app header, camera commands, auto-hide, zoom/pan and compact popup behavior. Uses the selected Settings metric theme for translucent glass, rules and text while retaining live and warning colors, and localizes the new instrument labels in German, English and Spanish.
Dashboard v1.1.148
Reworked the Camera Live Viewer controls into connected cut-corner HUD groups for source, camera settings, capture, zoom/PTZ and status. Kept the app header, navigation, commands, auto-hide and touch behavior intact. Draws the translucent panels and controls from the selected Settings metric theme's panel, accent and text roles, while preserving operational status colors and the compact camera popup layout.
Virtual Hub v0.1.23
Replaced default YOLO plant labels with compact 2D mask and identity cards. Added live circulation fan cards for ArUco markers 23 and 24 using the same fresh decoded device frame as sensor labels, preserving real zero values and showing no data for stale frames. Retained marker-based sensor cards and height-strip geometry without implying a computed lamp distance; left the Camera Viewer header, navigation, original feed and stored detection data unchanged.
Dashboard v1.1.147
Made each SHT31 heater trace fill the remaining sensor-card height instead of a fixed narrow chart strip. Recalculate the available graph space when the viewport changes or status messages appear and disappear, while retaining readable minimum charts and scrolling on short screens. Kept readings, phase legends and fixed heater/automatic-drying actions reachable, with the same layout on Desktop and Android and unchanged trace data, scaling and heater commands.
Dashboard v1.1.146
Compacted Grow Controller BLE Settings and SHT31 Maintenance using the Sensor Mix heading pattern: title, scan/target status or maintenance hint and Close share one row, with no separate BLE footer status or duplicate SHT31 popup title. Kept both BLE card columns, both SHT31 scrollable sensor columns and existing revisioned commands; made SHT31 text and actions readable across scales, removed empty sensor messages and corrected chart-label geometry. Extended the visual GPIO viewport directly to its controls and fitted the actual photo bounds without empty workspace padding, preserving pin coordinates. Sized role labels to their text, corrected the zoom floor at Fit and fenced transformed pin drawing and touch starts below the toolbar. Used the same layouts on Desktop and Android.
Dashboard v1.1.145
Compacted the Camera Timelapse and device-photo workspaces with one shared measured status/context row and more usable content height. Combined capture headings with the saved interval, reduced oversized form rows and removed hidden download, daily-window and custom-range layout gaps. Let the device-photo file manager fill its body and moved file confirmation into the existing action bar, preserving plant context, readable wrapped actions and the native photo/camera paths. Kept the same layout on Desktop and Android, all Timelapse drafts and revisioned controls, local/Hub import routing and the other camera tab layouts.
Dashboard v1.1.144
Compacted the device editor into one measured heading row containing title, device identity and the Advanced toggle, removed empty status layout space and gave the form more usable height. Made the profile catalog fill the available editor height as an overlay without shrinking the underlying editor. Kept the same layout on Desktop and Android, the shared app header and fixed Save/Cancel actions, and documented compact module headings and full-height scrollable details as project-wide UI rules.
2026-10-24 10 changes
Dashboard v1.1.143
Rebuilt device editing around explicit drafts with an optional advanced mode exposing missing and existing typed fields, editable canonical IDs, BLE platform mappings, profile catalogs and additional JSON properties. Added manual device creation without BLE and duplicate templates that preserve credentials and profiles while clearing old transport targets, protection and runtime markers. Unified validation and commits, retained explicitly entered factory credentials for arbitrary IDs and exact password whitespace, and replaced silent collisions and hostname-driven ID changes with visible errors. Added draft-only mDNS and physical ID reads, transactional ID corrections with local Planner/photo owner coordination, recoverable JSON backups, restart rollback and cross-process config serialization. Preserved raw history and Hub-owned archives.
Virtual Hub v0.1.22
Updated shared configuration handling to preserve explicitly stored per-device HTTP credentials regardless of ID prefix, retain additional auth properties and serialize configuration file commits across processes. Added interrupted registry-edit recovery and a shared camera metadata reload path used by local identity corrections, while keeping Hub-owned archives outside Dashboard editor transactions.
Dashboard v1.1.142
Local Pro milestone: returned to the Dashboard's local logging roots on the mature shared History foundation. Local logging had been deliberately removed to keep the History architecture clear during its build-out, with a possible return already envisaged. Reused shared Hub History, the device-photo archive and full Plant Planner/Chronicle for supported local sensors, including ADV devices, reducing the need for a Hub to get started. The local experience is Pro; Virtual Hub extends it as Pro+ with independent host recording, central data, remote access, Codex and camera/vision services. Local logging remains opt-in and records only while the Dashboard runtime is active. About now lists newest days first, expands each day with a plus button, creates release details only when opened and positions the selected heading at the start of the view.
Dashboard v1.1.141
Opened Plant Planner and Chronicle for local sensors and directly connected devices, with device-scoped atomic persistence under data/local_planner and the same revisioned Planner store used by the Hub. Reused the shared plant-climate aggregation and interactive graphs for T_i, H_i and VPD_i from each device in data/local_log, serialized reads with local recording and pruning, and preserved logging cadence and Activity pause/resume. Kept local photos, care, tasks, phases and reports available, labeled the actual log source throughout Chronicle and exports, selected native device photos for ordinary sensors, and invalidated stale requests when storage or device changes.
Virtual Hub v0.1.21
Moved Planner persistence and plant-climate aggregation into shared services consumed directly by Hub routes and the local Dashboard Planner. Preserved Hub Growmaster identities, existing storage, revisioned controls and valid Sensor Mixed indoor climate behavior; added an explicit device-log measurement profile for local consumers.
Dashboard v1.1.140
Fixed local camera archive selection when a retained Virtual Hub access entry points to the directly selected physical ESP. Give the explicit ESP endpoint priority over stored Hub routes and stale Hub metadata, normalize optional schemes and default ports, and keep distinct Hub ports remote. Added regression coverage proving local catalog, photo import and thumbnails issue no HTTP requests for this configuration.
Dashboard v1.1.139
Added an independent local device-photo archive with the existing camera gallery, immutable edits, folders, zoom/swipe, sharing and wallpaper workflows. Reused the shared media store under data/local_media with a 1 GiB image/preview budget and manual deletion, preserved originals when clearing previews or rejecting oversized imports, and pinned every background operation to its media source and device. Opened local camera workspaces on the device-photo tab, exposed local storage usage and localized actions, and discarded stale photo/editor completions. Preserved Hub media, Liveview, native capture permissions and Planner availability.
Virtual Hub v0.1.20
Extracted the common CameraMediaStore into services and kept HTTP camera endpoints in camera_media_routes. Preserved Hub archive IDs, folders, edits, thumbnails, revisions and unlimited storage while adding optional local archive quotas and explicit media provenance for Dashboard consumers.
Dashboard v1.1.138
Reintroduced opt-in local CSV logging through the local_history provider for dashboards without a Hub, following its earlier deliberate removal for a clear History build-out. Reused the shared CSV History kernel for graph ranges, gestures, statistics and VPD Scatter, kept physical device identities and per-provider sessions separate, and routed local selections through the existing command stack without HTTP. Added canonical WEB/GATT/ADV recording, 10 MiB rotation and a 50 MiB oldest-first archive budget, local-only Settings with status and Inspector folder access, while preserving Activity pause/resume and existing Hub history.
Virtual Hub v0.1.19
Moved the CSV History store and compressor to shared services used directly by Hub and local Dashboard history. Preserved Hub selection revisions, refresh, aggregates, segment reading and unlimited Hub archive retention. Added optional bounded telemetry retention for the local owner and prevented explicit missing CSV paths from falling back to a different log.
2026-10-23 7 changes
Dashboard v1.1.137
Compacted the Grow Controller workspace with shallower shared tabs and margins. Combined Sensor Mix title, live revision, dynamic status and Close in one slim row, kept all four two-column source cards and target data, and sized rows to real wrapped status text across languages. Replaced the visual GPIO editor's duplicate title and footer with one compact toolbar, moved guidance out of the board image and removed the unused hint overlay implementation. Enlarged the clipped matrix viewport while preserving the app header, pin coordinates, gestures, GPIO selection, Sensor Mix routes and revision handling. Applied the same layout on Desktop and Android.
Dashboard v1.1.136
Extended the shared Settings and BLE Setup design to Grow Controller, Camera Viewer, the Devices editor and Data Inspector. Reused one set of navy panels, metric-themed rounded buttons, native pickers and keyboard-aware fields, retaining explicit status and warning colors. Embedded the device editor and mDNS picker below the interactive header with a scrolling labeled form and fixed Save and Cancel actions. Kept live-camera HUD plates and buttons translucent through theme changes, separated PTZ from the status plate and bounded HUD labels. Preserved controller commands, device identity and credentials, camera capture and gestures, archive browsing, timelapse settings, CSV data and file sharing.
Dashboard v1.1.135
Connected camera archive photos, contextual camera views, menus and delete confirmation to the shared embedded workspace and UIManager navigation. Added previous and next buttons beside the full image, folder-scoped position and boundary states, and horizontal browsing through the central image gesture controller while preserving zoomed panning and pinch. Reused one photo view during browsing, ignored stale image and sharing replies, preserved current-photo selection and editing return paths, and fixed texture filtering when replacing an image source. Kept archive grid modes, capture and timelapse commands, file sharing and platform integrations unchanged.
Dashboard v1.1.134
Unified header Back and Forward through the UIManager, prioritizing registered input layers and embedded workspaces before screen history. Preserved Planner parent state and restored approved views within the current device context while keeping editors, confirmations and actions out of replay. Embedded every Grow Controller dialog below the shared header, retained existing Wi-Fi and OTA dismissal guards and device commands, kept long forms and two-column sensor details scrollable with fixed actions, and bounded GPIO and pinout viewports. Added integration coverage for header taps, context changes, dismissal vetoes and stale completion callbacks.
Dashboard v1.1.133
Aligned all four Settings tabs with the approved dark Setup design while preserving two scrolling columns and fixed main actions. Centralized rounded preference controls and existing metric-theme accents for Settings and BLE Setup, including open profile menus and bounded native pickers. Coalesced language taps and the seven-DE Debug gesture after a short idle period, skipped redundant language reloads, and flushed pending choices on exit. Made the refresh-interval track, thumb, value and endpoints red with seconds and a concise frequency hint, retaining slider ranges, autosave and existing Hub transfer confirmations.
Dashboard v1.1.132
Rebuilt BLE setup as the approved navy device list with a clear Bluetooth LE heading, fixed main actions and per-device Debug profile menus. Kept ADV, GATT and Bridge independent, exposed each complete JSON catalog, preselected the existing assignments and retained the original preset marker alongside amber changes. Bounded menus below the interactive header, preserved existing discovery, selection, identity and save callbacks, and localized the shared Desktop/Android layout in English, German and Spanish.
Dashboard v1.1.131
Added the approved open chart grid as an automatically saved Appearance switch shared by dashboard tiles and fullscreen. Reused two stable neutral line meshes aligned to the inner plot, updated existing and newly constructed views together, and preserved curve filling, statistics, axis bounds, history data and gestures. Kept the local choice when an older Hub config omits it and localized the setting in English, German and Spanish.
2026-10-22 18 changes
Dashboard v1.1.130
Implemented the approved Sequoia Dark Plant Planner design with a persistent plant sidebar, quiet cyan tab navigation, full-width two-column Chronicle photos and directly reachable photo actions. Applied shared navy surfaces and compact fixed form actions across Planner dialogs, condensed profile and plant editing without removing care, phase, crop, calendar or report controls, and preserved header access and revision-confirmed data flows. Kept mini climate charts line-focused with slim actuator tracks while retaining detailed ranges and labels in the full view. Centralized picture selection and removed the unused duplicate image view.
Dashboard v1.1.129
Moved the Clock Lab title, subtitle and local clock into its scrolling content to recover viewport height. Placed Close beside the fixed NTP action at the lower scroll edge while preserving the interactive app header, controller navigation and shared Desktop/Android layout.
Virtual Hub v0.1.18
Registered the pre-existing shared device-time source state in the Virtual Hub release fingerprint after the Clock Lab validation found that v0.1.17 no longer matched it. This entry reconciles release metadata only; no Hub implementation, deployment, network or credential changes were made.
Dashboard v1.1.128
Rebuilt RTC Maintenance as Clock Lab with Weather-style glass cards, dedicated internet/ESP artwork and the existing RTC board asset. Visualized NTP-to-ESP-to-RTC synchronization, the RTC recovery path, real analog clock changes and a continuous physical light-cycle timeline. Kept local and plant time references, complete input rules, revision-confirmed synchronization and fixed header/close/action controls. Added shared-layout DE/EN/ES previews and explicit missing-time, offline, unverified and continuous-light states without changing firmware or network settings.
Dashboard v1.1.127
Projected the authoritative ESP instant, light timeline and start editor into the viewer's local timezone. Added round-trip input conversion, explicit cycle-reference commands and real 23/24/25-hour day curves while preserving fixed physical durations and unchanged saves. Kept local and ESP clocks compactly visible in Light; moved explanations and both upcoming timezone transitions into RTC Maintenance. Centralized offline timezone rules shared with Weather.
Firmware v2.9.11-local-time-reference
Accepted an explicit light reference offset in revisioned timer commands, including equal-hour edits and unchanged saves after daylight-saving changes. Published reference-edit support and the existing CET timezone rule for local-time presentation and diagnostics. Preserved the stored tzoff reference and fixed 86400-second cycle semantics.
Virtual Hub v0.1.17
Adopted the shared source-time and civil-zone projection modules used by Dashboard local-time control. Continued forwarding canonical ESP snapshots and revisioned commands, including explicit light-reference metadata, without applying a Hub timezone conversion.
Dashboard v1.1.126
Unified ESP civil time, light timeline and countdown through one device-time projection. Added monotonic source-age observations, cache/304 and transport-delay handling, conservative freshness, DST transitions and pause/resume invalidation. Growmasters with unavailable time hide the Now line instead of using viewer time; devices without their own clock retain explicit local time. Reused the projection in ESP clock displays and preserved physical light-cycle references and command behavior.
Virtual Hub v0.1.16
Measured physical ESP payload age with local monotonic observations and attached freshness metadata to the exact cached payload being served. Kept Hub transport reception separate from physical source freshness and removed process-local observation anchors from wire snapshots. Reused the shared device-time contract without changing ESP firmware, request routes, credentials or polling cadence.
Dashboard v1.1.125
Fixed Grow Overview sensor summaries to project canonical control-buffer measurements through the shared unit presentation before formatting values and labels. Temperature readings and missing-value units now follow the active profile, including SHT31, BLE and leaf sensors; explicit source units prevent double conversion and preserve the original buffer across profile changes.
Dashboard v1.1.124
Replaced the temperature-only preference with shared metric and Imperial (US) display profiles. Kept telemetry, calculations, graph buffers, history and control inputs canonical; projected temperatures, differences, airflow, air volume, dimensions, weather and watering amounts at presentation boundaries. Added legacy preference migration, full-config synchronization, profile-bound editors/reports and a versioned canonical Hub History contract. Removed the old GSM unit owner and duplicated conversions.
Virtual Hub v0.1.15
Adopted the shared metric and Imperial (US) preference through full-config synchronization. Published versioned History values with fixed source units, preserving revisions and CSV data across display changes; projected camera temperature and height labels with the shared unit engine. Requires the matching Dashboard History contract; installed Hub deployments are unchanged.
Dashboard v1.1.123
Added a compact About tab to standalone Weather settings with the GrowBro plant-platform context, shared project description and capabilities, author copyright, and project/community/support/email links. Reused Dashboard About translation data without importing its runtime screen. Both About views use the canonical external-link launcher, including native Android mailto intents; Weather retains the address if no handler is available. Preserved fixed settings navigation, language/unit preferences, fullscreen geometry and the zero hidden-keyboard pan offset across Desktop and Android.
Dashboard v1.1.122
Removed the hidden-keyboard pan offset from standalone Weather so the upper frame stays inside the fullscreen viewport. The shared Android input setup now accepts host-selected padding; Dashboard retains its existing default. Preserved the frame geometry, physical display-corner treatment, five-column layout and native keyboard pan mode. Reproduced the offset from a connected Huawei capture and verified the idle viewport transform in native Kivy simulations.
Dashboard v1.1.121
Removed the standalone Weather app-name/header row so the shared weather screen and its details use the full app height. Moved the settings gear into the fixed Weather tab row and placed settings Back navigation above its own scroll content. Preserved the Dashboard header, shared five-column layout, detail/location navigation and normal system Back behavior without introducing platform-specific UI layouts.
Dashboard v1.1.120
Removed the standalone Weather header back arrow from the main weather screen and retained it only for returning from settings. In-app back navigation now dismisses settings, details or location search without calling App.stop; root Back is handed to the normal framework and operating-system gesture behavior. Desktop and Android share the same header visibility and navigation rules.
Dashboard v1.1.119
Moved the Climate default window back one week and applied a shared seven-day archive cutoff to date navigation, requested window ends and the historical weather transport. Recent unavailable archive dates can no longer produce an out-of-range end_date request; older periods, the pre-1991 notice and debounced loading remain available. Verified the new default with a successful live archive response.
Dashboard v1.1.118
Replaced the inherited Weather ScrollView stencil masks with a single nested rectangular scissor boundary, preserving scrollbars, fixed detail controls and dismiss behavior while avoiding a shared stencil dependency between overlapping views and translucent instruments. Refined the shared wind rose with a fine compass scale, four cardinal labels, central speed, a split origin-pointing needle and a circular tail; Today and hourly details reuse the same retained illustration, including missing-value handling, gust curves and Beaufort information.
2026-10-21 21 changes
Dashboard v1.1.117
Protected fixed Weather detail headers with a retained opaque foreground surface and final draw order so scrolling artwork cannot overpaint date controls or metric selectors; selectors remain visible above scrolling content. Climate navigation now waits for one full second after the last week/month/year action, restarts the delay on pending boundary selections, and defers initial tab, location and resume loads through the same path. Superseded results preserve the current quiet period; daily forecast details continue to use their cached snapshot without extra date requests.
Dashboard v1.1.116
Expanded every Weather detail card to the full inner panel height, reaching the upper box edge and allowing it to cover the weather clock, tabs and Climate range controls while preserving the app header. Removed the separate reduced Climate detail host, retained internal scrolling, dismiss-first input handling and location-search return, and made Climate date controls and status text more compact through the existing shared scaling without adding platform-specific layouts.
Dashboard v1.1.115
Expanded Climate into an editable From/To week window, defaulting both boundaries to the current week. Existing week/month/year arrows edit the selected boundary; combined-range daily curves and summaries preserve all values, current-day clipping and archive access before 1991 with a nonblocking reference notice. Range edits are debounced and superseded archive chunks are cancelled cooperatively; long spans use annual requests, valid-sample-weighted summaries and bounded extrema-preserving graph sampling with full daily cursor access. Climate range controls remain visible above details on both platforms. Fixed the debounced loader callback signature and verified month navigation through the actual Clock timer.
Dashboard v1.1.114
Added ERA5 1991-2020 daily-reference comparisons and monthly temperature/rainfall tables to Averages details, with a lazy shared persisted cache, honest daily-range bands, missing-hour-aware rain accumulation and Fahrenheit-correct anomalies. Added a retained 0-12 Beaufort table to wind details. All seven Climate tiles now show actual archive daily curves for the selected period, with date cursors, appropriate variants, range bands and preserved summaries. Shared detail geometry, dismissal, five columns and Android/Desktop behavior remain consistent; stale callbacks and duplicate reference fetches are handled.
Dashboard v1.1.113
Added a monthly solar overview inside the existing Sun detail scroll: local mean sunrise and sunset, explicit daylight durations and comparison bars, selected month, and longest/shortest days for the selected year. Reused the single solar calculation with bundled timezone and daylight-saving rules, leap years, polar missing events and tied extrema. A lazy bounded worker/cache preserves UI responsiveness, ignores stale results and retains rows; existing daily details, five-column overview and shared Android/Desktop layout remain available.
Dashboard v1.1.112
Completed restrained Today backgrounds for feels-like, UV, pressure, rain and wind, a subtle Moon star field and local dawn/day/dusk/night Daylight states; preserved duration, rise/set times, instruments, dimensions and five columns. Tile taps and outside presses now dismiss an open detail without click-through; a subsequent tap opens details while in-card navigation remains available. Desktop and Android share the same cached surfaces and interaction flow.
Dashboard v1.1.111
Filled Today humidity and visibility tiles with weather-dependent artwork through the existing shared rounded background surface and shaded texture cache; preserved values, instruments, five columns and click details on desktop and Android while removing separate panorama widgets.
Dashboard v1.1.110
Restored simple line-only History sparklines in Grow Overview sensor summary tiles by removing dark graph strips, grid lines and vertical min/max markers while retaining live readings, trend colors, range-state colors and bounded History sampling.
Dashboard v1.1.109
Updated standalone Weather to APK 0.1.1 with prepared Frankfurt am Main, German, Celsius and standard-theme defaults applied only to missing app files; reused the Dashboard presplash, removed the standalone panel close button while retaining Dashboard overlay closing, and tracked bundled default JSON files in the source fingerprint.
Dashboard v1.1.108
Prepared the first standalone GrowBro Weather APK with its own build cache and output, persistent preferences outside the replaceable Android program directory, pinned venvbuild source archives and complete APK module/asset verification through the shared Android validator; integrated the Weather build into Project Sync with live logs, cancellation and optional manual USB installation.
Dashboard v1.1.107
Added an independent fullscreen Weather app with settings and isolated preferences/offline snapshots, using the same panel and a single shared weather-service implementation; preserved Dashboard Hub location sync, added a fresh-source Buildozer profile using the existing venvbuild toolchain, excluded generated app/build data from sync, backup and the Dashboard APK, and hid pending scene textures during cold startup.
Dashboard v1.1.106
Fixed translucent weather artwork leaking into the fixed clock and tab header while scrolling by adding shared nested rectangular clipping in window coordinates; retained existing stencil masks, drawing instructions, layout and touch behavior on desktop and Android.
Dashboard v1.1.105
Unified Grow and Agriculture with Climate using full-card shaded imagery, the shared restrained palette and full-width advice text; preserved forecast-specific artwork and all click details, removed the former side-image layout, and kept the single Open-Meteo data-status tile permanently in Today instead of moving it between tabs.
Dashboard v1.1.104
Aligned all seven Weather climate cards with the restrained trend palette and full-card imagery, reusing existing metric, sunlight and dew-leaf artwork through one shared image selector and rounded background renderer; retained complete period summaries, navigation, units and click details on desktop and Android.
Dashboard v1.1.103
Refined Weather trend charts with a restrained copper, blue-grey, sage, sand and earth palette shared by curves, headings and values; softened current-time and selection markers while preserving backgrounds, chart geometry and interactions across desktop and Android.
Dashboard v1.1.102
Added full-card photographic backgrounds to all six Weather trend tiles, reusing landscape, condensation and airflow artwork and completing the set with leaf-vapor, rain-glass and soil textures; shared rounded cover rendering and a dark scrim preserve chart geometry, selections, units and click details without reloading images on interaction.
Dashboard v1.1.101
Applied the configured Celsius/Fahrenheit unit throughout Weather tiles, hourly and sixteen-day forecasts, advice, climate, trend charts and click details using the shared temperature converter; unit changes repaint cached views without requests or data drift, while physical calculations, bearings, selections and cached-state information remain intact.
Dashboard v1.1.100
Added photographic airflow, dew-leaf and soil-root accents to Grow and Agriculture weather cards alongside reused Today scenes, with separate readable text areas, day-correct forecast artwork, shared bounded asynchronous textures and cancellation across inactive tabs; preserved all advice and click details.
Dashboard v1.1.99
Aligned Grow and Agriculture weather tabs with the Today master design using muted section headings and restrained topic-colored icons, preserving all card sizes, advice, values and click details in the shared desktop and Android interface.
Dashboard v1.1.98
Colored past History range labels in Grow Overview sensor summary tiles with the shared orange state, retaining green Now windows and updating the color even when duration and measured values remain unchanged.
Dashboard v1.1.97
Added three dark condensation accents to the humidity tile through one shared bounded panorama renderer without increasing tile height; completed Moon click details with offline principal phases, local rise/set and transit, lunar age, distance, DST-aware times and source information while preserving the five-column layout on both platforms.
2026-10-20 8 changes
Dashboard v1.1.96
Unified Plant Planner, Chronicle and its dialogs with rounded PlantCard buttons, shared glass surfaces and inputs, clipped photo corners, readable entry headers and scrollable forms below the interactive app header; translucent frames and cards keep the selected wallpaper visible.
Dashboard v1.1.95
Added portable HTML and PDF plant reports with shared Chronicle graph range selection, phase filters, embedded photos and climate curves, a 20 MB final-file limit and direct native sharing below the interactive header; cancelled or outdated requests cannot open a share picker.
Dashboard v1.1.94
Added sharing of full Chronicle photo originals and saved edits through the existing file handoff, with embedded zoomable viewing and desktop export below the interactive header, clipped image zoom and cancellation of stale photo or share requests.
Dashboard v1.1.93
Pinned Sensor Mixed controls to Live Start, Stop and Reset even when global History is selected, passing the screen's History capability through the shared control path so Mixed actions never request a History window.
Dashboard v1.1.92
Made every History interval follow time, added shared Pause and Resume with frozen History presentation and fresh six-hour Now reset, retained Live behavior and confirmed Hub resources, and added compact colored status indicators across Dashboard, Fullscreen and VPD Scatter.
Virtual Hub v0.1.14
Refresh past History intervals with a stable delay to Now at the existing duration-based cadence, preserving selection IDs and control revisions while publishing compact duration labels and the original window offset.
Dashboard v1.1.91
Fixed History lockout after global Reset by retaining the confirmed Hub snapshot, session, revision and selected range while clearing local graphs and pending selections; Live and History switching remains available without restarting the app.
Dashboard v1.1.90
Fixed global Start, Stop and Reset crashes after Device Picker preloading by refreshing only controls with a callable state update, while preserving plain footer layouts and synchronized graph controls across screens.
2026-10-19 16 changes
Dashboard v1.1.89
Extended the shared file handoff to Data Inspector CSV, JSON, images, PDFs and text, with native external viewers, stable MIME types and original filenames; embedded file selection and desktop export below the interactive header.
Dashboard v1.1.88
Added shared camera archive file sharing for originals and saved edits, with Android Sharesheet, native macOS sharing, embedded desktop export, durable temporary copies and all six image actions kept below the app header.
Dashboard v1.1.87
Added focused VPD Scatter navigation hints for shared History gestures, point inspection and direct growth-zone selection, with guide-card touch priority, contextual availability and three languages; documented hidden interactions as the guide content rule.
Dashboard v1.1.86
Extended the shared navigation guide to Device Picker row actions and the fixed footer, with visible and available targets, channel and fullscreen explanations, three languages and header hints restricted to Dashboard.
Dashboard v1.1.85
Added an optional anchored navigation guide for Dashboard and Fullscreen with passive first-touch routing, contextual rotating hints, local Settings and manual menu access, three languages and one documented extension point for future screens.
Dashboard v1.1.84
Extended the existing warning tile and click details with automatic Meteoalarm country feeds outside Spanish AEMET areas, official local geocode and polygon filtering, original national warning sources, bounded document reuse and explicit incomplete or stale data states across both platforms.
Dashboard v1.1.83
Added a dedicated AEMET warning tile beside Daily Average and a two-column data status tile, with official local-area CAP warnings, independent cache and click details; fixed scrolled weather content intercepting the fixed tab buttons on both platforms.
Dashboard v1.1.82
Replaced the fixed weather footer with one shared Open-Meteo status tile in the free three-column space beside Moon and Daily Average, retaining loading, cached, error and data-coverage information across all tabs while giving the recovered height to content and details.
Dashboard v1.1.81
Moved the location and 24-hour outlook into the shared weather clock header and grouped location controls beside the tabs, recovering content and detail height while preserving every forecast value, five columns and one layout across platforms.
Dashboard v1.1.80
Dismissed open weather details by tapping the existing weather icon, clock, date or surrounding clock area while preserving overview scroll position, header layout and location controls on every platform.
Dashboard v1.1.79
Added one embedded click-detail card for weather metrics with local-day charts, time selection, astronomy and cached-data status; linked hourly, 16-day, Grow, agriculture and climate cards while preserving the existing five-column overview and interactive header on every platform.
Dashboard v1.1.78
Clamped shared History pan and zoom to the device's first recorded Log sample while preserving Now-following windows and Live transitions, and corrected desktop wheel zoom direction in the shared gesture controller.
Virtual Hub v0.1.13
Published each device's first recorded History timestamp from cached CSV index blocks across active and archived logs in the existing full and compact pipeline, preserving the refresh schedule.
Dashboard v1.1.77
Gave long ChartTile History durations their own full-width line below the metric value, sizing the header to keep every time component visible while preserving compact labels beside the value.
Dashboard v1.1.76
Kept free History windows at the logical Now edge following the existing Hub refresh schedule, preserved fixed past ranges, added explicit Now endpoints and readable range states, and kept the date editor below the interactive app header.
Virtual Hub v0.1.12
Shared compact labels for arbitrary relative History durations and explicit Now endpoints in the host range editor while preserving the existing refresh cadence and fixed custom windows.
2026-10-18 13 changes
Dashboard v1.1.75
Added immediate Live switching when zooming beyond the minimum History window and a zoom-out return to recent History, shared by Dashboard, Fullscreen and VPD Scatter with one mode command per gesture and preserved normal History previews.
Dashboard v1.1.74
Replaced Dashboard device swipes with shared History time pan and pinch zoom in Dashboard, Fullscreen and VPD Scatter, committing through the existing History command path after release while preserving vertical scrolling, taps, live values and overlay priority.
Dashboard v1.1.73
Measured the first rendered startup frame and first input, staged background charts and fullscreen construction, serialized device row preloads, cached unchanged header and Virtual Hub status work while preserving live receipts, and centered metric glyphs from current layout geometry.
Dashboard v1.1.72
Fixed compressed chart time axes after layout changes; deferred hidden weather pages and staged forecast cards, prepared scene and moon pixels in workers, retained trend markers, bounded archive widgets and file workers, kept only the latest live camera frame, reused timelapse rows, and coalesced atomic Mixed publications outside the UI thread.
Dashboard v1.1.71
Retained VPD history and overlay ring drawings, cached unchanged actuator controls and light curves, skipped unchanged or offscreen charts with refresh on scrolling, reused Bluetooth and Sensor Mix cards, and reduced lock pulse updates while preserving data and layouts.
Dashboard v1.1.70
Reused hourly and 16-day weather widgets, skipped unchanged weather snapshots, retained instrument drawings and graph selection, and bounded cached scene textures while preserving all details and the shared five-column layout.
Dashboard v1.1.69
Kept the Today weather grid at the requested five columns on both desktop and Android, removing automatic column reductions on narrower panels while preserving all weather details and shared overlay bounds.
Dashboard v1.1.68
Compacted the Today weather layout into five columns on wide panels with shallower tiles, smaller chart areas and tighter spacing while preserving the hourly outlook, daylight duration and all supporting values.
Dashboard v1.1.67
Kept the bundled cloudy weather icon visible in the current conditions tile during loading, empty offline states and location resets, matching the clock fallback while preserving cached weather icons on update errors.
Dashboard v1.1.66
Matched Grow, agriculture and climate typography to the larger 16-day forecast, enlarged climate navigation, and added seven transparent weather-aware accents beside the current conditions without covering any values.
Dashboard v1.1.65
Replaced polygon visibility scenery with six weather-aware landscape assets, enlarged all small 16-day forecast text, and added matching heading icons to every Grow, agriculture and climate tile without changing their content.
Dashboard v1.1.64
Applied the refined dark weather tile design with larger adaptive values, metric illustrations, daylight as a primary value, and preserved the leading scrollable 24-hour outlook and every supporting metric.
Dashboard v1.1.63
Replaced the camera archive folder glyph with Font Awesome and matched the shared image editor to the app wallpaper, compact glass buttons, and unified sliders.
2026-10-17 17 changes
Dashboard v1.1.62
Restored fully visible daylight duration and sunrise details by sizing compact weather rows to rendered text and diagram height.
Dashboard v1.1.61
Unified forecast, Grow, agriculture, trends, maps and climate tabs with dark adaptive weather tiles while preserving all content, chart selection and period navigation.
Dashboard v1.1.60
Moved current conditions into a double-width weather tile with a larger icon, retained the clock weather icon, and compacted the hourly strip and detail grid.
Dashboard v1.1.59
Displayed sea-level pressure on a compact circular tick dial with a live pressure marker and centered hPa value in the weather grid.
Dashboard v1.1.58
Added separate feels-like, sea-level pressure, visibility and daily temperature average tiles in a compact responsive four-column weather grid using existing forecast data.
Dashboard v1.1.57
Restored the shared weather-colored overlay frame and glow, enlarged the clock and date header, and reduced weather detail tile height while preserving common panel bounds.
Dashboard v1.1.56
Matched weather panel bounds to the shared control overlay defaults and allowed slow Open-Meteo forecasts to finish with a 20-second read timeout.
Dashboard v1.1.55
Redesigned weather with dark tiles, a 24-hour outlook, API-backed moon phases and times, comparable 16-day temperature bands, preserved cached data on failures, and accessible navigation below the app header.
Dashboard v1.1.54
Added a shared image editor for archive and plant photos, immutable edited variants, virtual folder controls, and automatic Chronicle entries for selected main images.
Virtual Hub v0.1.11
Stored immutable edited camera captures and revisioned virtual folders in the media catalog.
Virtual Hub v0.1.10
Recorded the cleaned Virtual Hub source tree after verifying that every remaining runtime module is reachable from the Hub entry point.
Dashboard v1.1.53
Removed five unused Dashboard modules, including duplicate push-message and critical-confirmation implementations.
Dashboard v1.1.52
Initialized the Chronicle climate header divider at its narrow widget size to remove a stray green rectangle over the navigation header.
Dashboard v1.1.51
Separated the Chronicle climate selected date and visible range with a slim accent bar and enlarged both header labels.
Dashboard v1.1.50
Showed the visible Chronicle climate time range beside the selected date and kept it current during phase filtering, zoom, and pan.
Dashboard v1.1.49
Aligned Fullscreen metric text colors with ChartTiles and refreshed drawn ChartTile line colors when switching themes.
Dashboard v1.1.48
Switched Standard interface accents to the Sensor Mixed blue and added the green Canopy theme without changing metric or status meanings.