diff --git a/FILE_MANIFEST.sha256 b/FILE_MANIFEST.sha256 index b773bfd..205ce66 100644 --- a/FILE_MANIFEST.sha256 +++ b/FILE_MANIFEST.sha256 @@ -3,8 +3,8 @@ a4ec3874a2e3ab1bad28fb40bb620f7b01f64d01ad9b699306bf70ada31227db ./.gitignore c3c16d0c76fbb80ce5752b28a1736177940670b10f44235eac5997c4e195c634 ./Cargo.lock ad513e247ab5dbed3c91a6463cf410cf1a4ac73c0b30422bad40afb93cee0159 ./Cargo.toml 19b2943504acb8f8de280f873a8dbec4bb6ebbe3870b158f5655d4fb8c298f5f ./LICENSE -65a1319962dc7a1e7ac0db1a00219b86fae87492a30d38f4df2c896e213b7c83 ./README.md -8505dda3503e63f0958898ccb2ea9321f9e5d0ac64b2d25782d952dc2105b3e4 ./SOURCE_MANIFEST.sha256 +db052d6c978b067a31d752f293fc8c02702d50137ba7b84bce87371089972f11 ./README.md +84bae184c72909d968eeece0a092dbb4fe7a8a071927b29cc188ac6fb6a450f0 ./SOURCE_MANIFEST.sha256 29e9821e5ed216ea3565dd6d8bc0b174ed3cf9fa72c4ccebbfa99e98db3ad8f9 ./build.rs 8a96630c36cfac5c392837c8872b20d39d72fe3ec99c7c9e09ec78f2228fd262 ./docs/API.md 58b79297607303151c1de2da74344cd4f6277bc53d80ebe04ed4567d906c963b ./docs/FLOW.md @@ -13,10 +13,10 @@ c65aa543d2e99f8f7d52736307b07ebd182597d80124661d53a16bb23f6f1118 ./ha-addon/.en 0993076ca45b6d31859680835204cdc111b3f9bdbf460d50b4efec56cd5e685b ./ha-addon/Dockerfile adf7ff248d782a3b1cba82b8789c57b6849ddaaaf5fbc108af75e18b1534a885 ./ha-addon/README.md dd9291b12afade6fc20d66e80a5513251270e18e4c265260b2bbbe393a5a94c4 ./ha-addon/build.sh -10b6140e75f2641e6d196db16e2612c691666db64e3ca1cd89bce8eabc991296 ./ha-addon/home-assistant/README.md +4061846cec4d829e4101b4021df7f07dc2e0293ccfd11e91589f49733ec7c5b4 ./ha-addon/home-assistant/README.md f8e8559fe10fe523ac5bc9aac25c6e26e862f679d502e8f3c39f38a0a8e40911 ./ha-addon/home-assistant/custom_components/gree_controller/__init__.py 3f6ef15ef58456376ac53fde7cace1ef359d6a6f7a64c5b575ad77ea6e55ccc4 ./ha-addon/home-assistant/custom_components/gree_controller/api.py -3072d7caea53f46bf68314a59e2a99779675869d2ffcd472b2bc2e188140ec0f ./ha-addon/home-assistant/custom_components/gree_controller/climate.py +da2a0a9390ab75cef150cd281bc329fa409d0d28f51382b36bd8de3a73325c16 ./ha-addon/home-assistant/custom_components/gree_controller/climate.py 5e4aef2143e81bedb5a15dd4be5c71b64a3ab448ec6d33a20851edd098e5f529 ./ha-addon/home-assistant/custom_components/gree_controller/config_flow.py b7f0873109c52be9d7f09bea3dffc416103c50085e1f0680d11661a969479898 ./ha-addon/home-assistant/custom_components/gree_controller/const.py 6509286c7b7de638dcc5d40ce53181e65d1eddc5dc36a13306dc6d87220fedbb ./ha-addon/home-assistant/custom_components/gree_controller/coordinator.py @@ -27,10 +27,10 @@ c52a484b671ce738ecc00228a1db19a5d703f69ab27530c2896a5c2ae3b4a96f ./ha-addon/hom 39c4309001b75abb56234f05662bc06e077054986876f1927937edbce528ec95 ./ha-addon/home-assistant/custom_components/gree_controller/select.py cca65482e36d48035aca178121a378fe7d578d600acff267ae81a6399c0da653 ./ha-addon/home-assistant/custom_components/gree_controller/sensor.py 338a42662e77f91215150851e55bbd39a5c77f5612cc77f3e037c06a6e6bdadb ./ha-addon/home-assistant/custom_components/gree_controller/switch.py -6bddb7b4620021ecd2099a86a77ef5c7f2c2dcd3d07d5db4e7b4c4ce6d3e8c03 ./ha-addon/home-assistant/custom_components/gree_controller/translations/en.json -13f30e2dcdcedbd1b6c3f99c2335e0487108fd72c8e86922368b84f2fa2038ae ./ha-addon/home-assistant/custom_components/gree_controller/translations/pl.json +a745cc458c235158d5d70b6a33d8000fd8b40ff93bfe2f2796af0f4b3a9eef9b ./ha-addon/home-assistant/custom_components/gree_controller/translations/en.json +50b7d6fe6329ad4ea6bee9612ab141c2f73f8382fcc2af0bb076a8e8d4dd4465 ./ha-addon/home-assistant/custom_components/gree_controller/translations/pl.json c5fc5c87273d82d2834a0a5a365c821a416413ed509613441e24e4dc3507c4d2 ./ha-addon/home-assistant/generated/gree_controller_entities.example.json -4d0b518f7219de51cc71bfa2079d82b26d662d81e75a9596d2a0cc92e92a29e7 ./ha-addon/repository/gree-controller/CHANGELOG.md +b3ee553cc7dbc68c3bb7cdd6dbb9b5ca8646df113cb499ca5bd9d3d0e380db73 ./ha-addon/repository/gree-controller/CHANGELOG.md 1b5599195329cc3e643c23aa1caadcec80f133e8e515eec7d92b9f3cbda5b80b ./ha-addon/repository/gree-controller/DOCS.md c3db302f38d26dc9f8caf37a1a8a07a1334cc07ae301d452f2940a5ec5915719 ./ha-addon/repository/gree-controller/README.md f7e5325e34b2785d0d0bea657c882202d7557d313cbdc464dcdb91f702d36391 ./ha-addon/repository/gree-controller/config.yaml diff --git a/README.md b/README.md index 9a3790c..692a200 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ Self-hosted controller for GREE-compatible air conditioners with a local Web UI, **Version: 0.15.0** -Version 0.15.0 adds full vertical/horizontal louver positioning across direct control, thermostat views, automations, Visual Flow and Home Assistant, while keeping legacy boolean swing payloads compatible. Direct add-on access also shows an invalid-token error only after an explicit token submission. +Version 0.15.0 adds full vertical/horizontal louver positioning across direct control, thermostat views, automations, Visual Flow and Home Assistant, while keeping legacy boolean swing payloads compatible. Direct add-on access also shows an invalid-token error only after an explicit token submission. The bundled Home Assistant climate cards also localize louver/fan/profile labels without changing their stable technical service values. > [Full API reference](docs/API.md) — authentication, every endpoint, request bodies, response models, WebSocket events and examples. diff --git a/SOURCE_MANIFEST.sha256 b/SOURCE_MANIFEST.sha256 index 0b2d9c5..9628d02 100644 --- a/SOURCE_MANIFEST.sha256 +++ b/SOURCE_MANIFEST.sha256 @@ -3,7 +3,7 @@ a4ec3874a2e3ab1bad28fb40bb620f7b01f64d01ad9b699306bf70ada31227db ./.gitignore c3c16d0c76fbb80ce5752b28a1736177940670b10f44235eac5997c4e195c634 ./Cargo.lock ad513e247ab5dbed3c91a6463cf410cf1a4ac73c0b30422bad40afb93cee0159 ./Cargo.toml 19b2943504acb8f8de280f873a8dbec4bb6ebbe3870b158f5655d4fb8c298f5f ./LICENSE -65a1319962dc7a1e7ac0db1a00219b86fae87492a30d38f4df2c896e213b7c83 ./README.md +db052d6c978b067a31d752f293fc8c02702d50137ba7b84bce87371089972f11 ./README.md 29e9821e5ed216ea3565dd6d8bc0b174ed3cf9fa72c4ccebbfa99e98db3ad8f9 ./build.rs 8a96630c36cfac5c392837c8872b20d39d72fe3ec99c7c9e09ec78f2228fd262 ./docs/API.md 58b79297607303151c1de2da74344cd4f6277bc53d80ebe04ed4567d906c963b ./docs/FLOW.md @@ -12,10 +12,10 @@ c65aa543d2e99f8f7d52736307b07ebd182597d80124661d53a16bb23f6f1118 ./ha-addon/.en 0993076ca45b6d31859680835204cdc111b3f9bdbf460d50b4efec56cd5e685b ./ha-addon/Dockerfile adf7ff248d782a3b1cba82b8789c57b6849ddaaaf5fbc108af75e18b1534a885 ./ha-addon/README.md dd9291b12afade6fc20d66e80a5513251270e18e4c265260b2bbbe393a5a94c4 ./ha-addon/build.sh -10b6140e75f2641e6d196db16e2612c691666db64e3ca1cd89bce8eabc991296 ./ha-addon/home-assistant/README.md +4061846cec4d829e4101b4021df7f07dc2e0293ccfd11e91589f49733ec7c5b4 ./ha-addon/home-assistant/README.md f8e8559fe10fe523ac5bc9aac25c6e26e862f679d502e8f3c39f38a0a8e40911 ./ha-addon/home-assistant/custom_components/gree_controller/__init__.py 3f6ef15ef58456376ac53fde7cace1ef359d6a6f7a64c5b575ad77ea6e55ccc4 ./ha-addon/home-assistant/custom_components/gree_controller/api.py -3072d7caea53f46bf68314a59e2a99779675869d2ffcd472b2bc2e188140ec0f ./ha-addon/home-assistant/custom_components/gree_controller/climate.py +da2a0a9390ab75cef150cd281bc329fa409d0d28f51382b36bd8de3a73325c16 ./ha-addon/home-assistant/custom_components/gree_controller/climate.py 5e4aef2143e81bedb5a15dd4be5c71b64a3ab448ec6d33a20851edd098e5f529 ./ha-addon/home-assistant/custom_components/gree_controller/config_flow.py b7f0873109c52be9d7f09bea3dffc416103c50085e1f0680d11661a969479898 ./ha-addon/home-assistant/custom_components/gree_controller/const.py 6509286c7b7de638dcc5d40ce53181e65d1eddc5dc36a13306dc6d87220fedbb ./ha-addon/home-assistant/custom_components/gree_controller/coordinator.py @@ -26,10 +26,10 @@ c52a484b671ce738ecc00228a1db19a5d703f69ab27530c2896a5c2ae3b4a96f ./ha-addon/hom 39c4309001b75abb56234f05662bc06e077054986876f1927937edbce528ec95 ./ha-addon/home-assistant/custom_components/gree_controller/select.py cca65482e36d48035aca178121a378fe7d578d600acff267ae81a6399c0da653 ./ha-addon/home-assistant/custom_components/gree_controller/sensor.py 338a42662e77f91215150851e55bbd39a5c77f5612cc77f3e037c06a6e6bdadb ./ha-addon/home-assistant/custom_components/gree_controller/switch.py -6bddb7b4620021ecd2099a86a77ef5c7f2c2dcd3d07d5db4e7b4c4ce6d3e8c03 ./ha-addon/home-assistant/custom_components/gree_controller/translations/en.json -13f30e2dcdcedbd1b6c3f99c2335e0487108fd72c8e86922368b84f2fa2038ae ./ha-addon/home-assistant/custom_components/gree_controller/translations/pl.json +a745cc458c235158d5d70b6a33d8000fd8b40ff93bfe2f2796af0f4b3a9eef9b ./ha-addon/home-assistant/custom_components/gree_controller/translations/en.json +50b7d6fe6329ad4ea6bee9612ab141c2f73f8382fcc2af0bb076a8e8d4dd4465 ./ha-addon/home-assistant/custom_components/gree_controller/translations/pl.json c5fc5c87273d82d2834a0a5a365c821a416413ed509613441e24e4dc3507c4d2 ./ha-addon/home-assistant/generated/gree_controller_entities.example.json -4d0b518f7219de51cc71bfa2079d82b26d662d81e75a9596d2a0cc92e92a29e7 ./ha-addon/repository/gree-controller/CHANGELOG.md +b3ee553cc7dbc68c3bb7cdd6dbb9b5ca8646df113cb499ca5bd9d3d0e380db73 ./ha-addon/repository/gree-controller/CHANGELOG.md 1b5599195329cc3e643c23aa1caadcec80f133e8e515eec7d92b9f3cbda5b80b ./ha-addon/repository/gree-controller/DOCS.md c3db302f38d26dc9f8caf37a1a8a07a1334cc07ae301d452f2940a5ec5915719 ./ha-addon/repository/gree-controller/README.md f7e5325e34b2785d0d0bea657c882202d7557d313cbdc464dcdb91f702d36391 ./ha-addon/repository/gree-controller/config.yaml diff --git a/ha-addon/home-assistant/README.md b/ha-addon/home-assistant/README.md index 2c41e3e..169eebf 100644 --- a/ha-addon/home-assistant/README.md +++ b/ha-addon/home-assistant/README.md @@ -8,7 +8,7 @@ ha-addon/home-assistant/custom_components/gree_controller/ It creates HA entities for physical units, thermostat zones, whole-house controls and climate groups, while sending every command to the standalone Rust controller. Home Assistant therefore remains a client and UDP/AES GREE communication stays outside HA. -The climate proxy supports power/turn on/off, HVAC modes, target temperature, fan mode, granular vertical louver positions and granular horizontal louver positions. `off`/`on` remain the first two swing modes for compatibility, followed by fixed positions and the supported vertical partial-swing ranges. +The climate proxy supports power/turn on/off, HVAC modes, target temperature, fan mode, granular vertical louver positions and granular horizontal louver positions. `off`/`on` remain the first two swing modes for compatibility, followed by fixed positions and the supported vertical partial-swing ranges. The card UI translates those modes using the Home Assistant language while the underlying mode IDs (for example `fixed_upper`) remain unchanged for services, scripts and automations. Automation plan: diff --git a/ha-addon/home-assistant/custom_components/gree_controller/climate.py b/ha-addon/home-assistant/custom_components/gree_controller/climate.py index 4f43af6..650eb1a 100644 --- a/ha-addon/home-assistant/custom_components/gree_controller/climate.py +++ b/ha-addon/home-assistant/custom_components/gree_controller/climate.py @@ -160,6 +160,7 @@ class GreeControllerClimate(CoordinatorEntity[GreeControllerCoordinator], Climat """Home Assistant climate entity controlled through the Rust service.""" _attr_has_entity_name = True + _attr_translation_key = "direct_control" _attr_temperature_unit = UnitOfTemperature.CELSIUS _attr_min_temp = 8.0 _attr_max_temp = 30.0 @@ -299,6 +300,7 @@ class GreeControllerZoneClimate(CoordinatorEntity[GreeControllerCoordinator], Cl """Full climate entity for a controller thermostat zone.""" _attr_has_entity_name = True + _attr_translation_key = "zone_thermostat" _attr_name = "Thermostat" _attr_temperature_unit = UnitOfTemperature.CELSIUS _attr_min_temp = 8.0 diff --git a/ha-addon/home-assistant/custom_components/gree_controller/translations/en.json b/ha-addon/home-assistant/custom_components/gree_controller/translations/en.json index 898f7a1..26bb1dd 100644 --- a/ha-addon/home-assistant/custom_components/gree_controller/translations/en.json +++ b/ha-addon/home-assistant/custom_components/gree_controller/translations/en.json @@ -18,5 +18,91 @@ "abort": { "already_configured": "GREE Controller is already configured" } + }, + "entity": { + "climate": { + "direct_control": { + "name": "Direct control", + "state_attributes": { + "fan_mode": { + "state": { + "auto": "Auto", + "low": "Low", + "medium_low": "Medium-low", + "medium": "Medium", + "medium_high": "Medium-high", + "high": "High" + } + }, + "swing_mode": { + "state": { + "off": "Off", + "on": "Full range (Auto)", + "fixed_upper": "Fixed: Top", + "fixed_upper_middle": "Fixed: Upper-middle", + "fixed_middle": "Fixed: Middle", + "fixed_lower_middle": "Fixed: Lower-middle", + "fixed_lower": "Fixed: Bottom", + "swing_upper": "Swing: Top", + "swing_upper_middle": "Swing: Upper-middle", + "swing_middle": "Swing: Middle", + "swing_lower_middle": "Swing: Lower-middle", + "swing_lower": "Swing: Bottom" + } + }, + "swing_horizontal_mode": { + "state": { + "off": "Off", + "on": "Full range (Auto)", + "fixed_left": "Fixed: Left", + "fixed_left_middle": "Fixed: Left-middle", + "fixed_middle": "Fixed: Middle", + "fixed_right_middle": "Fixed: Middle-right", + "fixed_right": "Fixed: Right" + } + } + } + }, + "zone_thermostat": { + "name": "Thermostat", + "state_attributes": { + "preset_mode": { + "state": { + "auto": "Auto schedule", + "comfort": "Comfort", + "sleep": "Sleep", + "away": "Away" + } + }, + "swing_mode": { + "state": { + "off": "Off", + "on": "Full range (Auto)", + "fixed_upper": "Fixed: Top", + "fixed_upper_middle": "Fixed: Upper-middle", + "fixed_middle": "Fixed: Middle", + "fixed_lower_middle": "Fixed: Lower-middle", + "fixed_lower": "Fixed: Bottom", + "swing_upper": "Swing: Top", + "swing_upper_middle": "Swing: Upper-middle", + "swing_middle": "Swing: Middle", + "swing_lower_middle": "Swing: Lower-middle", + "swing_lower": "Swing: Bottom" + } + }, + "swing_horizontal_mode": { + "state": { + "off": "Off", + "on": "Full range (Auto)", + "fixed_left": "Fixed: Left", + "fixed_left_middle": "Fixed: Left-middle", + "fixed_middle": "Fixed: Middle", + "fixed_right_middle": "Fixed: Middle-right", + "fixed_right": "Fixed: Right" + } + } + } + } + } } } diff --git a/ha-addon/home-assistant/custom_components/gree_controller/translations/pl.json b/ha-addon/home-assistant/custom_components/gree_controller/translations/pl.json index bf877a9..d998502 100644 --- a/ha-addon/home-assistant/custom_components/gree_controller/translations/pl.json +++ b/ha-addon/home-assistant/custom_components/gree_controller/translations/pl.json @@ -18,5 +18,91 @@ "abort": { "already_configured": "GREE Controller jest już skonfigurowany" } + }, + "entity": { + "climate": { + "direct_control": { + "name": "Sterowanie bezpośrednie", + "state_attributes": { + "fan_mode": { + "state": { + "auto": "Automatyczny", + "low": "Niski", + "medium_low": "Średnio-niski", + "medium": "Średni", + "medium_high": "Średnio-wysoki", + "high": "Wysoki" + } + }, + "swing_mode": { + "state": { + "off": "Wyłączony", + "on": "Pełny zakres (Auto)", + "fixed_upper": "Stała: Góra", + "fixed_upper_middle": "Stała: Środek-góra", + "fixed_middle": "Stała: Środek", + "fixed_lower_middle": "Stała: Środek-dół", + "fixed_lower": "Stała: Dół", + "swing_upper": "Ruch: Góra", + "swing_upper_middle": "Ruch: Środek-góra", + "swing_middle": "Ruch: Środek", + "swing_lower_middle": "Ruch: Środek-dół", + "swing_lower": "Ruch: Dół" + } + }, + "swing_horizontal_mode": { + "state": { + "off": "Wyłączony", + "on": "Pełny zakres (Auto)", + "fixed_left": "Stała: Lewo", + "fixed_left_middle": "Stała: Lewo-środek", + "fixed_middle": "Stała: Środek", + "fixed_right_middle": "Stała: Środek-prawo", + "fixed_right": "Stała: Prawo" + } + } + } + }, + "zone_thermostat": { + "name": "Termostat", + "state_attributes": { + "preset_mode": { + "state": { + "auto": "Harmonogram (Auto)", + "comfort": "Komfort", + "sleep": "Sen", + "away": "Poza domem" + } + }, + "swing_mode": { + "state": { + "off": "Wyłączony", + "on": "Pełny zakres (Auto)", + "fixed_upper": "Stała: Góra", + "fixed_upper_middle": "Stała: Środek-góra", + "fixed_middle": "Stała: Środek", + "fixed_lower_middle": "Stała: Środek-dół", + "fixed_lower": "Stała: Dół", + "swing_upper": "Ruch: Góra", + "swing_upper_middle": "Ruch: Środek-góra", + "swing_middle": "Ruch: Środek", + "swing_lower_middle": "Ruch: Środek-dół", + "swing_lower": "Ruch: Dół" + } + }, + "swing_horizontal_mode": { + "state": { + "off": "Wyłączony", + "on": "Pełny zakres (Auto)", + "fixed_left": "Stała: Lewo", + "fixed_left_middle": "Stała: Lewo-środek", + "fixed_middle": "Stała: Środek", + "fixed_right_middle": "Stała: Środek-prawo", + "fixed_right": "Stała: Prawo" + } + } + } + } + } } } diff --git a/ha-addon/repository/gree-controller/CHANGELOG.md b/ha-addon/repository/gree-controller/CHANGELOG.md index 1c6129f..dc331d1 100644 --- a/ha-addon/repository/gree-controller/CHANGELOG.md +++ b/ha-addon/repository/gree-controller/CHANGELOG.md @@ -5,6 +5,7 @@ - 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