From c1c01058d85698b9714e00d3d713acf35c6c0365 Mon Sep 17 00:00:00 2001 From: Pierre HUBERT Date: Tue, 10 Sep 2024 19:55:51 +0200 Subject: [PATCH] Ready to implement update logic --- central_backend/src/energy/engine.rs | 39 ++++++++++++++++------------ 1 file changed, 22 insertions(+), 17 deletions(-) diff --git a/central_backend/src/energy/engine.rs b/central_backend/src/energy/engine.rs index 570cd12..f186210 100644 --- a/central_backend/src/energy/engine.rs +++ b/central_backend/src/energy/engine.rs @@ -21,7 +21,7 @@ impl DeviceState { } #[derive(Default, Clone)] -struct RelayState { +pub struct RelayState { on: bool, since: usize, } @@ -34,19 +34,12 @@ pub struct EnergyEngine { impl EnergyEngine { pub fn device_state(&mut self, dev_id: &DeviceId) -> &mut DeviceState { - if !self.devices_state.contains_key(dev_id) { - self.devices_state - .insert(dev_id.clone(), Default::default()); - } - + self.devices_state.entry(dev_id.clone()).or_default(); self.devices_state.get_mut(dev_id).unwrap() } pub fn relay_state(&mut self, relay_id: DeviceRelayID) -> &mut RelayState { - if !self.relays_state.contains_key(&relay_id) { - self.relays_state.insert(relay_id, Default::default()); - } - + self.relays_state.entry(relay_id).or_default(); self.relays_state.get_mut(&relay_id).unwrap() } @@ -65,19 +58,31 @@ impl EnergyEngine { } pub fn refresh(&mut self, curr_consumption: EnergyConsumption, devices: &[Device]) { + // TODO : force creation of missing relays state + let new_relays_state = self.relays_state.clone(); - // Forcefully turn off relays that belongs to offline devices + // TODO Forcefully turn off relays that belongs to offline devices - // Forcefully turn off relays with dependency conflicts + // TODO Forcefully turn off relays with dependency conflicts - // Virtually turn off all relays that can be stopped + // TODO Virtually turn off all relays that can be stopped - // Turn on relays based on priority / dependencies + // TODO Turn on relays based on priority / dependencies - // Turn on relays with running constraints + // TODO Turn on relays with running constraints - // Commit changes - self.print_summary(curr_consumption, devices); // TODO :replace + // TODO Commit changes + + for (id, new_state) in &new_relays_state { + let curr_state = self.relay_state(*id); + if curr_state.on != new_state.on { + curr_state.on = new_state.on; + curr_state.since = time_secs() as usize; + } + log::info!("Changing state of {id:?}"); + } + + self.print_summary(curr_consumption, devices); } }