Files
gree-controller-ha-addon/gree-controller/CHANGELOG.md
T

377 lines
31 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Changelog
## 0.16.4
- Fixes a race in stateful Flow checkpoint saving: no stale condition evaluation can re-enable, overwrite or resurrect a disabled/deleted/recompiled automation.
- Requires both the generated automation/schedule and its parent Flow to be enabled before participating in the engine, control plan, next-event timeline or API enabled status, including mismatched imported/legacy data.
- Adds a second enable/revision check under the execution lock immediately before sending an action. No newly initiated Flow actions after disabling it.
- Releases orphaned thermostat intent and pending compressor tasks when a Flow is disabled, deleted, or its action is removed; preserves real manual ownership and avoids retroactively undoing already sent external commands.
- Resets Flow timer, change-detection, rolling-window and cooldown state after an OFF → ON transition, so disabled intervals never advance timing conditions.
- Filters the dashboard's recent-Flow and simulation cards against the parent state, including the moment between a WebSocket Flow update and a rebuilt control plan.
- Adds database and engine regression tests for disabled parents, stale writes, orphaned rules, zone handback and manual takeover.
- Restores the three ready-to-import simple heating Flow JSON examples missing from the prior source package and updates the static verification script for the new ownership checker.
## 0.16.3
- Adds expandable, per-room examples for nighttime 19/21/23°C modulation, daytime OFF/boost/30-minute stability, zone temperature-source fallback and Flow vs manual ownership.
- Adds tooltips explaining each day/night heating setting. No changes to runtime heating algorithms, saved Flow JSON schema or existing imported flows.
## 0.16.2
- Adds `zone_heat_cycle`: a single day/night room-temperature controller for one zone. Use a constant true condition plus the new block (two Flow nodes total).
- Night: low demand first (typically GREE 21 °C), boost to target +2 °C after 8–10 minutes without warming or a deep temperature drop, brake 0.1 °C ahead and standby at ~19 °C when reached. Keep the indoor unit powered without repeated ON/OFF.
- Day: physically OFF above the configured room minimum until heating is needed; maintain room temperature, then OFF after 30 continuous minutes at goal with compressor minimum-on protection.
- Keeps individual targets for Bedroom, Jan and Igor; includes three ready-to-import two-block Flow definitions.
- Correctly identifies Flow-owned thermostats as automatic, including day OFF/pending OFF and night standby; respects genuine manual control.
- Adds focused Rust unit cases, UI ownership tests and a static release verification script. Rust tests/build still require a Rust toolchain on the CI/deployment host.
## 0.16.1
- Adds hysteretic early-heating coasting: lower the GREE target before reaching room comfort temperature without switching the indoor unit OFF.
- Supports `heat_anticipation_c` and `standby_offset_c` settings in Visual Flow thermostat actions, including import/export and zone editing.
- Shows Flow heating/coasting/standby distinctly from real direct-manual device takeover.
- Preserves existing compressor protection and backward compatibility with existing Flow definitions.
## 0.16.0
- Improves heating stability when Visual Flow automations use Home Assistant room-temperature sensors.
Flow definitions use HA room readings directly for ON/OFF thresholds rather than relying only on zone temperature.
- Shortens temperature-reached shutdown stabilization in the updated heating flows from 30 minutes to 30 seconds to reduce overshoot; keeps start stabilization and separate ON/OFF thresholds.
- Preserves `automation.flow` ownership across thermostat control cycles so the internal controller does not apply conflicting adjustments.
- Prevents the global outdoor-temperature assist from boosting targets for zones currently controlled by Flow; standalone thermostat control retains its existing behavior.
- Makes heating OFF commands set `power=false` with `heat` mode explicitly to avoid retaining an unintended dry/fan mode.
- Removes humidity-driven/Turbo activation paths from the updated heating flows and adds guarded Turbo shutdown and missing-sensor safeguards.
## 0.15.20
- Adds a new Visual Flow **Heating curve** block to the Sensors / values palette.
- Provides a graphical X/Y curve editor with outdoor, device, zone, or numeric Home Assistant temperature as the input source.
- Linearly interpolates target values between configured points and clamps values outside the X range to the nearest endpoint.
- Allows the curve output to drive zone/group thermostat setpoints, GREE target temperature, or a configurable Home Assistant service-data field.
- Shows the calculated dynamic value in Flow simulation/dry-run and adds validation/tests for curve points, native 8–30 °C targets, and wider Home Assistant outputs.
- Adds a smoke check that keeps Flow block metadata and the user-visible block palette in sync.
## 0.15.19
- Fixes Visual Flow `zone_thermostat` OFF semantics: `power=false` now powers the assigned unit off without setting the persistent Zone `enabled` flag to false.
- Keeps the Zone available for subsequent Flow/schedule evaluation after an OFF action while preserving the existing explicit physical OFF command and ownership checks.
## 0.15.18
- Persists the evaluated Flow trigger trace whenever a Flow-generated automation executes or reaches a failed execution attempt, so the trigger context reflects the values from that exact moment instead of current live readings.
- Expands Control plan → Recently triggered automations with per-block Flow details: matched state, configured condition, observed value, timing/rolling-stat/rate-limit state and logic gates.
- Keeps the newest Flow trigger details expanded by default while older recent entries remain available in compact expandable sections.
## 0.15.17
- Hides Dashboard → Global power Emergency STOP whenever all units are off and no automatic control is currently requesting work; an active STOP always keeps the green return-to-normal action visible.
- Improves Control plan → Recently triggered automations so Flow-generated entries show the source Flow name, for example `Generated by Flow: Igor - Heating`, instead of only the generated automation identifier.
- Refreshes Emergency STOP visibility immediately from live device and control-plan state.
## 0.15.16
- Makes Dashboard → Global power emergency STOP context-aware instead of permanently prominent whenever any zone is enabled.
- Keeps the yellow STOP prominent while any unit is powered or automatic thermostat control is currently active.
- Hides STOP while the system is idle; an active emergency STOP always remains visible as the green return-to-normal action.
- Refreshes the STOP state immediately on device, schedule, automation, Flow and control-plan realtime updates.
## 0.15.15
- Adds a persistent emergency STOP to Dashboard → Global power. Activating it stores a restart-resistant safety gate, clears queued automatic compressor actions, pauses schedules/thermostat automation and makes a one-time attempt to power off enabled units; startup does not replay the OFF command.
- Adds a green return-to-normal action that releases the safety gate and immediately re-evaluates current conditions without forcing devices ON.
- Expands Control plan with a full-width “why the controller is acting this way” section showing per-zone control source/reason and the most recently triggered automations with trigger context.
- Keeps emergency-stop state operationally separate from configuration backup/import, and documents the new `POST /api/house/emergency-stop` endpoint in the API/OpenAPI contract.
## 0.15.14
- Fixes Home Assistant energy sampling in the packaged add-on when authentication comes from `SUPERVISOR_TOKEN`; background sampling no longer requires persisted manual URL/token fields.
- Centralizes Home Assistant readiness detection so Supervisor authentication and standalone manual URL/token authentication use the same runtime check across background jobs and integration endpoints.
## 0.15.13
- Flow cards now show an explicit execution type: Schedule, Automation, Schedule + Automation, Draft, or None, based on the compiled Flow output.
- Removes whole-card navigation to the Flow editor, so clicking statistics, compile counts, descriptions, and other non-action areas no longer opens the editor accidentally.
- Adds a dedicated compact Editor button next to Simulator and gives both actions the same visual treatment.
## 0.15.12
- Flow cards now allow editing the description directly from the Flow list without opening the visual editor.
- Adds a dedicated simple Flow simulator next to the editor button. It opens in a modal, uses the saved Flow, current live values by default, and allows quick scenario overrides plus simulation date/time.
- Simulator results are intentionally simplified to clear “will run / will not run / blocked” outcomes with readable checked conditions and friendly block reasons, while remaining non-mutating.
## 0.15.11
- Routine Visual Flow edit confirmations now appear as a compact status inside the editor instead of global toasts for save/copy/cut/paste/duplicate/undo actions.
- Adds right-click context menus: selected blocks can be copied, cut, duplicated or deleted; the canvas can add/paste/select-all/fit/undo; and connections can be removed directly.
- Context-menu paste can place a copied subgraph at the clicked canvas position while preserving internal connections.
- Adds `Ctrl/Cmd+Z` undo with a bounded edit history for block creation/deletion, connections, paste/duplicate/cut, block movement, inspector setting changes, template application, Flow name changes and Enabled state changes.
- Updates the built-in shortcut reference and PL/EN labels for the new undo and context-menu workflow.
## 0.15.10
- Visual Flow adds keyboard-first authoring: `A`, `Insert` or `Ctrl/Cmd+K` opens block search, and `Enter` inserts the first matching block.
- Flow editing now supports `Ctrl/Cmd+S` save, `Ctrl/Cmd+A/C/X/V/D`, Delete/Backspace, Escape, arrow-key movement, precise Shift+arrow movement, `Ctrl/Cmd+0` fit-to-view and `Ctrl/Cmd++/-` zoom.
- The Flow editor includes an in-app keyboard shortcut reference available from the toolbar/mobile actions and with `?`.
- Every Flow card can now export its `.flow.json` directly from the Flow list without opening the editor; the existing export endpoint/portable format is reused.
## 0.15.9
- Visual Flow `on_change` events are now latched while their upstream condition remains true and are acknowledged only after the downstream action executes successfully, so cooldowns, ownership suppression and same-cycle target conflicts no longer silently consume a change event.
- Rolling mean/median blocks now require one complete configured time window after their runtime window starts or restarts before they can match; unavailable sources reset the rolling window instead of reusing partial history.
- Thermostat action summaries now show explicit power and HVAC mode alongside the preset/target, so `power=false` is displayed as OFF instead of looking like a preset-only Auto action.
- The Flow canvas adds drag-box multi-selection, keeps Shift/Ctrl/Cmd additive selection and moves the whole selection together.
- Selected Flow blocks can be copied/pasted or duplicated with internal connections preserved; Ctrl/Cmd+C, Ctrl/Cmd+V and Ctrl/Cmd+D are supported.
## 0.15.8
- Visual Flow exports now include the Shared Input definitions referenced by the graph.
- Flow import creates missing Shared Inputs automatically, reuses equivalent local sources and safely remaps conflicting IDs without overwriting local definitions; Flow and imported inputs are persisted atomically without changing the Flow format version.
- The Flow editor keeps the Interpretation / Flow cycle section collapsed by default on desktop, tablet and mobile, with details available through the existing disclosure button.
## 0.15.7
- Fixes mixed V1/V2 Local discovery: legacy/plain discovery envelopes are no longer treated as proof that a unit is V1.
- Uses the inner GREE `ver` metadata as a discovery protocol hint (`V1.*` -> V1, `V2.*`/newer -> V2), while keeping unknown results in Auto mode.
- Auto discovery now verifies the protocol during bind with V1/V2 fallback and persists the generation that actually succeeds; explicit V1/V2 discovery remains locked to the selected protocol.
- The discovery review UI shows Auto for unresolved candidates instead of incorrectly labeling them V1.
## 0.15.6
- Removes the obsolete add-all `POST /api/discovery` endpoint and its compatibility-only merge path.
- Local discovery now has one flow only: `POST /api/discovery/scan` followed by `POST /api/discovery/add`.
- Simplifies selected-device binding: `/api/discovery/add` no longer accepts a redundant top-level `protocol_version`; each unit is bound strictly with the protocol detected during scan.
- Removes unused discovery merge/export code and the matching obsolete OpenAPI schema.
## 0.15.5
- Local discovery no longer adds every detected unit automatically; scan results are reviewed first and only selected units are persisted and bound.
- Discovery results show each unit model, MAC address, IP address and detected protocol, with already-added units clearly marked.
- Explicit V1 AES-ECB or V2 AES-GCM discovery now strictly filters the other protocol and binds only with the selected protocol; Auto keeps V1/V2 fallback.
- Adds `POST /api/discovery/scan` and `POST /api/discovery/add` for the selective local-discovery flow.
## 0.15.4
- Updates the Rust dependency stack to current major/minor releases, including Axum 0.8, Reqwest 0.13, Rusqlite 0.40, Rand 0.10, AES 0.9, AES-GCM 0.11, Base64 0.23, SHA-2 0.11, Tower HTTP 0.7 and utoipa-swagger-ui 9.
- Migrates Axum route parameters and WebSocket text frames, Rand APIs, RustCrypto AES/AES-GCM APIs and Reqwest TLS configuration for the new dependency versions.
- Updates the Home Assistant add-on Rust builder to Rust 1.98.1.
- Pins direct Rust dependencies to exact updated releases; container builds generate a fresh lockfile before fetching and compiling with `--locked`.
- Uses `ring` as the single Rustls crypto provider across Reqwest and the direct MQTT TLS client, avoiding the Rustls provider ambiguity introduced by Reqwest 0.13.
## 0.15.3
- Simplifies the built-in Swagger API documentation: removes the embedded release-history changelog, starts with all endpoint groups collapsed and hides the global Schemas section.
- Documents the HTTP/WebSocket API, Swagger UI (`/api-docs`) and OpenAPI document (`/api-docs/openapi.json`) in the main documentation and Home Assistant add-on package.
## 0.15.2
- Adds a dedicated Visual Flow action for changing exactly one GREE unit function without modifying unrelated settings.
- Legacy device automations now expose fan speed plus Quiet, Turbo, Panel Light, Air, X-Fan, Health and Sleep as optional single-field controls.
## 0.15.1
- Web UI now treats temporary WebSocket loss as a reconnecting state, escalates to a connection error only after 15 seconds, and returns cleanly to connected after recovery while preserving the existing HTTP fallback.
## 0.15.0
- Adds full vertical and horizontal louver positions to manual unit control and thermostat cards, with compact dropdowns that preserve the existing view layout.
- Extends legacy automations, Visual Flow and the bundled Home Assistant climate entities with granular louver positions; legacy boolean swing API payloads remain accepted.
- Direct add-on access no longer shows `Invalid access token` on initial page load; that validation message appears only after a token is submitted.
- Home Assistant climate cards localize direct-control names, fan modes, thermostat presets and all vertical/horizontal louver positions while keeping stable technical mode IDs for services and automations.
## 0.14.24
- Public Custom Charts fetch chart metadata before language assets, so a chart loads only its selected language pack; missing chart IDs fall back to English.
- Public Custom Charts support pinch-to-zoom, one-finger horizontal panning while zoomed and per-metric visibility toggles through the legend.
- Missing public chart IDs now return `chart id not found`, the favicon is no longer redundantly pre-cached, and invalid Access Tokens show an inline authentication error.
## 0.14.23
- Code cleanup and small UX changes.
## 0.14.22
- Code cleanup and small UX changes.
## 0.14.21
- Code cleanup and small UX changes.
## 0.14.20
- Installs the Rust target standard library in a cacheable layer before project sources are copied, so source-only changes do not redownload/reinstall it.
- Fetches Cargo dependencies before target-specific setup so amd64/arm64 reuse the same registry/git cache.
- Separates compiled `target/` caches by target architecture to avoid multi-platform build contention while retaining incremental dependency reuse.
## 0.14.19
- Speeds up multi-architecture OCI builds by running Rust/Cargo on `BUILDPLATFORM` and cross-compiling to amd64/arm64 instead of compiling ARM under QEMU.
- Reduces Docker build context and avoids invalidating Rust compilation for unrelated documentation/repository changes; only `docs/openapi.json` is copied because it is embedded by the binary.
- Deduplicates `/api/integrations/gree-cloud/status` across the initial HTTP bootstrap and immediate WebSocket bootstrap render while keeping manual Cloud reconnect refreshes forced.
## 0.14.18
- Renames the shared segmented navigation class from feature-specific `automation-tabs` to generic `segmented-tabs`.
- Generalizes shared configuration layout classes to `config-form`, `form-section`, `form-section-head`, `form-grid`, `sticky-form-actions` and `full-width-form`.
- Generalizes reusable chart, enable-toggle and diagram classes used across History/public charts, Zones/Flow and Simulator/Flow editor.
- Replaces Flow-palette-specific category modifiers with shared `block-category-*` classes also used by the block library.
- Removes all references to the replaced shared class names without changing component behavior or visual styling.
## 0.14.17
- Makes History navigation visually identical to the Flow / Schedules / Automations segmented navigation.
- Reuses the shared `automation-tabs` component for Overview, Zones, GREE devices, Energy, Pings, HA sensors and Custom chart.
- Removes redundant History-only tab CSS, including its separate mobile overrides.
## 0.14.16
- Adds an explicit Saved Charts list to History → Custom Chart with load, edit, update and delete actions.
- Keeps chart name, selected series and range editable when updating an existing saved chart instead of creating duplicates.
- Adds a range selector to standalone public Custom Chart links; the public data endpoint accepts an optional `hours` override while keeping the shared series definition fixed.
- Fits the standalone public chart to the viewport and prevents vertical page scrolling, including compact/mobile layouts.
## 0.14.15
- Treats TCP `8787` as the fixed internal Home Assistant add-on application/ingress port and validates the Supervisor-reported ingress port at startup.
- Makes the add-on build fail when `run.sh`, `ingress_port` and watchdog port metadata diverge.
- Uses the Home Assistant Supervisor network API to resolve the primary host IPv4 for generated chart-only share links instead of depending on the browser/ingress hostname.
- Adds optional `public_chart_base_url` for reverse proxies, alternate hostnames or non-standard external routing while keeping the public surface limited to generated Custom Chart shares.
- Uses Home Assistant's `[PORT:8787]` watchdog placeholder so Supervisor resolves the effective watchdog port from the add-on port contract.
- Keeps standalone installations fully port-configurable through `GREE_CONTROLLER_BIND`.
## 0.14.14
- Changes History → Custom Charts links to open a standalone chart-only page instead of the full dashboard.
- Persists chart shares behind random bearer URLs whose token is stored only as a hash; shared URLs do not expose metric/device selectors.
- In Supervisor mode, requires `app_token` for direct dashboard/API/WebSocket access on port `8787`, while trusted HA ingress remains automatic.
- Keeps only generated Custom Chart data public to the network; the add-on watchdog may call `/api/health` anonymously only from the Supervisor peer.
- Makes the Home Assistant entity picker in `Reusable data -> Shared Flow input` explicit with a separate search box and selected `entity_id` field.
- Filters the live Home Assistant entity catalog by friendly name, `entity_id`, current state, unit and device class while typing.
- Keeps automatic Supervisor authentication, failed-test manual fallback and standalone Home Assistant behavior unchanged.
## 0.14.13
- Shows Home Assistant Supervisor authentication as automatic in the add-on and hides manual URL/token/TLS fields by default.
- Unlocks a persisted manual Home Assistant URL/token fallback only after an automatic HA test fails; standalone installations keep their existing manual behavior.
- Extends `Test HA` to verify the state registry and show a live sample entity/state in the success toast.
- Adds a searchable live Home Assistant entity picker to `Reusable data -> Shared Flow input`, with source-type-aware fields and numeric filtering for numeric HA inputs.
- Adds an authenticated compact Home Assistant entity-catalog endpoint for UI suggestions.
## 0.14.12
- Home Assistant add-on now uses the Supervisor-managed Home Assistant Core API connection automatically.
- Enables `homeassistant_api` for the add-on and authenticates Core API requests with runtime `SUPERVISOR_TOKEN`.
- Keeps the Supervisor token out of SQLite and prevents add-on UI edits from replacing stored standalone Home Assistant URL/token settings.
- Standalone installations keep the existing manual Home Assistant URL and Long-Lived Access Token behavior unchanged.
- Fixes custom select mouse hover/click inside modal dialogs by keeping each dropdown popover inside the same modal top-layer subtree; keyboard behavior is unchanged.
## 0.14.11
- Replaces font-dependent Unicode glyphs used as Web UI icons with a shared inline SVG icon set.
- Covers navigation, theme/refresh controls, dialogs, menus, Flow editor/statuses, chart zoom/fullscreen controls, thermostat/device +/- controls, custom-select checks/chevrons and event-category icons.
- Leaves semantic text symbols such as `°C`, `±`, comparison operators, mathematical multiplication and Flow expression notation as text.
- Keeps the 0.14.10 full-width Night mode and Home Assistant / Sensors layout fix.
## 0.14.10
- Makes the standalone Night mode and Home Assistant / Sensors forms use the full available page width, matching the other application sections on desktop and responsive layouts.
## 0.14.9
- Replaces the font-dependent Unicode power symbol in Manual Control and thermostat quick power controls with an embedded SVG icon for consistent Android/Chrome rendering.
- Home Assistant room-sensor stale/error event messages now include the affected `entity_id` and zone name.
- Event rendering enriches older `ha.sensor_*` rows with the sensor alias/entity and zone when that context is available in saved metadata.
## 0.14.8
- Removes the remaining non-device `502 Bad Gateway` mappings from Home Assistant connection/entity diagnostics and notification tests.
- Returns `400 Bad Request` for missing/invalid integration configuration and `424 Failed Dependency` when a configured external service cannot be reached or rejects the request.
- Reclassifies background Home Assistant energy-read failures as external-dependency errors.
- Keeps `502 Bad Gateway` only for actual Local/LAN GREE device transport failures.
- Aligns API/OpenAPI error documentation with the runtime status mapping.
## 0.14.7
- Treats an unconfigured Home Assistant integration as an optional unavailable source when listing HA energy sensors instead of emitting a 502 error while opening split/multisplit installation settings.
- Maps configured-but-failing Home Assistant energy discovery to the external-dependency response path rather than a device communication 502.
- Fixes short custom-select menus near the bottom of dialogs opening far above their trigger by positioning from the menu's rendered height.
## 0.14.6
- Fixes custom select duplication when a select is moved in the DOM, including repeated History → Energy refreshes.
- Hides the Energy history controls and Refresh action when no energy source is configured, leaving a single empty-state message.
- Hardens global custom-select cleanup so dynamically removed controls do not leave stale wrappers or popup menus.
## 0.14.5
- Fixed the outdoor-temperature modal chart returning from fullscreen with fullscreen-sized layout remnants.
- Added quick links from the outdoor-temperature modal to 7-day, 30-day, yearly and full History views.
- Replaces native single-choice dropdown UI across the Web UI with one consistent custom select matching the energy chart picker, including language/theme controls and dynamically generated Flow/history forms.
- Loads only the active language pack at startup and fetches other language packs when selected.
- Makes the dashboard outdoor temperature clickable and opens a modal with its last 24 hours of history.
## 0.14.4
- Removes the obsolete Home Assistant connection-test/default entity; HA connection testing uses only the configured URL and token.
- `outdoor_entity_id` / `HA_OUTDOOR_ENTITY_ID` is the global Home Assistant outdoor-temperature sensor.
- Adds optional per-zone `ha_outdoor_entity_id`; when empty, the zone uses the global outdoor sensor, and when set it overrides the outdoor source only for that zone.
- Keeps Home Assistant room temperature sensors per zone via `ha_entity_id`.
- Global and per-zone outdoor sensors are available in aliases, metrics/history and Home Assistant entity suggestions used by Visual Flow.
## 0.14.3
- Home Assistant connection test now validates the configured server and token without requiring any entity.
## 0.14.2
- Improves connectivity controls: Local/LAN ping measurement can be explicitly enabled/disabled in Settings, disabled workers gray out their interval/sample fields, Cloud REST/MQTT measurement settings live in a dedicated block, and History → Pings can hide/show jitter with one button while rendering jitter as a dashed line.
- Adds a configurable background connectivity worker for Local/LAN units with measurement interval and sample-count settings.
- Adds a History → Connectivity/Pings view with per-endpoint latency, jitter and packet-loss charts plus latest batch summaries.
- Stores connectivity readings in SQLite using the same retention/compaction lifecycle as other history metrics and archives them to InfluxDB when enabled.
- Keeps direct unit probing Local/LAN-only; GREE Cloud diagnostics instead measure optional REST response time and MQTT PINGRESP round-trip.
- Adds opt-in GREE Cloud connectivity metrics with configurable interval/sample count; Cloud measurements are disabled by default.
- Adds separate vertical and horizontal swing controls for local units in Manual Control, respecting per-device capabilities.
- Adds vertical and horizontal swing controls to thermostat zone cards without switching the zone into manual device ownership.
- Adds optional `swing_vertical` and `swing_horizontal` actions to legacy direct-device automations.
- Extends Visual Flow so both `device_action` and `zone_thermostat` can control vertical/horizontal swing, and device-state selectors use readable swing labels.
- Prevents swing-enabled thermostat Flows from being reduced to native schedules, preserving the auxiliary swing action at runtime.
- Exposes vertical and horizontal swing on Home Assistant zone thermostat climate entities when supported by the assigned unit.
## 0.14.1
- Adds split and multisplit installation groups in the Devices section, including assignment of indoor units to a shared outdoor installation.
- Adds installation-level energy sources so a multisplit can use one cumulative GREE Cloud meter or one Home Assistant energy entity instead of reporting duplicated per-unit consumption.
- Shows on each grouped device that its energy is provided by the assigned split/multisplit installation and identifies the configured shared source.
- Adds an optional shared outdoor-temperature source for an installation, allowing all member units to use the outdoor temperature reported by one selected unit.
- Adds installation groups to configuration export/import, bootstrap/API data and persistence, with validation that prevents duplicate membership and invalid energy/outdoor source references.
- Keeps installation configuration consistent when devices are removed, including removing empty groups and resetting a deleted GREE Cloud energy source safely.
- Adds multi-select energy charts so several devices and/or installations can be displayed together.
- Adds energy period comparison against the previous day, previous equivalent period or previous year.
- Fixes daily energy chart labels so daily aggregation is rendered as calendar dates instead of timestamps such as `02:00`.
- Unifies GREE Cloud validation/error alerts with the alert style used for device errors and removes redundant styling paths.
- Hides empty GREE Cloud status fields such as disabled/disconnected, `0 / 0` and `Unavailable`; status details are shown only when useful data or an actionable error exists.
- Preserves and updates the Polish/English translations used by the new installation, energy and Cloud UI, including the simplified Cloud details label (`Details` / `Szczegóły`).
- Fixes repeated `GREE Cloud MQTT message does not match a registered device` warnings after deleting all Cloud devices by ignoring in-flight stale MQTT frames when no devices are registered and closing the now-unused MQTT session after the last device is unregistered.
- Adds regression coverage ensuring stale MQTT payloads are ignored only when no Cloud devices remain, while unknown-device payloads still fail when registered devices exist.
## 0.14.0
- Adds GREE Cloud as a first-class provider while preserving the existing LAN/UDP transport.
- Adds MQTT/TLS status push, Cloud commands, reconnect/resubscribe lifecycle and safe Cloud diagnostics.
- Adds per-device capabilities and Cloud-specific Devices/Manual Control UI.
- Adds GREE Cloud and Home Assistant cumulative-energy sources, delta conversion, energy history, aggregation, charts and InfluxDB archive support.
- Keeps Local and Cloud entries independent and never performs automatic transport fallback.
## 0.13.10
- Accepts multi-state non-zero values for optional GREE feature flags without dropping an otherwise valid status frame.
- Preserves unit-specific active `Quiet` encodings (`1`, `2` or `3`) and reuses them when Quiet is enabled; legacy units still default to `Quiet=1`.
- Prevents units reporting `Quiet=2` from being marked offline because of parser validation.
## 0.13.9
- Home Assistant add-on with `amd64` + `aarch64` multi-arch OCI image.
- Host networking for GREE UDP discovery and multi-interface/VLAN hosts.
- Home Assistant ingress, watchdog and cold backup support.
- Polish and English documentation consolidated into one `DOCS.md`.