v0.4.5
This commit is contained in:
+8
-1
@@ -1,4 +1,11 @@
|
|||||||
# GREE Controller v0.4.4 - build and validation report
|
# GREE Controller v0.4.5 - build and validation report
|
||||||
|
|
||||||
|
## v0.4.5 compile fix
|
||||||
|
|
||||||
|
- Fixed Rust borrow-checker error `E0502` in `GreeProtocol::poll`.
|
||||||
|
- The bound device key is now cloned into an owned `String` before mutating the `Device` with `apply_status`.
|
||||||
|
- Subsequent full/core/`OutEnvTem` status requests borrow that owned key, so no immutable borrow of `device.key` survives across the mutable device update.
|
||||||
|
|
||||||
|
|
||||||
## Scope
|
## Scope
|
||||||
|
|
||||||
|
|||||||
Generated
+1
-1
@@ -633,7 +633,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "gree-controller"
|
name = "gree-controller"
|
||||||
version = "0.4.4"
|
version = "0.4.5"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"aes",
|
"aes",
|
||||||
"aes-gcm",
|
"aes-gcm",
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "gree-controller"
|
name = "gree-controller"
|
||||||
version = "0.4.4"
|
version = "0.4.5"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
authors = ["GREE Controller contributors"]
|
authors = ["GREE Controller contributors"]
|
||||||
description = "Standalone local GREE HVAC controller with Web UI, SQLite and Home Assistant sensor support"
|
description = "Standalone local GREE HVAC controller with Web UI, SQLite and Home Assistant sensor support"
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
da945a594f47b2b0c326cc0275b10a23cb509f545a1841ba9c57f00086e553ff ./.env.example
|
da945a594f47b2b0c326cc0275b10a23cb509f545a1841ba9c57f00086e553ff ./.env.example
|
||||||
17780b6416a709efae772c37fb1151a35e51e6e8e6f428566d2f3eb308a4c58d ./.gitignore
|
17780b6416a709efae772c37fb1151a35e51e6e8e6f428566d2f3eb308a4c58d ./.gitignore
|
||||||
a0bb10c1f004d885e0f5c5aad7598d88183f6875c29f45b9f86b3b4a78b6b4f3 ./BUILD_REPORT.md
|
efddeff2e9cff44538b518bd76f32fbbccd56f5bc38190f21a9a8ec3e8ca66f7 ./BUILD_REPORT.md
|
||||||
d2593b3f75f1f32de05ab4553c3816d1492cabb4c0aaa157803713a594f75109 ./Cargo.toml
|
9ec04c293b2dc7f61417d70cfe7b405aa119e9a8fbd9be7d05bc9886bc510f5a ./Cargo.toml
|
||||||
19b2943504acb8f8de280f873a8dbec4bb6ebbe3870b158f5655d4fb8c298f5f ./LICENSE
|
19b2943504acb8f8de280f873a8dbec4bb6ebbe3870b158f5655d4fb8c298f5f ./LICENSE
|
||||||
2694b81e62f5c968e4f4bd17c778c96333febd6229c0d70e77cd6d4a64c628f1 ./README.md
|
7ef22d04c07942284f5e5c000f2626341de2032a1e3c95fbb3a9aac5e1b5dcde ./README.md
|
||||||
a4fa9bfee9735ed8ed95ea31456e0cce503d82502ae3f550108ffca51b0f0c3d ./build.rs
|
a4fa9bfee9735ed8ed95ea31456e0cce503d82502ae3f550108ffca51b0f0c3d ./build.rs
|
||||||
177916e2d5476f643e2f8aae31d2ac8a67eee3b0f010bf7898c0d6d232685f74 ./docs/API.md
|
177916e2d5476f643e2f8aae31d2ac8a67eee3b0f010bf7898c0d6d232685f74 ./docs/API.md
|
||||||
234dd200e380a13ecd3e61b4ea455f6f08d64ce89382077dee80684acadb9703 ./docs/HOME_ASSISTANT_MIGRATION.md
|
234dd200e380a13ecd3e61b4ea455f6f08d64ce89382077dee80684acadb9703 ./docs/HOME_ASSISTANT_MIGRATION.md
|
||||||
@@ -18,7 +18,7 @@ fde31b8e020fd36be2d9d9b1e554254f5da8a1cc593240ebb8d78820154dd790 ./home-assista
|
|||||||
e1821b74859bc40773a6ee39e6ccc9650980b62af50d6426b46cdb3e3a90d200 ./home-assistant/custom_components/gree_controller/const.py
|
e1821b74859bc40773a6ee39e6ccc9650980b62af50d6426b46cdb3e3a90d200 ./home-assistant/custom_components/gree_controller/const.py
|
||||||
2d27d7cb67c53e819b99a0302cd0bd339c27e3e2dfc85e07d30c31f505f740b5 ./home-assistant/custom_components/gree_controller/coordinator.py
|
2d27d7cb67c53e819b99a0302cd0bd339c27e3e2dfc85e07d30c31f505f740b5 ./home-assistant/custom_components/gree_controller/coordinator.py
|
||||||
5a96fe8f5c035c34f1339370270cd078056202d09e236dec75735be11de92a7d ./home-assistant/custom_components/gree_controller/entity_map.py
|
5a96fe8f5c035c34f1339370270cd078056202d09e236dec75735be11de92a7d ./home-assistant/custom_components/gree_controller/entity_map.py
|
||||||
7eacd4203d75e946444a09f43c76f756dda7698f92a42251f416c83fd0038d15 ./home-assistant/custom_components/gree_controller/manifest.json
|
429a2729c4b5dd4eb76e789108615484358762e801a82eba88c314be98beed4b ./home-assistant/custom_components/gree_controller/manifest.json
|
||||||
6bddb7b4620021ecd2099a86a77ef5c7f2c2dcd3d07d5db4e7b4c4ce6d3e8c03 ./home-assistant/custom_components/gree_controller/translations/en.json
|
6bddb7b4620021ecd2099a86a77ef5c7f2c2dcd3d07d5db4e7b4c4ce6d3e8c03 ./home-assistant/custom_components/gree_controller/translations/en.json
|
||||||
13f30e2dcdcedbd1b6c3f99c2335e0487108fd72c8e86922368b84f2fa2038ae ./home-assistant/custom_components/gree_controller/translations/pl.json
|
13f30e2dcdcedbd1b6c3f99c2335e0487108fd72c8e86922368b84f2fa2038ae ./home-assistant/custom_components/gree_controller/translations/pl.json
|
||||||
4513070521d3dda0efb0d974a86ba674494cfb2b66fe9e5cac5b1b0430dede97 ./home-assistant/generated/gree_controller_entities.example.json
|
4513070521d3dda0efb0d974a86ba674494cfb2b66fe9e5cac5b1b0430dede97 ./home-assistant/generated/gree_controller_entities.example.json
|
||||||
@@ -26,6 +26,7 @@ e1821b74859bc40773a6ee39e6ccc9650980b62af50d6426b46cdb3e3a90d200 ./home-assista
|
|||||||
74fd82612a159dbbb8f0eca023f90407240c65e766b9642974ea4dc5a3d0ce47 ./lang/en.json
|
74fd82612a159dbbb8f0eca023f90407240c65e766b9642974ea4dc5a3d0ce47 ./lang/en.json
|
||||||
6a8edb6fb158865dfe04b502f848f1672444e0e3af573bcc351484a16538ac15 ./lang/pl.json
|
6a8edb6fb158865dfe04b502f848f1672444e0e3af573bcc351484a16538ac15 ./lang/pl.json
|
||||||
bb89bac237e750e9b1bf73761d7df97a6b81853091615878c03f13d7b6399aa7 ./scripts/README.md
|
bb89bac237e750e9b1bf73761d7df97a6b81853091615878c03f13d7b6399aa7 ./scripts/README.md
|
||||||
|
896caae04468f743d85d011638a0683253d8271c0db8365aea9bcdc646795cf1 ./scripts/__pycache__/generate_ha_migration.cpython-313.pyc
|
||||||
3640e34a1ed5a93be3e96610848b16b8e748d5ca95975ac7e95d38cbf32695a8 ./scripts/common.sh
|
3640e34a1ed5a93be3e96610848b16b8e748d5ca95975ac7e95d38cbf32695a8 ./scripts/common.sh
|
||||||
6403786610ee6d2f628193c25aee0dd058d62e904aa1a31d5f62fdaae0e94b4f ./scripts/configure-gree-network.sh
|
6403786610ee6d2f628193c25aee0dd058d62e904aa1a31d5f62fdaae0e94b4f ./scripts/configure-gree-network.sh
|
||||||
dbb92ddc27b8724faf709983e4feecd3f188052b2cba39daba96d4bc16914df5 ./scripts/dev.sh
|
dbb92ddc27b8724faf709983e4feecd3f188052b2cba39daba96d4bc16914df5 ./scripts/dev.sh
|
||||||
@@ -45,7 +46,7 @@ ae3b496749a3fd723b243d9bea92e5d76249f52814c80359ad9bac53abacb074 ./src/error.rs
|
|||||||
8f4fa47395451b2d9ee6270aae63dd8e7df9fa74182a3429b10aadac1029b090 ./src/main.rs
|
8f4fa47395451b2d9ee6270aae63dd8e7df9fa74182a3429b10aadac1029b090 ./src/main.rs
|
||||||
6b3b70c23e0ffb6a22070be8050a10be34e105a44bc7a7b417f5ce73186a7956 ./src/models.rs
|
6b3b70c23e0ffb6a22070be8050a10be34e105a44bc7a7b417f5ce73186a7956 ./src/models.rs
|
||||||
7fc31fbf8841a073a1544b8c7a6390f1a15b56087486ca0596a8418340fa232a ./src/protocol/crypto.rs
|
7fc31fbf8841a073a1544b8c7a6390f1a15b56087486ca0596a8418340fa232a ./src/protocol/crypto.rs
|
||||||
aeb498eb7533d44930affa443927706ed4febef3050f2ca8b639d7742f8f94b9 ./src/protocol/gree.rs
|
d49dd5a35dc1d59ab440a622517ccb63e93582658a276a9eaccf53f04060f35e ./src/protocol/gree.rs
|
||||||
a910bd9432a393740c0f6fab52bfcb551f0ea756718d66d290fd2610767cf07c ./src/protocol/mod.rs
|
a910bd9432a393740c0f6fab52bfcb551f0ea756718d66d290fd2610767cf07c ./src/protocol/mod.rs
|
||||||
f8e5daeff84a773455ce7ef96bd217f420b46b938d3f695459ced89b8f7c8914 ./src/queries.rs
|
f8e5daeff84a773455ce7ef96bd217f420b46b938d3f695459ced89b8f7c8914 ./src/queries.rs
|
||||||
3bd56018114a7199082e9e9d973107b73cb8259693a80743f4022364cda62095 ./src/state.rs
|
3bd56018114a7199082e9e9d973107b73cb8259693a80743f4022364cda62095 ./src/state.rs
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
Standalone local GREE air-conditioner controller written in Rust. It runs on a regular Linux host or an LXC container and provides a mobile-first web interface without depending on the vendor cloud.
|
Standalone local GREE air-conditioner controller written in Rust. It runs on a regular Linux host or an LXC container and provides a mobile-first web interface without depending on the vendor cloud.
|
||||||
|
|
||||||
Current version: **0.4.4**.
|
Current version: **0.4.5**.
|
||||||
|
|
||||||
## Highlights
|
## Highlights
|
||||||
|
|
||||||
@@ -39,7 +39,7 @@ See [`BUILD_REPORT.md`](BUILD_REPORT.md) for package validation details and [`do
|
|||||||
On Debian, Ubuntu or an LXC container:
|
On Debian, Ubuntu or an LXC container:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
unzip gree-controller-v0.4.4.zip
|
unzip gree-controller-v0.4.5.zip
|
||||||
cd gree-controller
|
cd gree-controller
|
||||||
chmod +x scripts/*.sh
|
chmod +x scripts/*.sh
|
||||||
./scripts/dev.sh
|
./scripts/dev.sh
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"domain": "gree_controller",
|
"domain": "gree_controller",
|
||||||
"name": "GREE Controller",
|
"name": "GREE Controller",
|
||||||
"version": "0.4.4",
|
"version": "0.4.5",
|
||||||
"config_flow": true,
|
"config_flow": true,
|
||||||
"integration_type": "hub",
|
"integration_type": "hub",
|
||||||
"iot_class": "local_polling",
|
"iot_class": "local_polling",
|
||||||
|
|||||||
@@ -296,18 +296,18 @@ impl GreeClient {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub async fn poll(&self, device: &mut Device) -> Result<()> {
|
pub async fn poll(&self, device: &mut Device) -> Result<()> {
|
||||||
let key = device.key.as_deref().ok_or_else(|| anyhow!("device is not bound"))?;
|
let key = device.key.clone().ok_or_else(|| anyhow!("device is not bound"))?;
|
||||||
let full_cols = [
|
let full_cols = [
|
||||||
"Pow","Mod","SetTem","WdSpd","Air","Blo","Health","SwhSlp","Lig",
|
"Pow","Mod","SetTem","WdSpd","Air","Blo","Health","SwhSlp","Lig",
|
||||||
"SwingLfRig","SwUpDn","Quiet","Tur","StHt","TemUn","HeatCoolType",
|
"SwingLfRig","SwUpDn","Quiet","Tur","StHt","TemUn","HeatCoolType",
|
||||||
"TemRec","SvSt","TemSen","CoolSvTem","HeatSvTem","OutEnvTem"
|
"TemRec","SvSt","TemSen","CoolSvTem","HeatSvTem","OutEnvTem"
|
||||||
];
|
];
|
||||||
let core_cols = ["Pow","Mod","SetTem","TemRec","TemUn","TemSen","WdSpd","Lig","SwingLfRig","SwUpDn","Quiet","Tur"];
|
let core_cols = ["Pow","Mod","SetTem","TemRec","TemUn","TemSen","WdSpd","Lig","SwingLfRig","SwUpDn","Quiet","Tur"];
|
||||||
let (response, used_core_fallback) = match self.status_request(device, key, &full_cols).await {
|
let (response, used_core_fallback) = match self.status_request(device, &key, &full_cols).await {
|
||||||
Ok(value) => (value, false),
|
Ok(value) => (value, false),
|
||||||
Err(first) => {
|
Err(first) => {
|
||||||
tracing::debug!(device=%device.id, error=?first, "Full GREE status request failed; retrying core properties");
|
tracing::debug!(device=%device.id, error=?first, "Full GREE status request failed; retrying core properties");
|
||||||
(self.status_request(device, key, &core_cols).await?, true)
|
(self.status_request(device, &key, &core_cols).await?, true)
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
self.apply_status(device, &response)?;
|
self.apply_status(device, &response)?;
|
||||||
@@ -315,7 +315,7 @@ impl GreeClient {
|
|||||||
// Probe it separately after the core fallback so compatible units can contribute
|
// Probe it separately after the core fallback so compatible units can contribute
|
||||||
// their outdoor sensor to history without making the main poll fail.
|
// their outdoor sensor to history without making the main poll fail.
|
||||||
if used_core_fallback {
|
if used_core_fallback {
|
||||||
match self.status_request(device, key, &["OutEnvTem"]).await {
|
match self.status_request(device, &key, &["OutEnvTem"]).await {
|
||||||
Ok(optional) => { let _ = self.apply_status(device, &optional); }
|
Ok(optional) => { let _ = self.apply_status(device, &optional); }
|
||||||
Err(err) => tracing::trace!(device=%device.id, error=?err, "GREE outdoor temperature is not available"),
|
Err(err) => tracing::trace!(device=%device.id, error=?err, "GREE outdoor temperature is not available"),
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user