Files
gree-controller/BUILD_REPORT.md
T
2026-08-23 22:05:24 +02:00

2.9 KiB

GREE Controller v0.3.5 - build and validation report

Scope

Version 0.3.5 focuses on mixed-generation GREE networks and mobile day-to-day control.

GREE protocol fixes

  • corrected the standard AES-128-ECB generic key,
  • corrected the standard AES-128-GCM generic key,
  • GCM now uses the fixed 12-byte nonce and qualcomm-test AAD used by EWPE/GREE Wi-Fi modules,
  • discovery detects GCM by the response tag and decrypts it with the GCM generic key,
  • discovery supports Auto/V1/V2 filtering and 1-10 repeated scan passes,
  • protocol packets use cid="app", i=1 for bind and i=0 for status/commands,
  • Celsius commands follow the standard command payload and use whole-degree SetTem; TemRec is not misused as a Celsius half-degree flag,
  • bind refreshes the device with a direct scan and falls back between ECB/GCM,
  • discovery attempts an immediate bind and persists the successful protocol/key,
  • status falls back to a smaller core property list if a model rejects the extended list,
  • command failure triggers one fresh-bind retry before returning an error,
  • polling also performs a one-time rebind/retry before increasing the communication failure counter.

Availability behavior

  • one UDP timeout no longer immediately marks a device offline,
  • a device is marked offline after 3 consecutive communication failures,
  • successful bind/poll/command resets the failure counter.

Web UI

  • newly discovered units open a friendly-name step, and they can also be renamed later from the Devices view,
  • unnamed units receive a model/MAC-based fallback name instead of Klimatyzator GREE,
  • discovery dialog exposes Auto/V1/V2, scan passes and total scan time,
  • zone cards have direct +/- 0.5 C controller setpoint controls; physical GREE setpoints are normalized to whole Celsius degrees,
  • zone cards have direct Heat/Cool buttons without opening the edit dialog.

Validation performed

Check Result
JavaScript syntax (node --check web/app.js) PASS
JSON parsing for EN/PL language packs PASS
Shell syntax (bash -n scripts/*.sh) PASS
Python syntax for scripts and HA integration PASS
SQL remains centralized in src/queries.rs PASS
Package naming remains gree_controller / GREE_CONTROLLER_* PASS

A full ./scripts/dev.sh --check was attempted in the packaging environment, but Rust is not preinstalled and DNS access to sh.rustup.rs is blocked there. Final Rust type-check, tests and release build are therefore performed by scripts/update.sh or scripts/install.sh inside the target LXC.

Recommended LXC update:

sudo ./scripts/update.sh
./scripts/service.sh health
journalctl -u gree-controller -n 150 --no-pager

For the reported mixed-model network, start discovery with Auto (V1 + V2), 3 passes and 6000 ms. If fewer units appear, run V1-only and V2-only scans separately and inspect the service log.