Ready to implement update logic
This commit is contained in:
		@@ -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);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user