This commit is contained in:
Mateusz Gruszczyński
2026-08-27 23:01:18 +02:00
parent 6572ff368b
commit 7465de4b55
7 changed files with 40 additions and 18 deletions
+9 -7
View File
@@ -1235,15 +1235,16 @@ async fn control_zones(state: &AppState) -> Result<()> {
// House "off" means the smart thermostat does not control inherited zones.
// A zone explicitly switched to heat/cool remains independent and may still run.
let effective_mode = if zone.inherit_house_mode {
settings.house_mode.as_str()
let effective_mode_owned = if zone.inherit_house_mode {
settings.house_mode.clone()
} else {
zone.mode.as_str()
zone.mode.clone()
};
zone.effective_mode = effective_mode.to_string();
zone.effective_mode = effective_mode_owned.clone();
let ownership_blocked_by_group = zone.local_thermostat_power != Some(true)
&& groups.iter().any(|group| !group.power_enabled && group.zone_ids.iter().any(|zone_id| zone_id == &zone.id));
refresh_control_ownership(&mut zone, settings.house_power_enabled, ownership_blocked_by_group);
let effective_mode = effective_mode_owned.as_str();
let previous_source = zone.control_temperature_source.clone();
// Never feed the thermostat a cached GREE temperature after any communication
@@ -2030,14 +2031,15 @@ pub async fn build_control_plan(state: &AppState) -> Result<ControlPlan, AppErro
for mut zone in zones {
let device = devices.iter().find(|item| item.id == zone.device_id);
let configured_effective_mode = if zone.inherit_house_mode {
settings.house_mode.as_str()
let configured_effective_mode_owned = if zone.inherit_house_mode {
settings.house_mode.clone()
} else {
zone.mode.as_str()
zone.mode.clone()
};
let blocked_by_group = zone.local_thermostat_power != Some(true)
&& groups.iter().any(|group| !group.power_enabled && group.zone_ids.iter().any(|zone_id| zone_id == &zone.id));
refresh_control_ownership(&mut zone, settings.house_power_enabled, blocked_by_group);
let configured_effective_mode = configured_effective_mode_owned.as_str();
let manual_device_mode = device.map(|item| if item.power { item.mode.as_str() } else { "off" });
let effective_mode = if zone.device_manual_override {
manual_device_mode.unwrap_or(configured_effective_mode)