This commit is contained in:
Mateusz Gruszczyński
2026-08-24 00:23:47 +02:00
parent 6e3075fae5
commit 10bc9aa099
21 changed files with 1110 additions and 260 deletions
+42 -31
View File
@@ -1,49 +1,60 @@
# GREE Controller v0.4.3 - build and validation report
# GREE Controller v0.4.4 - build and validation report
## Scope
Version 0.4.3 restores the classic rounded GREE Controller UI while keeping the neutral light/dark palette and green accents introduced in the previous release. It also removes three Rust dead-code warnings reported by the LXC release build.
Version 0.4.4 fixes empty/under-populated history views and expands climate telemetry across GREE devices, zones and Home Assistant sensors. It also adds URL-addressable UI pages, History sub-pages, a saved/shareable custom chart composer, redesigned toasts and optimistic Quick Thermostat controls that no longer clear the active preset.
## UI changes
## History and chart changes
- Restored the classic large rounded cards and panels.
- Restored circular thermostat +/- and power controls.
- Restored compact desktop navigation and five-item mobile bottom navigation.
- Kept the v0.4.2 climate-history functionality and multi-series charts.
- Kept neutral dark/light surfaces.
- Dark accent: `#3ecf8e`.
- Light accent: `#24b47e`.
- UI is plain committed CSS in `web/styles.css`; no frontend package manager or CSS build step is used.
- Theme-aware scrollbars remain enabled and compact horizontal control scrollbars remain hidden.
- `readings` remains the independent history source for every GREE device, whether or not the device belongs to a zone.
- Added bucketed device-history queries for indoor temperature, available GREE `OutEnvTem`, target and power.
- Added `ha_readings` for configured HA room/outdoor sensors.
- Existing `zone_readings` remains the rich thermostat timeline with GREE temperature, HA room temperature, control temperature, target, actual device setpoint, outdoor temperature, power, mode, fan, demand, source and preset.
- `/api/history?scope=overview` returns device, zone and HA streams together plus row counts.
- If a zone has no `zone_readings` yet, the API reconstructs a compatibility timeline from its existing device `readings` instead of returning an empty chart.
- Older rich zone samples can be exposed as compatibility HA history when the dedicated HA table has not accumulated samples yet.
- GREE polling now probes `OutEnvTem` separately after a core-property fallback so models that expose outdoor temperature can contribute that series without making the main poll fail.
- History UI is split into Overview, Zones, GREE devices, HA sensors and Custom chart sub-pages.
- Overview includes common charts for all GREE indoor temperatures, available outdoor temperatures and all zone control temperatures.
- The custom chart composer can mix GREE device, zone and HA sensor series, save chart definitions in browser storage and serialize them into a shareable URL.
## Rust warning cleanup
## Browser navigation and feedback
Removed code that was superseded by bucketed zone history:
- Main application views use stable paths such as `/dashboard`, `/devices`, `/zones`, `/schedules`, `/automations`, `/settings` and `/events`.
- History uses `/history/overview`, `/history/zones`, `/history/devices`, `/history/sensors` and `/history/custom`.
- Browser Back/Forward and direct page refresh are handled by History API routing plus the server-side index fallback.
- Toasts are now stacked, theme-aware success/error cards with close controls and progress indicators.
- `Db::list_zone_readings`
- `queries::LIST_ZONE_READINGS_BY_ZONE`
- `queries::LIST_ZONE_READINGS_ALL`
## Quick Thermostat fix
The active history path is `Db::list_zone_history` with the bucketed SQL queries.
- `+/-` updates the displayed target immediately and batches rapid taps with a short debounce.
- Stale HTTP responses cannot overwrite a newer tap.
- Added `manual_setpoint` separately from `manual_preset`.
- A temperature nudge no longer changes Auto/Comfort/Sleep/Away to `custom` or clears the active preset.
- Manual temperature correction still expires at the next schedule boundary.
## SQLite / compatibility
- Added `ha_readings` and indexes through idempotent `CREATE TABLE IF NOT EXISTS` schema initialization.
- All SQL remains centralized in `src/queries.rs`.
- Existing `readings`, devices, zones, schedules, automations and settings are preserved.
- No database reset is required.
## Validation performed in packaging environment
- HTML structure sanity checks.
- JavaScript syntax check with Node's parser only; Node is not part of the application/runtime.
- JSON validation for language files and HA manifest.
- Shell syntax checks for `scripts/*.sh`.
- Python syntax check for migration helper.
- Verified no `list_zone_readings` or `LIST_ZONE_READINGS_*` references remain.
- Verified no frontend build/package files are required.
- ZIP integrity test and SHA-256 manifest generation.
- JavaScript syntax: `node --check web/app.js`.
- JSON validation for EN/PL language packs, PWA manifest and HA manifest.
- Shell syntax validation for every `scripts/*.sh` file.
- Python syntax validation for helper scripts.
- SQLite execution tests for the schema, device bucket queries, zone bucket queries, HA bucket queries and history counts.
- EN/PL translation-key parity check.
- Verified project SQL statements remain centralized in `src/queries.rs`.
- Verified no Node/npm/Tailwind runtime or build dependency exists.
- ZIP integrity and SHA-256 manifest verification.
A Rust toolchain is not available in the packaging environment, so the authoritative Rust tests and warning check run on the LXC through `scripts/update.sh` before installation.
Expected LXC validation:
A Rust toolchain is not installed in the packaging environment. The authoritative Rust compile/tests are therefore intentionally performed on the target LXC by `scripts/update.sh` before it replaces the running binary:
```bash
cargo test --all-targets
cargo build --release
```
The three warnings supplied from v0.4.2 have been removed at source rather than suppressed.