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>;
 | 
			
		||||
 
 | 
			
		||||
@@ -185,6 +185,10 @@ pub async fn secure_server(energy_actor: EnergyActorAddr) -> anyhow::Result<()>
 | 
			
		||||
                "/web_api/relay/{id}",
 | 
			
		||||
                web::delete().to(relays_controller::delete),
 | 
			
		||||
            )
 | 
			
		||||
            .route(
 | 
			
		||||
                "/web_api/relays/status",
 | 
			
		||||
                web::get().to(relays_controller::get_status_all),
 | 
			
		||||
            )
 | 
			
		||||
            // Devices API
 | 
			
		||||
            .route(
 | 
			
		||||
                "/devices_api/utils/time",
 | 
			
		||||
 
 | 
			
		||||
@@ -93,3 +93,10 @@ pub async fn delete(actor: WebEnergyActor, path: web::Path<RelayIDInPath>) -> Ht
 | 
			
		||||
 | 
			
		||||
    Ok(HttpResponse::Accepted().finish())
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// Get the status of all relays
 | 
			
		||||
pub async fn get_status_all(actor: WebEnergyActor) -> HttpResult {
 | 
			
		||||
    let list = actor.send(energy_actor::GetAllRelaysState).await?;
 | 
			
		||||
 | 
			
		||||
    Ok(HttpResponse::Ok().json(list))
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user