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