Files
gree-controller/BUILD_REPORT.md
T
2026-08-24 00:28:19 +02:00

4.3 KiB

GREE Controller v0.4.5 - build and validation report

v0.4.5 compile fix

  • Fixed Rust borrow-checker error E0502 in GreeProtocol::poll.
  • The bound device key is now cloned into an owned String before mutating the Device with apply_status.
  • Subsequent full/core/OutEnvTem status requests borrow that owned key, so no immutable borrow of device.key survives across the mutable device update.

Scope

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.

History and chart changes

  • 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.

Browser navigation and feedback

  • 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.

Quick Thermostat fix

  • +/- 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

  • 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 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:

cargo test --all-targets
cargo build --release