This commit is contained in:
Mateusz Gruszczyński
2026-08-27 22:00:13 +02:00
parent 4cc4378588
commit b93a1f2d92
16 changed files with 196 additions and 64 deletions
+28 -3
View File
@@ -1,10 +1,17 @@
# GREE Controller v0.7.12 - build and validation report
# GREE Controller v0.7.13 - build and validation report
## Scope
Version 0.7.12 adds a timed hand-back for per-zone Quick Thermostat OFF while preserving the strict separation between local thermostat ownership and true physical/manual-device takeover. After 15 minutes the zone returns to the current group/schedule logic instead of restoring stale physical state.
Version 0.7.13 hardens Quick Thermostat ownership against polling/firmware-settling races, disables Global when no global Heating/Cooling mode is selected, and adds live counters for UDP frames received from configured GREE units. The 0.7.12 timed hand-back behavior remains unchanged.
### Backend hand-back correction
### 0.7.13 race protection and diagnostics
- Per-zone Quick Thermostat changes are serialized with polling using the same per-device operation lock, preventing a stale poll from restoring a false physical/pilot takeover after the user explicitly selects local thermostat control.
- Recent controller-requested states and their pre-command baselines are kept for a bounded settling window, so delayed/out-of-order GREE status frames are not mistaken for remote-control changes.
- The Quick Thermostats **Global** button is disabled while the global house mode is neither Heating nor Cooling.
- Settings shows live total and per-device UDP receive counters, updated over the existing WebSocket event stream.
### Existing 0.7.12 hand-back correction
- Local thermostat ON/OFF now goes through one backend helper, so every new OFF action creates a fresh authoritative 15-minute deadline and ON always cancels it.
- A physical/direct-device takeover temporarily suspends expiry of an existing local-OFF hand-back. Returning the unit to the previous OFF state re-arms the countdown from that return moment instead of continuing an old timer.
@@ -464,3 +471,21 @@ Validation for this package is recorded after the final archive/manifest checks.
- Version metadata is aligned at `0.7.12` and the PWA cache key is rotated.
- This packaging environment still has no `cargo`, `rustc` or `rustfmt`; target/CI must run `cargo test --all-targets` and `cargo build --release` before deployment.
## 2026-08-27 v0.7.13 quick-thermostat race protection and frame counters
- Quick Thermostat changes from Web/Home Assistant are serialized with the same per-device operation lock used by polling/manual-takeover detection.
- Controller-originated climate changes retain a bounded settling history of requested and pre-command states so delayed/out-of-order GREE status frames do not falsely trigger physical/pilot takeover.
- Dashboard Quick Thermostat **Global** is disabled whenever the global house mode is neither Heating nor Cooling.
- Settings exposes live total and per-device UDP receive counters for configured GREE units via the existing WebSocket stream.
- The Home Assistant zone `climate` entity remains the supported path for controlling one thermostat independently.
## Final validation for v0.7.13
- `node --check` passed for `web/app.js` and `web/sw.js`.
- All JSON files parsed successfully; Polish and English language packs have identical 610-key sets.
- Home Assistant Python modules and helper Python scripts pass `py_compile`; shell scripts pass `bash -n`.
- `web/index.html` parses successfully and CSS brace balance passes.
- Cargo package, Home Assistant manifest, README and PWA cache metadata are aligned at `0.7.13`.
- The final SHA-256 file manifest and ZIP integrity are verified during packaging.
- This packaging environment does not provide `cargo`, `rustc` or `rustfmt`; target/CI must run `cargo test --all-targets` and `cargo build --release` before deployment.