Display relays status
This commit is contained in:
		@@ -360,3 +360,34 @@ impl Handler<GetDevicesState> for EnergyActor {
 | 
			
		||||
            .collect()
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[derive(serde::Serialize)]
 | 
			
		||||
pub struct ResRelayState {
 | 
			
		||||
    pub id: DeviceRelayID,
 | 
			
		||||
    on: bool,
 | 
			
		||||
    r#for: usize,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// Get the state of all relays
 | 
			
		||||
#[derive(Message)]
 | 
			
		||||
#[rtype(result = "Vec<ResRelayState>")]
 | 
			
		||||
pub struct GetAllRelaysState;
 | 
			
		||||
 | 
			
		||||
impl Handler<GetAllRelaysState> for EnergyActor {
 | 
			
		||||
    type Result = Vec<ResRelayState>;
 | 
			
		||||
 | 
			
		||||
    fn handle(&mut self, _msg: GetAllRelaysState, _ctx: &mut Context<Self>) -> Self::Result {
 | 
			
		||||
        let mut list = vec![];
 | 
			
		||||
 | 
			
		||||
        for d in &self.devices.relays_list() {
 | 
			
		||||
            let state = self.engine.relay_state(d.id);
 | 
			
		||||
            list.push(ResRelayState {
 | 
			
		||||
                id: d.id,
 | 
			
		||||
                on: state.is_on(),
 | 
			
		||||
                r#for: state.state_for(),
 | 
			
		||||
            })
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        list
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -39,6 +39,10 @@ impl RelayState {
 | 
			
		||||
    fn is_off(&self) -> bool {
 | 
			
		||||
        !self.on
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    pub fn state_for(&self) -> usize {
 | 
			
		||||
        (time_secs() - self.since as u64) as usize
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type RelaysState = HashMap<DeviceRelayID, RelayState>;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user