Files
gree-controller/BUILD_REPORT.md
T
2026-08-24 15:20:29 +02:00

5.2 KiB

GREE Controller v0.5.3 - build and validation report

Scope

Version 0.5.3 builds on 0.5.2 with UI consistency fixes, quiet-hours control, a flow-board simulator, event-log retention and Home Assistant sensor aliases.

Implemented changes

  • Replaced the textual Connected/Disconnected label with a green/amber/red status dot in the top-left brand header.
  • Fixed History filter layout so Zone/Device/Sensor and time-range controls keep equal heights and do not stretch after changing tabs.
  • Reworked the Simulator into a Node-RED-style dotted flow board with connected live nodes for sensor input, thermostat target, decision, unit command and next event.
  • Added configurable night mode (default 22:00-06:00): thermostat fan speed is capped during quiet hours and compatible units can be asked to keep Quiet enabled.
  • Device cards now use Name / protocol instead of Rename and no longer show the fixed UDP port next to the IP address.
  • Settings are split into visual blocks; the self-signed HA example uses a generic private address instead of an installation-specific address.
  • Event/debug log retention is configurable and old rows are pruned automatically; the Events page can change retention and prune immediately.
  • Home Assistant temperature sensors can have UI aliases; aliases replace raw entity IDs in history selectors, legends and custom-chart labels without changing stored entity IDs.
  • Added a dedicated Web UI simulator page that visualizes thermostat/automation decisions as graphical blocks with hours, targets, demand, standby behavior, rule actions and upcoming events.
  • Quick Thermostat cards on the dashboard can enable/disable a zone directly; the edit dialog is no longer required for this action.
  • SQLite history housekeeping is tiered to chart resolution: full recent data, 10-minute buckets after 24 hours and 30-minute buckets after 7 days.
  • Optional long-term InfluxDB archive supports both InfluxDB 1.x (database/basic auth) and 2.x (org/bucket/token), from persisted settings or environment variables.
  • New samples are written to SQLite and InfluxDB in parallel when the archive is enabled.
  • Maintenance backfills compacted legacy SQLite samples older than the configured Influx handoff age. A local row is deleted only after the Influx batch succeeds; archive failures keep the SQLite copy.
  • History requests crossing the handoff age merge old InfluxDB data with recent SQLite data and fall back to SQLite when the archive query fails.
  • Device commands are reduced to fields that actually changed. Optional GREE buzzer suppression uses Buzzer_ON_OFF/BuzzerCtrl; incompatible devices automatically fall back to normal frames and are remembered for the running process.
  • Smart Fan now uses Low speed (WdSpd=1) when a zone is satisfied. The thermostat sends standby setpoint + Low fan + optional Quiet=1 in one GREE frame. If a unit rejects Quiet, the controller retries without it and remembers that capability fallback until restart; when demand resumes, controller-owned Quiet is released on the transition.
  • Toast progress indicators have horizontal inset so they stay inside rounded toast corners.
  • Settings can be exported/imported as JSON. Metrics, event logs and generated API-token records are preserved during import. Exported configuration contains configured secrets and must be protected.
  • Optional on-screen debug overlay is available on every Web UI route, can be changed through /api/debug, shows controller events plus live HTTP method/path/status timing and can include sanitized decrypted GREE request/response payloads.
  • /api/control-plan exposes house state, current zone decisions, schedules, upcoming transitions and automation rules/time events.
  • The dashboard renders the control plan as blocks with current targets/demand and upcoming actions.
  • Home Assistant integration now also exposes whole-house/per-zone plan sensors, writable per-zone target-temperature number entities and per-zone enable switch entities via the restricted integration API.

Validation performed in packaging environment

  • node --check web/app.js.
  • Python syntax validation for the Home Assistant integration and helper scripts.
  • Shell syntax validation for all scripts/*.sh files.
  • JSON validation for EN/PL language packs, PWA manifest, Home Assistant manifest and HA translations.
  • EN/PL UI translation-key parity and literal UI translation-reference validation.
  • SQLite schema execution plus tiered compaction and event-log retention tests.
  • SQLite archive-selection query tests for device, zone and Home Assistant histories.
  • Configuration-clear behavior verified to preserve metric history, event logs and API tokens.
  • Version consistency checked for Cargo package, Cargo lock root package, README and Home Assistant manifest.
  • Archive ZIP integrity and SHA-256 manifest are verified during final packaging.

Rust compiler note

The packaging environment does not contain rustc, cargo or rustfmt, so a Rust compile cannot be executed here. Regression tests were added for unchanged-command filtering and history compaction; the target LXC update/install scripts remain the authoritative compile gate and run:

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

The update script must complete those commands before replacing the running binary.